Bluetooth: hci_intel: Replace spinlock with mutex
Replace the device_intel list spinlock with a mutex. devm_request_threaded_irq is not atomic and upcomming PM support should be simpler. Signed-off-by: Loic Poulain <loic.poulain@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
f44e78a5fc
commit
67c8bde04d
|
@ -67,7 +67,7 @@ struct intel_device {
|
||||||
};
|
};
|
||||||
|
|
||||||
static LIST_HEAD(intel_device_list);
|
static LIST_HEAD(intel_device_list);
|
||||||
static DEFINE_SPINLOCK(intel_device_list_lock);
|
static DEFINE_MUTEX(intel_device_list_lock);
|
||||||
|
|
||||||
struct intel_data {
|
struct intel_data {
|
||||||
struct sk_buff *rx_skb;
|
struct sk_buff *rx_skb;
|
||||||
|
@ -143,7 +143,7 @@ static int intel_set_power(struct hci_uart *hu, bool powered)
|
||||||
struct list_head *p;
|
struct list_head *p;
|
||||||
int err = -ENODEV;
|
int err = -ENODEV;
|
||||||
|
|
||||||
spin_lock(&intel_device_list_lock);
|
mutex_lock(&intel_device_list_lock);
|
||||||
|
|
||||||
list_for_each(p, &intel_device_list) {
|
list_for_each(p, &intel_device_list) {
|
||||||
struct intel_device *idev = list_entry(p, struct intel_device,
|
struct intel_device *idev = list_entry(p, struct intel_device,
|
||||||
|
@ -187,7 +187,7 @@ static int intel_set_power(struct hci_uart *hu, bool powered)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&intel_device_list_lock);
|
mutex_unlock(&intel_device_list_lock);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -696,7 +696,7 @@ done:
|
||||||
bt_dev_info(hdev, "Device booted in %llu usecs", duration);
|
bt_dev_info(hdev, "Device booted in %llu usecs", duration);
|
||||||
|
|
||||||
/* Enable LPM if matching pdev with wakeup enabled */
|
/* Enable LPM if matching pdev with wakeup enabled */
|
||||||
spin_lock(&intel_device_list_lock);
|
mutex_lock(&intel_device_list_lock);
|
||||||
list_for_each(p, &intel_device_list) {
|
list_for_each(p, &intel_device_list) {
|
||||||
struct intel_device *dev = list_entry(p, struct intel_device,
|
struct intel_device *dev = list_entry(p, struct intel_device,
|
||||||
list);
|
list);
|
||||||
|
@ -706,7 +706,7 @@ done:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock(&intel_device_list_lock);
|
mutex_unlock(&intel_device_list_lock);
|
||||||
|
|
||||||
if (!idev)
|
if (!idev)
|
||||||
goto no_lpm;
|
goto no_lpm;
|
||||||
|
@ -982,9 +982,9 @@ no_irq:
|
||||||
platform_set_drvdata(pdev, idev);
|
platform_set_drvdata(pdev, idev);
|
||||||
|
|
||||||
/* Place this instance on the device list */
|
/* Place this instance on the device list */
|
||||||
spin_lock(&intel_device_list_lock);
|
mutex_lock(&intel_device_list_lock);
|
||||||
list_add_tail(&idev->list, &intel_device_list);
|
list_add_tail(&idev->list, &intel_device_list);
|
||||||
spin_unlock(&intel_device_list_lock);
|
mutex_unlock(&intel_device_list_lock);
|
||||||
|
|
||||||
dev_info(&pdev->dev, "registered, gpio(%d)/irq(%d).\n",
|
dev_info(&pdev->dev, "registered, gpio(%d)/irq(%d).\n",
|
||||||
desc_to_gpio(idev->reset), idev->irq);
|
desc_to_gpio(idev->reset), idev->irq);
|
||||||
|
@ -998,9 +998,9 @@ static int intel_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
device_wakeup_disable(&pdev->dev);
|
device_wakeup_disable(&pdev->dev);
|
||||||
|
|
||||||
spin_lock(&intel_device_list_lock);
|
mutex_lock(&intel_device_list_lock);
|
||||||
list_del(&idev->list);
|
list_del(&idev->list);
|
||||||
spin_unlock(&intel_device_list_lock);
|
mutex_unlock(&intel_device_list_lock);
|
||||||
|
|
||||||
dev_info(&pdev->dev, "unregistered.\n");
|
dev_info(&pdev->dev, "unregistered.\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue