Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 194873
b: refs/heads/master
c: f48fd9c
h: refs/heads/master
i:
  194871: df7b456
v: v3
  • Loading branch information
Marcel Holtmann committed May 10, 2010
1 parent 79aefc9 commit fa52cfd
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 844c0972427ee5f661158160aaca10b22b3dda60
refs/heads/master: f48fd9c8cd746fdb055a97249a209c77dca0f710
2 changes: 2 additions & 0 deletions trunk/include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ struct hci_dev {
unsigned long acl_last_tx;
unsigned long sco_last_tx;

struct workqueue_struct *workqueue;

struct tasklet_struct cmd_task;
struct tasklet_struct rx_task;
struct tasklet_struct tx_task;
Expand Down
14 changes: 14 additions & 0 deletions trunk/net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <linux/fcntl.h>
#include <linux/init.h>
#include <linux/skbuff.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/notifier.h>
#include <linux/rfkill.h>
Expand Down Expand Up @@ -928,6 +929,10 @@ int hci_register_dev(struct hci_dev *hdev)

write_unlock_bh(&hci_dev_list_lock);

hdev->workqueue = create_singlethread_workqueue(hdev->name);
if (!hdev->workqueue)
goto nomem;

hci_register_sysfs(hdev);

hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
Expand All @@ -942,6 +947,13 @@ int hci_register_dev(struct hci_dev *hdev)
hci_notify(hdev, HCI_DEV_REG);

return id;

nomem:
write_lock_bh(&hci_dev_list_lock);
list_del(&hdev->list);
write_unlock_bh(&hci_dev_list_lock);

return -ENOMEM;
}
EXPORT_SYMBOL(hci_register_dev);

Expand Down Expand Up @@ -970,6 +982,8 @@ int hci_unregister_dev(struct hci_dev *hdev)

hci_unregister_sysfs(hdev);

destroy_workqueue(hdev->workqueue);

__hci_dev_put(hdev);

return 0;
Expand Down
16 changes: 3 additions & 13 deletions trunk/net/bluetooth/hci_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ static struct class *bt_class;
struct dentry *bt_debugfs = NULL;
EXPORT_SYMBOL_GPL(bt_debugfs);

static struct workqueue_struct *bt_workq;

static inline char *link_typetostr(int type)
{
switch (type) {
Expand Down Expand Up @@ -161,14 +159,14 @@ void hci_conn_add_sysfs(struct hci_conn *conn)
{
BT_DBG("conn %p", conn);

queue_work(bt_workq, &conn->work_add);
queue_work(conn->hdev->workqueue, &conn->work_add);
}

void hci_conn_del_sysfs(struct hci_conn *conn)
{
BT_DBG("conn %p", conn);

queue_work(bt_workq, &conn->work_del);
queue_work(conn->hdev->workqueue, &conn->work_del);
}

static inline char *host_bustostr(int bus)
Expand Down Expand Up @@ -487,17 +485,11 @@ void hci_unregister_sysfs(struct hci_dev *hdev)

int __init bt_sysfs_init(void)
{
bt_workq = create_singlethread_workqueue("bluetooth");
if (!bt_workq)
return -ENOMEM;

bt_debugfs = debugfs_create_dir("bluetooth", NULL);

bt_class = class_create(THIS_MODULE, "bluetooth");
if (IS_ERR(bt_class)) {
destroy_workqueue(bt_workq);
if (IS_ERR(bt_class))
return PTR_ERR(bt_class);
}

return 0;
}
Expand All @@ -507,6 +499,4 @@ void bt_sysfs_cleanup(void)
class_destroy(bt_class);

debugfs_remove_recursive(bt_debugfs);

destroy_workqueue(bt_workq);
}

0 comments on commit fa52cfd

Please sign in to comment.