From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757251AbcATEju (ORCPT ); Tue, 19 Jan 2016 23:39:50 -0500 Received: from mail-ob0-f174.google.com ([209.85.214.174]:35746 "EHLO mail-ob0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933535AbcATEjo (ORCPT ); Tue, 19 Jan 2016 23:39:44 -0500 MIME-Version: 1.0 In-Reply-To: <569F06B9.4060903@zytor.com> References: <1452972124-7380-1-git-send-email-brgerst@gmail.com> <20160116193658.GC32085@pd.tnic> <20160117103337.GC8549@pd.tnic> <20160118181457.GG12651@pd.tnic> <20160118185107.GI12651@pd.tnic> <20160119011026.GA12911@pd.tnic> <20160119092213.GA15071@pd.tnic> <569F06B9.4060903@zytor.com> Date: Tue, 19 Jan 2016 23:39:43 -0500 Message-ID: Subject: Re: [PATCH] x86: static_cpu_has_safe: discard dynamic check after init From: Brian Gerst To: "H. Peter Anvin" Cc: Borislav Petkov , "the arch/x86 maintainers" , Linux Kernel Mailing List , Ingo Molnar , Denys Vlasenko , Andy Lutomirski , Linus Torvalds Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 19, 2016 at 11:02 PM, H. Peter Anvin wrote: > On 01/19/16 01:22, Borislav Petkov wrote: >> On Mon, Jan 18, 2016 at 05:33:03PM -0800, H. Peter Anvin wrote: >>> Why the f do we call a subroutine for what amounts to a single bt or >>> test instruction? >> >> No real reason. You can kick me when you see me next time: >> >> 4a90a99c4f80 ("x86: Add a static_cpu_has_safe variant") >> > > So, here is my suggestion: > > 1. Just get rid of static_cpu_has_safe() and make static_cpu_has() safe. > > 2. Get rid of the non-asm goto variant and just fall back to dynamic if > asm goto is unavailable. It doesn't make any sense, really, if it is > supposed to be safe, and by now the asm goto-capable gcc is in more wide > use. (Originally the gcc 3.x fallback to pure dynamic didn't exist, > either.) > > 3. Put the dynamic test in the .init.text section and inline it: > > .section .init.text,"ax" > testb %2,%3 > jnz %[t_yes] > jmp %[t_no] > .previous > > ... "i" (1 << (bit & 7)), > "m" (((const char *)boot_cpu_data->x86_capability)[bit >> 3]) ... Can't put it in .init.text or else you get: WARNING: arch/x86/kernel/built-in.o(.text+0x4b9): Section mismatch in reference from the function __switch_to() to the (unknown reference) .init.text:(unknown) The function __switch_to() references the (unknown reference) __init (unknown). This is often because __switch_to lacks a __init annotation or the annotation of (unknown) is wrong. We want to override that because we know that the reference will be removed after alternatives run. That's why I created a new section. -- Brian Gerst