Date: Mon, 2 Jul 2018 19:48:38 +0000 (UTC) From: Matt Macy <mmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r335873 - in head: . sys/amd64/amd64 sys/amd64/include sys/conf sys/i386/i386 sys/i386/include sys/sys sys/vm Message-ID: <201807021948.w62JmcV6019378@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mmacy Date: Mon Jul 2 19:48:38 2018 New Revision: 335873 URL: https://svnweb.freebsd.org/changeset/base/335873 Log: inline atomics and allow tied modules to inline locks - inline atomics in modules on i386 and amd64 (they were always inline on other arches) - allow modules to opt in to inlining locks by specifying MODULE_TIED=1 in the makefile Reviewed by: kib Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D16079 Deleted: head/sys/amd64/amd64/atomic.c head/sys/i386/i386/atomic.c Modified: head/UPDATING head/sys/amd64/include/atomic.h head/sys/conf/files.amd64 head/sys/conf/files.i386 head/sys/conf/kmod.mk head/sys/i386/include/atomic.h head/sys/sys/lock.h head/sys/sys/module.h head/sys/sys/mutex.h head/sys/sys/param.h head/sys/vm/vm_map.h head/sys/vm/vm_page.h Modified: head/UPDATING ============================================================================== --- head/UPDATING Mon Jul 2 19:33:26 2018 (r335872) +++ head/UPDATING Mon Jul 2 19:48:38 2018 (r335873) @@ -31,6 +31,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20180702: + On i386 and amd64 atomics are now inlined. Out of tree modules using + atomics will need to be rebuilt. + 20180701: The '%I' format in the kern.corefile sysctl limits the number of core files that a process can generate to the number stored in the Modified: head/sys/amd64/include/atomic.h ============================================================================== --- head/sys/amd64/include/atomic.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/amd64/include/atomic.h Mon Jul 2 19:48:38 2018 (r335873) @@ -96,7 +96,7 @@ * Kernel modules call real functions which are built into the kernel. * This allows kernel modules to be portable between UP and SMP systems. */ -#if defined(KLD_MODULE) || !defined(__GNUCLIKE_ASM) +#if !defined(__GNUCLIKE_ASM) #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ void atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v) Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/conf/files.amd64 Mon Jul 2 19:48:38 2018 (r335873) @@ -126,7 +126,6 @@ acpi_wakedata.h optional acpi \ clean "acpi_wakedata.h" # #amd64/amd64/apic_vector.S standard -amd64/amd64/atomic.c standard amd64/amd64/bios.c standard amd64/amd64/bpf_jit_machdep.c optional bpf_jitter amd64/amd64/cpu_switch.S standard Modified: head/sys/conf/files.i386 ============================================================================== --- head/sys/conf/files.i386 Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/conf/files.i386 Mon Jul 2 19:48:38 2018 (r335873) @@ -474,8 +474,6 @@ i386/bios/smapi.c optional smapi i386/bios/smapi_bios.S optional smapi i386/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32 #i386/i386/apic_vector.s optional apic -i386/i386/atomic.c standard \ - compile-with "${CC} -c ${CFLAGS} ${DEFINED_PROF:S/^$/-fomit-frame-pointer/} ${.IMPSRC}" i386/i386/bios.c standard i386/i386/bioscall.s standard i386/i386/bpf_jit_machdep.c optional bpf_jitter Modified: head/sys/conf/kmod.mk ============================================================================== --- head/sys/conf/kmod.mk Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/conf/kmod.mk Mon Jul 2 19:48:38 2018 (r335873) @@ -111,6 +111,9 @@ WERROR?= -Werror CFLAGS+= ${WERROR} CFLAGS+= -D_KERNEL CFLAGS+= -DKLD_MODULE +.if defined(MODULE_TIED) +CFLAGS+= -DKLD_TIED +.endif # Don't use any standard or source-relative include directories. NOSTDINC= -nostdinc Modified: head/sys/i386/include/atomic.h ============================================================================== --- head/sys/i386/include/atomic.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/i386/include/atomic.h Mon Jul 2 19:48:38 2018 (r335873) @@ -104,7 +104,7 @@ __mbu(void) * Kernel modules call real functions which are built into the kernel. * This allows kernel modules to be portable between UP and SMP systems. */ -#if defined(KLD_MODULE) || !defined(__GNUCLIKE_ASM) +#if !defined(__GNUCLIKE_ASM) #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ void atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v) Modified: head/sys/sys/lock.h ============================================================================== --- head/sys/sys/lock.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/sys/lock.h Mon Jul 2 19:48:38 2018 (r335873) @@ -127,7 +127,7 @@ struct lock_class { * calling conventions for this debugging code in modules so that modules can * work with both debug and non-debug kernels. */ -#if defined(KLD_MODULE) || defined(WITNESS) || defined(INVARIANTS) || \ +#if (defined(KLD_MODULE) && !defined(KLD_TIED)) || defined(WITNESS) || defined(INVARIANTS) || \ defined(LOCK_PROFILING) || defined(KTR) #define LOCK_DEBUG 1 #else Modified: head/sys/sys/module.h ============================================================================== --- head/sys/sys/module.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/sys/module.h Mon Jul 2 19:48:38 2018 (r335873) @@ -146,8 +146,13 @@ struct mod_pnp_match_info SYSINIT(name##module, sub, order, module_register_init, &data); \ struct __hack +#ifdef KLD_TIED #define DECLARE_MODULE(name, data, sub, order) \ + DECLARE_MODULE_WITH_MAXVER(name, data, sub, order, __FreeBSD_version) +#else +#define DECLARE_MODULE(name, data, sub, order) \ DECLARE_MODULE_WITH_MAXVER(name, data, sub, order, MODULE_KERNEL_MAXVER) +#endif /* * The module declared with DECLARE_MODULE_TIED can only be loaded Modified: head/sys/sys/mutex.h ============================================================================== --- head/sys/sys/mutex.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/sys/mutex.h Mon Jul 2 19:48:38 2018 (r335873) @@ -138,7 +138,7 @@ void _thread_lock(struct thread *td, int opts, const c void _thread_lock(struct thread *); #endif -#if defined(LOCK_PROFILING) || defined(KLD_MODULE) +#if defined(LOCK_PROFILING) || (defined(KLD_MODULE) && !defined(KLD_TIED)) #define thread_lock(tdp) \ thread_lock_flags_((tdp), 0, __FILE__, __LINE__) #elif LOCK_DEBUG > 0 Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/sys/param.h Mon Jul 2 19:48:38 2018 (r335873) @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1200069 /* Master, propagated to newvers */ +#define __FreeBSD_version 1200070 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: head/sys/vm/vm_map.h ============================================================================== --- head/sys/vm/vm_map.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/vm/vm_map.h Mon Jul 2 19:48:38 2018 (r335873) @@ -206,7 +206,7 @@ struct vm_map { #define MAP_BUSY_WAKEUP 0x02 #ifdef _KERNEL -#ifdef KLD_MODULE +#if defined(KLD_MODULE) && !defined(KLD_TIED) #define vm_map_max(map) vm_map_max_KBI((map)) #define vm_map_min(map) vm_map_min_KBI((map)) #define vm_map_pmap(map) vm_map_pmap_KBI((map)) Modified: head/sys/vm/vm_page.h ============================================================================== --- head/sys/vm/vm_page.h Mon Jul 2 19:33:26 2018 (r335872) +++ head/sys/vm/vm_page.h Mon Jul 2 19:48:38 2018 (r335873) @@ -304,7 +304,7 @@ extern struct mtx_padalign pa_lock[]; #define PA_LOCK_ASSERT(pa, a) mtx_assert(PA_LOCKPTR(pa), (a)) -#ifdef KLD_MODULE +#if defined(KLD_MODULE) && !defined(KLD_TIED) #define vm_page_lock(m) vm_page_lock_KBI((m), LOCK_FILE, LOCK_LINE) #define vm_page_unlock(m) vm_page_unlock_KBI((m), LOCK_FILE, LOCK_LINE) #define vm_page_trylock(m) vm_page_trylock_KBI((m), LOCK_FILE, LOCK_LINE) @@ -734,7 +734,7 @@ vm_page_dirty(vm_page_t m) { /* Use vm_page_dirty_KBI() under INVARIANTS to save memory. */ -#if defined(KLD_MODULE) || defined(INVARIANTS) +#if (defined(KLD_MODULE) && !defined(KLD_TIED)) || defined(INVARIANTS) vm_page_dirty_KBI(m); #else m->dirty = VM_PAGE_BITS_ALL;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807021948.w62JmcV6019378>