From: "tip-bot for tip-bot for H. Peter Anvin" <hpa@linux.intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
tglx@linutronix.de, hpa@linux.intel.com
Subject: [tip:x86/alternatives] x86, alternatives: Use 16-bit numbers for cpufeature index
Date: Tue, 29 Jun 2010 07:06:44 GMT [thread overview]
Message-ID: <tip-5dc71d49a7c209b77cd257049a2cdb99ed1008c0@git.kernel.org> (raw)
In-Reply-To: <tip-f88731e3068f9d1392ba71cc9f50f035d26a0d4f@git.kernel.org>
Commit-ID: 5dc71d49a7c209b77cd257049a2cdb99ed1008c0
Gitweb: http://git.kernel.org/tip/5dc71d49a7c209b77cd257049a2cdb99ed1008c0
Author: tip-bot for H. Peter Anvin <hpa@linux.intel.com>
AuthorDate: Thu, 10 Jun 2010 00:10:43 +0000
Committer: H. Peter Anvin <hpa@zytor.com>
CommitDate: Thu, 10 Jun 2010 23:20:34 -0700
x86, alternatives: Use 16-bit numbers for cpufeature index
We already have cpufeature indicies above 255, so use a 16-bit number
for the alternatives index. This consumes a padding field and so
doesn't add any size, but it means that abusing the padding field to
create assembly errors on overflow no longer works. We can retain the
test simply by redirecting it to the .discard section, however.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
LKML-Reference: <tip-f88731e3068f9d1392ba71cc9f50f035d26a0d4f@git.kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
arch/x86/include/asm/alternative.h | 7 ++++---
arch/x86/include/asm/cpufeature.h | 10 ++++++----
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
index 03b6bb5..bc6abb7 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -45,10 +45,9 @@
struct alt_instr {
u8 *instr; /* original instruction */
u8 *replacement;
- u8 cpuid; /* cpuid bit set for replacement */
+ u16 cpuid; /* cpuid bit set for replacement */
u8 instrlen; /* length of original instruction */
u8 replacementlen; /* length of new instruction, <= instrlen */
- u8 pad1;
#ifdef CONFIG_X86_64
u32 pad2;
#endif
@@ -86,9 +85,11 @@ static inline int alternatives_text_reserved(void *start, void *end)
_ASM_ALIGN "\n" \
_ASM_PTR "661b\n" /* label */ \
_ASM_PTR "663f\n" /* new instruction */ \
- " .byte " __stringify(feature) "\n" /* feature bit */ \
+ " .word " __stringify(feature) "\n" /* feature bit */ \
" .byte 662b-661b\n" /* sourcelen */ \
" .byte 664f-663f\n" /* replacementlen */ \
+ ".previous\n" \
+ ".section .discard,\"aw\",@progbits\n" \
" .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \
".previous\n" \
".section .altinstr_replacement, \"ax\"\n" \
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index 4681459..66878c5 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -300,11 +300,11 @@ static __always_inline __pure bool __static_cpu_has(u8 bit)
_ASM_ALIGN "\n"
_ASM_PTR "1b\n"
_ASM_PTR "0\n" /* no replacement */
- " .byte %P0\n" /* feature bit */
+ " .word %P0\n" /* feature bit */
" .byte 2b - 1b\n" /* source len */
" .byte 0\n" /* replacement len */
- " .byte 0xff + 0 - (2b-1b)\n" /* padding */
".previous\n"
+ /* skipping size check since replacement size = 0 */
: : "i" (bit) : : t_no);
return true;
t_no:
@@ -318,10 +318,12 @@ static __always_inline __pure bool __static_cpu_has(u8 bit)
_ASM_ALIGN "\n"
_ASM_PTR "1b\n"
_ASM_PTR "3f\n"
- " .byte %P1\n" /* feature bit */
+ " .word %P1\n" /* feature bit */
" .byte 2b - 1b\n" /* source len */
" .byte 4f - 3f\n" /* replacement len */
- " .byte 0xff + (4f-3f) - (2b-1b)\n" /* padding */
+ ".previous\n"
+ ".section .discard,\"aw\",@progbits\n"
+ " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
".previous\n"
".section .altinstr_replacement,\"ax\"\n"
"3: movb $1,%0\n"
next prev parent reply other threads:[~2010-06-29 7:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <tip-*@git.kernel.org>
2009-12-12 0:16 ` [tip:x86/urgent] nvram: Fix write beyond end condition; prove to gcc copy is safe tip-bot for H. Peter Anvin
2009-12-15 23:18 ` [tip:x86/urgent] x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers tip-bot for H. Peter Anvin
2010-02-19 6:21 ` [tip:x86/setup] x86-64, setup: Inhibit decompressor output if video info is invalid tip-bot for H. Peter Anvin
2010-02-19 21:41 ` [tip:x86/setup] x86, setup: Don't skip mode setting for the standard VGA modes tip-bot for H. Peter Anvin
2010-06-10 0:10 ` [tip:x86/alternatives] x86, alternatives: Use 16-bit numbers for cpufeature index tip-bot for H. Peter Anvin
2010-06-11 18:24 ` tip-bot for H. Peter Anvin
2010-06-25 9:20 ` Lai Jiangshan
2010-06-25 15:35 ` H. Peter Anvin
2010-06-28 7:58 ` Lai Jiangshan
2010-06-28 18:58 ` H. Peter Anvin
2010-06-28 19:06 ` H. Peter Anvin
2010-06-29 4:58 ` Lai Jiangshan
2010-06-29 7:07 ` [tip:x86/alternatives] x86, alternatives: correct obsolete use of "u8" in static_cpu_has() tip-bot for H. Peter Anvin
2010-06-29 7:06 ` tip-bot for tip-bot for H. Peter Anvin [this message]
2010-06-29 9:15 ` [tip:x86/alternatives] x86, alternatives: Use 16-bit numbers for cpufeature index Ingo Molnar
2010-06-29 15:33 ` H. Peter Anvin
2010-07-07 17:45 ` tip-bot for H. Peter Anvin
2010-07-20 2:06 ` [tip:x86/cpu] x86, cpu: Clean up formatting in cpufeature.h, remove override tip-bot for H. Peter Anvin
2010-07-20 2:06 ` [tip:x86/cpu] x86, cpu: Split addon_cpuid_features.c tip-bot for H. Peter Anvin
2010-08-12 6:12 ` [tip:x86/urgent] x86, asm: Refactor atomic64_386_32.S to support old binutils and be cleaner tip-bot for Luca Barbieri
2010-08-12 12:15 ` Luca Barbieri
2010-08-12 14:05 ` H. Peter Anvin
2010-08-12 15:18 ` Luca Barbieri
2010-08-12 15:33 ` [tip:x86/urgent] x86, asm: Use a lower case name for the end macro in atomic64_386_32.S tip-bot for Luca Barbieri
2010-08-19 19:06 ` [tip:x86/urgent] x86, asm: Refactor atomic64_386_32.S to support old binutils and be cleaner D. Stussy
2010-08-19 21:23 ` H. Peter Anvin
2010-08-20 8:21 ` Ingo Molnar
2010-08-25 0:37 ` [tip:x86/bios] x86, bios: By default, reserve the low 64K for all BIOSes tip-bot for H. Peter Anvin
2010-08-26 0:12 ` [tip:x86/bios] x86, bios: Make the x86 early memory reservation a kernel option tip-bot for H. Peter Anvin
2010-09-17 23:46 ` [tip:x86/idle] x86, mwait: Move mwait constants to a common header file tip-bot for H. Peter Anvin
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=tip-5dc71d49a7c209b77cd257049a2cdb99ed1008c0@git.kernel.org \
--to=hpa@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).