Message ID | 20191105124915.34100-1-broonie@kernel.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 5d682fa3d8943c19a632ebeaf70e8b9e41c78a5b |
Headers | show |
Series | gpio: xgs-iproc: Fix section mismatch on device tree match table | expand |
Hi Mark, On Tue, 2019-11-05 at 12:49 +0000, Mark Brown wrote: > The table of devicetree identifiers is annotated as __initconst > indicating that it can be discarded after kernel boot but it is > referenced from the driver struct which has no init annotation leading > to a linker warning: > > WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the variable .init.rodata:bcm_iproc_gpio_of_match > The variable bcm_iproc_gpio_driver references > the variable __initconst bcm_iproc_gpio_of_match > > Since drivers can be probed after init the lack of annotation on the > driver struct is correct so remove the annotation from the match table. > > Signed-off-by: Mark Brown <broonie@kernel.org> Thanks for picking this up Reviewed-by: Chris Packham <chris.packham@alliedtelesis.co.nz> Is it worth including 'Fixes: 6a41b6c5fc20 ("gpio: Add xgs-iproc driver")'? > --- > drivers/gpio/gpio-xgs-iproc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpio/gpio-xgs-iproc.c b/drivers/gpio/gpio-xgs-iproc.c > index a3fdd95cc9e6..bb183f584d92 100644 > --- a/drivers/gpio/gpio-xgs-iproc.c > +++ b/drivers/gpio/gpio-xgs-iproc.c > @@ -299,7 +299,7 @@ static int __exit iproc_gpio_remove(struct platform_device *pdev) > return 0; > } > > -static const struct of_device_id bcm_iproc_gpio_of_match[] __initconst = { > +static const struct of_device_id bcm_iproc_gpio_of_match[] = { > { .compatible = "brcm,iproc-gpio-cca" }, > {} > };
Hi Mark, > From: Mark Brown, Sent: Tuesday, November 5, 2019 9:49 PM > > The table of devicetree identifiers is annotated as __initconst > indicating that it can be discarded after kernel boot but it is > referenced from the driver struct which has no init annotation leading > to a linker warning: > > WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the > variable .init.rodata:bcm_iproc_gpio_of_match > The variable bcm_iproc_gpio_driver references > the variable __initconst bcm_iproc_gpio_of_match > > Since drivers can be probed after init the lack of annotation on the > driver struct is correct so remove the annotation from the match table. > > Signed-off-by: Mark Brown <broonie@kernel.org> Thank you for the patch! Without this patch, I had encountered another issue which my environment caused a panic when I tried to install a usb host driver after booted [1]. But, I could resolved the issue after I applied this patch. Also, I confirmed this patch could resolved the warning. So, Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Best regards, Yoshihiro Shimoda --- [1] [ 146.541188] Unable to handle kernel paging request at virtual address ffff800011f73540 [ 146.549099] Mem abort info: [ 146.551885] ESR = 0x96000007 [ 146.554934] EC = 0x25: DABT (current EL), IL = 32 bits [ 146.560238] SET = 0, FnV = 0 [ 146.563284] EA = 0, S1PTW = 0 [ 146.566416] Data abort info: [ 146.569289] ISV = 0, ISS = 0x00000007 [ 146.573117] CM = 0, WnR = 0 [ 146.576078] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000049e4a000 [ 146.582770] [ffff800011f73540] pgd=000000077ffff003, pud=000000077fffe003, pmd=000000077fffb003, pte=0000000000000000 [ 146.593375] Internal error: Oops: 96000007 [#1] PREEMPT SMP [ 146.598944] CPU: 0 PID: 106 Comm: kworker/0:1 Not tainted 5.4.0-rc6-next-20191105 #87 [ 146.606766] Hardware name: Renesas Salvator-X 2nd version board based on r8a7795 ES2.0+ (DT) [ 146.615209] Workqueue: events deferred_probe_work_func [ 146.620341] pstate: a0000085 (NzCv daIf -PAN -UAO) [ 146.625132] pc : __of_match_node.part.4+0x3c/0x78 [ 146.629830] lr : of_match_node+0x3c/0x70 ... --- So, Best regards, Yoshihiro Shimoda > --- > drivers/gpio/gpio-xgs-iproc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpio/gpio-xgs-iproc.c b/drivers/gpio/gpio-xgs-iproc.c > index a3fdd95cc9e6..bb183f584d92 100644 > --- a/drivers/gpio/gpio-xgs-iproc.c > +++ b/drivers/gpio/gpio-xgs-iproc.c > @@ -299,7 +299,7 @@ static int __exit iproc_gpio_remove(struct platform_device *pdev) > return 0; > } > > -static const struct of_device_id bcm_iproc_gpio_of_match[] __initconst = { > +static const struct of_device_id bcm_iproc_gpio_of_match[] = { > { .compatible = "brcm,iproc-gpio-cca" }, > {} > }; > -- > 2.20.1
(adding Guillamume), On Wed, 2019-11-06 at 07:08 +0000, Yoshihiro Shimoda wrote: > Hi Mark, > > > From: Mark Brown, Sent: Tuesday, November 5, 2019 9:49 PM > > > > The table of devicetree identifiers is annotated as __initconst > > indicating that it can be discarded after kernel boot but it is > > referenced from the driver struct which has no init annotation leading > > to a linker warning: > > > > WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the > > variable .init.rodata:bcm_iproc_gpio_of_match > > The variable bcm_iproc_gpio_driver references > > the variable __initconst bcm_iproc_gpio_of_match > > > > Since drivers can be probed after init the lack of annotation on the > > driver struct is correct so remove the annotation from the match table. > > > > Signed-off-by: Mark Brown <broonie@kernel.org> > > Thank you for the patch! Without this patch, I had encountered another > issue which my environment caused a panic when I tried to install a usb host > driver after booted [1]. But, I could resolved the issue after > I applied this patch. Also, I confirmed this patch could resolved the warning. > > So, > Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > > Best regards, > Yoshihiro Shimoda > > --- > [1] > [ 146.541188] Unable to handle kernel paging request at virtual address ffff800011f73540 > [ 146.549099] Mem abort info: > [ 146.551885] ESR = 0x96000007 > [ 146.554934] EC = 0x25: DABT (current EL), IL = 32 bits > [ 146.560238] SET = 0, FnV = 0 > [ 146.563284] EA = 0, S1PTW = 0 > [ 146.566416] Data abort info: > [ 146.569289] ISV = 0, ISS = 0x00000007 > [ 146.573117] CM = 0, WnR = 0 > [ 146.576078] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000049e4a000 > [ 146.582770] [ffff800011f73540] pgd=000000077ffff003, pud=000000077fffe003, pmd=000000077fffb003, pte=0000000000000000 > [ 146.593375] Internal error: Oops: 96000007 [#1] PREEMPT SMP > [ 146.598944] CPU: 0 PID: 106 Comm: kworker/0:1 Not tainted 5.4.0-rc6-next-20191105 #87 > [ 146.606766] Hardware name: Renesas Salvator-X 2nd version board based on r8a7795 ES2.0+ (DT) > [ 146.615209] Workqueue: events deferred_probe_work_func > [ 146.620341] pstate: a0000085 (NzCv daIf -PAN -UAO) > [ 146.625132] pc : __of_match_node.part.4+0x3c/0x78 > [ 146.629830] lr : of_match_node+0x3c/0x70 > ... > --- > > > So, I guess that kernelci failure[1] wasn't bogus after all. Sorry again for the hassle. And Mark, Yoshihiro thanks for the fix and test. [1] - https://lore.kernel.org/lkml/5dbb2acf.1c69fb81.54ce2.2f48@mx.google.com/ > > > Best regards, > Yoshihiro Shimoda > > > > --- > > drivers/gpio/gpio-xgs-iproc.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/gpio/gpio-xgs-iproc.c b/drivers/gpio/gpio-xgs-iproc.c > > index a3fdd95cc9e6..bb183f584d92 100644 > > --- a/drivers/gpio/gpio-xgs-iproc.c > > +++ b/drivers/gpio/gpio-xgs-iproc.c > > @@ -299,7 +299,7 @@ static int __exit iproc_gpio_remove(struct platform_device *pdev) > > return 0; > > } > > > > -static const struct of_device_id bcm_iproc_gpio_of_match[] __initconst = { > > +static const struct of_device_id bcm_iproc_gpio_of_match[] = { > > { .compatible = "brcm,iproc-gpio-cca" }, > > {} > > }; > > -- > > 2.20.1 > >
On 06/11/2019 19:49, Chris Packham wrote: > (adding Guillamume), > > On Wed, 2019-11-06 at 07:08 +0000, Yoshihiro Shimoda wrote: >> Hi Mark, >> >>> From: Mark Brown, Sent: Tuesday, November 5, 2019 9:49 PM >>> >>> The table of devicetree identifiers is annotated as __initconst >>> indicating that it can be discarded after kernel boot but it is >>> referenced from the driver struct which has no init annotation leading >>> to a linker warning: >>> >>> WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the >>> variable .init.rodata:bcm_iproc_gpio_of_match >>> The variable bcm_iproc_gpio_driver references >>> the variable __initconst bcm_iproc_gpio_of_match >>> >>> Since drivers can be probed after init the lack of annotation on the >>> driver struct is correct so remove the annotation from the match table. >>> >>> Signed-off-by: Mark Brown <broonie@kernel.org> >> >> Thank you for the patch! Without this patch, I had encountered another >> issue which my environment caused a panic when I tried to install a usb host >> driver after booted [1]. But, I could resolved the issue after >> I applied this patch. Also, I confirmed this patch could resolved the warning. >> >> So, >> Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> >> >> Best regards, >> Yoshihiro Shimoda >> >> --- >> [1] >> [ 146.541188] Unable to handle kernel paging request at virtual address ffff800011f73540 >> [ 146.549099] Mem abort info: >> [ 146.551885] ESR = 0x96000007 >> [ 146.554934] EC = 0x25: DABT (current EL), IL = 32 bits >> [ 146.560238] SET = 0, FnV = 0 >> [ 146.563284] EA = 0, S1PTW = 0 >> [ 146.566416] Data abort info: >> [ 146.569289] ISV = 0, ISS = 0x00000007 >> [ 146.573117] CM = 0, WnR = 0 >> [ 146.576078] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000049e4a000 >> [ 146.582770] [ffff800011f73540] pgd=000000077ffff003, pud=000000077fffe003, pmd=000000077fffb003, pte=0000000000000000 >> [ 146.593375] Internal error: Oops: 96000007 [#1] PREEMPT SMP >> [ 146.598944] CPU: 0 PID: 106 Comm: kworker/0:1 Not tainted 5.4.0-rc6-next-20191105 #87 >> [ 146.606766] Hardware name: Renesas Salvator-X 2nd version board based on r8a7795 ES2.0+ (DT) >> [ 146.615209] Workqueue: events deferred_probe_work_func >> [ 146.620341] pstate: a0000085 (NzCv daIf -PAN -UAO) >> [ 146.625132] pc : __of_match_node.part.4+0x3c/0x78 >> [ 146.629830] lr : of_match_node+0x3c/0x70 >> ... >> --- >> >> >> So, > > I guess that kernelci failure[1] wasn't bogus after all. Sorry again > for the hassle. And Mark, Yoshihiro thanks for the fix and test. Thanks for the follow-up, I'll re-enable bisections in lab-theobroma-systems then. It's actually pretty hard to get false positives from this automated bisection thanks to some checks run on the commit found, to verify it does cause a boot failure and also verify that when reverted the problem goes away. This was a good example :) Guillaume > [1] - > https://lore.kernel.org/lkml/5dbb2acf.1c69fb81.54ce2.2f48@mx.google.com/ > >> >> >> Best regards, >> Yoshihiro Shimoda >> >> >>> --- >>> drivers/gpio/gpio-xgs-iproc.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/gpio/gpio-xgs-iproc.c b/drivers/gpio/gpio-xgs-iproc.c >>> index a3fdd95cc9e6..bb183f584d92 100644 >>> --- a/drivers/gpio/gpio-xgs-iproc.c >>> +++ b/drivers/gpio/gpio-xgs-iproc.c >>> @@ -299,7 +299,7 @@ static int __exit iproc_gpio_remove(struct platform_device *pdev) >>> return 0; >>> } >>> >>> -static const struct of_device_id bcm_iproc_gpio_of_match[] __initconst = { >>> +static const struct of_device_id bcm_iproc_gpio_of_match[] = { >>> { .compatible = "brcm,iproc-gpio-cca" }, >>> {} >>> }; >>> -- >>> 2.20.1 >> >> > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >
On Tue, Nov 5, 2019 at 1:49 PM Mark Brown <broonie@kernel.org> wrote: > The table of devicetree identifiers is annotated as __initconst > indicating that it can be discarded after kernel boot but it is > referenced from the driver struct which has no init annotation leading > to a linker warning: > > WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the variable .init.rodata:bcm_iproc_gpio_of_match > The variable bcm_iproc_gpio_driver references > the variable __initconst bcm_iproc_gpio_of_match > > Since drivers can be probed after init the lack of annotation on the > driver struct is correct so remove the annotation from the match table. > > Signed-off-by: Mark Brown <broonie@kernel.org> Oh thanks a LOT Mark! Hurriedly applied this with the ACKs and pushed out so linux-next starts working. Quite interesting bug, I guess I'll comment on it in the other thread. Yours, Linus Walleij
diff --git a/drivers/gpio/gpio-xgs-iproc.c b/drivers/gpio/gpio-xgs-iproc.c index a3fdd95cc9e6..bb183f584d92 100644 --- a/drivers/gpio/gpio-xgs-iproc.c +++ b/drivers/gpio/gpio-xgs-iproc.c @@ -299,7 +299,7 @@ static int __exit iproc_gpio_remove(struct platform_device *pdev) return 0; } -static const struct of_device_id bcm_iproc_gpio_of_match[] __initconst = { +static const struct of_device_id bcm_iproc_gpio_of_match[] = { { .compatible = "brcm,iproc-gpio-cca" }, {} };
The table of devicetree identifiers is annotated as __initconst indicating that it can be discarded after kernel boot but it is referenced from the driver struct which has no init annotation leading to a linker warning: WARNING: vmlinux.o(.data+0x82d58): Section mismatch in reference from the variable bcm_iproc_gpio_driver to the variable .init.rodata:bcm_iproc_gpio_of_match The variable bcm_iproc_gpio_driver references the variable __initconst bcm_iproc_gpio_of_match Since drivers can be probed after init the lack of annotation on the driver struct is correct so remove the annotation from the match table. Signed-off-by: Mark Brown <broonie@kernel.org> --- drivers/gpio/gpio-xgs-iproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)