Date: Sat, 8 Oct 2016 05:26:45 +0000 (UTC) From: Justin Hibbits <jhibbits@FreeBSD.org> 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 Message-ID: <201610080526.u985Qjqo003570@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201610080526.u985Qjqo003570>