Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
Pull virtio updates from Michael Tsirkin: - IRQ bypass support for vdpa and IFC - MLX5 vdpa driver - Endianness fixes for virtio drivers - Misc other fixes * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: (71 commits) vdpa/mlx5: fix up endian-ness for mtu vdpa: Fix pointer math bug in vdpasim_get_config() vdpa/mlx5: Fix pointer math in mlx5_vdpa_get_config() vdpa/mlx5: fix memory allocation failure checks vdpa/mlx5: Fix uninitialised variable in core/mr.c vdpa_sim: init iommu lock virtio_config: fix up warnings on parisc vdpa/mlx5: Add VDPA driver for supported mlx5 devices vdpa/mlx5: Add shared memory registration code vdpa/mlx5: Add support library for mlx5 VDPA implementation vdpa/mlx5: Add hardware descriptive header file vdpa: Modify get_vq_state() to return error code net/vdpa: Use struct for set/get vq state vdpa: remove hard coded virtq num vdpasim: support batch updating vhost-vdpa: support IOTLB batching hints vhost-vdpa: support get/set backend features vhost: generialize backend features setting/getting vhost-vdpa: refine ioctl pre-processing vDPA: dont change vq irq after DRIVER_OK ...
This commit is contained in:
@@ -91,6 +91,8 @@
|
||||
|
||||
/* Use message type V2 */
|
||||
#define VHOST_BACKEND_F_IOTLB_MSG_V2 0x1
|
||||
/* IOTLB can accept batching hints */
|
||||
#define VHOST_BACKEND_F_IOTLB_BATCH 0x2
|
||||
|
||||
#define VHOST_SET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x25, __u64)
|
||||
#define VHOST_GET_BACKEND_FEATURES _IOR(VHOST_VIRTIO, 0x26, __u64)
|
||||
|
@@ -60,6 +60,17 @@ struct vhost_iotlb_msg {
|
||||
#define VHOST_IOTLB_UPDATE 2
|
||||
#define VHOST_IOTLB_INVALIDATE 3
|
||||
#define VHOST_IOTLB_ACCESS_FAIL 4
|
||||
/*
|
||||
* VHOST_IOTLB_BATCH_BEGIN and VHOST_IOTLB_BATCH_END allow modifying
|
||||
* multiple mappings in one go: beginning with
|
||||
* VHOST_IOTLB_BATCH_BEGIN, followed by any number of
|
||||
* VHOST_IOTLB_UPDATE messages, and ending with VHOST_IOTLB_BATCH_END.
|
||||
* When one of these two values is used as the message type, the rest
|
||||
* of the fields in the message are ignored. There's no guarantee that
|
||||
* these changes take place automatically in the device.
|
||||
*/
|
||||
#define VHOST_IOTLB_BATCH_BEGIN 5
|
||||
#define VHOST_IOTLB_BATCH_END 6
|
||||
__u8 type;
|
||||
};
|
||||
|
||||
|
@@ -25,7 +25,7 @@
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE. */
|
||||
#include <linux/types.h>
|
||||
#include <linux/virtio_types.h>
|
||||
#include <linux/virtio_ids.h>
|
||||
#include <linux/virtio_config.h>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
struct virtio_9p_config {
|
||||
/* length of the tag name */
|
||||
__u16 tag_len;
|
||||
__virtio16 tag_len;
|
||||
/* non-NULL terminated tag name */
|
||||
__u8 tag[0];
|
||||
} __attribute__((packed));
|
||||
|
@@ -45,20 +45,20 @@
|
||||
#define VIRTIO_BALLOON_CMD_ID_DONE 1
|
||||
struct virtio_balloon_config {
|
||||
/* Number of pages host wants Guest to give up. */
|
||||
__u32 num_pages;
|
||||
__le32 num_pages;
|
||||
/* Number of pages we've actually got in balloon. */
|
||||
__u32 actual;
|
||||
__le32 actual;
|
||||
/*
|
||||
* Free page hint command id, readonly by guest.
|
||||
* Was previously named free_page_report_cmd_id so we
|
||||
* need to carry that name for legacy support.
|
||||
*/
|
||||
union {
|
||||
__u32 free_page_hint_cmd_id;
|
||||
__u32 free_page_report_cmd_id; /* deprecated */
|
||||
__le32 free_page_hint_cmd_id;
|
||||
__le32 free_page_report_cmd_id; /* deprecated */
|
||||
};
|
||||
/* Stores PAGE_POISON if page poisoning is in use */
|
||||
__u32 poison_val;
|
||||
__le32 poison_val;
|
||||
};
|
||||
|
||||
#define VIRTIO_BALLOON_S_SWAP_IN 0 /* Amount of memory swapped in */
|
||||
|
@@ -57,20 +57,20 @@
|
||||
|
||||
struct virtio_blk_config {
|
||||
/* The capacity (in 512-byte sectors). */
|
||||
__u64 capacity;
|
||||
__virtio64 capacity;
|
||||
/* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
|
||||
__u32 size_max;
|
||||
__virtio32 size_max;
|
||||
/* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
|
||||
__u32 seg_max;
|
||||
__virtio32 seg_max;
|
||||
/* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */
|
||||
struct virtio_blk_geometry {
|
||||
__u16 cylinders;
|
||||
__virtio16 cylinders;
|
||||
__u8 heads;
|
||||
__u8 sectors;
|
||||
} geometry;
|
||||
|
||||
/* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
|
||||
__u32 blk_size;
|
||||
__virtio32 blk_size;
|
||||
|
||||
/* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY */
|
||||
/* exponent for physical block per logical block. */
|
||||
@@ -78,42 +78,42 @@ struct virtio_blk_config {
|
||||
/* alignment offset in logical blocks. */
|
||||
__u8 alignment_offset;
|
||||
/* minimum I/O size without performance penalty in logical blocks. */
|
||||
__u16 min_io_size;
|
||||
__virtio16 min_io_size;
|
||||
/* optimal sustained I/O size in logical blocks. */
|
||||
__u32 opt_io_size;
|
||||
__virtio32 opt_io_size;
|
||||
|
||||
/* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */
|
||||
__u8 wce;
|
||||
__u8 unused;
|
||||
|
||||
/* number of vqs, only available when VIRTIO_BLK_F_MQ is set */
|
||||
__u16 num_queues;
|
||||
__virtio16 num_queues;
|
||||
|
||||
/* the next 3 entries are guarded by VIRTIO_BLK_F_DISCARD */
|
||||
/*
|
||||
* The maximum discard sectors (in 512-byte sectors) for
|
||||
* one segment.
|
||||
*/
|
||||
__u32 max_discard_sectors;
|
||||
__virtio32 max_discard_sectors;
|
||||
/*
|
||||
* The maximum number of discard segments in a
|
||||
* discard command.
|
||||
*/
|
||||
__u32 max_discard_seg;
|
||||
__virtio32 max_discard_seg;
|
||||
/* Discard commands must be aligned to this number of sectors. */
|
||||
__u32 discard_sector_alignment;
|
||||
__virtio32 discard_sector_alignment;
|
||||
|
||||
/* the next 3 entries are guarded by VIRTIO_BLK_F_WRITE_ZEROES */
|
||||
/*
|
||||
* The maximum number of write zeroes sectors (in 512-byte sectors) in
|
||||
* one segment.
|
||||
*/
|
||||
__u32 max_write_zeroes_sectors;
|
||||
__virtio32 max_write_zeroes_sectors;
|
||||
/*
|
||||
* The maximum number of segments in a write zeroes
|
||||
* command.
|
||||
*/
|
||||
__u32 max_write_zeroes_seg;
|
||||
__virtio32 max_write_zeroes_seg;
|
||||
/*
|
||||
* Set if a VIRTIO_BLK_T_WRITE_ZEROES request may result in the
|
||||
* deallocation of one or more of the sectors.
|
||||
|
@@ -67,13 +67,17 @@
|
||||
#define VIRTIO_F_VERSION_1 32
|
||||
|
||||
/*
|
||||
* If clear - device has the IOMMU bypass quirk feature.
|
||||
* If set - use platform tools to detect the IOMMU.
|
||||
* If clear - device has the platform DMA (e.g. IOMMU) bypass quirk feature.
|
||||
* If set - use platform DMA tools to access the memory.
|
||||
*
|
||||
* Note the reverse polarity (compared to most other features),
|
||||
* this is for compatibility with legacy systems.
|
||||
*/
|
||||
#define VIRTIO_F_IOMMU_PLATFORM 33
|
||||
#define VIRTIO_F_ACCESS_PLATFORM 33
|
||||
#ifndef __KERNEL__
|
||||
/* Legacy name for VIRTIO_F_ACCESS_PLATFORM (for compatibility with old userspace) */
|
||||
#define VIRTIO_F_IOMMU_PLATFORM VIRTIO_F_ACCESS_PLATFORM
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/* This feature indicates support for the packed virtqueue layout. */
|
||||
#define VIRTIO_F_RING_PACKED 34
|
||||
|
@@ -45,13 +45,13 @@
|
||||
|
||||
struct virtio_console_config {
|
||||
/* colums of the screens */
|
||||
__u16 cols;
|
||||
__virtio16 cols;
|
||||
/* rows of the screens */
|
||||
__u16 rows;
|
||||
__virtio16 rows;
|
||||
/* max. number of ports this device can hold */
|
||||
__u32 max_nr_ports;
|
||||
__virtio32 max_nr_ports;
|
||||
/* emergency write register */
|
||||
__u32 emerg_wr;
|
||||
__virtio32 emerg_wr;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
|
@@ -414,33 +414,33 @@ struct virtio_crypto_op_data_req {
|
||||
|
||||
struct virtio_crypto_config {
|
||||
/* See VIRTIO_CRYPTO_OP_* above */
|
||||
__u32 status;
|
||||
__le32 status;
|
||||
|
||||
/*
|
||||
* Maximum number of data queue
|
||||
*/
|
||||
__u32 max_dataqueues;
|
||||
__le32 max_dataqueues;
|
||||
|
||||
/*
|
||||
* Specifies the services mask which the device support,
|
||||
* see VIRTIO_CRYPTO_SERVICE_* above
|
||||
*/
|
||||
__u32 crypto_services;
|
||||
__le32 crypto_services;
|
||||
|
||||
/* Detailed algorithms mask */
|
||||
__u32 cipher_algo_l;
|
||||
__u32 cipher_algo_h;
|
||||
__u32 hash_algo;
|
||||
__u32 mac_algo_l;
|
||||
__u32 mac_algo_h;
|
||||
__u32 aead_algo;
|
||||
__le32 cipher_algo_l;
|
||||
__le32 cipher_algo_h;
|
||||
__le32 hash_algo;
|
||||
__le32 mac_algo_l;
|
||||
__le32 mac_algo_h;
|
||||
__le32 aead_algo;
|
||||
/* Maximum length of cipher key */
|
||||
__u32 max_cipher_key_len;
|
||||
__le32 max_cipher_key_len;
|
||||
/* Maximum length of authenticated key */
|
||||
__u32 max_auth_key_len;
|
||||
__u32 reserve;
|
||||
__le32 max_auth_key_len;
|
||||
__le32 reserve;
|
||||
/* Maximum size of each crypto request's content */
|
||||
__u64 max_size;
|
||||
__le64 max_size;
|
||||
};
|
||||
|
||||
struct virtio_crypto_inhdr {
|
||||
|
@@ -13,7 +13,7 @@ struct virtio_fs_config {
|
||||
__u8 tag[36];
|
||||
|
||||
/* Number of request queues */
|
||||
__u32 num_request_queues;
|
||||
__le32 num_request_queues;
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _UAPI_LINUX_VIRTIO_FS_H */
|
||||
|
@@ -320,10 +320,10 @@ struct virtio_gpu_resp_edid {
|
||||
#define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
|
||||
|
||||
struct virtio_gpu_config {
|
||||
__u32 events_read;
|
||||
__u32 events_clear;
|
||||
__u32 num_scanouts;
|
||||
__u32 num_capsets;
|
||||
__le32 events_read;
|
||||
__le32 events_clear;
|
||||
__le32 num_scanouts;
|
||||
__le32 num_capsets;
|
||||
};
|
||||
|
||||
/* simple formats for fbcon/X use */
|
||||
|
@@ -40,18 +40,18 @@ enum virtio_input_config_select {
|
||||
};
|
||||
|
||||
struct virtio_input_absinfo {
|
||||
__u32 min;
|
||||
__u32 max;
|
||||
__u32 fuzz;
|
||||
__u32 flat;
|
||||
__u32 res;
|
||||
__le32 min;
|
||||
__le32 max;
|
||||
__le32 fuzz;
|
||||
__le32 flat;
|
||||
__le32 res;
|
||||
};
|
||||
|
||||
struct virtio_input_devids {
|
||||
__u16 bustype;
|
||||
__u16 vendor;
|
||||
__u16 product;
|
||||
__u16 version;
|
||||
__le16 bustype;
|
||||
__le16 vendor;
|
||||
__le16 product;
|
||||
__le16 version;
|
||||
};
|
||||
|
||||
struct virtio_input_config {
|
||||
|
@@ -18,24 +18,24 @@
|
||||
#define VIRTIO_IOMMU_F_MMIO 5
|
||||
|
||||
struct virtio_iommu_range_64 {
|
||||
__u64 start;
|
||||
__u64 end;
|
||||
__le64 start;
|
||||
__le64 end;
|
||||
};
|
||||
|
||||
struct virtio_iommu_range_32 {
|
||||
__u32 start;
|
||||
__u32 end;
|
||||
__le32 start;
|
||||
__le32 end;
|
||||
};
|
||||
|
||||
struct virtio_iommu_config {
|
||||
/* Supported page sizes */
|
||||
__u64 page_size_mask;
|
||||
__le64 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 */
|
||||
__u32 probe_size;
|
||||
__le32 probe_size;
|
||||
};
|
||||
|
||||
/* Request types */
|
||||
|
@@ -185,27 +185,27 @@ struct virtio_mem_resp {
|
||||
|
||||
struct virtio_mem_config {
|
||||
/* Block size and alignment. Cannot change. */
|
||||
__u64 block_size;
|
||||
__le64 block_size;
|
||||
/* Valid with VIRTIO_MEM_F_ACPI_PXM. Cannot change. */
|
||||
__u16 node_id;
|
||||
__le16 node_id;
|
||||
__u8 padding[6];
|
||||
/* Start address of the memory region. Cannot change. */
|
||||
__u64 addr;
|
||||
__le64 addr;
|
||||
/* Region size (maximum). Cannot change. */
|
||||
__u64 region_size;
|
||||
__le64 region_size;
|
||||
/*
|
||||
* Currently usable region size. Can grow up to region_size. Can
|
||||
* shrink due to VIRTIO_MEM_REQ_UNPLUG_ALL (in which case no config
|
||||
* update will be sent).
|
||||
*/
|
||||
__u64 usable_region_size;
|
||||
__le64 usable_region_size;
|
||||
/*
|
||||
* Currently used size. Changes due to plug/unplug requests, but no
|
||||
* config updates will be sent.
|
||||
*/
|
||||
__u64 plugged_size;
|
||||
__le64 plugged_size;
|
||||
/* Requested size. New plug requests cannot exceed it. Can change. */
|
||||
__u64 requested_size;
|
||||
__le64 requested_size;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_VIRTIO_MEM_H */
|
||||
|
@@ -87,19 +87,19 @@ struct virtio_net_config {
|
||||
/* The config defining mac address (if VIRTIO_NET_F_MAC) */
|
||||
__u8 mac[ETH_ALEN];
|
||||
/* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
|
||||
__u16 status;
|
||||
__virtio16 status;
|
||||
/* Maximum number of each of transmit and receive queues;
|
||||
* see VIRTIO_NET_F_MQ and VIRTIO_NET_CTRL_MQ.
|
||||
* Legal values are between 1 and 0x8000
|
||||
*/
|
||||
__u16 max_virtqueue_pairs;
|
||||
__virtio16 max_virtqueue_pairs;
|
||||
/* Default maximum transmit unit advice */
|
||||
__u16 mtu;
|
||||
__virtio16 mtu;
|
||||
/*
|
||||
* speed, in units of 1Mb. All values 0 to INT_MAX are legal.
|
||||
* Any other value stands for unknown.
|
||||
*/
|
||||
__u32 speed;
|
||||
__le32 speed;
|
||||
/*
|
||||
* 0x00 - half duplex
|
||||
* 0x01 - full duplex
|
||||
|
@@ -15,8 +15,8 @@
|
||||
#include <linux/virtio_config.h>
|
||||
|
||||
struct virtio_pmem_config {
|
||||
__u64 start;
|
||||
__u64 size;
|
||||
__le64 start;
|
||||
__le64 size;
|
||||
};
|
||||
|
||||
#define VIRTIO_PMEM_REQ_TYPE_FLUSH 0
|
||||
|
@@ -103,16 +103,16 @@ struct virtio_scsi_event {
|
||||
} __attribute__((packed));
|
||||
|
||||
struct virtio_scsi_config {
|
||||
__u32 num_queues;
|
||||
__u32 seg_max;
|
||||
__u32 max_sectors;
|
||||
__u32 cmd_per_lun;
|
||||
__u32 event_info_size;
|
||||
__u32 sense_size;
|
||||
__u32 cdb_size;
|
||||
__u16 max_channel;
|
||||
__u16 max_target;
|
||||
__u32 max_lun;
|
||||
__virtio32 num_queues;
|
||||
__virtio32 seg_max;
|
||||
__virtio32 max_sectors;
|
||||
__virtio32 cmd_per_lun;
|
||||
__virtio32 event_info_size;
|
||||
__virtio32 sense_size;
|
||||
__virtio32 cdb_size;
|
||||
__virtio16 max_channel;
|
||||
__virtio16 max_target;
|
||||
__virtio32 max_lun;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Feature Bits */
|
||||
|
Reference in New Issue
Block a user