Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Jan 2011 04:15:35 +0000 (20:15 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Jan 2011 04:15:35 +0000 (20:15 -0800)
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (59 commits)
  ACPI / PM: Fix build problems for !CONFIG_ACPI related to NVS rework
  ACPI: fix resource check message
  ACPI / Battery: Update information on info notification and resume
  ACPI: Drop device flag wake_capable
  ACPI: Always check if _PRW is present before trying to evaluate it
  ACPI / PM: Check status of power resources under mutexes
  ACPI / PM: Rename acpi_power_off_device()
  ACPI / PM: Drop acpi_power_nocheck
  ACPI / PM: Drop acpi_bus_get_power()
  Platform / x86: Make fujitsu_laptop use acpi_bus_update_power()
  ACPI / Fan: Rework the handling of power resources
  ACPI / PM: Register power resource devices as soon as they are needed
  ACPI / PM: Register acpi_power_driver early
  ACPI / PM: Add function for updating device power state consistently
  ACPI / PM: Add function for device power state initialization
  ACPI / PM: Introduce __acpi_bus_get_power()
  ACPI / PM: Introduce function for refcounting device power resources
  ACPI / PM: Add functions for manipulating lists of power resources
  ACPI / PM: Prevent acpi_power_get_inferred_state() from making changes
  ACPICA: Update version to 20101209
  ...

1  2 
Documentation/feature-removal-schedule.txt
Documentation/kernel-parameters.txt
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/dumpstack.c
drivers/acpi/sleep.c
drivers/acpi/video.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/platform/x86/fujitsu-laptop.c
include/linux/suspend.h
kernel/power/Makefile
mm/vmalloc.c

@@@ -97,38 -97,36 +97,38 @@@ Who:       Pavel Machek <pavel@ucw.cz
  
  ---------------------------
  
 -What: Video4Linux API 1 ioctls and from Video devices.
 -When: kernel 2.6.38
 -Files:        include/linux/videodev.h
 -Check:        include/linux/videodev.h
 -Why:  V4L1 AP1 was replaced by V4L2 API during migration from 2.4 to 2.6
 -      series. The old API have lots of drawbacks and don't provide enough
 -      means to work with all video and audio standards. The newer API is
 -      already available on the main drivers and should be used instead.
 -      Newer drivers should use v4l_compat_translate_ioctl function to handle
 -      old calls, replacing to newer ones.
 -      Decoder iocts are using internally to allow video drivers to
 -      communicate with video decoders. This should also be improved to allow
 -      V4L2 calls being translated into compatible internal ioctls.
 -      Compatibility ioctls will be provided, for a while, via 
 -      v4l1-compat module. 
 -Who:  Mauro Carvalho Chehab <mchehab@infradead.org>
 -
 ----------------------------
 -
  What: Video4Linux obsolete drivers using V4L1 API
 -When: kernel 2.6.38
 -Files:        drivers/staging/cpia/* drivers/staging/stradis/*
 -Check:        drivers/staging/cpia/cpia.c drivers/staging/stradis/stradis.c
 +When: kernel 2.6.39
 +Files:        drivers/staging/se401/* drivers/staging/usbvideo/*
 +Check:        drivers/staging/se401/se401.c drivers/staging/usbvideo/usbvideo.c
  Why:  There are some drivers still using V4L1 API, despite all efforts we've done
        to migrate. Those drivers are for obsolete hardware that the old maintainer
        didn't care (or not have the hardware anymore), and that no other developer
        could find any hardware to buy. They probably have no practical usage today,
        and people with such old hardware could probably keep using an older version
 -      of the kernel. Those drivers will be moved to staging on 2.6.37 and, if nobody
 -      care enough to port and test them with V4L2 API, they'll be removed on 2.6.38.
 +      of the kernel. Those drivers will be moved to staging on 2.6.38 and, if nobody
 +      cares enough to port and test them with V4L2 API, they'll be removed on 2.6.39.
 +Who:  Mauro Carvalho Chehab <mchehab@infradead.org>
 +
 +---------------------------
 +
 +What: Video4Linux: Remove obsolete ioctl's
 +When: kernel 2.6.39
 +Files:        include/media/videodev2.h
 +Why:  Some ioctl's were defined wrong on 2.6.2 and 2.6.6, using the wrong
 +      type of R/W arguments. They were fixed, but the old ioctl names are
 +      still there, maintained to avoid breaking binary compatibility:
 +        #define VIDIOC_OVERLAY_OLD    _IOWR('V', 14, int)
 +        #define VIDIOC_S_PARM_OLD     _IOW('V', 22, struct v4l2_streamparm)
 +        #define VIDIOC_S_CTRL_OLD     _IOW('V', 28, struct v4l2_control)
 +        #define VIDIOC_G_AUDIO_OLD    _IOWR('V', 33, struct v4l2_audio)
 +        #define VIDIOC_G_AUDOUT_OLD   _IOWR('V', 49, struct v4l2_audioout)
 +        #define VIDIOC_CROPCAP_OLD    _IOR('V', 58, struct v4l2_cropcap)
 +      There's no sense on preserving those forever, as it is very doubtful
 +      that someone would try to use a such old binary with a modern kernel.
 +      Removing them will allow us to remove some magic done at the V4L ioctl
 +      handler.
 +
  Who:  Mauro Carvalho Chehab <mchehab@infradead.org>
  
  ---------------------------
@@@ -193,20 -191,6 +193,20 @@@ Why:     /proc/<pid>/oom_adj allows userspa
  
  ---------------------------
  
 +What: CS5535/CS5536 obsolete GPIO driver
 +When: June 2011
 +Files:        drivers/staging/cs5535_gpio/*
 +Check:        drivers/staging/cs5535_gpio/cs5535_gpio.c
 +Why:  A newer driver replaces this; it is drivers/gpio/cs5535-gpio.c, and
 +      integrates with the Linux GPIO subsystem.  The old driver has been
 +      moved to staging, and will be removed altogether around 2.6.40.
 +      Please test the new driver, and ensure that the functionality you
 +      need and any bugfixes from the old driver are available in the new
 +      one.
 +Who:  Andres Salomon <dilinger@queued.net>
 +
 +--------------------------
 +
  What: remove EXPORT_SYMBOL(kernel_thread)
  When: August 2006
  Files:        arch/*/kernel/*_ksyms.c
@@@ -248,6 -232,17 +248,17 @@@ Who:     Zhang Rui <rui.zhang@intel.com
  
  ---------------------------
  
+ What: CONFIG_ACPI_PROCFS_POWER
+ When: 2.6.39
+ Why:  sysfs I/F for ACPI power devices, including AC and Battery,
+         has been working in upstream kenrel since 2.6.24, Sep 2007.
+       In 2.6.37, we make the sysfs I/F always built in and this option
+       disabled by default.
+       Remove this option and the ACPI power procfs interface in 2.6.39.
+ Who:  Zhang Rui <rui.zhang@intel.com>
+ ---------------------------
  What: /proc/acpi/button
  When: August 2007
  Why:  /proc/acpi/button has been replaced by events to the input layer
@@@ -580,23 -575,3 +591,23 @@@ Why:     This field is deprecated. I2C devi
  Who:  Jean Delvare <khali@linux-fr.org>
  
  ----------------------------
 +
 +What: cancel_rearming_delayed_work[queue]()
 +When: 2.6.39
 +
 +Why:  The functions have been superceded by cancel_delayed_work_sync()
 +      quite some time ago.  The conversion is trivial and there is no
 +      in-kernel user left.
 +Who:  Tejun Heo <tj@kernel.org>
 +
 +----------------------------
 +
 +What: Legacy, non-standard chassis intrusion detection interface.
 +When: June 2011
 +Why:  The adm9240, w83792d and w83793 hardware monitoring drivers have
 +      legacy interfaces for chassis intrusion detection. A standard
 +      interface has been added to each driver, so the legacy interface
 +      can be removed.
 +Who:  Jean Delvare <khali@linux-fr.org>
 +
 +----------------------------
@@@ -199,11 -199,6 +199,6 @@@ and is between 256 and 4096 characters
                        unusable.  The "log_buf_len" parameter may be useful
                        if you need to capture more output.
  
-       acpi_display_output=    [HW,ACPI]
-                       acpi_display_output=vendor
-                       acpi_display_output=video
-                       See above.
        acpi_irq_balance [HW,ACPI]
                        ACPI will balance active IRQs
                        default in APIC mode
        bttv.pll=       See Documentation/video4linux/bttv/Insmod-options
        bttv.tuner=     and Documentation/video4linux/bttv/CARDLIST
  
 +      bulk_remove=off [PPC]  This parameter disables the use of the pSeries
 +                      firmware feature for flushing multiple hpte entries
 +                      at a time.
 +
        c101=           [NET] Moxa C101 synchronous serial card
  
        cachesize=      [BUGS=X86-32] Override level 2 CPU cache size detection.
  
        dscc4.setup=    [NET]
  
 -      dynamic_printk  Enables pr_debug()/dev_dbg() calls if
 -                      CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
 -                      These can also be switched on/off via
 -                      <debugfs>/dynamic_printk/modules
 -
        earlycon=       [KNL] Output early console device and options.
                uart[8250],io,<addr>[,options]
                uart[8250],mmio,<addr>[,options]
                             controller
        i8042.nopnp     [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
                             controllers
 +      i8042.notimeout [HW] Ignore timeout condition signalled by conroller
        i8042.reset     [HW] Reset the controller during init and cleanup
        i8042.unlock    [HW] Unlock (ignore) the keylock
  
        mtdparts=       [MTD]
                        See drivers/mtd/cmdlinepart.c.
  
 +      multitce=off    [PPC]  This parameter disables the use of the pSeries
 +                      firmware feature for updating multiple TCE entries
 +                      at a time.
 +
        onenand.bdry=   [HW,MTD] Flex-OneNAND Boundary Configuration
  
                        Format: [die0_boundary][,die0_lock][,die1_boundary][,die1_lock]
  
        nmi_watchdog=   [KNL,BUGS=X86] Debugging features for SMP kernels
                        Format: [panic,][num]
 -                      Valid num: 0,1,2
 +                      Valid num: 0
                        0 - turn nmi_watchdog off
 -                      1 - use the IO-APIC timer for the NMI watchdog
 -                      2 - use the local APIC for the NMI watchdog using
 -                      a performance counter. Note: This will use one
 -                      performance counter and the local APIC's performance
 -                      vector.
                        When panic is specified, panic when an NMI watchdog
                        timeout occurs.
                        This is useful when you use a panic=... timeout and
                        need the box quickly up again.
 -                      Instead of 1 and 2 it is possible to use the following
 -                      symbolic names: lapic and ioapic
 -                      Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
  
        netpoll.carrier_timeout=
                        [NET] Specifies amount of time (in seconds) that
        noapic          [SMP,APIC] Tells the kernel to not make use of any
                        IOAPICs that may be present in the system.
  
 +      noautogroup     Disable scheduler automatic task group creation.
 +
        nobats          [PPC] Do not use BATs for mapping kernel lowmem
                        on "Classic" PPC cores.
  
  
        no-kvmclock     [X86,KVM] Disable paravirtualized KVM clock driver
  
 +      no-kvmapf       [X86,KVM] Disable paravirtualized asynchronous page
 +                      fault handling.
 +
        nolapic         [X86-32,APIC] Do not enable or use the local APIC.
  
        nolapic_timer   [X86-32,APIC] Do not use the local APIC timer.
                        to facilitate early boot debugging.
                        See also Documentation/trace/events.txt
  
 -      tsc=            Disable clocksource-must-verify flag for TSC.
 +      tsc=            Disable clocksource stability checks for TSC.
                        Format: <string>
                        [x86] reliable: mark tsc clocksource as reliable, this
 -                      disables clocksource verification at runtime.
 -                      Used to enable high-resolution timer mode on older
 -                      hardware, and in virtualized environment.
 +                      disables clocksource verification at runtime, as well
 +                      as the stability checks done at bootup. Used to enable
 +                      high-resolution timer mode on older hardware, and in
 +                      virtualized environment.
                        [x86] noirqtime: Do not use TSC to do irq accounting.
                        Used to run time disable IRQ_TIME_ACCOUNTING on any
                        platforms where RDTSC is slow and this accounting
@@@ -198,11 -198,6 +198,11 @@@ static void __cpuinit acpi_register_lap
  {
        unsigned int ver = 0;
  
 +      if (id >= (MAX_LOCAL_APIC-1)) {
 +              printk(KERN_INFO PREFIX "skipped apicid that is too big\n");
 +              return;
 +      }
 +
        if (!enabled) {
                ++disabled_cpus;
                return;
@@@ -509,6 -504,7 +509,7 @@@ int acpi_gsi_to_irq(u32 gsi, unsigned i
  
        return 0;
  }
+ EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
  
  int acpi_isa_irq_to_gsi(unsigned isa_irq, u32 *gsi)
  {
@@@ -852,6 -848,18 +853,6 @@@ static int __init acpi_parse_fadt(struc
   * returns 0 on success, < 0 on error
   */
  
 -static void __init acpi_register_lapic_address(unsigned long address)
 -{
 -      mp_lapic_addr = address;
 -
 -      set_fixmap_nocache(FIX_APIC_BASE, address);
 -      if (boot_cpu_physical_apicid == -1U) {
 -              boot_cpu_physical_apicid  = read_apic_id();
 -              apic_version[boot_cpu_physical_apicid] =
 -                       GET_APIC_VERSION(apic_read(APIC_LVR));
 -      }
 -}
 -
  static int __init early_acpi_parse_madt_lapic_addr_ovr(void)
  {
        int count;
                return count;
        }
  
 -      acpi_register_lapic_address(acpi_lapic_addr);
 +      register_lapic_address(acpi_lapic_addr);
  
        return count;
  }
