Files
package_kernel_mac80211/patches/ath12k/200-Revert-wifi-ath12k-convert-tasklet-to-BH-workqueue-f.patch
actions-user 7a26c298a2 同步更新
2025-11-03 00:55:38 +08:00

83 lines
2.7 KiB
Diff

From cd911185014f773f0e227cabfb760b30968c3bca Mon Sep 17 00:00:00 2001
From: Mantas Pucka <mantas@8devices.com>
Date: Tue, 27 May 2025 14:13:27 +0300
Subject: [PATCH] Revert "wifi: ath12k: convert tasklet to BH workqueue for CE
interrupts"
This reverts commit cdad737160571a98cc4933a62c9f2728e965ab27.
---
drivers/net/wireless/ath/ath12k/ce.h | 2 +-
drivers/net/wireless/ath/ath12k/pci.c | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
--- a/drivers/net/wireless/ath/ath12k/ce.h
+++ b/drivers/net/wireless/ath/ath12k/ce.h
@@ -159,7 +159,7 @@ struct ath12k_ce_pipe {
void (*send_cb)(struct ath12k_ce_pipe *pipe);
void (*recv_cb)(struct ath12k_base *ab, struct sk_buff *skb);
- struct work_struct intr_wq;
+ struct tasklet_struct intr_tq;
struct ath12k_ce_ring *src_ring;
struct ath12k_ce_ring *dest_ring;
struct ath12k_ce_ring *status_ring;
--- a/drivers/net/wireless/ath/ath12k/pci.c
+++ b/drivers/net/wireless/ath/ath12k/pci.c
@@ -430,9 +430,9 @@ static void ath12k_pci_sync_ce_irqs(stru
}
}
-static void ath12k_pci_ce_workqueue(struct work_struct *work)
+static void ath12k_pci_ce_tasklet(struct tasklet_struct *t)
{
- struct ath12k_ce_pipe *ce_pipe = from_work(ce_pipe, work, intr_wq);
+ struct ath12k_ce_pipe *ce_pipe = from_tasklet(ce_pipe, t, intr_tq);
int irq_idx = ATH12K_PCI_IRQ_CE0_OFFSET + ce_pipe->pipe_num;
ath12k_ce_per_engine_service(ce_pipe->ab, ce_pipe->pipe_num);
@@ -454,7 +454,7 @@ static irqreturn_t ath12k_pci_ce_interru
disable_irq_nosync(ab->irq_num[irq_idx]);
- queue_work(system_bh_wq, &ce_pipe->intr_wq);
+ tasklet_schedule(&ce_pipe->intr_tq);
return IRQ_HANDLED;
}
@@ -684,7 +684,7 @@ static int ath12k_pci_config_irq(struct
irq_idx = ATH12K_PCI_IRQ_CE0_OFFSET + i;
- INIT_WORK(&ce_pipe->intr_wq, ath12k_pci_ce_workqueue);
+ tasklet_setup(&ce_pipe->intr_tq, ath12k_pci_ce_tasklet);
ret = request_irq(irq, ath12k_pci_ce_interrupt_handler,
ab_pci->irq_flags, irq_name[irq_idx],
@@ -967,7 +967,7 @@ static void ath12k_pci_aspm_restore(stru
PCI_EXP_LNKCTL_ASPMC);
}
-static void ath12k_pci_cancel_workqueue(struct ath12k_base *ab)
+static void ath12k_pci_kill_tasklets(struct ath12k_base *ab)
{
int i;
@@ -977,7 +977,7 @@ static void ath12k_pci_cancel_workqueue(
if (ath12k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR)
continue;
- cancel_work_sync(&ce_pipe->intr_wq);
+ tasklet_kill(&ce_pipe->intr_tq);
}
}
@@ -985,7 +985,7 @@ static void ath12k_pci_ce_irq_disable_sy
{
ath12k_pci_ce_irqs_disable(ab);
ath12k_pci_sync_ce_irqs(ab);
- ath12k_pci_cancel_workqueue(ab);
+ ath12k_pci_kill_tasklets(ab);
}
int ath12k_pci_map_service_to_pipe(struct ath12k_base *ab, u16 service_id,