HID: elo: update the reference count of the usb device structure
Use usb_get_dev() to increment the reference count of the usb device structure in order to avoid releasing the structure while it is still in use. And use usb_put_dev() to decrement the reference count and thus, when it will be equal to 0 the structure will be released. Signed-off-by: Salah Triki <salah.triki@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
db8d3a2127
commit
fbf42729d0
@ -228,13 +228,15 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
|||||||
{
|
{
|
||||||
struct elo_priv *priv;
|
struct elo_priv *priv;
|
||||||
int ret;
|
int ret;
|
||||||
|
struct usb_device *udev;
|
||||||
|
|
||||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||||
if (!priv)
|
if (!priv)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
INIT_DELAYED_WORK(&priv->work, elo_work);
|
INIT_DELAYED_WORK(&priv->work, elo_work);
|
||||||
priv->usbdev = interface_to_usbdev(to_usb_interface(hdev->dev.parent));
|
udev = interface_to_usbdev(to_usb_interface(hdev->dev.parent));
|
||||||
|
priv->usbdev = usb_get_dev(udev);
|
||||||
|
|
||||||
hid_set_drvdata(hdev, priv);
|
hid_set_drvdata(hdev, priv);
|
||||||
|
|
||||||
@ -265,6 +267,8 @@ static void elo_remove(struct hid_device *hdev)
|
|||||||
{
|
{
|
||||||
struct elo_priv *priv = hid_get_drvdata(hdev);
|
struct elo_priv *priv = hid_get_drvdata(hdev);
|
||||||
|
|
||||||
|
usb_put_dev(priv->usbdev);
|
||||||
|
|
||||||
hid_hw_stop(hdev);
|
hid_hw_stop(hdev);
|
||||||
cancel_delayed_work_sync(&priv->work);
|
cancel_delayed_work_sync(&priv->work);
|
||||||
kfree(priv);
|
kfree(priv);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user