All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: David Woodhouse <dwmw2@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Josh Poimboeuf <jpoimboe@redhat.com>
Cc: linux-kernel@vger.kernel.org, Dave Hansen <dave.hansen@intel.com>,
	Ashok Raj <ashok.raj@intel.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Andy Lutomirski <luto@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Andi Kleen <ak@linux.intel.com>,
	Arjan Van De Ven <arjan.van.de.ven@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Asit Mallick <asit.k.mallick@intel.com>,
	Jason Baron <jbaron@akamai.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Borislav Petkov <bp@alien8.de>, Borislav Petkov <bp@suse.de>
Subject: [PATCH 14/24] x86: Add a type field to alt_instr
Date: Tue, 23 Jan 2018 16:25:53 +0100	[thread overview]
Message-ID: <20180123152638.815589591@infradead.org> (raw)
In-Reply-To: 20180123152539.374360046@infradead.org

[-- Attachment #1: peterz-alternative-type.patch --]
[-- Type: text/plain, Size: 3784 bytes --]

Add a type field to the alternative description. For now this will be
used to annotate static_cpu_has() but possible future uses include
using it to implement alternative alignment and special NOP handling.

Suggested-by: Borislav Petkov <bp@alien8.de>
Reviewed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 arch/x86/include/asm/alternative-asm.h |    3 ++-
 arch/x86/include/asm/alternative.h     |    6 +++++-
 arch/x86/include/asm/cpufeature.h      |    2 ++
 arch/x86/kernel/alternative.c          |    4 ++--
 tools/objtool/special.c                |    2 +-
 5 files changed, 12 insertions(+), 5 deletions(-)

--- a/arch/x86/include/asm/alternative-asm.h
+++ b/arch/x86/include/asm/alternative-asm.h
@@ -25,13 +25,14 @@
  * enough information for the alternatives patching code to patch an
  * instruction. See apply_alternatives().
  */
-.macro altinstruction_entry orig alt feature orig_len alt_len pad_len
+.macro altinstruction_entry orig alt feature orig_len alt_len pad_len type=0
 	.long \orig - .
 	.long \alt - .
 	.word \feature
 	.byte \orig_len
 	.byte \alt_len
 	.byte \pad_len
+	.byte \type
 .endm
 
 /*
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -45,6 +45,8 @@
 #define LOCK_PREFIX ""
 #endif
 
+#define ALT_TYPE_DEFAULT	0
+
 struct alt_instr {
 	s32 instr_offset;	/* original instruction */
 	s32 repl_offset;	/* offset to replacement instruction */
@@ -52,6 +54,7 @@ struct alt_instr {
 	u8  instrlen;		/* length of original instruction */
 	u8  replacementlen;	/* length of new instruction */
 	u8  padlen;		/* length of build-time padding */
+	u8  type;		/* type of alternative */
 } __packed;
 
 /*
@@ -127,7 +130,8 @@ static inline int alternatives_text_rese
 	" .word " __stringify(feature) "\n"		/* feature bit     */ \
 	" .byte " alt_total_slen "\n"			/* source len      */ \
 	" .byte " alt_rlen(num) "\n"			/* replacement len */ \
-	" .byte " alt_pad_len "\n"			/* pad len */
+	" .byte " alt_pad_len "\n"			/* pad len */	      \
+	" .byte 0 \n"					/* type */
 
 #define ALTINSTR_REPLACEMENT(newinstr, feature, num)	/* replacement */     \
 	b_replacement(num)":\n\t" newinstr "\n" e_replacement(num) ":\n\t"
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -157,6 +157,7 @@ static __always_inline __pure bool _stat
 		 " .byte 3b - 1b\n"		/* src len */
 		 " .byte 5f - 4f\n"		/* repl len */
 		 " .byte 3b - 2b\n"		/* pad len */
+		 " .byte 0\n"			/* type */
 		 ".previous\n"
 		 ".section .altinstr_replacement,\"ax\"\n"
 		 "4: jmp %l[t_no]\n"
@@ -169,6 +170,7 @@ static __always_inline __pure bool _stat
 		 " .byte 3b - 1b\n"		/* src len */
 		 " .byte 0\n"			/* repl len */
 		 " .byte 0\n"			/* pad len */
+		 " .byte 0\n"			/* type */
 		 ".previous\n"
 		 ".section .altinstr_aux,\"ax\"\n"
 		 "6:\n"
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -400,11 +400,11 @@ void __init_or_module noinline apply_alt
 			continue;
 		}
 
