Download raw body.
iavf: remove IAVF_MAX_VECTORS
The iavf spec says the VF is guaranteed at least 5 MSI-X vectors and
4 queue pairs; the size of the MSI-X table is accounted for already,
and we get the actual number of queue pairs in response to the
IAVF_VC_OP_GET_VF_RESOURCES message, so we can get rid of
IAVF_MAX_VECTORS and we'll be able to make use of bigger VFs should
they ever exist.
ok?
Index: if_iavf.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iavf.c,v
diff -u -p -r1.26 if_iavf.c
--- if_iavf.c 11 Nov 2025 17:43:18 -0000 1.26
+++ if_iavf.c 19 Nov 2025 10:46:29 -0000
@@ -91,7 +91,6 @@
#define CACHE_LINE_SIZE 64
#endif
-#define IAVF_MAX_VECTORS 4
#define IAVF_MAX_DMA_SEG_SIZE ((16 * 1024) - 1)
#define I40E_MASK(mask, shift) ((mask) << (shift))
@@ -643,6 +642,7 @@ struct iavf_softc {
uint32_t sc_vf_id;
uint16_t sc_vsi_id;
uint16_t sc_qset_handle;
+ uint16_t sc_num_queue_pairs;
unsigned int sc_base_queue;
uint32_t sc_rss_key_size;
uint32_t sc_rss_lut_size;
@@ -1035,7 +1035,7 @@ iavf_attach(struct device *parent, struc
nmsix--;
sc->sc_intrmap = intrmap_create(&sc->sc_dev, nmsix,
- MIN(IAVF_MAX_VECTORS, IF_MAX_VECTORS),
+ MIN(sc->sc_num_queue_pairs, IF_MAX_VECTORS),
INTRMAP_POWEROF2);
nqueues = intrmap_count(sc->sc_intrmap);
KASSERT(nqueues > 0);
@@ -2588,13 +2588,11 @@ iavf_process_vf_resources(struct iavf_so
if (mtu != 0)
ifp->if_hardmtu = MIN(IAVF_HARDMTU, mtu);
- /* limit vectors to what we got here? */
-
/* just take the first vsi */
vsi_res = &vf_res->vsi_res[0];
sc->sc_vsi_id = letoh16(vsi_res->vsi_id);
sc->sc_qset_handle = letoh16(vsi_res->qset_handle);
- /* limit number of queues to what we got here */
+ sc->sc_num_queue_pairs = letoh16(vsi_res->num_queue_pairs);
/* is vsi type interesting? */
sc->sc_vf_id = letoh32(desc->iaq_param[0]);
iavf: remove IAVF_MAX_VECTORS