Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 29 Dec 2008 00:54:33 +0000 (16:54 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 29 Dec 2008 00:54:33 +0000 (16:54 -0800)
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (144 commits)
  powerpc/44x: Support 16K/64K base page sizes on 44x
  powerpc: Force memory size to be a multiple of PAGE_SIZE
  powerpc/32: Wire up the trampoline code for kdump
  powerpc/32: Add the ability for a classic ppc kernel to be loaded at 32M
  powerpc/32: Allow __ioremap on RAM addresses for kdump kernel
  powerpc/32: Setup OF properties for kdump
  powerpc/32/kdump: Implement crash_setup_regs() using ppc_save_regs()
  powerpc: Prepare xmon_save_regs for use with kdump
  powerpc: Remove default kexec/crash_kernel ops assignments
  powerpc: Make default kexec/crash_kernel ops implicit
  powerpc: Setup OF properties for ppc32 kexec
  powerpc/pseries: Fix cpu hotplug
  powerpc: Fix KVM build on ppc440
  powerpc/cell: add QPACE as a separate Cell platform
  powerpc/cell: fix build breakage with CONFIG_SPUFS disabled
  powerpc/mpc5200: fix error paths in PSC UART probe function
  powerpc/mpc5200: add rts/cts handling in PSC UART driver
  powerpc/mpc5200: Make PSC UART driver update serial errors counters
  powerpc/mpc5200: Remove obsolete code from mpc5200 MDIO driver
  powerpc/mpc5200: Add MDMA/UDMA support to MPC5200 ATA driver
  ...

Fix trivial conflict in drivers/char/Makefile as per Paul's directions

13 files changed:
1  2 
arch/powerpc/Kconfig
arch/powerpc/boot/dts/mpc8315erdb.dts
arch/powerpc/boot/dts/mpc8349emitx.dts
arch/powerpc/boot/dts/mpc8349emitxgp.dts
arch/powerpc/boot/dts/mpc8377_rdb.dts
arch/powerpc/boot/dts/mpc8378_rdb.dts
arch/powerpc/boot/dts/mpc8379_rdb.dts
arch/powerpc/boot/dts/mpc8572ds.dts
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/vdso.c
arch/powerpc/mm/fault.c
drivers/char/Kconfig
drivers/char/Makefile

diff --combined arch/powerpc/Kconfig
index adb23ea1c1ef1b2ed2965efb0d0a0da3cff429fe,1af22579e3d4af54158d24b667b43d7bd24f5aa3..79f25cef32dfe72b0d230ce6642ce95c747f080d
@@@ -141,7 -141,7 +141,7 @@@ config GENERIC_NVRA
        bool
        default y if PPC32
  
 -config SCHED_NO_NO_OMIT_FRAME_POINTER
 +config SCHED_OMIT_FRAME_POINTER
        bool
        default y
  
@@@ -285,6 -285,10 +285,10 @@@ config IOMMU_VMERG
  config IOMMU_HELPER
        def_bool PPC64
  
+ config PPC_NEED_DMA_SYNC_OPS
+       def_bool y
+       depends on NOT_COHERENT_CACHE
  config HOTPLUG_CPU
        bool "Support for enabling/disabling CPUs"
        depends on SMP && HOTPLUG && EXPERIMENTAL && (PPC_PSERIES || PPC_PMAC)
@@@ -322,7 -326,7 +326,7 @@@ config KEXE
  
  config CRASH_DUMP
        bool "Build a kdump crash kernel"
-       depends on PPC_MULTIPLATFORM && PPC64 && RELOCATABLE
+       depends on (PPC64 && RELOCATABLE) || 6xx
        help
          Build a kernel suitable for use as a kdump capture kernel.
          The same kernel binary can be used as production kernel and dump
@@@ -401,23 -405,53 +405,53 @@@ config PPC_HAS_HASH_64
        depends on PPC64
        default n
  
- config PPC_64K_PAGES
-       bool "64k page size"
-       depends on PPC64
-       select PPC_HAS_HASH_64K
+ choice
+       prompt "Page size"
+       default PPC_4K_PAGES
        help
-         This option changes the kernel logical page size to 64k. On machines
-         without processor support for 64k pages, the kernel will simulate
-         them by loading each individual 4k page on demand transparently,
-         while on hardware with such support, it will be used to map
-         normal application pages.
+         Select the kernel logical page size. Increasing the page size
+         will reduce software overhead at each page boundary, allow
+         hardware prefetch mechanisms to be more effective, and allow
+         larger dma transfers increasing IO efficiency and reducing
+         overhead. However the utilization of memory will increase.
+         For example, each cached file will using a multiple of the
+         page size to hold its contents and the difference between the
+         end of file and the end of page is wasted.
+         Some dedicated systems, such as software raid serving with
+         accelerated calculations, have shown significant increases.
+         If you configure a 64 bit kernel for 64k pages but the
+         processor does not support them, then the kernel will simulate
+         them with 4k pages, loading them on demand, but with the
+         reduced software overhead and larger internal fragmentation.
+         For the 32 bit kernel, a large page option will not be offered
+         unless it is supported by the configured processor.
+         If unsure, choose 4K_PAGES.
+ config PPC_4K_PAGES
+       bool "4k page size"
+ config PPC_16K_PAGES
+       bool "16k page size" if 44x
+ config PPC_64K_PAGES
+       bool "64k page size" if 44x || PPC_STD_MMU_64
+       select PPC_HAS_HASH_64K if PPC_STD_MMU_64
+ endchoice
  
  config FORCE_MAX_ZONEORDER
        int "Maximum zone order"
-       range 9 64 if PPC_64K_PAGES
-       default "9" if PPC_64K_PAGES
-       range 13 64 if PPC64 && !PPC_64K_PAGES
-       default "13" if PPC64 && !PPC_64K_PAGES
+       range 9 64 if PPC_STD_MMU_64 && PPC_64K_PAGES
+       default "9" if PPC_STD_MMU_64 && PPC_64K_PAGES
+       range 13 64 if PPC_STD_MMU_64 && !PPC_64K_PAGES
+       default "13" if PPC_STD_MMU_64 && !PPC_64K_PAGES
+       range 9 64 if PPC_STD_MMU_32 && PPC_16K_PAGES
+       default "9" if PPC_STD_MMU_32 && PPC_16K_PAGES
+       range 7 64 if PPC_STD_MMU_32 && PPC_64K_PAGES
+       default "7" if PPC_STD_MMU_32 && PPC_64K_PAGES
        range 11 64
        default "11"
        help
  
  config PPC_SUBPAGE_PROT
        bool "Support setting protections for 4k subpages"
-       depends on PPC_64K_PAGES
+       depends on PPC_STD_MMU_64 && PPC_64K_PAGES
        help
          This option adds support for a system call to allow user programs
          to set access permissions (read/write, readonly, or no access)
index d2cdd47a246d5a94e112ac4888f0896b24fe0c6b,d3d3097b873a9c7ec0a194deb0bac6fb91621ea5..072c9b0f8c8e837845e8bb9af1b5a433186e675d
                        interrupt-parent = <&ipic>;
                        dfsrr;
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                        };
                                reg = <0x1>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
 +
                enet0: ethernet@24000 {
                        cell-index = <0>;
                        device_type = "network";
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <32 0x8 33 0x8 34 0x8>;
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = < &phy0 >;
                };
  
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <35 0x8 36 0x8 37 0x8>;
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi1>;
                        phy-handle = < &phy1 >;
                };
  
index 712783d0707ecf0dc8d12c5e6006e3005486508f,5ba5c6633b810780eeff64033ddb90b35f9dc0af..b5eda94a8e2aa3afb1b108b138de1ff68cb5ed6f
@@@ -85,7 -85,6 +85,6 @@@
                        dfsrr;
  
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                                interrupts = <18 0x8>;
                                reg = <0x1c>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
                enet0: ethernet@24000 {
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <32 0x8 33 0x8 34 0x8>;
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = <&phy1c>;
                        linux,network-index = <0>;
                };
                        /* Vitesse 7385 isn't on the MDIO bus */
                        fixed-link = <1 1 1000 0 0>;
                        linux,network-index = <1>;
 +                      tbi-handle = <&tbi1>;
                };
  
                serial0: serial@4500 {
index 3e918af41fb137215dc0b85971ea6e6990c7f2b8,fd4bbc4cbe3096a63e4a7e64860b7295ea1ba853..c87a6015e165a9ac5aaf4f57fef1f76900e8ede8
@@@ -83,7 -83,6 +83,6 @@@
                        dfsrr;
  
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                                interrupts = <18 0x8>;
                                reg = <0x1c>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
                enet0: ethernet@24000 {
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <32 0x8 33 0x8 34 0x8>;
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = <&phy1c>;
                        linux,network-index = <0>;
                };
index 31f348fdfe148d5ff35acf920e8e5766bf0ab0c2,9fe8e4c96b18207ee24f0a606ab40fe288543ef0..9413af3b99259c14fa1ea9127896d89f20dd5dcb
                        interrupt-parent = <&ipic>;
                        dfsrr;
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                        };
                                reg = <0x2>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
 +
                enet0: ethernet@24000 {
                        cell-index = <0>;
                        device_type = "network";
                        interrupts = <32 0x8 33 0x8 34 0x8>;
                        phy-connection-type = "mii";
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = <&phy2>;
                };
  
                        phy-connection-type = "mii";
                        interrupt-parent = <&ipic>;
                        fixed-link = <1 1 1000 0 0>;
 +                      tbi-handle = <&tbi1>;
                };
  
                serial0: serial@4500 {
index 7a2bad038bd611926b1acdf48b5820ef203bd782,3a6d5287539c2d0416c131d9439a6b71cc63cf48..23c10ce22c2cd6b95597e52a975eed284d54ddea
                        interrupt-parent = <&ipic>;
                        dfsrr;
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                        };
                                reg = <0x2>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
 +
                enet0: ethernet@24000 {
                        cell-index = <0>;
                        device_type = "network";
index e067616f3f42ed69995ac7ec9f682669e218b6e7,ee64def1921032d45c3ba5360d9c35f6c2831d46..72cdc3c4c7e36190e2c7c144c414e53d855165b4
                        interrupt-parent = <&ipic>;
                        dfsrr;
                        rtc@68 {
-                               device_type = "rtc";
                                compatible = "dallas,ds1339";
                                reg = <0x68>;
                        };
                                reg = <0x2>;
                                device_type = "ethernet-phy";
                        };
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
                enet0: ethernet@24000 {
                        interrupts = <32 0x8 33 0x8 34 0x8>;
                        phy-connection-type = "mii";
                        interrupt-parent = <&ipic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = <&phy2>;
                };
  
                        phy-connection-type = "mii";
                        interrupt-parent = <&ipic>;
                        fixed-link = <1 1 1000 0 0>;
 +                      tbi-handle = <&tbi1>;
                };
  
                serial0: serial@4500 {
index 05f67253b49fcf54e18d2a848c8bdf2ee71e6e7c,a10506e6fa27a031cb5d9865d4f2010abdd7965b..21459e161d02ee0513a6db3c44e928eb884d401f
                device_type = "memory";
        };
  
