From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751932AbdB1WuS (ORCPT ); Tue, 28 Feb 2017 17:50:18 -0500 Received: from prod-mail-xrelay06.akamai.com ([96.6.114.98]:52175 "EHLO prod-mail-xrelay06.akamai.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750957AbdB1WuP (ORCPT ); Tue, 28 Feb 2017 17:50:15 -0500 Subject: Re: [PATCH] jump_label: align jump_entry table to at least 4-bytes To: David Daney , Steven Rostedt , Sachin Sant References: <1488221364-13905-1-git-send-email-jbaron@akamai.com> <93219edf-0f6d-5cc7-309c-c998f16fe7ac@akamai.com> <20170227160601.5b79a1fe@gandalf.local.home> <6db89a8d-6053-51d1-5fd4-bae0179a5ebd@caviumnetworks.com> <20170227170911.2280ca3e@gandalf.local.home> <7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com> <20170227173630.57fff459@gandalf.local.home> <7bd72716-feea-073f-741c-04212ebd0802@caviumnetworks.com> <68fe24ea-7795-24d8-211b-9d8a50affe9f@akamai.com> <510FF566-011D-4199-86F7-2BB4DBF36434@linux.vnet.ibm.com> <20170228112144.65455de5@gandalf.local.home> <1de00727-de97-f887-78bd-dd49131cdf61@akamai.com> <999e2c3f-698c-703c-67a9-26aea3c97dc0@caviumnetworks.com> <542488db-5c59-afa5-6d1d-a437c87bc613@akamai.com> <912fa97a-aa1d-c0e4-dc83-fc5c745db1c1@caviumnetworks.com> Cc: linux-mips@linux-mips.org, Chris Metcalf , Michael Ellerman , Russell King , Ralf Baechle , LKML , Rabin Vincent , Paul Mackerras , Anton Blanchard , linuxppc-dev@lists.ozlabs.org, Ingo Molnar , linux-arm-kernel@lists.infradead.org, Zhigang Lu From: Jason Baron Message-ID: <23989c10-7b47-3fda-f790-25b539704bec@akamai.com> Date: Tue, 28 Feb 2017 17:41:33 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <912fa97a-aa1d-c0e4-dc83-fc5c745db1c1@caviumnetworks.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/28/2017 03:15 PM, David Daney wrote: > On 02/28/2017 11:34 AM, Jason Baron wrote: >> >> >> On 02/28/2017 02:22 PM, David Daney wrote: >>> On 02/28/2017 11:05 AM, David Daney wrote: >>>> On 02/28/2017 10:39 AM, Jason Baron wrote: >>>>> >>> [...] >>>>>> I suspect that the alignment of the __jump_table section in the .ko >>>>>> files is not correct, and you are seeing some sort of problem due to >>>>>> that. >>>>>> >>>>>> >>>>> >>>>> Hi, >>>>> >>>>> Yes, if you look at the trace that Sachin sent the module being loaded >>>>> that does the WARN_ON() is nfsd.ko. >>>>> >>>>> That module from Sachin's trace has: >>>>> >>>>> [31] __jump_table PROGBITS 0000000000000000 03fd77 >>>>> 0000c0 >>>>> 18 WAM 0 0 1 >>>> >>>> The problem is then the section alignment (last column) for power. >>>> >>>> On mips with no patches applied, we get: >>>> >>>> [17] __jump_table PROGBITS 0000000000000000 00d2c0 000048 >>>> 00 WA 0 0 8 >>>> >>>> Look, proper alignment! >>>> >>>> The question I have is why do the power ".llong" and ".long" assembler >>>> directives not force section alignment? Is there an alternative that >>>> could be used that would result in the proper alignment? Would ".word" >>>> work? >>>> >>>> If not, then I would say patch only power with your balign thing. >>>> 8-byte >>>> alignment for 64-bit kernel, 4-byte alignment for 32-bit kernel >>>> >>> >>> I think the proper fix is either: >>> >>> A) Modify scripts/module-common.lds to force __jump_table alignment for >>> all architectures. >>> >>> B) Add arch/powerpc/kernel/module.lds to force __jump_table alignment >>> for powerpc only. >>> >>> David. >>> >>> >> >> Ok, I can try adding it to the linger script. >> >> FWIW, here is my before and after with the .balign thing for the nfsd.ko >> module on powperc (using a cross-compiler): >> >> before: >> >> [31] __jump_table PROGBITS 0000000000000000 03ee3e 0000f0 >> 00 WA 0 0 1 >> >> after: >> >> [31] __jump_table PROGBITS 0000000000000000 03ee40 0000f0 >> 00 WA 0 0 4 >> > > Try the (lightly tested) attached. > > If it works and Steven likes it, perhaps someone can merge it. > > David. > > > So before your module.lds script: # powerpc64-linux-readelf -eW fs/nfsd/nfsd.o | grep jump [31] __jump_table PROGBITS 0000000000000000 03edfe 0000f0 00 WA 0 0 1 # powerpc64-linux-readelf -eW fs/nfsd/nfsd.ko | grep jump [32] __jump_table PROGBITS 0000000000000000 044046 0000f0 00 WA 0 0 1 With your patch: # powerpc64-linux-readelf -eW fs/nfsd/nfsd.o | grep jump [31] __jump_table PROGBITS 0000000000000000 03edfe 0000f0 00 WA 0 0 1 # powerpc64-linux-readelf -eW fs/nfsd/nfsd.ko | grep jump [18] __jump_table PROGBITS 0000000000000000 03e358 0000f0 00 WA 0 0 8 I also checked all the other .ko files and they were properly aligned. So I think this should hopefully work, and I like that its not a per-arch fix. Sachin, sorry to bother you again, but I'm hoping you can try David's latest patch to scripts/module-common.lds, just to test in your setup. Thanks, -Jason From mboxrd@z Thu Jan 1 00:00:00 1970 From: jbaron@akamai.com (Jason Baron) Date: Tue, 28 Feb 2017 17:41:33 -0500 Subject: [PATCH] jump_label: align jump_entry table to at least 4-bytes In-Reply-To: <912fa97a-aa1d-c0e4-dc83-fc5c745db1c1@caviumnetworks.com> References: <1488221364-13905-1-git-send-email-jbaron@akamai.com> <93219edf-0f6d-5cc7-309c-c998f16fe7ac@akamai.com> <20170227160601.5b79a1fe@gandalf.local.home> <6db89a8d-6053-51d1-5fd4-bae0179a5ebd@caviumnetworks.com> <20170227170911.2280ca3e@gandalf.local.home> <7fa95eea-20be-611c-2b63-fca600779465@caviumnetworks.com> <20170227173630.57fff459@gandalf.local.home> <7bd72716-feea-073f-741c-04212ebd0802@caviumnetworks.com> <68fe24ea-7795-24d8-211b-9d8a50affe9f@akamai.com> <510FF566-011D-4199-86F7-2BB4DBF36434@linux.vnet.ibm.com> <20170228112144.65455de5@gandalf.local.home> <1de00727-de97-f887-78bd-dd49131cdf61@akamai.com> <999e2c3f-698c-703c-67a9-26aea3c97dc0@caviumnetworks.com> <542488db-5c59-afa5-6d1d-a437c87bc613@akamai.com> <912fa97a-aa1d-c0e4-dc83-fc5c745db1c1@caviumnetworks.com> Message-ID: <23989c10-7b47-3fda-f790-25b539704bec@akamai.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 02/28/2017 03:15 PM, David Daney wrote: > On 02/28/2017 11:34 AM, Jason Baron wrote: >> >> >> On 02/28/2017 02:22 PM, David Daney wrote: >>> On 02/28/2017 11:05 AM, David Daney wrote: >>>> On 02/28/2017 10:39 AM, Jason Baron wrote: >>>>> >>> [...] >>>>>> I suspect that the alignment of the __jump_table section in the .ko >>>>>> files is not correct, and you are seeing some sort of problem due to >>>>>> that. >>>>>> >>>>>> >>>>> >>>>> Hi, >>>>> >>>>> Yes, if you look at the trace that Sachin sent the module being loaded >>>>> that does the WARN_ON() is nfsd.ko. >>>>> >>>>> That module from Sachin's trace has: >>>>> >>>>> [31] __jump_table PROGBITS 0000000000000000 03fd77 >>>>> 0000c0 >>>>> 18 WAM 0 0 1 >>>> >>>> The problem is then the section alignment (last column) for power. >>>> >>>> On mips with no patches applied, we get: >>>> >>>> [17] __jump_table PROGBITS 0000000000000000 00d2c0 000048 >>>> 00 WA 0 0 8 >>>> >>>> Look, proper alignment! >>>> >>>> The question I have is why do the power ".llong" and ".long" assembler >>>> directives not force section alignment? Is there an alternative that >>>> could be used that would result in the proper alignment? Would ".word" >>>> work? >>>> >>>> If not, then I would say patch only power with your balign thing. >>>> 8-byte >>>> alignment for 64-bit kernel, 4-byte alignment for 32-bit kernel >>>> >>> >>> I think the proper fix is either: >>> >>> A) Modify scripts/module-common.lds to force __jump_table alignment for >>> all architectures. >>> >>> B) Add arch/powerpc/kernel/module.lds to force __jump_table alignment >>> for powerpc only. >>> >>> David. >>> >>> >> >> Ok, I can try adding it to the linger script. >> >> FWIW, here is my before and after with the .balign thing for the nfsd.ko >> module on powperc (using a cross-compiler): >> >> before: >> >> [31] __jump_table PROGBITS 0000000000000000 03ee3e 0000f0 >> 00 WA 0 0 1 >> >> after: >> >> [31] __jump_table PROGBITS 0000000000000000 03ee40 0000f0 >> 00 WA 0 0 4 >> > > Try the (lightly tested) attached. > > If it works and Steven likes it, perhaps someone can merge it. > > David. > > > So before your module.lds script: # powerpc64-linux-readelf -eW fs/nfsd/nfsd.o | grep jump [31] __jump_table PROGBITS 0000000000000000 03edfe 0000f0 00 WA 0 0 1 # powerpc64-linux-readelf -eW fs/nfsd/nfsd.ko | grep jump [32] __jump_table PROGBITS 0000000000000000 044046 0000f0 00 WA 0 0 1 With your patch: # powerpc64-linux-readelf -eW fs/nfsd/nfsd.o | grep jump [31] __jump_table PROGBITS 0000000000000000 03edfe 0000f0 00 WA 0 0 1 # powerpc64-linux-readelf -eW fs/nfsd/nfsd.ko | grep jump [18] __jump_table PROGBITS 0000000000000000 03e358 0000f0 00 WA 0 0 8 I also checked all the other .ko files and they were properly aligned. So I think this should hopefully work, and I like that its not a per-arch fix. Sachin, sorry to bother you again, but I'm hoping you can try David's latest patch to scripts/module-common.lds, just to test in your setup. Thanks, -Jason