Patch "sparc: Handle negative offsets in arch_jump_label_transform" has been added to the 4.8-stable tree
This is a note to let you know that I've just added the patch titled
sparc: Handle negative offsets in arch_jump_label_transform
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sparc-handle-negative-offsets-in-arch_jump_label_transform.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sat Nov 19 09:52:59 CET 2016
From: James Clarke <[email protected]>
Date: Mon, 24 Oct 2016 19:49:25 +0100
Subject: sparc: Handle negative offsets in arch_jump_label_transform
From: James Clarke <[email protected]>
[ Upstream commit 9d9fa230206a3aea6ef451646c97122f04777983 ]
Additionally, if the offset will overflow the immediate for a ba,pt instruction, fall back on a standard ba to get an extra 3 bits.
--- arch/sparc/kernel/jump_label.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
arch/sparc/kernel/jump_label.c +17 -6
@@ -13,19 +13,30 @@void arch_jump_label_transform (struct jump_entry *entry,enum jump_label_type type) { -u32 val;u32 *insn = (u32 *) (unsigned long ) entry->code; +u32 val;if (type ==JUMP_LABEL_JMP ) {s32 off = (s32 )entry->target - (s32 )entry->code; +bool use_v9_branch = false; + +BUG_ON (off &3 );#ifdef CONFIG_SPARC64 -/* ba,pt %xcc, . + (off << 2) */ - val =0x10680000 | ((u32 ) off >>2 ); -#else -/* ba . + (off << 2) */ - val =0x10800000 | ((u32 ) off >>2 ); +if (off <=0xfffff && off >=-0x100000 ) + use_v9_branch = true;#endif +if (use_v9_branch) { +/* WDISP19 - target is . + immed << 2 */ +/* ba,pt %xcc, . + off */ + val =0x10680000 | (((u32 ) off >>2 ) &0x7ffff ); + }else { +/* WDISP22 - target is . + immed << 2 */ +BUG_ON (off >0x7fffff ); +BUG_ON (off <-0x800000 ); +/* ba . + off */ + val =0x10800000 | (((u32 ) off >>2 ) &0x3fffff ); + } }else { val =0x01000000 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/sparc64-handle-extremely-large-kernel-tlb-range-flushes-more-gracefully.patch queue-4.8/sparc-handle-negative-offsets-in-arch_jump_label_transform.patch