Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: /* 2: * workqueue.h --- work queue handling for Linux. 3: */ 4: 5: #ifndef _LINUX_WORKQUEUE_H 6: #define _LINUX_WORKQUEUE_H 7: 8: #include <linux/timer.h> 9: #include <linux/linkage.h> 10: #include <linux/bitops.h> 11: #include <linux/lockdep.h> 12: #include <linux/threads.h> 13: #include <linux/atomic.h> 14: #include <linux/cpumask.h> 15: 16: struct workqueue_struct; 17: 18: struct work_struct; 19: typedef void (*work_func_t)(struct work_struct *work); 20: void delayed_work_timer_fn(unsigned long __data); 21: 22: /* 23: * The first word is the work queue pointer and the flags rolled into 24: * one 25: */ 26: #define work_data_bits(work) ((unsigned long *)(&(work)->data)) 27: 28: enum { 29: WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ 30: WORK_STRUCT_DELAYED_BIT = 1, /* work item is delayed */ 31: WORK_STRUCT_PWQ_BIT = 2, /* data points to pwq */ 32: WORK_STRUCT_LINKED_BIT = 3, /* next work is linked to this one */ 33: #ifdef CONFIG_DEBUG_OBJECTS_WORK 34: WORK_STRUCT_STATIC_BIT = 4, /* static initializer (debugobjects) */ 35: WORK_STRUCT_COLOR_SHIFT = 5, /* color for workqueue flushing */ 36: #else 37: WORK_STRUCT_COLOR_SHIFT = 4, /* color for workqueue flushing */ 38: #endif 39: 40: WORK_STRUCT_COLOR_BITS = 4, 41: 42: WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, 43: WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT, 44: WORK_STRUCT_PWQ = 1 << WORK_STRUCT_PWQ_BIT, 45: WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT, 46: #ifdef CONFIG_DEBUG_OBJECTS_WORK 47: WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, 48: #else 49: WORK_STRUCT_STATIC = 0, 50: #endif 51: 52: /* 53: * The last color is no color used for works which don't 54: * participate in workqueue flushing. 55: */ 56: WORK_NR_COLORS = (1 << WORK_STRUCT_COLOR_BITS) - 1, 57: WORK_NO_COLOR = WORK_NR_COLORS, 58: 59: /* special cpu IDs */ 60: WORK_CPU_UNBOUND = NR_CPUS, 61: WORK_CPU_END = NR_CPUS + 1, 62: 63: /* 64: * Reserve 7 bits off of pwq pointer w/ debugobjects turned off. 65: * This makes pwqs aligned to 256 bytes and allows 15 workqueue 66: * flush colors. 67: */ 68: WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT + 69: WORK_STRUCT_COLOR_BITS, 70: 71: /* data contains off-queue information when !WORK_STRUCT_PWQ */ 72: WORK_OFFQ_FLAG_BASE = WORK_STRUCT_COLOR_SHIFT, 73: 74: WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE), 75: 76: /* 77: * When a work item is off queue, its high bits point to the last 78: * pool it was on. Cap at 31 bits and use the highest number to 79: * indicate that no pool is associated. 80: */ 81: WORK_OFFQ_FLAG_BITS = 1, 82: WORK_OFFQ_POOL_SHIFT = WORK_OFFQ_FLAG_BASE + WORK_OFFQ_FLAG_BITS, 83: WORK_OFFQ_LEFT = BITS_PER_LONG - WORK_OFFQ_POOL_SHIFT, 84: WORK_OFFQ_POOL_BITS = WORK_OFFQ_LEFT <= 31 ? WORK_OFFQ_LEFT : 31, 85: WORK_OFFQ_POOL_NONE = (1LU << WORK_OFFQ_POOL_BITS) - 1, 86: 87: /* convenience constants */ 88: WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1, 89: WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK, 90: WORK_STRUCT_NO_POOL = (unsigned long)WORK_OFFQ_POOL_NONE << WORK_OFFQ_POOL_SHIFT, 91: 92: /* bit mask for work_busy() return values */ 93: WORK_BUSY_PENDING = 1 << 0, 94: WORK_BUSY_RUNNING = 1 << 1, 95: 96: /* maximum string length for set_worker_desc() */ 97: WORKER_DESC_LEN = 24, 98: }; 99: 100: struct work_struct { 101: atomic_long_t data; 102: struct list_head entry; 103: work_func_t func; 104: #ifdef CONFIG_LOCKDEP 105: struct lockdep_map lockdep_map; 106: #endif 107: }; 108: 109: #define WORK_DATA_INIT() ATOMIC_LONG_INIT(WORK_STRUCT_NO_POOL) 110: #define WORK_DATA_STATIC_INIT() \ 111: ATOMIC_LONG_INIT(WORK_STRUCT_NO_POOL | WORK_STRUCT_STATIC) 112: 113: struct delayed_work { 114: struct work_struct work; 115: struct timer_list timer; 116: 117: /* target workqueue and CPU ->timer uses to queue ->work */ 118: struct workqueue_struct *wq; 119: int cpu; 120: }; 121: 122: /* 123: * A struct for workqueue attributes. This can be used to change 124: * attributes of an unbound workqueue. 125: * 126: * Unlike other fields, ->no_numa isn't a property of a worker_pool. It 127: * only modifies how apply_workqueue_attrs() select pools and thus doesn't 128: * participate in pool hash calculations or equality comparisons. 129: */ 130: struct workqueue_attrs { 131: int nice; /* nice level */ 132: cpumask_var_t cpumask; /* allowed CPUs */ 133: bool no_numa; /* disable NUMA affinity */ 134: }; 135: 136: static inline struct delayed_work *to_delayed_work(struct work_struct *work) 137: { 138: return container_of(work, struct delayed_work, work); 139: } 140: 141: struct execute_work { 142: struct work_struct work; 143: }; 144: 145: #ifdef CONFIG_LOCKDEP 146: /* 147: * NB: because we have to copy the lockdep_map, setting _key 148: * here is required, otherwise it could get initialised to the 149: * copy of the lockdep_map! 150: */ 151: #define __WORK_INIT_LOCKDEP_MAP(n, k) \ 152: .lockdep_map = STATIC_LOCKDEP_MAP_INIT(n, k), 153: #else 154: #define __WORK_INIT_LOCKDEP_MAP(n, k) 155: #endif 156: 157: #define __WORK_INITIALIZER(n, f) { \ 158: .data = WORK_DATA_STATIC_INIT(), \ 159: .entry = { &(n).entry, &(n).entry }, \ 160: .func = (f), \ 161: __WORK_INIT_LOCKDEP_MAP(#n, &(n)) \ 162: } 163: 164: #define __DELAYED_WORK_INITIALIZER(n, f, tflags) { \ 165: .work = __WORK_INITIALIZER((n).work, (f)), \ 166: .timer = __TIMER_INITIALIZER(delayed_work_timer_fn, \ 167: 0, (unsigned long)&(n), \ 168: (tflags) | TIMER_IRQSAFE), \ 169: } 170: 171: #define DECLARE_WORK(n, f) \ 172: struct work_struct n = __WORK_INITIALIZER(n, f) 173: 174: #define DECLARE_DELAYED_WORK(n, f) \ 175: struct delayed_work n = __DELAYED_WORK_INITIALIZER(n, f, 0) 176: 177: #define DECLARE_DEFERRABLE_WORK(n, f) \ 178: struct delayed_work n = __DELAYED_WORK_INITIALIZER(n, f, TIMER_DEFERRABLE) 179: 180: /* 181: * initialize a work item's function pointer 182: */ 183: #define PREPARE_WORK(_work, _func) \ 184: do { \ 185: (_work)->func = (_func); \ 186: } while (0) 187: 188: #define PREPARE_DELAYED_WORK(_work, _func) \ 189: PREPARE_WORK(&(_work)->work, (_func)) 190: 191: #ifdef CONFIG_DEBUG_OBJECTS_WORK 192: extern void __init_work(struct work_struct *work, int onstack); 193: extern void destroy_work_on_stack(struct work_struct *work); 194: static inline unsigned int work_static(struct work_struct *work) 195: { 196: return *work_data_bits(work) & WORK_STRUCT_STATIC; 197: } 198: #else 199: static inline void __init_work(struct work_struct *work, int onstack) { } 200: static inline void destroy_work_on_stack(struct work_struct *work) { } 201: static inline unsigned int work_static(struct work_struct *work) { return 0; } 202: #endif 203: 204: /* 205: * initialize all of a work item in one go 206: * 207: * NOTE! No point in using "atomic_long_set()": using a direct 208: * assignment of the work data initializer allows the compiler 209: * to generate better code. 210: */ 211: #ifdef CONFIG_LOCKDEP 212: #define __INIT_WORK(_work, _func, _onstack) \ 213: do { \ 214: static struct lock_class_key __key; \ 215: \ 216: __init_work((_work), _onstack); \ 217: (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \ 218: lockdep_init_map(&(_work)->lockdep_map, #_work, &__key, 0); \ 219: INIT_LIST_HEAD(&(_work)->entry); \ 220: PREPARE_WORK((_work), (_func)); \ 221: } while (0) 222: #else 223: #define __INIT_WORK(_work, _func, _onstack) \ 224: do { \ 225: __init_work((_work), _onstack); \ 226: (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \ 227: INIT_LIST_HEAD(&(_work)->entry); \ 228: PREPARE_WORK((_work), (_func)); \ 229: } while (0) 230: #endif 231: 232: #define INIT_WORK(_work, _func) \ 233: do { \ 234: __INIT_WORK((_work), (_func), 0); \ 235: } while (0) 236: 237: #define INIT_WORK_ONSTACK(_work, _func) \ 238: do { \ 239: __INIT_WORK((_work), (_func), 1); \ 240: } while (0) 241: 242: #define __INIT_DELAYED_WORK(_work, _func, _tflags) \ 243: do { \ 244: INIT_WORK(&(_work)->work, (_func)); \ 245: __setup_timer(&(_work)->timer, delayed_work_timer_fn, \ 246: (unsigned long)(_work), \ 247: (_tflags) | TIMER_IRQSAFE); \ 248: } while (0) 249: 250: #define __INIT_DELAYED_WORK_ONSTACK(_work, _func, _tflags) \ 251: do { \ 252: INIT_WORK_ONSTACK(&(_work)->work, (_func)); \ 253: __setup_timer_on_stack(&(_work)->timer, \ 254: delayed_work_timer_fn, \ 255: (unsigned long)(_work), \ 256: (_tflags) | TIMER_IRQSAFE); \ 257: } while (0) 258: 259: #define INIT_DELAYED_WORK(_work, _func) \ 260: __INIT_DELAYED_WORK(_work, _func, 0) 261: 262: #define INIT_DELAYED_WORK_ONSTACK(_work, _func) \ 263: __INIT_DELAYED_WORK_ONSTACK(_work, _func, 0) 264: 265: #define INIT_DEFERRABLE_WORK(_work, _func) \ 266: __INIT_DELAYED_WORK(_work, _func, TIMER_DEFERRABLE) 267: 268: #define INIT_DEFERRABLE_WORK_ONSTACK(_work, _func) \ 269: __INIT_DELAYED_WORK_ONSTACK(_work, _func, TIMER_DEFERRABLE) 270: 271: /** 272: * work_pending - Find out whether a work item is currently pending 273: * @work: The work item in question 274: */ 275: #define work_pending(work) \ 276: test_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)) 277: 278: /** 279: * delayed_work_pending - Find out whether a delayable work item is currently 280: * pending 281: * @work: The work item in question 282: */ 283: #define delayed_work_pending(w) \ 284: work_pending(&(w)->work) 285: 286: /** 287: * work_clear_pending - for internal use only, mark a work item as not pending 288: * @work: The work item in question 289: */ 290: #define work_clear_pending(work) \ 291: clear_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)) 292: 293: /* 294: * Workqueue flags and constants. For details, please refer to 295: * Documentation/workqueue.txt. 296: */ 297: enum { 298: /* 299: * All wqs are now non-reentrant making the following flag 300: * meaningless. Will be removed. 301: */ 302: WQ_NON_REENTRANT = 1 << 0, /* DEPRECATED */ 303: 304: WQ_UNBOUND = 1 << 1, /* not bound to any cpu */ 305: WQ_FREEZABLE = 1 << 2, /* freeze during suspend */ 306: WQ_MEM_RECLAIM = 1 << 3, /* may be used for memory reclaim */ 307: WQ_HIGHPRI = 1 << 4, /* high priority */ 308: WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */ 309: WQ_SYSFS = 1 << 6, /* visible in sysfs, see wq_sysfs_register() */ 310: 311: /* 312: * Per-cpu workqueues are generally preferred because they tend to 313: * show better performance thanks to cache locality. Per-cpu 314: * workqueues exclude the scheduler from choosing the CPU to 315: * execute the worker threads, which has an unfortunate side effect 316: * of increasing power consumption. 317: * 318: * The scheduler considers a CPU idle if it doesn't have any task 319: * to execute and tries to keep idle cores idle to conserve power; 320: * however, for example, a per-cpu work item scheduled from an 321: * interrupt handler on an idle CPU will force the scheduler to 322: * excute the work item on that CPU breaking the idleness, which in 323: * turn may lead to more scheduling choices which are sub-optimal 324: * in terms of power consumption. 325: * 326: * Workqueues marked with WQ_POWER_EFFICIENT are per-cpu by default 327: * but become unbound if workqueue.power_efficient kernel param is 328: * specified. Per-cpu workqueues which are identified to 329: * contribute significantly to power-consumption are identified and 330: * marked with this flag and enabling the power_efficient mode 331: * leads to noticeable power saving at the cost of small 332: * performance disadvantage. 333: * 334: * http://thread.gmane.org/gmane.linux.kernel/1480396 335: */ 336: WQ_POWER_EFFICIENT = 1 << 7, 337: 338: __WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */ 339: __WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */ 340: 341: WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */ 342: WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */ 343: WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2, 344: }; 345: 346: /* unbound wq's aren't per-cpu, scale max_active according to #cpus */ 347: #define WQ_UNBOUND_MAX_ACTIVE \ 348: max_t(int, WQ_MAX_ACTIVE, num_possible_cpus() * WQ_MAX_UNBOUND_PER_CPU) 349: 350: /* 351: * System-wide workqueues which are always present. 352: * 353: * system_wq is the one used by schedule[_delayed]_work[_on](). 354: * Multi-CPU multi-threaded. There are users which expect relatively 355: * short queue flush time. Don't queue works which can run for too 356: * long. 357: * 358: * system_long_wq is similar to system_wq but may host long running 359: * works. Queue flushing might take relatively long. 360: * 361: * system_unbound_wq is unbound workqueue. Workers are not bound to 362: * any specific CPU, not concurrency managed, and all queued works are 363: * executed immediately as long as max_active limit is not reached and 364: * resources are available. 365: * 366: * system_freezable_wq is equivalent to system_wq except that it's 367: * freezable. 368: * 369: * *_power_efficient_wq are inclined towards saving power and converted 370: * into WQ_UNBOUND variants if 'wq_power_efficient' is enabled; otherwise, 371: * they are same as their non-power-efficient counterparts - e.g. 372: * system_power_efficient_wq is identical to system_wq if 373: * 'wq_power_efficient' is disabled. See WQ_POWER_EFFICIENT for more info. 374: */ 375: extern struct workqueue_struct *system_wq; 376: extern struct workqueue_struct *system_long_wq; 377: extern struct workqueue_struct *system_unbound_wq; 378: extern struct workqueue_struct *system_freezable_wq; 379: extern struct workqueue_struct *system_power_efficient_wq; 380: extern struct workqueue_struct *system_freezable_power_efficient_wq; 381: 382: static inline struct workqueue_struct * __deprecated __system_nrt_wq(void) 383: { 384: return system_wq; 385: } 386: 387: static inline struct workqueue_struct * __deprecated __system_nrt_freezable_wq(void) 388: { 389: return system_freezable_wq; 390: } 391: 392: /* equivlalent to system_wq and system_freezable_wq, deprecated */ 393: #define system_nrt_wq __system_nrt_wq() 394: #define system_nrt_freezable_wq __system_nrt_freezable_wq() 395: 396: extern struct workqueue_struct * 397: __alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active, 398: struct lock_class_key *key, const char *lock_name, ...) __printf(1, 6); 399: 400: /** 401: * alloc_workqueue - allocate a workqueue 402: * @fmt: printf format for the name of the workqueue 403: * @flags: WQ_* flags 404: * @max_active: max in-flight work items, 0 for default 405: * @args: args for @fmt 406: * 407: * Allocate a workqueue with the specified parameters. For detailed 408: * information on WQ_* flags, please refer to Documentation/workqueue.txt. 409: * 410: * The __lock_name macro dance is to guarantee that single lock_class_key 411: * doesn't end up with different namesm, which isn't allowed by lockdep. 412: * 413: * RETURNS: 414: * Pointer to the allocated workqueue on success, %NULL on failure. 415: */ 416: #ifdef CONFIG_LOCKDEP 417: #define alloc_workqueue(fmt, flags, max_active, args...) \ 418: ({ \ 419: static struct lock_class_key __key; \ 420: const char *__lock_name; \ 421: \ 422: if (__builtin_constant_p(fmt)) \ 423: __lock_name = (fmt); \ 424: else \ 425: __lock_name = #fmt; \ 426: \ 427: __alloc_workqueue_key((fmt), (flags), (max_active), \ 428: &__key, __lock_name, ##args); \ 429: }) 430: #else 431: #define alloc_workqueue(fmt, flags, max_active, args...) \ 432: __alloc_workqueue_key((fmt), (flags), (max_active), \ 433: NULL, NULL, ##args) 434: #endif 435: 436: /** 437: * alloc_ordered_workqueue - allocate an ordered workqueue 438: * @fmt: printf format for the name of the workqueue 439: * @flags: WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful) 440: * @args: args for @fmt 441: * 442: * Allocate an ordered workqueue. An ordered workqueue executes at 443: * most one work item at any given time in the queued order. They are 444: * implemented as unbound workqueues with @max_active of one. 445: * 446: * RETURNS: 447: * Pointer to the allocated workqueue on success, %NULL on failure. 448: */ 449: #define alloc_ordered_workqueue(fmt, flags, args...) \ 450: alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | (flags), 1, ##args) 451: 452: #define create_workqueue(name) \ 453: alloc_workqueue("%s", WQ_MEM_RECLAIM, 1, (name)) 454: #define create_freezable_workqueue(name) \ 455: alloc_workqueue("%s", WQ_FREEZABLE | WQ_UNBOUND | WQ_MEM_RECLAIM, \ 456: 1, (name)) 457: #define create_singlethread_workqueue(name) \ 458: alloc_workqueue("%s", WQ_UNBOUND | WQ_MEM_RECLAIM, 1, (name)) 459: 460: extern void destroy_workqueue(struct workqueue_struct *wq); 461: 462: struct workqueue_attrs *alloc_workqueue_attrs(gfp_t gfp_mask); 463: void free_workqueue_attrs(struct workqueue_attrs *attrs); 464: int apply_workqueue_attrs(struct workqueue_struct *wq, 465: const struct workqueue_attrs *attrs); 466: 467: extern bool queue_work_on(int cpu, struct workqueue_struct *wq, 468: struct work_struct *work); 469: extern bool queue_delayed_work_on(int cpu, struct workqueue_struct *wq, 470: struct delayed_work *work, unsigned long delay); 471: extern bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq, 472: struct delayed_work *dwork, unsigned long delay); 473: 474: extern void flush_workqueue(struct workqueue_struct *wq); 475: extern void drain_workqueue(struct workqueue_struct *wq); 476: extern void flush_scheduled_work(void); 477: 478: extern int schedule_on_each_cpu(work_func_t func); 479: 480: int execute_in_process_context(work_func_t fn, struct execute_work *); 481: 482: extern bool flush_work(struct work_struct *work); 483: extern bool cancel_work_sync(struct work_struct *work); 484: 485: extern bool flush_delayed_work(struct delayed_work *dwork); 486: extern bool cancel_delayed_work(struct delayed_work *dwork); 487: extern bool cancel_delayed_work_sync(struct delayed_work *dwork); 488: 489: extern void workqueue_set_max_active(struct workqueue_struct *wq, 490: int max_active); 491: extern bool current_is_workqueue_rescuer(void); 492: extern bool workqueue_congested(int cpu, struct workqueue_struct *wq); 493: extern unsigned int work_busy(struct work_struct *work); 494: extern __printf(1, 2) void set_worker_desc(const char *fmt, ...); 495: extern void print_worker_info(const char *log_lvl, struct task_struct *task); 496: 497: /** 498: * queue_work - queue work on a workqueue 499: * @wq: workqueue to use 500: * @work: work to queue 501: * 502: * Returns %false if @work was already on a queue, %true otherwise. 503: * 504: * We queue the work to the CPU on which it was submitted, but if the CPU dies 505: * it can be processed by another CPU. 506: */ 507: static inline bool queue_work(struct workqueue_struct *wq, 508: struct work_struct *work) 509: { 510: return queue_work_on(WORK_CPU_UNBOUND, wq, work); 511: } 512: 513: /** 514: * queue_delayed_work - queue work on a workqueue after delay 515: * @wq: workqueue to use 516: * @dwork: delayable work to queue 517: * @delay: number of jiffies to wait before queueing 518: * 519: * Equivalent to queue_delayed_work_on() but tries to use the local CPU. 520: */ 521: static inline bool queue_delayed_work(struct workqueue_struct *wq, 522: struct delayed_work *dwork, 523: unsigned long delay) 524: { 525: return queue_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay); 526: } 527: 528: /** 529: * mod_delayed_work - modify delay of or queue a delayed work 530: * @wq: workqueue to use 531: * @dwork: work to queue 532: * @delay: number of jiffies to wait before queueing 533: * 534: * mod_delayed_work_on() on local CPU. 535: */ 536: static inline bool mod_delayed_work(struct workqueue_struct *wq, 537: struct delayed_work *dwork, 538: unsigned long delay) 539: { 540: return mod_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay); 541: } 542: 543: /** 544: * schedule_work_on - put work task on a specific cpu 545: * @cpu: cpu to put the work task on 546: * @work: job to be done 547: * 548: * This puts a job on a specific cpu 549: */ 550: static inline bool schedule_work_on(int cpu, struct work_struct *work) 551: { 552: return queue_work_on(cpu, system_wq, work); 553: } 554: 555: /** 556: * schedule_work - put work task in global workqueue 557: * @work: job to be done 558: * 559: * Returns %false if @work was already on the kernel-global workqueue and 560: * %true otherwise. 561: * 562: * This puts a job in the kernel-global workqueue if it was not already 563: * queued and leaves it in the same position on the kernel-global 564: * workqueue otherwise. 565: */ 566: static inline bool schedule_work(struct work_struct *work) 567: { 568: return queue_work(system_wq, work); 569: } 570: 571: /** 572: * schedule_delayed_work_on - queue work in global workqueue on CPU after delay 573: * @cpu: cpu to use 574: * @dwork: job to be done 575: * @delay: number of jiffies to wait 576: * 577: * After waiting for a given time this puts a job in the kernel-global 578: * workqueue on the specified CPU. 579: */ 580: static inline bool schedule_delayed_work_on(int cpu, struct delayed_work *dwork, 581: unsigned long delay) 582: { 583: return queue_delayed_work_on(cpu, system_wq, dwork, delay); 584: } 585: 586: /** 587: * schedule_delayed_work - put work task in global workqueue after delay 588: * @dwork: job to be done 589: * @delay: number of jiffies to wait or 0 for immediate execution 590: * 591: * After waiting for a given time this puts a job in the kernel-global 592: * workqueue. 593: */ 594: static inline bool schedule_delayed_work(struct delayed_work *dwork, 595: unsigned long delay) 596: { 597: return queue_delayed_work(system_wq, dwork, delay); 598: } 599: 600: /** 601: * keventd_up - is workqueue initialized yet? 602: */ 603: static inline bool keventd_up(void) 604: { 605: return system_wq != NULL; 606: } 607: 608: /* 609: * Like above, but uses del_timer() instead of del_timer_sync(). This means, 610: * if it returns 0 the timer function may be running and the queueing is in 611: * progress. 612: */ 613: static inline bool __deprecated __cancel_delayed_work(struct delayed_work *work) 614: { 615: bool ret; 616: 617: ret = del_timer(&work->timer); 618: if (ret) 619: work_clear_pending(&work->work); 620: return ret; 621: } 622: 623: /* used to be different but now identical to flush_work(), deprecated */ 624: static inline bool __deprecated flush_work_sync(struct work_struct *work) 625: { 626: return flush_work(work); 627: } 628: 629: /* used to be different but now identical to flush_delayed_work(), deprecated */ 630: static inline bool __deprecated flush_delayed_work_sync(struct delayed_work *dwork) 631: { 632: return flush_delayed_work(dwork); 633: } 634: 635: #ifndef CONFIG_SMP 636: static inline long work_on_cpu(int cpu, long (*fn)(void *), void *arg) 637: { 638: return fn(arg); 639: } 640: #else 641: long work_on_cpu(int cpu, long (*fn)(void *), void *arg); 642: #endif /* CONFIG_SMP */ 643: 644: #ifdef CONFIG_FREEZER 645: extern void freeze_workqueues_begin(void); 646: extern bool freeze_workqueues_busy(void); 647: extern void thaw_workqueues(void); 648: #endif /* CONFIG_FREEZER */ 649: 650: #ifdef CONFIG_SYSFS 651: int workqueue_sysfs_register(struct workqueue_struct *wq); 652: #else /* CONFIG_SYSFS */ 653: static inline int workqueue_sysfs_register(struct workqueue_struct *wq) 654: { return 0; } 655: #endif /* CONFIG_SYSFS */ 656: 657: #endif 658: