[PATCH 10/12] usbgadget: ums: run gadget loop in a background coroutine if possible
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Feb 15 05:37:03 EST 2021
With the new fancy poller yield support in place, we can let let the
loop yield in sleep_thread and naturally run in the background. Add this
and wrap it up inside an #ifdef, so the driver can still be used in
blocking mode for the architectures still missing out on poller yield
support.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
drivers/usb/gadget/f_mass_storage.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 9c0076be26d1..c3e6eb933ce7 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -287,6 +287,18 @@ static struct usb_gadget_strings fsg_stringtab = {
/*-------------------------------------------------------------------------*/
+#ifdef CONFIG_POLLER_YIELD
+
+#include <linux/completion.h>
+#include <linux/kthread.h>
+
+static inline bool poll(void)
+{
+ return !ctrlc();
+}
+
+#else
+
struct completion { int done; };
#define init_completion(x) do { (x)->done = 0; } while (0)
@@ -331,6 +343,8 @@ static struct task_struct *kthread_run(int (*threadfn)(void *), void *arg,
#define poll() thread_task->threadfn(thread_task->arg)
+#endif
+
#define wait_event(queue, cond) do { poll(); } while (!(cond))
#define wake_up(...) do {} while (0)
--
2.29.2
More information about the barebox
mailing list