usb: gadget: remove incorrect __init/__exit annotations
A recent change introduced a link error for the composite printer gadget driver: `printer_unbind' referenced in section `.ref.data' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o Evidently the unbind function should not be marked __exit here, because it is called through a callback pointer that is not necessarily discarded, __composite_unbind() is indeed called from the error path of composite_bind(), which can never work for a built-in driver. Looking at the surrounding code, I found the same problem in all other composite gadget drivers in both the bind and unbind functions, as well as the udc platform driver 'remove' functions. Those will break if anyone uses the 'unbind' sysfs attribute to detach a device from a built-in driver. This patch removes the incorrect annotations from all the gadget drivers. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
committed by
Felipe Balbi
parent
197d0bdf8b
commit
c94e289f19
@@ -1942,7 +1942,7 @@ err_unprepare_fclk:
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int __exit at91udc_remove(struct platform_device *pdev)
|
||||
static int at91udc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct at91_udc *udc = platform_get_drvdata(pdev);
|
||||
unsigned long flags;
|
||||
@@ -2018,7 +2018,7 @@ static int at91udc_resume(struct platform_device *pdev)
|
||||
#endif
|
||||
|
||||
static struct platform_driver at91_udc_driver = {
|
||||
.remove = __exit_p(at91udc_remove),
|
||||
.remove = at91udc_remove,
|
||||
.shutdown = at91udc_shutdown,
|
||||
.suspend = at91udc_suspend,
|
||||
.resume = at91udc_resume,
|
||||
|
||||
@@ -2186,7 +2186,7 @@ static int usba_udc_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __exit usba_udc_remove(struct platform_device *pdev)
|
||||
static int usba_udc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct usba_udc *udc;
|
||||
int i;
|
||||
@@ -2258,7 +2258,7 @@ static int usba_udc_resume(struct device *dev)
|
||||
static SIMPLE_DEV_PM_OPS(usba_udc_pm_ops, usba_udc_suspend, usba_udc_resume);
|
||||
|
||||
static struct platform_driver udc_driver = {
|
||||
.remove = __exit_p(usba_udc_remove),
|
||||
.remove = usba_udc_remove,
|
||||
.driver = {
|
||||
.name = "atmel_usba_udc",
|
||||
.pm = &usba_udc_pm_ops,
|
||||
|
||||
@@ -2525,7 +2525,7 @@ err_kfree:
|
||||
/* Driver removal function
|
||||
* Free resources and finish pending transactions
|
||||
*/
|
||||
static int __exit fsl_udc_remove(struct platform_device *pdev)
|
||||
static int fsl_udc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
struct fsl_usb2_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
||||
@@ -2663,7 +2663,7 @@ static const struct platform_device_id fsl_udc_devtype[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, fsl_udc_devtype);
|
||||
static struct platform_driver udc_driver = {
|
||||
.remove = __exit_p(fsl_udc_remove),
|
||||
.remove = fsl_udc_remove,
|
||||
/* Just for FSL i.mx SoC currently */
|
||||
.id_table = fsl_udc_devtype,
|
||||
/* these suspend and resume are not usb suspend and resume */
|
||||
|
||||
@@ -1342,7 +1342,7 @@ static const struct usb_gadget_ops fusb300_gadget_ops = {
|
||||
.udc_stop = fusb300_udc_stop,
|
||||
};
|
||||
|
||||
static int __exit fusb300_remove(struct platform_device *pdev)
|
||||
static int fusb300_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fusb300 *fusb300 = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1492,7 +1492,7 @@ clean_up:
|
||||
}
|
||||
|
||||
static struct platform_driver fusb300_driver = {
|
||||
.remove = __exit_p(fusb300_remove),
|
||||
.remove = fusb300_remove,
|
||||
.driver = {
|
||||
.name = (char *) udc_name,
|
||||
},
|
||||
|
||||
@@ -1528,7 +1528,7 @@ static const struct usb_gadget_ops m66592_gadget_ops = {
|
||||
.pullup = m66592_pullup,
|
||||
};
|
||||
|
||||
static int __exit m66592_remove(struct platform_device *pdev)
|
||||
static int m66592_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct m66592 *m66592 = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1695,7 +1695,7 @@ clean_up:
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static struct platform_driver m66592_driver = {
|
||||
.remove = __exit_p(m66592_remove),
|
||||
.remove = m66592_remove,
|
||||
.driver = {
|
||||
.name = (char *) udc_name,
|
||||
},
|
||||
|
||||
@@ -1820,7 +1820,7 @@ static const struct usb_gadget_ops r8a66597_gadget_ops = {
|
||||
.set_selfpowered = r8a66597_set_selfpowered,
|
||||
};
|
||||
|
||||
static int __exit r8a66597_remove(struct platform_device *pdev)
|
||||
static int r8a66597_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct r8a66597 *r8a66597 = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1974,7 +1974,7 @@ clean_up2:
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static struct platform_driver r8a66597_driver = {
|
||||
.remove = __exit_p(r8a66597_remove),
|
||||
.remove = r8a66597_remove,
|
||||
.driver = {
|
||||
.name = (char *) udc_name,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user