diff options
author | David Herrmann <dh.herrmann@googlemail.com> | 2012-01-07 09:47:16 -0500 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-02-13 10:01:23 -0500 |
commit | 8381088e39d03c55552b9dfb09b9b303e96acc78 (patch) | |
tree | c5eed79a7c14af8f916886e0b6a99c2760e268f8 /drivers/bluetooth | |
parent | 1a609a0a9375cc1fc2097dc697d08fb278a4c764 (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.c | 11 |
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 | ||
786 | static 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 | |||
795 | static void btusb_notify(struct hci_dev *hdev, unsigned int evt) | 786 | static 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 |