On Fri, 17 Jul 2015, Peter Chen wrote:

> There are several benefits for doing like this:
> 
> - hc_driver can be customized for each hcd
> - Other hcd hc_driver's initialization will not affect current one.
> We run out NULL pointer dereference problem when one hcd is started
> by module_init, and the other is started by otg thread at SMP platform.
> The reason for this problem is ehci_init_driver will do memory copy
> for current uniform hc_driver, and this memory copy will do memset (as 0)
> first, so when the first hcd is running usb_add_hcd, and the second
> hcd may clear the uniform hc_driver's space (at ehci_init_driver),
> then the first hcd will meet NULL pointer at the same time.

It seems to me the real problem is that ehci_init_driver gets called at
the wrong time.  It's not supposed to be called whenever a new host
controller is initialized; rather, it should be called just once when
the driver is initialized.  This means the call should be in a
module_init routine in host.c, not in ci_hdrc_host_init.

If you need to customize the hc_driver structure for each host 
controller then yes, a separate copy is needed.  But otherwise there's 
no need to make a copy.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to