forked from Minki/linux
Bluetooth: Remove HCI-owner field
After unregistering an hci_dev object a bluetooth driver does not have any callbacks in the hci_dev structure left over. Therefore, there is no need to keep a reference to the module. Previously, we needed this to protect the hci-destruct callback. However, this callback is no longer available so we do not need this owner field, anymore. Drivers now call hci_unregister_dev() and they are done with the object. 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>
This commit is contained in:
parent
46e06531a5
commit
e9b9cfa157
@ -705,8 +705,6 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i
|
||||
hdev->send = bfusb_send_frame;
|
||||
hdev->ioctl = bfusb_ioctl;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
if (hci_register_dev(hdev) < 0) {
|
||||
BT_ERR("Can't register HCI device");
|
||||
hci_free_dev(hdev);
|
||||
|
@ -738,8 +738,6 @@ static int bluecard_open(bluecard_info_t *info)
|
||||
hdev->send = bluecard_hci_send_frame;
|
||||
hdev->ioctl = bluecard_hci_ioctl;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
id = inb(iobase + 0x30);
|
||||
|
||||
if ((id & 0x0f) == 0x02)
|
||||
|
@ -470,8 +470,6 @@ static int bpa10x_probe(struct usb_interface *intf, const struct usb_device_id *
|
||||
hdev->flush = bpa10x_flush;
|
||||
hdev->send = bpa10x_send_frame;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks);
|
||||
|
||||
err = hci_register_dev(hdev);
|
||||
|
@ -584,8 +584,6 @@ static int bt3c_open(bt3c_info_t *info)
|
||||
hdev->send = bt3c_hci_send_frame;
|
||||
hdev->ioctl = bt3c_hci_ioctl;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
/* Load firmware */
|
||||
err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev);
|
||||
if (err < 0) {
|
||||
|
@ -550,7 +550,6 @@ int btmrvl_register_hdev(struct btmrvl_private *priv)
|
||||
hdev->flush = btmrvl_flush;
|
||||
hdev->send = btmrvl_send_frame;
|
||||
hdev->ioctl = btmrvl_ioctl;
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
|
||||
|
||||
|
@ -337,8 +337,6 @@ static int btsdio_probe(struct sdio_func *func,
|
||||
hdev->flush = btsdio_flush;
|
||||
hdev->send = btsdio_send_frame;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
err = hci_register_dev(hdev);
|
||||
if (err < 0) {
|
||||
hci_free_dev(hdev);
|
||||
|
@ -502,8 +502,6 @@ static int btuart_open(btuart_info_t *info)
|
||||
hdev->send = btuart_hci_send_frame;
|
||||
hdev->ioctl = btuart_hci_ioctl;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
spin_lock_irqsave(&(info->lock), flags);
|
||||
|
||||
/* Reset UART */
|
||||
|
@ -997,8 +997,6 @@ static int btusb_probe(struct usb_interface *intf,
|
||||
hdev->send = btusb_send_frame;
|
||||
hdev->notify = btusb_notify;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
/* Interface numbers are hardcoded in the specification */
|
||||
data->isoc = usb_ifnum_to_if(data->udev, 1);
|
||||
|
||||
|
@ -317,7 +317,6 @@ static int bt_ti_probe(struct platform_device *pdev)
|
||||
hdev->close = ti_st_close;
|
||||
hdev->flush = NULL;
|
||||
hdev->send = ti_st_send_frame;
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
err = hci_register_dev(hdev);
|
||||
if (err < 0) {
|
||||
|
@ -484,8 +484,6 @@ static int dtl1_open(dtl1_info_t *info)
|
||||
hdev->send = dtl1_hci_send_frame;
|
||||
hdev->ioctl = dtl1_hci_ioctl;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
spin_lock_irqsave(&(info->lock), flags);
|
||||
|
||||
/* Reset UART */
|
||||
|
@ -392,8 +392,6 @@ static int hci_uart_register_dev(struct hci_uart *hu)
|
||||
hdev->send = hci_uart_send_frame;
|
||||
hdev->parent = hu->tty->dev;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
if (!reset)
|
||||
set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks);
|
||||
|
||||
|
@ -244,8 +244,6 @@ static int vhci_open(struct inode *inode, struct file *file)
|
||||
hdev->flush = vhci_flush;
|
||||
hdev->send = vhci_send_frame;
|
||||
|
||||
hdev->owner = THIS_MODULE;
|
||||
|
||||
if (hci_register_dev(hdev) < 0) {
|
||||
BT_ERR("Can't register HCI device");
|
||||
kfree(data);
|
||||
|
@ -262,8 +262,6 @@ struct hci_dev {
|
||||
|
||||
struct rfkill *rfkill;
|
||||
|
||||
struct module *owner;
|
||||
|
||||
unsigned long dev_flags;
|
||||
|
||||
int (*open)(struct hci_dev *hdev);
|
||||
@ -601,11 +599,7 @@ static inline void __hci_dev_put(struct hci_dev *d)
|
||||
* hci_dev_put and hci_dev_hold are macros to avoid dragging all the
|
||||
* overhead of all the modular infrastructure into this header.
|
||||
*/
|
||||
#define hci_dev_put(d) \
|
||||
do { \
|
||||
__hci_dev_put(d); \
|
||||
module_put(d->owner); \
|
||||
} while (0)
|
||||
#define hci_dev_put(d) __hci_dev_put(d)
|
||||
|
||||
static inline struct hci_dev *__hci_dev_hold(struct hci_dev *d)
|
||||
{
|
||||
@ -613,10 +607,7 @@ static inline struct hci_dev *__hci_dev_hold(struct hci_dev *d)
|
||||
return d;
|
||||
}
|
||||
|
||||
#define hci_dev_hold(d) \
|
||||
({ \
|
||||
try_module_get(d->owner) ? __hci_dev_hold(d) : NULL; \
|
||||
})
|
||||
#define hci_dev_hold(d) __hci_dev_hold(d)
|
||||
|
||||
#define hci_dev_lock(d) mutex_lock(&d->lock)
|
||||
#define hci_dev_unlock(d) mutex_unlock(&d->lock)
|
||||
|
@ -1548,8 +1548,7 @@ int hci_register_dev(struct hci_dev *hdev)
|
||||
struct list_head *head = &hci_dev_list, *p;
|
||||
int i, id, error;
|
||||
|
||||
BT_DBG("%p name %s bus %d owner %p", hdev, hdev->name,
|
||||
hdev->bus, hdev->owner);
|
||||
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
|
||||
|
||||
if (!hdev->open || !hdev->close)
|
||||
return -EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user