diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2013-03-05 08:25:32 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2013-03-07 10:13:26 -0500 |
| commit | b352bc1cbc29134a356b5c16ee2281807a7b984e (patch) | |
| tree | e68ff362a8c1bae0510d864551ba81f4f1136cc0 /kernel | |
| parent | ad2b13536ace08dfcca4cf86b75a5d06efe06373 (diff) | |
tick: Convert broadcast cpu bitmaps to cpumask_var_t
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20130306111537.366394000@linutronix.de
Cc: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/time/tick-broadcast.c | 86 | ||||
| -rw-r--r-- | kernel/time/tick-common.c | 1 | ||||
| -rw-r--r-- | kernel/time/tick-internal.h | 3 |
3 files changed, 46 insertions, 44 deletions
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index 2fb8cb88df8d..35b887517766 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
| @@ -28,9 +28,8 @@ | |||
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | static struct tick_device tick_broadcast_device; | 30 | static struct tick_device tick_broadcast_device; |
| 31 | /* FIXME: Use cpumask_var_t. */ | 31 | static cpumask_var_t tick_broadcast_mask; |
| 32 | static DECLARE_BITMAP(tick_broadcast_mask, NR_CPUS); | 32 | static cpumask_var_t tmpmask; |
| 33 | static DECLARE_BITMAP(tmpmask, NR_CPUS); | ||
| 34 | static DEFINE_RAW_SPINLOCK(tick_broadcast_lock); | 33 | static DEFINE_RAW_SPINLOCK(tick_broadcast_lock); |
| 35 | static int tick_broadcast_force; | 34 | static int tick_broadcast_force; |
| 36 | 35 | ||
| @@ -50,7 +49,7 @@ struct tick_device *tick_get_broadcast_device(void) | |||
| 50 | 49 | ||
| 51 | struct cpumask *tick_get_broadcast_mask(void) | 50 | struct cpumask *tick_get_broadcast_mask(void) |
| 52 | { | 51 | { |
| 53 | return to_cpumask(tick_broadcast_mask); | 52 | return tick_broadcast_mask; |
| 54 | } | 53 | } |
| 55 | 54 | ||
| 56 | /* | 55 | /* |
| @@ -74,7 +73,7 @@ int tick_check_broadcast_device(struct clock_event_device *dev) | |||
| 74 | 73 | ||
| 75 | clockevents_exchange_device(tick_broadcast_device.evtdev, dev); | 74 | clockevents_exchange_device(tick_broadcast_device.evtdev, dev); |
| 76 | tick_broadcast_device.evtdev = dev; | 75 | tick_broadcast_device.evtdev = dev; |
| 77 | if (!cpumask_empty(tick_get_broadcast_mask())) | 76 | if (!cpumask_empty(tick_broadcast_mask)) |
| 78 | tick_broadcast_start_periodic(dev); | 77 | tick_broadcast_start_periodic(dev); |
| 79 | return 1; | 78 | return 1; |
| 80 | } | 79 | } |
| @@ -123,7 +122,7 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu) | |||
| 123 | if (!tick_device_is_functional(dev)) { | 122 | if (!tick_device_is_functional(dev)) { |
| 124 | dev->event_handler = tick_handle_periodic; | 123 | dev->event_handler = tick_handle_periodic; |
| 125 | tick_device_setup_broadcast_func(dev); | 124 | tick_device_setup_broadcast_func(dev); |
| 126 | cpumask_set_cpu(cpu, tick_get_broadcast_mask()); | 125 | cpumask_set_cpu(cpu, tick_broadcast_mask); |
| 127 | tick_broadcast_start_periodic(tick_broadcast_device.evtdev); | 126 | tick_broadcast_start_periodic(tick_broadcast_device.evtdev); |
| 128 | ret = 1; | 127 | ret = 1; |
| 129 | } else { | 128 | } else { |
| @@ -134,7 +133,7 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu) | |||
| 134 | */ | 133 | */ |
| 135 | if (!(dev->features & CLOCK_EVT_FEAT_C3STOP)) { | 134 | if (!(dev->features & CLOCK_EVT_FEAT_C3STOP)) { |
| 136 | int cpu = smp_processor_id(); | 135 | int cpu = smp_processor_id(); |
| 137 | cpumask_clear_cpu(cpu, tick_get_broadcast_mask()); | 136 | cpumask_clear_cpu(cpu, tick_broadcast_mask); |
| 138 | tick_broadcast_clear_oneshot(cpu); | 137 | tick_broadcast_clear_oneshot(cpu); |
| 139 | } else { | 138 | } else { |
| 140 | tick_device_setup_broadcast_func(dev); | 139 | tick_device_setup_broadcast_func(dev); |
| @@ -198,9 +197,8 @@ static void tick_do_periodic_broadcast(void) | |||
| 198 | { | 197 | { |
| 199 | raw_spin_lock(&tick_broadcast_lock); | 198 | raw_spin_lock(&tick_broadcast_lock); |
| 200 | 199 | ||
| 201 | cpumask_and(to_cpumask(tmpmask), | 200 | cpumask_and(tmpmask, cpu_online_mask, tick_broadcast_mask); |
| 202 | cpu_online_mask, tick_get_broadcast_mask()); | 201 | tick_do_broadcast(tmpmask); |
| 203 | tick_do_broadcast(to_cpumask(tmpmask)); | ||
| 204 | 202 | ||
| 205 | raw_spin_unlock(&tick_broadcast_lock); | 203 | raw_spin_unlock(&tick_broadcast_lock); |
| 206 | } | 204 | } |
| @@ -263,13 +261,12 @@ static void tick_do_broadcast_on_off(unsigned long *reason) | |||
| 263 | if (!tick_device_is_functional(dev)) | 261 | if (!tick_device_is_functional(dev)) |
| 264 | goto out; | 262 | goto out; |
| 265 | 263 | ||
| 266 | bc_stopped = cpumask_empty(tick_get_broadcast_mask()); | 264 | bc_stopped = cpumask_empty(tick_broadcast_mask); |
| 267 | 265 | ||
| 268 | switch (*reason) { | 266 | switch (*reason) { |
| 269 | case CLOCK_EVT_NOTIFY_BROADCAST_ON: | 267 | case CLOCK_EVT_NOTIFY_BROADCAST_ON: |
| 270 | case CLOCK_EVT_NOTIFY_BROADCAST_FORCE: | 268 | case CLOCK_EVT_NOTIFY_BROADCAST_FORCE: |
| 271 | if (!cpumask_test_cpu(cpu, tick_get_broadcast_mask())) { | 269 | if (!cpumask_test_and_set_cpu(cpu, tick_broadcast_mask)) { |
| 272 | cpumask_set_cpu(cpu, tick_get_broadcast_mask()); | ||
| 273 | if (tick_broadcast_device.mode == | 270 | if (tick_broadcast_device.mode == |
| 274 | TICKDEV_MODE_PERIODIC) | 271 | TICKDEV_MODE_PERIODIC) |
| 275 | clockevents_shutdown(dev); | 272 | clockevents_shutdown(dev); |
| @@ -279,8 +276,7 @@ static void tick_do_broadcast_on_off(unsigned long *reason) | |||
| 279 | break; | 276 | break; |
| 280 | case CLOCK_EVT_NOTIFY_BROADCAST_OFF: | 277 | case CLOCK_EVT_NOTIFY_BROADCAST_OFF: |
| 281 | if (!tick_broadcast_force && | 278 | if (!tick_broadcast_force && |
| 282 | cpumask_test_cpu(cpu, tick_get_broadcast_mask())) { | 279 | cpumask_test_and_clear_cpu(cpu, tick_broadcast_mask)) { |
| 283 | cpumask_clear_cpu(cpu, tick_get_broadcast_mask()); | ||
| 284 | if (tick_broadcast_device.mode == | 280 | if (tick_broadcast_device.mode == |
| 285 | TICKDEV_MODE_PERIODIC) | 281 | TICKDEV_MODE_PERIODIC) |
| 286 | tick_setup_periodic(dev, 0); | 282 | tick_setup_periodic(dev, 0); |
| @@ -288,7 +284,7 @@ static void tick_do_broadcast_on_off(unsigned long *reason) | |||
| 288 | break; | 284 | break; |
| 289 | } | 285 | } |
| 290 | 286 | ||
| 291 | if (cpumask_empty(tick_get_broadcast_mask())) { | 287 | if (cpumask_empty(tick_broadcast_mask)) { |
| 292 | if (!bc_stopped) | 288 | if (!bc_stopped) |
| 293 | clockevents_shutdown(bc); | 289 | clockevents_shutdown(bc); |
| 294 | } else if (bc_stopped) { | 290 | } else if (bc_stopped) { |
| @@ -337,10 +333,10 @@ void tick_shutdown_broadcast(unsigned int *cpup) | |||
| 337 | raw_spin_lock_irqsave(&tick_broadcast_lock, flags); | 333 | raw_spin_lock_irqsave(&tick_broadcast_lock, flags); |
| 338 | 334 | ||
| 339 | bc = tick_broadcast_device.evtdev; | 335 | bc = tick_broadcast_device.evtdev; |
| 340 | cpumask_clear_cpu(cpu, tick_get_broadcast_mask()); | 336 | cpumask_clear_cpu(cpu, tick_broadcast_mask); |
| 341 | 337 | ||
| 342 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) { | 338 | if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) { |
| 343 | if (bc && cpumask_empty(tick_get_broadcast_mask())) | 339 | if (bc && cpumask_empty(tick_broadcast_mask)) |
| 344 | clockevents_shutdown(bc); | 340 | clockevents_shutdown(bc); |
| 345 | } | 341 | } |
| 346 | 342 | ||
| @@ -376,13 +372,13 @@ int tick_resume_broadcast(void) | |||
| 376 | 372 | ||
| 377 | switch (tick_broadcast_device.mode) { | 373 | switch (tick_broadcast_device.mode) { |
| 378 | case TICKDEV_MODE_PERIODIC: | 374 | case TICKDEV_MODE_PERIODIC: |
| 379 | if (!cpumask_empty(tick_get_broadcast_mask())) | 375 | if (!cpumask_empty(tick_broadcast_mask)) |
| 380 | tick_broadcast_start_periodic(bc); | 376 | tick_broadcast_start_periodic(bc); |
| 381 | broadcast = cpumask_test_cpu(smp_processor_id(), | 377 | broadcast = cpumask_test_cpu(smp_processor_id(), |
| 382 | tick_get_broadcast_mask()); | 378 | tick_broadcast_mask); |
| 383 | break; | 379 | break; |
| 384 | case TICKDEV_MODE_ONESHOT: | 380 | case TICKDEV_MODE_ONESHOT: |
| 385 | if (!cpumask_empty(tick_get_broadcast_mask())) | 381 | if (!cpumask_empty(tick_broadcast_mask)) |
| 386 | broadcast = tick_resume_broadcast_oneshot(bc); | 382 | broadcast = tick_resume_broadcast_oneshot(bc); |
| 387 | break; | 383 | break; |
| 388 | } | 384 | } |
| @@ -395,15 +391,14 @@ int tick_resume_broadcast(void) | |||
| 395 | 391 | ||
| 396 | #ifdef CONFIG_TICK_ONESHOT | 392 | #ifdef CONFIG_TICK_ONESHOT |
| 397 | 393 | ||
| 398 | /* FIXME: use cpumask_var_t. */ | 394 | static cpumask_var_t tick_broadcast_oneshot_mask; |
| 399 | static DECLARE_BITMAP(tick_broadcast_oneshot_mask, NR_CPUS); | ||
| 400 | 395 | ||
| 401 | /* | 396 | /* |
| 402 | * Exposed for debugging: see timer_list.c | 397 | * Exposed for debugging: see timer_list.c |
| 403 | */ | 398 | */ |
| 404 | struct cpumask *tick_get_broadcast_oneshot_mask(void) | 399 | struct cpumask *tick_get_broadcast_oneshot_mask(void) |
| 405 | { | 400 | { |
| 406 | return to_cpumask(tick_broadcast_oneshot_mask); | 401 | return tick_broadcast_oneshot_mask; |
| 407 | } | 402 | } |
| 408 | 403 | ||
| 409 | static int tick_broadcast_set_event(ktime_t expires, int force) | 404 | static int tick_broadcast_set_event(ktime_t expires, int force) |
| @@ -428,7 +423,7 @@ int tick_resume_broadcast_oneshot(struct clock_event_device *bc) | |||
| 428 | */ | 423 | */ |
| 429 | void tick_check_oneshot_broadcast(int cpu) | 424 | void tick_check_oneshot_broadcast(int cpu) |
| 430 | { | 425 | { |
| 431 | if (cpumask_test_cpu(cpu, to_cpumask(tick_broadcast_oneshot_mask))) { | ||
