]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'pm+acpi-3.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Jan 2014 23:51:02 +0000 (15:51 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Jan 2014 23:51:02 +0000 (15:51 -0800)
Pull ACPI and power management updates from Rafael Wysocki:
 "As far as the number of commits goes, the top spot belongs to ACPI
  this time with cpufreq in the second position and a handful of PM
  core, PNP and cpuidle updates.  They are fixes and cleanups mostly, as
  usual, with a couple of new features in the mix.

  The most visible change is probably that we will create struct
  acpi_device objects (visible in sysfs) for all devices represented in
  the ACPI tables regardless of their status and there will be a new
  sysfs attribute under those objects allowing user space to check that
  status via _STA.

  Consequently, ACPI device eject or generally hot-removal will not
  delete those objects, unless the table containing the corresponding
  namespace nodes is unloaded, which is extremely rare.  Also ACPI
  container hotplug will be handled quite a bit differently and cpufreq
  will support CPU boost ("turbo") generically and not only in the
  acpi-cpufreq driver.

  Specifics:

   - ACPI core changes to make it create a struct acpi_device object for
     every device represented in the ACPI tables during all namespace
     scans regardless of the current status of that device.  In
     accordance with this, ACPI hotplug operations will not delete those
     objects, unless the underlying ACPI tables go away.

   - On top of the above, new sysfs attribute for ACPI device objects
     allowing user space to check device status by triggering the
     execution of _STA for its ACPI object.  From Srinivas Pandruvada.

   - ACPI core hotplug changes reducing code duplication, integrating
     the PCI root hotplug with the core and reworking container hotplug.

   - ACPI core simplifications making it use ACPI_COMPANION() in the
     code "glueing" ACPI device objects to "physical" devices.

   - ACPICA update to upstream version 20131218.  This adds support for
     the DBG2 and PCCT tables to ACPICA, fixes some bugs and improves
     debug facilities.  From Bob Moore, Lv Zheng and Betty Dall.

   - Init code change to carry out the early ACPI initialization
     earlier.  That should allow us to use ACPI during the timekeeping
     initialization and possibly to simplify the EFI initialization too.
     From Chun-Yi Lee.

   - Clenups of the inclusions of ACPI headers in many places all over
     from Lv Zheng and Rashika Kheria (work in progress).

   - New helper for ACPI _DSM execution and rework of the code in
     drivers that uses _DSM to execute it via the new helper.  From
     Jiang Liu.

   - New Win8 OSI blacklist entries from Takashi Iwai.

   - Assorted ACPI fixes and cleanups from Al Stone, Emil Goode, Hanjun
     Guo, Lan Tianyu, Masanari Iida, Oliver Neukum, Prarit Bhargava,
     Rashika Kheria, Tang Chen, Zhang Rui.

   - intel_pstate driver updates, including proper Baytrail support,
     from Dirk Brandewie and intel_pstate documentation from Ramkumar
     Ramachandra.

   - Generic CPU boost ("turbo") support for cpufreq from Lukasz
     Majewski.

   - powernow-k6 cpufreq driver fixes from Mikulas Patocka.

   - cpufreq core fixes and cleanups from Viresh Kumar, Jane Li, Mark
     Brown.

   - Assorted cpufreq drivers fixes and cleanups from Anson Huang, John
     Tobias, Paul Bolle, Paul Walmsley, Sachin Kamat, Shawn Guo, Viresh
     Kumar.

   - cpuidle cleanups from Bartlomiej Zolnierkiewicz.

   - Support for hibernation APM events from Bin Shi.

   - Hibernation fix to avoid bringing up nonboot CPUs with ACPI EC
     disabled during thaw transitions from Bjørn Mork.

   - PM core fixes and cleanups from Ben Dooks, Leonardo Potenza, Ulf
     Hansson.

   - PNP subsystem fixes and cleanups from Dmitry Torokhov, Levente
     Kurusa, Rashika Kheria.

   - New tool for profiling system suspend from Todd E Brandt and a
     cpupower tool cleanup from One Thousand Gnomes"

* tag 'pm+acpi-3.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (153 commits)
  thermal: exynos: boost: Automatic enable/disable of BOOST feature (at Exynos4412)
  cpufreq: exynos4x12: Change L0 driver data to CPUFREQ_BOOST_FREQ
  Documentation: cpufreq / boost: Update BOOST documentation
  cpufreq: exynos: Extend Exynos cpufreq driver to support boost
  cpufreq / boost: Kconfig: Support for software-managed BOOST
  acpi-cpufreq: Adjust the code to use the common boost attribute
  cpufreq: Add boost frequency support in core
  intel_pstate: Add trace point to report internal state.
  cpufreq: introduce cpufreq_generic_get() routine
  ARM: SA1100: Create dummy clk_get_rate() to avoid build failures
  cpufreq: stats: create sysfs entries when cpufreq_stats is a module
  cpufreq: stats: free table and remove sysfs entry in a single routine
  cpufreq: stats: remove hotplug notifiers
  cpufreq: stats: handle cpufreq_unregister_driver() and suspend/resume properly
  cpufreq: speedstep: remove unused speedstep_get_state
  platform: introduce OF style 'modalias' support for platform bus
  PM / tools: new tool for suspend/resume performance optimization
  ACPI: fix module autoloading for ACPI enumerated devices
  ACPI: add module autoloading support for ACPI enumerated devices
  ACPI: fix create_modalias() return value handling
  ...

33 files changed:
1  2 
Documentation/kernel-parameters.txt
MAINTAINERS
arch/arm/mach-exynos/common.c
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/cpuidle.c
arch/arm/mach-exynos/mach-exynos5-dt.c
arch/ia64/kernel/acpi.c
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/apic/apic_flat_64.c
arch/x86/kernel/apic/io_apic.c
drivers/acpi/acpi_extlog.c
drivers/acpi/acpi_pad.c
drivers/acpi/apei/apei-base.c
drivers/acpi/apei/einj.c
drivers/acpi/apei/ghes.c
drivers/acpi/pci_root.c
drivers/acpi/processor_idle.c
drivers/base/Makefile
drivers/cpufreq/exynos4x12-cpufreq.c
drivers/cpufreq/exynos5250-cpufreq.c
drivers/firmware/Kconfig
drivers/hid/i2c-hid/i2c-hid.c
drivers/idle/intel_idle.c
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/pciehp.h
drivers/pci/ioapic.c
drivers/pci/pci-acpi.c
drivers/pci/pci-label.c
drivers/platform/x86/asus-wmi.c
drivers/platform/x86/eeepc-laptop.c
drivers/usb/core/usb-acpi.c
init/main.c
tools/Makefile

index 44738564b2eecca00f86ab64e33f0992ee6faeb1,620122946c5b16f72e5fd6bd1920574f79ad65ac..be6ba33d4ff1ae85bc6bad162e5f9d6a210bbc32
@@@ -343,6 -343,9 +343,9 @@@ bytes respectively. Such letter suffixe
                        no: ACPI OperationRegions are not marked as reserved,
                        no further checks are performed.
  
+       acpi_no_memhotplug [ACPI] Disable memory hotplug.  Useful for kdump
+                          kernels.
        add_efi_memmap  [EFI; X86] Include EFI memory map in
                        kernel's map of available physical RAM.
  
        atkbd.softrepeat= [HW]
                        Use software keyboard repeat
  
 +      audit=          [KNL] Enable the audit sub-system
 +                      Format: { "0" | "1" } (0 = disabled, 1 = enabled)
 +                      0 - kernel audit is disabled and can not be enabled
 +                          until the next reboot
 +                      unset - kernel audit is initialized but disabled and
 +                          will be fully enabled by the userspace auditd.
 +                      1 - kernel audit is initialized and partially enabled,
 +                          storing at most audit_backlog_limit messages in
 +                          RAM until it is fully enabled by the userspace
 +                          auditd.
 +                      Default: unset
 +
 +      audit_backlog_limit= [KNL] Set the audit queue size limit.
 +                      Format: <int> (must be >=0)
 +                      Default: 64
 +
        baycom_epp=     [HW,AX25]
                        Format: <io>,<mode>
  
  
        cgroup_disable= [KNL] Disable a particular controller
                        Format: {name of the controller(s) to disable}
 -                              {Currently supported controllers - "memory"}
 +                      The effects of cgroup_disable=foo are:
 +                      - foo isn't auto-mounted if you mount all cgroups in
 +                        a single hierarchy
 +                      - foo isn't visible as an individually mountable
 +                        subsystem
 +                      {Currently only "memory" controller deal with this and
 +                      cut the overhead, others just disable the usage. So
 +                      only cgroup_disable=memory is actually worthy}
  
        checkreqprot    [SELINUX] Set initial checkreqprot flag value.
                        Format: { "0" | "1" }
        disable=        [IPV6]
                        See Documentation/networking/ipv6.txt.
  
 +      disable_cpu_apicid= [X86,APIC,SMP]
 +                      Format: <int>
 +                      The number of initial APIC ID for the
 +                      corresponding CPU to be disabled at boot,
 +                      mostly used for the kdump 2nd kernel to
 +                      disable BSP to wake up multiple CPUs without
 +                      causing system reset or hang due to sending
 +                      INIT from AP to BSP.
 +
        disable_ddw     [PPC/PSERIES]
                        Disable Dynamic DMA Window support. Use this if
                        to workaround buggy firmware.
  
                        The xen output can only be used by Xen PV guests.
  
 +      edac_report=    [HW,EDAC] Control how to report EDAC event
 +                      Format: {"on" | "off" | "force"}
 +                      on: enable EDAC to report H/W event. May be overridden
 +                      by other higher priority error reporting module.
 +                      off: disable H/W event reporting through EDAC.
 +                      force: enforce the use of EDAC to report H/W event.
 +                      default: on.
 +
        ekgdboc=        [X86,KGDB] Allow early kernel console debugging
                        ekgdboc=kbd
  
        edd=            [EDD]
                        Format: {"off" | "on" | "skip[mbr]"}
  
 +      efi=            [EFI]
 +                      Format: { "old_map" }
 +                      old_map [X86-64]: switch to the old ioremap-based EFI
 +                      runtime services mapping. 32-bit still uses this one by
 +                      default.
 +
        efi_no_storage_paranoia [EFI; X86]
                        Using this parameter you can use more than 50% of
                        your efi variable storage. Use this parameter only if
                        debugfs files are removed at module unload time.
  
        gpt             [EFI] Forces disk with valid GPT signature but
 -                      invalid Protective MBR to be treated as GPT.
 +                      invalid Protective MBR to be treated as GPT. If the
 +                      primary GPT is corrupted, it enables the backup/alternate
 +                      GPT to be used instead.
  
        grcan.enable0=  [HW] Configuration of physical interface 0. Determines
                        the "Enable 0" bit of the configuration register.
                        Valid arguments: on, off
                        Default: on
  
 +      kmemcheck=      [X86] Boot-time kmemcheck enable/disable/one-shot mode
 +                      Valid arguments: 0, 1, 2
 +                      kmemcheck=0 (disabled)
 +                      kmemcheck=1 (enabled)
 +                      kmemcheck=2 (one-shot mode)
 +                      Default: 2 (one-shot mode)
 +
        kstack=N        [X86] Print N words from the kernel stack
                        in oops dumps.
  
        noapic          [SMP,APIC] Tells the kernel to not make use of any
                        IOAPICs that may be present in the system.
  
 +      nokaslr         [X86]
 +                      Disable kernel base offset ASLR (Address Space
 +                      Layout Randomization) if built into the kernel.
 +
        noautogroup     Disable scheduler automatic task group creation.
  
        nobats          [PPC] Do not use BATs for mapping kernel lowmem
                        for RCU-preempt, and "s" for RCU-sched, and "N"
                        is the CPU number.  This reduces OS jitter on the
                        offloaded CPUs, which can be useful for HPC and
 -
                        real-time workloads.  It can also improve energy
                        efficiency for asymmetric multiprocessors.
  
                        periodically wake up to do the polling.
  
        rcutree.blimit= [KNL]
 -                      Set maximum number of finished RCU callbacks to process
 -                      in one batch.
 +                      Set maximum number of finished RCU callbacks to
 +                      process in one batch.
  
        rcutree.rcu_fanout_leaf= [KNL]
                        Increase the number of CPUs assigned to each
                        value is one, and maximum value is HZ.
  
        rcutree.qhimark= [KNL]
 -                      Set threshold of queued
 -                      RCU callbacks over which batch limiting is disabled.
 +                      Set threshold of queued RCU callbacks beyond which
 +                      batch limiting is disabled.
  
        rcutree.qlowmark= [KNL]
                        Set threshold of queued RCU callbacks below which
diff --combined MAINTAINERS
index 6270a0b2b99dfdf293635ad3debed95c1f121726,b8cae76a9aecf68b9f679b0c2a5576547329c17f..c9f0da19048b7c8f07f15fde25dba80a0addb90c
@@@ -93,11 -93,6 +93,11 @@@ Descriptions of section entries
        N: Files and directories with regex patterns.
           N:   [^a-z]tegra     all files whose path contains the word tegra
           One pattern per line.  Multiple N: lines acceptable.
 +         scripts/get_maintainer.pl has different behavior for files that
 +         match F: pattern and matches of N: patterns.  By default,
 +         get_maintainer will not look at git log history when an F: pattern
 +         match occurs.  When an N: match occurs, git log history is used
 +         to also notify the people that have git commit signatures.
        X: Files and directories that are NOT maintained, same rules as F:
           Files exclusions are tested before file matches.
           Can be useful for excluding a specific subdirectory, for instance:
@@@ -257,6 -252,7 +257,7 @@@ F: Documentation/ABI/testing/sysfs-bus-
  F:    drivers/pci/*acpi*
  F:    drivers/pci/*/*acpi*
  F:    drivers/pci/*/*/*acpi*
