From owner-svn-src-head@freebsd.org Sat Oct 8 05:26:46 2016 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 B7C22C05613; Sat, 8 Oct 2016 05:26:46 +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 784DB390; Sat, 8 Oct 2016 05:26:46 +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 u985QjhI003572; Sat, 8 Oct 2016 05:26:45 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u985Qjqo003570; Sat, 8 Oct 2016 05:26:45 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201610080526.u985Qjqo003570@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 8 Oct 2016 05:26:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r306839 - in head/sys/contrib/ncsw: inc user/env X-SVN-Group: head 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.23 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: Sat, 08 Oct 2016 05:26:46 -0000 Author: jhibbits Date: Sat Oct 8 05:26:45 2016 New Revision: 306839 URL: https://svnweb.freebsd.org/changeset/base/306839 Log: Minor optimizations to dTSEC glue code Don't call pmap_kextract() multiple times, it wastes CPU cycles, which in a high performance environment can be very expensive. Inline XX_FindTracker() to allow more optimizations as well. Modified: head/sys/contrib/ncsw/inc/xx_ext.h head/sys/contrib/ncsw/user/env/xx.c Modified: head/sys/contrib/ncsw/inc/xx_ext.h ============================================================================== --- head/sys/contrib/ncsw/inc/xx_ext.h Sat Oct 8 01:18:01 2016 (r306838) +++ head/sys/contrib/ncsw/inc/xx_ext.h Sat Oct 8 05:26:45 2016 (r306839) @@ -932,7 +932,7 @@ t_Error XX_IpcSendMessage(t_Handle /** FreeBSD Specific additions. */ void XX_TrackInit(void); -void XX_TrackAddress(void *addr); +physAddress_t XX_TrackAddress(void *addr); void XX_UntrackAddress(void *addr); #endif /* __XX_EXT_H */ Modified: head/sys/contrib/ncsw/user/env/xx.c ============================================================================== --- head/sys/contrib/ncsw/user/env/xx.c Sat Oct 8 01:18:01 2016 (r306838) +++ head/sys/contrib/ncsw/user/env/xx.c Sat Oct 8 05:26:45 2016 (r306839) @@ -746,7 +746,6 @@ XX_IpcFreeSession(t_Handle h_Session) return (E_OK); } -extern void db_trace_self(void); physAddress_t XX_VirtToPhys(void *addr) { @@ -785,12 +784,10 @@ XX_VirtToPhys(void *addr) return (XX_PInfo.portal_ci_pa[QM_PORTAL][cpu] + (vm_offset_t)addr - XX_PInfo.portal_ci_va[QM_PORTAL]); - paddr = pmap_kextract((vm_offset_t)addr); - if (!paddr) + paddr = XX_TrackAddress(addr); + if (paddr == -1) printf("NetCommSW: " "Unable to translate virtual address 0x%08X!\n", addr); - else - XX_TrackAddress(addr); return (paddr); } @@ -881,7 +878,7 @@ end: free(dev_name, M_TEMP); } -static XX_MallocTrackStruct * +static inline XX_MallocTrackStruct * XX_FindTracker(physAddress_t pa) { struct XX_MallocTrackerList *l; @@ -906,7 +903,7 @@ XX_TrackInit(void) } } -void +physAddress_t XX_TrackAddress(void *addr) { physAddress_t pa; @@ -915,18 +912,20 @@ XX_TrackAddress(void *addr) pa = pmap_kextract((vm_offset_t)addr); - ts = malloc(sizeof(*ts), M_NETCOMMSW_MT, M_NOWAIT); - ts->va = addr; - ts->pa = pa; - l = &XX_MallocTracker[(pa >> XX_MALLOC_TRACK_SHIFT) & XX_MallocHashMask]; mtx_lock(&XX_MallocTrackLock); - if (XX_FindTracker(pa) != NULL) - free(ts, M_NETCOMMSW_MT); - else + if (XX_FindTracker(pa) == NULL) { + ts = malloc(sizeof(*ts), M_NETCOMMSW_MT, M_NOWAIT); + if (ts == NULL) + return (-1); + ts->va = addr; + ts->pa = pa; LIST_INSERT_HEAD(l, ts, entries); + } mtx_unlock(&XX_MallocTrackLock); + + return (pa); } void