virtio_pci: move structure to a header

These are guest/host interfaces, so they belong in the header where e.g.
qemu will know to find them.

Note: we added a new structure as opposed to extending existing one
because someone might be relying on the size of the existing structure
staying unchanged.  Add a warning to avoid using sizeof.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
This commit is contained in:
Michael S. Tsirkin 2023-10-31 12:02:06 -04:00
parent 86f6c224c9
commit 3503895788
3 changed files with 15 additions and 10 deletions

View File

@ -294,9 +294,10 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
err = -EINVAL; err = -EINVAL;
mdev->common = vp_modern_map_capability(mdev, common, mdev->common = vp_modern_map_capability(mdev, common,
sizeof(struct virtio_pci_common_cfg), 4, sizeof(struct virtio_pci_common_cfg), 4, 0,
0, sizeof(struct virtio_pci_modern_common_cfg), offsetofend(struct virtio_pci_modern_common_cfg,
&mdev->common_len, NULL); queue_reset),
&mdev->common_len, NULL);
if (!mdev->common) if (!mdev->common)
goto err_map_common; goto err_map_common;
mdev->isr = vp_modern_map_capability(mdev, isr, sizeof(u8), 1, mdev->isr = vp_modern_map_capability(mdev, isr, sizeof(u8), 1,

View File

@ -5,13 +5,6 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/virtio_pci.h> #include <linux/virtio_pci.h>
struct virtio_pci_modern_common_cfg {
struct virtio_pci_common_cfg cfg;
__le16 queue_notify_data; /* read-write */
__le16 queue_reset; /* read-write */
};
/** /**
* struct virtio_pci_modern_device - info for modern PCI virtio * struct virtio_pci_modern_device - info for modern PCI virtio
* @pci_dev: Ptr to the PCI device struct * @pci_dev: Ptr to the PCI device struct

View File

@ -166,6 +166,17 @@ struct virtio_pci_common_cfg {
__le32 queue_used_hi; /* read-write */ __le32 queue_used_hi; /* read-write */
}; };
/*
* Warning: do not use sizeof on this: use offsetofend for
* specific fields you need.
*/
struct virtio_pci_modern_common_cfg {
struct virtio_pci_common_cfg cfg;
__le16 queue_notify_data; /* read-write */
__le16 queue_reset; /* read-write */
};
/* Fields in VIRTIO_PCI_CAP_PCI_CFG: */ /* Fields in VIRTIO_PCI_CAP_PCI_CFG: */
struct virtio_pci_cfg_cap { struct virtio_pci_cfg_cap {
struct virtio_pci_cap cap; struct virtio_pci_cap cap;