Message ID | 20240331193032.5186-4-minwoo.im.dev@gmail.com |
---|---|
State | New |
Headers | show |
Series | hw/nvme: FDP and SR-IOV enhancements | expand |
On Apr 1 04:30, Minwoo Im wrote: > From: Minwoo Im <minwoo.im@samsung.com> > > The number of virtual functions(VFs) supported in SR-IOV is 64k as per > spec. To test a large number of MSI-X vectors mapping to CPU matrix in > the QEMU system, we need much more than 127 VFs. This patch made > support for 256 VFs per a physical function(PF). > With patch 2 in place, shouldn't it be relatively straight forward to convert the static array to be dynamic and just use numvfs to size it? Then we won't have to add another patch when someone comes around and wants to bump this again ;)
On 24-05-01 14:46:39, Klaus Jensen wrote: > On Apr 1 04:30, Minwoo Im wrote: > > From: Minwoo Im <minwoo.im@samsung.com> > > > > The number of virtual functions(VFs) supported in SR-IOV is 64k as per > > spec. To test a large number of MSI-X vectors mapping to CPU matrix in > > the QEMU system, we need much more than 127 VFs. This patch made > > support for 256 VFs per a physical function(PF). > > > > With patch 2 in place, shouldn't it be relatively straight forward to > convert the static array to be dynamic and just use numvfs to size it? > Then we won't have to add another patch when someone comes around and > wants to bump this again ;) Sorry for the late response here. I will update the 3rd patch to convert secondary controller list static array to a dynamic array with making the max_vfs parameter to uint32.
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 7e60bc9f2075..893d4e96656b 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -8424,7 +8424,7 @@ static Property nvme_props[] = { DEFINE_PROP_UINT8("zoned.zasl", NvmeCtrl, params.zasl, 0), DEFINE_PROP_BOOL("zoned.auto_transition", NvmeCtrl, params.auto_transition_zones, true), - DEFINE_PROP_UINT8("sriov_max_vfs", NvmeCtrl, params.sriov_max_vfs, 0), + DEFINE_PROP_UINT16("sriov_max_vfs", NvmeCtrl, params.sriov_max_vfs, 0), DEFINE_PROP_UINT16("sriov_vq_flexible", NvmeCtrl, params.sriov_vq_flexible, 0), DEFINE_PROP_UINT16("sriov_vi_flexible", NvmeCtrl, diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h index 02c11d909cd1..ad928c28f2c5 100644 --- a/hw/nvme/nvme.h +++ b/hw/nvme/nvme.h @@ -26,7 +26,7 @@ #define NVME_MAX_CONTROLLERS 256 #define NVME_MAX_NAMESPACES 256 -#define NVME_MAX_VFS 127 +#define NVME_MAX_VFS 256 #define NVME_EUI64_DEFAULT ((uint64_t)0x5254000000000000) #define NVME_FDP_MAX_EVENTS 63 #define NVME_FDP_MAXPIDS 128 @@ -518,7 +518,7 @@ typedef struct NvmeParams { bool auto_transition_zones; bool legacy_cmb; bool ioeventfd; - uint8_t sriov_max_vfs; + uint16_t sriov_max_vfs; uint16_t sriov_vq_flexible; uint16_t sriov_vi_flexible; uint8_t sriov_max_vq_per_vf;