diff mbox series

gpio: xgs-iproc: Fix section mismatch on device tree match table

Message ID 20191105124915.34100-1-broonie@kernel.org
State Accepted
Commit 5d682fa3d8943c19a632ebeaf70e8b9e41c78a5b
Headers show
Series gpio: xgs-iproc: Fix section mismatch on device tree match table | expand

Commit Message

Mark Brown Nov. 5, 2019, 12:49 p.m. UTC
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(-)

-- 
2.20.1

Comments

Chris Packham Nov. 5, 2019, 8:07 p.m. UTC | #1
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" },

>  	{}

>  };
Yoshihiro Shimoda Nov. 6, 2019, 7:08 a.m. UTC | #2
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
Chris Packham Nov. 6, 2019, 7:49 p.m. UTC | #3
(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

> 

>
Guillaume Tucker Nov. 6, 2019, 8:28 p.m. UTC | #4
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

>
Linus Walleij Nov. 7, 2019, 7:56 a.m. UTC | #5
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 mbox series

Patch

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" },
 	{}
 };