The branch main has been updated by vmaffione:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=15dc713ceb57d0d61c1dc54b1d550da42d250730

commit 15dc713ceb57d0d61c1dc54b1d550da42d250730
Author:     Vincenzo Maffione <vmaffi...@freebsd.org>
AuthorDate: 2021-04-07 21:32:20 +0000
Commit:     Vincenzo Maffione <vmaffi...@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;
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to