@@@ -900,16 -908,16 +901,16 @@@ static int __init acpi_parse_madt_lapic
                return count;
        }
  
 -      acpi_register_lapic_address(acpi_lapic_addr);
 +      register_lapic_address(acpi_lapic_addr);
  
        count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC,
 -                                    acpi_parse_sapic, MAX_APICS);
 +                                    acpi_parse_sapic, MAX_LOCAL_APIC);
  
        if (!count) {
                x2count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_X2APIC,
 -                                              acpi_parse_x2apic, MAX_APICS);
 +                                      acpi_parse_x2apic, MAX_LOCAL_APIC);
                count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC,
 -                                            acpi_parse_lapic, MAX_APICS);
 +                                      acpi_parse_lapic, MAX_LOCAL_APIC);
        }
        if (!count && !x2count) {
                printk(KERN_ERR PREFIX "No LAPIC entries present\n");
  extern int es7000_plat;
  #endif
  
 -static void assign_to_mp_irq(struct mpc_intsrc *m,
 -                                  struct mpc_intsrc *mp_irq)
 -{
 -      memcpy(mp_irq, m, sizeof(struct mpc_intsrc));
 -}
 -
 -static int mp_irq_cmp(struct mpc_intsrc *mp_irq,
 -                              struct mpc_intsrc *m)
 -{
 -      return memcmp(mp_irq, m, sizeof(struct mpc_intsrc));
 -}
 -
 -static void save_mp_irq(struct mpc_intsrc *m)
 -{
 -      int i;
 -
 -      for (i = 0; i < mp_irq_entries; i++) {
 -              if (!mp_irq_cmp(&mp_irqs[i], m))
 -                      return;
 -      }
 -
 -      assign_to_mp_irq(m, &mp_irqs[mp_irq_entries]);
 -      if (++mp_irq_entries == MAX_IRQ_SOURCES)
 -              panic("Max # of irq sources exceeded!!\n");
 -}
 -
  void __init mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi)
  {
        int ioapic;
        mp_irq.dstapic = mp_ioapics[ioapic].apicid; /* APIC ID */
        mp_irq.dstirq = pin;    /* INTIN# */
  
 -      save_mp_irq(&mp_irq);
 +      mp_save_irq(&mp_irq);
  
        isa_irq_to_gsi[bus_irq] = gsi;
  }
