提交 cbed0ca1 编写于 作者: J Johan Hedberg 提交者: Marcel Holtmann

Bluetooth: Refactor hci_dev_open to a separate hci_dev_do_open function

The requirements of an external call to hci_dev_open from hci_sock.c are
different to that from within hci_core.c. In the former case we want to
flush any pending work in hdev->req_workqueue whereas in the latter we
don't (since there we are already calling from within the workqueue
itself). This patch does the necessary refactoring to a separate
hci_dev_do_open function (analogous to hci_dev_do_close) but does not
yet introduce the synchronizations relating to the workqueue usage.
Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
上级 922ca1df
...@@ -1176,17 +1176,10 @@ void hci_update_ad(struct hci_request *req) ...@@ -1176,17 +1176,10 @@ void hci_update_ad(struct hci_request *req)
hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp); hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
} }
/* ---- HCI ioctl helpers ---- */ static int hci_dev_do_open(struct hci_dev *hdev)
int hci_dev_open(__u16 dev)
{ {
struct hci_dev *hdev;
int ret = 0; int ret = 0;
hdev = hci_dev_get(dev);
if (!hdev)
return -ENODEV;
BT_DBG("%s %p", hdev->name, hdev); BT_DBG("%s %p", hdev->name, hdev);
hci_req_lock(hdev); hci_req_lock(hdev);
...@@ -1266,10 +1259,27 @@ int hci_dev_open(__u16 dev) ...@@ -1266,10 +1259,27 @@ int hci_dev_open(__u16 dev)
done: done:
hci_req_unlock(hdev); hci_req_unlock(hdev);
hci_dev_put(hdev);
return ret; return ret;
} }
/* ---- HCI ioctl helpers ---- */
int hci_dev_open(__u16 dev)
{
struct hci_dev *hdev;
int err;
hdev = hci_dev_get(dev);
if (!hdev)
return -ENODEV;
err = hci_dev_do_open(hdev);
hci_dev_put(hdev);
return err;
}
static int hci_dev_do_close(struct hci_dev *hdev) static int hci_dev_do_close(struct hci_dev *hdev)
{ {
BT_DBG("%s %p", hdev->name, hdev); BT_DBG("%s %p", hdev->name, hdev);
...@@ -1665,7 +1675,7 @@ static void hci_power_on(struct work_struct *work) ...@@ -1665,7 +1675,7 @@ static void hci_power_on(struct work_struct *work)
BT_DBG("%s", hdev->name); BT_DBG("%s", hdev->name);
err = hci_dev_open(hdev->id); err = hci_dev_do_open(hdev);
if (err < 0) { if (err < 0) {
mgmt_set_powered_failed(hdev, err); mgmt_set_powered_failed(hdev, err);
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册