All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: Steven Rostedt <rostedt@goodmis.org>,
	linux-mips@linux-mips.org, Ralf Baechle <ralf@linux-mips.org>
Cc: Jason Baron <jbaron@akamai.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	Ingo Molnar <mingo@kernel.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Anton Blanchard <anton@samba.org>, Rabin Vincent <rabin@rab.in>,
	Russell King <linux@armlinux.org.uk>,
	Chris Metcalf <cmetcalf@mellanox.com>,
	Zhigang Lu <zlu@ezchip.com>
Subject: Re: [PATCH] jump_label: align jump_entry table to at least 4-bytes
Date: Mon, 27 Feb 2017 14:21:21 -0800	[thread overview]
Message-ID: <7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com> (raw)
In-Reply-To: <20170227170911.2280ca3e@gandalf.local.home>

[-- Attachment #1: Type: text/plain, Size: 1643 bytes --]

On 02/27/2017 02:09 PM, Steven Rostedt wrote:
> On Mon, 27 Feb 2017 13:41:13 -0800
> David Daney <ddaney@caviumnetworks.com> wrote:
>
>> On 02/27/2017 01:06 PM, Steven Rostedt wrote:
>>> On Mon, 27 Feb 2017 11:59:50 -0800
>>> David Daney <ddaney@caviumnetworks.com> wrote:
>>>
>>>> For me the size is not the important issue, it is the alignment of the
>>>> struct jump_entry entries in the table.  I don't understand how your
>>>> patch helps, and I cannot Acked-by unless I understand what is being
>>>> done and can see that it is both correct and necessary.
>>>
>>> You brought up a very good point and I'm glad that I had Jason Cc all
>>> the arch maintainers in one patch.
>>>
>>> I think jump_labels may be much more broken than we think, and Jason's
>>> fix doesn't fix anything. We had this same issues with tracepoints.
>>>
>>> I'm looking at jump_label_init, and how we iterate over an array of
>>> struct jump_entry's that was put together by the linker. The problem is
>>> that jump_entry is not a power of 2 in size.
>>>
>>
>> ELF sections may have an ENTSIZE property exactly for arrays.  Since
>> each jump_entry will have a unique value they cannot be merged, but we
>> can tell the assembler they are an array and get them properly packed.
>> Perhaps something like (untested):
>>
>>     .pushsection __jump_table,  \"awM\",@progbits,24
>>     FOO
>>     .popsection
>>
>
> And the linker will honor this too?

See attached for mips.  It seems to do the right thing.

I leave it as an exercise to the reader to fix the other architectures.

Consult your own  binutils experts to verify that what I say is true.


David Daney

[-- Attachment #2: 0001-MIPS-jump_lable-Give-__jump_table-elements-an-entsiz.patch --]
[-- Type: text/x-patch, Size: 2317 bytes --]

>From 484111a11bb5187a4c190cd80b4a03a18ee7047b Mon Sep 17 00:00:00 2001
From: David Daney <david.daney@cavium.com>
Date: Mon, 27 Feb 2017 14:14:30 -0800
Subject: [PATCH] MIPS: jump_lable: Give __jump_table elements an entsize.

Since the __jump_table is a big array of non power-of-2 sized
elements, tell the linker the size so they can be properly packed.
Since each element will have unique "code" and "key" fields, no
merging will ever occur, but it should end up properly packed.

Signed-off-by: David Daney <david.daney@cavium.com>
---
 arch/mips/include/asm/jump_label.h | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h
index e776725..c9a695f 100644
--- a/arch/mips/include/asm/jump_label.h
+++ b/arch/mips/include/asm/jump_label.h
@@ -26,14 +26,26 @@
 #define NOP_INSN "nop"
 #endif
 
+#ifdef CONFIG_64BIT
+typedef u64 jump_label_t;
+#else
+typedef u32 jump_label_t;
+#endif
+
+struct jump_entry {
+	jump_label_t code;
+	jump_label_t target;
+	jump_label_t key;
+};
+
 static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
 {
 	asm_volatile_goto("1:\t" NOP_INSN "\n\t"
 		"nop\n\t"
-		".pushsection __jump_table,  \"aw\"\n\t"
+		".pushsection __jump_table, \"awM\",@progbits, %1\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 		".popsection\n\t"
-		: :  "i" (&((char *)key)[branch]) : : l_yes);
+		: :  "i" (&((char *)key)[branch]), "i" (sizeof(struct jump_entry)): : l_yes);
 
 	return false;
 l_yes:
@@ -44,27 +56,15 @@ static __always_inline bool arch_static_branch_jump(struct static_key *key, bool
 {
 	asm_volatile_goto("1:\tj %l[l_yes]\n\t"
 		"nop\n\t"
-		".pushsection __jump_table,  \"aw\"\n\t"
+		".pushsection __jump_table, \"awM\"@progbits, %1\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 		".popsection\n\t"
-		: :  "i" (&((char *)key)[branch]) : : l_yes);
+		: :  "i" (&((char *)key)[branch]), "i" (sizeof(struct jump_entry)) : : l_yes);
 
 	return false;
 l_yes:
 	return true;
 }
 
-#ifdef CONFIG_64BIT
-typedef u64 jump_label_t;
-#else
-typedef u32 jump_label_t;
-#endif
-
-struct jump_entry {
-	jump_label_t code;
-	jump_label_t target;
-	jump_label_t key;
-};
-
 #endif  /* __ASSEMBLY__ */
 #endif /* _ASM_MIPS_JUMP_LABEL_H */
-- 
2.9.3


WARNING: multiple messages have this Message-ID (diff)
From: David Daney <ddaney@caviumnetworks.com>
To: Steven Rostedt <rostedt@goodmis.org>,
	linux-mips@linux-mips.org, Ralf Baechle <ralf@linux-mips.org>
Cc: Jason Baron <jbaron@akamai.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	Ingo Molnar <mingo@kernel.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Anton Blanchard <anton@samba.org>, Rabin Vincent <rabin@rab.in>,
	Russell King <linux@armlinux.org.uk>,
	Chris Metcalf <cmetcalf@mellanox.com>,
	Zhigang Lu <zlu@ezchip.com>
Subject: Re: [PATCH] jump_label: align jump_entry table to at least 4-bytes
Date: Mon, 27 Feb 2017 14:21:21 -0800	[thread overview]
Message-ID: <7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com> (raw)
In-Reply-To: <20170227170911.2280ca3e@gandalf.local.home>

[-- Attachment #1: Type: text/plain, Size: 1643 bytes --]

On 02/27/2017 02:09 PM, Steven Rostedt wrote:
> On Mon, 27 Feb 2017 13:41:13 -0800
> David Daney <ddaney@caviumnetworks.com> wrote:
>
>> On 02/27/2017 01:06 PM, Steven Rostedt wrote:
>>> On Mon, 27 Feb 2017 11:59:50 -0800
>>> David Daney <ddaney@caviumnetworks.com> wrote:
>>>
>>>> For me the size is not the important issue, it is the alignment of the
>>>> struct jump_entry entries in the table.  I don't understand how your
>>>> patch helps, and I cannot Acked-by unless I understand what is being
>>>> done and can see that it is both correct and necessary.
>>>
>>> You brought up a very good point and I'm glad that I had Jason Cc all
>>> the arch maintainers in one patch.
>>>
>>> I think jump_labels may be much more broken than we think, and Jason's
>>> fix doesn't fix anything. We had this same issues with tracepoints.
>>>
>>> I'm looking at jump_label_init, and how we iterate over an array of
>>> struct jump_entry's that was put together by the linker. The problem is
>>> that jump_entry is not a power of 2 in size.
>>>
>>
>> ELF sections may have an ENTSIZE property exactly for arrays.  Since
>> each jump_entry will have a unique value they cannot be merged, but we
>> can tell the assembler they are an array and get them properly packed.
>> Perhaps something like (untested):
>>
>>     .pushsection __jump_table,  \"awM\",@progbits,24
>>     FOO
>>     .popsection
>>
>
> And the linker will honor this too?

See attached for mips.  It seems to do the right thing.

I leave it as an exercise to the reader to fix the other architectures.

Consult your own  binutils experts to verify that what I say is true.


David Daney



WARNING: multiple messages have this Message-ID (diff)
From: ddaney@caviumnetworks.com (David Daney)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] jump_label: align jump_entry table to at least 4-bytes
Date: Mon, 27 Feb 2017 14:21:21 -0800	[thread overview]
Message-ID: <7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com> (raw)
In-Reply-To: <20170227170911.2280ca3e@gandalf.local.home>

On 02/27/2017 02:09 PM, Steven Rostedt wrote:
> On Mon, 27 Feb 2017 13:41:13 -0800
> David Daney <ddaney@caviumnetworks.com> wrote:
>
>> On 02/27/2017 01:06 PM, Steven Rostedt wrote:
>>> On Mon, 27 Feb 2017 11:59:50 -0800
>>> David Daney <ddaney@caviumnetworks.com> wrote:
>>>
>>>> For me the size is not the important issue, it is the alignment of the
>>>> struct jump_entry entries in the table.  I don't understand how your
>>>> patch helps, and I cannot Acked-by unless I understand what is being
>>>> done and can see that it is both correct and necessary.
>>>
>>> You brought up a very good point and I'm glad that I had Jason Cc all
>>> the arch maintainers in one patch.
>>>
>>> I think jump_labels may be much more broken than we think, and Jason's
>>> fix doesn't fix anything. We had this same issues with tracepoints.
>>>
>>> I'm looking at jump_label_init, and how we iterate over an array of
>>> struct jump_entry's that was put together by the linker. The problem is
>>> that jump_entry is not a power of 2 in size.
>>>
>>
>> ELF sections may have an ENTSIZE property exactly for arrays.  Since
>> each jump_entry will have a unique value they cannot be merged, but we
>> can tell the assembler they are an array and get them properly packed.
>> Perhaps something like (untested):
>>
>>     .pushsection __jump_table,  \"awM\", at progbits,24
>>     FOO
>>     .popsection
>>
>
> And the linker will honor this too?

See attached for mips.  It seems to do the right thing.

I leave it as an exercise to the reader to fix the other architectures.

Consult your own  binutils experts to verify that what I say is true.


David Daney
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-MIPS-jump_lable-Give-__jump_table-elements-an-entsiz.patch
Type: text/x-patch
Size: 2317 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170227/b2d33eff/attachment-0001.bin>

  reply	other threads:[~2017-02-27 22:22 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-27 18:49 [PATCH] jump_label: align jump_entry table to at least 4-bytes Jason Baron
2017-02-27 18:49 ` Jason Baron
2017-02-27 18:57 ` David Daney
2017-02-27 18:57   ` David Daney
2017-02-27 19:18   ` Jason Baron
2017-02-27 19:18     ` Jason Baron
2017-02-27 19:59     ` David Daney
2017-02-27 19:59       ` David Daney
2017-02-27 21:06       ` Steven Rostedt
2017-02-27 21:06         ` Steven Rostedt
2017-02-27 21:41         ` David Daney
2017-02-27 21:41           ` David Daney
2017-02-27 22:09           ` Steven Rostedt
2017-02-27 22:09             ` Steven Rostedt
2017-02-27 22:21             ` David Daney [this message]
2017-02-27 22:21               ` David Daney
2017-02-27 22:21               ` David Daney
2017-02-27 22:36               ` Steven Rostedt
2017-02-27 22:36                 ` Steven Rostedt
2017-02-27 22:45                 ` David Daney
2017-02-27 22:45                   ` David Daney
2017-02-27 22:50                   ` Jason Baron
2017-02-27 22:50                     ` Jason Baron
2017-02-27 23:34                     ` David Daney
2017-02-27 23:34                       ` David Daney
2017-02-28  4:55                     ` Sachin Sant
2017-02-28 16:21                       ` Steven Rostedt
2017-02-28 16:21                         ` Steven Rostedt
2017-02-28 18:16                         ` David Daney
2017-02-28 18:16                           ` David Daney
2017-02-28 18:39                           ` Jason Baron
2017-02-28 18:39                             ` Jason Baron
2017-02-28 19:05                             ` David Daney
2017-02-28 19:05                               ` David Daney
2017-02-28 19:22                               ` David Daney
2017-02-28 19:22                                 ` David Daney
2017-02-28 19:34                                 ` Jason Baron
2017-02-28 19:34                                   ` Jason Baron
2017-02-28 20:15                                   ` David Daney
2017-02-28 20:15                                     ` David Daney
2017-02-28 20:15                                     ` David Daney
2017-02-28 22:41                                     ` Jason Baron
2017-02-28 22:41                                       ` Jason Baron
2017-03-01  6:34                                       ` Michael Ellerman
2017-03-01  6:34                                         ` Michael Ellerman
2017-03-01 16:40                                         ` David Daney
2017-03-01 16:40                                           ` David Daney
2017-03-01 20:02                                           ` Jason Baron
2017-03-01 20:02                                             ` Jason Baron
2017-03-01 21:12                                             ` David Daney
2017-03-01 21:12                                               ` David Daney
2017-03-01  7:12                                       ` Sachin Sant
2017-03-01  7:12                                         ` Sachin Sant
2017-02-27 22:58                   ` Steven Rostedt
2017-02-27 22:58                     ` Steven Rostedt
2017-03-06  2:16               ` [PATCH] MIPS: jump_lable: Give __jump_table elements an entsize kbuild test robot
2017-03-06  2:16                 ` kbuild test robot

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=7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=anton@samba.org \
    --cc=benh@kernel.crashing.org \
    --cc=cmetcalf@mellanox.com \
    --cc=jbaron@akamai.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux@armlinux.org.uk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=rabin@rab.in \
    --cc=ralf@linux-mips.org \
    --cc=rostedt@goodmis.org \
    --cc=zlu@ezchip.com \
    /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.