Merge branch 'kvm-amd-fixes' into HEAD
This commit is contained in:
commit
4aef2ec902
4723 changed files with 185478 additions and 69840 deletions
|
|
@ -36,12 +36,10 @@ struct btrfs_ioctl_vol_args {
|
|||
#define BTRFS_DEVICE_PATH_NAME_MAX 1024
|
||||
#define BTRFS_SUBVOL_NAME_MAX 4039
|
||||
|
||||
/*
|
||||
* Deprecated since 5.7:
|
||||
*
|
||||
* BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
|
||||
*/
|
||||
|
||||
#ifndef __KERNEL__
|
||||
/* Deprecated since 5.7 */
|
||||
# define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
|
||||
#endif
|
||||
#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
|
||||
#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@
|
|||
#ifndef __UAPI_CORESIGHT_STM_H_
|
||||
#define __UAPI_CORESIGHT_STM_H_
|
||||
|
||||
#define STM_FLAG_TIMESTAMPED BIT(3)
|
||||
#define STM_FLAG_GUARANTEED BIT(7)
|
||||
#include <linux/const.h>
|
||||
|
||||
#define STM_FLAG_TIMESTAMPED _BITUL(3)
|
||||
#define STM_FLAG_GUARANTEED _BITUL(7)
|
||||
|
||||
/*
|
||||
* The CoreSight STM supports guaranteed and invariant timing
|
||||
|
|
|
|||
|
|
@ -45,13 +45,13 @@ struct dlm_lock_params {
|
|||
void __user *bastaddr;
|
||||
struct dlm_lksb __user *lksb;
|
||||
char lvb[DLM_USER_LVB_LEN];
|
||||
char name[0];
|
||||
char name[];
|
||||
};
|
||||
|
||||
struct dlm_lspace_params {
|
||||
__u32 flags;
|
||||
__u32 minor;
|
||||
char name[0];
|
||||
char name[];
|
||||
};
|
||||
|
||||
struct dlm_purge_params {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,11 @@
|
|||
#define FAN_OPEN_PERM 0x00010000 /* File open in perm check */
|
||||
#define FAN_ACCESS_PERM 0x00020000 /* File accessed in perm check */
|
||||
#define FAN_OPEN_EXEC_PERM 0x00040000 /* File open/exec in perm check */
|
||||
#define FAN_DIR_MODIFY 0x00080000 /* Directory entry was modified */
|
||||
|
||||
#define FAN_ONDIR 0x40000000 /* event occurred against dir */
|
||||
#define FAN_EVENT_ON_CHILD 0x08000000 /* Interested in child events */
|
||||
|
||||
#define FAN_EVENT_ON_CHILD 0x08000000 /* interested in child events */
|
||||
#define FAN_ONDIR 0x40000000 /* Event occurred against dir */
|
||||
|
||||
/* helper events */
|
||||
#define FAN_CLOSE (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */
|
||||
|
|
@ -116,6 +117,7 @@ struct fanotify_event_metadata {
|
|||
};
|
||||
|
||||
#define FAN_EVENT_INFO_TYPE_FID 1
|
||||
#define FAN_EVENT_INFO_TYPE_DFID_NAME 2
|
||||
|
||||
/* Variable length info record following event metadata */
|
||||
struct fanotify_event_info_header {
|
||||
|
|
@ -124,7 +126,12 @@ struct fanotify_event_info_header {
|
|||
__u16 len;
|
||||
};
|
||||
|
||||
/* Unique file identifier info record */
|
||||
/*
|
||||
* Unique file identifier info record. This is used both for
|
||||
* FAN_EVENT_INFO_TYPE_FID records and for FAN_EVENT_INFO_TYPE_DFID_NAME
|
||||
* records. For FAN_EVENT_INFO_TYPE_DFID_NAME there is additionally a null
|
||||
* terminated name immediately after the file handle.
|
||||
*/
|
||||
struct fanotify_event_info_fid {
|
||||
struct fanotify_event_info_header hdr;
|
||||
__kernel_fsid_t fsid;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ struct fiemap {
|
|||
__u32 fm_mapped_extents;/* number of extents that were mapped (out) */
|
||||
__u32 fm_extent_count; /* size of fm_extents array (in) */
|
||||
__u32 fm_reserved;
|
||||
struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
|
||||
struct fiemap_extent fm_extents[]; /* array of mapped extents (out) */
|
||||
};
|
||||
|
||||
#define FIEMAP_MAX_OFFSET (~0ULL)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* struct gpiochip_info - Information about a certain GPIO chip
|
||||
* @name: the Linux kernel name of this GPIO chip
|
||||
* @label: a functional name for this GPIO chip, such as a product
|
||||
* number, may be NULL
|
||||
* number, may be empty
|
||||
* @lines: number of GPIO lines on this chip
|
||||
*/
|
||||
struct gpiochip_info {
|
||||
|
|
@ -44,10 +44,10 @@ struct gpiochip_info {
|
|||
* @flags: various flags for this line
|
||||
* @name: the name of this GPIO line, such as the output pin of the line on the
|
||||
* chip, a rail or a pin header name on a board, as specified by the gpio
|
||||
* chip, may be NULL
|
||||
* chip, may be empty
|
||||
* @consumer: a functional name for the consumer of this GPIO line as set by
|
||||
* whatever is using it, will be NULL if there is no current user but may
|
||||
* also be NULL if the consumer doesn't set this up
|
||||
* whatever is using it, will be empty if there is no current user but may
|
||||
* also be empty if the consumer doesn't set this up
|
||||
*/
|
||||
struct gpioline_info {
|
||||
__u32 line_offset;
|
||||
|
|
@ -59,6 +59,34 @@ struct gpioline_info {
|
|||
/* Maximum number of requested handles */
|
||||
#define GPIOHANDLES_MAX 64
|
||||
|
||||
/* Possible line status change events */
|
||||
enum {
|
||||
GPIOLINE_CHANGED_REQUESTED = 1,
|
||||
GPIOLINE_CHANGED_RELEASED,
|
||||
GPIOLINE_CHANGED_CONFIG,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct gpioline_info_changed - Information about a change in status
|
||||
* of a GPIO line
|
||||
* @info: updated line information
|
||||
* @timestamp: estimate of time of status change occurrence, in nanoseconds
|
||||
* and GPIOLINE_CHANGED_CONFIG
|
||||
* @event_type: one of GPIOLINE_CHANGED_REQUESTED, GPIOLINE_CHANGED_RELEASED
|
||||
*
|
||||
* Note: struct gpioline_info embedded here has 32-bit alignment on its own,
|
||||
* but it works fine with 64-bit alignment too. With its 72 byte size, we can
|
||||
* guarantee there are no implicit holes between it and subsequent members.
|
||||
* The 20-byte padding at the end makes sure we don't add any implicit padding
|
||||
* at the end of the structure on 64-bit architectures.
|
||||
*/
|
||||
struct gpioline_info_changed {
|
||||
struct gpioline_info info;
|
||||
__u64 timestamp;
|
||||
__u32 event_type;
|
||||
__u32 padding[5]; /* for future use */
|
||||
};
|
||||
|
||||
/* Linerequest flags */
|
||||
#define GPIOHANDLE_REQUEST_INPUT (1UL << 0)
|
||||
#define GPIOHANDLE_REQUEST_OUTPUT (1UL << 1)
|
||||
|
|
@ -176,6 +204,8 @@ struct gpioevent_data {
|
|||
|
||||
#define GPIO_GET_CHIPINFO_IOCTL _IOR(0xB4, 0x01, struct gpiochip_info)
|
||||
#define GPIO_GET_LINEINFO_IOCTL _IOWR(0xB4, 0x02, struct gpioline_info)
|
||||
#define GPIO_GET_LINEINFO_WATCH_IOCTL _IOWR(0xB4, 0x0b, struct gpioline_info)
|
||||
#define GPIO_GET_LINEINFO_UNWATCH_IOCTL _IOWR(0xB4, 0x0c, __u32)
|
||||
#define GPIO_GET_LINEHANDLE_IOCTL _IOWR(0xB4, 0x03, struct gpiohandle_request)
|
||||
#define GPIO_GET_LINEEVENT_IOCTL _IOWR(0xB4, 0x04, struct gpioevent_request)
|
||||
|
||||
|
|
|
|||
|
|
@ -83,21 +83,6 @@ enum dsa_completion_status {
|
|||
#define DSA_COMP_STATUS_MASK 0x7f
|
||||
#define DSA_COMP_STATUS_WRITE 0x80
|
||||
|
||||
struct dsa_batch_desc {
|
||||
uint32_t pasid:20;
|
||||
uint32_t rsvd:11;
|
||||
uint32_t priv:1;
|
||||
uint32_t flags:24;
|
||||
uint32_t opcode:8;
|
||||
uint64_t completion_addr;
|
||||
uint64_t desc_list_addr;
|
||||
uint64_t rsvd1;
|
||||
uint32_t desc_count;
|
||||
uint16_t interrupt_handle;
|
||||
uint16_t rsvd2;
|
||||
uint8_t rsvd3[24];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dsa_hw_desc {
|
||||
uint32_t pasid:20;
|
||||
uint32_t rsvd:11;
|
||||
|
|
@ -109,6 +94,7 @@ struct dsa_hw_desc {
|
|||
uint64_t src_addr;
|
||||
uint64_t rdback_addr;
|
||||
uint64_t pattern;
|
||||
uint64_t desc_list_addr;
|
||||
};
|
||||
union {
|
||||
uint64_t dst_addr;
|
||||
|
|
@ -116,7 +102,10 @@ struct dsa_hw_desc {
|
|||
uint64_t src2_addr;
|
||||
uint64_t comp_pattern;
|
||||
};
|
||||
uint32_t xfer_size;
|
||||
union {
|
||||
uint32_t xfer_size;
|
||||
uint32_t desc_count;
|
||||
};
|
||||
uint16_t int_handle;
|
||||
uint16_t rsvd1;
|
||||
union {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
|
||||
/*
|
||||
* Input event codes
|
||||
*
|
||||
|
|
|
|||
|
|
@ -276,6 +276,7 @@ enum nft_rule_compat_attributes {
|
|||
* @NFT_SET_TIMEOUT: set uses timeouts
|
||||
* @NFT_SET_EVAL: set can be updated from the evaluation path
|
||||
* @NFT_SET_OBJECT: set contains stateful objects
|
||||
* @NFT_SET_CONCAT: set contains a concatenation
|
||||
*/
|
||||
enum nft_set_flags {
|
||||
NFT_SET_ANONYMOUS = 0x1,
|
||||
|
|
@ -285,6 +286,7 @@ enum nft_set_flags {
|
|||
NFT_SET_TIMEOUT = 0x10,
|
||||
NFT_SET_EVAL = 0x20,
|
||||
NFT_SET_OBJECT = 0x40,
|
||||
NFT_SET_CONCAT = 0x80,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ struct idletimer_tg_info_v1 {
|
|||
|
||||
char label[MAX_IDLETIMER_LABEL_SIZE];
|
||||
|
||||
__u8 send_nl_msg; /* unused: for compatibility with Android */
|
||||
__u8 timer_type;
|
||||
|
||||
/* for kernel module internal use only */
|
||||
|
|
|
|||
|
|
@ -605,6 +605,7 @@
|
|||
#define PCI_EXP_SLTCTL_PWR_OFF 0x0400 /* Power Off */
|
||||
#define PCI_EXP_SLTCTL_EIC 0x0800 /* Electromechanical Interlock Control */
|
||||
#define PCI_EXP_SLTCTL_DLLSCE 0x1000 /* Data Link Layer State Changed Enable */
|
||||
#define PCI_EXP_SLTCTL_IBPD_DISABLE 0x4000 /* In-band PD disable */
|
||||
#define PCI_EXP_SLTSTA 26 /* Slot Status */
|
||||
#define PCI_EXP_SLTSTA_ABP 0x0001 /* Attention Button Pressed */
|
||||
#define PCI_EXP_SLTSTA_PFD 0x0002 /* Power Fault Detected */
|
||||
|
|
@ -680,6 +681,7 @@
|
|||
#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */
|
||||
#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52 /* v2 endpoints with link end here */
|
||||
#define PCI_EXP_SLTCAP2 52 /* Slot Capabilities 2 */
|
||||
#define PCI_EXP_SLTCAP2_IBPD 0x00000001 /* In-band PD Disable Supported */
|
||||
#define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */
|
||||
#define PCI_EXP_SLTSTA2 58 /* Slot Status 2 */
|
||||
|
||||
|
|
|
|||
|
|
@ -19,5 +19,13 @@
|
|||
#define PCITEST_MSIX _IOW('P', 0x7, int)
|
||||
#define PCITEST_SET_IRQTYPE _IOW('P', 0x8, int)
|
||||
#define PCITEST_GET_IRQTYPE _IO('P', 0x9)
|
||||
#define PCITEST_CLEAR_IRQ _IO('P', 0x10)
|
||||
|
||||
#define PCITEST_FLAGS_USE_DMA 0x00000001
|
||||
|
||||
struct pci_endpoint_test_xfer_param {
|
||||
unsigned long size;
|
||||
unsigned char flags;
|
||||
};
|
||||
|
||||
#endif /* __UAPI_LINUX_PCITEST_H */
|
||||
|
|
|
|||
|
|
@ -142,8 +142,9 @@ enum perf_event_sample_format {
|
|||
PERF_SAMPLE_REGS_INTR = 1U << 18,
|
||||
PERF_SAMPLE_PHYS_ADDR = 1U << 19,
|
||||
PERF_SAMPLE_AUX = 1U << 20,
|
||||
PERF_SAMPLE_CGROUP = 1U << 21,
|
||||
|
||||
PERF_SAMPLE_MAX = 1U << 21, /* non-ABI */
|
||||
PERF_SAMPLE_MAX = 1U << 22, /* non-ABI */
|
||||
|
||||
__PERF_SAMPLE_CALLCHAIN_EARLY = 1ULL << 63, /* non-ABI; internal use */
|
||||
};
|
||||
|
|
@ -381,7 +382,8 @@ struct perf_event_attr {
|
|||
ksymbol : 1, /* include ksymbol events */
|
||||
bpf_event : 1, /* include bpf events */
|
||||
aux_output : 1, /* generate AUX records instead of events */
|
||||
__reserved_1 : 32;
|
||||
cgroup : 1, /* include cgroup events */
|
||||
__reserved_1 : 31;
|
||||
|
||||
union {
|
||||
__u32 wakeup_events; /* wakeup every n events */
|
||||
|
|
@ -1012,6 +1014,16 @@ enum perf_event_type {
|
|||
*/
|
||||
PERF_RECORD_BPF_EVENT = 18,
|
||||
|
||||
/*
|
||||
* struct {
|
||||
* struct perf_event_header header;
|
||||
* u64 id;
|
||||
* char path[];
|
||||
* struct sample_id sample_id;
|
||||
* };
|
||||
*/
|
||||
PERF_RECORD_CGROUP = 19,
|
||||
|
||||
PERF_RECORD_MAX, /* non-ABI */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@
|
|||
#ifndef _UAPI_LINUX_RTC_H_
|
||||
#define _UAPI_LINUX_RTC_H_
|
||||
|
||||
#include <linux/const.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/*
|
||||
* The struct used to pass data via the following ioctl. Similar to the
|
||||
* struct tm in <time.h>, but it needs to be here so that the kernel
|
||||
|
|
@ -92,10 +95,10 @@ struct rtc_pll_info {
|
|||
#define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */
|
||||
#define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */
|
||||
|
||||
#define RTC_VL_DATA_INVALID BIT(0) /* Voltage too low, RTC data is invalid */
|
||||
#define RTC_VL_BACKUP_LOW BIT(1) /* Backup voltage is low */
|
||||
#define RTC_VL_BACKUP_EMPTY BIT(2) /* Backup empty or not present */
|
||||
#define RTC_VL_ACCURACY_LOW BIT(3) /* Voltage is low, RTC accuracy is reduced */
|
||||
#define RTC_VL_DATA_INVALID _BITUL(0) /* Voltage too low, RTC data is invalid */
|
||||
#define RTC_VL_BACKUP_LOW _BITUL(1) /* Backup voltage is low */
|
||||
#define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Backup empty or not present */
|
||||
#define RTC_VL_ACCURACY_LOW _BITUL(3) /* Voltage is low, RTC accuracy is reduced */
|
||||
|
||||
#define RTC_VL_READ _IOR('p', 0x13, unsigned int) /* Voltage low detection */
|
||||
#define RTC_VL_CLR _IO('p', 0x14) /* Clear voltage low information */
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
/* Flags for the clone3() syscall. */
|
||||
#define CLONE_CLEAR_SIGHAND 0x100000000ULL /* Clear any signal handler and reset to SIG_DFL. */
|
||||
#define CLONE_INTO_CGROUP 0x200000000ULL /* Clone into a specific cgroup given the right permissions. */
|
||||
|
||||
/*
|
||||
* cloning flags intersect with CSIGNAL so can be used with unshare and clone3
|
||||
|
|
@ -81,6 +82,8 @@
|
|||
* @set_tid_size: This defines the size of the array referenced
|
||||
* in @set_tid. This cannot be larger than the
|
||||
* kernel's limit of nested PID namespaces.
|
||||
* @cgroup: If CLONE_INTO_CGROUP is specified set this to
|
||||
* a file descriptor for the cgroup.
|
||||
*
|
||||
* The structure is versioned by size and thus extensible.
|
||||
* New struct members must go at the end of the struct and
|
||||
|
|
@ -97,11 +100,13 @@ struct clone_args {
|
|||
__aligned_u64 tls;
|
||||
__aligned_u64 set_tid;
|
||||
__aligned_u64 set_tid_size;
|
||||
__aligned_u64 cgroup;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CLONE_ARGS_SIZE_VER0 64 /* sizeof first published struct */
|
||||
#define CLONE_ARGS_SIZE_VER1 80 /* sizeof second published struct */
|
||||
#define CLONE_ARGS_SIZE_VER2 88 /* sizeof third published struct */
|
||||
|
||||
/*
|
||||
* Scheduling policies
|
||||
|
|
|
|||
128
include/uapi/linux/um_timetravel.h
Normal file
128
include/uapi/linux/um_timetravel.h
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Copyright (C) 2019 Intel Corporation
|
||||
*/
|
||||
#ifndef _UAPI_LINUX_UM_TIMETRAVEL_H
|
||||
#define _UAPI_LINUX_UM_TIMETRAVEL_H
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* struct um_timetravel_msg - UM time travel message
|
||||
*
|
||||
* This is the basic message type, going in both directions.
|
||||
*
|
||||
* This is the message passed between the host (user-mode Linux instance)
|
||||
* and the calendar (the application on the other side of the socket) in
|
||||
* order to implement common scheduling.
|
||||
*
|
||||
* Whenever UML has an event it will request runtime for it from the
|
||||
* calendar, and then wait for its turn until it can run, etc. Note
|
||||
* that it will only ever request the single next runtime, i.e. multiple
|
||||
* REQUEST messages override each other.
|
||||
*/
|
||||
struct um_timetravel_msg {
|
||||
/**
|
||||
* @op: operation value from &enum um_timetravel_ops
|
||||
*/
|
||||
__u32 op;
|
||||
|
||||
/**
|
||||
* @seq: sequence number for the message - shall be reflected in
|
||||
* the ACK response, and should be checked while processing
|
||||
* the response to see if it matches
|
||||
*/
|
||||
__u32 seq;
|
||||
|
||||
/**
|
||||
* @time: time in nanoseconds
|
||||
*/
|
||||
__u64 time;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum um_timetravel_ops - Operation codes
|
||||
*/
|
||||
enum um_timetravel_ops {
|
||||
/**
|
||||
* @UM_TIMETRAVEL_ACK: response (ACK) to any previous message,
|
||||
* this usually doesn't carry any data in the 'time' field
|
||||
* unless otherwise specified below
|
||||
*/
|
||||
UM_TIMETRAVEL_ACK = 0,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_START: initialize the connection, the time
|
||||
* field contains an (arbitrary) ID to possibly be able
|
||||
* to distinguish the connections.
|
||||
*/
|
||||
UM_TIMETRAVEL_START = 1,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_REQUEST: request to run at the given time
|
||||
* (host -> calendar)
|
||||
*/
|
||||
UM_TIMETRAVEL_REQUEST = 2,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_WAIT: Indicate waiting for the previously requested
|
||||
* runtime, new requests may be made while waiting (e.g. due to
|
||||
* interrupts); the time field is ignored. The calendar must process
|
||||
* this message and later send a %UM_TIMETRAVEL_RUN message when
|
||||
* the host can run again.
|
||||
* (host -> calendar)
|
||||
*/
|
||||
UM_TIMETRAVEL_WAIT = 3,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_GET: return the current time from the calendar in the
|
||||
* ACK message, the time in the request message is ignored
|
||||
* (host -> calendar)
|
||||
*/
|
||||
UM_TIMETRAVEL_GET = 4,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_UPDATE: time update to the calendar, must be sent e.g.
|
||||
* before kicking an interrupt to another calendar
|
||||
* (host -> calendar)
|
||||
*/
|
||||
UM_TIMETRAVEL_UPDATE = 5,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_RUN: run time request granted, current time is in
|
||||
* the time field
|
||||
* (calendar -> host)
|
||||
*/
|
||||
UM_TIMETRAVEL_RUN = 6,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_FREE_UNTIL: Enable free-running until the given time,
|
||||
* this is a message from the calendar telling the host that it can
|
||||
* freely do its own scheduling for anything before the indicated
|
||||
* time.
|
||||
* Note that if a calendar sends this message once, the host may
|
||||
* assume that it will also do so in the future, if it implements
|
||||
* wraparound semantics for the time field.
|
||||
* (calendar -> host)
|
||||
*/
|
||||
UM_TIMETRAVEL_FREE_UNTIL = 7,
|
||||
|
||||
/**
|
||||
* @UM_TIMETRAVEL_GET_TOD: Return time of day, typically used once at
|
||||
* boot by the virtual machines to get a synchronized time from
|
||||
* the simulation.
|
||||
*/
|
||||
UM_TIMETRAVEL_GET_TOD = 8,
|
||||
};
|
||||
|
||||
#endif /* _UAPI_LINUX_UM_TIMETRAVEL_H */
|
||||
|
|
@ -19,7 +19,8 @@
|
|||
* means the userland is reading).
|
||||
*/
|
||||
#define UFFD_API ((__u64)0xAA)
|
||||
#define UFFD_API_FEATURES (UFFD_FEATURE_EVENT_FORK | \
|
||||
#define UFFD_API_FEATURES (UFFD_FEATURE_PAGEFAULT_FLAG_WP | \
|
||||
UFFD_FEATURE_EVENT_FORK | \
|
||||
UFFD_FEATURE_EVENT_REMAP | \
|
||||
UFFD_FEATURE_EVENT_REMOVE | \
|
||||
UFFD_FEATURE_EVENT_UNMAP | \
|
||||
|
|
@ -34,7 +35,8 @@
|
|||
#define UFFD_API_RANGE_IOCTLS \
|
||||
((__u64)1 << _UFFDIO_WAKE | \
|
||||
(__u64)1 << _UFFDIO_COPY | \
|
||||
(__u64)1 << _UFFDIO_ZEROPAGE)
|
||||
(__u64)1 << _UFFDIO_ZEROPAGE | \
|
||||
(__u64)1 << _UFFDIO_WRITEPROTECT)
|
||||
#define UFFD_API_RANGE_IOCTLS_BASIC \
|
||||
((__u64)1 << _UFFDIO_WAKE | \
|
||||
(__u64)1 << _UFFDIO_COPY)
|
||||
|
|
@ -52,6 +54,7 @@
|
|||
#define _UFFDIO_WAKE (0x02)
|
||||
#define _UFFDIO_COPY (0x03)
|
||||
#define _UFFDIO_ZEROPAGE (0x04)
|
||||
#define _UFFDIO_WRITEPROTECT (0x06)
|
||||
#define _UFFDIO_API (0x3F)
|
||||
|
||||
/* userfaultfd ioctl ids */
|
||||
|
|
@ -68,6 +71,8 @@
|
|||
struct uffdio_copy)
|
||||
#define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, \
|
||||
struct uffdio_zeropage)
|
||||
#define UFFDIO_WRITEPROTECT _IOWR(UFFDIO, _UFFDIO_WRITEPROTECT, \
|
||||
struct uffdio_writeprotect)
|
||||
|
||||
/* read() structure */
|
||||
struct uffd_msg {
|
||||
|
|
@ -203,13 +208,14 @@ struct uffdio_copy {
|
|||
__u64 dst;
|
||||
__u64 src;
|
||||
__u64 len;
|
||||
/*
|
||||
* There will be a wrprotection flag later that allows to map
|
||||
* pages wrprotected on the fly. And such a flag will be
|
||||
* available if the wrprotection ioctl are implemented for the
|
||||
* range according to the uffdio_register.ioctls.
|
||||
*/
|
||||
#define UFFDIO_COPY_MODE_DONTWAKE ((__u64)1<<0)
|
||||
/*
|
||||
* UFFDIO_COPY_MODE_WP will map the page write protected on
|
||||
* the fly. UFFDIO_COPY_MODE_WP is available only if the
|
||||
* write protected ioctl is implemented for the range
|
||||
* according to the uffdio_register.ioctls.
|
||||
*/
|
||||
#define UFFDIO_COPY_MODE_WP ((__u64)1<<1)
|
||||
__u64 mode;
|
||||
|
||||
/*
|
||||
|
|
@ -231,4 +237,24 @@ struct uffdio_zeropage {
|
|||
__s64 zeropage;
|
||||
};
|
||||
|
||||
struct uffdio_writeprotect {
|
||||
struct uffdio_range range;
|
||||
/*
|
||||
* UFFDIO_WRITEPROTECT_MODE_WP: set the flag to write protect a range,
|
||||
* unset the flag to undo protection of a range which was previously
|
||||
* write protected.
|
||||
*
|
||||
* UFFDIO_WRITEPROTECT_MODE_DONTWAKE: set the flag to avoid waking up
|
||||
* any wait thread after the operation succeeds.
|
||||
*
|
||||
* NOTE: Write protecting a region (WP=1) is unrelated to page faults,
|
||||
* therefore DONTWAKE flag is meaningless with WP=1. Removing write
|
||||
* protection (WP=0) in response to a page fault wakes the faulting
|
||||
* task unless DONTWAKE is set.
|
||||
*/
|
||||
#define UFFDIO_WRITEPROTECT_MODE_WP ((__u64)1<<0)
|
||||
#define UFFDIO_WRITEPROTECT_MODE_DONTWAKE ((__u64)1<<1)
|
||||
__u64 mode;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_USERFAULTFD_H */
|
||||
|
|
|
|||
|
|
@ -707,6 +707,43 @@ struct vfio_device_ioeventfd {
|
|||
|
||||
#define VFIO_DEVICE_IOEVENTFD _IO(VFIO_TYPE, VFIO_BASE + 16)
|
||||
|
||||
/**
|
||||
* VFIO_DEVICE_FEATURE - _IORW(VFIO_TYPE, VFIO_BASE + 17,
|
||||
* struct vfio_device_feature)
|
||||
*
|
||||
* Get, set, or probe feature data of the device. The feature is selected
|
||||
* using the FEATURE_MASK portion of the flags field. Support for a feature
|
||||
* can be probed by setting both the FEATURE_MASK and PROBE bits. A probe
|
||||
* may optionally include the GET and/or SET bits to determine read vs write
|
||||
* access of the feature respectively. Probing a feature will return success
|
||||
* if the feature is supported and all of the optionally indicated GET/SET
|
||||
* methods are supported. The format of the data portion of the structure is
|
||||
* specific to the given feature. The data portion is not required for
|
||||
* probing. GET and SET are mutually exclusive, except for use with PROBE.
|
||||
*
|
||||
* Return 0 on success, -errno on failure.
|
||||
*/
|
||||
struct vfio_device_feature {
|
||||
__u32 argsz;
|
||||
__u32 flags;
|
||||
#define VFIO_DEVICE_FEATURE_MASK (0xffff) /* 16-bit feature index */
|
||||
#define VFIO_DEVICE_FEATURE_GET (1 << 16) /* Get feature into data[] */
|
||||
#define VFIO_DEVICE_FEATURE_SET (1 << 17) /* Set feature from data[] */
|
||||
#define VFIO_DEVICE_FEATURE_PROBE (1 << 18) /* Probe feature support */
|
||||
__u8 data[];
|
||||
};
|
||||
|
||||
#define VFIO_DEVICE_FEATURE _IO(VFIO_TYPE, VFIO_BASE + 17)
|
||||
|
||||
/*
|
||||
* Provide support for setting a PCI VF Token, which is used as a shared
|
||||
* secret between PF and VF drivers. This feature may only be set on a
|
||||
* PCI SR-IOV PF when SR-IOV is enabled on the PF and there are no existing
|
||||
* open VFs. Data provided when setting this feature is a 16-byte array
|
||||
* (__u8 b[16]), representing a UUID.
|
||||
*/
|
||||
#define VFIO_DEVICE_FEATURE_PCI_VF_TOKEN (0)
|
||||
|
||||
/* -------- API for Type1 VFIO IOMMU -------- */
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -116,4 +116,28 @@
|
|||
#define VHOST_VSOCK_SET_GUEST_CID _IOW(VHOST_VIRTIO, 0x60, __u64)
|
||||
#define VHOST_VSOCK_SET_RUNNING _IOW(VHOST_VIRTIO, 0x61, int)
|
||||
|
||||
/* VHOST_VDPA specific defines */
|
||||
|
||||
/* Get the device id. The device ids follow the same definition of
|
||||
* the device id defined in virtio-spec.
|
||||
*/
|
||||
#define VHOST_VDPA_GET_DEVICE_ID _IOR(VHOST_VIRTIO, 0x70, __u32)
|
||||
/* Get and set the status. The status bits follow the same definition
|
||||
* of the device status defined in virtio-spec.
|
||||
*/
|
||||
#define VHOST_VDPA_GET_STATUS _IOR(VHOST_VIRTIO, 0x71, __u8)
|
||||
#define VHOST_VDPA_SET_STATUS _IOW(VHOST_VIRTIO, 0x72, __u8)
|
||||
/* Get and set the device config. The device config follows the same
|
||||
* definition of the device config defined in virtio-spec.
|
||||
*/
|
||||
#define VHOST_VDPA_GET_CONFIG _IOR(VHOST_VIRTIO, 0x73, \
|
||||
struct vhost_vdpa_config)
|
||||
#define VHOST_VDPA_SET_CONFIG _IOW(VHOST_VIRTIO, 0x74, \
|
||||
struct vhost_vdpa_config)
|
||||
/* Enable/disable the ring. */
|
||||
#define VHOST_VDPA_SET_VRING_ENABLE _IOW(VHOST_VIRTIO, 0x75, \
|
||||
struct vhost_vring_state)
|
||||
/* Get the max ring size. */
|
||||
#define VHOST_VDPA_GET_VRING_NUM _IOR(VHOST_VIRTIO, 0x76, __u16)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -119,6 +119,14 @@ struct vhost_scsi_target {
|
|||
unsigned short reserved;
|
||||
};
|
||||
|
||||
/* VHOST_VDPA specific definitions */
|
||||
|
||||
struct vhost_vdpa_config {
|
||||
__u32 off;
|
||||
__u32 len;
|
||||
__u8 buf[0];
|
||||
};
|
||||
|
||||
/* Feature bits */
|
||||
/* Log all write descriptors. Can be changed while device is active. */
|
||||
#define VHOST_F_LOG_ALL 26
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM 2 /* Deflate balloon on OOM */
|
||||
#define VIRTIO_BALLOON_F_FREE_PAGE_HINT 3 /* VQ to report free pages */
|
||||
#define VIRTIO_BALLOON_F_PAGE_POISON 4 /* Guest is using page poisoning */
|
||||
#define VIRTIO_BALLOON_F_REPORTING 5 /* Page reporting virtqueue */
|
||||
|
||||
/* Size of a PFN in the balloon interface. */
|
||||
#define VIRTIO_BALLOON_PFN_SHIFT 12
|
||||
|
|
|
|||
|
|
@ -18,24 +18,24 @@
|
|||
#define VIRTIO_IOMMU_F_MMIO 5
|
||||
|
||||
struct virtio_iommu_range_64 {
|
||||
__le64 start;
|
||||
__le64 end;
|
||||
__u64 start;
|
||||
__u64 end;
|
||||
};
|
||||
|
||||
struct virtio_iommu_range_32 {
|
||||
__le32 start;
|
||||
__le32 end;
|
||||
__u32 start;
|
||||
__u32 end;
|
||||
};
|
||||
|
||||
struct virtio_iommu_config {
|
||||
/* Supported page sizes */
|
||||
__le64 page_size_mask;
|
||||
__u64 page_size_mask;
|
||||
/* Supported IOVA range */
|
||||
struct virtio_iommu_range_64 input_range;
|
||||
/* Max domain ID size */
|
||||
struct virtio_iommu_range_32 domain_range;
|
||||
/* Probe buffer size */
|
||||
__le32 probe_size;
|
||||
__u32 probe_size;
|
||||
};
|
||||
|
||||
/* Request types */
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@
|
|||
* Steering */
|
||||
#define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */
|
||||
|
||||
#define VIRTIO_NET_F_HASH_REPORT 57 /* Supports hash report */
|
||||
#define VIRTIO_NET_F_RSS 60 /* Supports RSS RX steering */
|
||||
#define VIRTIO_NET_F_RSC_EXT 61 /* extended coalescing info */
|
||||
#define VIRTIO_NET_F_STANDBY 62 /* Act as standby for another device
|
||||
* with the same MAC.
|
||||
*/
|
||||
|
|
@ -69,6 +72,17 @@
|
|||
#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */
|
||||
#define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */
|
||||
|
||||
/* supported/enabled hash types */
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX (1 << 7)
|
||||
#define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX (1 << 8)
|
||||
|
||||
struct virtio_net_config {
|
||||
/* The config defining mac address (if VIRTIO_NET_F_MAC) */
|
||||
__u8 mac[ETH_ALEN];
|
||||
|
|
@ -92,6 +106,12 @@ struct virtio_net_config {
|
|||
* Any other value stands for unknown.
|
||||
*/
|
||||
__u8 duplex;
|
||||
/* maximum size of RSS key */
|
||||
__u8 rss_max_key_size;
|
||||
/* maximum number of indirection table entries */
|
||||
__le16 rss_max_indirection_table_length;
|
||||
/* bitmask of supported VIRTIO_NET_RSS_HASH_ types */
|
||||
__le32 supported_hash_types;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
|
|
@ -104,6 +124,7 @@ struct virtio_net_config {
|
|||
struct virtio_net_hdr_v1 {
|
||||
#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 /* Use csum_start, csum_offset */
|
||||
#define VIRTIO_NET_HDR_F_DATA_VALID 2 /* Csum is valid */
|
||||
#define VIRTIO_NET_HDR_F_RSC_INFO 4 /* rsc info in csum_ fields */
|
||||
__u8 flags;
|
||||
#define VIRTIO_NET_HDR_GSO_NONE 0 /* Not a GSO frame */
|
||||
#define VIRTIO_NET_HDR_GSO_TCPV4 1 /* GSO frame, IPv4 TCP (TSO) */
|
||||
|
|
@ -113,11 +134,46 @@ struct virtio_net_hdr_v1 {
|
|||
__u8 gso_type;
|
||||
__virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */
|
||||
__virtio16 gso_size; /* Bytes to append to hdr_len per frame */
|
||||
__virtio16 csum_start; /* Position to start checksumming from */
|
||||
__virtio16 csum_offset; /* Offset after that to place checksum */
|
||||
union {
|
||||
struct {
|
||||
__virtio16 csum_start;
|
||||
__virtio16 csum_offset;
|
||||
};
|
||||
/* Checksum calculation */
|
||||
struct {
|
||||
/* Position to start checksumming from */
|
||||
__virtio16 start;
|
||||
/* Offset after that to place checksum */
|
||||
__virtio16 offset;
|
||||
} csum;
|
||||
/* Receive Segment Coalescing */
|
||||
struct {
|
||||
/* Number of coalesced segments */
|
||||
__le16 segments;
|
||||
/* Number of duplicated acks */
|
||||
__le16 dup_acks;
|
||||
} rsc;
|
||||
};
|
||||
__virtio16 num_buffers; /* Number of merged rx buffers */
|
||||
};
|
||||
|
||||
struct virtio_net_hdr_v1_hash {
|
||||
struct virtio_net_hdr_v1 hdr;
|
||||
__le32 hash_value;
|
||||
#define VIRTIO_NET_HASH_REPORT_NONE 0
|
||||
#define VIRTIO_NET_HASH_REPORT_IPv4 1
|
||||
#define VIRTIO_NET_HASH_REPORT_TCPv4 2
|
||||
#define VIRTIO_NET_HASH_REPORT_UDPv4 3
|
||||
#define VIRTIO_NET_HASH_REPORT_IPv6 4
|
||||
#define VIRTIO_NET_HASH_REPORT_TCPv6 5
|
||||
#define VIRTIO_NET_HASH_REPORT_UDPv6 6
|
||||
#define VIRTIO_NET_HASH_REPORT_IPv6_EX 7
|
||||
#define VIRTIO_NET_HASH_REPORT_TCPv6_EX 8
|
||||
#define VIRTIO_NET_HASH_REPORT_UDPv6_EX 9
|
||||
__le16 hash_report;
|
||||
__le16 padding;
|
||||
};
|
||||
|
||||
#ifndef VIRTIO_NET_NO_LEGACY
|
||||
/* This header comes first in the scatter-gather list.
|
||||
* For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
|
||||
|
|
@ -228,7 +284,9 @@ struct virtio_net_ctrl_mac {
|
|||
|
||||
/*
|
||||
* Control Receive Flow Steering
|
||||
*
|
||||
*/
|
||||
#define VIRTIO_NET_CTRL_MQ 4
|
||||
/*
|
||||
* The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
|
||||
* enables Receive Flow Steering, specifying the number of the transmit and
|
||||
* receive queues that will be used. After the command is consumed and acked by
|
||||
|
|
@ -241,11 +299,47 @@ struct virtio_net_ctrl_mq {
|
|||
__virtio16 virtqueue_pairs;
|
||||
};
|
||||
|
||||
#define VIRTIO_NET_CTRL_MQ 4
|
||||
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0
|
||||
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1
|
||||
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000
|
||||
|
||||
/*
|
||||
* The command VIRTIO_NET_CTRL_MQ_RSS_CONFIG has the same effect as
|
||||
* VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET does and additionally configures
|
||||
* the receive steering to use a hash calculated for incoming packet
|
||||
* to decide on receive virtqueue to place the packet. The command
|
||||
* also provides parameters to calculate a hash and receive virtqueue.
|
||||
*/
|
||||
struct virtio_net_rss_config {
|
||||
__le32 hash_types;
|
||||
__le16 indirection_table_mask;
|
||||
__le16 unclassified_queue;
|
||||
__le16 indirection_table[1/* + indirection_table_mask */];
|
||||
__le16 max_tx_vq;
|
||||
__u8 hash_key_length;
|
||||
__u8 hash_key_data[/* hash_key_length */];
|
||||
};
|
||||
|
||||
#define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1
|
||||
|
||||
/*
|
||||
* The command VIRTIO_NET_CTRL_MQ_HASH_CONFIG requests the device
|
||||
* to include in the virtio header of the packet the value of the
|
||||
* calculated hash and the report type of hash. It also provides
|
||||
* parameters for hash calculation. The command requires feature
|
||||
* VIRTIO_NET_F_HASH_REPORT to be negotiated to extend the
|
||||
* layout of virtio header as defined in virtio_net_hdr_v1_hash.
|
||||
*/
|
||||
struct virtio_net_hash_config {
|
||||
__le32 hash_types;
|
||||
/* for compatibility with virtio_net_rss_config */
|
||||
__le16 reserved[4];
|
||||
__u8 hash_key_length;
|
||||
__u8 hash_key_data[/* hash_key_length */];
|
||||
};
|
||||
|
||||
#define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2
|
||||
|
||||
/*
|
||||
* Control network offloads
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue