diff options
Diffstat (limited to 'debian/patches/libdde_workqueue.patch')
-rw-r--r-- | debian/patches/libdde_workqueue.patch | 55 |
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..724f12a2 --- /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 int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, + + 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); +@@ -235,6 +241,21 @@ static inline int cancel_delayed_work(struct delayed_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); + + /* Obsolete. use cancel_delayed_work_sync() */ |