2015-05-22 02:07:22

by Baolu Lu

[permalink] [raw]
Subject: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

Many drivers and modules depend on ULPI bus registeration to
register ULPI interfaces and drivers. It's more appropriate
to register ULPI bus in subsys_initcall instead of module_init.

Kernel panic has been reported with some kind of kernel config.

[0.746856] kernel BUG at drivers/base/driver.c:153!
[0.752418] invalid opcode: 0000 [#1] PREEMPT SMP
[0.757804] Modules linked in:
[0.893985] Call Trace:
[0.896729] [<ffffffff81870cb1>] ? ulpi_register_driver+0x21/0x30
[0.903654] [<ffffffff823d5cac>] tusb1210_driver_init+0x10/0x12
[0.910386] [<ffffffff81000318>] do_one_initcall+0xd8/0x200
[0.916729] [<ffffffff8239b094>] kernel_init_freeable+0x196/0x21e
[0.923655] [<ffffffff81affed0>] ? rest_init+0x90/0x90
[0.929509] [<ffffffff81affede>] kernel_init+0xe/0xf0
[0.935266] [<ffffffff81b0f442>] ret_from_fork+0x42/0x70
[0.941315] [<ffffffff81affed0>] ? rest_init+0x90/0x90

This patch fixes this kind of kernel panic by putting ulpi_init in
subsys_initcall().

Reported-by: Zhuo Qiuxu <[email protected]>
Signed-off-by: Lu Baolu <[email protected]>
---
drivers/usb/common/ulpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 0e6f968..01c0c04 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -242,7 +242,7 @@ static int __init ulpi_init(void)
{
return bus_register(&ulpi_bus);
}
-module_init(ulpi_init);
+subsys_initcall(ulpi_init);

static void __exit ulpi_exit(void)
{
--
2.1.4


2015-05-22 03:07:31

by David Cohen

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

Hi,

On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
> Many drivers and modules depend on ULPI bus registeration to
> register ULPI interfaces and drivers. It's more appropriate
> to register ULPI bus in subsys_initcall instead of module_init.
>
> Kernel panic has been reported with some kind of kernel config.

Even though I agree subsys_initcall is better to register ulpi bus, it's
still no excuse to have kernel panic. What about ULPI bus being compiled
as module?
IMHO this is avoiding the proper kernel panic fix which should be
failing gracefully (or defer probe) from tusb1210 driver.

Br, David

2015-05-22 03:09:10

by David Cohen

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

On Thu, May 21, 2015 at 08:09:54PM -0700, David Cohen wrote:
> Hi,
>
> On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
> > Many drivers and modules depend on ULPI bus registeration to
> > register ULPI interfaces and drivers. It's more appropriate
> > to register ULPI bus in subsys_initcall instead of module_init.
> >
> > Kernel panic has been reported with some kind of kernel config.
>
> Even though I agree subsys_initcall is better to register ulpi bus, it's
> still no excuse to have kernel panic. What about ULPI bus being compiled
> as module?
> IMHO this is avoiding the proper kernel panic fix which should be
> failing gracefully (or defer probe) from tusb1210 driver.

Maybe I need to express myself better :)
IMHO we should not consider work done with this patch only. It's still
incomplete.

Br, David

2015-05-22 06:46:46

by Baolu Lu

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall



On 05/22/2015 11:11 AM, David Cohen wrote:
> On Thu, May 21, 2015 at 08:09:54PM -0700, David Cohen wrote:
>> Hi,
>>
>> On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
>>> Many drivers and modules depend on ULPI bus registeration to
>>> register ULPI interfaces and drivers. It's more appropriate
>>> to register ULPI bus in subsys_initcall instead of module_init.
>>>
>>> Kernel panic has been reported with some kind of kernel config.
>> Even though I agree subsys_initcall is better to register ulpi bus, it's
>> still no excuse to have kernel panic. What about ULPI bus being compiled
>> as module?

No kernel panic if ULPI is built as a module.

>> IMHO this is avoiding the proper kernel panic fix which should be
>> failing gracefully (or defer probe) from tusb1210 driver.
> Maybe I need to express myself better :)
> IMHO we should not consider work done with this patch only. It's still
> incomplete.

I am with you on that we should know the real problem.

I could go ahead with further debugging. Do you have any suggestions
about which direction should I go?

>
> Br, David

Thank you,
-Baolu

> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
>

2015-05-22 07:50:53

by Baolu Lu

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall



On 05/22/2015 02:46 PM, Lu, Baolu wrote:
>
>
> On 05/22/2015 11:11 AM, David Cohen wrote:
>> On Thu, May 21, 2015 at 08:09:54PM -0700, David Cohen wrote:
>>> Hi,
>>>
>>> On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
>>>> Many drivers and modules depend on ULPI bus registeration to
>>>> register ULPI interfaces and drivers. It's more appropriate
>>>> to register ULPI bus in subsys_initcall instead of module_init.
>>>>
>>>> Kernel panic has been reported with some kind of kernel config.
>>> Even though I agree subsys_initcall is better to register ulpi bus,
>>> it's
>>> still no excuse to have kernel panic. What about ULPI bus being
>>> compiled
>>> as module?
>
> No kernel panic if ULPI is built as a module.
>
>>> IMHO this is avoiding the proper kernel panic fix which should be
>>> failing gracefully (or defer probe) from tusb1210 driver.
>> Maybe I need to express myself better :)
>> IMHO we should not consider work done with this patch only. It's still
>> incomplete.
>
> I am with you on that we should know the real problem.
>
> I could go ahead with further debugging. Do you have any suggestions
> about which direction should I go?

