git: 15dc713ceb57 - main - netmap: vtnet: add support for netmap offsets
Vincenzo Maffione
vmaffione at FreeBSD.org
Wed Apr 7 21:42:53 UTC 2021
The branch main has been updated by vmaffione:
URL: https://cgit.FreeBSD.org/src/commit/?id=15dc713ceb57d0d61c1dc54b1d550da42d250730
commit 15dc713ceb57d0d61c1dc54b1d550da42d250730
Author: Vincenzo Maffione <vmaffione at FreeBSD.org>
AuthorDate: 2021-04-07 21:32:20 +0000
Commit: Vincenzo Maffione <vmaffione at 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;
More information about the dev-commits-src-main
mailing list