From 040eae4806b9ca1765311a83a942ed8fa634c2e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Wed, 12 Sep 2018 14:47:20 +0200 Subject: [PATCH] wifi_drv: fix tasklet_schedule The tasklet_schedule implementation was missing the unblock call, which was no problem in the past because the correspending task would get un- blocked by other work items. Now that every workqueue has its own task, there is nobody left to unblock the task and thereby execute the tasklet. As a tasklet is the only way to transmit any pending frames after transmission was temporarily suspended - because the device/fw was not able to process the TX request - this rendered 6xxx devices unusable whenever this situation occurred. Fixes #2973. --- repos/dde_linux/src/lib/wifi/lxcc_emul.cc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/repos/dde_linux/src/lib/wifi/lxcc_emul.cc b/repos/dde_linux/src/lib/wifi/lxcc_emul.cc index 28851368a..516e9976d 100644 --- a/repos/dde_linux/src/lib/wifi/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/wifi/lxcc_emul.cc @@ -1466,12 +1466,7 @@ void tasklet_init(struct tasklet_struct *t, void (*f)(unsigned long), unsigned l void tasklet_schedule(struct tasklet_struct *tasklet) { Lx::Work::work_queue().schedule_tasklet(tasklet); -} - - -void tasklet_hi_schedule(struct tasklet_struct *tasklet) -{ - tasklet_schedule(tasklet); + Lx::Work::work_queue().unblock(); }