|
@@ -114,9 +114,9 @@ static void local_release(struct kref *ref)
|
|
|
nfc_llcp_socket_release(local, false);
|
|
|
del_timer_sync(&local->link_timer);
|
|
|
skb_queue_purge(&local->tx_queue);
|
|
|
- destroy_workqueue(local->tx_wq);
|
|
|
- destroy_workqueue(local->rx_wq);
|
|
|
- destroy_workqueue(local->timeout_wq);
|
|
|
+ cancel_work_sync(&local->tx_work);
|
|
|
+ cancel_work_sync(&local->rx_work);
|
|
|
+ cancel_work_sync(&local->timeout_work);
|
|
|
kfree_skb(local->rx_pending);
|
|
|
kfree(local);
|
|
|
}
|
|
@@ -181,7 +181,7 @@ static void nfc_llcp_symm_timer(unsigned long data)
|
|
|
|
|
|
pr_err("SYMM timeout\n");
|
|
|
|
|
|
- queue_work(local->timeout_wq, &local->timeout_work);
|
|
|
+ queue_work(system_nrt_wq, &local->timeout_work);
|
|
|
}
|
|
|
|
|
|
struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev)
|
|
@@ -1052,7 +1052,7 @@ static void nfc_llcp_rx_work(struct work_struct *work)
|
|
|
|
|
|
}
|
|
|
|
|
|
- queue_work(local->tx_wq, &local->tx_work);
|
|
|
+ queue_work(system_nrt_wq, &local->tx_work);
|
|
|
kfree_skb(local->rx_pending);
|
|
|
local->rx_pending = NULL;
|
|
|
|
|
@@ -1071,7 +1071,7 @@ void nfc_llcp_recv(void *data, struct sk_buff *skb, int err)
|
|
|
|
|
|
local->rx_pending = skb_get(skb);
|
|
|
del_timer(&local->link_timer);
|
|
|
- queue_work(local->rx_wq, &local->rx_work);
|
|
|
+ queue_work(system_nrt_wq, &local->rx_work);
|
|
|
|
|
|
return;
|
|
|
}
|
|
@@ -1086,7 +1086,7 @@ int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb)
|
|
|
|
|
|
local->rx_pending = skb_get(skb);
|
|
|
del_timer(&local->link_timer);
|
|
|
- queue_work(local->rx_wq, &local->rx_work);
|
|
|
+ queue_work(system_nrt_wq, &local->rx_work);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1121,7 +1121,7 @@ void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
|
|
|
if (rf_mode == NFC_RF_INITIATOR) {
|
|
|
pr_debug("Queueing Tx work\n");
|
|
|
|
|
|
- queue_work(local->tx_wq, &local->tx_work);
|
|
|
+ queue_work(system_nrt_wq, &local->tx_work);
|
|
|
} else {
|
|
|
mod_timer(&local->link_timer,
|
|
|
jiffies + msecs_to_jiffies(local->remote_lto));
|
|
@@ -1130,10 +1130,7 @@ void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
|
|
|
|
|
|
int nfc_llcp_register_device(struct nfc_dev *ndev)
|
|
|
{
|
|
|
- struct device *dev = &ndev->dev;
|
|
|
struct nfc_llcp_local *local;
|
|
|
- char name[32];
|
|
|
- int err;
|
|
|
|
|
|
local = kzalloc(sizeof(struct nfc_llcp_local), GFP_KERNEL);
|
|
|
if (local == NULL)
|
|
@@ -1149,38 +1146,11 @@ int nfc_llcp_register_device(struct nfc_dev *ndev)
|
|
|
|
|
|
skb_queue_head_init(&local->tx_queue);
|
|
|
INIT_WORK(&local->tx_work, nfc_llcp_tx_work);
|
|
|
- snprintf(name, sizeof(name), "%s_llcp_tx_wq", dev_name(dev));
|
|
|
- local->tx_wq =
|
|
|
- alloc_workqueue(name,
|
|
|
- WQ_NON_REENTRANT | WQ_UNBOUND | WQ_MEM_RECLAIM,
|
|
|
- 1);
|
|
|
- if (local->tx_wq == NULL) {
|
|
|
- err = -ENOMEM;
|
|
|
- goto err_local;
|
|
|
- }
|
|
|
|
|
|
local->rx_pending = NULL;
|
|
|
INIT_WORK(&local->rx_work, nfc_llcp_rx_work);
|
|
|
- snprintf(name, sizeof(name), "%s_llcp_rx_wq", dev_name(dev));
|
|
|
- local->rx_wq =
|
|
|
- alloc_workqueue(name,
|
|
|
- WQ_NON_REENTRANT | WQ_UNBOUND | WQ_MEM_RECLAIM,
|
|
|
- 1);
|
|
|
- if (local->rx_wq == NULL) {
|
|
|
- err = -ENOMEM;
|
|
|
- goto err_tx_wq;
|
|
|
- }
|
|
|
|
|
|
INIT_WORK(&local->timeout_work, nfc_llcp_timeout_work);
|
|
|
- snprintf(name, sizeof(name), "%s_llcp_timeout_wq", dev_name(dev));
|
|
|
- local->timeout_wq =
|
|
|
- alloc_workqueue(name,
|
|
|
- WQ_NON_REENTRANT | WQ_UNBOUND | WQ_MEM_RECLAIM,
|
|
|
- 1);
|
|
|
- if (local->timeout_wq == NULL) {
|
|
|
- err = -ENOMEM;
|
|
|
- goto err_rx_wq;
|
|
|
- }
|
|
|
|
|
|
local->sockets.lock = __RW_LOCK_UNLOCKED(local->sockets.lock);
|
|
|
local->connecting_sockets.lock = __RW_LOCK_UNLOCKED(local->connecting_sockets.lock);
|
|
@@ -1192,17 +1162,6 @@ int nfc_llcp_register_device(struct nfc_dev *ndev)
|
|
|
|
|
|
list_add(&llcp_devices, &local->list);
|
|
|
|
|
|
- return 0;
|
|
|
-
|
|
|
-err_rx_wq:
|
|
|
- destroy_workqueue(local->rx_wq);
|
|
|
-
|
|
|
-err_tx_wq:
|
|
|
- destroy_workqueue(local->tx_wq);
|
|
|
-
|
|
|
-err_local:
|
|
|
- kfree(local);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|