Messages in this thread | | | Subject | Re: [PATCH] jump_label: align jump_entry table to at least 4-bytes | From | Jason Baron <> | Date | Tue, 28 Feb 2017 17:41:33 -0500 |
| |
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
| |