From owner-svn-src-head@freebsd.org Mon Nov 20 04:32:02 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5EB35DE119C; Mon, 20 Nov 2017 04:32:02 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 223E06F7B8; Mon, 20 Nov 2017 04:32:02 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id vAK4W1rq047728; Mon, 20 Nov 2017 04:32:01 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id vAK4W1OE047727; Mon, 20 Nov 2017 04:32:01 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201711200432.vAK4W1OE047727@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Mon, 20 Nov 2017 04:32:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r326004 - head/sys/dev/dpaa X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: head/sys/dev/dpaa X-SVN-Commit-Revision: 326004 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Nov 2017 04:32:03 -0000 Author: jhibbits Date: Mon Nov 20 04:32:01 2017 New Revision: 326004 URL: https://svnweb.freebsd.org/changeset/base/326004 Log: Eliminate 1 XX_VirtToPhys() and 2 XX_PhysToVirt() calls from if_dtsec(4) XX_VirtToPhys(), by way of pmap_kextract(), is an expensive operation. Profiling via dtrace during a series of iperf tests I found 16111 / 30432 stack frames were located in mmu_booke_kextract(), so eliminating this expensive call should improve performance slightly. XX_PhysToVirt() is not as expensive, but redundant calls in this context is wasteful. Modified: head/sys/dev/dpaa/if_dtsec_rm.c Modified: head/sys/dev/dpaa/if_dtsec_rm.c ============================================================================== --- head/sys/dev/dpaa/if_dtsec_rm.c Mon Nov 20 03:40:50 2017 (r326003) +++ head/sys/dev/dpaa/if_dtsec_rm.c Mon Nov 20 04:32:01 2017 (r326004) @@ -358,10 +358,12 @@ dtsec_rm_fqr_rx_callback(t_Handle app, t_Handle fqr, t { struct dtsec_softc *sc; struct mbuf *m; + void *frame_va; m = NULL; sc = app; + frame_va = DPAA_FD_GET_ADDR(frame); KASSERT(DPAA_FD_GET_FORMAT(frame) == e_DPAA_FD_FORMAT_TYPE_SHORT_SBSF, ("%s(): Got unsupported frame format 0x%02X!", __func__, DPAA_FD_GET_FORMAT(frame))); @@ -379,8 +381,8 @@ dtsec_rm_fqr_rx_callback(t_Handle app, t_Handle fqr, t if (m == NULL) goto err; - m_extadd(m, DPAA_FD_GET_ADDR(frame), FM_PORT_BUFFER_SIZE, - dtsec_rm_fqr_mext_free, DPAA_FD_GET_ADDR(frame), sc, 0, + m_extadd(m, frame_va, FM_PORT_BUFFER_SIZE, + dtsec_rm_fqr_mext_free, frame_va, sc, 0, EXT_NET_DRV); m->m_pkthdr.rcvif = sc->sc_ifnet; @@ -392,7 +394,7 @@ dtsec_rm_fqr_rx_callback(t_Handle app, t_Handle fqr, t return (e_RX_STORE_RESPONSE_CONTINUE); err: - bman_put_buffer(sc->sc_rx_pool, DPAA_FD_GET_ADDR(frame)); + bman_put_buffer(sc->sc_rx_pool, frame_va); if (m != NULL) m_freem(m); @@ -545,7 +547,6 @@ dtsec_rm_if_start_locked(struct dtsec_softc *sc) unsigned int qlen, i; struct mbuf *m0, *m; vm_offset_t vaddr; - vm_paddr_t paddr; t_DpaaFD fd; DTSEC_LOCK_ASSERT(sc); @@ -602,8 +603,7 @@ dtsec_rm_if_start_locked(struct dtsec_softc *sc) dsize = m->m_len; vaddr = (vm_offset_t)m->m_data; while (dsize > 0 && i < DPAA_NUM_OF_SG_TABLE_ENTRY) { - paddr = XX_VirtToPhys((void *)vaddr); - ssize = PAGE_SIZE - (paddr & PAGE_MASK); + ssize = PAGE_SIZE - (vaddr & PAGE_MASK); if (m->m_len < ssize) ssize = m->m_len;