default y
        depends on BUG
  
 +config SYS_SUPPORTS_APM_EMULATION
 +      bool
 +
+ #
+ # Powerpc uses the slab allocator to manage its ptes and the
+ # page structs of ptes are used for splitting the page table
+ # lock for configurations supporting more than SPLIT_PTLOCK_CPUS.
+ #
+ # In that special configuration the page structs of slabs are modified.
+ # This setting disables the selection of SLUB as a slab allocator.
+ #
+ config ARCH_USES_SLAB_PAGE_STRUCT
+       bool
+       default y
+       depends on SPLIT_PTLOCK_CPUS <= NR_CPUS
+ 
  config DEFAULT_UIMAGE
        bool
        help
 
  obj-$(CONFIG_CRASH_DUMP)      += crash_dump.o
  obj-$(CONFIG_6xx)             += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
  obj-$(CONFIG_TAU)             += tau_6xx.o
- obj-$(CONFIG_SOFTWARE_SUSPEND)        += swsusp.o
++obj-$(CONFIG_SOFTWARE_SUSPEND)        += swsusp.o suspend.o
  obj32-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_32.o
 -obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend.o
 +obj64-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_64.o swsusp_asm64.o
  obj32-$(CONFIG_MODULES)               += module_32.o
  
  ifeq ($(CONFIG_PPC_MERGE),y)
 
  #include <linux/mm.h>
  #include <linux/init.h>
  #include <linux/module.h>
- #include <linux/pci.h>
 +#include <linux/dma-mapping.h>
  
  #include <asm/system.h>
  #include <asm/io.h>
 
        }
  
        ps3fb.dev = dev;
 -      error = ps3_alloc_irq(PS3_BINDING_CPU_ANY, dinfo->irq.irq_outlet,
 -                            &ps3fb.irq_no);
 +      error = ps3_irq_plug_setup(PS3_BINDING_CPU_ANY, dinfo->irq.irq_outlet,
 +                                 &ps3fb.irq_no);
        if (error) {
-               printk(KERN_ERR "%s: ps3_alloc_irq failed %d\n", __FUNCTION__,
+               printk(KERN_ERR "%s: ps3_alloc_irq failed %d\n", __func__,
                       error);
                return error;
        }
        error = request_irq(ps3fb.irq_no, ps3fb_vsync_interrupt, IRQF_DISABLED,
                            "ps3fb vsync", ps3fb.dev);
        if (error) {
-               printk(KERN_ERR "%s: request_irq failed %d\n", __FUNCTION__,
+               printk(KERN_ERR "%s: request_irq failed %d\n", __func__,
                       error);
 -              ps3_free_irq(ps3fb.irq_no);
 +              ps3_irq_plug_destroy(ps3fb.irq_no);
                return error;
        }
  
  {
        int status;
  
+       if (ps3fb.task) {
+               struct task_struct *task = ps3fb.task;
+               ps3fb.task = NULL;
+               kthread_stop(task);
+       }
        if (ps3fb.irq_no) {
                free_irq(ps3fb.irq_no, ps3fb.dev);
 -              ps3_free_irq(ps3fb.irq_no);
 +              ps3_irq_plug_destroy(ps3fb.irq_no);
        }
        iounmap((u8 __iomem *)ps3fb.dinfo);
  
 
          are likely to be bus or driver specific.
  
  config SOFTWARE_SUSPEND
-       bool "Software Suspend"
+       bool "Software Suspend (Hibernation)"
 -      depends on PM && SWAP && ((X86 && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP))
 +      depends on PM && SWAP && (((X86 || PPC64_SWSUSP) && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP))
        ---help---
-         Enable the suspend to disk (STD) functionality.
+         Enable the suspend to disk (STD) functionality, which is usually
+         called "hibernation" in user interfaces.  STD checkpoints the
+         system and powers it off; and restores that checkpoint on reboot.
  
          You can suspend your machine with 'echo disk > /sys/power/state'.
          Alternatively, you can use the additional userland tools available