aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@googlemail.com>2012-01-07 09:47:16 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2012-02-13 10:01:23 -0500
commit8381088e39d03c55552b9dfb09b9b303e96acc78 (patch)
treec5eed79a7c14af8f916886e0b6a99c2760e268f8 /drivers/bluetooth
parent1a609a0a9375cc1fc2097dc697d08fb278a4c764 (diff)
Bluetooth: btusb: Free driver data on USB shutdown
Instead of using the hci-destruct callback we free our private driver data on USB shutdown. We already called hci_unregister_dev() here so the hci core will never ever call our callbacks again except the destruct callback. However, there is no reason to keep our *private* driver data alive if we get never called again and the hci-core does never touch it the data. So we simply free it right away and set the destruct callback to NULL. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r--drivers/bluetooth/btusb.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 8bca784c0ea0..44b5e736ddc3 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -783,15 +783,6 @@ done:
783 return err; 783 return err;
784} 784}
785 785
786static void btusb_destruct(struct hci_dev *hdev)
787{
788 struct btusb_data *data = hdev->driver_data;
789
790 BT_DBG("%s", hdev->name);
791
792 kfree(data);
793}
794
795static void btusb_notify(struct hci_dev *hdev, unsigned int evt) 786static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
796{ 787{
797 struct btusb_data *data = hdev->driver_data; 788 struct btusb_data *data = hdev->driver_data;
@@ -1004,7 +995,6 @@ static int btusb_probe(struct usb_interface *intf,
1004 hdev->close = btusb_close; 995 hdev->close = btusb_close;
1005 hdev->flush = btusb_flush; 996 hdev->flush = btusb_flush;
1006 hdev->send = btusb_send_frame; 997 hdev->send = btusb_send_frame;
1007 hdev->destruct = btusb_destruct;
1008 hdev->notify = btusb_notify; 998 hdev->notify = btusb_notify;
1009 999
1010 hdev->owner = THIS_MODULE; 1000 hdev->owner = THIS_MODULE;
@@ -1108,6 +1098,7 @@ static void btusb_disconnect(struct usb_interface *intf)
1108 __hci_dev_put(hdev); 1098 __hci_dev_put(hdev);
1109 1099
1110 hci_free_dev(hdev); 1100 hci_free_dev(hdev);
1101 kfree(data);
1111} 1102}
1112 1103
1113#ifdef CONFIG_PM 1104#ifdef CONFIG_PM