@@@ -1047,7 -1081,7 +1048,7 @@@ void __init mp_config_acpi_legacy_irqs(
                mp_irq.srcbusirq = i; /* Identity mapped */
                mp_irq.dstirq = pin;
  
 -              save_mp_irq(&mp_irq);
 +              mp_save_irq(&mp_irq);
        }
  }
  
@@@ -1084,7 -1118,7 +1085,7 @@@ static int mp_config_acpi_gsi(struct de
        mp_irq.dstapic = mp_ioapics[ioapic].apicid;
        mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi);
  
 -      save_mp_irq(&mp_irq);
 +      mp_save_irq(&mp_irq);
  #endif
        return 0;
  }
@@@ -175,21 -175,21 +175,21 @@@ static const struct stacktrace_ops prin
  
  void
  show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
 -              unsigned long *stack, unsigned long bp, char *log_lvl)
 +              unsigned long *stack, char *log_lvl)
  {
        printk("%sCall Trace:\n", log_lvl);
 -      dump_trace(task, regs, stack, bp, &print_trace_ops, log_lvl);
 +      dump_trace(task, regs, stack, &print_trace_ops, log_lvl);
  }
  
  void show_trace(struct task_struct *task, struct pt_regs *regs,
 -              unsigned long *stack, unsigned long bp)
 +              unsigned long *stack)
  {
 -      show_trace_log_lvl(task, regs, stack, bp, "");
 +      show_trace_log_lvl(task, regs, stack, "");
  }
  
  void show_stack(struct task_struct *task, unsigned long *sp)
  {
 -      show_stack_log_lvl(task, NULL, sp, 0, "");
 +      show_stack_log_lvl(task, NULL, sp, "");
  }
  
  /*
   */
  void dump_stack(void)
  {
 -      unsigned long bp = 0;
        unsigned long stack;
  
 -#ifdef CONFIG_FRAME_POINTER
 -      if (!bp)
 -              get_bp(bp);
 -#endif
 -
        printk("Pid: %d, comm: %.20s %s %s %.*s\n",
                current->pid, current->comm, print_tainted(),
                init_utsname()->release,
                (int)strcspn(init_utsname()->version, " "),
                init_utsname()->version);
 -      show_trace(NULL, NULL, &stack, bp);
 +      show_trace(NULL, NULL, &stack);
  }
  EXPORT_SYMBOL(dump_stack);
  
