Merge tag 'for-linus-4.5-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull xen updates from David Vrabel: "Xen features and fixes for 4.5-rc0: - Stolen ticks and PV wallclock support for arm/arm64 - Add grant copy ioctl to gntdev device" * tag 'for-linus-4.5-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: xen/gntdev: add ioctl for grant copy x86/xen: don't reset vcpu_info on a cancelled suspend xen/gntdev: constify mmu_notifier_ops structures xen/grant-table: constify gnttab_ops structure xen/time: use READ_ONCE xen/x86: convert remaining timespec to timespec64 in xen_pvclock_gtod_notify xen/x86: support XENPF_settime64 xen/arm: set the system time in Xen via the XENPF_settime64 hypercall xen/arm: introduce xen_read_wallclock arm: extend pvclock_wall_clock with sec_hi xen: introduce XENPF_settime64 xen/arm: introduce HYPERVISOR_platform_op on arm and arm64 xen: rename dom0_op to platform_op xen/arm: account for stolen ticks arm64: introduce CONFIG_PARAVIRT, PARAVIRT_TIME_ACCOUNTING and pv_time_ops arm: introduce CONFIG_PARAVIRT, PARAVIRT_TIME_ACCOUNTING and pv_time_ops missing include asm/paravirt.h in cputime.c xen: move xen_setup_runstate_info and get_runstate_snapshot to drivers/xen/time.c
This commit is contained in:
@@ -144,6 +144,56 @@ struct ioctl_gntdev_unmap_notify {
|
||||
__u32 event_channel_port;
|
||||
};
|
||||
|
||||
struct gntdev_grant_copy_segment {
|
||||
union {
|
||||
void __user *virt;
|
||||
struct {
|
||||
grant_ref_t ref;
|
||||
__u16 offset;
|
||||
domid_t domid;
|
||||
} foreign;
|
||||
} source, dest;
|
||||
__u16 len;
|
||||
|
||||
__u16 flags; /* GNTCOPY_* */
|
||||
__s16 status; /* GNTST_* */
|
||||
};
|
||||
|
||||
/*
|
||||
* Copy between grant references and local buffers.
|
||||
*
|
||||
* The copy is split into @count @segments, each of which can copy
|
||||
* to/from one grant reference.
|
||||
*
|
||||
* Each segment is similar to struct gnttab_copy in the hypervisor ABI
|
||||
* except the local buffer is specified using a virtual address
|
||||
* (instead of a GFN and offset).
|
||||
*
|
||||
* The local buffer may cross a Xen page boundary -- the driver will
|
||||
* split segments into multiple ops if required.
|
||||
*
|
||||
* Returns 0 if all segments have been processed and @status in each
|
||||
* segment is valid. Note that one or more segments may have failed
|
||||
* (status != GNTST_okay).
|
||||
*
|
||||
* If the driver had to split a segment into two or more ops, @status
|
||||
* includes the status of the first failed op for that segment (or
|
||||
* GNTST_okay if all ops were successful).
|
||||
*
|
||||
* If -1 is returned, the status of all segments is undefined.
|
||||
*
|
||||
* EINVAL: A segment has local buffers for both source and
|
||||
* destination.
|
||||
* EINVAL: A segment crosses the boundary of a foreign page.
|
||||
* EFAULT: A segment's local buffer is not accessible.
|
||||
*/
|
||||
#define IOCTL_GNTDEV_GRANT_COPY \
|
||||
_IOC(_IOC_NONE, 'G', 8, sizeof(struct ioctl_gntdev_grant_copy))
|
||||
struct ioctl_gntdev_grant_copy {
|
||||
unsigned int count;
|
||||
struct gntdev_grant_copy_segment __user *segments;
|
||||
};
|
||||
|
||||
/* Clear (set to zero) the byte specified by index */
|
||||
#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
|
||||
/* Send an interrupt on the indicated event channel */
|
||||
|
Reference in New Issue
Block a user