From owner-svn-src-all@freebsd.org Fri Jul 6 15:47:02 2018 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B97671033200 for ; Fri, 6 Jul 2018 15:47:02 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-it0-x241.google.com (mail-it0-x241.google.com [IPv6:2607:f8b0:4001:c0b::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4464D86D4B for ; Fri, 6 Jul 2018 15:47:02 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-it0-x241.google.com with SMTP id p17-v6so17715595itc.2 for ; Fri, 06 Jul 2018 08:47:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=snti7yuoB4Q60Hawk++yB81jLtCiKY2tAhCyGN1XQOk=; b=GYIBYENbzZMBP+Tz3B9iDZJsUFkypMLGEyQQuR8BzumcH8+8A5oe1zb6061CGWcPzf 0Lp5LyVBoDTP++YLrqtDSYOxkDPMfH/k91GBb2m2f5bGrYXbYkpK7wF3WKoq20OXQWTB Shq6HjCu1xGAngohi8D0UeW/IXGcR6hAum8b5BHEqUU+qTLC3cfqnluF9D4n+R2VFdsp LioLo62EChEWYDtu5xwRsgNBdYlOjnZQkXM5AdVpqATATxK79j8py8SV1CTihWiY12tP VFGsWz6eFd1W1NdkW8Iidr4cyhKAi7YFhsdxKM2Stz+9wjlH9j4k1Yk+KJ+0zqIgjbnm zBlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=snti7yuoB4Q60Hawk++yB81jLtCiKY2tAhCyGN1XQOk=; b=IkQoDGly0d3Bbt7MygU3qg8Ub9ztry0eQ9Dx+Ze64f5imfnuaAbBLibTTlemQyiNPH FO9v94W5BI0gzK4jWdmu5Hg0zex60Nes9otd1M03xsRJXMO2bRflrqvCEDnKDY0lQlgb x0yraYXpOIiRrjKQzWjflL+JPtpBGhNOSh7RZqwrXpNp5+wqwH0cmTPYPcAimq8ovTmO 443GFHuuHIO0odwEwlOz6PFRSMYr7fk+YY5BLhpDcJzL5wVjKWVoBEFnvqjHx7OwCU+M LhuaR0nADWceFhhqCmBqNnC63l7PFV3VEs+EDjyrCF5wTgkGtqRP0ivfglcXKOWDZDX+ DFsg== X-Gm-Message-State: APt69E0blfisrb8nTEilgPGUb6rD+MTNElG4OvlHO3lovqjSF9AUKxN0 M9Ky7Vobl1v5kZkjVtn15yAQuwgR2sc1GbCsZPzIMQ== X-Google-Smtp-Source: AAOMgpc4tlpUZxKODUttV1IcKVTUkQKOqTWPCFYhiw1W03scFowdBmKZmRFg1jUcgIxeza0povEwyoHGF1Xc/8bOKxE= X-Received: by 2002:a24:d0d7:: with SMTP id m206-v6mr8272286itg.1.1530892021192; Fri, 06 Jul 2018 08:47:01 -0700 (PDT) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 2002:a4f:1183:0:0:0:0:0 with HTTP; Fri, 6 Jul 2018 08:47:00 -0700 (PDT) X-Originating-IP: [74.62.67.99] In-Reply-To: <201807061532.w66FWPEN052842@pdx.rh.CN85.dnsmgr.net> References: <201807061013.w66ADgbJ087546@repo.freebsd.org> <201807061532.w66FWPEN052842@pdx.rh.CN85.dnsmgr.net> From: Warner Losh Date: Fri, 6 Jul 2018 09:47:00 -0600 X-Google-Sender-Auth: RTAUjBCTostenTEAO5yX6Ki-vw0 Message-ID: Subject: Re: svn commit: r336025 - in head/sys: amd64/include i386/include To: "Rodney W. Grimes" Cc: Hans Petter Selasky , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.27 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2018 15:47:03 -0000 On Fri, Jul 6, 2018 at 9:32 AM, Rodney W. Grimes < freebsd@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 UP systems, these additional opcodes are harmless. They take a few extra cycles (since they lock an uncontested bus) and add a couple extra memory barriers (which will be NOPs). On MP systems, atomics now work by default. Had we not defaulted like this, all modules built outside of a kernel build env would have broken atomics. Given that (a) the overwhelming majority (99% or more) is SMP and (b) the MP code merely adds a few cycles to what's already a not-too-expensive operation, this was the right choice. It simply doesn't matter for systems that are relevant to the project today. While one could try to optimize this a little (for example, by having SMP defined to be 0 or 1, say, and changing all the ifdef SMP to if (defined(SMP) && SMP != 0)), it's likely not going to matter enough for anybody to make the effort. UP on x86 is simply not relevant enough to optimize for it. Even in VMs, people run SMP kernels typically even when they just allocate one CPU to the VM. So while we still support the UP config, and we'll let people build optimized kernels for x86, we've flipped the switch from pessimized for SMP modules to pessimized for UP modules, which seems like quite the reasonable trade-off. Were it practical to do so, I'd suggest de-orbiting UP on x86. However, it's a lot of work for not much benefit and we'd need to invent much crazy to get there. Warner > > 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 > rgrimes@freebsd.org > >