@@@ -234,6 -240,7 +234,7 @@@ unsigned __kprobes long oops_begin(void
        bust_spinlocks(1);
        return flags;
  }
+ EXPORT_SYMBOL_GPL(oops_begin);
  
  void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
  {
diff --combined drivers/acpi/sleep.c
@@@ -124,8 -124,7 +124,7 @@@ static int acpi_pm_freeze(void
  static int acpi_pm_pre_suspend(void)
  {
        acpi_pm_freeze();
-       suspend_nvs_save();
-       return 0;
+       return suspend_nvs_save();
  }
  
  /**
@@@ -151,7 -150,7 +150,7 @@@ static int acpi_pm_prepare(void
  {
        int error = __acpi_pm_prepare();
        if (!error)
-               acpi_pm_pre_suspend();
+               error = acpi_pm_pre_suspend();
  
        return error;
  }
@@@ -319,7 -318,7 +318,7 @@@ static int acpi_suspend_state_valid(sus
        }
  }
  
 -static struct platform_suspend_ops acpi_suspend_ops = {
 +static const struct platform_suspend_ops acpi_suspend_ops = {
        .valid = acpi_suspend_state_valid,
        .begin = acpi_suspend_begin,
        .prepare_late = acpi_pm_prepare,
@@@ -347,7 -346,7 +346,7 @@@ static int acpi_suspend_begin_old(suspe
   * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has
   * been requested.
   */
 -static struct platform_suspend_ops acpi_suspend_ops_old = {
 +static const struct platform_suspend_ops acpi_suspend_ops_old = {
        .valid = acpi_suspend_state_valid,
        .begin = acpi_suspend_begin_old,
        .prepare_late = acpi_pm_pre_suspend,
@@@ -435,6 -434,14 +434,14 @@@ static struct dmi_system_id __initdata 
                DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"),
                },
        },
+       {
+       .callback = init_nvs_nosave,
+       .ident = "Averatec AV1020-ED2",
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "1000 Series"),
+               },
+       },
        {},
  };
  #endif /* CONFIG_SUSPEND */