I forgot to mention that the panic was found in an Android environment.
The kernel version is v4.1-rc3.

>
>>
>> Br, David
>
> Thank you,
> -Baolu
>
>> --
>> To unsubscribe from this list: send the line "unsubscribe
>> linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>>
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2015-05-22 10:07:16

by Heikki Krogerus

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

> >>>Many drivers and modules depend on ULPI bus registeration to
> >>>register ULPI interfaces and drivers. It's more appropriate
> >>>to register ULPI bus in subsys_initcall instead of module_init.
> >>>
> >>>Kernel panic has been reported with some kind of kernel config.
> >>Even though I agree subsys_initcall is better to register ulpi bus, it's
> >>still no excuse to have kernel panic. What about ULPI bus being compiled
> >>as module?
>
> No kernel panic if ULPI is built as a module.
>
> >>IMHO this is avoiding the proper kernel panic fix which should be
> >>failing gracefully (or defer probe) from tusb1210 driver.
> >Maybe I need to express myself better :)
> >IMHO we should not consider work done with this patch only. It's still
> >incomplete.
>
> I am with you on that we should know the real problem.
>
> I could go ahead with further debugging. Do you have any suggestions
> about which direction should I go?

This patch does not address all the cases where the panic may occur,
like the case where the bus itself fails register, while Sasha's patch
does. For the panic, we'll use Sasha's patch. I though we were clear
on this.

This patch addresses an issue with the load order. Even with the panic
fixed, we still may end up loading the drivers depending on the bus,
i.e. ulpi phy drivers or the ulpi interface providers, before the bus.
That is a different issue, but we need to fix it as well.

To fix the panic, you can already pick Sasha's patch titled:
"usb: ulpi: don't register drivers if bus doesn't exist"

Baolu, please fix the commit message to explain this patch is fixing
the problem with the load order.


Thanks,

--
heikki

2015-05-22 16:10:21

by David Cohen

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

On Fri, May 22, 2015 at 03:50:47PM +0800, Lu, Baolu wrote:
>
>
> On 05/22/2015 02:46 PM, Lu, Baolu wrote:
> >
> >
> >On 05/22/2015 11:11 AM, David Cohen wrote:
> >>On Thu, May 21, 2015 at 08:09:54PM -0700, David Cohen wrote:
> >>>Hi,
> >>>
> >>>On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
> >>>>Many drivers and modules depend on ULPI bus registeration to
> >>>>register ULPI interfaces and drivers. It's more appropriate
> >>>>to register ULPI bus in subsys_initcall instead of module_init.
> >>>>
> >>>>Kernel panic has been reported with some kind of kernel config.
> >>>Even though I agree subsys_initcall is better to register ulpi bus,
> >>>it's
> >>>still no excuse to have kernel panic. What about ULPI bus being
> >>>compiled
> >>>as module?
> >
> >No kernel panic if ULPI is built as a module.
> >
> >>>IMHO this is avoiding the proper kernel panic fix which should be
> >>>failing gracefully (or defer probe) from tusb1210 driver.
> >>Maybe I need to express myself better :)
> >>IMHO we should not consider work done with this patch only. It's still
> >>incomplete.
> >
> >I am with you on that we should know the real problem.
> >
> >I could go ahead with further debugging. Do you have any suggestions
> >about which direction should I go?
>
> I forgot to mention that the panic was found in an Android environment.
> The kernel version is v4.1-rc3.

FWIW:

The problem with Android environment is the amount of off-tree patches
you may have over there.
For upstream tasks, I'd suggest use a clean tree + patches you want to
test. Usually yocto looks more friendly to test under this environment.

Br, David

>
> >
> >>
> >>Br, David
> >
> >Thank you,
> >-Baolu
> >
> >>--
> >>To unsubscribe from this list: send the line "unsubscribe linux-kernel"
> >>in
> >>the body of a message to [email protected]
> >>More majordomo info at http://vger.kernel.org/majordomo-info.html
> >>Please read the FAQ at http://www.tux.org/lkml/
> >>
> >>
> >
> >--
> >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> >the body of a message to [email protected]
> >More majordomo info at http://vger.kernel.org/majordomo-info.html
> >Please read the FAQ at http://www.tux.org/lkml/
> >
>

2015-05-24 16:25:19

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: ulpi: ulpi_init should be executed in subsys_initcall

On Thu, May 21, 2015 at 08:11:27PM -0700, David Cohen wrote:
> On Thu, May 21, 2015 at 08:09:54PM -0700, David Cohen wrote:
> > Hi,
> >
> > On Fri, May 22, 2015 at 10:07:05AM +0800, Lu Baolu wrote:
> > > Many drivers and modules depend on ULPI bus registeration to
> > > register ULPI interfaces and drivers. It's more appropriate
> > > to register ULPI bus in subsys_initcall instead of module_init.
> > >
> > > Kernel panic has been reported with some kind of kernel config.
> >
> > Even though I agree subsys_initcall is better to register ulpi bus, it's
> > still no excuse to have kernel panic. What about ULPI bus being compiled
> > as module?
> > IMHO this is avoiding the proper kernel panic fix which should be
> > failing gracefully (or defer probe) from tusb1210 driver.
>
> Maybe I need to express myself better :)
> IMHO we should not consider work done with this patch only. It's still
> incomplete.

Then please fix it properly, this is not the correct solution.

greg k-h