+ F:    tools/power/acpi
  
  ACPI COMPONENT ARCHITECTURE (ACPICA)
  M:    Robert Moore <robert.moore@intel.com>
@@@ -271,6 -267,7 +272,7 @@@ T: git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    drivers/acpi/acpica/
  F:    include/acpi/
+ F:    tools/power/acpi/
  
  ACPI FAN DRIVER
  M:    Zhang Rui <rui.zhang@intel.com>
@@@ -489,6 -486,7 +491,6 @@@ M: Hannes Reinecke <hare@suse.de
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    drivers/scsi/aic7xxx/
 -F:    drivers/scsi/aic7xxx_old/
  
  AIMSLAB FM RADIO RECEIVER DRIVER
  M:    Hans Verkuil <hverkuil@xs4all.nl>
@@@ -543,13 -541,6 +545,13 @@@ F:       drivers/tty/serial/altera_jtaguart.
  F:    include/linux/altera_uart.h
  F:    include/linux/altera_jtaguart.h
  
 +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER
 +M:    Tom Lendacky <thomas.lendacky@amd.com>
 +L:    linux-crypto@vger.kernel.org
 +S:    Supported
 +F:    drivers/crypto/ccp/
 +F:    include/linux/ccp.h
 +
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
  M:    Andreas Herrmann <herrmann.der.user@googlemail.com>
  L:    lm-sensors@lm-sensors.org
@@@ -777,12 -768,7 +779,12 @@@ ARM/Allwinner A1X SoC suppor
  M:    Maxime Ripard <maxime.ripard@free-electrons.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -F:    arch/arm/mach-sunxi/
 +N:    sun[x4567]i
 +
 +ARM/Allwinner SoC Clock Support
 +M:    Emilio López <emilio@elopez.com.ar>
 +S:    Maintained
 +F:    drivers/clk/sunxi/
  
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
  M:    Andrew Victor <linux@maxim.org.za>
@@@ -883,12 -869,6 +885,12 @@@ S:       Maintaine
  F:    arch/arm/mach-ebsa110/
  F:    drivers/net/ethernet/amd/am79c961a.*
  
 +ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT
 +M:    Uwe Kleine-König <kernel@pengutronix.de>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +N:    efm32
 +
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
  M:    Daniel Ribeiro <drwyrm@gmail.com>
  M:    Stefan Schmidt <stefan@openezx.org>
@@@ -1051,12 -1031,6 +1053,12 @@@ L:    linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-mvebu/
  
 +ARM/Marvell Berlin SoC support
 +M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-berlin/
 +
  ARM/Marvell Dove/Kirkwood/MV78xx0/Orion SOC support
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
@@@ -1350,14 -1324,6 +1352,14 @@@ F:    drivers/rtc/rtc-ab8500.
  F:    drivers/rtc/rtc-pl031.c
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
  
 +ARM/Ux500 CLOCK FRAMEWORK SUPPORT
 +M:    Ulf Hansson <ulf.hansson@linaro.org>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://git.linaro.org/people/ulfh/clk.git
 +S:    Maintained
 +F:    drivers/clk/ux500/
 +F:    include/linux/platform_data/clk-ux500.h
 +
  ARM/VFP SUPPORT
  M:    Russell King <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1634,10 -1600,11 +1636,10 @@@ S:      Supporte
  F:      drivers/scsi/esas2r
  
  AUDIT SUBSYSTEM
 -M:    Al Viro <viro@zeniv.linux.org.uk>
  M:    Eric Paris <eparis@redhat.com>
  L:    linux-audit@redhat.com (subscribers-only)
  W:    http://people.redhat.com/sgrubb/audit/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git
 +T:    git git://git.infradead.org/users/eparis/audit.git
  S:    Maintained
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
@@@ -2654,7 -2621,7 +2656,7 @@@ S:      Maintaine
  F:    drivers/platform/x86/dell-laptop.c
  
  DELL LAPTOP SMM DRIVER
 -S:    Orphan
 +M:    Guenter Roeck <linux@roeck-us.net>
  F:    drivers/char/i8k.c
  F:    include/uapi/linux/i8k.h
  
@@@ -2673,7 -2640,7 +2675,7 @@@ DESIGNWARE USB2 DRD IP DRIVE
  M:    Paul Zimmerman <paulz@synopsys.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/dwc2/
 +F:    drivers/usb/dwc2/
  
  DESIGNWARE USB3 DRD IP DRIVER
  M:    Felipe Balbi <balbi@ti.com>
