svn commit: r335873 - in head: . sys/amd64/amd64 sys/amd64/include sys/conf sys/i386/i386 sys/i386/include sys/sys sys/vm
Matt Macy
mmacy at FreeBSD.org
Mon Jul 2 19:48:41 UTC 2018
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;
More information about the svn-src-all
mailing list