@@@ -506,7 -513,7 +513,7 @@@ static void acpi_pm_thaw(void
        acpi_enable_all_runtime_gpes();
  }
  
 -static struct platform_hibernation_ops acpi_hibernation_ops = {
 +static const struct platform_hibernation_ops acpi_hibernation_ops = {
        .begin = acpi_hibernation_begin,
        .end = acpi_pm_end,
        .pre_snapshot = acpi_pm_prepare,
@@@ -549,7 -556,7 +556,7 @@@ static int acpi_hibernation_begin_old(v
   * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has
   * been requested.
   */
 -static struct platform_hibernation_ops acpi_hibernation_ops_old = {
 +static const struct platform_hibernation_ops acpi_hibernation_ops_old = {
        .begin = acpi_hibernation_begin_old,
        .end = acpi_pm_end,
        .pre_snapshot = acpi_pm_pre_suspend,
diff --combined drivers/acpi/video.c
@@@ -33,7 -33,6 +33,6 @@@
  #include <linux/input.h>
  #include <linux/backlight.h>
  #include <linux/thermal.h>
- #include <linux/video_output.h>
  #include <linux/sort.h>
  #include <linux/pci.h>
  #include <linux/pci_ids.h>
@@@ -81,6 -80,13 +80,13 @@@ module_param(brightness_switch_enabled
  static int allow_duplicates;
  module_param(allow_duplicates, bool, 0644);
  
+ /*
+  * Some BIOSes claim they use minimum backlight at boot,
+  * and this may bring dimming screen after boot
+  */
+ static int use_bios_initial_backlight = 1;
+ module_param(use_bios_initial_backlight, bool, 0644);
  static int register_count = 0;
  static int acpi_video_bus_add(struct acpi_device *device);
  static int acpi_video_bus_remove(struct acpi_device *device, int type);
@@@ -172,9 -178,6 +178,6 @@@ struct acpi_video_device_cap 
        u8 _BQC:1;              /* Get current brightness level */
        u8 _BCQ:1;              /* Some buggy BIOS uses _BCQ instead of _BQC */
        u8 _DDC:1;              /*Return the EDID for this device */
-       u8 _DCS:1;              /*Return status of output device */
-       u8 _DGS:1;              /*Query graphics state */
-       u8 _DSS:1;              /*Device state set */
  };
  
  struct acpi_video_brightness_flags {
@@@ -202,7 -205,6 +205,6 @@@ struct acpi_video_device 
        struct acpi_video_device_brightness *brightness;
        struct backlight_device *backlight;
        struct thermal_cooling_device *cooling_dev;
-       struct output_device *output_dev;
  };
  
  static const char device_decode[][30] = {
@@@ -226,10 -228,6 +228,6 @@@ static int acpi_video_get_next_level(st
                                     u32 level_current, u32 event);
  static int acpi_video_switch_brightness(struct acpi_video_device *device,
                                         int event);
- static int acpi_video_device_get_state(struct acpi_video_device *device,
-                           unsigned long long *state);
- static int acpi_video_output_get(struct output_device *od);
- static int acpi_video_device_set_state(struct acpi_video_device *device, int state);
  
  /*backlight device sysfs support*/
  static int acpi_video_get_brightness(struct backlight_device *bd)
@@@ -260,35 -258,11 +258,11 @@@ static int acpi_video_set_brightness(st
                                vd->brightness->levels[request_level]);
  }
  
 -static struct backlight_ops acpi_backlight_ops = {
 +static const struct backlight_ops acpi_backlight_ops = {
        .get_brightness = acpi_video_get_brightness,
        .update_status  = acpi_video_set_brightness,
  };
  
- /*video output device sysfs support*/
- static int acpi_video_output_get(struct output_device *od)
- {
-       unsigned long long state;
-       struct acpi_video_device *vd =
-               (struct acpi_video_device *)dev_get_drvdata(&od->dev);
-       acpi_video_device_get_state(vd, &state);
-       return (int)state;
- }
- static int acpi_video_output_set(struct output_device *od)
- {
-       unsigned long state = od->request_state;
-       struct acpi_video_device *vd=
-               (struct acpi_video_device *)dev_get_drvdata(&od->dev);
-       return acpi_video_device_set_state(vd, state);
- }
- static struct output_properties acpi_output_properties = {
-       .set_state = acpi_video_output_set,
-       .get_status = acpi_video_output_get,
- };
  /* thermal cooling device callbacks */
  static int video_get_max_state(struct thermal_cooling_device *cooling_dev, unsigned
                               long *state)
@@@ -344,34 -318,6 +318,6 @@@ static struct thermal_cooling_device_op
                                 Video Management
     -------------------------------------------------------------------------- */
  
- /* device */
- static int
- acpi_video_device_get_state(struct acpi_video_device *device,
-                           unsigned long long *state)
- {
-       int status;
-       status = acpi_evaluate_integer(device->dev->handle, "_DCS", NULL, state);
-       return status;
- }
- static int
- acpi_video_device_set_state(struct acpi_video_device *device, int state)
- {
-       int status;
-       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
-       struct acpi_object_list args = { 1, &arg0 };
-       unsigned long long ret;
-       arg0.integer.value = state;
-       status = acpi_evaluate_integer(device->dev->handle, "_DSS", &args, &ret);
-       return status;
- }
  static int
  acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
                                   union acpi_object **levels)
@@@ -766,9 -712,11 +712,11 @@@ acpi_video_init_brightness(struct acpi_
                 * when invoked for the first time, i.e. level_old is invalid.
                 * set the backlight to max_level in this case
                 */
-               for (i = 2; i < br->count; i++)
-                       if (level_old == br->levels[i])
-                               level = level_old;
+               if (use_bios_initial_backlight) {
+                       for (i = 2; i < br->count; i++)
+                               if (level_old == br->levels[i])
+                                       level = level_old;
+               }
                goto set_level;
        }
  
@@@ -831,15 -779,6 +779,6 @@@ static void acpi_video_device_find_cap(
        if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DDC", &h_dummy1))) {
                device->cap._DDC = 1;
        }
-       if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DCS", &h_dummy1))) {
-               device->cap._DCS = 1;
-       }
-       if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DGS", &h_dummy1))) {
-               device->cap._DGS = 1;
-       }
-       if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DSS", &h_dummy1))) {
-               device->cap._DSS = 1;
-       }
  
        if (acpi_video_backlight_support()) {
                struct backlight_properties props;
                        printk(KERN_ERR PREFIX "Create sysfs link\n");
  
        }
-       if (acpi_video_display_switch_support()) {
-               if (device->cap._DCS && device->cap._DSS) {
-                       static int count;
-                       char *name;
-                       name = kasprintf(GFP_KERNEL, "acpi_video%d", count);
-                       if (!name)
-                               return;
-                       count++;
-                       device->output_dev = video_output_register(name,
-                                       NULL, device, &acpi_output_properties);
-                       kfree(name);
-               }
-       }
  }
  
  /*
@@@ -1360,6 -1284,9 +1284,9 @@@ int acpi_video_get_edid(struct acpi_dev
                if (!video_device)
                        continue;
  
+               if (!video_device->cap._DDC)
+                       continue;
                if (type) {
                        switch (type) {
                        case ACPI_VIDEO_DISPLAY_CRT:
@@@ -1452,7 -1379,6 +1379,6 @@@ static int acpi_video_bus_put_one_devic
                thermal_cooling_device_unregister(device->cooling_dev);
                device->cooling_dev = NULL;
        }
-       video_output_unregister(device->output_dev);
  
        return 0;
  }
@@@ -57,6 -57,7 +57,7 @@@
  #include <asm/irq.h>
  #include <linux/interrupt.h>
  #include <linux/rcupdate.h>
+ #include <linux/ipmi.h>
  #include <linux/ipmi_smi.h>
  #include <asm/io.h>
  #include "ipmi_si_sm.h"
@@@ -69,8 -70,6 +70,8 @@@
  #ifdef CONFIG_PPC_OF
  #include <linux/of_device.h>
  #include <linux/of_platform.h>
 +#include <linux/of_address.h>
 +#include <linux/of_irq.h>
  #endif
  
  #define PFX "ipmi_si: "
@@@ -109,10 -108,6 +110,6 @@@ enum si_type 
  };
  static char *si_to_str[] = { "kcs", "smic", "bt" };
  
- enum ipmi_addr_src {
-       SI_INVALID = 0, SI_HOTMOD, SI_HARDCODED, SI_SPMI, SI_ACPI, SI_SMBIOS,
-       SI_PCI, SI_DEVICETREE, SI_DEFAULT
- };
  static char *ipmi_addr_src_to_str[] = { NULL, "hotmod", "hardcoded", "SPMI",
                                        "ACPI", "SMBIOS", "PCI",
                                        "device-tree", "default" };
@@@ -293,6 -288,7 +290,7 @@@ struct smi_info 
        struct task_struct *thread;
  
        struct list_head link;
+       union ipmi_smi_info_union addr_info;
  };
  
  #define smi_inc_stat(smi, stat) \
@@@ -1188,6 -1184,18 +1186,18 @@@ static int smi_start_processing(voi
        return 0;
  }
  
+ static int get_smi_info(void *send_info, struct ipmi_smi_info *data)
+ {
+       struct smi_info *smi = send_info;
+       data->addr_src = smi->addr_source;
+       data->dev = smi->dev;
+       data->addr_info = smi->addr_info;
+       get_device(smi->dev);
+       return 0;
+ }
  static void set_maintenance_mode(void *send_info, int enable)
  {
        struct smi_info   *smi_info = send_info;
  static struct ipmi_smi_handlers handlers = {
        .owner                  = THIS_MODULE,
        .start_processing       = smi_start_processing,
+       .get_smi_info           = get_smi_info,
        .sender                 = sender,
        .request_events         = request_events,
        .set_maintenance_mode   = set_maintenance_mode,
@@@ -1930,7 -1939,8 +1941,8 @@@ static void __devinit hardcode_find_bmc
  static int acpi_failure;
  
  /* For GPE-type interrupts. */
- static u32 ipmi_acpi_gpe(void *context)
+ static u32 ipmi_acpi_gpe(acpi_handle gpe_device,
+       u32 gpe_number, void *context)
  {
        struct smi_info *smi_info = context;
        unsigned long   flags;
@@@ -2158,6 -2168,7 +2170,7 @@@ static int __devinit ipmi_pnp_probe(str
        printk(KERN_INFO PFX "probing via ACPI\n");
  
        handle = acpi_dev->handle;
+       info->addr_info.acpi_info.acpi_handle = handle;
  
        /* _IFT tells us the interface type: KCS, BT, etc */
        status = acpi_evaluate_integer(handle, "_IFT", NULL, &tmp);
@@@ -2548,7 -2559,7 +2561,7 @@@ static int __devinit ipmi_of_probe(stru
  {
        struct smi_info *info;
        struct resource resource;
 -      const int *regsize, *regspacing, *regshift;
 +      const __be32 *regsize, *regspacing, *regshift;
        struct device_node *np = dev->dev.of_node;
        int ret;
        int proplen;
  
        info->io.addr_data      = resource.start;
  
 -      info->io.regsize        = regsize ? *regsize : DEFAULT_REGSIZE;
 -      info->io.regspacing     = regspacing ? *regspacing : DEFAULT_REGSPACING;
 -      info->io.regshift       = regshift ? *regshift : 0;
 +      info->io.regsize        = regsize ? be32_to_cpup(regsize) : DEFAULT_REGSIZE;
 +      info->io.regspacing     = regspacing ? be32_to_cpup(regspacing) : DEFAULT_REGSPACING;
 +      info->io.regshift       = regshift ? be32_to_cpup(regshift) : 0;
  
        info->irq               = irq_of_parse_and_map(dev->dev.of_node, 0);
        info->dev               = &dev->dev;
@@@ -437,7 -437,7 +437,7 @@@ static int bl_update_status(struct back
        return ret;
  }
  
 -static struct backlight_ops fujitsubl_ops = {
 +static const struct backlight_ops fujitsubl_ops = {
        .get_brightness = bl_get_brightness,
        .update_status = bl_update_status,
  };
@@@ -689,7 -689,7 +689,7 @@@ static int acpi_fujitsu_add(struct acpi
        if (error)
                goto err_free_input_dev;
  
-       result = acpi_bus_get_power(fujitsu->acpi_handle, &state);
+       result = acpi_bus_update_power(fujitsu->acpi_handle, &state);
        if (result) {
                printk(KERN_ERR "Error reading power state\n");
                goto err_unregister_input_dev;
@@@ -857,7 -857,7 +857,7 @@@ static int acpi_fujitsu_hotkey_add(stru
        if (error)
                goto err_free_input_dev;
  
-       result = acpi_bus_get_power(fujitsu_hotkey->acpi_handle, &state);
+       result = acpi_bus_update_power(fujitsu_hotkey->acpi_handle, &state);
        if (result) {
                printk(KERN_ERR "Error reading power state\n");
                goto err_unregister_input_dev;
@@@ -1240,7 -1240,7 +1240,7 @@@ MODULE_ALIAS("dmi:*:svnFUJITSUSIEMENS:*
  MODULE_ALIAS("dmi:*:svnFUJITSUSIEMENS:*:pvr:rvnFUJITSU:rnFJNB1E6:*:cvrS6420:*");
  MODULE_ALIAS("dmi:*:svnFUJITSU:*:pvr:rvnFUJITSU:rnFJNB19C:*:cvrS7020:*");
  
 -static struct pnp_device_id pnp_ids[] = {
 +static struct pnp_device_id pnp_ids[] __used = {
        {.id = "FUJ02bf"},
        {.id = "FUJ02B1"},
        {.id = "FUJ02E3"},
diff --combined include/linux/suspend.h
@@@ -122,7 -122,7 +122,7 @@@ struct platform_suspend_ops 
   * suspend_set_ops - set platform dependent suspend operations
   * @ops: The new suspend operations to set.
   */
 -extern void suspend_set_ops(struct platform_suspend_ops *ops);
 +extern void suspend_set_ops(const struct platform_suspend_ops *ops);
  extern int suspend_valid_only_mem(suspend_state_t state);
  
  /**
@@@ -147,7 -147,7 +147,7 @@@ extern int pm_suspend(suspend_state_t s
  #else /* !CONFIG_SUSPEND */
  #define suspend_valid_only_mem        NULL
  
 -static inline void suspend_set_ops(struct platform_suspend_ops *ops) {}
 +static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {}
  static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; }
  #endif /* !CONFIG_SUSPEND */
  
@@@ -245,7 -245,7 +245,7 @@@ extern void swsusp_set_page_free(struc
  extern void swsusp_unset_page_free(struct page *);
  extern unsigned long get_safe_page(gfp_t gfp_mask);
  
 -extern void hibernation_set_ops(struct platform_hibernation_ops *ops);
 +extern void hibernation_set_ops(const struct platform_hibernation_ops *ops);
  extern int hibernate(void);
  extern bool system_entering_hibernation(void);
  #else /* CONFIG_HIBERNATION */
@@@ -253,28 -253,11 +253,11 @@@ static inline int swsusp_page_is_forbid
  static inline void swsusp_set_page_free(struct page *p) {}
  static inline void swsusp_unset_page_free(struct page *p) {}
  
 -static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {}
 +static inline void hibernation_set_ops(const struct platform_hibernation_ops *ops) {}
  static inline int hibernate(void) { return -ENOSYS; }
  static inline bool system_entering_hibernation(void) { return false; }
  #endif /* CONFIG_HIBERNATION */
  
- #ifdef CONFIG_SUSPEND_NVS
- extern int suspend_nvs_register(unsigned long start, unsigned long size);
- extern int suspend_nvs_alloc(void);
- extern void suspend_nvs_free(void);
- extern void suspend_nvs_save(void);
- extern void suspend_nvs_restore(void);
- #else /* CONFIG_SUSPEND_NVS */
- static inline int suspend_nvs_register(unsigned long a, unsigned long b)
- {
-       return 0;
- }
- static inline int suspend_nvs_alloc(void) { return 0; }
- static inline void suspend_nvs_free(void) {}
- static inline void suspend_nvs_save(void) {}
- static inline void suspend_nvs_restore(void) {}
- #endif /* CONFIG_SUSPEND_NVS */
  #ifdef CONFIG_PM_SLEEP
  void save_processor_state(void);
  void restore_processor_state(void);
@@@ -292,7 -275,7 +275,7 @@@ extern int unregister_pm_notifier(struc
  /* drivers/base/power/wakeup.c */
  extern bool events_check_enabled;
  
 -extern bool pm_check_wakeup_events(void);
 +extern bool pm_wakeup_pending(void);
  extern bool pm_get_wakeup_count(unsigned int *count);
  extern bool pm_save_wakeup_count(unsigned int count);
  #else /* !CONFIG_PM_SLEEP */
@@@ -309,7 -292,7 +292,7 @@@ static inline int unregister_pm_notifie
  
  #define pm_notifier(fn, pri)  do { (void)(fn); } while (0)
  
 -static inline bool pm_check_wakeup_events(void) { return true; }
 +static inline bool pm_wakeup_pending(void) { return false; }
  #endif /* !CONFIG_PM_SLEEP */
  
  extern struct mutex pm_mutex;
diff --combined kernel/power/Makefile
@@@ -1,4 -1,7 +1,4 @@@
 -
 -ifeq ($(CONFIG_PM_DEBUG),y)
 -EXTRA_CFLAGS  +=      -DDEBUG
 -endif
 +ccflags-$(CONFIG_PM_DEBUG)    :=      -DDEBUG
  
  obj-$(CONFIG_PM)              += main.o
  obj-$(CONFIG_PM_SLEEP)                += console.o
@@@ -7,6 -10,5 +7,5 @@@ obj-$(CONFIG_SUSPEND)           += suspend.
  obj-$(CONFIG_PM_TEST_SUSPEND) += suspend_test.o
  obj-$(CONFIG_HIBERNATION)     += hibernate.o snapshot.o swap.o user.o \
                                   block_io.o
- obj-$(CONFIG_SUSPEND_NVS)     += nvs.o
  
  obj-$(CONFIG_MAGIC_SYSRQ)     += poweroff.o
diff --combined mm/vmalloc.c
@@@ -748,7 -748,7 +748,7 @@@ static struct vmap_block *new_vmap_bloc
        va = alloc_vmap_area(VMAP_BLOCK_SIZE, VMAP_BLOCK_SIZE,
                                        VMALLOC_START, VMALLOC_END,
                                        node, gfp_mask);
 -      if (unlikely(IS_ERR(va))) {
 +      if (IS_ERR(va)) {
                kfree(vb);
                return ERR_CAST(va);
        }
@@@ -1175,6 -1175,7 +1175,7 @@@ void unmap_kernel_range_noflush(unsigne
  {
        vunmap_page_range(addr, addr + size);
  }
+ EXPORT_SYMBOL_GPL(unmap_kernel_range_noflush);
  
  /**
   * unmap_kernel_range - unmap kernel VM area and flush cache and TLB
@@@ -1315,6 -1316,13 +1316,6 @@@ struct vm_struct *get_vm_area_caller(un
                                                -1, GFP_KERNEL, caller);
  }
  
 -struct vm_struct *get_vm_area_node(unsigned long size, unsigned long flags,
 -                                 int node, gfp_t gfp_mask)
 -{
 -      return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END,
 -                                node, gfp_mask, __builtin_return_address(0));
 -}
 -
  static struct vm_struct *find_vm_area(const void *addr)
  {
        struct vmap_area *va;
@@@ -1530,12 -1538,25 +1531,12 @@@ fail
        return NULL;
  }
  
 -void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask, pgprot_t prot)
 -{
 -      void *addr = __vmalloc_area_node(area, gfp_mask, prot, -1,
 -                                       __builtin_return_address(0));
 -
 -      /*
 -       * A ref_count = 3 is needed because the vm_struct and vmap_area
 -       * structures allocated in the __get_vm_area_node() function contain
 -       * references to the virtual address of the vmalloc'ed block.
 -       */
 -      kmemleak_alloc(addr, area->size - PAGE_SIZE, 3, gfp_mask);
 -
 -      return addr;
 -}
 -
  /**
 - *    __vmalloc_node  -  allocate virtually contiguous memory
 + *    __vmalloc_node_range  -  allocate virtually contiguous memory
   *    @size:          allocation size
   *    @align:         desired alignment
 + *    @start:         vm area range start
 + *    @end:           vm area range end
   *    @gfp_mask:      flags for the page level allocator
   *    @prot:          protection mask for the allocated pages
   *    @node:          node to use for allocation or -1
   *    allocator with @gfp_mask flags.  Map them into contiguous
   *    kernel virtual space, using a pagetable protection of @prot.
   */
 -static void *__vmalloc_node(unsigned long size, unsigned long align,
 -                          gfp_t gfp_mask, pgprot_t prot,
 -                          int node, void *caller)
 +void *__vmalloc_node_range(unsigned long size, unsigned long align,
 +                      unsigned long start, unsigned long end, gfp_t gfp_mask,
 +                      pgprot_t prot, int node, void *caller)
  {
        struct vm_struct *area;
        void *addr;
        if (!size || (size >> PAGE_SHIFT) > totalram_pages)
                return NULL;
  
 -      area = __get_vm_area_node(size, align, VM_ALLOC, VMALLOC_START,
 -                                VMALLOC_END, node, gfp_mask, caller);
 +      area = __get_vm_area_node(size, align, VM_ALLOC, start, end, node,
 +                                gfp_mask, caller);
  
        if (!area)
                return NULL;
        return addr;
  }
  
 +/**
 + *    __vmalloc_node  -  allocate virtually contiguous memory
 + *    @size:          allocation size
 + *    @align:         desired alignment
 + *    @gfp_mask:      flags for the page level allocator
 + *    @prot:          protection mask for the allocated pages
 + *    @node:          node to use for allocation or -1
 + *    @caller:        caller's return address
 + *
 + *    Allocate enough pages to cover @size from the page level
 + *    allocator with @gfp_mask flags.  Map them into contiguous
 + *    kernel virtual space, using a pagetable protection of @prot.
 + */
 +static void *__vmalloc_node(unsigned long size, unsigned long align,
 +                          gfp_t gfp_mask, pgprot_t prot,
 +                          int node, void *caller)
 +{
 +      return __vmalloc_node_range(size, align, VMALLOC_START, VMALLOC_END,
 +                              gfp_mask, prot, node, caller);
 +}
 +
  void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
  {
        return __vmalloc_node(size, 1, gfp_mask, prot, -1,
@@@ -2204,16 -2204,17 +2205,16 @@@ static unsigned long pvm_determine_end(
   * @sizes: array containing size of each area
   * @nr_vms: the number of areas to allocate
   * @align: alignment, all entries in @offsets and @sizes must be aligned to this
 - * @gfp_mask: allocation mask
   *
   * Returns: kmalloc'd vm_struct pointer array pointing to allocated
   *        vm_structs on success, %NULL on failure
   *
   * Percpu allocator wants to use congruent vm areas so that it can
   * maintain the offsets among percpu areas.  This function allocates
 - * congruent vmalloc areas for it.  These areas tend to be scattered
 - * pretty far, distance between two areas easily going up to
 - * gigabytes.  To avoid interacting with regular vmallocs, these areas
 - * are allocated from top.
 + * congruent vmalloc areas for it with GFP_KERNEL.  These areas tend to
 + * be scattered pretty far, distance between two areas easily going up
 + * to gigabytes.  To avoid interacting with regular vmallocs, these
 + * areas are allocated from top.
   *
   * Despite its complicated look, this allocator is rather simple.  It
   * does everything top-down and scans areas from the end looking for
   */
  struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets,
                                     const size_t *sizes, int nr_vms,
 -                                   size_t align, gfp_t gfp_mask)
 +                                   size_t align)
  {
        const unsigned long vmalloc_start = ALIGN(VMALLOC_START, align);
        const unsigned long vmalloc_end = VMALLOC_END & ~(align - 1);
        unsigned long base, start, end, last_end;
        bool purged = false;
  
 -      gfp_mask &= GFP_RECLAIM_MASK;
 -
        /* verify parameters and allocate data structures */
        BUG_ON(align & ~PAGE_MASK || !is_power_of_2(align));
        for (last_area = 0, area = 0; area < nr_vms; area++) {
                return NULL;
        }
  
 -      vms = kzalloc(sizeof(vms[0]) * nr_vms, gfp_mask);
 -      vas = kzalloc(sizeof(vas[0]) * nr_vms, gfp_mask);
 +      vms = kzalloc(sizeof(vms[0]) * nr_vms, GFP_KERNEL);
 +      vas = kzalloc(sizeof(vas[0]) * nr_vms, GFP_KERNEL);
        if (!vas || !vms)
                goto err_free;
  
        for (area = 0; area < nr_vms; area++) {
 -              vas[area] = kzalloc(sizeof(struct vmap_area), gfp_mask);
 -              vms[area] = kzalloc(sizeof(struct vm_struct), gfp_mask);
 +              vas[area] = kzalloc(sizeof(struct vmap_area), GFP_KERNEL);
 +              vms[area] = kzalloc(sizeof(struct vm_struct), GFP_KERNEL);
                if (!vas[area] || !vms[area])
                        goto err_free;
        }
@@@ -2454,8 -2457,13 +2455,8 @@@ static int s_show(struct seq_file *m, v
        seq_printf(m, "0x%p-0x%p %7ld",
                v->addr, v->addr + v->size, v->size);
  
 -      if (v->caller) {
 -              char buff[KSYM_SYMBOL_LEN];
 -
 -              seq_putc(m, ' ');
 -              sprint_symbol(buff, (unsigned long)v->caller);
 -              seq_puts(m, buff);
 -      }
 +      if (v->caller)
 +              seq_printf(m, " %pS", v->caller);
  
        if (v->nr_pages)
                seq_printf(m, " pages=%d", v->nr_pages);