NFC: Use system_nrt_wq instead of custom ones
NFC is using a number of custom ordered workqueues w/ WQ_MEM_RECLAIM. WQ_MEM_RECLAIM is unnecessary unless NFC is gonna be used as transport for storage device, and all use cases match one work item to one ordered workqueue - IOW, there's no actual ordering going on at all and using system_nrt_wq gives the same behavior. There's nothing to be gained by using custom workqueues. Use system_nrt_wq instead and drop all the custom ones. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user