mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 18:44:58 -06:00
virtio,pc,pci: features, fixes
Several features that landed at the last possible moment: Passthrough HDM decoder emulation Refactor cryptodev RAS error emulation and injection acpi-index support on non-hotpluggable slots Dynamically switch to vhost shadow virtqueues at vdpa net migration Plus a couple of bugfixes that look important to have in the release. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmQJ8TYPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRp37YIAMpQA5/ddmKKz/ABtBMHB5JX/SVYcG+1xkBR j9IFYusOfmmDfmgAhv0Qxi9+Wik95lszVZUnphvocSGd0PXH47pK7yv9RZ1ttaYX oAbXrGqXo8rUhl1ksQsJ8Iasj2di1BLP0byPuozbRkg1Kkz5TqRd9+hBqSBGEx21 tsP5708UVCDAriwYYO78Cx0ZasmB9bqqeom5FdEsg9sYJ5aElOOvitp9YO1p2xhU gRvhD+k/aqNi+mfOUF7qGDBanxKgx75VV/KU1cjjS9R1vNtwRhfc/26PBrROY00a wkZWnAxmzDFKRS6cEfeb+eDGEVjC3IqLAjcFeuAIT/78CwdvIiY= =e1yv -----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 Several features that landed at the last possible moment: Passthrough HDM decoder emulation Refactor cryptodev RAS error emulation and injection acpi-index support on non-hotpluggable slots Dynamically switch to vhost shadow virtqueues at vdpa net migration Plus a couple of bugfixes that look important to have in the release. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # -----BEGIN PGP SIGNATURE----- # # iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmQJ8TYPHG1zdEByZWRo # YXQuY29tAAoJECgfDbjSjVRp37YIAMpQA5/ddmKKz/ABtBMHB5JX/SVYcG+1xkBR # j9IFYusOfmmDfmgAhv0Qxi9+Wik95lszVZUnphvocSGd0PXH47pK7yv9RZ1ttaYX # oAbXrGqXo8rUhl1ksQsJ8Iasj2di1BLP0byPuozbRkg1Kkz5TqRd9+hBqSBGEx21 # tsP5708UVCDAriwYYO78Cx0ZasmB9bqqeom5FdEsg9sYJ5aElOOvitp9YO1p2xhU # gRvhD+k/aqNi+mfOUF7qGDBanxKgx75VV/KU1cjjS9R1vNtwRhfc/26PBrROY00a # wkZWnAxmzDFKRS6cEfeb+eDGEVjC3IqLAjcFeuAIT/78CwdvIiY= # =e1yv # -----END PGP SIGNATURE----- # gpg: Signature made Thu 09 Mar 2023 14:46:14 GMT # 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: (72 commits) virtio: fix reachable assertion due to stale value of cached region size hw/virtio/vhost-user: avoid using unitialized errp hw/pxb-cxl: Support passthrough HDM Decoders unless overridden hw/pci: Add pcie_count_ds_port() and pcie_find_port_first() helpers hw/mem/cxl_type3: Add CXL RAS Error Injection Support. hw/pci/aer: Make PCIE AER error injection facility available for other emulation to use. hw/cxl: Fix endian issues in CXL RAS capability defaults / masks hw/mem/cxl-type3: Add AER extended capability hw/pci-bridge/cxl_root_port: Wire up MSI hw/pci-bridge/cxl_root_port: Wire up AER hw/pci/aer: Add missing routing for AER errors hw/pci/aer: Implement PCI_ERR_UNCOR_MASK register pcihp: add ACPI PCI hotplug specific is_hotpluggable_bus() callback pcihp: move fields enabling hotplug into AcpiPciHpState acpi: pci: move out ACPI PCI hotplug generator from generic slot generator build_append_pci_bus_devices() acpi: pci: move BSEL into build_append_pcihp_slots() acpi: pci: drop BSEL usage when deciding that device isn't hotpluggable pci: move acpi-index uniqueness check to generic PCI device code tests: acpi: update expected blobs tests: acpi: add non zero function device with acpi-index on non-hotpluggble bus ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
674acdd178
97 changed files with 2039 additions and 472 deletions
|
@ -24,7 +24,9 @@
|
|||
#define CRYPTODEV_H
|
||||
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/throttle.h"
|
||||
#include "qom/object.h"
|
||||
#include "qapi/qapi-types-cryptodev.h"
|
||||
|
||||
/**
|
||||
* CryptoDevBackend:
|
||||
|
@ -48,12 +50,6 @@ typedef struct CryptoDevBackendPeers CryptoDevBackendPeers;
|
|||
typedef struct CryptoDevBackendClient
|
||||
CryptoDevBackendClient;
|
||||
|
||||
enum CryptoDevBackendAlgType {
|
||||
CRYPTODEV_BACKEND_ALG_SYM,
|
||||
CRYPTODEV_BACKEND_ALG_ASYM,
|
||||
CRYPTODEV_BACKEND_ALG__MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* CryptoDevBackendSymSessionInfo:
|
||||
*
|
||||
|
@ -179,17 +175,22 @@ typedef struct CryptoDevBackendAsymOpInfo {
|
|||
uint8_t *dst;
|
||||
} CryptoDevBackendAsymOpInfo;
|
||||
|
||||
typedef void (*CryptoDevCompletionFunc) (void *opaque, int ret);
|
||||
|
||||
typedef struct CryptoDevBackendOpInfo {
|
||||
enum CryptoDevBackendAlgType algtype;
|
||||
QCryptodevBackendAlgType algtype;
|
||||
uint32_t op_code;
|
||||
uint32_t queue_index;
|
||||
CryptoDevCompletionFunc cb;
|
||||
void *opaque; /* argument for cb */
|
||||
uint64_t session_id;
|
||||
union {
|
||||
CryptoDevBackendSymOpInfo *sym_op_info;
|
||||
CryptoDevBackendAsymOpInfo *asym_op_info;
|
||||
} u;
|
||||
QTAILQ_ENTRY(CryptoDevBackendOpInfo) next;
|
||||
} CryptoDevBackendOpInfo;
|
||||
|
||||
typedef void (*CryptoDevCompletionFunc) (void *opaque, int ret);
|
||||
struct CryptoDevBackendClass {
|
||||
ObjectClass parent_class;
|
||||
|
||||
|
@ -209,24 +210,11 @@ struct CryptoDevBackendClass {
|
|||
void *opaque);
|
||||
|
||||
int (*do_op)(CryptoDevBackend *backend,
|
||||
CryptoDevBackendOpInfo *op_info,
|
||||
uint32_t queue_index,
|
||||
CryptoDevCompletionFunc cb,
|
||||
void *opaque);
|
||||
CryptoDevBackendOpInfo *op_info);
|
||||
};
|
||||
|
||||
typedef enum CryptoDevBackendOptionsType {
|
||||
CRYPTODEV_BACKEND_TYPE_NONE = 0,
|
||||
CRYPTODEV_BACKEND_TYPE_BUILTIN = 1,
|
||||
CRYPTODEV_BACKEND_TYPE_VHOST_USER = 2,
|
||||
CRYPTODEV_BACKEND_TYPE_LKCF = 3,
|
||||
CRYPTODEV_BACKEND_TYPE__MAX,
|
||||
} CryptoDevBackendOptionsType;
|
||||
|
||||
struct CryptoDevBackendClient {
|
||||
CryptoDevBackendOptionsType type;
|
||||
char *model;
|
||||
char *name;
|
||||
QCryptodevBackendType type;
|
||||
char *info_str;
|
||||
unsigned int queue_index;
|
||||
int vring_enable;
|
||||
|
@ -260,6 +248,24 @@ struct CryptoDevBackendConf {
|
|||
uint64_t max_size;
|
||||
};
|
||||
|
||||
typedef struct CryptodevBackendSymStat {
|
||||
int64_t encrypt_ops;
|
||||
int64_t decrypt_ops;
|
||||
int64_t encrypt_bytes;
|
||||
int64_t decrypt_bytes;
|
||||
} CryptodevBackendSymStat;
|
||||
|
||||
typedef struct CryptodevBackendAsymStat {
|
||||
int64_t encrypt_ops;
|
||||
int64_t decrypt_ops;
|
||||
int64_t sign_ops;
|
||||
int64_t verify_ops;
|
||||
int64_t encrypt_bytes;
|
||||
int64_t decrypt_bytes;
|
||||
int64_t sign_bytes;
|
||||
int64_t verify_bytes;
|
||||
} CryptodevBackendAsymStat;
|
||||
|
||||
struct CryptoDevBackend {
|
||||
Object parent_obj;
|
||||
|
||||
|
@ -267,15 +273,48 @@ struct CryptoDevBackend {
|
|||
/* Tag the cryptodev backend is used by virtio-crypto or not */
|
||||
bool is_used;
|
||||
CryptoDevBackendConf conf;
|
||||
CryptodevBackendSymStat *sym_stat;
|
||||
CryptodevBackendAsymStat *asym_stat;
|
||||
|
||||
ThrottleState ts;
|
||||
ThrottleTimers tt;
|
||||
ThrottleConfig tc;
|
||||
QTAILQ_HEAD(, CryptoDevBackendOpInfo) opinfos;
|
||||
};
|
||||
|
||||
#define CryptodevSymStatInc(be, op, bytes) do { \
|
||||
be->sym_stat->op##_bytes += (bytes); \
|
||||
be->sym_stat->op##_ops += 1; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
#define CryptodevSymStatIncEncrypt(be, bytes) \
|
||||
CryptodevSymStatInc(be, encrypt, bytes)
|
||||
|
||||
#define CryptodevSymStatIncDecrypt(be, bytes) \
|
||||
CryptodevSymStatInc(be, decrypt, bytes)
|
||||
|
||||
#define CryptodevAsymStatInc(be, op, bytes) do { \
|
||||
be->asym_stat->op##_bytes += (bytes); \
|
||||
be->asym_stat->op##_ops += 1; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
#define CryptodevAsymStatIncEncrypt(be, bytes) \
|
||||
CryptodevAsymStatInc(be, encrypt, bytes)
|
||||
|
||||
#define CryptodevAsymStatIncDecrypt(be, bytes) \
|
||||
CryptodevAsymStatInc(be, decrypt, bytes)
|
||||
|
||||
#define CryptodevAsymStatIncSign(be, bytes) \
|
||||
CryptodevAsymStatInc(be, sign, bytes)
|
||||
|
||||
#define CryptodevAsymStatIncVerify(be, bytes) \
|
||||
CryptodevAsymStatInc(be, verify, bytes)
|
||||
|
||||
|
||||
/**
|
||||
* cryptodev_backend_new_client:
|
||||
* @model: the cryptodev backend model
|
||||
* @name: the cryptodev backend name, can be NULL
|
||||
*
|
||||
* Creates a new cryptodev backend client object
|
||||
* with the @name in the model @model.
|
||||
* Creates a new cryptodev backend client object.
|
||||
*
|
||||
* The returned object must be released with
|
||||
* cryptodev_backend_free_client() when no
|
||||
|
@ -283,9 +322,8 @@ struct CryptoDevBackend {
|
|||
*
|
||||
* Returns: a new cryptodev backend client object
|
||||
*/
|
||||
CryptoDevBackendClient *
|
||||
cryptodev_backend_new_client(const char *model,
|
||||
const char *name);
|
||||
CryptoDevBackendClient *cryptodev_backend_new_client(void);
|
||||
|
||||
/**
|
||||
* cryptodev_backend_free_client:
|
||||
* @cc: the cryptodev backend client object
|
||||
|
@ -354,24 +392,17 @@ int cryptodev_backend_close_session(
|
|||
/**
|
||||
* cryptodev_backend_crypto_operation:
|
||||
* @backend: the cryptodev backend object
|
||||
* @opaque1: pointer to a VirtIOCryptoReq object
|
||||
* @queue_index: queue index of cryptodev backend client
|
||||
* @errp: pointer to a NULL-initialized error object
|
||||
* @cb: callbacks when operation is completed
|
||||
* @opaque2: parameter passed to cb
|
||||
* @op_info: pointer to a CryptoDevBackendOpInfo object
|
||||
*
|
||||
* Do crypto operation, such as encryption and
|
||||
* decryption
|
||||
* Do crypto operation, such as encryption, decryption, signature and
|
||||
* verification
|
||||
*
|
||||
* Returns: 0 for success and cb will be called when creation is completed,
|
||||
* negative value for error, and cb will not be called.
|
||||
*/
|
||||
int cryptodev_backend_crypto_operation(
|
||||
CryptoDevBackend *backend,
|
||||
void *opaque1,
|
||||
uint32_t queue_index,
|
||||
CryptoDevCompletionFunc cb,
|
||||
void *opaque2);
|
||||
CryptoDevBackendOpInfo *op_info);
|
||||
|
||||
/**
|
||||
* cryptodev_backend_set_used:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue