mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
virtio,pc,pci: features, cleanups, fixes
vhost-scsi support for worker ioctls fixes, cleanups all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmWKohIPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpG2YH/1rJGV8TQm4V8kcGP9wOknPAMFADnEFdFmrB V+JEDnyKrdcEZLPRh0b846peWRJhC13iL7Ks3VNjeVsfE9TyzNyNDpUzCJPfYFjR 3m8ChLDvE9tKBA5/hXMIcgDXaYcPIrPvHyl4HG8EQn7oaeMpS2uecKqDpDDvNXGq oNamNvqimFSqA+3ChzA+0Qt07Ts7xFEw4OEXSwfRXlsam/dhQG0SI+crRheHuvFb HR8EwmNydA1D/M51AuBNuvX36u3SnPWm7Anp5711SZ1b59unshI0ztIqIJnGkvYe qpUJSmxR6ulwWe4nQfb+GhBsuJ2j2ORC7YfXyAT7mw8rds8loaI= =cNy2 -----END PGP SIGNATURE----- Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging virtio,pc,pci: features, cleanups, fixes vhost-scsi support for worker ioctls fixes, cleanups all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # -----BEGIN PGP SIGNATURE----- # # iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmWKohIPHG1zdEByZWRo # YXQuY29tAAoJECgfDbjSjVRpG2YH/1rJGV8TQm4V8kcGP9wOknPAMFADnEFdFmrB # V+JEDnyKrdcEZLPRh0b846peWRJhC13iL7Ks3VNjeVsfE9TyzNyNDpUzCJPfYFjR # 3m8ChLDvE9tKBA5/hXMIcgDXaYcPIrPvHyl4HG8EQn7oaeMpS2uecKqDpDDvNXGq # oNamNvqimFSqA+3ChzA+0Qt07Ts7xFEw4OEXSwfRXlsam/dhQG0SI+crRheHuvFb # HR8EwmNydA1D/M51AuBNuvX36u3SnPWm7Anp5711SZ1b59unshI0ztIqIJnGkvYe # qpUJSmxR6ulwWe4nQfb+GhBsuJ2j2ORC7YfXyAT7mw8rds8loaI= # =cNy2 # -----END PGP SIGNATURE----- # gpg: Signature made Tue 26 Dec 2023 04:51:14 EST # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu: (21 commits) vdpa: move memory listener to vhost_vdpa_shared vdpa: use dev_shared in vdpa_iommu vdpa: use VhostVDPAShared in vdpa_dma_map and unmap vdpa: move iommu_list to vhost_vdpa_shared vdpa: remove msg type of vhost_vdpa vdpa: move backend_cap to vhost_vdpa_shared vdpa: move iotlb_batch_begin_sent to vhost_vdpa_shared vdpa: move file descriptor to vhost_vdpa_shared vdpa: use vdpa shared for tracing vdpa: move shadow_data to vhost_vdpa_shared vdpa: move iova_range to vhost_vdpa_shared vdpa: move iova tree to the shared struct vdpa: add VhostVDPAShared vdpa: do not set virtio status bits if unneeded Fix bugs when VM shutdown with virtio-gpu unplugged vhost-scsi: fix usage of error_reportf_err() hw/acpi: propagate vcpu hotplug after switch to modern interface vhost-scsi: Add support for a worker thread per virtqueue vhost: Add worker backend callouts tests: bios-tables-test: Rename smbios type 4 related test functions ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
455f444068
14 changed files with 334 additions and 179 deletions
|
@ -45,6 +45,8 @@ struct vhost_memory;
|
|||
struct vhost_vring_file;
|
||||
struct vhost_vring_state;
|
||||
struct vhost_vring_addr;
|
||||
struct vhost_vring_worker;
|
||||
struct vhost_worker_state;
|
||||
struct vhost_scsi_target;
|
||||
struct vhost_iotlb_msg;
|
||||
struct vhost_virtqueue;
|
||||
|
@ -85,6 +87,14 @@ typedef int (*vhost_set_vring_err_op)(struct vhost_dev *dev,
|
|||
struct vhost_vring_file *file);
|
||||
typedef int (*vhost_set_vring_busyloop_timeout_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *r);
|
||||
typedef int (*vhost_attach_vring_worker_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_worker *worker);
|
||||
typedef int (*vhost_get_vring_worker_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_worker *worker);
|
||||
typedef int (*vhost_new_worker_op)(struct vhost_dev *dev,
|
||||
struct vhost_worker_state *worker);
|
||||
typedef int (*vhost_free_worker_op)(struct vhost_dev *dev,
|
||||
struct vhost_worker_state *worker);
|
||||
typedef int (*vhost_set_features_op)(struct vhost_dev *dev,
|
||||
uint64_t features);
|
||||
typedef int (*vhost_get_features_op)(struct vhost_dev *dev,
|
||||
|
@ -172,6 +182,10 @@ typedef struct VhostOps {
|
|||
vhost_set_vring_call_op vhost_set_vring_call;
|
||||
vhost_set_vring_err_op vhost_set_vring_err;
|
||||
vhost_set_vring_busyloop_timeout_op vhost_set_vring_busyloop_timeout;
|
||||
vhost_new_worker_op vhost_new_worker;
|
||||
vhost_free_worker_op vhost_free_worker;
|
||||
vhost_get_vring_worker_op vhost_get_vring_worker;
|
||||
vhost_attach_vring_worker_op vhost_attach_vring_worker;
|
||||
vhost_set_features_op vhost_set_features;
|
||||
vhost_get_features_op vhost_get_features;
|
||||
vhost_set_backend_cap_op vhost_set_backend_cap;
|
||||
|
|
|
@ -30,42 +30,52 @@ typedef struct VhostVDPAHostNotifier {
|
|||
void *addr;
|
||||
} VhostVDPAHostNotifier;
|
||||
|
||||
typedef struct vhost_vdpa {
|
||||
/* Info shared by all vhost_vdpa device models */
|
||||
typedef struct vhost_vdpa_shared {
|
||||
int device_fd;
|
||||
int index;
|
||||
uint32_t msg_type;
|
||||
bool iotlb_batch_begin_sent;
|
||||
uint32_t address_space_id;
|
||||
MemoryListener listener;
|
||||
struct vhost_vdpa_iova_range iova_range;
|
||||
uint64_t acked_features;
|
||||
bool shadow_vqs_enabled;
|
||||
/* Vdpa must send shadow addresses as IOTLB key for data queues, not GPA */
|
||||
bool shadow_data;
|
||||
/* Device suspended successfully */
|
||||
bool suspended;
|
||||
QLIST_HEAD(, vdpa_iommu) iommu_list;
|
||||
|
||||
/* IOVA mapping used by the Shadow Virtqueue */
|
||||
VhostIOVATree *iova_tree;
|
||||
|
||||
/* Copy of backend features */
|
||||
uint64_t backend_cap;
|
||||
|
||||
bool iotlb_batch_begin_sent;
|
||||
|
||||
/* Vdpa must send shadow addresses as IOTLB key for data queues, not GPA */
|
||||
bool shadow_data;
|
||||
} VhostVDPAShared;
|
||||
|
||||
typedef struct vhost_vdpa {
|
||||
int index;
|
||||
uint32_t address_space_id;
|
||||
uint64_t acked_features;
|
||||
bool shadow_vqs_enabled;
|
||||
/* Device suspended successfully */
|
||||
bool suspended;
|
||||
VhostVDPAShared *shared;
|
||||
GPtrArray *shadow_vqs;
|
||||
const VhostShadowVirtqueueOps *shadow_vq_ops;
|
||||
void *shadow_vq_ops_opaque;
|
||||
struct vhost_dev *dev;
|
||||
Error *migration_blocker;
|
||||
VhostVDPAHostNotifier notifier[VIRTIO_QUEUE_MAX];
|
||||
QLIST_HEAD(, vdpa_iommu) iommu_list;
|
||||
IOMMUNotifier n;
|
||||
} VhostVDPA;
|
||||
|
||||
int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range *iova_range);
|
||||
int vhost_vdpa_set_vring_ready(struct vhost_vdpa *v, unsigned idx);
|
||||
|
||||
int vhost_vdpa_dma_map(struct vhost_vdpa *v, uint32_t asid, hwaddr iova,
|
||||
int vhost_vdpa_dma_map(VhostVDPAShared *s, uint32_t asid, hwaddr iova,
|
||||
hwaddr size, void *vaddr, bool readonly);
|
||||
int vhost_vdpa_dma_unmap(struct vhost_vdpa *v, uint32_t asid, hwaddr iova,
|
||||
int vhost_vdpa_dma_unmap(VhostVDPAShared *s, uint32_t asid, hwaddr iova,
|
||||
hwaddr size);
|
||||
|
||||
typedef struct vdpa_iommu {
|
||||
struct vhost_vdpa *dev;
|
||||
VhostVDPAShared *dev_shared;
|
||||
IOMMUMemoryRegion *iommu_mr;
|
||||
hwaddr iommu_offset;
|
||||
IOMMUNotifier n;
|
||||
|
|
|
@ -51,6 +51,7 @@ typedef struct virtio_scsi_config VirtIOSCSIConfig;
|
|||
struct VirtIOSCSIConf {
|
||||
uint32_t num_queues;
|
||||
uint32_t virtqueue_size;
|
||||
bool worker_per_virtqueue;
|
||||
bool seg_max_adjust;
|
||||
uint32_t max_sectors;
|
||||
uint32_t cmd_per_lun;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue