mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
virtio,pc,pci: features, fixes
virtio sound card support vhost-user: back-end state migration cxl: line length reduction enabling fabric management vhost-vdpa: shadow virtqueue hash calculation Support shadow virtqueue RSS Support tests: CPU topology related smbios test cases Fixes, cleanups all over the place Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmVKDDoPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpF08H/0Zts8uvkHbgiOEJw4JMHU6/VaCipfIYsp01 GSfwYOyEsXJ7GIxKWaCiMnWXEm7tebNCPKf3DoUtcAojQj3vuF9XbWBKw/bfRn83 nGO/iiwbYViSKxkwqUI+Up5YiN9o0M8gBFrY0kScPezbnYmo5u2bcADdEEq6gH68 D0Ea8i+WmszL891ypvgCDBL2ObDk3qX3vA5Q6J2I+HKX2ofJM59BwaKwS5ghw+IG BmbKXUZJNjUQfN9dQ7vJuiuqdknJ2xUzwW2Vn612ffarbOZB1DZ6ruWlrHty5TjX 0w4IXEJPBgZYbX9oc6zvTQnbLDBJbDU89mnme0TcmNMKWmQKTtc= =vEv+ -----END PGP SIGNATURE----- Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging virtio,pc,pci: features, fixes virtio sound card support vhost-user: back-end state migration cxl: line length reduction enabling fabric management vhost-vdpa: shadow virtqueue hash calculation Support shadow virtqueue RSS Support tests: CPU topology related smbios test cases Fixes, cleanups all over the place Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # -----BEGIN PGP SIGNATURE----- # # iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmVKDDoPHG1zdEByZWRo # YXQuY29tAAoJECgfDbjSjVRpF08H/0Zts8uvkHbgiOEJw4JMHU6/VaCipfIYsp01 # GSfwYOyEsXJ7GIxKWaCiMnWXEm7tebNCPKf3DoUtcAojQj3vuF9XbWBKw/bfRn83 # nGO/iiwbYViSKxkwqUI+Up5YiN9o0M8gBFrY0kScPezbnYmo5u2bcADdEEq6gH68 # D0Ea8i+WmszL891ypvgCDBL2ObDk3qX3vA5Q6J2I+HKX2ofJM59BwaKwS5ghw+IG # BmbKXUZJNjUQfN9dQ7vJuiuqdknJ2xUzwW2Vn612ffarbOZB1DZ6ruWlrHty5TjX # 0w4IXEJPBgZYbX9oc6zvTQnbLDBJbDU89mnme0TcmNMKWmQKTtc= # =vEv+ # -----END PGP SIGNATURE----- # gpg: Signature made Tue 07 Nov 2023 18:06:50 HKT # 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: (63 commits) acpi/tests/avocado/bits: enable console logging from bits VM acpi/tests/avocado/bits: enforce 32-bit SMBIOS entry point hw/cxl: Add tunneled command support to mailbox for switch cci. hw/cxl: Add dummy security state get hw/cxl/type3: Cleanup multiple CXL_TYPE3() calls in read/write functions hw/cxl/mbox: Add Get Background Operation Status Command hw/cxl: Add support for device sanitation hw/cxl/mbox: Wire up interrupts for background completion hw/cxl/mbox: Add support for background operations hw/cxl: Implement Physical Ports status retrieval hw/pci-bridge/cxl_downstream: Set default link width and link speed hw/cxl/mbox: Add Physical Switch Identify command. hw/cxl/mbox: Add Information and Status / Identify command hw/cxl: Add a switch mailbox CCI function hw/pci-bridge/cxl_upstream: Move defintion of device to header. hw/cxl/mbox: Generalize the CCI command processing hw/cxl/mbox: Pull the CCI definition out of the CXLDeviceState hw/cxl/mbox: Split mailbox command payload into separate input and output hw/cxl/mbox: Pull the payload out of struct cxl_cmd and make instances constant hw/cxl: Fix a QEMU_BUILD_BUG_ON() in switch statement scope issue. ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
f6b615b52d
53 changed files with 4477 additions and 324 deletions
|
@ -26,6 +26,18 @@ typedef enum VhostSetConfigType {
|
|||
VHOST_SET_CONFIG_TYPE_MIGRATION = 1,
|
||||
} VhostSetConfigType;
|
||||
|
||||
typedef enum VhostDeviceStateDirection {
|
||||
/* Transfer state from back-end (device) to front-end */
|
||||
VHOST_TRANSFER_STATE_DIRECTION_SAVE = 0,
|
||||
/* Transfer state from front-end to back-end (device) */
|
||||
VHOST_TRANSFER_STATE_DIRECTION_LOAD = 1,
|
||||
} VhostDeviceStateDirection;
|
||||
|
||||
typedef enum VhostDeviceStatePhase {
|
||||
/* The device (and all its vrings) is stopped */
|
||||
VHOST_TRANSFER_STATE_PHASE_STOPPED = 0,
|
||||
} VhostDeviceStatePhase;
|
||||
|
||||
struct vhost_inflight;
|
||||
struct vhost_dev;
|
||||
struct vhost_log;
|
||||
|
@ -129,6 +141,15 @@ typedef int (*vhost_set_config_call_op)(struct vhost_dev *dev,
|
|||
|
||||
typedef void (*vhost_reset_status_op)(struct vhost_dev *dev);
|
||||
|
||||
typedef bool (*vhost_supports_device_state_op)(struct vhost_dev *dev);
|
||||
typedef int (*vhost_set_device_state_fd_op)(struct vhost_dev *dev,
|
||||
VhostDeviceStateDirection direction,
|
||||
VhostDeviceStatePhase phase,
|
||||
int fd,
|
||||
int *reply_fd,
|
||||
Error **errp);
|
||||
typedef int (*vhost_check_device_state_op)(struct vhost_dev *dev, Error **errp);
|
||||
|
||||
typedef struct VhostOps {
|
||||
VhostBackendType backend_type;
|
||||
vhost_backend_init vhost_backend_init;
|
||||
|
@ -176,6 +197,9 @@ typedef struct VhostOps {
|
|||
vhost_force_iommu_op vhost_force_iommu;
|
||||
vhost_set_config_call_op vhost_set_config_call;
|
||||
vhost_reset_status_op vhost_reset_status;
|
||||
vhost_supports_device_state_op vhost_supports_device_state;
|
||||
vhost_set_device_state_fd_op vhost_set_device_state_fd;
|
||||
vhost_check_device_state_op vhost_check_device_state;
|
||||
} VhostOps;
|
||||
|
||||
int vhost_backend_update_device_iotlb(struct vhost_dev *dev,
|
||||
|
|
|
@ -31,6 +31,7 @@ enum VhostUserProtocolFeature {
|
|||
VHOST_USER_PROTOCOL_F_STATUS = 16,
|
||||
/* Feature 17 reserved for VHOST_USER_PROTOCOL_F_XEN_MMAP. */
|
||||
VHOST_USER_PROTOCOL_F_SHARED_OBJECT = 18,
|
||||
VHOST_USER_PROTOCOL_F_DEVICE_STATE = 19,
|
||||
VHOST_USER_PROTOCOL_F_MAX
|
||||
};
|
||||
|
||||
|
|
|
@ -351,4 +351,117 @@ static inline int vhost_reset_device(struct vhost_dev *hdev)
|
|||
}
|
||||
#endif /* CONFIG_VHOST */
|
||||
|
||||
/**
|
||||
* vhost_supports_device_state(): Checks whether the back-end supports
|
||||
* transferring internal device state for the purpose of migration.
|
||||
* Support for this feature is required for vhost_set_device_state_fd()
|
||||
* and vhost_check_device_state().
|
||||
*
|
||||
* @dev: The vhost device
|
||||
*
|
||||
* Returns true if the device supports these commands, and false if it
|
||||
* does not.
|
||||
*/
|
||||
bool vhost_supports_device_state(struct vhost_dev *dev);
|
||||
|
||||
/**
|
||||
* vhost_set_device_state_fd(): Begin transfer of internal state from/to
|
||||
* the back-end for the purpose of migration. Data is to be transferred
|
||||
* over a pipe according to @direction and @phase. The sending end must
|
||||
* only write to the pipe, and the receiving end must only read from it.
|
||||
* Once the sending end is done, it closes its FD. The receiving end
|
||||
* must take this as the end-of-transfer signal and close its FD, too.
|
||||
*
|
||||
* @fd is the back-end's end of the pipe: The write FD for SAVE, and the
|
||||
* read FD for LOAD. This function transfers ownership of @fd to the
|
||||
* back-end, i.e. closes it in the front-end.
|
||||
*
|
||||
* The back-end may optionally reply with an FD of its own, if this
|
||||
* improves efficiency on its end. In this case, the returned FD is
|
||||
* stored in *reply_fd. The back-end will discard the FD sent to it,
|
||||
* and the front-end must use *reply_fd for transferring state to/from
|
||||
* the back-end.
|
||||
*
|
||||
* @dev: The vhost device
|
||||
* @direction: The direction in which the state is to be transferred.
|
||||
* For outgoing migrations, this is SAVE, and data is read
|
||||
* from the back-end and stored by the front-end in the
|
||||
* migration stream.
|
||||
* For incoming migrations, this is LOAD, and data is read
|
||||
* by the front-end from the migration stream and sent to
|
||||
* the back-end to restore the saved state.
|
||||
* @phase: Which migration phase we are in. Currently, there is only
|
||||
* STOPPED (device and all vrings are stopped), in the future,
|
||||
* more phases such as PRE_COPY or POST_COPY may be added.
|
||||
* @fd: Back-end's end of the pipe through which to transfer state; note
|
||||
* that ownership is transferred to the back-end, so this function
|
||||
* closes @fd in the front-end.
|
||||
* @reply_fd: If the back-end wishes to use a different pipe for state
|
||||
* transfer, this will contain an FD for the front-end to
|
||||
* use. Otherwise, -1 is stored here.
|
||||
* @errp: Potential error description
|
||||
*
|
||||
* Returns 0 on success, and -errno on failure.
|
||||
*/
|
||||
int vhost_set_device_state_fd(struct vhost_dev *dev,
|
||||
VhostDeviceStateDirection direction,
|
||||
VhostDeviceStatePhase phase,
|
||||
int fd,
|
||||
int *reply_fd,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* vhost_set_device_state_fd(): After transferring state from/to the
|
||||
* back-end via vhost_set_device_state_fd(), i.e. once the sending end
|
||||
* has closed the pipe, inquire the back-end to report any potential
|
||||
* errors that have occurred on its side. This allows to sense errors
|
||||
* like:
|
||||
* - During outgoing migration, when the source side had already started
|
||||
* to produce its state, something went wrong and it failed to finish
|
||||
* - During incoming migration, when the received state is somehow
|
||||
* invalid and cannot be processed by the back-end
|
||||
*
|
||||
* @dev: The vhost device
|
||||
* @errp: Potential error description
|
||||
*
|
||||
* Returns 0 when the back-end reports successful state transfer and
|
||||
* processing, and -errno when an error occurred somewhere.
|
||||
*/
|
||||
int vhost_check_device_state(struct vhost_dev *dev, Error **errp);
|
||||
|
||||
/**
|
||||
* vhost_save_backend_state(): High-level function to receive a vhost
|
||||
* back-end's state, and save it in @f. Uses
|
||||
* `vhost_set_device_state_fd()` to get the data from the back-end, and
|
||||
* stores it in consecutive chunks that are each prefixed by their
|
||||
* respective length (be32). The end is marked by a 0-length chunk.
|
||||
*
|
||||
* Must only be called while the device and all its vrings are stopped
|
||||
* (`VHOST_TRANSFER_STATE_PHASE_STOPPED`).
|
||||
*
|
||||
* @dev: The vhost device from which to save the state
|
||||
* @f: Migration stream in which to save the state
|
||||
* @errp: Potential error message
|
||||
*
|
||||
* Returns 0 on success, and -errno otherwise.
|
||||
*/
|
||||
int vhost_save_backend_state(struct vhost_dev *dev, QEMUFile *f, Error **errp);
|
||||
|
||||
/**
|
||||
* vhost_load_backend_state(): High-level function to load a vhost
|
||||
* back-end's state from @f, and send it over to the back-end. Reads
|
||||
* the data from @f in the format used by `vhost_save_state()`, and uses
|
||||
* `vhost_set_device_state_fd()` to transfer it to the back-end.
|
||||
*
|
||||
* Must only be called while the device and all its vrings are stopped
|
||||
* (`VHOST_TRANSFER_STATE_PHASE_STOPPED`).
|
||||
*
|
||||
* @dev: The vhost device to which to send the sate
|
||||
* @f: Migration stream from which to load the state
|
||||
* @errp: Potential error message
|
||||
*
|
||||
* Returns 0 on success, and -errno otherwise.
|
||||
*/
|
||||
int vhost_load_backend_state(struct vhost_dev *dev, QEMUFile *f, Error **errp);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue