Commit 597d473f authored by Samuel Iglesias Gonsalvez's avatar Samuel Iglesias Gonsalvez Committed by Greg Kroah-Hartman

Staging: ipack/devices/ipoctal: avoid kernel oops when uninstalling

When uninstalling a device, there is a loop of calls that produces, at the end,
two calls to __ipoctal_remove() function with the same ipack_device argument.

The first time works fine, but the second will fail in tty_unregister_driver()

To avoid this situation, the call to __ipoctal_remove() it is done only from the
ipack bus driver and not from the ipack device driver.
Signed-off-by: default avatarSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b2bc13c5
......@@ -853,11 +853,6 @@ static void __ipoctal_remove(struct ipoctal *ipoctal)
tty_unregister_driver(ipoctal->tty_drv);
put_tty_driver(ipoctal->tty_drv);
/* Tell the carrier board to free all the resources for this device */
if (ipoctal->dev->bus->ops->remove_device != NULL)
ipoctal->dev->bus->ops->remove_device(ipoctal->dev);
list_del(&ipoctal->list);
kfree(ipoctal);
}
......@@ -889,7 +884,7 @@ static void __exit ipoctal_exit(void)
struct ipoctal *p, *next;
list_for_each_entry_safe(p, next, &ipoctal_list, list)
__ipoctal_remove(p);
p->dev->bus->ops->remove_device(p->dev);
ipack_driver_unregister(&driver);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment