summaryrefslogtreecommitdiff
path: root/debian/patches/libdde_workqueue.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/libdde_workqueue.patch')
-rw-r--r--debian/patches/libdde_workqueue.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/debian/patches/libdde_workqueue.patch b/debian/patches/libdde_workqueue.patch
new file mode 100644
index 00000000..5ea9b612
--- /dev/null
+++ b/debian/patches/libdde_workqueue.patch
@@ -0,0 +1,55 @@
+diff --git a/libdde_linux26/contrib/include/linux/workqueue.h b/libdde_linux26/contrib/include/linux/workqueue.h
+index 3cd51e5..cf24c20 100644
+--- a/libdde_linux26/contrib/include/linux/workqueue.h
++++ b/libdde_linux26/contrib/include/linux/workqueue.h
+@@ -41,6 +41,11 @@ struct delayed_work {
+ struct timer_list timer;
+ };
+
++static inline struct delayed_work *to_delayed_work(struct work_struct *work)
++{
++ return container_of(work, struct delayed_work, work);
++}
++
+ struct execute_work {
+ struct work_struct work;
+ };
+@@ -89,7 +94,7 @@ struct execute_work {
+ /*
+ * initialize all of a work item in one go
+ *
+- * NOTE! No point in using "atomic_long_set()": useing a direct
++ * NOTE! No point in using "atomic_long_set()": using a direct
+ * assignment of the work data initializer allows the compiler
+ * to generate better code.
+ */
+@@ -202,6 +207,7 @@
+
+ extern void flush_workqueue(struct workqueue_struct *wq);
+ extern void flush_scheduled_work(void);
++extern void flush_delayed_work(struct delayed_work *work);
+
+ extern int schedule_work(struct work_struct *work);
+ extern int schedule_work_on(int cpu, struct work_struct *work);
+@@ -233,6 +239,21 @@
+ if (ret)
+ work_clear_pending(&work->work);
+ return ret;
++}
++
++/*
++ * Like above, but uses del_timer() instead of del_timer_sync(). This means,
++ * if it returns 0 the timer function may be running and the queueing is in
++ * progress.
++ */
++static inline int __cancel_delayed_work(struct delayed_work *work)
++{
++ int ret;
++
++ ret = del_timer(&work->timer);
++ if (ret)
++ work_clear_pending(&work->work);
++ return ret;
+ }
+
+ extern int cancel_delayed_work_sync(struct delayed_work *work);