From owner-dev-commits-src-main@freebsd.org Wed Apr 7 21:42:53 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 553515C57DB; Wed, 7 Apr 2021 21:42:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4FFyYT1zt1z4qk9; Wed, 7 Apr 2021 21:42:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2C54A266D9; Wed, 7 Apr 2021 21:42:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 137LgrAM015012; Wed, 7 Apr 2021 21:42:53 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 137LgrJC015011; Wed, 7 Apr 2021 21:42:53 GMT (envelope-from git) Date: Wed, 7 Apr 2021 21:42:53 GMT Message-Id: <202104072142.137LgrJC015011@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vincenzo Maffione Subject: git: 15dc713ceb57 - main - netmap: vtnet: add support for netmap offsets MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vmaffione X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 15dc713ceb57d0d61c1dc54b1d550da42d250730 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Apr 2021 21:42:53 -0000 The branch main has been updated by vmaffione: URL: https://cgit.FreeBSD.org/src/commit/?id=15dc713ceb57d0d61c1dc54b1d550da42d250730 commit 15dc713ceb57d0d61c1dc54b1d550da42d250730 Author: Vincenzo Maffione AuthorDate: 2021-04-07 21:32:20 +0000 Commit: Vincenzo Maffione 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;