From: Jonathan Matthew Subject: iavf: remove IAVF_MAX_VECTORS To: tech@openbsd.org Cc: jan@openbsd.org, bluhm@openbsd.org Date: Wed, 19 Nov 2025 20:49:19 +1000 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]);