Thread (4 messages) 4 messages, 3 authors, 2017-02-27

Re: next-20170217 boot on POWER8 LPAR : WARNING @kernel/jump_label.c:287

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-02-22 05:38:27
Also in: linux-next, linuxppc-dev

Possibly related (same subject, not in this thread)

Jason Baron [off-list ref] writes:
On 02/20/2017 10:05 PM, Sachin Sant wrote:
quoted
quoted
On 20-Feb-2017, at 8:27 PM, Jason Baron <jbaron@akamai.com
<mailto:jbaron@akamai.com>> wrote:

Hi,

On 02/19/2017 09:07 AM, Sachin Sant wrote:
quoted
While booting next-20170217 on a POWER8 LPAR following
warning is displayed.

Reverting the following commit helps boot cleanly.
commit 3821fd35b5 :  jump_label: Reduce the size of struct static_key

[   11.393008] ------------[ cut here ]------------
[   11.393031] WARNING: CPU: 5 PID: 2890 at kernel/jump_label.c:287
static_key_set_entries.isra.10+0x3c/0x50
Thanks for the report. So this is saying that the jump_entry table is
not at least 4-byte aligned. I wonder if this fixes it up?
Yes. With this patch the warning is gone.
Hi,

Thanks for testing. We probably need something like the following to 
make sure we don't hit this on other arches. Steve - I will send 4 
separate patches for this to get arch maintainers' acks for this?
What's the 4 byte alignment requirement from?

On 64-bit our JUMP_ENTRY_TYPE is 8 bytes, should we be aligning to 8
bytes?
quoted hunk ↗ jump to hunk
diff --git a/arch/powerpc/include/asm/jump_label.h 
b/arch/powerpc/include/asm/jump_label.h
index 9a287e0ac8b1..f870a85bac46 100644
--- a/arch/powerpc/include/asm/jump_label.h
+++ b/arch/powerpc/include/asm/jump_label.h
@@ -24,6 +24,7 @@ static __always_inline bool arch_static_branch(struct 
static_key *key, bool bran
         asm_volatile_goto("1:\n\t"
                  "nop # arch_static_branch\n\t"
                  ".pushsection __jump_table,  \"aw\"\n\t"
+                ".balign 4 \n\t"
Can you line those up vertically?

(That may just be an email artifact)
quoted hunk ↗ jump to hunk
                  JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
                  ".popsection \n\t"
                  : :  "i" (&((char *)key)[branch]) : : l_yes);
@@ -38,6 +39,7 @@ static __always_inline bool 
arch_static_branch_jump(struct static_key *key, bool
         asm_volatile_goto("1:\n\t"
                  "b %l[l_yes] # arch_static_branch_jump\n\t"
                  ".pushsection __jump_table,  \"aw\"\n\t"
+                ".balign 4 \n\t"
                  JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
                  ".popsection \n\t"
                  : :  "i" (&((char *)key)[branch]) : : l_yes);
@@ -63,6 +65,7 @@ struct jump_entry {
  #define ARCH_STATIC_BRANCH(LABEL, KEY)         \
  1098:  nop;                                    \
         .pushsection __jump_table, "aw";        \
+       .balign 4;                              \
         FTR_ENTRY_LONG 1098b, LABEL, KEY;       \
         .popsection
  #endif
Otherwise that looks fine assuming 4 bytes is the correct alignment.

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help