@@@ -3370,7 -3337,6 +3372,7 @@@ EXTERNAL CONNECTOR SUBSYSTEM (EXTCON
  M:    MyungJoo Ham <myungjoo.ham@samsung.com>
  M:    Chanwoo Choi <cw00.choi@samsung.com>
  L:    linux-kernel@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon.git
  S:    Maintained
  F:    drivers/extcon/
  F:    Documentation/extcon/
@@@ -3380,6 -3346,7 +3382,6 @@@ M:      Jingoo Han <jg1.han@samsung.com
  L:    linux-fbdev@vger.kernel.org
  S:    Maintained
  F:    drivers/video/exynos/exynos_dp*
 -F:    include/video/exynos_dp*
  
  EXYNOS MIPI DISPLAY DRIVERS
  M:    Inki Dae <inki.dae@samsung.com>
@@@ -3669,7 -3636,6 +3671,7 @@@ W:      http://en.wikipedia.org/wiki/F2F
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git
  S:    Maintained
  F:    Documentation/filesystems/f2fs.txt
 +F:    Documentation/ABI/testing/sysfs-fs-f2fs
  F:    fs/f2fs/
  F:    include/linux/f2fs_fs.h
  
@@@ -3990,12 -3956,6 +3992,12 @@@ S:    Orpha
  F:    Documentation/filesystems/hfs.txt
  F:    fs/hfs/
  
 +HFSPLUS FILESYSTEM
 +L:    linux-fsdevel@vger.kernel.org
 +S:    Orphan
 +F:    Documentation/filesystems/hfsplus.txt
 +F:    fs/hfsplus/
 +
  HGA FRAMEBUFFER DRIVER
  M:    Ferenc Bakonyi <fero@drama.obuda.kando.hu>
  L:    linux-nvidia@lists.surfsouth.com
@@@ -4957,7 -4917,7 +4959,7 @@@ F:      include/linux/sunrpc
  F:    include/uapi/linux/sunrpc/
  
  KERNEL VIRTUAL MACHINE (KVM)
 -M:    Gleb Natapov <gleb@redhat.com>
 +M:    Gleb Natapov <gleb@kernel.org>
  M:    Paolo Bonzini <pbonzini@redhat.com>
  L:    kvm@vger.kernel.org
  W:    http://www.linux-kvm.org
@@@ -5183,11 -5143,6 +5185,11 @@@ F:    drivers/lguest
  F:    include/linux/lguest*.h
  F:    tools/lguest/
  
 +LIBLOCKDEP
 +M:    Sasha Levin <sasha.levin@oracle.com>
 +S:    Maintained
 +F:    tools/lib/lockdep/
 +
  LINUX FOR IBM pSERIES (RS/6000)
  M:    Paul Mackerras <paulus@au.ibm.com>
  W:    http://www.ibm.com/linux/ltc/projects/ppc
@@@ -6753,7 -6708,7 +6755,7 @@@ F:      include/linux/timer
  F:    kernel/*timer*
  
  POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS
 -M:    Anton Vorontsov <anton@enomsg.org>
 +M:    Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  M:    David Woodhouse <dwmw2@infradead.org>
  T:    git git://git.infradead.org/battery-2.6.git
  S:    Maintained
@@@ -6972,7 -6927,8 +6974,7 @@@ S:      Maintaine
  F:    drivers/scsi/qla1280.[ch]
  
  QLOGIC QLA2XXX FC-SCSI DRIVER
 -M:    Andrew Vasquez <andrew.vasquez@qlogic.com>
 -M:    linux-driver@qlogic.com
 +M:    qla2xxx-upstream@qlogic.com
  L:    linux-scsi@vger.kernel.org
  S:    Supported
  F:    Documentation/scsi/LICENSE.qla2xxx
@@@ -7145,12 -7101,6 +7147,12 @@@ T:    git git://git.kernel.org/pub/scm/lin
  F:    Documentation/RCU/torture.txt
  F:    kernel/rcu/torture.c
  
 +RCUTORTURE TEST FRAMEWORK
 +M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +F:    tools/testing/selftests/rcutorture
 +
  RDC R-321X SoC
  M:    Florian Fainelli <florian@openwrt.org>
  S:    Maintained
@@@ -7449,12 -7399,6 +7451,12 @@@ L:    linux-media@vger.kernel.or
  S:    Supported
  F:    drivers/media/i2c/s5c73m3/*
  
 +SAMSUNG SOC CLOCK DRIVERS
 +M:    Tomasz Figa <t.figa@samsung.com>
 +S:    Supported
 +L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 +F:    drivers/clk/samsung/
 +
  SERIAL DRIVERS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-serial@vger.kernel.org
@@@ -7538,9 -7482,8 +7540,9 @@@ F:      include/scsi/srp.
  SCSI SG DRIVER
  M:    Doug Gilbert <dgilbert@interlog.com>
  L:    linux-scsi@vger.kernel.org
 -W:    http://www.torque.net/sg
 +W:    http://sg.danny.cz/sg
  S:    Maintained
 +F:    Documentation/scsi/scsi-generic.txt
  F:    drivers/scsi/sg.c
  F:    include/scsi/sg.h
  
@@@ -8793,10 -8736,14 +8795,10 @@@ S:   Odd fixe
  F:    drivers/media/usb/tm6000/
  
  TPM DEVICE DRIVER
 -M:    Leonidas Da Silva Barbosa <leosilva@linux.vnet.ibm.com>
 -M:    Ashley Lai <ashley@ashleylai.com>
  M:    Peter Huewe <peterhuewe@gmx.de>
 -M:    Rajiv Andrade <mail@srajiv.net>
 -W:    http://tpmdd.sourceforge.net
 +M:    Ashley Lai <ashley@ashleylai.com>
  M:    Marcel Selhorst <tpmdd@selhorst.net>
 -M:    Sirrix AG <tpmdd@sirrix.com>
 -W:    http://www.sirrix.com
 +W:    http://tpmdd.sourceforge.net
  L:    tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/char/tpm/
@@@ -9286,7 -9233,6 +9288,7 @@@ F:      include/media/videobuf2-
  
  VIRTIO CONSOLE DRIVER
  M:    Amit Shah <amit.shah@redhat.com>
 +L:    virtio-dev@lists.oasis-open.org
  L:    virtualization@lists.linux-foundation.org
  S:    Maintained
  F:    drivers/char/virtio_console.c
@@@ -9296,7 -9242,6 +9298,7 @@@ F:      include/uapi/linux/virtio_console.
  VIRTIO CORE, NET AND BLOCK DRIVERS
  M:    Rusty Russell <rusty@rustcorp.com.au>
  M:    "Michael S. Tsirkin" <mst@redhat.com>
 +L:    virtio-dev@lists.oasis-open.org
  L:    virtualization@lists.linux-foundation.org
  S:    Maintained
  F:    drivers/virtio/
@@@ -9309,7 -9254,6 +9311,7 @@@ F:      include/uapi/linux/virtio_*.
  VIRTIO HOST (VHOST)
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  L:    kvm@vger.kernel.org
 +L:    virtio-dev@lists.oasis-open.org
  L:    virtualization@lists.linux-foundation.org
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -9607,7 -9551,6 +9609,7 @@@ M:      Konrad Rzeszutek Wilk <konrad.wilk@o
  M:    Boris Ostrovsky <boris.ostrovsky@oracle.com>
  M:    David Vrabel <david.vrabel@citrix.com>
  L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git
  S:    Supported
  F:    arch/x86/xen/
  F:    drivers/*/xen-*front.c
index 72ae5d3a87d2a8b0d9a4b30664d68272b69ab9b3,151043653a3f0aebd8b4b2161ae91ae77ba832c3..f18be40e5b212993cf48589091253735aa8a8ef3
@@@ -23,7 -23,6 +23,7 @@@
  #include <linux/of.h>
  #include <linux/of_fdt.h>
  #include <linux/of_irq.h>
 +#include <linux/pm_domain.h>
  #include <linux/export.h>
  #include <linux/irqdomain.h>
  #include <linux/of_address.h>
  #include <asm/mach/irq.h>
  #include <asm/cacheflush.h>
  
 -#include <mach/regs-irq.h>
 -#include <mach/regs-pmu.h>
 -
  #include <plat/cpu.h>
  #include <plat/pm.h>
  #include <plat/regs-serial.h>
  
  #include "common.h"
 +#include "regs-pmu.h"
 +
  #define L2_AUX_VAL 0x7C470001
  #define L2_AUX_MASK 0xC200ffff
  
@@@ -303,13 -303,18 +303,18 @@@ void __init exynos_cpuidle_init(void
        platform_device_register(&exynos_cpuidle);
  }
  
+ void __init exynos_cpufreq_init(void)
+ {
+       platform_device_register_simple("exynos-cpufreq", -1, NULL, 0);
+ }
  void __init exynos_init_late(void)
  {
        if (of_machine_is_compatible("samsung,exynos5440"))
                /* to be supported later */
                return;
  
 -      exynos_pm_late_initcall();
 +      pm_genpd_poweroff_unused();
  }
  
  static int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
index 0c31b34f0de5e96475fdcdef0b7587e1b4c0b462,3f0333438819fd4b0704a2abccca64e0afd54eb6..f76967b1c551054da36b391e7413e47057641aae
@@@ -22,10 -22,17 +22,11 @@@ void exynos_init_io(void)
  void exynos4_restart(enum reboot_mode mode, const char *cmd);
  void exynos5_restart(enum reboot_mode mode, const char *cmd);
  void exynos_cpuidle_init(void);
+ void exynos_cpufreq_init(void);
  void exynos_init_late(void);
  
  void exynos_firmware_init(void);
  
 -#ifdef CONFIG_PM_GENERIC_DOMAINS
 -int exynos_pm_late_initcall(void);
 -#else
 -static inline int exynos_pm_late_initcall(void) { return 0; }
 -#endif
 -
  extern struct smp_operations exynos_smp_ops;
  
  extern void exynos_cpu_die(unsigned int cpu);
index da65b036af2b453e0750792f2dd3de75b02ea53d,8e0eb2ef8c41a37481aa45b6924279ade8259ba9..f57cb91f02aa939b8896ed07eae6f3e2326f38da
  #include <asm/suspend.h>
  #include <asm/unified.h>
  #include <asm/cpuidle.h>
 -#include <mach/regs-clock.h>
 -#include <mach/regs-pmu.h>
  
  #include <plat/cpu.h>
  #include <plat/pm.h>
  
 +#include <mach/pm-core.h>
 +#include <mach/map.h>
 +
  #include "common.h"
 +#include "regs-pmu.h"
  
  #define REG_DIRECTGO_ADDR     (samsung_rev() == EXYNOS4210_REV_1_1 ? \
                        S5P_INFORM7 : (samsung_rev() == EXYNOS4210_REV_1_0 ? \
  
  #define S5P_CHECK_AFTR                0xFCBA0D10
  
 +#define EXYNOS5_PWR_CTRL1                     (S5P_VA_CMU + 0x01020)
 +#define EXYNOS5_PWR_CTRL2                     (S5P_VA_CMU + 0x01024)
 +
 +#define PWR_CTRL1_CORE2_DOWN_RATIO            (7 << 28)
 +#define PWR_CTRL1_CORE1_DOWN_RATIO            (7 << 16)
 +#define PWR_CTRL1_DIV2_DOWN_EN                        (1 << 9)
 +#define PWR_CTRL1_DIV1_DOWN_EN                        (1 << 8)
 +#define PWR_CTRL1_USE_CORE1_WFE                       (1 << 5)
 +#define PWR_CTRL1_USE_CORE0_WFE                       (1 << 4)
 +#define PWR_CTRL1_USE_CORE1_WFI                       (1 << 1)
 +#define PWR_CTRL1_USE_CORE0_WFI                       (1 << 0)
 +
 +#define PWR_CTRL2_DIV2_UP_EN                  (1 << 25)
 +#define PWR_CTRL2_DIV1_UP_EN                  (1 << 24)
 +#define PWR_CTRL2_DUR_STANDBY2_VAL            (1 << 16)
 +#define PWR_CTRL2_DUR_STANDBY1_VAL            (1 << 8)
 +#define PWR_CTRL2_CORE2_UP_RATIO              (1 << 4)
 +#define PWR_CTRL2_CORE1_UP_RATIO              (1 << 0)
 +
  static int exynos4_enter_lowpower(struct cpuidle_device *dev,
                                struct cpuidle_driver *drv,
                                int index);
@@@ -172,8 -151,8 +172,8 @@@ static int exynos4_enter_lowpower(struc
  {
        int new_index = index;
  
-       /* This mode only can be entered when other core's are offline */
-       if (num_online_cpus() > 1)
+       /* AFTR can only be entered when cores other than CPU0 are offline */
+       if (num_online_cpus() > 1 || dev->cpu != 0)
                new_index = drv->safe_state_index;
  
        if (new_index == 0)
@@@ -235,10 -214,6 +235,6 @@@ static int exynos_cpuidle_probe(struct 
                device = &per_cpu(exynos4_cpuidle_device, cpu_id);
                device->cpu = cpu_id;
  
-               /* Support IDLE only */
-               if (cpu_id != 0)
-                       device->state_count = 1;
                ret = cpuidle_register_device(device);
                if (ret) {
                        dev_err(&pdev->dev, "failed to register cpuidle device\n");
index 65a46465ac5edd9b0c14ca4ec93b9bc7eb63536c,602c5d7111d0e51e1d24c3aa92051810b810fee7..37ea261f0f6ce850d998dd54548abc4de59476bc
  #include <linux/io.h>
  
  #include <asm/mach/arch.h>
 -#include <mach/regs-pmu.h>
  #include <plat/mfc.h>
  
  #include "common.h"
 +#include "regs-pmu.h"
  
  static void __init exynos5_dt_machine_init(void)
  {
@@@ -44,6 -44,7 +44,7 @@@
        }
  
        exynos_cpuidle_init();
+       exynos_cpufreq_init();
  
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
  }
diff --combined arch/ia64/kernel/acpi.c
index bfa19311e09c809c1ea2214d796c5f22124c8b13,28dc6ba6690adf3910eec80135f76d44c1c4e98e..07d209c9507f292d80c45edc7b7433d78a78602b
@@@ -53,6 -53,7 +53,6 @@@
  #include <asm/numa.h>
  #include <asm/sal.h>
  #include <asm/cyclone.h>
 -#include <asm/xen/hypervisor.h>
  
  #define BAD_MADT_ENTRY(entry, end) (                                        \
                (!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \
@@@ -60,7 -61,6 +60,6 @@@
  
  #define PREFIX                        "ACPI: "
  
- u32 acpi_rsdt_forced;
  unsigned int acpi_cpei_override;
  unsigned int acpi_cpei_phys_cpuid;
  
@@@ -119,6 -119,8 +118,6 @@@ acpi_get_sysname(void
                        return "uv";
                else
                        return "sn2";
 -      } else if (xen_pv_domain() && !strcmp(hdr->oem_id, "XEN")) {
 -              return "xen";
        }
  
  #ifdef CONFIG_INTEL_IOMMU
index d359d0fffa50cfea2539593f68649552df587622,0b0b91b83d515f7331f47e4d6dd3ce8057400402..1dac94265b5978282262b77d4f496ae512701eb8
@@@ -46,7 -46,6 +46,6 @@@
  
  #include "sleep.h" /* To include x86_acpi_suspend_lowlevel */
  static int __initdata acpi_force = 0;
- u32 acpi_rsdt_forced;
  int acpi_disabled;
  EXPORT_SYMBOL(acpi_disabled);
  
@@@ -1034,7 -1033,9 +1033,7 @@@ static int mp_config_acpi_gsi(struct de
  
        if (!acpi_ioapic)
                return 0;
 -      if (!dev)
 -              return 0;
 -      if (dev->bus != &pci_bus_type)
 +      if (!dev || !dev_is_pci(dev))
                return 0;
  
        pdev = to_pci_dev(dev);
@@@ -1562,7 -1563,7 +1561,7 @@@ static int __init parse_acpi(char *arg
        }
        /* acpi=rsdt use RSDT instead of XSDT */
        else if (strcmp(arg, "rsdt") == 0) {
-               acpi_rsdt_forced = 1;
+               acpi_gbl_do_not_use_xsdt = TRUE;
        }
        /* "acpi=noirq" disables ACPI interrupt routing */
        else if (strcmp(arg, "noirq") == 0) {
index 5d5b9eb2b7a417d692be43ecdda99cfe9e781fa4,ccbf857d1d558461eb59139784faa2d0f43cabc9..2c621a6b901a7642838c5a74a54be4bf3fcbe58a
  #include <linux/string.h>
  #include <linux/kernel.h>
  #include <linux/ctype.h>
 -#include <linux/init.h>
  #include <linux/hardirq.h>
  #include <linux/module.h>
  #include <asm/smp.h>
  #include <asm/apic.h>
  #include <asm/ipi.h>
  
- #ifdef CONFIG_ACPI
- #include <acpi/acpi_bus.h>
- #endif
+ #include <linux/acpi.h>
  
  static struct apic apic_physflat;
  static struct apic apic_flat;
index a43f068ebec1c0867f91d2de2eff54cc5a89e8d4,4d67a7531d4558c6016c9a6e1f16dc07b97205c2..6ad4658de7056e02f104b505f35910587ec712f3
@@@ -37,9 -37,6 +37,6 @@@
  #include <linux/kthread.h>
  #include <linux/jiffies.h>    /* time_after() */
  #include <linux/slab.h>
- #ifdef CONFIG_ACPI
- #include <acpi/acpi_bus.h>
- #endif
  #include <linux/bootmem.h>
  #include <linux/dmar.h>
  #include <linux/hpet.h>
@@@ -1142,10 -1139,9 +1139,10 @@@ next
                if (test_bit(vector, used_vectors))
                        goto next;
  
 -              for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask)
 -                      if (per_cpu(vector_irq, new_cpu)[vector] != -1)
 +              for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) {
 +                      if (per_cpu(vector_irq, new_cpu)[vector] > VECTOR_UNDEFINED)
                                goto next;
 +              }
                /* Found one! */
                current_vector = vector;
                current_offset = offset;
@@@ -1184,7 -1180,7 +1181,7 @@@ static void __clear_irq_vector(int irq
  
        vector = cfg->vector;
        for_each_cpu_and(cpu, cfg->domain, cpu_online_mask)
 -              per_cpu(vector_irq, cpu)[vector] = -1;
 +              per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
  
        cfg->vector = 0;
        cpumask_clear(cfg->domain);
        if (likely(!cfg->move_in_progress))
                return;
        for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) {
 -              for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS;
 -                                                              vector++) {
 +              for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
                        if (per_cpu(vector_irq, cpu)[vector] != irq)
                                continue;
 -                      per_cpu(vector_irq, cpu)[vector] = -1;
 +                      per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
                        break;
                }
        }
@@@ -1228,12 -1225,12 +1225,12 @@@ void __setup_vector_irq(int cpu
        /* Mark the free vectors */
        for (vector = 0; vector < NR_VECTORS; ++vector) {
                irq = per_cpu(vector_irq, cpu)[vector];
 -              if (irq < 0)
 +              if (irq <= VECTOR_UNDEFINED)
                        continue;
  
                cfg = irq_cfg(irq);
                if (!cpumask_test_cpu(cpu, cfg->domain))
 -                      per_cpu(vector_irq, cpu)[vector] = -1;
 +                      per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
        }
        raw_spin_unlock(&vector_lock);
  }
@@@ -2202,13 -2199,13 +2199,13 @@@ asmlinkage void smp_irq_move_cleanup_in
  
        me = smp_processor_id();
        for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
 -              unsigned int irq;
 +              int irq;
                unsigned int irr;
                struct irq_desc *desc;
                struct irq_cfg *cfg;
                irq = __this_cpu_read(vector_irq[vector]);
  
 -              if (irq == -1)
 +              if (irq <= VECTOR_UNDEFINED)
                        continue;
  
                desc = irq_to_desc(irq);
index 5d33c54154050b452b996e4433ab676e4829f50e,94166680b3a39f96cb0dcd4e98c5011bf3b8df4f..c4a5d87ede7e81cb16ada28d6bf896351b42e79b
@@@ -9,10 -9,8 +9,9 @@@
  
  #include <linux/module.h>
  #include <linux/acpi.h>
- #include <acpi/acpi_bus.h>
  #include <linux/cper.h>
  #include <linux/ratelimit.h>
 +#include <linux/edac.h>
  #include <asm/cpu.h>
  #include <asm/mce.h>
  
  #define EXT_ELOG_ENTRY_MASK   GENMASK_ULL(51, 0) /* elog entry address mask */
  
  #define EXTLOG_DSM_REV                0x0
- #define       EXTLOG_FN_QUERY         0x0
  #define       EXTLOG_FN_ADDR          0x1
  
  #define FLAG_OS_OPTIN         BIT(0)
- #define EXTLOG_QUERY_L1_EXIST BIT(1)
  #define ELOG_ENTRY_VALID      (1ULL<<63)
  #define ELOG_ENTRY_LEN                0x1000
  
@@@ -44,9 -40,7 +41,9 @@@ struct extlog_l1_head 
        u8  rev1[12];
  };
  
- static u8 extlog_dsm_uuid[] = "663E35AF-CC10-41A4-88EA-5470AF055295";
 +static int old_edac_report_status;
 +
+ static u8 extlog_dsm_uuid[] __initdata = "663E35AF-CC10-41A4-88EA-5470AF055295";
  
  /* L1 table related physical address */
  static u64 elog_base;
@@@ -153,65 -147,30 +150,30 @@@ static int extlog_print(struct notifier
  
        rc = print_extlog_rcd(NULL, (struct acpi_generic_status *)elog_buf, cpu);
  
 -      return NOTIFY_DONE;
 +      return NOTIFY_STOP;
  }
  
- static int extlog_get_dsm(acpi_handle handle, int rev, int func, u64 *ret)
+ static bool __init extlog_get_l1addr(void)
  {
-       struct acpi_buffer buf = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_object_list input;
-       union acpi_object params[4], *obj;
        u8 uuid[16];
-       int i;
+       acpi_handle handle;
+       union acpi_object *obj;
  
        acpi_str_to_uuid(extlog_dsm_uuid, uuid);
-       input.count = 4;
-       input.pointer = params;
-       params[0].type = ACPI_TYPE_BUFFER;
-       params[0].buffer.length = 16;
-       params[0].buffer.pointer = uuid;
-       params[1].type = ACPI_TYPE_INTEGER;
-       params[1].integer.value = rev;
-       params[2].type = ACPI_TYPE_INTEGER;
-       params[2].integer.value = func;
-       params[3].type = ACPI_TYPE_PACKAGE;
-       params[3].package.count = 0;
-       params[3].package.elements = NULL;
-       if (ACPI_FAILURE(acpi_evaluate_object(handle, "_DSM", &input, &buf)))
-               return -1;
-       *ret = 0;
-       obj = (union acpi_object *)buf.pointer;
-       if (obj->type == ACPI_TYPE_INTEGER) {
-               *ret = obj->integer.value;
-       } else if (obj->type == ACPI_TYPE_BUFFER) {
-               if (obj->buffer.length <= 8) {
-                       for (i = 0; i < obj->buffer.length; i++)
-                               *ret |= (obj->buffer.pointer[i] << (i * 8));
-               }
-       }
-       kfree(buf.pointer);
-       return 0;
- }
- static bool extlog_get_l1addr(void)
- {
-       acpi_handle handle;
-       u64 ret;
  
        if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
                return false;
-       if (extlog_get_dsm(handle, EXTLOG_DSM_REV, EXTLOG_FN_QUERY, &ret) ||
-           !(ret & EXTLOG_QUERY_L1_EXIST))
+       if (!acpi_check_dsm(handle, uuid, EXTLOG_DSM_REV, 1 << EXTLOG_FN_ADDR))
                return false;
-       if (extlog_get_dsm(handle, EXTLOG_DSM_REV, EXTLOG_FN_ADDR, &ret))
+       obj = acpi_evaluate_dsm_typed(handle, uuid, EXTLOG_DSM_REV,
+                                     EXTLOG_FN_ADDR, NULL, ACPI_TYPE_INTEGER);
+       if (!obj) {
                return false;
+       } else {
+               l1_dirbase = obj->integer.value;
+               ACPI_FREE(obj);
+       }
  
-       l1_dirbase = ret;
        /* Spec says L1 directory must be 4K aligned, bail out if it isn't */
        if (l1_dirbase & ((1 << 12) - 1)) {
                pr_warn(FW_BUG "L1 Directory is invalid at physical %llx\n",
@@@ -234,12 -193,8 +196,12 @@@ static int __init extlog_init(void
        u64 cap;
        int rc;
  
 -      rc = -ENODEV;
 +      if (get_edac_report_status() == EDAC_REPORTING_FORCE) {
 +              pr_warn("Not loading eMCA, error reporting force-enabled through EDAC.\n");
 +              return -EPERM;
 +      }
  
 +      rc = -ENODEV;
        rdmsrl(MSR_IA32_MCG_CAP, cap);
        if (!(cap & MCG_ELOG_P))
                return rc;
        if (elog_buf == NULL)
                goto err_release_elog;
  
 +      /*
 +       * eMCA event report method has higher priority than EDAC method,
 +       * unless EDAC event report method is mandatory.
 +       */
 +      old_edac_report_status = get_edac_report_status();
 +      set_edac_report_status(EDAC_REPORTING_DISABLED);
        mce_register_decode_chain(&extlog_mce_dec);
        /* enable OS to be involved to take over management from BIOS */
        ((struct extlog_l1_head *)extlog_l1_addr)->flags |= FLAG_OS_OPTIN;
@@@ -321,7 -270,6 +283,7 @@@ err
  
  static void __exit extlog_exit(void)
  {
 +      set_edac_report_status(old_edac_report_status);
        mce_unregister_decode_chain(&extlog_mce_dec);
        ((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN;
        if (extlog_l1_addr)
diff --combined drivers/acpi/acpi_pad.c
index 509452a62f964d6914ef1bbe2a4f7f26b9ff5076,65610c0e7243d3d9cd4f8e5d757ca9d602b94816..df96a0fe48905aa77d5ac17248195c0c1fcb9221
@@@ -28,8 -28,7 +28,7 @@@
  #include <linux/cpu.h>
  #include <linux/clockchips.h>
  #include <linux/slab.h>
- #include <acpi/acpi_bus.h>
- #include <acpi/acpi_drivers.h>
+ #include <linux/acpi.h>
  #include <asm/mwait.h>
  
  #define ACPI_PROCESSOR_AGGREGATOR_CLASS       "acpi_pad"
@@@ -193,7 -192,10 +192,7 @@@ static int power_saving_thread(void *da
                                        CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu);
                        stop_critical_timings();
  
 -                      __monitor((void *)&current_thread_info()->flags, 0, 0);
 -                      smp_mb();
 -                      if (!need_resched())
 -                              __mwait(power_saving_mwait_eax, 1);
 +                      mwait_idle_with_hints(power_saving_mwait_eax, 1);
  
                        start_critical_timings();
                        if (lapic_marked_unstable)
index e55584a072c632e35ad221f3cc4855e915baa0b0,0760b75f79cc0a6c9c75ab627197f98c55eed268..8678dfe5366b9ac55c18b0d732eae431039ccdc5
  #include <linux/module.h>
  #include <linux/init.h>
  #include <linux/acpi.h>
- #include <linux/acpi_io.h>
  #include <linux/slab.h>
  #include <linux/io.h>
  #include <linux/kref.h>
  #include <linux/rculist.h>
  #include <linux/interrupt.h>
  #include <linux/debugfs.h>
 +#include <asm/unaligned.h>
  
  #include "apei-internal.h"
  
@@@ -568,7 -566,8 +567,7 @@@ static int apei_check_gar(struct acpi_g
        bit_offset = reg->bit_offset;
        access_size_code = reg->access_width;
        space_id = reg->space_id;
 -      /* Handle possible alignment issues */
 -      memcpy(paddr, &reg->address, sizeof(*paddr));
 +      *paddr = get_unaligned(&reg->address);
        if (!*paddr) {
                pr_warning(FW_BUG APEI_PFX
                           "Invalid physical address in GAR [0x%llx/%u/%u/%u/%u]\n",
diff --combined drivers/acpi/apei/einj.c
index 7dcc8a824aae304f05a52b7fc9f087e36916f093,ca0c6d7ec0d4181cfdd3fa9b91547a84cd545e2f..1be6f55644855ac8e1a156dbb8a87aff801f20d9
@@@ -33,8 -33,6 +33,7 @@@
  #include <linux/nmi.h>
  #include <linux/delay.h>
  #include <linux/mm.h>
- #include <acpi/acpi.h>
 +#include <asm/unaligned.h>
  
  #include "apei-internal.h"
  
@@@ -217,7 -215,7 +216,7 @@@ static void check_vendor_extension(u64 
  static void *einj_get_parameter_address(void)
  {
        int i;
 -      u64 paddrv4 = 0, paddrv5 = 0;
 +      u64 pa_v4 = 0, pa_v5 = 0;
        struct acpi_whea_header *entry;
  
        entry = EINJ_TAB_ENTRY(einj_tab);
                    entry->instruction == ACPI_EINJ_WRITE_REGISTER &&
                    entry->register_region.space_id ==
                    ACPI_ADR_SPACE_SYSTEM_MEMORY)
 -                      memcpy(&paddrv4, &entry->register_region.address,
 -                             sizeof(paddrv4));
 +                      pa_v4 = get_unaligned(&entry->register_region.address);
                if (entry->action == ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS &&
                    entry->instruction == ACPI_EINJ_WRITE_REGISTER &&
                    entry->register_region.space_id ==
                    ACPI_ADR_SPACE_SYSTEM_MEMORY)
 -                      memcpy(&paddrv5, &entry->register_region.address,
 -                             sizeof(paddrv5));
 +                      pa_v5 = get_unaligned(&entry->register_region.address);
                entry++;
        }
 -      if (paddrv5) {
 +      if (pa_v5) {
                struct set_error_type_with_address *v5param;
  
 -              v5param = acpi_os_map_memory(paddrv5, sizeof(*v5param));
 +              v5param = acpi_os_map_memory(pa_v5, sizeof(*v5param));
                if (v5param) {
                        acpi5 = 1;
 -                      check_vendor_extension(paddrv5, v5param);
 +                      check_vendor_extension(pa_v5, v5param);
                        return v5param;
                }
        }
 -      if (param_extension && paddrv4) {
 +      if (param_extension && pa_v4) {
                struct einj_parameter *v4param;
  
 -              v4param = acpi_os_map_memory(paddrv4, sizeof(*v4param));
 +              v4param = acpi_os_map_memory(pa_v4, sizeof(*v4param));
                if (!v4param)
                        return NULL;
                if (v4param->reserved1 || v4param->reserved2) {
@@@ -415,8 -415,7 +414,8 @@@ out
        return rc;
  }
  
 -static int __einj_error_inject(u32 type, u64 param1, u64 param2)
 +static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2,
 +                             u64 param3, u64 param4)
  {
        struct apei_exec_context ctx;
        u64 val, trigger_paddr, timeout = FIRMWARE_TIMEOUT;
                                break;
                        }
                        v5param->flags = vendor_flags;
 +              } else if (flags) {
 +                              v5param->flags = flags;
 +                              v5param->memory_address = param1;
 +                              v5param->memory_address_range = param2;
 +                              v5param->apicid = param3;
 +                              v5param->pcie_sbdf = param4;
                } else {
                        switch (type) {
                        case ACPI_EINJ_PROCESSOR_CORRECTABLE:
  }
  
  /* Inject the specified hardware error */
 -static int einj_error_inject(u32 type, u64 param1, u64 param2)
 +static int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2,
 +                           u64 param3, u64 param4)
  {
        int rc;
        unsigned long pfn;
  
 +      /* If user manually set "flags", make sure it is legal */
 +      if (flags && (flags &
 +              ~(SETWA_FLAGS_APICID|SETWA_FLAGS_MEM|SETWA_FLAGS_PCIE_SBDF)))
 +              return -EINVAL;
 +
        /*
         * We need extra sanity checks for memory errors.
         * Other types leap directly to injection.
        if (type & ACPI5_VENDOR_BIT) {
                if (vendor_flags != SETWA_FLAGS_MEM)
                        goto inject;
 -      } else if (!(type & MEM_ERROR_MASK))
 +      } else if (!(type & MEM_ERROR_MASK) && !(flags & SETWA_FLAGS_MEM))
                goto inject;
  
        /*
  
  inject:
        mutex_lock(&einj_mutex);
 -      rc = __einj_error_inject(type, param1, param2);
 +      rc = __einj_error_inject(type, flags, param1, param2, param3, param4);
        mutex_unlock(&einj_mutex);
  
        return rc;
  }
  
  static u32 error_type;
 +static u32 error_flags;
  static u64 error_param1;
  static u64 error_param2;
 +static u64 error_param3;
 +static u64 error_param4;
  static struct dentry *einj_debug_dir;
  
  static int available_error_type_show(struct seq_file *m, void *v)
@@@ -663,8 -647,7 +662,8 @@@ static int error_inject_set(void *data
        if (!error_type)
                return -EINVAL;
  
 -      return einj_error_inject(error_type, error_param1, error_param2);
 +      return einj_error_inject(error_type, error_flags, error_param1, error_param2,
 +              error_param3, error_param4);
  }
  
  DEFINE_SIMPLE_ATTRIBUTE(error_inject_fops, NULL,
@@@ -745,10 -728,6 +744,10 @@@ static int __init einj_init(void
        rc = -ENOMEM;
        einj_param = einj_get_parameter_address();
        if ((param_extension || acpi5) && einj_param) {
 +              fentry = debugfs_create_x32("flags", S_IRUSR | S_IWUSR,
 +                                          einj_debug_dir, &error_flags);
 +              if (!fentry)
 +                      goto err_unmap;
                fentry = debugfs_create_x64("param1", S_IRUSR | S_IWUSR,
                                            einj_debug_dir, &error_param1);
                if (!fentry)
                                            einj_debug_dir, &error_param2);
                if (!fentry)
                        goto err_unmap;
 +              fentry = debugfs_create_x64("param3", S_IRUSR | S_IWUSR,
 +                                          einj_debug_dir, &error_param3);
 +              if (!fentry)
 +                      goto err_unmap;
 +              fentry = debugfs_create_x64("param4", S_IRUSR | S_IWUSR,
 +                                          einj_debug_dir, &error_param4);
 +              if (!fentry)
 +                      goto err_unmap;
  
                fentry = debugfs_create_x32("notrigger", S_IRUSR | S_IWUSR,
                                            einj_debug_dir, &notrigger);
diff --combined drivers/acpi/apei/ghes.c
index 46766ef7ef5de9be5cfa6f95d7f81a6039f9e4ec,694c486a12ed1589456d897cd18218595800ecf3..dab7cb7349df7e62ee24f32493d8d5a8065ad3d9
@@@ -33,7 -33,6 +33,6 @@@
  #include <linux/module.h>
  #include <linux/init.h>
  #include <linux/acpi.h>
- #include <linux/acpi_io.h>
  #include <linux/io.h>
  #include <linux/interrupt.h>
  #include <linux/timer.h>
@@@ -413,31 -412,27 +412,31 @@@ static void ghes_handle_memory_failure(
  {
  #ifdef CONFIG_ACPI_APEI_MEMORY_FAILURE
        unsigned long pfn;
 +      int flags = -1;
        int sec_sev = ghes_severity(gdata->error_severity);
        struct cper_sec_mem_err *mem_err;
        mem_err = (struct cper_sec_mem_err *)(gdata + 1);
  
 -      if (sec_sev == GHES_SEV_CORRECTED &&
 -          (gdata->flags & CPER_SEC_ERROR_THRESHOLD_EXCEEDED) &&
 -          (mem_err->validation_bits & CPER_MEM_VALID_PA)) {
 -              pfn = mem_err->physical_addr >> PAGE_SHIFT;
 -              if (pfn_valid(pfn))
 -                      memory_failure_queue(pfn, 0, MF_SOFT_OFFLINE);
 -              else if (printk_ratelimit())
 -                      pr_warn(FW_WARN GHES_PFX
 -                      "Invalid address in generic error data: %#llx\n",
 -                      mem_err->physical_addr);
 -      }
 -      if (sev == GHES_SEV_RECOVERABLE &&
 -          sec_sev == GHES_SEV_RECOVERABLE &&
 -          mem_err->validation_bits & CPER_MEM_VALID_PA) {
 -              pfn = mem_err->physical_addr >> PAGE_SHIFT;
 -              memory_failure_queue(pfn, 0, 0);
 +      if (!(mem_err->validation_bits & CPER_MEM_VALID_PA))
 +              return;
 +
 +      pfn = mem_err->physical_addr >> PAGE_SHIFT;
 +      if (!pfn_valid(pfn)) {
 +              pr_warn_ratelimited(FW_WARN GHES_PFX
 +              "Invalid address in generic error data: %#llx\n",
 +              mem_err->physical_addr);
 +              return;
        }
 +
 +      /* iff following two events can be handled properly by now */
 +      if (sec_sev == GHES_SEV_CORRECTED &&
 +          (gdata->flags & CPER_SEC_ERROR_THRESHOLD_EXCEEDED))
 +              flags = MF_SOFT_OFFLINE;
 +      if (sev == GHES_SEV_RECOVERABLE && sec_sev == GHES_SEV_RECOVERABLE)
 +              flags = 0;
 +
 +      if (flags != -1)
 +              memory_failure_queue(pfn, 0, flags);
  #endif
  }
  
@@@ -457,7 -452,8 +456,7 @@@ static void ghes_do_proc(struct ghes *g
                        ghes_edac_report_mem_error(ghes, sev, mem_err);
  
  #ifdef CONFIG_X86_MCE
 -                      apei_mce_report_mem_error(sev == GHES_SEV_CORRECTED,
 -                                                mem_err);
 +                      apei_mce_report_mem_error(sev, mem_err);
  #endif
                        ghes_handle_memory_failure(gdata, sev);
                }
diff --combined drivers/acpi/pci_root.c
index 5b01bd6d5ea0e01481d93b305f2453b7e68ba48c,afafee56cf8be2b7d1dfe5d2de91180ba30a370c..c1c4102e647898717fb8e3c7acc440561d608d8a
@@@ -35,9 -35,7 +35,7 @@@
  #include <linux/pci-aspm.h>
  #include <linux/acpi.h>
  #include <linux/slab.h>
- #include <acpi/acpi_bus.h>
- #include <acpi/acpi_drivers.h>
- #include <acpi/apei.h>
+ #include <acpi/apei.h>        /* for acpi_hest_init() */
  
  #include "internal.h"
  
@@@ -51,6 -49,12 +49,12 @@@ static int acpi_pci_root_add(struct acp
                             const struct acpi_device_id *not_used);
  static void acpi_pci_root_remove(struct acpi_device *device);
  
+ static int acpi_pci_root_scan_dependent(struct acpi_device *adev)
+ {
+       acpiphp_check_host_bridge(adev->handle);
+       return 0;
+ }
  #define ACPI_PCIE_REQ_SUPPORT (OSC_PCI_EXT_CONFIG_SUPPORT \
                                | OSC_PCI_ASPM_SUPPORT \
                                | OSC_PCI_CLOCK_PM_SUPPORT \
@@@ -66,7 -70,8 +70,8 @@@ static struct acpi_scan_handler pci_roo
        .attach = acpi_pci_root_add,
        .detach = acpi_pci_root_remove,
        .hotplug = {
-               .ignore = true,
+               .enabled = true,
+               .scan_dependent = acpi_pci_root_scan_dependent,
        },
  };
  
@@@ -599,9 -604,7 +604,9 @@@ static int acpi_pci_root_add(struct acp
                pci_assign_unassigned_root_bus_resources(root->bus);
        }
  
 +      pci_lock_rescan_remove();
        pci_bus_add_devices(root->bus);
 +      pci_unlock_rescan_remove();
        return 1;
  
  end:
@@@ -613,8 -616,6 +618,8 @@@ static void acpi_pci_root_remove(struc
  {
        struct acpi_pci_root *root = acpi_driver_data(device);
  
 +      pci_lock_rescan_remove();
 +
        pci_stop_root_bus(root->bus);
  
        device_set_run_wake(root->bus->bridge, false);
  
        pci_remove_root_bus(root->bus);
  
 +      pci_unlock_rescan_remove();
 +
        kfree(root);
  }
  
  void __init acpi_pci_root_init(void)
  {
        acpi_hest_init();
-       if (!acpi_pci_disabled) {
-               pci_acpi_crs_quirks();
-               acpi_scan_add_handler(&pci_root_handler);
-       }
- }
- /* Support root bridge hotplug */
- static void handle_root_bridge_insertion(acpi_handle handle)
- {
-       struct acpi_device *device;
-       if (!acpi_bus_get_device(handle, &device)) {
-               dev_printk(KERN_DEBUG, &device->dev,
-                          "acpi device already exists; ignoring notify\n");
+       if (acpi_pci_disabled)
                return;
-       }
-       if (acpi_bus_scan(handle))
-               acpi_handle_err(handle, "cannot add bridge to acpi list\n");
- }
- static void hotplug_event_root(void *data, u32 type)
- {
-       acpi_handle handle = data;
-       struct acpi_pci_root *root;
-       acpi_scan_lock_acquire();
-       root = acpi_pci_find_root(handle);
-       switch (type) {
-       case ACPI_NOTIFY_BUS_CHECK:
-               /* bus enumerate */
-               acpi_handle_printk(KERN_DEBUG, handle,
-                                  "Bus check notify on %s\n", __func__);
-               if (root)
-                       acpiphp_check_host_bridge(handle);
-               else
-                       handle_root_bridge_insertion(handle);
-               break;
-       case ACPI_NOTIFY_DEVICE_CHECK:
-               /* device check */
-               acpi_handle_printk(KERN_DEBUG, handle,
-                                  "Device check notify on %s\n", __func__);
-               if (!root)
-                       handle_root_bridge_insertion(handle);
-               break;
-       case ACPI_NOTIFY_EJECT_REQUEST:
-               /* request device eject */
-               acpi_handle_printk(KERN_DEBUG, handle,
-                                  "Device eject notify on %s\n", __func__);
-               if (!root)
-                       break;
-               get_device(&root->device->dev);
-               acpi_scan_lock_release();
-               acpi_bus_device_eject(root->device, ACPI_NOTIFY_EJECT_REQUEST);
-               return;
-       default:
-               acpi_handle_warn(handle,
-                                "notify_handler: unknown event type 0x%x\n",
-                                type);
-               break;
-       }
-       acpi_scan_lock_release();
- }
- static void handle_hotplug_event_root(acpi_handle handle, u32 type,
-                                       void *context)
- {
-       acpi_hotplug_execute(hotplug_event_root, handle, type);
- }
- static acpi_status __init
- find_root_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
- {
-       acpi_status status;
-       int *count = (int *)context;
-       if (!acpi_is_root_bridge(handle))
-               return AE_OK;
-       (*count)++;
-       status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
-                                       handle_hotplug_event_root, NULL);
-       if (ACPI_FAILURE(status))
-               acpi_handle_printk(KERN_DEBUG, handle,
-                       "notify handler is not installed, exit status: %u\n",
-                        (unsigned int)status);
-       else
-               acpi_handle_printk(KERN_DEBUG, handle,
-                                  "notify handler is installed\n");
-       return AE_OK;
- }
- void __init acpi_pci_root_hp_init(void)
- {
-       int num = 0;
-       acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-               ACPI_UINT32_MAX, find_root_bridges, NULL, &num, NULL);
  
-       printk(KERN_DEBUG "Found %d acpi root devices\n", num);
+       pci_acpi_crs_quirks();
+       acpi_scan_add_handler_with_hotplug(&pci_root_handler, "pci_root");
  }
index f90c56c8379e8c9c69d99a0a5366780a850fe3b9,1fc455b8ce17b8211a59660bce381959a6c76067..3dca36d4ad26ef22d6ecea66e166ae22cde9ab33
@@@ -35,6 -35,7 +35,7 @@@
  #include <linux/clockchips.h>
  #include <linux/cpuidle.h>
  #include <linux/syscore_ops.h>
+ #include <acpi/processor.h>
  
  /*
   * Include the apic definitions for x86 to have the APIC timer related defines
@@@ -46,9 -47,6 +47,6 @@@
  #include <asm/apic.h>
  #endif
  
- #include <acpi/acpi_bus.h>
- #include <acpi/processor.h>
  #define PREFIX "ACPI: "
  
  #define ACPI_PROCESSOR_CLASS            "processor"
@@@ -213,7 -211,7 +211,7 @@@ static int acpi_processor_suspend(void
  
  static void acpi_processor_resume(void)
  {
-       u32 resumed_bm_rld;
+       u32 resumed_bm_rld = 0;
  
        acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld);
        if (resumed_bm_rld == saved_bm_rld)
@@@ -598,7 -596,7 +596,7 @@@ static int acpi_processor_power_verify(
                case ACPI_STATE_C2:
                        if (!cx->address)
                                break;
-                       cx->valid = 1; 
+                       cx->valid = 1;
                        break;
  
                case ACPI_STATE_C3:
@@@ -727,6 -725,11 +725,6 @@@ static int acpi_idle_enter_c1(struct cp
        if (unlikely(!pr))
                return -EINVAL;
  
 -      if (cx->entry_method == ACPI_CSTATE_FFH) {
 -              if (current_set_polling_and_test())
 -                      return -EINVAL;
 -      }
 -
        lapic_timer_state_broadcast(pr, cx, 1);
        acpi_idle_do_entry(cx);
  
@@@ -780,6 -783,18 +778,13 @@@ static int acpi_idle_enter_simple(struc
        if (unlikely(!pr))
                return -EINVAL;
  
 -      if (cx->entry_method == ACPI_CSTATE_FFH) {
 -              if (current_set_polling_and_test())
 -                      return -EINVAL;
 -      }
 -
+ #ifdef CONFIG_HOTPLUG_CPU
+       if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
+           !pr->flags.has_cst &&
+           !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
+               return acpi_idle_enter_c1(dev, drv, CPUIDLE_DRIVER_STATE_START);
+ #endif
        /*
         * Must be done before busmaster disable as we might need to
         * access HPET !
@@@ -821,6 -836,13 +826,13 @@@ static int acpi_idle_enter_bm(struct cp
        if (unlikely(!pr))
                return -EINVAL;
  
+ #ifdef CONFIG_HOTPLUG_CPU
+       if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
+           !pr->flags.has_cst &&
+           !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
+               return acpi_idle_enter_c1(dev, drv, CPUIDLE_DRIVER_STATE_START);
+ #endif
        if (!cx->bm_sts_skip && acpi_idle_bm_check()) {
                if (drv->safe_state_index >= 0) {
                        return drv->states[drv->safe_state_index].enter(dev,
                }
        }
  
 -      if (cx->entry_method == ACPI_CSTATE_FFH) {
 -              if (current_set_polling_and_test())
 -                      return -EINVAL;
 -      }
 -
        acpi_unlazy_tlb(smp_processor_id());
  
        /* Tell the scheduler that we are going deep-idle: */
@@@ -917,12 -944,6 +929,6 @@@ static int acpi_processor_setup_cpuidle
                if (!cx->valid)
                        continue;
  
- #ifdef CONFIG_HOTPLUG_CPU
-               if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
-                   !pr->flags.has_cst &&
-                   !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
-                       continue;
- #endif
                per_cpu(acpi_cstate[count], dev->cpu) = cx;
  
                count++;
                        break;
        }
  
-       dev->state_count = count;
        if (!count)
                return -EINVAL;
  
@@@ -972,13 -991,6 +976,6 @@@ static int acpi_processor_setup_cpuidle
                if (!cx->valid)
                        continue;
  
- #ifdef CONFIG_HOTPLUG_CPU
-               if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) &&
-                   !pr->flags.has_cst &&
-                   !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED))
-                       continue;
- #endif
                state = &drv->states[count];
                snprintf(state->name, CPUIDLE_NAME_LEN, "C%d", i);
                strncpy(state->desc, cx->desc, CPUIDLE_DESC_LEN);
diff --combined drivers/base/Makefile
index 870ecfd503afe147c8f32974ee465b0e30296f13,d08c9d3b1d3747edcaa1d36fb8d206b0105226ec..04b314e0fa516ad3fe89f47e9b75c9d6e541e8fa
@@@ -1,10 -1,10 +1,10 @@@
  # Makefile for the Linux device tree
  
 -obj-y                 := core.o bus.o dd.o syscore.o \
 +obj-y                 := component.o core.o bus.o dd.o syscore.o \
                           driver.o class.o platform.o \
                           cpu.o firmware.o init.o map.o devres.o \
                           attribute_container.o transport_class.o \
-                          topology.o
+                          topology.o container.o
  obj-$(CONFIG_DEVTMPFS)        += devtmpfs.o
  obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
  obj-y                 += power/
index 869e48297e28db8a8e0ee190281213fef1e54f10,77ae129b2d9d128f110e425d876cc28a5afc36e6..7c11ace3b3fc15638d08c2df6065e07ab83f36b8
@@@ -17,6 -17,8 +17,6 @@@
  #include <linux/slab.h>
  #include <linux/cpufreq.h>
  
 -#include <mach/regs-clock.h>
 -
  #include "exynos-cpufreq.h"
  
  static struct clk *cpu_clk;
@@@ -30,7 -32,7 +30,7 @@@ static unsigned int exynos4x12_volt_tab
  };
  
  static struct cpufreq_frequency_table exynos4x12_freq_table[] = {
-       {L0, CPUFREQ_ENTRY_INVALID},
+       {CPUFREQ_BOOST_FREQ, 1500 * 1000},
        {L1, 1400 * 1000},
        {L2, 1300 * 1000},
        {L3, 1200 * 1000},
index 5ee2ce1ad424a96a62e731126b2b59b543b535f1,86fb1a105601b2b5c48440192dc3e43f8f94b20e..5f90b82a40825d9b9f1724809a64fea3b693e408
@@@ -18,6 -18,7 +18,6 @@@
  #include <linux/cpufreq.h>
  
  #include <mach/map.h>
 -#include <mach/regs-clock.h>
  
  #include "exynos-cpufreq.h"
  
@@@ -101,12 -102,12 +101,12 @@@ static void set_clkdiv(unsigned int div
                cpu_relax();
  }
  
- static void set_apll(unsigned int new_index,
-                            unsigned int old_index)
+ static void set_apll(unsigned int index)
  {
-       unsigned int tmp, pdiv;
+       unsigned int tmp;
+       unsigned int freq = apll_freq_5250[index].freq;
  
-       /* 1. MUX_CORE_SEL = MPLL, ARMCLK uses MPLL for lock time */
+       /* MUX_CORE_SEL = MPLL, ARMCLK uses MPLL for lock time */
        clk_set_parent(moutcore, mout_mpll);
  
        do {
                tmp &= 0x7;
        } while (tmp != 0x2);
  
-       /* 2. Set APLL Lock time */
-       pdiv = ((apll_freq_5250[new_index].mps >> 8) & 0x3f);
-       __raw_writel((pdiv * 250), EXYNOS5_APLL_LOCK);
+       clk_set_rate(mout_apll, freq * 1000);
  
-       /* 3. Change PLL PMS values */
-       tmp = __raw_readl(EXYNOS5_APLL_CON0);
-       tmp &= ~((0x3ff << 16) | (0x3f << 8) | (0x7 << 0));
-       tmp |= apll_freq_5250[new_index].mps;
-       __raw_writel(tmp, EXYNOS5_APLL_CON0);
-       /* 4. wait_lock_time */
-       do {
-               cpu_relax();
-               tmp = __raw_readl(EXYNOS5_APLL_CON0);
-       } while (!(tmp & (0x1 << 29)));
-       /* 5. MUX_CORE_SEL = APLL */
+       /* MUX_CORE_SEL = APLL */
        clk_set_parent(moutcore, mout_apll);
  
        do {
                tmp = __raw_readl(EXYNOS5_CLKMUX_STATCPU);
                tmp &= (0x7 << 16);
        } while (tmp != (0x1 << 16));
- }
- static bool exynos5250_pms_change(unsigned int old_index, unsigned int new_index)
- {
-       unsigned int old_pm = apll_freq_5250[old_index].mps >> 8;
-       unsigned int new_pm = apll_freq_5250[new_index].mps >> 8;
-       return (old_pm == new_pm) ? 0 : 1;
  }
  
  static void exynos5250_set_frequency(unsigned int old_index,
                                  unsigned int new_index)
  {
-       unsigned int tmp;
        if (old_index > new_index) {
-               if (!exynos5250_pms_change(old_index, new_index)) {
-                       /* 1. Change the system clock divider values */
-                       set_clkdiv(new_index);
-                       /* 2. Change just s value in apll m,p,s value */
-                       tmp = __raw_readl(EXYNOS5_APLL_CON0);
-                       tmp &= ~(0x7 << 0);
-                       tmp |= apll_freq_5250[new_index].mps & 0x7;
-                       __raw_writel(tmp, EXYNOS5_APLL_CON0);
-               } else {
-                       /* Clock Configuration Procedure */
-                       /* 1. Change the system clock divider values */
-                       set_clkdiv(new_index);
-                       /* 2. Change the apll m,p,s value */
-                       set_apll(new_index, old_index);
-               }
+               set_clkdiv(new_index);
+               set_apll(new_index);
        } else if (old_index < new_index) {
-               if (!exynos5250_pms_change(old_index, new_index)) {
-                       /* 1. Change just s value in apll m,p,s value */
-                       tmp = __raw_readl(EXYNOS5_APLL_CON0);
-                       tmp &= ~(0x7 << 0);
-                       tmp |= apll_freq_5250[new_index].mps & 0x7;
-                       __raw_writel(tmp, EXYNOS5_APLL_CON0);
-                       /* 2. Change the system clock divider values */
-                       set_clkdiv(new_index);
-               } else {
-                       /* Clock Configuration Procedure */
-                       /* 1. Change the apll m,p,s value */
-                       set_apll(new_index, old_index);
-                       /* 2. Change the system clock divider values */
-                       set_clkdiv(new_index);
-               }
+               set_apll(new_index);
+               set_clkdiv(new_index);
        }
  }
  
@@@ -221,7 -169,6 +168,6 @@@ int exynos5250_cpufreq_init(struct exyn
        info->volt_table = exynos5250_volt_table;
        info->freq_table = exynos5250_freq_table;
        info->set_freq = exynos5250_set_frequency;
-       info->need_apll_change = exynos5250_pms_change;
  
        return 0;
  
diff --combined drivers/firmware/Kconfig
index 5a29fac951ec045fa45d9dfda6aec6b6d4557d88,a6ef6acaa1c80b0e781b7f8b71310e7093e71648..41983883cef47da740612a9966d39ec97094d593
@@@ -108,12 -108,9 +108,12 @@@ config DMI_SYSF
          under /sys/firmware/dmi when this option is enabled and
          loaded.
  
 +config DMI_SCAN_MACHINE_NON_EFI_FALLBACK
 +      bool
 +
  config ISCSI_IBFT_FIND
        bool "iSCSI Boot Firmware Table Attributes"
-       depends on X86
+       depends on X86 && ACPI
        default n
        help
          This option enables the kernel to find the region of memory
index e914f27554913ab08c903be673a5c641731058b6,d22668f7d9821c613c29b7836da21110a2aed555..d1f81f52481a40bf7a0521eca0033da057d15641
@@@ -850,37 -850,23 +850,23 @@@ static int i2c_hid_acpi_pdata(struct i2
                0xF7, 0xF6, 0xDF, 0x3C, 0x67, 0x42, 0x55, 0x45,
                0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE,
        };
-       union acpi_object params[4];
-       struct acpi_object_list input;
+       union acpi_object *obj;
        struct acpi_device *adev;
-       unsigned long long value;
        acpi_handle handle;
  
        handle = ACPI_HANDLE(&client->dev);
        if (!handle || acpi_bus_get_device(handle, &adev))
                return -ENODEV;
  
-       input.count = ARRAY_SIZE(params);
-       input.pointer = params;
-       params[0].type = ACPI_TYPE_BUFFER;
-       params[0].buffer.length = sizeof(i2c_hid_guid);
-       params[0].buffer.pointer = i2c_hid_guid;
-       params[1].type = ACPI_TYPE_INTEGER;
-       params[1].integer.value = 1;
-       params[2].type = ACPI_TYPE_INTEGER;
-       params[2].integer.value = 1; /* HID function */
-       params[3].type = ACPI_TYPE_PACKAGE;
-       params[3].package.count = 0;
-       params[3].package.elements = NULL;
-       if (ACPI_FAILURE(acpi_evaluate_integer(handle, "_DSM", &input,
-                                                               &value))) {
+       obj = acpi_evaluate_dsm_typed(handle, i2c_hid_guid, 1, 1, NULL,
+                                     ACPI_TYPE_INTEGER);
+       if (!obj) {
                dev_err(&client->dev, "device _DSM execution failed\n");
                return -ENODEV;
        }
  
-       pdata->hid_descriptor_address = value;
+       pdata->hid_descriptor_address = obj->integer.value;
+       ACPI_FREE(obj);
  
        return 0;
  }
@@@ -1061,7 -1047,6 +1047,7 @@@ static int i2c_hid_suspend(struct devic
  {
        struct i2c_client *client = to_i2c_client(dev);
  
 +      disable_irq(client->irq);
        if (device_may_wakeup(&client->dev))
                enable_irq_wake(client->irq);
  
@@@ -1076,7 -1061,6 +1062,7 @@@ static int i2c_hid_resume(struct devic
        int ret;
        struct i2c_client *client = to_i2c_client(dev);
  
 +      enable_irq(client->irq);
        ret = i2c_hid_hwreset(client);
        if (ret)
                return ret;
index 6c0e0452dd9b48c8ea0541d393c4f42e6d4efde4,282186e532909fbfdbc79274b73226fe92eca577..8e1939f564f4ae16f44d1f1b06e80744d303fa0b
@@@ -377,7 -377,16 +377,7 @@@ static int intel_idle(struct cpuidle_de
        if (!(lapic_timer_reliable_states & (1 << (cstate))))
                clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu);
  
 -      if (!current_set_polling_and_test()) {
 -
 -              if (this_cpu_has(X86_FEATURE_CLFLUSH_MONITOR))
 -                      clflush((void *)&current_thread_info()->flags);
 -
 -              __monitor((void *)&current_thread_info()->flags, 0, 0);
 -              smp_mb();
 -              if (!need_resched())
 -                      __mwait(eax, ecx);
 -      }
 +      mwait_idle_with_hints(eax, ecx);
  
        if (!(lapic_timer_reliable_states & (1 << (cstate))))
                clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu);
@@@ -635,39 -644,10 +635,10 @@@ static int __init intel_idle_cpuidle_dr
   */
  static int intel_idle_cpu_init(int cpu)
  {
-       int cstate;
        struct cpuidle_device *dev;
  
        dev = per_cpu_ptr(intel_idle_cpuidle_devices, cpu);
  
-       dev->state_count = 1;
-       for (cstate = 0; cstate < CPUIDLE_STATE_MAX; ++cstate) {
-               int num_substates, mwait_hint, mwait_cstate, mwait_substate;
-               if (cpuidle_state_table[cstate].enter == NULL)
-                       break;
-               if (cstate + 1 > max_cstate) {
-                       printk(PREFIX "max_cstate %d reached\n", max_cstate);
-                       break;
-               }
-               mwait_hint = flg2MWAIT(cpuidle_state_table[cstate].flags);
-               mwait_cstate = MWAIT_HINT2CSTATE(mwait_hint);
-               mwait_substate = MWAIT_HINT2SUBSTATE(mwait_hint);
-               /* does the state exist in CPUID.MWAIT? */
-               num_substates = (mwait_substates >> ((mwait_cstate + 1) * 4))
-                                       & MWAIT_SUBSTATE_MASK;
-               /* if sub-state in table is not enumerated by CPUID */
-               if ((mwait_substate + 1) > num_substates)
-                       continue;
-               dev->state_count += 1;
-       }
        dev->cpu = cpu;
  
        if (cpuidle_register_device(dev)) {
        if (icpu->auto_demotion_disable_flags)
                smp_call_function_single(cpu, auto_demotion_disable, NULL, 1);
  
+       if (icpu->disable_promotion_to_c1e)
+               smp_call_function_single(cpu, c1e_promotion_disable, NULL, 1);
        return 0;
  }
  
index ee26bac2d3787e2cc45aa8755ffe5db14609209e,4f0c40d405fc17fe387b21737945f08f9a071718..cd929aed3613314068ed7a4baf2bb6e5c6cb9f1f
@@@ -432,7 -432,6 +432,7 @@@ static void cleanup_bridge(struct acpip
                                        pr_err("failed to remove notify handler\n");
                        }
                }
 +              slot->flags |= SLOT_IS_GOING_AWAY;
                if (slot->slot)
                        acpiphp_unregister_hotplug_slot(slot);
        }
        mutex_lock(&bridge_mutex);
        list_del(&bridge->list);
        mutex_unlock(&bridge_mutex);
 +
 +      bridge->is_going_away = true;
  }
  
  /**
@@@ -494,7 -491,7 +494,7 @@@ static void acpiphp_bus_add(acpi_handl
  
        acpi_bus_scan(handle);
        acpi_bus_get_device(handle, &adev);
-       if (adev)
+       if (acpi_device_enumerated(adev))
                acpi_device_set_power(adev, ACPI_STATE_D0);
  }
  
@@@ -760,10 -757,6 +760,10 @@@ static void acpiphp_check_bridge(struc
  {
        struct acpiphp_slot *slot;
  
 +      /* Bail out if the bridge is going away. */
 +      if (bridge->is_going_away)
 +              return;
 +
        list_for_each_entry(slot, &bridge->slots, node) {
                struct pci_bus *bus = slot->bus;
                struct pci_dev *dev, *tmp;
@@@ -834,8 -827,6 +834,8 @@@ void acpiphp_check_host_bridge(acpi_han
        }
  }
  
 +static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot);
 +
  static void hotplug_event(acpi_handle handle, u32 type, void *data)
  {
        struct acpiphp_context *context = data;
                } else {
                        struct acpiphp_slot *slot = func->slot;
  
 +                      if (slot->flags & SLOT_IS_GOING_AWAY)
 +                              break;
 +
                        mutex_lock(&slot->crit_sect);
                        enable_slot(slot);
                        mutex_unlock(&slot->crit_sect);
                        struct acpiphp_slot *slot = func->slot;
                        int ret;
  
 +                      if (slot->flags & SLOT_IS_GOING_AWAY)
 +                              break;
 +
                        /*
                         * Check if anything has changed in the slot and rescan
                         * from the parent if that's the case.
@@@ -915,11 -900,9 +915,11 @@@ static void hotplug_event_work(void *da
        acpi_handle handle = context->handle;
  
        acpi_scan_lock_acquire();
 +      pci_lock_rescan_remove();
  
        hotplug_event(handle, type, context);
  
 +      pci_unlock_rescan_remove();
        acpi_scan_lock_release();
        acpi_evaluate_hotplug_ost(handle, type, ACPI_OST_SC_SUCCESS, NULL);
        put_bridge(context->func.parent);
@@@ -1087,19 -1070,12 +1087,19 @@@ void acpiphp_remove_slots(struct pci_bu
   */
  int acpiphp_enable_slot(struct acpiphp_slot *slot)
  {
 +      pci_lock_rescan_remove();
 +
 +      if (slot->flags & SLOT_IS_GOING_AWAY)
 +              return -ENODEV;
 +
        mutex_lock(&slot->crit_sect);
        /* configure all functions */
        if (!(slot->flags & SLOT_ENABLED))
                enable_slot(slot);
  
        mutex_unlock(&slot->crit_sect);
 +
 +      pci_unlock_rescan_remove();
        return 0;
  }
  
   * acpiphp_disable_and_eject_slot - power off and eject slot
   * @slot: ACPI PHP slot
   */
 -int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot)
 +static int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot)
  {
        struct acpiphp_func *func;
 -      int retval = 0;
 +
 +      if (slot->flags & SLOT_IS_GOING_AWAY)
 +              return -ENODEV;
  
        mutex_lock(&slot->crit_sect);
  
                }
  
        mutex_unlock(&slot->crit_sect);
 -      return retval;
 +      return 0;
  }
  
 +int acpiphp_disable_slot(struct acpiphp_slot *slot)
 +{
 +      int ret;
 +
 +      pci_lock_rescan_remove();
 +      ret = acpiphp_disable_and_eject_slot(slot);
 +      pci_unlock_rescan_remove();
 +      return ret;
 +}
  
  /*
   * slot enabled:  1
@@@ -1152,6 -1117,7 +1152,6 @@@ u8 acpiphp_get_power_status(struct acpi
        return (slot->flags & SLOT_ENABLED);
  }
  
 -
  /*
   * latch   open:  1
   * latch closed:  0
@@@ -1161,6 -1127,7 +1161,6 @@@ u8 acpiphp_get_latch_status(struct acpi
        return !(get_slot_status(slot) & ACPI_STA_DEVICE_UI);
  }
  
 -
  /*
   * adapter presence : 1
   *          absence : 0
index ccb0925bcd7bdd2d207fad462ed63a6b0b7f8966,24e147cae667e33dd46346dddeb994e96e868f4e..88b37cad4b35eed91fa48b8fbcecc569744f7a45
@@@ -43,6 -43,7 +43,6 @@@
  extern bool pciehp_poll_mode;
  extern int pciehp_poll_time;
  extern bool pciehp_debug;
 -extern bool pciehp_force;
  
  #define dbg(format, arg...)                                           \
  do {                                                                  \
@@@ -139,15 -140,15 +139,15 @@@ struct controller *pcie_init(struct pci
  int pcie_init_notification(struct controller *ctrl);
  int pciehp_enable_slot(struct slot *p_slot);
  int pciehp_disable_slot(struct slot *p_slot);
 -int pcie_enable_notification(struct controller *ctrl);
 +void pcie_enable_notification(struct controller *ctrl);
  int pciehp_power_on_slot(struct slot *slot);
 -int pciehp_power_off_slot(struct slot *slot);
 -int pciehp_get_power_status(struct slot *slot, u8 *status);
 -int pciehp_get_attention_status(struct slot *slot, u8 *status);
 +void pciehp_power_off_slot(struct slot *slot);
 +void pciehp_get_power_status(struct slot *slot, u8 *status);
 +void pciehp_get_attention_status(struct slot *slot, u8 *status);
  
 -int pciehp_set_attention_status(struct slot *slot, u8 status);
 -int pciehp_get_latch_status(struct slot *slot, u8 *status);
 -int pciehp_get_adapter_status(struct slot *slot, u8 *status);
 +void pciehp_set_attention_status(struct slot *slot, u8 status);
 +void pciehp_get_latch_status(struct slot *slot, u8 *status);
 +void pciehp_get_adapter_status(struct slot *slot, u8 *status);
  int pciehp_query_power_fault(struct slot *slot);
  void pciehp_green_led_on(struct slot *slot);
  void pciehp_green_led_off(struct slot *slot);
@@@ -162,8 -163,6 +162,6 @@@ static inline const char *slot_name(str
  }
  
  #ifdef CONFIG_ACPI
- #include <acpi/acpi.h>
- #include <acpi/acpi_bus.h>
  #include <linux/pci-acpi.h>
  
  void __init pciehp_acpi_slot_detection_init(void);
diff --combined drivers/pci/ioapic.c
index 2c2930ea06ad714d26b954d49bf14aa5eacae02d,2122b2bf006f37576d5bb2e3a22190c5ccacba00..6b2b7dddbbdb6a3c55b30aeaf9f6227ce117b57e
@@@ -20,7 -20,6 +20,6 @@@
  #include <linux/module.h>
  #include <linux/acpi.h>
  #include <linux/slab.h>
- #include <acpi/acpi_bus.h>
  
  struct ioapic {
        acpi_handle     handle;
@@@ -113,10 -112,6 +112,10 @@@ static struct pci_driver ioapic_driver 
        .remove         = ioapic_remove,
  };
  
 -module_pci_driver(ioapic_driver);
 +static int __init ioapic_init(void)
 +{
 +      return pci_register_driver(&ioapic_driver);
 +}
 +module_init(ioapic_init);
  
  MODULE_LICENSE("GPL");
diff --combined drivers/pci/pci-acpi.c
index 2bdbc00802041454a8258792b3cbbe617cffd0b6,733a8222b13fcd9b554812beba2b0c7541bbe201..f49abef884852d3780b1d0fdb354257fee0235bf
@@@ -12,9 -12,6 +12,6 @@@
  #include <linux/pci.h>
  #include <linux/module.h>
  #include <linux/pci-aspm.h>
- #include <acpi/acpi.h>
- #include <acpi/acpi_bus.h>
  #include <linux/pci-acpi.h>
  #include <linux/pm_runtime.h>
  #include <linux/pm_qos.h>
@@@ -306,10 -303,10 +303,10 @@@ void acpi_pci_remove_bus(struct pci_bu
  }
  
  /* ACPI bus type */
- static int acpi_pci_find_device(struct device *dev, acpi_handle *handle)
+ static struct acpi_device *acpi_pci_find_companion(struct device *dev)
  {
        struct pci_dev *pci_dev = to_pci_dev(dev);
-       bool is_bridge;
+       bool check_children;
        u64 addr;
  
        /*
         * is set only after acpi_pci_find_device() has been called for the
         * given device.
         */
-       is_bridge = pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE
+       check_children = pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE
                        || pci_dev->hdr_type == PCI_HEADER_TYPE_CARDBUS;
        /* Please ref to ACPI spec for the syntax of _ADR */
        addr = (PCI_SLOT(pci_dev->devfn) << 16) | PCI_FUNC(pci_dev->devfn);
-       *handle = acpi_find_child(ACPI_HANDLE(dev->parent), addr, is_bridge);
-       if (!*handle)
-               return -ENODEV;
-       return 0;
+       return acpi_find_child_device(ACPI_COMPANION(dev->parent), addr,
+                                     check_children);
  }
  
  static void pci_acpi_setup(struct device *dev)
@@@ -361,13 -356,13 +356,13 @@@ static void pci_acpi_cleanup(struct dev
  
  static bool pci_acpi_bus_match(struct device *dev)
  {
 -      return dev->bus == &pci_bus_type;
 +      return dev_is_pci(dev);
  }
  
  static struct acpi_bus_type acpi_pci_bus = {
        .name = "PCI",
        .match = pci_acpi_bus_match,
-       .find_device = acpi_pci_find_device,
+       .find_companion = acpi_pci_find_companion,
        .setup = pci_acpi_setup,
        .cleanup = pci_acpi_cleanup,
  };
diff --combined drivers/pci/pci-label.c
index 6f5d343d251ca444b524476ace8cbe0b1491534e,d2d1ceccad4b58c156fd9506987e313fa3b0bd3a..45113daaa778f384e7796a3ca43b6304e30dbf84
  #include <linux/nls.h>
  #include <linux/acpi.h>
  #include <linux/pci-acpi.h>
- #include <acpi/acpi_bus.h>
  #include "pci.h"
  
  #define       DEVICE_LABEL_DSM        0x07
  
 -#ifndef CONFIG_DMI
 -
 -static inline int
 -pci_create_smbiosname_file(struct pci_dev *pdev)
 -{
 -      return -1;
 -}
 -
 -static inline void
 -pci_remove_smbiosname_file(struct pci_dev *pdev)
 -{
 -}
 -
 -#else
 -
 +#ifdef CONFIG_DMI
  enum smbios_attr_enum {
        SMBIOS_ATTR_NONE = 0,
        SMBIOS_ATTR_LABEL_SHOW,
@@@ -142,27 -155,37 +141,26 @@@ pci_remove_smbiosname_file(struct pci_d
  {
        sysfs_remove_group(&pdev->dev.kobj, &smbios_attr_group);
  }
 -
 -#endif
 -
 -#ifndef CONFIG_ACPI
 -
 -static inline int
 -pci_create_acpi_index_label_files(struct pci_dev *pdev)
 -{
 -      return -1;
 -}
 -
 +#else
  static inline int
 -pci_remove_acpi_index_label_files(struct pci_dev *pdev)
 +pci_create_smbiosname_file(struct pci_dev *pdev)
  {
        return -1;
  }
  
 -static inline bool
 -device_has_dsm(struct device *dev)
 +static inline void
 +pci_remove_smbiosname_file(struct pci_dev *pdev)
  {
 -      return false;
  }
 +#endif
  
 -#else
 -
 +#ifdef CONFIG_ACPI
  static const char device_label_dsm_uuid[] = {
        0xD0, 0x37, 0xC9, 0xE5, 0x53, 0x35, 0x7A, 0x4D,
        0x91, 0x17, 0xEA, 0x4D, 0x19, 0xC3, 0x43, 0x4D
  };
  
  enum acpi_attr_enum {
-       ACPI_ATTR_NONE = 0,
        ACPI_ATTR_LABEL_SHOW,
        ACPI_ATTR_INDEX_SHOW,
  };
  static void dsm_label_utf16s_to_utf8s(union acpi_object *obj, char *buf)
  {
        int len;
-       len = utf16s_to_utf8s((const wchar_t *)obj->
-                             package.elements[1].string.pointer,
-                             obj->package.elements[1].string.length,
+       len = utf16s_to_utf8s((const wchar_t *)obj->string.pointer,
+                             obj->string.length,
                              UTF16_LITTLE_ENDIAN,
                              buf, PAGE_SIZE);
        buf[len] = '\n';
  }
  
  static int
- dsm_get_label(acpi_handle handle, int func,
-             struct acpi_buffer *output,
-             char *buf, enum acpi_attr_enum attribute)
+ dsm_get_label(struct device *dev, char *buf, enum acpi_attr_enum attr)
  {
-       struct acpi_object_list input;
-       union acpi_object params[4];
-       union acpi_object *obj;
-       int len = 0;
-       int err;
-       input.count = 4;
-       input.pointer = params;
-       params[0].type = ACPI_TYPE_BUFFER;
-       params[0].buffer.length = sizeof(device_label_dsm_uuid);
-       params[0].buffer.pointer = (char *)device_label_dsm_uuid;
-       params[1].type = ACPI_TYPE_INTEGER;
-       params[1].integer.value = 0x02;
-       params[2].type = ACPI_TYPE_INTEGER;
-       params[2].integer.value = func;
-       params[3].type = ACPI_TYPE_PACKAGE;
-       params[3].package.count = 0;
-       params[3].package.elements = NULL;
-       err = acpi_evaluate_object(handle, "_DSM", &input, output);
-       if (err)
+       acpi_handle handle;
+       union acpi_object *obj, *tmp;
+       int len = -1;
+       handle = ACPI_HANDLE(dev);
+       if (!handle)
                return -1;
  
-       obj = (union acpi_object *)output->pointer;
-       switch (obj->type) {
-       case ACPI_TYPE_PACKAGE:
-               if (obj->package.count != 2)
-                       break;
-               len = obj->package.elements[0].integer.value;
-               if (buf) {
-                       if (attribute == ACPI_ATTR_INDEX_SHOW)
-                               scnprintf(buf, PAGE_SIZE, "%llu\n",
-                               obj->package.elements[0].integer.value);
-                       else if (attribute == ACPI_ATTR_LABEL_SHOW)
-                               dsm_label_utf16s_to_utf8s(obj, buf);
-                       kfree(output->pointer);
-                       return strlen(buf);
-               }
-               kfree(output->pointer);
-               return len;
-       break;
-       default:
-               kfree(output->pointer);
+       obj = acpi_evaluate_dsm(handle, device_label_dsm_uuid, 0x2,
+                               DEVICE_LABEL_DSM, NULL);
+       if (!obj)
+               return -1;
+       tmp = obj->package.elements;
+       if (obj->type == ACPI_TYPE_PACKAGE && obj->package.count == 2 &&
+           tmp[0].type == ACPI_TYPE_INTEGER &&
+           tmp[1].type == ACPI_TYPE_STRING) {
+               /*
+                * The second string element is optional even when
+                * this _DSM is implemented; when not implemented,
+                * this entry must return a null string.
+                */
+               if (attr == ACPI_ATTR_INDEX_SHOW)
+                       scnprintf(buf, PAGE_SIZE, "%llu\n", tmp->integer.value);
+               else if (attr == ACPI_ATTR_LABEL_SHOW)
+                       dsm_label_utf16s_to_utf8s(tmp + 1, buf);
+               len = strlen(buf) > 0 ? strlen(buf) : -1;
        }
-       return -1;
+       ACPI_FREE(obj);
+       return len;
  }
  
  static bool
  device_has_dsm(struct device *dev)
  {
        acpi_handle handle;
-       struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
  
        handle = ACPI_HANDLE(dev);
        if (!handle)
-               return FALSE;
+               return false;
  
-       if (dsm_get_label(handle, DEVICE_LABEL_DSM, &output, NULL,
-                         ACPI_ATTR_NONE) > 0)
-               return TRUE;
-       return FALSE;
+       return !!acpi_check_dsm(handle, device_label_dsm_uuid, 0x2,
+                               1 << DEVICE_LABEL_DSM);
  }
  
  static umode_t
@@@ -266,44 -266,13 +241,13 @@@ acpi_index_string_exist(struct kobject 
  static ssize_t
  acpilabel_show(struct device *dev, struct device_attribute *attr, char *buf)
  {
-       struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
-       acpi_handle handle;
-       int length;
-       handle = ACPI_HANDLE(dev);
-       if (!handle)
-               return -1;
-       length = dsm_get_label(handle, DEVICE_LABEL_DSM,
-                              &output, buf, ACPI_ATTR_LABEL_SHOW);
-       if (length < 1)
-               return -1;
-       return length;
+       return dsm_get_label(dev, buf, ACPI_ATTR_LABEL_SHOW);
  }
  
  static ssize_t
  acpiindex_show(struct device *dev, struct device_attribute *attr, char *buf)
  {
-       struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
-       acpi_handle handle;
-       int length;
-       handle = ACPI_HANDLE(dev);
-       if (!handle)
-               return -1;
-       length = dsm_get_label(handle, DEVICE_LABEL_DSM,
-                              &output, buf, ACPI_ATTR_INDEX_SHOW);
-       if (length < 0)
-               return -1;
-       return length;
+       return dsm_get_label(dev, buf, ACPI_ATTR_INDEX_SHOW);
  }
  
  static struct device_attribute acpi_attr_label = {
@@@ -339,24 -308,6 +283,24 @@@ pci_remove_acpi_index_label_files(struc
        sysfs_remove_group(&pdev->dev.kobj, &acpi_attr_group);
        return 0;
  }
 +#else
 +static inline int
 +pci_create_acpi_index_label_files(struct pci_dev *pdev)
 +{
 +      return -1;
 +}
 +
 +static inline int
 +pci_remove_acpi_index_label_files(struct pci_dev *pdev)
 +{
 +      return -1;
 +}
 +
 +static inline bool
 +device_has_dsm(struct device *dev)
 +{
 +      return false;
 +}
  #endif
  
  void pci_create_firmware_label_files(struct pci_dev *pdev)
index 6fe268f6af91f806314773bc6f0b3d0a844af2ba,df7ecb9ecd9d7c95b66cdbc79f4f17bfaf4bf49c..109f6383040cf99b99430a44a989c129660de8d3
@@@ -45,8 -45,7 +45,7 @@@
  #include <linux/seq_file.h>
  #include <linux/platform_device.h>
  #include <linux/thermal.h>
- #include <acpi/acpi_bus.h>
- #include <acpi/acpi_drivers.h>
+ #include <linux/acpi.h>
  #include <acpi/video.h>
  
  #include "asus-wmi.h"
@@@ -606,7 -605,6 +605,7 @@@ static void asus_rfkill_hotplug(struct 
        mutex_unlock(&asus->wmi_lock);
  
        mutex_lock(&asus->hotplug_lock);
 +      pci_lock_rescan_remove();
  
        if (asus->wlan.rfkill)
                rfkill_set_sw_state(asus->wlan.rfkill, blocked);
        }
  
  out_unlock:
 +      pci_unlock_rescan_remove();
        mutex_unlock(&asus->hotplug_lock);
  }
  
index 7029cba7025b3f51e592765d4ec71e5477073f7e,bcde1ea02dd36ecb7024292cf03187edeab1fdd6..ed69ec5f36f77b73afb23ff5199c4d2885f29cbe
@@@ -28,8 -28,7 +28,7 @@@
  #include <linux/hwmon.h>
  #include <linux/hwmon-sysfs.h>
  #include <linux/slab.h>
- #include <acpi/acpi_drivers.h>
- #include <acpi/acpi_bus.h>
+ #include <linux/acpi.h>
  #include <linux/uaccess.h>
  #include <linux/input.h>
  #include <linux/input/sparse-keymap.h>
@@@ -592,7 -591,6 +591,7 @@@ static void eeepc_rfkill_hotplug(struc
                rfkill_set_sw_state(eeepc->wlan_rfkill, blocked);
  
        mutex_lock(&eeepc->hotplug_lock);
 +      pci_lock_rescan_remove();
  
        if (eeepc->hotplug_slot) {
                port = acpi_get_pci_dev(handle);
@@@ -650,7 -648,6 +649,7 @@@ out_put_dev
        }
  
  out_unlock:
 +      pci_unlock_rescan_remove();
        mutex_unlock(&eeepc->hotplug_lock);
  }
  
index d7cb822d6eab5fd7a04b1557bb754b6c084a6037,f0155a39aaa3b686f1b392c7d59781a8f76fda5d..5ca4070b1f38c296e83dc535f4f095498c6f1839
@@@ -16,7 -16,6 +16,6 @@@
  #include <linux/acpi.h>
  #include <linux/pci.h>
  #include <linux/usb/hcd.h>
- #include <acpi/acpi_bus.h>
  
  #include "usb.h"
  
@@@ -92,7 -91,7 +91,7 @@@ static int usb_acpi_check_port_connect_
        int ret = 0;
  
        /*
 -       * Accoding to ACPI Spec 9.13. PLD indicates whether usb port is
 +       * According to ACPI Spec 9.13. PLD indicates whether usb port is
         * user visible and _UPC indicates whether it is connectable. If
         * the port was visible and connectable, it could be freely connected
         * and disconnected with USB devices. If no visible and connectable,
@@@ -127,7 -126,7 +126,7 @@@ out
        return ret;
  }
  
- static int usb_acpi_find_device(struct device *dev, acpi_handle *handle)
+ static struct acpi_device *usb_acpi_find_companion(struct device *dev)
  {
        struct usb_device *udev;
        acpi_handle *parent_handle;
                                break;
                        }
  
-                       return -ENODEV;
+                       return NULL;
                }
  
                /* root hub's parent is the usb hcd. */
-               parent_handle = ACPI_HANDLE(dev->parent);
-               *handle = acpi_get_child(parent_handle, udev->portnum);
-               if (!*handle)
-                       return -ENODEV;
-               return 0;
+               return acpi_find_child_device(ACPI_COMPANION(dev->parent),
+                                             udev->portnum, false);
        } else if (is_usb_port(dev)) {
+               struct acpi_device *adev = NULL;
                sscanf(dev_name(dev), "port%d", &port_num);
                /* Get the struct usb_device point of port's hub */
                udev = to_usb_device(dev->parent->parent);
  
                        raw_port_num = usb_hcd_find_raw_port_number(hcd,
                                port_num);
-                       *handle = acpi_get_child(ACPI_HANDLE(&udev->dev),
-                               raw_port_num);
-                       if (!*handle)
-                               return -ENODEV;
+                       adev = acpi_find_child_device(ACPI_COMPANION(&udev->dev),
+                                                     raw_port_num, false);
+                       if (!adev)
+                               return NULL;
                } else {
                        parent_handle =
                                usb_get_hub_port_acpi_handle(udev->parent,
                                udev->portnum);
                        if (!parent_handle)
-                               return -ENODEV;
+                               return NULL;
  
-                       *handle = acpi_get_child(parent_handle, port_num);
-                       if (!*handle)
-                               return -ENODEV;
+                       acpi_bus_get_device(parent_handle, &adev);
+                       adev = acpi_find_child_device(adev, port_num, false);
+                       if (!adev)
+                               return NULL;
                }
-               usb_acpi_check_port_connect_type(udev, *handle, port_num);
-       } else
-               return -ENODEV;
+               usb_acpi_check_port_connect_type(udev, adev->handle, port_num);
+               return adev;
+       }
  
-       return 0;
+       return NULL;
  }
  
  static bool usb_acpi_bus_match(struct device *dev)
  static struct acpi_bus_type usb_acpi_bus = {
        .name = "USB",
        .match = usb_acpi_bus_match,
-       .find_device = usb_acpi_find_device,
+       .find_companion = usb_acpi_find_companion,
  };
  
  int usb_acpi_register(void)
diff --combined init/main.c
index f333385d9a4f3cd0550c48e34e6925ca4a27ac36,b6d93c84015446a76a214f95a87ba875ed306dc8..3f1f4e4b61f7618452a8c1a93e298bb409c2e054
@@@ -99,6 -99,10 +99,6 @@@ extern void radix_tree_init(void)
  static inline void mark_rodata_ro(void) { }
  #endif
  
 -#ifdef CONFIG_TC
 -extern void tc_init(void);
 -#endif
 -
  /*
   * Debug helper: via this flag we know that we are in 'early bootup code'
   * where only the boot processor is running with IRQ disabled.  This means
@@@ -278,7 -282,7 +278,7 @@@ static int __init unknown_bootoption(ch
                unsigned int i;
                for (i = 0; envp_init[i]; i++) {
                        if (i == MAX_INIT_ENVS) {
 -                              panic_later = "Too many boot env vars at `%s'";
 +                              panic_later = "env";
                                panic_param = param;
                        }
                        if (!strncmp(param, envp_init[i], val - param))
                unsigned int i;
                for (i = 0; argv_init[i]; i++) {
                        if (i == MAX_INIT_ARGS) {
 -                              panic_later = "Too many boot init vars at `%s'";
 +                              panic_later = "init";
                                panic_param = param;
                        }
                }
@@@ -351,11 -355,9 +351,11 @@@ static inline void smp_prepare_cpus(uns
   */
  static void __init setup_command_line(char *command_line)
  {
 -      saved_command_line = alloc_bootmem(strlen (boot_command_line)+1);
 -      initcall_command_line = alloc_bootmem(strlen (boot_command_line)+1);
 -      static_command_line = alloc_bootmem(strlen (command_line)+1);
 +      saved_command_line =
 +              memblock_virt_alloc(strlen(boot_command_line) + 1, 0);
 +      initcall_command_line =
 +              memblock_virt_alloc(strlen(boot_command_line) + 1, 0);
 +      static_command_line = memblock_virt_alloc(strlen(command_line) + 1, 0);
        strcpy (saved_command_line, boot_command_line);
        strcpy (static_command_line, command_line);
  }
@@@ -474,7 -476,7 +474,7 @@@ static void __init mm_init(void
        mem_init();
        kmem_cache_init();
        percpu_init_late();
 -      pgtable_cache_init();
 +      pgtable_init();
        vmalloc_init();
  }
  
@@@ -563,6 -565,7 +563,7 @@@ asmlinkage void __init start_kernel(voi
        init_timers();
        hrtimers_init();
        softirq_init();
+       acpi_early_init();
        timekeeping_init();
        time_init();
        sched_clock_postinit();
         */
        console_init();
        if (panic_later)
 -              panic(panic_later, panic_param);
 +              panic("Too many boot %s vars at `%s'", panic_later,
 +                    panic_param);
  
        lockdep_info();
  
  
        check_bugs();
  
-       acpi_early_init(); /* before LAPIC and SMP init */
        sfi_init_late();
  
        if (efi_enabled(EFI_RUNTIME_SERVICES)) {
diff --combined tools/Makefile
index 927cd46d36dcbd98fb29676b0da0cb4da8eb4793,ecdc2f84953b926613c4c4bdfc5427f369fd1d26..feec3ad5fd09862a66ef64dc3fe647eb07f7a236
@@@ -3,6 -3,7 +3,7 @@@ include scripts/Makefile.includ
  help:
        @echo 'Possible targets:'
        @echo ''
+       @echo '  acpi       - ACPI tools'
        @echo '  cgroup     - cgroup tools'
        @echo '  cpupower   - a tool for all things x86 CPU power'
        @echo '  firewire   - the userspace part of nosy, an IEEE-1394 traffic sniffer'
        @echo '    the respective build directory.'
        @echo '  clean: a summary clean target to clean _all_ folders'
  
+ acpi: FORCE
+       $(call descend,power/$@)
  cpupower: FORCE
        $(call descend,power/$@)
  
  cgroup firewire guest usb virtio vm net: FORCE
        $(call descend,$@)
  
 -liblk: FORCE
 -      $(call descend,lib/lk)
 +libapikfs: FORCE
 +      $(call descend,lib/api)
  
 -perf: liblk FORCE
 +perf: libapikfs FORCE
        $(call descend,$@)
  
  selftests: FORCE
@@@ -54,6 -58,9 +58,9 @@@ turbostat x86_energy_perf_policy: FORC
  tmon: FORCE
        $(call descend,thermal/$@)
  
+ acpi_install:
+       $(call descend,power/$(@:_install=),install)
  cpupower_install:
        $(call descend,power/$(@:_install=),install)
  
@@@ -69,21 -76,24 +76,24 @@@ turbostat_install x86_energy_perf_polic
  tmon_install:
        $(call descend,thermal/$(@:_install=),install)
  
- install: cgroup_install cpupower_install firewire_install lguest_install \
+ install: acpi_install cgroup_install cpupower_install firewire_install lguest_install \
                perf_install selftests_install turbostat_install usb_install \
                virtio_install vm_install net_install x86_energy_perf_policy_install \
        tmon
  
+ acpi_clean:
+       $(call descend,power/acpi,clean)
  cpupower_clean:
        $(call descend,power/cpupower,clean)
  
  cgroup_clean firewire_clean lguest_clean usb_clean virtio_clean vm_clean net_clean:
        $(call descend,$(@:_clean=),clean)
  
 -liblk_clean:
 -      $(call descend,lib/lk,clean)
 +libapikfs_clean:
 +      $(call descend,lib/api,clean)
  
 -perf_clean: liblk_clean
 +perf_clean: libapikfs_clean
        $(call descend,$(@:_clean=),clean)
  
  selftests_clean:
@@@ -95,8 -105,8 +105,8 @@@ turbostat_clean x86_energy_perf_policy_
  tmon_clean:
        $(call descend,thermal/tmon,clean)
  
- clean: cgroup_clean cpupower_clean firewire_clean lguest_clean perf_clean \
-               selftests_clean turbostat_clean usb_clean virtio_clean \
+ clean: acpi_clean cgroup_clean cpupower_clean firewire_clean lguest_clean \
+               perf_clean selftests_clean turbostat_clean usb_clean virtio_clean \
                vm_clean net_clean x86_energy_perf_policy_clean tmon_clean
  
  .PHONY: FORCE