On Friday, July 6, 2018, Rodney W. Grimes <free...@pdx.rh.cn85.dnsmgr.net> wrote:
> > Author: hselasky > > Date: Fri Jul 6 10:13:42 2018 > > New Revision: 336025 > > URL: https://svnweb.freebsd.org/changeset/base/336025 > > > > Log: > > Make sure kernel modules built by default are portable between UP and > > SMP systems by extending defined(SMP) to include defined(KLD_MODULE). > > > > This is a regression issue after r335873 . > > > > Discussed with: mmacy@ > > Sponsored by: Mellanox Technologies > > Though this fixes the issue, it also means that now when > anyone intentionally builds a UP kernel with modules > they are getting SMP support in the modules and I am > not sure they would want that. I know I don't. > > On linux case the lock instructions are runtime patchable. They have so called altinstruction facility, which able to detect specific conditions - in this case up vs smp - and in up case the locks are replaced with simple nops or one multi word nop when the instruction longer than 1 byte. > > Modified: > > head/sys/amd64/include/atomic.h > > head/sys/i386/include/atomic.h > > > > Modified: head/sys/amd64/include/atomic.h > > ============================================================ > ================== > > --- head/sys/amd64/include/atomic.h Fri Jul 6 10:10:00 2018 > (r336024) > > +++ head/sys/amd64/include/atomic.h Fri Jul 6 10:13:42 2018 > (r336025) > > @@ -132,7 +132,7 @@ void atomic_store_rel_##TYPE(volatile > u_##TYPE *p, u_ > > * For userland, always use lock prefixes so that the binaries will run > > * on both SMP and !SMP systems. > > */ > > -#if defined(SMP) || !defined(_KERNEL) > > +#if defined(SMP) || !defined(_KERNEL) || defined(KLD_MODULE) > > #define MPLOCKED "lock ; " > > #else > > #define MPLOCKED > > @@ -354,7 +354,7 @@ atomic_testandclear_long(volatile u_long *p, u_int > v) > > */ > > #define OFFSETOF_MONITORBUF 0x100 > > > > -#if defined(SMP) > > +#if defined(SMP) || defined(KLD_MODULE) > > static __inline void > > __storeload_barrier(void) > > { > > > > Modified: head/sys/i386/include/atomic.h > > ============================================================ > ================== > > --- head/sys/i386/include/atomic.h Fri Jul 6 10:10:00 2018 > (r336024) > > +++ head/sys/i386/include/atomic.h Fri Jul 6 10:13:42 2018 > (r336025) > > @@ -143,7 +143,7 @@ void atomic_subtract_64(volatile > uint64_t *, uint64_t > > * For userland, always use lock prefixes so that the binaries will run > > * on both SMP and !SMP systems. > > */ > > -#if defined(SMP) || !defined(_KERNEL) > > +#if defined(SMP) || !defined(_KERNEL) || defined(KLD_MODULE) > > #define MPLOCKED "lock ; " > > #else > > #define MPLOCKED > > @@ -302,7 +302,7 @@ atomic_testandclear_int(volatile u_int *p, u_int v) > > */ > > > > #if defined(_KERNEL) > > -#if defined(SMP) > > +#if defined(SMP) || defined(KLD_MODULE) > > #define __storeload_barrier() __mbk() > > #else /* _KERNEL && UP */ > > #define __storeload_barrier() __compiler_membar() > > > > > > -- > Rod Grimes > rgri...@freebsd.org > _______________________________________________ > svn-src-h...@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org" > _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"