Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 7 Nov 2011 18:13:52 +0000 (10:13 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 7 Nov 2011 18:13:52 +0000 (10:13 -0800)
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux:
  cpuidle: Single/Global registration of idle states
  cpuidle: Split cpuidle_state structure and move per-cpu statistics fields
  cpuidle: Remove CPUIDLE_FLAG_IGNORE and dev->prepare()
  cpuidle: Move dev->last_residency update to driver enter routine; remove dev->last_state
  ACPI: Fix CONFIG_ACPI_DOCK=n compiler warning
  ACPI: Export FADT pm_profile integer value to userspace
  thermal: Prevent polling from happening during system suspend
  ACPI: Drop ACPI_NO_HARDWARE_INIT
  ACPI atomicio: Convert width in bits to bytes in __acpi_ioremap_fast()
  PNPACPI: Simplify disabled resource registration
  ACPI: Fix possible recursive locking in hwregs.c
  ACPI: use kstrdup()
  mrst pmu: update comment
  tools/power turbostat: less verbose debugging

12 files changed:
1  2 
arch/arm/mach-at91/cpuidle.c
arch/arm/mach-davinci/cpuidle.c
arch/arm/mach-exynos/cpuidle.c
arch/arm/mach-kirkwood/cpuidle.c
arch/sh/kernel/cpu/shmobile/cpuidle.c
drivers/acpi/atomicio.c
drivers/acpi/processor_idle.c
drivers/cpuidle/cpuidle.c
drivers/cpuidle/governors/ladder.c
drivers/cpuidle/governors/menu.c
drivers/idle/intel_idle.c
include/linux/cpuidle.h

Simple merge
Simple merge
index bf7e96f2793a009fe4c96706d6022c1a63a0199d,0000000000000000000000000000000000000000..35f6502144ae14c9ffa989066f51add9ee084375
mode 100644,000000..100644
--- /dev/null
@@@ -1,86 -1,0 +1,90 @@@
-                             struct cpuidle_state *state);
 +/* linux/arch/arm/mach-exynos4/cpuidle.c
 + *
 + * Copyright (c) 2011 Samsung Electronics Co., Ltd.
 + *            http://www.samsung.com
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 +*/
 +
 +#include <linux/kernel.h>
 +#include <linux/init.h>
 +#include <linux/cpuidle.h>
 +#include <linux/io.h>
 +
 +#include <asm/proc-fns.h>
 +
 +static int exynos4_enter_idle(struct cpuidle_device *dev,
-                             struct cpuidle_state *state)
++                      struct cpuidle_driver *drv,
++                            int index);
 +
 +static struct cpuidle_state exynos4_cpuidle_set[] = {
 +      [0] = {
 +              .enter                  = exynos4_enter_idle,
 +              .exit_latency           = 1,
 +              .target_residency       = 100000,
 +              .flags                  = CPUIDLE_FLAG_TIME_VALID,
 +              .name                   = "IDLE",
 +              .desc                   = "ARM clock gating(WFI)",
 +      },
 +};
 +
 +static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
 +
 +static struct cpuidle_driver exynos4_idle_driver = {
 +      .name           = "exynos4_idle",
 +      .owner          = THIS_MODULE,
 +};
 +
 +static int exynos4_enter_idle(struct cpuidle_device *dev,
-       return idle_time;
++                              struct cpuidle_driver *drv,
++                            int index)
 +{
 +      struct timeval before, after;
 +      int idle_time;
 +
 +      local_irq_disable();
 +      do_gettimeofday(&before);
 +
 +      cpu_do_idle();
 +
 +      do_gettimeofday(&after);
 +      local_irq_enable();
 +      idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
 +                  (after.tv_usec - before.tv_usec);
 +
++      dev->last_residency = idle_time;
++      return index;
 +}
 +
 +static int __init exynos4_init_cpuidle(void)
 +{
 +      int i, max_cpuidle_state, cpu_id;
 +      struct cpuidle_device *device;
-               device->state_count = (sizeof(exynos4_cpuidle_set) /
-                                              sizeof(struct cpuidle_state));
-               max_cpuidle_state = device->state_count;
-               for (i = 0; i < max_cpuidle_state; i++) {
-                       memcpy(&device->states[i], &exynos4_cpuidle_set[i],
-                                       sizeof(struct cpuidle_state));
-               }
++      struct cpuidle_driver *drv = &exynos4_idle_driver;
++
++      /* Setup cpuidle driver */
++      drv->state_count = (sizeof(exynos4_cpuidle_set) /
++                                     sizeof(struct cpuidle_state));
++      max_cpuidle_state = drv->state_count;
++      for (i = 0; i < max_cpuidle_state; i++) {
++              memcpy(&drv->states[i], &exynos4_cpuidle_set[i],
++                              sizeof(struct cpuidle_state));
++      }
 +      cpuidle_register_driver(&exynos4_idle_driver);
 +
 +      for_each_cpu(cpu_id, cpu_online_mask) {
 +              device = &per_cpu(exynos4_cpuidle_device, cpu_id);
 +              device->cpu = cpu_id;
 +
++              device->state_count = drv->state_count;
 +
 +              if (cpuidle_register_device(device)) {
 +                      printk(KERN_ERR "CPUidle register device failed\n,");
 +                      return -EIO;
 +              }
 +      }
 +      return 0;
 +}
 +device_initcall(exynos4_init_cpuidle);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 583baf22cad20a6082b688d079dd24dd8aa3aa18,c90418822f4043b388b84c2b077b65b59a5fe2e1..7408af843b8ac891b1fd59557c5cb7faa117c0bd
  #define CPUIDLE_NAME_LEN      16
  #define CPUIDLE_DESC_LEN      32
  
 +struct module;
 +
  struct cpuidle_device;
+ struct cpuidle_driver;
  
  
  /****************************