+       localbus@ffe05000 {
+               #address-cells = <2>;
+               #size-cells = <1>;
+               compatible = "fsl,mpc8572-elbc", "fsl,elbc", "simple-bus";
+               reg = <0 0xffe05000 0 0x1000>;
+               interrupts = <19 2>;
+               interrupt-parent = <&mpic>;
+               ranges = <0x0 0x0 0x0 0xe8000000 0x08000000
+                         0x1 0x0 0x0 0xe0000000 0x08000000
+                         0x2 0x0 0x0 0xffa00000 0x00040000
+                         0x3 0x0 0x0 0xffdf0000 0x00008000
+                         0x4 0x0 0x0 0xffa40000 0x00040000
+                         0x5 0x0 0x0 0xffa80000 0x00040000
+                         0x6 0x0 0x0 0xffac0000 0x00040000>;
+               nor@0,0 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "cfi-flash";
+                       reg = <0x0 0x0 0x8000000>;
+                       bank-width = <2>;
+                       device-width = <1>;
+                       ramdisk@0 {
+                               reg = <0x0 0x03000000>;
+                               readl-only;
+                       };
+                       diagnostic@3000000 {
+                               reg = <0x03000000 0x00e00000>;
+                               read-only;
+                       };
+                       dink@3e00000 {
+                               reg = <0x03e00000 0x00200000>;
+                               read-only;
+                       };
+                       kernel@4000000 {
+                               reg = <0x04000000 0x00400000>;
+                               read-only;
+                       };
+                       jffs2@4400000 {
+                               reg = <0x04400000 0x03b00000>;
+                       };
+                       dtb@7f00000 {
+                               reg = <0x07f00000 0x00080000>;
+                               read-only;
+                       };
+                       u-boot@7f80000 {
+                               reg = <0x07f80000 0x00080000>;
+                               read-only;
+                       };
+               };
+               nand@2,0 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "fsl,mpc8572-fcm-nand",
+                                    "fsl,elbc-fcm-nand";
+                       reg = <0x2 0x0 0x40000>;
+                       u-boot@0 {
+                               reg = <0x0 0x02000000>;
+                               read-only;
+                       };
+                       jffs2@2000000 {
+                               reg = <0x02000000 0x10000000>;
+                       };
+                       ramdisk@12000000 {
+                               reg = <0x12000000 0x08000000>;
+                               read-only;
+                       };
+                       kernel@1a000000 {
+                               reg = <0x1a000000 0x04000000>;
+                       };
+                       dtb@1e000000 {
+                               reg = <0x1e000000 0x01000000>;
+                               read-only;
+                       };
+                       empty@1f000000 {
+                               reg = <0x1f000000 0x21000000>;
+                       };
+               };
+               nand@4,0 {
+                       compatible = "fsl,mpc8572-fcm-nand",
+                                    "fsl,elbc-fcm-nand";
+                       reg = <0x4 0x0 0x40000>;
+               };
+               nand@5,0 {
+                       compatible = "fsl,mpc8572-fcm-nand",
+                                    "fsl,elbc-fcm-nand";
+                       reg = <0x5 0x0 0x40000>;
+               };
+               nand@6,0 {
+                       compatible = "fsl,mpc8572-fcm-nand",
+                                    "fsl,elbc-fcm-nand";
+                       reg = <0x6 0x0 0x40000>;
+               };
+       };
        soc8572@ffe00000 {
                #address-cells = <1>;
                #size-cells = <1>;
                                interrupts = <10 1>;
                                reg = <0x3>;
                        };
 +
 +                      tbi0: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@25520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x25520 0x20>;
 +
 +                      tbi1: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@26520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x26520 0x20>;
 +
 +                      tbi2: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
 +              };
 +
 +              mdio@27520 {
 +                      #address-cells = <1>;
 +                      #size-cells = <0>;
 +                      compatible = "fsl,gianfar-tbi";
 +                      reg = <0x27520 0x20>;
 +
 +                      tbi3: tbi-phy@11 {
 +                              reg = <0x11>;
 +                              device_type = "tbi-phy";
 +                      };
                };
  
                enet0: ethernet@24000 {
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <29 2 30 2 34 2>;
                        interrupt-parent = <&mpic>;
 +                      tbi-handle = <&tbi0>;
                        phy-handle = <&phy0>;
                        phy-connection-type = "rgmii-id";
                };
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <35 2 36 2 40 2>;
                        interrupt-parent = <&mpic>;
 +                      tbi-handle = <&tbi1>;
                        phy-handle = <&phy1>;
                        phy-connection-type = "rgmii-id";
                };
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <31 2 32 2 33 2>;
                        interrupt-parent = <&mpic>;
 +                      tbi-handle = <&tbi2>;
                        phy-handle = <&phy2>;
                        phy-connection-type = "rgmii-id";
                };
                        local-mac-address = [ 00 00 00 00 00 00 ];
                        interrupts = <37 2 38 2 39 2>;
                        interrupt-parent = <&mpic>;
 +                      tbi-handle = <&tbi3>;
                        phy-handle = <&phy3>;
                        phy-connection-type = "rgmii-id";
                };
index d17edb4a2f9d57490cc8847b881b07fc3f06d7b9,089209aa21322ef4035a1555a24d833e5bbed2e0..1308a86e9070814a1680d5f40e3ec00fe2b5c637
@@@ -17,7 -17,6 +17,7 @@@ ifdef CONFIG_FUNCTION_TRACE
  CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog
  CFLAGS_REMOVE_prom_init.o = -pg -mno-sched-epilog
  CFLAGS_REMOVE_btext.o = -pg -mno-sched-epilog
 +CFLAGS_REMOVE_prom.o = -pg -mno-sched-epilog
  
  ifdef CONFIG_DYNAMIC_FTRACE
  # dynamic ftrace setup.
@@@ -103,6 -102,10 +103,10 @@@ endi
  
  obj-$(CONFIG_PPC64)           += $(obj64-y)
  
+ ifneq ($(CONFIG_XMON)$(CONFIG_KEXEC),)
+ obj-y                         += ppc_save_regs.o
+ endif
  extra-$(CONFIG_PPC_FPU)               += fpu.o
  extra-$(CONFIG_PPC64)         += entry_64.o
  
index f7ec7d0888fef270bc33aeb26bd8a074af917664,e619d424f73d784380b2cc3e2a1fb5310b5227cc..ad06d5c75b15ddb4ac6c92e00cfde45f3174d452
@@@ -184,7 -184,8 +184,7 @@@ static void dump_vdso_pages(struct vm_a
   * This is called from binfmt_elf, we create the special vma for the
   * vDSO and insert it into the mm struct tree
   */
 -int arch_setup_additional_pages(struct linux_binprm *bprm,
 -                              int executable_stack)
 +int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
  {
        struct mm_struct *mm = current->mm;
        struct page **vdso_pagelist;
@@@ -566,6 -567,11 +566,11 @@@ static __init int vdso_fixup_features(s
                do_feature_fixups(cur_cpu_spec->cpu_features,
                                  start64, start64 + size64);
  
+       start64 = find_section64(v64->hdr, "__mmu_ftr_fixup", &size64);
+       if (start64)
+               do_feature_fixups(cur_cpu_spec->mmu_features,
+                                 start64, start64 + size64);
        start64 = find_section64(v64->hdr, "__fw_ftr_fixup", &size64);
        if (start64)
                do_feature_fixups(powerpc_firmware_features,
                do_feature_fixups(cur_cpu_spec->cpu_features,
                                  start32, start32 + size32);
  
+       start32 = find_section32(v32->hdr, "__mmu_ftr_fixup", &size32);
+       if (start32)
+               do_feature_fixups(cur_cpu_spec->mmu_features,
+                                 start32, start32 + size32);
  #ifdef CONFIG_PPC64
        start32 = find_section32(v32->hdr, "__fw_ftr_fixup", &size32);
        if (start32)
diff --combined arch/powerpc/mm/fault.c
index 866098686da8116c128ad02c2e1cc871acc6dfb2,87f1f955dea428cb832b3ee8f3e7762d39bd4b86..91c7b8636b8a751ba160a7791df929be25d32543
@@@ -30,6 -30,7 +30,7 @@@
  #include <linux/kprobes.h>
  #include <linux/kdebug.h>
  
+ #include <asm/firmware.h>
  #include <asm/page.h>
  #include <asm/pgtable.h>
  #include <asm/mmu.h>
@@@ -283,7 -284,7 +284,7 @@@ good_area
                                }
                                pte_update(ptep, 0, _PAGE_HWEXEC |
                                           _PAGE_ACCESSED);
-                               _tlbie(address, mm->context.id);
+                               local_flush_tlb_page(vma, address);
                                pte_unmap_unlock(ptep, ptl);
                                up_read(&mm->mmap_sem);
                                return 0;
                        goto do_sigbus;
                BUG();
        }
-       if (ret & VM_FAULT_MAJOR)
+       if (ret & VM_FAULT_MAJOR) {
                current->maj_flt++;
-       else
+ #ifdef CONFIG_PPC_SMLPAR
+               if (firmware_has_feature(FW_FEATURE_CMO)) {
+                       preempt_disable();
+                       get_lppaca()->page_ins += (1 << PAGE_FACTOR);
+                       preempt_enable();
+               }
+ #endif
+       } else
                current->min_flt++;
        up_read(&mm->mmap_sem);
        return 0;
@@@ -339,7 -347,7 +347,7 @@@ bad_area_nosemaphore
            && printk_ratelimit())
                printk(KERN_CRIT "kernel tried to execute NX-protected"
                       " page (%lx) - exploit attempt? (uid: %d)\n",
 -                     address, current->uid);
 +                     address, current_uid());
  
        return SIGSEGV;
  
