Date: Wed, 7 Apr 2021 21:42:53 GMT From: Vincenzo Maffione <vmaffione@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 15dc713ceb57 - main - netmap: vtnet: add support for netmap offsets Message-ID: <202104072142.137LgrJC015011@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by vmaffione: URL: https://cgit.FreeBSD.org/src/commit/?id=15dc713ceb57d0d61c1dc54b1d550da42d250730 commit 15dc713ceb57d0d61c1dc54b1d550da42d250730 Author: Vincenzo Maffione <vmaffione@FreeBSD.org> AuthorDate: 2021-04-07 21:32:20 +0000 Commit: Vincenzo Maffione <vmaffione@FreeBSD.org> CommitDate: 2021-04-07 21:32:20 +0000 netmap: vtnet: add support for netmap offsets Follow-up change to a6d768d845c173823785c71bb18b40074e7a8998. This change adds support for netmap offsets. --- sys/dev/netmap/if_vtnet_netmap.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sys/dev/netmap/if_vtnet_netmap.h b/sys/dev/netmap/if_vtnet_netmap.h index a05781255218..a423e71331be 100644 --- a/sys/dev/netmap/if_vtnet_netmap.h +++ b/sys/dev/netmap/if_vtnet_netmap.h @@ -84,12 +84,14 @@ vtnet_netmap_txsync(struct netmap_kring *kring, int flags) for (; nm_i != head; nm_i = nm_next(nm_i, lim)) { /* we use an empty header here */ struct netmap_slot *slot = &ring->slot[nm_i]; + uint64_t offset = nm_get_offset(kring, slot); u_int len = slot->len; uint64_t paddr; void *addr = PNMB(na, slot, &paddr); int err; - NM_CHECK_ADDR_LEN(na, addr, len); + (void)addr; + NM_CHECK_ADDR_LEN_OFF(na, len, offset); slot->flags &= ~(NS_REPORT | NS_BUF_CHANGED); /* Initialize the scatterlist, expose it to the hypervisor, @@ -97,7 +99,7 @@ vtnet_netmap_txsync(struct netmap_kring *kring, int flags) */ sglist_reset(sg); // cheap err = sglist_append(sg, &txq->vtntx_shrhdr, sc->vtnet_hdr_size); - err |= sglist_append_phys(sg, paddr, len); + err |= sglist_append_phys(sg, paddr + offset, len); KASSERT(err == 0, ("%s: cannot append to sglist %d", __func__, err)); err = virtqueue_enqueue(vq, /*cookie=*/txq, sg, @@ -171,19 +173,21 @@ vtnet_netmap_kring_refill(struct netmap_kring *kring, u_int num) for (nm_i = rxq->vtnrx_nm_refill; num > 0; nm_i = nm_next(nm_i, lim), num--) { struct netmap_slot *slot = &ring->slot[nm_i]; + uint64_t offset = nm_get_offset(kring, slot); uint64_t paddr; void *addr = PNMB(na, slot, &paddr); int err; if (addr == NETMAP_BUF_BASE(na)) { /* bad buf */ - if (netmap_ring_reinit(kring)) - return EFAULT; + netmap_ring_reinit(kring); + return EFAULT; } slot->flags &= ~NS_BUF_CHANGED; sglist_reset(&sg); err = sglist_append(&sg, &rxq->vtnrx_shrhdr, sc->vtnet_hdr_size); - err |= sglist_append_phys(&sg, paddr, NETMAP_BUF_SIZE(na)); + err |= sglist_append_phys(&sg, paddr + offset, + NETMAP_BUF_SIZE(na) - offset); KASSERT(err == 0, ("%s: cannot append to sglist %d", __func__, err)); /* writable for the host */ @@ -432,7 +436,7 @@ vtnet_netmap_attach(struct vtnet_softc *sc) bzero(&na, sizeof(na)); na.ifp = sc->vtnet_ifp; - na.na_flags = 0; + na.na_flags = NAF_OFFSETS; na.num_tx_desc = vtnet_netmap_tx_slots(sc); na.num_rx_desc = vtnet_netmap_rx_slots(sc); na.num_tx_rings = na.num_rx_rings = sc->vtnet_max_vq_pairs;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104072142.137LgrJC015011>