diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-06-17 07:06:17 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-06-17 07:06:17 -0400 |
| commit | a3d06cc6aa3e765dc2bf98626f87272dcf641dca (patch) | |
| tree | aa3e49b58f08d6c0ea55cdca4fb5e6c8ba6ae333 /kernel/slow-work.c | |
| parent | 0990b1c65729012a63e0eeca93aaaafea4e9a064 (diff) | |
| parent | 65795efbd380a832ae508b04dba8f8e53f0b84d9 (diff) | |
Merge branch 'linus' into perfcounters/core
Conflicts:
arch/x86/include/asm/kmap_types.h
include/linux/mm.h
include/asm-generic/kmap_types.h
Merge reason: We crossed changes with kmap_types.h cleanups in mainline.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/slow-work.c')
| -rw-r--r-- | kernel/slow-work.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/kernel/slow-work.c b/kernel/slow-work.c index 521ed2004d63..09d7519557d3 100644 --- a/kernel/slow-work.c +++ b/kernel/slow-work.c | |||
| @@ -319,6 +319,15 @@ cant_get_ref: | |||
| 319 | EXPORT_SYMBOL(slow_work_enqueue); | 319 | EXPORT_SYMBOL(slow_work_enqueue); |
| 320 | 320 | ||
| 321 | /* | 321 | /* |
| 322 | * Schedule a cull of the thread pool at some time in the near future | ||
| 323 | */ | ||
| 324 | static void slow_work_schedule_cull(void) | ||
| 325 | { | ||
| 326 | mod_timer(&slow_work_cull_timer, | ||
| 327 | round_jiffies(jiffies + SLOW_WORK_CULL_TIMEOUT)); | ||
| 328 | } | ||
| 329 | |||
| 330 | /* | ||
| 322 | * Worker thread culling algorithm | 331 | * Worker thread culling algorithm |
| 323 | */ | 332 | */ |
| 324 | static bool slow_work_cull_thread(void) | 333 | static bool slow_work_cull_thread(void) |
| @@ -335,8 +344,7 @@ static bool slow_work_cull_thread(void) | |||
| 335 | list_empty(&vslow_work_queue) && | 344 | list_empty(&vslow_work_queue) && |
| 336 | atomic_read(&slow_work_thread_count) > | 345 | atomic_read(&slow_work_thread_count) > |
| 337 | slow_work_min_threads) { | 346 | slow_work_min_threads) { |
| 338 | mod_timer(&slow_work_cull_timer, | 347 | slow_work_schedule_cull(); |
| 339 | jiffies + SLOW_WORK_CULL_TIMEOUT); | ||
| 340 | do_cull = true; | 348 | do_cull = true; |
| 341 | } | 349 | } |
| 342 | } | 350 | } |
| @@ -393,8 +401,7 @@ static int slow_work_thread(void *_data) | |||
| 393 | list_empty(&vslow_work_queue) && | 401 | list_empty(&vslow_work_queue) && |
| 394 | atomic_read(&slow_work_thread_count) > | 402 | atomic_read(&slow_work_thread_count) > |
| 395 | slow_work_min_threads) | 403 | slow_work_min_threads) |
| 396 | mod_timer(&slow_work_cull_timer, | 404 | slow_work_schedule_cull(); |
| 397 | jiffies + SLOW_WORK_CULL_TIMEOUT); | ||
| 398 | continue; | 405 | continue; |
| 399 | } | 406 | } |
| 400 | 407 | ||
| @@ -458,7 +465,7 @@ static void slow_work_new_thread_execute(struct slow_work *work) | |||
| 458 | if (atomic_dec_and_test(&slow_work_thread_count)) | 465 | if (atomic_dec_and_test(&slow_work_thread_count)) |
| 459 | BUG(); /* we're running on a slow work thread... */ | 466 | BUG(); /* we're running on a slow work thread... */ |
| 460 | mod_timer(&slow_work_oom_timer, | 467 | mod_timer(&slow_work_oom_timer, |
| 461 | jiffies + SLOW_WORK_OOM_TIMEOUT); | 468 | round_jiffies(jiffies + SLOW_WORK_OOM_TIMEOUT)); |
| 462 | } else { | 469 | } else { |
| 463 | /* ratelimit the starting of new threads */ | 470 | /* ratelimit the starting of new threads */ |
| 464 | mod_timer(&slow_work_oom_timer, jiffies + 1); | 471 | mod_timer(&slow_work_oom_timer, jiffies + 1); |
| @@ -502,8 +509,7 @@ static int slow_work_min_threads_sysctl(struct ctl_table *table, int write, | |||
| 502 | if (n < 0 && !slow_work_may_not_start_new_thread) | 509 | if (n < 0 && !slow_work_may_not_start_new_thread) |
| 503 | slow_work_enqueue(&slow_work_new_thread); | 510 | slow_work_enqueue(&slow_work_new_thread); |
| 504 | else if (n > 0) | 511 | else if (n > 0) |
| 505 | mod_timer(&slow_work_cull_timer, | 512 | slow_work_schedule_cull(); |
| 506 | jiffies + SLOW_WORK_CULL_TIMEOUT); | ||
| 507 | } | 513 | } |
| 508 | mutex_unlock(&slow_work_user_lock); | 514 | mutex_unlock(&slow_work_user_lock); |
| 509 | } | 515 | } |
| @@ -529,8 +535,7 @@ static int slow_work_max_threads_sysctl(struct ctl_table *table, int write, | |||
| 529 | atomic_read(&slow_work_thread_count); | 535 | atomic_read(&slow_work_thread_count); |
| 530 | 536 | ||
| 531 | if (n < 0) | 537 | if (n < 0) |
| 532 | mod_timer(&slow_work_cull_timer, | 538 | slow_work_schedule_cull(); |
| 533 | jiffies + SLOW_WORK_CULL_TIMEOUT); | ||
| 534 | } | 539 | } |
| 535 | mutex_unlock(&slow_work_user_lock); | 540 | mutex_unlock(&slow_work_user_lock); |
| 536 | } | 541 | } |
