1 /* 2 * cpuidle.c - core cpuidle infrastructure 3 * 4 * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> 5 * Shaohua Li <shaohua.li@intel.com> 6 * Adam Belay <abelay@novell.com> 7 * 8 * This code is licenced under the GPL. 9 */ 10 11 #include <linux/clockchips.h> 12 #include <linux/kernel.h> 13 #include <linux/mutex.h> 14 #include <linux/sched.h> 15 #include <linux/notifier.h> 16 #include <linux/pm_qos.h> 17 #include <linux/cpu.h> 18 #include <linux/cpuidle.h> 19 #include <linux/ktime.h> 20 #include <linux/hrtimer.h> 21 #include <linux/module.h> 22 #include <trace/events/power.h> 23 24 #include "cpuidle.h" 25 26 DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); 27 DEFINE_PER_CPU(struct cpuidle_device, cpuidle_dev); 28 29 DEFINE_MUTEX(cpuidle_lock); 30 LIST_HEAD(cpuidle_detected_devices); 31 32 static int enabled_devices; 33 static int off __read_mostly; 34 static int initialized __read_mostly; 35 36 int cpuidle_disabled(void) 37 { 38 return off; 39 } 40 void disable_cpuidle(void) 41 { 42 off = 1; 43 } 44 45 static int __cpuidle_register_device(struct cpuidle_device *dev); 46 47 /** 48 * cpuidle_play_dead - cpu off-lining 49 * 50 * Returns in case of an error or no driver 51 */ 52 int cpuidle_play_dead(void) 53 { 54 struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices); 55 struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); 56 int i; 57 58 if (!drv) 59 return -ENODEV; 60 61 /* Find lowest-power state that supports long-term idle */ 62 for (i = drv->state_count - 1; i >= CPUIDLE_DRIVER_STATE_START; i--) 63 if (drv->states[i].enter_dead) 64 return drv->states[i].enter_dead(dev, i); 65 66 return -ENODEV; 67 } 68 69 /** 70 * cpuidle_enter_state - enter the state and update stats 71 * @dev: cpuidle device for this cpu 72 * @drv: cpuidle driver for this cpu 73 * @next_state: index into drv->states of the state to enter 74 */ 75 int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv, 76 int index) 77 { 78 int entered_state; 79 80 struct cpuidle_state *target_state = &drv->states[index]; 81 ktime_t time_start, time_end; 82 s64 diff; 83 84 time_start = ktime_get(); 85 86 entered_state = target_state->enter(dev, drv, index); 87 88 time_end = ktime_get(); 89 90 local_irq_enable(); 91 92 diff = ktime_to_us(ktime_sub(time_end, time_start)); 93 if (diff > INT_MAX) 94 diff = INT_MAX; 95 96 dev->last_residency = (int) diff; 97 98 if (entered_state >= 0) { 99 /* Update cpuidle counters */ 100 /* This can be moved to within driver enter routine 101 * but that results in multiple copies of same code. 102 */ 103 dev->states_usage[entered_state].time += dev->last_residency; 104 dev->states_usage[entered_state].usage++; 105 } else { 106 dev->last_residency = 0; 107 } 108 109 return entered_state; 110 } 111 112 /** 113 * cpuidle_idle_call - the main idle loop 114 * 115 * NOTE: no locks or semaphores should be used here 116 * return non-zero on failure 117 */ 118 int cpuidle_idle_call(void) 119 { 120 struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices); 121 struct cpuidle_driver *drv; 122 int next_state, entered_state; 123 124 if (off) 125 return -ENODEV; 126 127 if (!initialized) 128 return -ENODEV; 129 130 /* check if the device is ready */ 131 if (!dev || !dev->enabled) 132 return -EBUSY; 133 134 drv = cpuidle_get_cpu_driver(dev); 135 136 /* ask the governor for the next state */ 137 next_state = cpuidle_curr_governor->select(drv, dev); 138 if (need_resched()) { 139 dev->last_residency = 0; 140 /* give the governor an opportunity to reflect on the outcome */ 141 if (cpuidle_curr_governor->reflect) 142 cpuidle_curr_governor->reflect(dev, next_state); 143 local_irq_enable(); 144 return 0; 145 } 146 147 trace_cpu_idle_rcuidle(next_state, dev->cpu); 148 149 if (drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP) 150 clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, 151 &dev->cpu); 152 153 if (cpuidle_state_is_coupled(dev, drv, next_state)) 154 entered_state = cpuidle_enter_state_coupled(dev, drv, 155 next_state); 156 else 157 entered_state = cpuidle_enter_state(dev, drv, next_state); 158 159 if (drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP) 160 clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, 161 &dev->cpu); 162 163 trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu); 164 165 /* give the governor an opportunity to reflect on the outcome */ 166 if (cpuidle_curr_governor->reflect) 167 cpuidle_curr_governor->reflect(dev, entered_state); 168 169 return 0; 170 } 171 172 /** 173 * cpuidle_install_idle_handler - installs the cpuidle idle loop handler 174 */ 175 void cpuidle_install_idle_handler(void) 176 { 177 if (enabled_devices) { 178 /* Make sure all changes finished before we switch to new idle */ 179 smp_wmb(); 180 initialized = 1; 181 } 182 } 183 184 /** 185 * cpuidle_uninstall_idle_handler - uninstalls the cpuidle idle loop handler 186 */ 187 void cpuidle_uninstall_idle_handler(void) 188 { 189 if (enabled_devices) { 190 initialized = 0; 191 kick_all_cpus_sync(); 192 } 193 } 194 195 /** 196 * cpuidle_pause_and_lock - temporarily disables CPUIDLE 197 */ 198 void cpuidle_pause_and_lock(void) 199 { 200 mutex_lock(&cpuidle_lock); 201 cpuidle_uninstall_idle_handler(); 202 } 203 204 EXPORT_SYMBOL_GPL(cpuidle_pause_and_lock); 205 206 /** 207 * cpuidle_resume_and_unlock - resumes CPUIDLE operation 208 */ 209 void cpuidle_resume_and_unlock(void) 210 { 211 cpuidle_install_idle_handler(); 212 mutex_unlock(&cpuidle_lock); 213 } 214 215 EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); 216 217 /* Currently used in suspend/resume path to suspend cpuidle */ 218 void cpuidle_pause(void) 219 { 220 mutex_lock(&cpuidle_lock); 221 cpuidle_uninstall_idle_handler(); 222 mutex_unlock(&cpuidle_lock); 223 } 224 225 /* Currently used in suspend/resume path to resume cpuidle */ 226 void cpuidle_resume(void) 227 { 228 mutex_lock(&cpuidle_lock); 229 cpuidle_install_idle_handler(); 230 mutex_unlock(&cpuidle_lock); 231 } 232 233 #ifdef CONFIG_ARCH_HAS_CPU_RELAX 234 static int poll_idle(struct cpuidle_device *dev, 235 struct cpuidle_driver *drv, int index) 236 { 237 ktime_t t1, t2; 238 s64 diff; 239 240 t1 = ktime_get(); 241 local_irq_enable(); 242 while (!need_resched()) 243 cpu_relax(); 244 245 t2 = ktime_get(); 246 diff = ktime_to_us(ktime_sub(t2, t1)); 247 if (diff > INT_MAX) 248 diff = INT_MAX; 249 250 dev->last_residency = (int) diff; 251 252 return index; 253 } 254 255 static void poll_idle_init(struct cpuidle_driver *drv) 256 { 257 struct cpuidle_state *state = &drv->states[0]; 258 259 snprintf(state->name, CPUIDLE_NAME_LEN, "POLL"); 260 snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE"); 261 state->exit_latency = 0; 262 state->target_residency = 0; 263 state->power_usage = -1; 264 state->flags = 0; 265 state->enter = poll_idle; 266 state->disabled = false; 267 } 268 #else 269 static void poll_idle_init(struct cpuidle_driver *drv) {} 270 #endif /* CONFIG_ARCH_HAS_CPU_RELAX */ 271 272 /** 273 * cpuidle_enable_device - enables idle PM for a CPU 274 * @dev: the CPU 275 * 276 * This function must be called between cpuidle_pause_and_lock and 277 * cpuidle_resume_and_unlock when used externally. 278 */ 279 int cpuidle_enable_device(struct cpuidle_device *dev) 280 { 281 int ret, i; 282 struct cpuidle_driver *drv; 283 284 if (!dev) 285 return -EINVAL; 286 287 if (dev->enabled) 288 return 0; 289 290 drv = cpuidle_get_cpu_driver(dev); 291 292 if (!drv || !cpuidle_curr_governor) 293 return -EIO; 294 295 if (!dev->state_count) 296 dev->state_count = drv->state_count; 297 298 if (dev->registered == 0) { 299 ret = __cpuidle_register_device(dev); 300 if (ret) 301 return ret; 302 } 303 304 poll_idle_init(drv); 305 306 ret = cpuidle_add_device_sysfs(dev); 307 if (ret) 308 return ret; 309 310 if (cpuidle_curr_governor->enable && 311 (ret = cpuidle_curr_governor->enable(drv, dev))) 312 goto fail_sysfs; 313 314 for (i = 0; i < dev->state_count; i++) { 315 dev->states_usage[i].usage = 0; 316 dev->states_usage[i].time = 0; 317 } 318 dev->last_residency = 0; 319 320 smp_wmb(); 321 322 dev->enabled = 1; 323 324 enabled_devices++; 325 return 0; 326 327 fail_sysfs: 328 cpuidle_remove_device_sysfs(dev); 329 330 return ret; 331 } 332 333 EXPORT_SYMBOL_GPL(cpuidle_enable_device); 334 335 /** 336 * cpuidle_disable_device - disables idle PM for a CPU 337 * @dev: the CPU 338 * 339 * This function must be called between cpuidle_pause_and_lock and 340 * cpuidle_resume_and_unlock when used externally. 341 */ 342 void cpuidle_disable_device(struct cpuidle_device *dev) 343 { 344 struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); 345 346 if (!dev || !dev->enabled) 347 return; 348 349 if (!drv || !cpuidle_curr_governor) 350 return; 351 352 dev->enabled = 0; 353 354 if (cpuidle_curr_governor->disable) 355 cpuidle_curr_governor->disable(drv, dev); 356 357 cpuidle_remove_device_sysfs(dev); 358 enabled_devices--; 359 } 360 361 EXPORT_SYMBOL_GPL(cpuidle_disable_device); 362 363 /** 364 * __cpuidle_register_device - internal register function called before register 365 * and enable routines 366 * @dev: the cpu 367 * 368 * cpuidle_lock mutex must be held before this is called 369 */ 370 static int __cpuidle_register_device(struct cpuidle_device *dev) 371 { 372 int ret; 373 struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); 374 375 if (!try_module_get(drv->owner)) 376 return -EINVAL; 377 378 per_cpu(cpuidle_devices, dev->cpu) = dev; 379 list_add(&dev->device_list, &cpuidle_detected_devices); 380 ret = cpuidle_add_sysfs(dev); 381 if (ret) 382 goto err_sysfs; 383 384 ret = cpuidle_coupled_register_device(dev); 385 if (ret) 386 goto err_coupled; 387 388 dev->registered = 1; 389 return 0; 390 391 err_coupled: 392 cpuidle_remove_sysfs(dev); 393 err_sysfs: 394 list_del(&dev->device_list); 395 per_cpu(cpuidle_devices, dev->cpu) = NULL; 396 module_put(drv->owner); 397 return ret; 398 } 399 400 /** 401 * cpuidle_register_device - registers a CPU's idle PM feature 402 * @dev: the cpu 403 */ 404 int cpuidle_register_device(struct cpuidle_device *dev) 405 { 406 int ret; 407 408 if (!dev) 409 return -EINVAL; 410 411 mutex_lock(&cpuidle_lock); 412 413 if ((ret = __cpuidle_register_device(dev))) { 414 mutex_unlock(&cpuidle_lock); 415 return ret; 416 } 417 418 cpuidle_enable_device(dev); 419 cpuidle_install_idle_handler(); 420 421 mutex_unlock(&cpuidle_lock); 422 423 return 0; 424 425 } 426 427 EXPORT_SYMBOL_GPL(cpuidle_register_device); 428 429 /** 430 * cpuidle_unregister_device - unregisters a CPU's idle PM feature 431 * @dev: the cpu 432 */ 433 void cpuidle_unregister_device(struct cpuidle_device *dev) 434 { 435 struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev); 436 437 if (dev->registered == 0) 438 return; 439 440 cpuidle_pause_and_lock(); 441 442 cpuidle_disable_device(dev); 443 444 cpuidle_remove_sysfs(dev); 445 list_del(&dev->device_list); 446 per_cpu(cpuidle_devices, dev->cpu) = NULL; 447 448 cpuidle_coupled_unregister_device(dev); 449 450 cpuidle_resume_and_unlock(); 451 452 module_put(drv->owner); 453 } 454 455 EXPORT_SYMBOL_GPL(cpuidle_unregister_device); 456 457 /** 458 * cpuidle_unregister: unregister a driver and the devices. This function 459 * can be used only if the driver has been previously registered through 460 * the cpuidle_register function. 461 * 462 * @drv: a valid pointer to a struct cpuidle_driver 463 */ 464 void cpuidle_unregister(struct cpuidle_driver *drv) 465 { 466 int cpu; 467 struct cpuidle_device *device; 468 469 for_each_possible_cpu(cpu) { 470 device = &per_cpu(cpuidle_dev, cpu); 471 cpuidle_unregister_device(device); 472 } 473 474 cpuidle_unregister_driver(drv); 475 } 476 EXPORT_SYMBOL_GPL(cpuidle_unregister); 477 478 /** 479 * cpuidle_register: registers the driver and the cpu devices with the 480 * coupled_cpus passed as parameter. This function is used for all common 481 * initialization pattern there are in the arch specific drivers. The 482 * devices is globally defined in this file. 483 * 484 * @drv : a valid pointer to a struct cpuidle_driver 485 * @coupled_cpus: a cpumask for the coupled states 486 * 487 * Returns 0 on success, < 0 otherwise 488 */ 489 int cpuidle_register(struct cpuidle_driver *drv, 490 const struct cpumask *const coupled_cpus) 491 { 492 int ret, cpu; 493 struct cpuidle_device *device; 494 495 ret = cpuidle_register_driver(drv); 496 if (ret) { 497 pr_err("failed to register cpuidle driver\n"); 498 return ret; 499 } 500 501 for_each_possible_cpu(cpu) { 502 device = &per_cpu(cpuidle_dev, cpu); 503 device->cpu = cpu; 504 505 #ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED 506 /* 507 * On multiplatform for ARM, the coupled idle states could 508 * enabled in the kernel even if the cpuidle driver does not 509 * use it. Note, coupled_cpus is a struct copy. 510 */ 511 if (coupled_cpus) 512 device->coupled_cpus = *coupled_cpus; 513 #endif 514 ret = cpuidle_register_device(device); 515 if (!ret) 516 continue; 517 518 pr_err("Failed to register cpuidle device for cpu%d\n", cpu); 519 520 cpuidle_unregister(drv); 521 break; 522 } 523 524 return ret; 525 } 526 EXPORT_SYMBOL_GPL(cpuidle_register); 527 528 #ifdef CONFIG_SMP 529 530 static void smp_callback(void *v) 531 { 532 /* we already woke the CPU up, nothing more to do */ 533 } 534 535 /* 536 * This function gets called when a part of the kernel has a new latency 537 * requirement. This means we need to get all processors out of their C-state, 538 * and then recalculate a new suitable C-state. Just do a cross-cpu IPI; that 539 * wakes them all right up. 540 */ 541 static int cpuidle_latency_notify(struct notifier_block *b, 542 unsigned long l, void *v) 543 { 544 smp_call_function(smp_callback, NULL, 1); 545 return NOTIFY_OK; 546 } 547 548 static struct notifier_block cpuidle_latency_notifier = { 549 .notifier_call = cpuidle_latency_notify, 550 }; 551 552 static inline void latency_notifier_init(struct notifier_block *n) 553 { 554 pm_qos_add_notifier(PM_QOS_CPU_DMA_LATENCY, n); 555 } 556 557 #else /* CONFIG_SMP */ 558 559 #define latency_notifier_init(x) do { } while (0) 560 561 #endif /* CONFIG_SMP */ 562 563 /** 564 * cpuidle_init - core initializer 565 */ 566 static int __init cpuidle_init(void) 567 { 568 int ret; 569 570 if (cpuidle_disabled()) 571 return -ENODEV; 572 573 ret = cpuidle_add_interface(cpu_subsys.dev_root); 574 if (ret) 575 return ret; 576 577 latency_notifier_init(&cpuidle_latency_notifier); 578 579 return 0; 580 } 581 582 module_param(off, int, 0444); 583 core_initcall(cpuidle_init); 584