diff --combined drivers/char/Kconfig
index 8783457b93d3af4db7ab9499864f1eef4c9f3843,f57907a2c7a134fe078519cabe489f3ae819ca66..c602b547cc6e08afd842182b80fac140c13766cb
@@@ -622,16 -622,6 +622,16 @@@ config HVC_BEA
        help
          Toshiba's Cell Reference Set Beat Console device driver
  
 +config HVC_IUCV
 +      bool "z/VM IUCV Hypervisor console support (VM only)"
 +      depends on S390
 +      select HVC_DRIVER
 +      select IUCV
 +      default y
 +      help
 +        This driver provides a Hypervisor console (HVC) back-end to access
 +        a Linux (console) terminal via a z/VM IUCV communication path.
 +
  config HVC_XEN
        bool "Xen Hypervisor Console support"
        depends on XEN
        help
          Xen virtual console device driver
  
+ config HVC_UDBG
+        bool "udbg based fake hypervisor console"
+        depends on PPC && EXPERIMENTAL
+        select HVC_DRIVER
+        default n
  config VIRTIO_CONSOLE
        tristate "Virtio console"
        depends on VIRTIO
diff --combined drivers/char/Makefile
index 36151bae0d727bb54145568a0f2057385f21e433,52e15524af39d1c664d25e962692efd36753be9a..9caf5b5ad1c05bfbe9ec4f7683a7f1c8c852005e
@@@ -50,7 -50,7 +50,8 @@@ obj-$(CONFIG_HVC_BEAT)                += hvc_beat.
  obj-$(CONFIG_HVC_DRIVER)      += hvc_console.o
  obj-$(CONFIG_HVC_IRQ)         += hvc_irq.o
  obj-$(CONFIG_HVC_XEN)         += hvc_xen.o
 +obj-$(CONFIG_HVC_IUCV)                += hvc_iucv.o
+ obj-$(CONFIG_HVC_UDBG)                += hvc_udbg.o
  obj-$(CONFIG_VIRTIO_CONSOLE)  += virtio_console.o
  obj-$(CONFIG_RAW_DRIVER)      += raw.o
  obj-$(CONFIG_SGI_SNSC)                += snsc.o snsc_event.o