Received: by 10.192.165.148 with SMTP id m20csp1837184imm; Thu, 3 May 2018 06:16:33 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpz5bBkBD6Hjuzn23SW8iwqUeeReXS68HJ/r6bwGMM4cI7I9rRCviGnLRTxyp6V6t0uWL8M X-Received: by 2002:a63:6f0f:: with SMTP id k15-v6mr19052525pgc.91.1525353393233; Thu, 03 May 2018 06:16:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525353393; cv=none; d=google.com; s=arc-20160816; b=NngSUrWPvbNBIU7+dHv+x0MXPX5+jYuxhxYhim7TZ4Whj1td7qUu8RimSvTccHFBjD fIL0Kk68XXcmYOabV6+p+Xk3OEsKvX5/rcbO73LdCylkhK2VOi4/H9HJn6gRftdwP1Y4 Rti8EGJXfr5UzfmmoRzd9ozX8t2J+OuX+jwKZLi0ijILhQ/qw52Gj5Nyh7LP5u/1xNQe Ry4nfxisVLc9DDLIHboDpbaFewAafiYgDp/h5IMUx3Jm/MeBolgxXKPc+IrGxYc7CZ2/ WG0Z11btbUa2AJ1GT4LDXvKURgXhqABqCfSL3y+Jz32nE0LZHvqzKWxsfgO2rIzt/Sjh aghw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date:arc-authentication-results; bh=SWxqlxYO0oh9Ob8eg9RhCz0hmD8qj798RKTGw5tqxSk=; b=rvKU/3J8eQYq+bHleVCWWMXFwvyArO1faFtfNBr/Ab7iNYuTInLvXmPYSZZhYeGFCD Q26lR2xnr3SDN7zUY2skTZN9P8n41lwqJv5HV0Fp3n6Ezf51KrPG2RkhUF++iwYjW9U3 RtudJ3Kn/pmCLSCsRR0gQ8Mkh7xCn1hXxW3/fwyg6CiYM5e+gJsFbOpFlXzW42W83652 jIEHsqLkn9MIhi/g7rSTPu6FCGRBjur0H23074vLuuyelzeCEOER5FiE48UgwoJr3t9w e7cmQX6xLPxVeL99KSsZ6Dn9duBFtiJsjVyYEaVpAm7aSJuJh48FaAfl6DYmj8l6envy dWvA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 9-v6si13681009plf.283.2018.05.03.06.16.18; Thu, 03 May 2018 06:16:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751294AbeECNPZ (ORCPT + 99 others); Thu, 3 May 2018 09:15:25 -0400 Received: from mx2.suse.de ([195.135.220.15]:54913 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751069AbeECNPV (ORCPT ); Thu, 3 May 2018 09:15:21 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id AC38EAD5E; Thu, 3 May 2018 13:15:19 +0000 (UTC) Date: Thu, 3 May 2018 15:15:18 +0200 From: Michal =?UTF-8?B?U3VjaMOhbmVr?= To: Michael Ellerman Cc: linuxppc-dev@ozlabs.org, linux-kernel@vger.kernel.org, npiggin@gmail.com Subject: Re: [PATCH 3/6] powerpc/64s: Patch barrier_nospec in modules Message-ID: <20180503151518.00a2ede0@kitsune.suse.cz> In-Reply-To: <20180424041559.32410-3-mpe@ellerman.id.au> References: <20180424041559.32410-1-mpe@ellerman.id.au> <20180424041559.32410-3-mpe@ellerman.id.au> Organization: SUSE Linux X-Mailer: Claws Mail 3.15.1-dirty (GTK+ 2.24.31; x86_64-suse-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 24 Apr 2018 14:15:56 +1000 Michael Ellerman wrote: > From: Michal Suchanek > > Note that unlike RFI which is patched only in kernel the nospec state > reflects settings at the time the module was loaded. > > Iterating all modules and re-patching every time the settings change > is not implemented. > > Based on lwsync patching. > > Signed-off-by: Michal Suchanek > Signed-off-by: Michael Ellerman > --- > arch/powerpc/include/asm/setup.h | 6 ++++++ > arch/powerpc/kernel/module.c | 6 ++++++ > arch/powerpc/lib/feature-fixups.c | 16 +++++++++++++--- > 3 files changed, 25 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/include/asm/setup.h > b/arch/powerpc/include/asm/setup.h index afc7280cce3b..4335cddc1cf2 > 100644 --- a/arch/powerpc/include/asm/setup.h > +++ b/arch/powerpc/include/asm/setup.h > @@ -54,6 +54,12 @@ void setup_rfi_flush(enum l1d_flush_type, bool > enable); void do_rfi_flush_fixups(enum l1d_flush_type types); > void do_barrier_nospec_fixups(bool enable); > > +#ifdef CONFIG_PPC_BOOK3S_64 > +void do_barrier_nospec_fixups_range(bool enable, void *start, void > *end); +#else > +static inline void do_barrier_nospec_fixups_range(bool enable, void > *start, void *end) { }; +#endif > + > #endif /* !__ASSEMBLY__ */ > > #endif /* _ASM_POWERPC_SETUP_H */ > diff --git a/arch/powerpc/kernel/module.c > b/arch/powerpc/kernel/module.c index 3f7ba0f5bf29..a72698cd3dd0 100644 > --- a/arch/powerpc/kernel/module.c > +++ b/arch/powerpc/kernel/module.c > @@ -72,6 +72,12 @@ int module_finalize(const Elf_Ehdr *hdr, > do_feature_fixups(powerpc_firmware_features, > (void *)sect->sh_addr, > (void *)sect->sh_addr + > sect->sh_size); + > + sect = find_section(hdr, sechdrs, "__spec_barrier_fixup"); > + if (sect != NULL) > + do_barrier_nospec_fixups_range(true, This saves a global but always patches modules with the ORI flush. The patching also produces a log message which can be confusing to the user. Even when barrier is disabled "barrier-nospec: using ORI speculation barrier" is logged when modules are loaded. For consistency when debugging the settings I would suggest to keep the export. It is also no longer consistent with the commit message. Thanks Michal > + (void *)sect->sh_addr, > + (void *)sect->sh_addr + > sect->sh_size); #endif > > sect = find_section(hdr, sechdrs, "__lwsync_fixup"); > diff --git a/arch/powerpc/lib/feature-fixups.c > b/arch/powerpc/lib/feature-fixups.c index 093c1d2ea5fd..3b37529f82f8 > 100644 --- a/arch/powerpc/lib/feature-fixups.c > +++ b/arch/powerpc/lib/feature-fixups.c > @@ -163,14 +163,14 @@ void do_rfi_flush_fixups(enum l1d_flush_type > types) : "unknown"); > } > > -void do_barrier_nospec_fixups(bool enable) > +void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, > void *fixup_end) { > unsigned int instr, *dest; > long *start, *end; > int i; > > - start = PTRRELOC(&__start___barrier_nospec_fixup), > - end = PTRRELOC(&__stop___barrier_nospec_fixup); > + start = fixup_start; > + end = fixup_end; > > instr = 0x60000000; /* nop */ > > @@ -189,6 +189,16 @@ void do_barrier_nospec_fixups(bool enable) > printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", > i); } > > +void do_barrier_nospec_fixups(bool enable) > +{ > + void *start, *end; > + > + start = PTRRELOC(&__start___barrier_nospec_fixup), > + end = PTRRELOC(&__stop___barrier_nospec_fixup); > + > + do_barrier_nospec_fixups_range(enable, start, end); > +} > + > #endif /* CONFIG_PPC_BOOK3S_64 */ > > void do_lwsync_fixups(unsigned long value, void *fixup_start, void > *fixup_end)