-		DPRINTK("feat: %d*32+%d, old: (%p, len: %d), repl: (%p, len: %d), pad: %d",
+		DPRINTK("feat: %d*32+%d, old: (%p, len: %d), repl: (%p, len: %d), pad: %d, type: %d",
 			a->cpuid >> 5,
 			a->cpuid & 0x1f,
 			instr, a->instrlen,
-			replacement, a->replacementlen, a->padlen);
+			replacement, a->replacementlen, a->padlen, a->type);
 
 		DUMP_BYTES(instr, a->instrlen, "%p: old_insn: ", instr);
 		DUMP_BYTES(replacement, a->replacementlen, "%p: rpl_insn: ", replacement);
--- a/tools/objtool/special.c
+++ b/tools/objtool/special.c
@@ -34,7 +34,7 @@
 #define JUMP_ORIG_OFFSET	0
 #define JUMP_NEW_OFFSET		8
 
-#define ALT_ENTRY_SIZE		13
+#define ALT_ENTRY_SIZE		14
 #define ALT_ORIG_OFFSET		0
 #define ALT_NEW_OFFSET		4
 #define ALT_FEATURE_OFFSET	8

  parent reply	other threads:[~2018-01-23 15:25 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-23 15:25 [PATCH 00/24] objtool: retpoline and asm-goto validation Peter Zijlstra
2018-01-23 15:25 ` [PATCH 01/24] objtool: Use existing global variables for options Peter Zijlstra
2018-01-23 15:25 ` [PATCH 02/24] objtool: Add retpoline validation Peter Zijlstra
2018-01-23 18:21   ` Borislav Petkov
2018-01-26  9:54   ` David Woodhouse
2018-01-23 15:25 ` [PATCH 03/24] x86/paravirt: Annotate indirect calls Peter Zijlstra
2018-01-25 10:02   ` David Woodhouse
2018-01-25 10:22     ` Peter Zijlstra
2018-01-25 10:26       ` Juergen Gross
2018-01-25 10:52         ` David Woodhouse
2018-01-25 11:35           ` Peter Zijlstra
2018-01-26  9:57             ` David Woodhouse
2018-01-29 17:58   ` Josh Poimboeuf
2018-01-29 18:09     ` David Woodhouse
2018-01-29 18:17     ` Peter Zijlstra
2018-01-29 18:38   ` Josh Poimboeuf
2018-01-29 19:21     ` Peter Zijlstra
2018-01-30 16:02       ` Josh Poimboeuf
2018-01-31  4:13         ` [PATCH] x86/paravirt: Remove 'noreplace-paravirt' cmdline option Josh Poimboeuf
2018-01-31  5:59           ` Juergen Gross
2018-01-31  9:42           ` [tip:x86/pti] " tip-bot for Josh Poimboeuf
2018-01-23 15:25 ` [PATCH 04/24] x86,nospec: Annotate indirect calls/jumps Peter Zijlstra
2018-01-26 10:19   ` David Woodhouse
2018-01-29 17:44     ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 05/24] x86: Annotate indirect jump in head_64.S Peter Zijlstra
2018-01-26 10:24   ` David Woodhouse
2018-01-23 15:25 ` [PATCH 06/24] x86,kvm: Fix indirect calls in emulator Peter Zijlstra
2018-01-23 20:28   ` Borislav Petkov
2018-01-23 20:48     ` David Woodhouse
2018-01-24 10:35       ` Peter Zijlstra
2018-01-24 10:43         ` Paolo Bonzini
2018-01-25  9:34           ` Peter Zijlstra
2018-01-25  9:49             ` David Woodhouse
2018-01-26 10:57             ` Paolo Bonzini
2018-01-23 15:25 ` [PATCH 07/24] x86,vmx: Fix indirect call Peter Zijlstra
2018-01-25  9:36   ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 08/24] x86,sme: Annotate " Peter Zijlstra
2018-01-26 10:37   ` David Woodhouse
2018-01-29 17:49     ` Peter Zijlstra
2018-01-29 17:50       ` Peter Zijlstra
2018-01-31  9:29     ` Peter Zijlstra
2018-01-31 15:04       ` Josh Poimboeuf
2018-01-31 16:00         ` Peter Zijlstra
2018-01-23 15:25 ` [PATCH 09/24] jump_label: Add branch hints to static_branch_{un,}likely() Peter Zijlstra
2018-01-24 18:46   ` Borislav Petkov
2018-01-23 15:25 ` [PATCH 10/24] sched: Optimize ttwu_stat() Peter Zijlstra
2018-01-23 15:25 ` [PATCH 11/24] x86: Reindent _static_cpu_has Peter Zijlstra
2018-01-23 15:25 ` [PATCH 12/24] x86: Update _static_cpu_has to use all named variables Peter Zijlstra
2018-01-25 19:31   ` Borislav Petkov
2018-01-23 15:25 ` [PATCH 13/24] objtool: Implement base jump_assert support Peter Zijlstra
2018-01-26 10:45   ` David Woodhouse
2018-01-23 15:25 ` Peter Zijlstra [this message]
2018-01-23 15:25 ` [PATCH 15/24] x86: Annotate static_cpu_has alternative Peter Zijlstra
2018-01-23 15:25 ` [PATCH 16/24] objtool: Implement jump_assert for _static_cpu_has() Peter Zijlstra
2018-01-23 15:25 ` [PATCH 17/24] objtool: Introduce special_type Peter Zijlstra
2018-01-23 15:25 ` [PATCH 18/24] objtool: More complex static jump implementation Peter Zijlstra
2018-01-23 15:25 ` [PATCH 19/24] objtool: Even more complex static block checks Peter Zijlstra
2018-01-23 15:25 ` [PATCH 20/24] objtool: Another static block fail Peter Zijlstra
2018-01-29 22:52   ` Josh Poimboeuf
2018-01-30  9:56     ` Peter Zijlstra
2018-01-31  3:12       ` Josh Poimboeuf
2018-01-31 10:01         ` Peter Zijlstra
2018-01-31 10:07           ` David Woodhouse
2018-01-31 10:27             ` Peter Zijlstra
2018-01-23 15:26 ` [PATCH 21/24] objtool: Skip static assert when KCOV/KASAN Peter Zijlstra
2018-01-23 15:26 ` [PATCH 22/24] x86/jump_label: Implement arch_static_assert() Peter Zijlstra
2018-01-23 15:26 ` [PATCH 23/24] x86: Force asm-goto Peter Zijlstra
2018-01-23 15:26 ` [PATCH 24/24] x86: Remove FAST_FEATURE_TESTS Peter Zijlstra
2018-01-23 15:42 ` [PATCH 00/24] objtool: retpoline and asm-goto validation Peter Zijlstra
2018-01-23 15:57   ` David Woodhouse
2018-01-23 16:03     ` Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180123152638.815589591@infradead.org \
    --to=peterz@infradead.org \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=arjan.van.de.ven@intel.com \
    --cc=ashok.raj@intel.com \
    --cc=asit.k.mallick@intel.com \
    --cc=bp@alien8.de \
    --cc=bp@suse.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=dwmw2@infradead.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jbaron@akamai.com \
    --cc=jpoimboe@redhat.com \
    --cc=jun.nakajima@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.