aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2012-08-05 06:25:10 -0400
committerAvi Kivity <avi@redhat.com>2012-08-05 06:25:10 -0400
commitfe56097b23b1303b894eefd91582e4a64247d03f (patch)
tree4b3ab60eb19e8cfe2884e2da66dd4e4e25ae2274 /arch/powerpc
parente115676e042f4d9268c6b6d8cb7dc962aa6cfd7d (diff)
parente7882d6c40874a5b5033ca85f7508a602a60b662 (diff)
Merge remote-tracking branch 'upstream' into next
- bring back critical fixes (esp. aa67f6096c19bc) - provide an updated base for development * upstream: (4334 commits) missed mnt_drop_write() in do_dentry_open() UBIFS: nuke pdflush from comments gfs2: nuke pdflush from comments drbd: nuke pdflush from comments nilfs2: nuke write_super from comments hfs: nuke write_super from comments vfs: nuke pdflush from comments jbd/jbd2: nuke write_super from comments btrfs: nuke pdflush from comments btrfs: nuke write_super from comments ext4: nuke pdflush from comments ext4: nuke write_super from comments ext3: nuke write_super from comments Documentation: fix the VM knobs descritpion WRT pdflush Documentation: get rid of write_super vfs: kill write_super and sync_supers ACPI processor: Fix tick_broadcast_mask online/offline regression ACPI: Only count valid srat memory structures ACPI: Untangle a return statement for better readability Linux 3.6-rc1 ... Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/Makefile1
-rw-r--r--arch/powerpc/boot/dts/p2020rdb-pc_32b.dts4
-rw-r--r--arch/powerpc/boot/dts/p2020rdb-pc_36b.dts4
-rw-r--r--arch/powerpc/boot/dts/p3041ds.dts2
-rw-r--r--arch/powerpc/configs/chroma_defconfig4
-rw-r--r--arch/powerpc/configs/g5_defconfig103
-rw-r--r--arch/powerpc/configs/ppc64_defconfig6
-rw-r--r--arch/powerpc/configs/pseries_defconfig6
-rw-r--r--arch/powerpc/include/asm/dma-mapping.h8
-rw-r--r--arch/powerpc/include/asm/kmap_types.h31
-rw-r--r--arch/powerpc/include/asm/unistd.h1
-rw-r--r--arch/powerpc/kernel/dma-iommu.c1
-rw-r--r--arch/powerpc/kernel/dma-swiotlb.c1
-rw-r--r--arch/powerpc/kernel/dma.c36
-rw-r--r--arch/powerpc/kernel/entry_32.S12
-rw-r--r--arch/powerpc/kernel/ftrace.c11
-rw-r--r--arch/powerpc/kernel/rtas_flash.c2
-rw-r--r--arch/powerpc/kernel/vio.c1
-rw-r--r--arch/powerpc/kvm/book3s_rmhandlers.S1
-rw-r--r--arch/powerpc/kvm/bookehv_interrupts.S77
-rw-r--r--arch/powerpc/platforms/85xx/p1022_ds.c122
-rw-r--r--arch/powerpc/platforms/cell/spufs/inode.c77
-rw-r--r--arch/powerpc/platforms/cell/spufs/syscalls.c2
-rw-r--r--arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h4
-rw-r--r--arch/powerpc/sysdev/fsl_85xx_l2ctlr.c39
-rw-r--r--arch/powerpc/sysdev/xics/icp-hv.c2
-rw-r--r--arch/powerpc/sysdev/xics/icp-native.c2
-rw-r--r--arch/powerpc/sysdev/xics/xics-common.c3
29 files changed, 273 insertions, 292 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9a5d3cdc3e1..352f416269c 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -115,11 +115,13 @@ config PPC
115 select HAVE_OPROFILE 115 select HAVE_OPROFILE
116 select HAVE_SYSCALL_WRAPPERS if PPC64 116 select HAVE_SYSCALL_WRAPPERS if PPC64
117 select GENERIC_ATOMIC64 if PPC32 117 select GENERIC_ATOMIC64 if PPC32
118 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
118 select HAVE_IRQ_WORK 119 select HAVE_IRQ_WORK
119 select HAVE_PERF_EVENTS 120 select HAVE_PERF_EVENTS
120 select HAVE_REGS_AND_STACK_ACCESS_API 121 select HAVE_REGS_AND_STACK_ACCESS_API
121 select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 122 select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
122 select HAVE_GENERIC_HARDIRQS 123 select HAVE_GENERIC_HARDIRQS
124 select ARCH_WANT_IPC_PARSE_VERSION
123 select SPARSE_IRQ 125 select SPARSE_IRQ
124 select IRQ_PER_CPU 126 select IRQ_PER_CPU
125 select IRQ_DOMAIN 127 select IRQ_DOMAIN
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 950d1f7a5a3..159e94f4b22 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -149,7 +149,6 @@ core-$(CONFIG_KVM) += arch/powerpc/kvm/
149core-$(CONFIG_PERF_EVENTS) += arch/powerpc/perf/ 149core-$(CONFIG_PERF_EVENTS) += arch/powerpc/perf/
150 150
151drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/ 151drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
152drivers-$(CONFIG_CRYPTO_DEV_NX) += drivers/crypto/nx/
153 152
154# Default to zImage, override when needed 153# Default to zImage, override when needed
155all: zImage 154all: zImage
diff --git a/arch/powerpc/boot/dts/p2020rdb-pc_32b.dts b/arch/powerpc/boot/dts/p2020rdb-pc_32b.dts
index 852e5b27485..57573bd52ca 100644
--- a/arch/powerpc/boot/dts/p2020rdb-pc_32b.dts
+++ b/arch/powerpc/boot/dts/p2020rdb-pc_32b.dts
@@ -56,7 +56,7 @@
56 ranges = <0x0 0x0 0xffe00000 0x100000>; 56 ranges = <0x0 0x0 0xffe00000 0x100000>;
57 }; 57 };
58 58
59 pci0: pcie@ffe08000 { 59 pci2: pcie@ffe08000 {
60 reg = <0 0xffe08000 0 0x1000>; 60 reg = <0 0xffe08000 0 0x1000>;
61 status = "disabled"; 61 status = "disabled";
62 }; 62 };
@@ -76,7 +76,7 @@
76 }; 76 };
77 }; 77 };
78 78
79 pci2: pcie@ffe0a000 { 79 pci0: pcie@ffe0a000 {
80 reg = <0 0xffe0a000 0 0x1000>; 80 reg = <0 0xffe0a000 0 0x1000>;
81 ranges = <0x2000000 0x0 0xe0000000 0 0x80000000 0x0 0x20000000 81 ranges = <0x2000000 0x0 0xe0000000 0 0x80000000 0x0 0x20000000
82 0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>; 82 0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>;
diff --git a/arch/powerpc/boot/dts/p2020rdb-pc_36b.dts b/arch/powerpc/boot/dts/p2020rdb-pc_36b.dts
index b5a56ca51cf..470247ea68b 100644
--- a/arch/powerpc/boot/dts/p2020rdb-pc_36b.dts
+++ b/arch/powerpc/boot/dts/p2020rdb-pc_36b.dts
@@ -56,7 +56,7 @@
56 ranges = <0x0 0xf 0xffe00000 0x100000>; 56 ranges = <0x0 0xf 0xffe00000 0x100000>;
57 }; 57 };
58 58
59 pci0: pcie@fffe08000 { 59 pci2: pcie@fffe08000 {
60 reg = <0xf 0xffe08000 0 0x1000>; 60 reg = <0xf 0xffe08000 0 0x1000>;
61 status = "disabled"; 61 status = "disabled";
62 }; 62 };
@@ -76,7 +76,7 @@
76 }; 76 };
77 }; 77 };
78 78
79 pci2: pcie@fffe0a000 { 79 pci0: pcie@fffe0a000 {
80 reg = <0xf 0xffe0a000 0 0x1000>; 80 reg = <0xf 0xffe0a000 0 0x1000>;
81 ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000 81 ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000
82 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>; 82 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>;
diff --git a/arch/powerpc/boot/dts/p3041ds.dts b/arch/powerpc/boot/dts/p3041ds.dts
index 22a215e9416..6cdcadc80c3 100644
--- a/arch/powerpc/boot/dts/p3041ds.dts
+++ b/arch/powerpc/boot/dts/p3041ds.dts
@@ -58,7 +58,7 @@
58 #size-cells = <1>; 58 #size-cells = <1>;
59 compatible = "spansion,s25sl12801"; 59 compatible = "spansion,s25sl12801";
60 reg = <0>; 60 reg = <0>;
61 spi-max-frequency = <40000000>; /* input clock */ 61 spi-max-frequency = <35000000>; /* input clock */
62 partition@u-boot { 62 partition@u-boot {
63 label = "u-boot"; 63 label = "u-boot";
64 reg = <0x00000000 0x00100000>; 64 reg = <0x00000000 0x00100000>;
diff --git a/arch/powerpc/configs/chroma_defconfig b/arch/powerpc/configs/chroma_defconfig
index b1f9597fe31..29bb11ec6c6 100644
--- a/arch/powerpc/configs/chroma_defconfig
+++ b/arch/powerpc/configs/chroma_defconfig
@@ -21,8 +21,8 @@ CONFIG_CGROUP_DEVICE=y
21CONFIG_CPUSETS=y 21CONFIG_CPUSETS=y
22CONFIG_CGROUP_CPUACCT=y 22CONFIG_CGROUP_CPUACCT=y
23CONFIG_RESOURCE_COUNTERS=y 23CONFIG_RESOURCE_COUNTERS=y
24CONFIG_CGROUP_MEM_RES_CTLR=y 24CONFIG_CGROUP_MEMCG=y
25CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y 25CONFIG_CGROUP_MEMCG_SWAP=y
26CONFIG_NAMESPACES=y 26CONFIG_NAMESPACES=y
27CONFIG_RELAY=y 27CONFIG_RELAY=y
28CONFIG_BLK_DEV_INITRD=y 28CONFIG_BLK_DEV_INITRD=y
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
index 07b7f2af2dc..15130066e5e 100644
--- a/arch/powerpc/configs/g5_defconfig
+++ b/arch/powerpc/configs/g5_defconfig
@@ -1,10 +1,8 @@
1CONFIG_PPC64=y
2CONFIG_ALTIVEC=y
3CONFIG_SMP=y
4CONFIG_NR_CPUS=4
5CONFIG_EXPERIMENTAL=y 1CONFIG_EXPERIMENTAL=y
6CONFIG_SYSVIPC=y 2CONFIG_SYSVIPC=y
7CONFIG_POSIX_MQUEUE=y 3CONFIG_POSIX_MQUEUE=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
8CONFIG_IKCONFIG=y 6CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y 7CONFIG_IKCONFIG_PROC=y
10CONFIG_BLK_DEV_INITRD=y 8CONFIG_BLK_DEV_INITRD=y
@@ -15,16 +13,15 @@ CONFIG_MODULES=y
15CONFIG_MODULE_UNLOAD=y 13CONFIG_MODULE_UNLOAD=y
16CONFIG_MODVERSIONS=y 14CONFIG_MODVERSIONS=y
17CONFIG_MODULE_SRCVERSION_ALL=y 15CONFIG_MODULE_SRCVERSION_ALL=y
18# CONFIG_PPC_PSERIES is not set 16CONFIG_PARTITION_ADVANCED=y
17CONFIG_MAC_PARTITION=y
18CONFIG_SMP=y
19CONFIG_NR_CPUS=4
20CONFIG_KEXEC=y
21# CONFIG_RELOCATABLE is not set
19CONFIG_CPU_FREQ=y 22CONFIG_CPU_FREQ=y
20CONFIG_CPU_FREQ_GOV_POWERSAVE=y 23CONFIG_CPU_FREQ_GOV_POWERSAVE=y
21CONFIG_CPU_FREQ_GOV_USERSPACE=y 24CONFIG_CPU_FREQ_GOV_USERSPACE=y
22CONFIG_CPU_FREQ_PMAC64=y
23CONFIG_NO_HZ=y
24CONFIG_HIGH_RES_TIMERS=y
25CONFIG_KEXEC=y
26CONFIG_IRQ_ALL_CPUS=y
27# CONFIG_MIGRATION is not set
28CONFIG_PCI_MSI=y 25CONFIG_PCI_MSI=y
29CONFIG_NET=y 26CONFIG_NET=y
30CONFIG_PACKET=y 27CONFIG_PACKET=y
@@ -52,7 +49,6 @@ CONFIG_NF_CT_NETLINK=m
52CONFIG_NF_CONNTRACK_IPV4=m 49CONFIG_NF_CONNTRACK_IPV4=m
53CONFIG_IP_NF_QUEUE=m 50CONFIG_IP_NF_QUEUE=m
54CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
55CONFIG_PROC_DEVICETREE=y
56CONFIG_BLK_DEV_LOOP=y 52CONFIG_BLK_DEV_LOOP=y
57CONFIG_BLK_DEV_NBD=m 53CONFIG_BLK_DEV_NBD=m
58CONFIG_BLK_DEV_RAM=y 54CONFIG_BLK_DEV_RAM=y
@@ -60,8 +56,6 @@ CONFIG_BLK_DEV_RAM_SIZE=65536
60CONFIG_CDROM_PKTCDVD=m 56CONFIG_CDROM_PKTCDVD=m
61CONFIG_IDE=y 57CONFIG_IDE=y
62CONFIG_BLK_DEV_IDECD=y 58CONFIG_BLK_DEV_IDECD=y
63CONFIG_BLK_DEV_IDE_PMAC=y
64CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
65CONFIG_BLK_DEV_SD=y 59CONFIG_BLK_DEV_SD=y
66CONFIG_CHR_DEV_ST=y 60CONFIG_CHR_DEV_ST=y
67CONFIG_BLK_DEV_SR=y 61CONFIG_BLK_DEV_SR=y
@@ -85,33 +79,24 @@ CONFIG_DM_CRYPT=m
85CONFIG_DM_SNAPSHOT=m 79CONFIG_DM_SNAPSHOT=m
86CONFIG_DM_MIRROR=m 80CONFIG_DM_MIRROR=m
87CONFIG_DM_ZERO=m 81CONFIG_DM_ZERO=m
88CONFIG_IEEE1394=y 82CONFIG_MACINTOSH_DRIVERS=y
89CONFIG_IEEE1394_OHCI1394=y
90CONFIG_IEEE1394_SBP2=m
91CONFIG_IEEE1394_ETH1394=m
92CONFIG_IEEE1394_RAWIO=y
93CONFIG_IEEE1394_VIDEO1394=m
94CONFIG_IEEE1394_DV1394=m
95CONFIG_ADB_PMU=y
96CONFIG_PMAC_SMU=y
97CONFIG_MAC_EMUMOUSEBTN=y 83CONFIG_MAC_EMUMOUSEBTN=y
98CONFIG_THERM_PM72=y
99CONFIG_WINDFARM=y
100CONFIG_WINDFARM_PM81=y
101CONFIG_WINDFARM_PM91=y
102CONFIG_WINDFARM_PM112=y
103CONFIG_WINDFARM_PM121=y
104CONFIG_NETDEVICES=y 84CONFIG_NETDEVICES=y
105CONFIG_DUMMY=m
106CONFIG_BONDING=m 85CONFIG_BONDING=m
107CONFIG_TUN=m 86CONFIG_DUMMY=m
108CONFIG_NET_ETHERNET=y
109CONFIG_MII=y 87CONFIG_MII=y
110CONFIG_SUNGEM=y 88CONFIG_TUN=m
111CONFIG_ACENIC=m 89CONFIG_ACENIC=m
112CONFIG_ACENIC_OMIT_TIGON_I=y 90CONFIG_ACENIC_OMIT_TIGON_I=y
113CONFIG_E1000=y
114CONFIG_TIGON3=y 91CONFIG_TIGON3=y
92CONFIG_E1000=y
93CONFIG_SUNGEM=y
94CONFIG_PPP=m
95CONFIG_PPP_BSDCOMP=m
96CONFIG_PPP_DEFLATE=m
97CONFIG_PPPOE=m
98CONFIG_PPP_ASYNC=m
99CONFIG_PPP_SYNC_TTY=m
115CONFIG_USB_CATC=m 100CONFIG_USB_CATC=m
116CONFIG_USB_KAWETH=m 101CONFIG_USB_KAWETH=m
117CONFIG_USB_PEGASUS=m 102CONFIG_USB_PEGASUS=m
@@ -121,36 +106,24 @@ CONFIG_USB_USBNET=m
121# CONFIG_USB_NET_NET1080 is not set 106# CONFIG_USB_NET_NET1080 is not set
122# CONFIG_USB_NET_CDC_SUBSET is not set 107# CONFIG_USB_NET_CDC_SUBSET is not set
123# CONFIG_USB_NET_ZAURUS is not set 108# CONFIG_USB_NET_ZAURUS is not set
124CONFIG_PPP=m
125CONFIG_PPP_ASYNC=m
126CONFIG_PPP_SYNC_TTY=m
127CONFIG_PPP_DEFLATE=m
128CONFIG_PPP_BSDCOMP=m
129CONFIG_PPPOE=m
130# CONFIG_INPUT_MOUSEDEV_PSAUX is not set 109# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
131CONFIG_INPUT_JOYDEV=m 110CONFIG_INPUT_JOYDEV=m
132CONFIG_INPUT_EVDEV=y 111CONFIG_INPUT_EVDEV=y
133# CONFIG_KEYBOARD_ATKBD is not set
134# CONFIG_MOUSE_PS2 is not set 112# CONFIG_MOUSE_PS2 is not set
135# CONFIG_SERIO_I8042 is not set
136# CONFIG_SERIO_SERPORT is not set 113# CONFIG_SERIO_SERPORT is not set
114CONFIG_VT_HW_CONSOLE_BINDING=y
137# CONFIG_HW_RANDOM is not set 115# CONFIG_HW_RANDOM is not set
138CONFIG_GEN_RTC=y 116CONFIG_GEN_RTC=y
139CONFIG_RAW_DRIVER=y 117CONFIG_RAW_DRIVER=y
140CONFIG_I2C_CHARDEV=y 118CONFIG_I2C_CHARDEV=y
141# CONFIG_HWMON is not set 119# CONFIG_HWMON is not set
142CONFIG_AGP=m 120CONFIG_AGP=y
143CONFIG_AGP_UNINORTH=m 121CONFIG_DRM=y
122CONFIG_DRM_NOUVEAU=y
144CONFIG_VIDEO_OUTPUT_CONTROL=m 123CONFIG_VIDEO_OUTPUT_CONTROL=m
145CONFIG_FB=y
146CONFIG_FIRMWARE_EDID=y 124CONFIG_FIRMWARE_EDID=y
147CONFIG_FB_TILEBLITTING=y 125CONFIG_FB_TILEBLITTING=y
148CONFIG_FB_OF=y
149CONFIG_FB_NVIDIA=y
150CONFIG_FB_NVIDIA_I2C=y
151CONFIG_FB_RADEON=y 126CONFIG_FB_RADEON=y
152# CONFIG_VGA_CONSOLE is not set
153CONFIG_FRAMEBUFFER_CONSOLE=y
154CONFIG_LOGO=y 127CONFIG_LOGO=y
155CONFIG_SOUND=m 128CONFIG_SOUND=m
156CONFIG_SND=m 129CONFIG_SND=m
@@ -158,15 +131,7 @@ CONFIG_SND_SEQUENCER=m
158CONFIG_SND_MIXER_OSS=m 131CONFIG_SND_MIXER_OSS=m
159CONFIG_SND_PCM_OSS=m 132CONFIG_SND_PCM_OSS=m
160CONFIG_SND_SEQUENCER_OSS=y 133CONFIG_SND_SEQUENCER_OSS=y
161CONFIG_SND_POWERMAC=m
162CONFIG_SND_AOA=m
163CONFIG_SND_AOA_FABRIC_LAYOUT=m
164CONFIG_SND_AOA_ONYX=m
165CONFIG_SND_AOA_TAS=m
166CONFIG_SND_AOA_TOONIE=m
167CONFIG_SND_USB_AUDIO=m 134CONFIG_SND_USB_AUDIO=m
168CONFIG_HID_PID=y
169CONFIG_USB_HIDDEV=y
170CONFIG_HID_GYRATION=y 135CONFIG_HID_GYRATION=y
171CONFIG_LOGITECH_FF=y 136CONFIG_LOGITECH_FF=y
172CONFIG_HID_PANTHERLORD=y 137CONFIG_HID_PANTHERLORD=y
@@ -174,13 +139,12 @@ CONFIG_HID_PETALYNX=y
174CONFIG_HID_SAMSUNG=y 139CONFIG_HID_SAMSUNG=y
175CONFIG_HID_SONY=y 140CONFIG_HID_SONY=y
176CONFIG_HID_SUNPLUS=y 141CONFIG_HID_SUNPLUS=y
142CONFIG_HID_PID=y
143CONFIG_USB_HIDDEV=y
177CONFIG_USB=y 144CONFIG_USB=y
178CONFIG_USB_DEVICEFS=y
179CONFIG_USB_MON=y 145CONFIG_USB_MON=y
180CONFIG_USB_EHCI_HCD=y 146CONFIG_USB_EHCI_HCD=y
181# CONFIG_USB_EHCI_HCD_PPC_OF is not set
182CONFIG_USB_OHCI_HCD=y 147CONFIG_USB_OHCI_HCD=y
183CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
184CONFIG_USB_ACM=m 148CONFIG_USB_ACM=m
185CONFIG_USB_PRINTER=y 149CONFIG_USB_PRINTER=y
186CONFIG_USB_STORAGE=y 150CONFIG_USB_STORAGE=y
@@ -244,8 +208,6 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
244CONFIG_REISERFS_FS_SECURITY=y 208CONFIG_REISERFS_FS_SECURITY=y
245CONFIG_XFS_FS=m 209CONFIG_XFS_FS=m
246CONFIG_XFS_POSIX_ACL=y 210CONFIG_XFS_POSIX_ACL=y
247CONFIG_INOTIFY=y
248CONFIG_AUTOFS_FS=m
249CONFIG_ISO9660_FS=y 211CONFIG_ISO9660_FS=y
250CONFIG_JOLIET=y 212CONFIG_JOLIET=y
251CONFIG_ZISOFS=y 213CONFIG_ZISOFS=y
@@ -259,14 +221,12 @@ CONFIG_HFS_FS=m
259CONFIG_HFSPLUS_FS=m 221CONFIG_HFSPLUS_FS=m
260CONFIG_CRAMFS=y 222CONFIG_CRAMFS=y
261CONFIG_NFS_FS=y 223CONFIG_NFS_FS=y
262CONFIG_NFS_V3=y
263CONFIG_NFS_V3_ACL=y 224CONFIG_NFS_V3_ACL=y
264CONFIG_NFS_V4=y 225CONFIG_NFS_V4=y
265CONFIG_NFSD=y 226CONFIG_NFSD=y
266CONFIG_NFSD_V3_ACL=y 227CONFIG_NFSD_V3_ACL=y
267CONFIG_NFSD_V4=y 228CONFIG_NFSD_V4=y
268CONFIG_CIFS=m 229CONFIG_CIFS=m
269CONFIG_PARTITION_ADVANCED=y
270CONFIG_NLS_CODEPAGE_437=y 230CONFIG_NLS_CODEPAGE_437=y
271CONFIG_NLS_CODEPAGE_1250=y 231CONFIG_NLS_CODEPAGE_1250=y
272CONFIG_NLS_CODEPAGE_1251=y 232CONFIG_NLS_CODEPAGE_1251=y
@@ -274,29 +234,23 @@ CONFIG_NLS_ASCII=y
274CONFIG_NLS_ISO8859_1=y 234CONFIG_NLS_ISO8859_1=y
275CONFIG_NLS_ISO8859_15=y 235CONFIG_NLS_ISO8859_15=y
276CONFIG_NLS_UTF8=y 236CONFIG_NLS_UTF8=y
277CONFIG_CRC_T10DIF=y
278CONFIG_LIBCRC32C=m
279CONFIG_MAGIC_SYSRQ=y 237CONFIG_MAGIC_SYSRQ=y
238# CONFIG_UNUSED_SYMBOLS is not set
280CONFIG_DEBUG_FS=y 239CONFIG_DEBUG_FS=y
281CONFIG_DEBUG_KERNEL=y 240CONFIG_DEBUG_KERNEL=y
282CONFIG_DEBUG_MUTEXES=y 241CONFIG_DEBUG_MUTEXES=y
283# CONFIG_RCU_CPU_STALL_DETECTOR is not set
284CONFIG_LATENCYTOP=y 242CONFIG_LATENCYTOP=y
285CONFIG_SYSCTL_SYSCALL_CHECK=y 243CONFIG_STRICT_DEVMEM=y
286CONFIG_BOOTX_TEXT=y
287CONFIG_CRYPTO_NULL=m 244CONFIG_CRYPTO_NULL=m
288CONFIG_CRYPTO_TEST=m 245CONFIG_CRYPTO_TEST=m
289CONFIG_CRYPTO_ECB=m
290CONFIG_CRYPTO_PCBC=m 246CONFIG_CRYPTO_PCBC=m
291CONFIG_CRYPTO_HMAC=y 247CONFIG_CRYPTO_HMAC=y
292CONFIG_CRYPTO_MD4=m
293CONFIG_CRYPTO_MICHAEL_MIC=m 248CONFIG_CRYPTO_MICHAEL_MIC=m
294CONFIG_CRYPTO_SHA256=m 249CONFIG_CRYPTO_SHA256=m
295CONFIG_CRYPTO_SHA512=m 250CONFIG_CRYPTO_SHA512=m
296CONFIG_CRYPTO_WP512=m 251CONFIG_CRYPTO_WP512=m
297CONFIG_CRYPTO_AES=m 252CONFIG_CRYPTO_AES=m
298CONFIG_CRYPTO_ANUBIS=m 253CONFIG_CRYPTO_ANUBIS=m
299CONFIG_CRYPTO_ARC4=m
300CONFIG_CRYPTO_BLOWFISH=m 254CONFIG_CRYPTO_BLOWFISH=m
301CONFIG_CRYPTO_CAST5=m 255CONFIG_CRYPTO_CAST5=m
302CONFIG_CRYPTO_CAST6=m 256CONFIG_CRYPTO_CAST6=m
@@ -306,3 +260,6 @@ CONFIG_CRYPTO_TEA=m
306CONFIG_CRYPTO_TWOFISH=m 260CONFIG_CRYPTO_TWOFISH=m
307# CONFIG_CRYPTO_ANSI_CPRNG is not set 261# CONFIG_CRYPTO_ANSI_CPRNG is not set
308# CONFIG_CRYPTO_HW is not set 262# CONFIG_CRYPTO_HW is not set
263# CONFIG_VIRTUALIZATION is not set
264CONFIG_CRC_T10DIF=y
265CONFIG_LIBCRC32C=m
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
index f2fe0c2b41e..db27c82e054 100644
--- a/arch/powerpc/configs/ppc64_defconfig
+++ b/arch/powerpc/configs/ppc64_defconfig
@@ -279,7 +279,8 @@ CONFIG_HVC_RTAS=y
279CONFIG_HVC_BEAT=y 279CONFIG_HVC_BEAT=y
280CONFIG_HVCS=m 280CONFIG_HVCS=m
281CONFIG_IBM_BSR=m 281CONFIG_IBM_BSR=m
282# CONFIG_HW_RANDOM is not set 282CONFIG_HW_RANDOM=m
283CONFIG_HW_RANDOM_PSERIES=m
283CONFIG_RAW_DRIVER=y 284CONFIG_RAW_DRIVER=y
284CONFIG_I2C_CHARDEV=y 285CONFIG_I2C_CHARDEV=y
285CONFIG_I2C_AMD8111=y 286CONFIG_I2C_AMD8111=y
@@ -485,7 +486,8 @@ CONFIG_CRYPTO_TEA=m
485CONFIG_CRYPTO_TWOFISH=m 486CONFIG_CRYPTO_TWOFISH=m
486CONFIG_CRYPTO_LZO=m 487CONFIG_CRYPTO_LZO=m
487# CONFIG_CRYPTO_ANSI_CPRNG is not set 488# CONFIG_CRYPTO_ANSI_CPRNG is not set
488# CONFIG_CRYPTO_HW is not set 489CONFIG_CRYPTO_HW=y
490CONFIG_CRYPTO_DEV_NX=m
489CONFIG_VIRTUALIZATION=y 491CONFIG_VIRTUALIZATION=y
490CONFIG_KVM_BOOK3S_64=m 492CONFIG_KVM_BOOK3S_64=m
491CONFIG_KVM_BOOK3S_64_HV=y 493CONFIG_KVM_BOOK3S_64_HV=y
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index 187fb8d5360..1f65b3c9b59 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -226,7 +226,8 @@ CONFIG_HVC_CONSOLE=y
226CONFIG_HVC_RTAS=y 226CONFIG_HVC_RTAS=y
227CONFIG_HVCS=m 227CONFIG_HVCS=m
228CONFIG_IBM_BSR=m 228CONFIG_IBM_BSR=m
229# CONFIG_HW_RANDOM is not set 229CONFIG_HW_RANDOM=m
230CONFIG_HW_RANDOM_PSERIES=m
230CONFIG_GEN_RTC=y 231CONFIG_GEN_RTC=y
231CONFIG_RAW_DRIVER=y 232CONFIG_RAW_DRIVER=y
232CONFIG_MAX_RAW_DEVS=1024 233CONFIG_MAX_RAW_DEVS=1024
@@ -367,7 +368,8 @@ CONFIG_CRYPTO_TEA=m
367CONFIG_CRYPTO_TWOFISH=m 368CONFIG_CRYPTO_TWOFISH=m
368CONFIG_CRYPTO_LZO=m 369CONFIG_CRYPTO_LZO=m
369# CONFIG_CRYPTO_ANSI_CPRNG is not set 370# CONFIG_CRYPTO_ANSI_CPRNG is not set
370# CONFIG_CRYPTO_HW is not set 371CONFIG_CRYPTO_HW=y
372CONFIG_CRYPTO_DEV_NX=m
371CONFIG_VIRTUALIZATION=y 373CONFIG_VIRTUALIZATION=y
372CONFIG_KVM_BOOK3S_64=m 374CONFIG_KVM_BOOK3S_64=m
373CONFIG_KVM_BOOK3S_64_HV=y 375CONFIG_KVM_BOOK3S_64_HV=y
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h
index 62678e365ca..78160874809 100644
--- a/arch/powerpc/include/asm/dma-mapping.h
+++ b/arch/powerpc/include/asm/dma-mapping.h
@@ -27,7 +27,10 @@ extern void *dma_direct_alloc_coherent(struct device *dev, size_t size,
27extern void dma_direct_free_coherent(struct device *dev, size_t size, 27extern void dma_direct_free_coherent(struct device *dev, size_t size,
28 void *vaddr, dma_addr_t dma_handle, 28 void *vaddr, dma_addr_t dma_handle,
29 struct dma_attrs *attrs); 29 struct dma_attrs *attrs);
30 30extern int dma_direct_mmap_coherent(struct device *dev,
31 struct vm_area_struct *vma,
32 void *cpu_addr, dma_addr_t handle,
33 size_t size, struct dma_attrs *attrs);
31 34
32#ifdef CONFIG_NOT_COHERENT_CACHE 35#ifdef CONFIG_NOT_COHERENT_CACHE
33/* 36/*
@@ -207,11 +210,8 @@ static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr)
207#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 210#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
208#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 211#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
209 212
210extern int dma_mmap_coherent(struct device *, struct vm_area_struct *,
211 void *, dma_addr_t, size_t);
212#define ARCH_HAS_DMA_MMAP_COHERENT 213#define ARCH_HAS_DMA_MMAP_COHERENT
213 214
214
215static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, 215static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
216 enum dma_data_direction direction) 216 enum dma_data_direction direction)
217{ 217{
diff --git a/arch/powerpc/include/asm/kmap_types.h b/arch/powerpc/include/asm/kmap_types.h
index bca8fdcd254..5acabbd7ac6 100644
--- a/arch/powerpc/include/asm/kmap_types.h
+++ b/arch/powerpc/include/asm/kmap_types.h
@@ -10,36 +10,7 @@
10 * 2 of the License, or (at your option) any later version. 10 * 2 of the License, or (at your option) any later version.
11 */ 11 */
12 12
13enum km_type { 13#define KM_TYPE_NR 16
14 KM_BOUNCE_READ,
15 KM_SKB_SUNRPC_DATA,
16 KM_SKB_DATA_SOFTIRQ,
17 KM_USER0,
18 KM_USER1,
19 KM_BIO_SRC_IRQ,
20 KM_BIO_DST_IRQ,
21 KM_PTE0,
22 KM_PTE1,
23 KM_IRQ0,
24 KM_IRQ1,
25 KM_SOFTIRQ0,
26 KM_SOFTIRQ1,
27 KM_PPC_SYNC_PAGE,
28 KM_PPC_SYNC_ICACHE,
29 KM_KDB,
30 KM_TYPE_NR
31};
32
33/*
34 * This is a temporary build fix that (so they say on lkml....) should no longer
35 * be required after 2.6.33, because of changes planned to the kmap code.
36 * Let's try to remove this cruft then.
37 */
38#ifdef CONFIG_DEBUG_HIGHMEM
39#define KM_NMI (-1)
40#define KM_NMI_PTE (-1)
41#define KM_IRQ_PTE (-1)
42#endif
43 14
44#endif /* __KERNEL__ */ 15#endif /* __KERNEL__ */
45#endif /* _ASM_POWERPC_KMAP_TYPES_H */ 16#endif /* _ASM_POWERPC_KMAP_TYPES_H */
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index d3d1b5efd7e..bd377a36861 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -389,7 +389,6 @@
389#include <linux/compiler.h> 389#include <linux/compiler.h>
390#include <linux/linkage.h> 390#include <linux/linkage.h>
391 391
392#define __ARCH_WANT_IPC_PARSE_VERSION
393#define __ARCH_WANT_OLD_READDIR 392#define __ARCH_WANT_OLD_READDIR
394#define __ARCH_WANT_STAT64 393#define __ARCH_WANT_STAT64
395#define __ARCH_WANT_SYS_ALARM 394#define __ARCH_WANT_SYS_ALARM
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c
index bcfdcd22c76..2d7bb8ced13 100644
--- a/arch/powerpc/kernel/dma-iommu.c
+++ b/arch/powerpc/kernel/dma-iommu.c
@@ -109,6 +109,7 @@ static u64 dma_iommu_get_required_mask(struct device *dev)
109struct dma_map_ops dma_iommu_ops = { 109struct dma_map_ops dma_iommu_ops = {
110 .alloc = dma_iommu_alloc_coherent, 110 .alloc = dma_iommu_alloc_coherent,
111 .free = dma_iommu_free_coherent, 111 .free = dma_iommu_free_coherent,
112 .mmap = dma_direct_mmap_coherent,
112 .map_sg = dma_iommu_map_sg, 113 .map_sg = dma_iommu_map_sg,
113 .unmap_sg = dma_iommu_unmap_sg, 114 .unmap_sg = dma_iommu_unmap_sg,
114 .dma_supported = dma_iommu_dma_supported, 115 .dma_supported = dma_iommu_dma_supported,
diff --git a/arch/powerpc/kernel/dma-swiotlb.c b/arch/powerpc/kernel/dma-swiotlb.c
index 4ab88dafb23..46943651da2 100644
--- a/arch/powerpc/kernel/dma-swiotlb.c
+++ b/arch/powerpc/kernel/dma-swiotlb.c
@@ -49,6 +49,7 @@ static u64 swiotlb_powerpc_get_required(struct device *dev)
49struct dma_map_ops swiotlb_dma_ops = { 49struct dma_map_ops swiotlb_dma_ops = {
50 .alloc = dma_direct_alloc_coherent, 50 .alloc = dma_direct_alloc_coherent,
51 .free = dma_direct_free_coherent, 51 .free = dma_direct_free_coherent,
52 .mmap = dma_direct_mmap_coherent,
52 .map_sg = swiotlb_map_sg_attrs, 53 .map_sg = swiotlb_map_sg_attrs,
53 .unmap_sg = swiotlb_unmap_sg_attrs, 54 .unmap_sg = swiotlb_unmap_sg_attrs,
54 .dma_supported = swiotlb_dma_supported, 55 .dma_supported = swiotlb_dma_supported,
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 289be751cd7..355b9d84b0f 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -67,6 +67,24 @@ void dma_direct_free_coherent(struct device *dev, size_t size,
67#endif 67#endif
68} 68}
69 69
70int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
71 void *cpu_addr, dma_addr_t handle, size_t size,
72 struct dma_attrs *attrs)
73{
74 unsigned long pfn;
75
76#ifdef CONFIG_NOT_COHERENT_CACHE
77 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
78 pfn = __dma_get_coherent_pfn((unsigned long)cpu_addr);
79#else
80 pfn = page_to_pfn(virt_to_page(cpu_addr));
81#endif
82 return remap_pfn_range(vma, vma->vm_start,
83 pfn + vma->vm_pgoff,
84 vma->vm_end - vma->vm_start,
85 vma->vm_page_prot);
86}
87
70static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, 88static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
71 int nents, enum dma_data_direction direction, 89 int nents, enum dma_data_direction direction,
72 struct dma_attrs *attrs) 90 struct dma_attrs *attrs)
@@ -156,6 +174,7 @@ static inline void dma_direct_sync_single(struct device *dev,
156struct dma_map_ops dma_direct_ops = { 174struct dma_map_ops dma_direct_ops = {
157 .alloc = dma_direct_alloc_coherent, 175 .alloc = dma_direct_alloc_coherent,
158 .free = dma_direct_free_coherent, 176 .free = dma_direct_free_coherent,
177 .mmap = dma_direct_mmap_coherent,
159 .map_sg = dma_direct_map_sg, 178 .map_sg = dma_direct_map_sg,
160 .unmap_sg = dma_direct_unmap_sg, 179 .unmap_sg = dma_direct_unmap_sg,
161 .dma_supported = dma_direct_dma_supported, 180 .dma_supported = dma_direct_dma_supported,
@@ -219,20 +238,3 @@ static int __init dma_init(void)
219} 238}
220fs_initcall(dma_init); 239fs_initcall(dma_init);
221 240
222int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
223 void *cpu_addr, dma_addr_t handle, size_t size)
224{
225 unsigned long pfn;
226
227#ifdef CONFIG_NOT_COHERENT_CACHE
228 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
229 pfn = __dma_get_coherent_pfn((unsigned long)cpu_addr);
230#else
231 pfn = page_to_pfn(virt_to_page(cpu_addr));
232#endif
233 return remap_pfn_range(vma, vma->vm_start,
234 pfn + vma->vm_pgoff,
235 vma->vm_end - vma->vm_start,
236 vma->vm_page_prot);
237}
238EXPORT_SYMBOL_GPL(dma_mmap_coherent);
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 5207d5a405e..ead5016b02d 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -89,10 +89,14 @@ crit_transfer_to_handler:
89 mfspr r0,SPRN_SRR1 89 mfspr r0,SPRN_SRR1
90 stw r0,_SRR1(r11) 90 stw r0,_SRR1(r11)
91 91
92 /* set the stack limit to the current stack
93 * and set the limit to protect the thread_info
94 * struct
95 */
92 mfspr r8,SPRN_SPRG_THREAD 96 mfspr r8,SPRN_SPRG_THREAD
93 lwz r0,KSP_LIMIT(r8) 97 lwz r0,KSP_LIMIT(r8)
94 stw r0,SAVED_KSP_LIMIT(r11) 98 stw r0,SAVED_KSP_LIMIT(r11)
95 CURRENT_THREAD_INFO(r0, r1) 99 rlwimi r0,r1,0,0,(31-THREAD_SHIFT)
96 stw r0,KSP_LIMIT(r8) 100 stw r0,KSP_LIMIT(r8)
97 /* fall through */ 101 /* fall through */
98#endif 102#endif
@@ -109,10 +113,14 @@ crit_transfer_to_handler:
109 mfspr r0,SPRN_SRR1 113 mfspr r0,SPRN_SRR1
110 stw r0,crit_srr1@l(0) 114 stw r0,crit_srr1@l(0)
111 115
116 /* set the stack limit to the current stack
117 * and set the limit to protect the thread_info
118 * struct
119 */
112 mfspr r8,SPRN_SPRG_THREAD 120 mfspr r8,SPRN_SPRG_THREAD
113 lwz r0,KSP_LIMIT(r8) 121 lwz r0,KSP_LIMIT(r8)
114 stw r0,saved_ksp_limit@l(0) 122 stw r0,saved_ksp_limit@l(0)
115 CURRENT_THREAD_INFO(r0, r1) 123 rlwimi r0,r1,0,0,(31-THREAD_SHIFT)
116 stw r0,KSP_LIMIT(r8) 124 stw r0,KSP_LIMIT(r8)
117 /* fall through */ 125 /* fall through */
118#endif 126#endif
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 91b46b7f6f0..1fb78561096 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -630,18 +630,17 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
630 return; 630 return;
631 } 631 }
632 632
633 if (ftrace_push_return_trace(old, self_addr, &trace.depth, 0) == -EBUSY) {
634 *parent = old;
635 return;
636 }
637
638 trace.func = self_addr; 633 trace.func = self_addr;
634 trace.depth = current->curr_ret_stack + 1;
639 635
640 /* Only trace if the calling function expects to */ 636 /* Only trace if the calling function expects to */
641 if (!ftrace_graph_entry(&trace)) { 637 if (!ftrace_graph_entry(&trace)) {
642 current->curr_ret_stack--;
643 *parent = old; 638 *parent = old;
639 return;
644 } 640 }
641
642 if (ftrace_push_return_trace(old, self_addr, &trace.depth, 0) == -EBUSY)
643 *parent = old;
645} 644}
646#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 645#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
647 646
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c
index 4174b4b2324..2c0ee640563 100644
--- a/arch/powerpc/kernel/rtas_flash.c
+++ b/arch/powerpc/kernel/rtas_flash.c
@@ -709,7 +709,7 @@ static int __init rtas_flash_init(void)
709 709
710 if (rtas_token("ibm,update-flash-64-and-reboot") == 710 if (rtas_token("ibm,update-flash-64-and-reboot") ==
711 RTAS_UNKNOWN_SERVICE) { 711 RTAS_UNKNOWN_SERVICE) {
712 printk(KERN_ERR "rtas_flash: no firmware flash support\n"); 712 pr_info("rtas_flash: no firmware flash support\n");
713 return 1; 713 return 1;
714 } 714 }
715 715
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index 3052a931f2b..02b32216bbc 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -611,6 +611,7 @@ static u64 vio_dma_get_required_mask(struct device *dev)
611struct dma_map_ops vio_dma_mapping_ops = { 611struct dma_map_ops vio_dma_mapping_ops = {
612 .alloc = vio_dma_iommu_alloc_coherent, 612 .alloc = vio_dma_iommu_alloc_coherent,
613 .free = vio_dma_iommu_free_coherent, 613 .free = vio_dma_iommu_free_coherent,
614 .mmap = dma_direct_mmap_coherent,
614 .map_sg = vio_dma_iommu_map_sg, 615 .map_sg = vio_dma_iommu_map_sg,
615 .unmap_sg = vio_dma_iommu_unmap_sg, 616 .unmap_sg = vio_dma_iommu_unmap_sg,
616 .map_page = vio_dma_iommu_map_page, 617 .map_page = vio_dma_iommu_map_page,
diff --git a/arch/powerpc/kvm/book3s_rmhandlers.S b/arch/powerpc/kvm/book3s_rmhandlers.S
index ab523f3c173..9ecf6e35cd8 100644
--- a/arch/powerpc/kvm/book3s_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_rmhandlers.S
@@ -67,7 +67,6 @@ kvmppc_skip_Hinterrupt:
67#elif defined(CONFIG_PPC_BOOK3S_32) 67#elif defined(CONFIG_PPC_BOOK3S_32)
68 68
69#define FUNC(name) name 69#define FUNC(name) name
70#define MTMSR_EERI(reg) mtmsr (reg)
71 70
72.macro INTERRUPT_TRAMPOLINE intno 71.macro INTERRUPT_TRAMPOLINE intno
73 72
diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
index d28c2d43ac1..099fe8272b5 100644
--- a/arch/powerpc/kvm/bookehv_interrupts.S
+++ b/arch/powerpc/kvm/bookehv_interrupts.S
@@ -50,8 +50,9 @@
50#define HOST_R2 (3 * LONGBYTES) 50#define HOST_R2 (3 * LONGBYTES)
51#define HOST_CR (4 * LONGBYTES) 51#define HOST_CR (4 * LONGBYTES)
52#define HOST_NV_GPRS (5 * LONGBYTES) 52#define HOST_NV_GPRS (5 * LONGBYTES)
53#define HOST_NV_GPR(n) (HOST_NV_GPRS + ((n - 14) * LONGBYTES)) 53#define __HOST_NV_GPR(n) (HOST_NV_GPRS + ((n - 14) * LONGBYTES))
54#define HOST_MIN_STACK_SIZE (HOST_NV_GPR(31) + LONGBYTES) 54#define HOST_NV_GPR(n) __HOST_NV_GPR(__REG_##n)
55#define HOST_MIN_STACK_SIZE (HOST_NV_GPR(R31) + LONGBYTES)
55#define HOST_STACK_SIZE ((HOST_MIN_STACK_SIZE + 15) & ~15) /* Align. */ 56#define HOST_STACK_SIZE ((HOST_MIN_STACK_SIZE + 15) & ~15) /* Align. */
56#define HOST_STACK_LR (HOST_STACK_SIZE + LONGBYTES) /* In caller stack frame. */ 57#define HOST_STACK_LR (HOST_STACK_SIZE + LONGBYTES) /* In caller stack frame. */
57 58
@@ -410,24 +411,24 @@ heavyweight_exit:
410 PPC_STL r31, VCPU_GPR(R31)(r4) 411 PPC_STL r31, VCPU_GPR(R31)(r4)
411 412
412 /* Load host non-volatile register state from host stack. */ 413 /* Load host non-volatile register state from host stack. */
413 PPC_LL r14, HOST_NV_GPR(r14)(r1) 414 PPC_LL r14, HOST_NV_GPR(R14)(r1)
414 PPC_LL r15, HOST_NV_GPR(r15)(r1) 415 PPC_LL r15, HOST_NV_GPR(R15)(r1)
415 PPC_LL r16, HOST_NV_GPR(r16)(r1) 416 PPC_LL r16, HOST_NV_GPR(R16)(r1)
416 PPC_LL r17, HOST_NV_GPR(r17)(r1) 417 PPC_LL r17, HOST_NV_GPR(R17)(r1)
417 PPC_LL r18, HOST_NV_GPR(r18)(r1) 418 PPC_LL r18, HOST_NV_GPR(R18)(r1)
418 PPC_LL r19, HOST_NV_GPR(r19)(r1) 419 PPC_LL r19, HOST_NV_GPR(R19)(r1)
419 PPC_LL r20, HOST_NV_GPR(r20)(r1) 420 PPC_LL r20, HOST_NV_GPR(R20)(r1)
420 PPC_LL r21, HOST_NV_GPR(r21)(r1) 421 PPC_LL r21, HOST_NV_GPR(R21)(r1)
421 PPC_LL r22, HOST_NV_GPR(r22)(r1) 422 PPC_LL r22, HOST_NV_GPR(R22)(r1)
422 PPC_LL r23, HOST_NV_GPR(r23)(r1) 423 PPC_LL r23, HOST_NV_GPR(R23)(r1)
423 PPC_LL r24, HOST_NV_GPR(r24)(r1) 424 PPC_LL r24, HOST_NV_GPR(R24)(r1)
424 PPC_LL r25, HOST_NV_GPR(r25)(r1) 425 PPC_LL r25, HOST_NV_GPR(R25)(r1)
425 PPC_LL r26, HOST_NV_GPR(r26)(r1) 426 PPC_LL r26, HOST_NV_GPR(R26)(r1)
426 PPC_LL r27, HOST_NV_GPR(r27)(r1) 427 PPC_LL r27, HOST_NV_GPR(R27)(r1)
427 PPC_LL r28, HOST_NV_GPR(r28)(r1) 428 PPC_LL r28, HOST_NV_GPR(R28)(r1)
428 PPC_LL r29, HOST_NV_GPR(r29)(r1) 429 PPC_LL r29, HOST_NV_GPR(R29)(r1)
429 PPC_LL r30, HOST_NV_GPR(r30)(r1) 430 PPC_LL r30, HOST_NV_GPR(R30)(r1)
430 PPC_LL r31, HOST_NV_GPR(r31)(r1) 431 PPC_LL r31, HOST_NV_GPR(R31)(r1)
431 432
432 /* Return to kvm_vcpu_run(). */ 433 /* Return to kvm_vcpu_run(). */
433 mtlr r5 434 mtlr r5
@@ -453,24 +454,24 @@ _GLOBAL(__kvmppc_vcpu_run)
453 stw r5, HOST_CR(r1) 454 stw r5, HOST_CR(r1)
454 455
455 /* Save host non-volatile register state to stack. */ 456 /* Save host non-volatile register state to stack. */
456 PPC_STL r14, HOST_NV_GPR(r14)(r1) 457 PPC_STL r14, HOST_NV_GPR(R14)(r1)
457 PPC_STL r15, HOST_NV_GPR(r15)(r1) 458 PPC_STL r15, HOST_NV_GPR(R15)(r1)
458 PPC_STL r16, HOST_NV_GPR(r16)(r1) 459 PPC_STL r16, HOST_NV_GPR(R16)(r1)
459 PPC_STL r17, HOST_NV_GPR(r17)(r1) 460 PPC_STL r17, HOST_NV_GPR(R17)(r1)
460 PPC_STL r18, HOST_NV_GPR(r18)(r1) 461 PPC_STL r18, HOST_NV_GPR(R18)(r1)
461 PPC_STL r19, HOST_NV_GPR(r19)(r1) 462 PPC_STL r19, HOST_NV_GPR(R19)(r1)
462 PPC_STL r20, HOST_NV_GPR(r20)(r1) 463 PPC_STL r20, HOST_NV_GPR(R20)(r1)
463 PPC_STL r21, HOST_NV_GPR(r21)(r1) 464 PPC_STL r21, HOST_NV_GPR(R21)(r1)
464 PPC_STL r22, HOST_NV_GPR(r22)(r1) 465 PPC_STL r22, HOST_NV_GPR(R22)(r1)
465 PPC_STL r23, HOST_NV_GPR(r23)(r1) 466 PPC_STL r23, HOST_NV_GPR(R23)(r1)
466 PPC_STL r24, HOST_NV_GPR(r24)(r1) 467 PPC_STL r24, HOST_NV_GPR(R24)(r1)
467 PPC_STL r25, HOST_NV_GPR(r25)(r1) 468 PPC_STL r25, HOST_NV_GPR(R25)(r1)
468 PPC_STL r26, HOST_NV_GPR(r26)(r1) 469 PPC_STL r26, HOST_NV_GPR(R26)(r1)
469 PPC_STL r27, HOST_NV_GPR(r27)(r1) 470 PPC_STL r27, HOST_NV_GPR(R27)(r1)
470 PPC_STL r28, HOST_NV_GPR(r28)(r1) 471 PPC_STL r28, HOST_NV_GPR(R28)(r1)
471 PPC_STL r29, HOST_NV_GPR(r29)(r1) 472 PPC_STL r29, HOST_NV_GPR(R29)(r1)
472 PPC_STL r30, HOST_NV_GPR(r30)(r1) 473 PPC_STL r30, HOST_NV_GPR(R30)(r1)
473 PPC_STL r31, HOST_NV_GPR(r31)(r1) 474 PPC_STL r31, HOST_NV_GPR(R31)(r1)
474 475
475 /* Load guest non-volatiles. */ 476 /* Load guest non-volatiles. */
476 PPC_LL r14, VCPU_GPR(R14)(r4) 477 PPC_LL r14, VCPU_GPR(R14)(r4)
diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c b/arch/powerpc/platforms/85xx/p1022_ds.c
index 89ee02c5456..3c732acf331 100644
--- a/arch/powerpc/platforms/85xx/p1022_ds.c
+++ b/arch/powerpc/platforms/85xx/p1022_ds.c
@@ -208,6 +208,7 @@ static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port)
208 u8 __iomem *lbc_lcs0_ba = NULL; 208 u8 __iomem *lbc_lcs0_ba = NULL;
209 u8 __iomem *lbc_lcs1_ba = NULL; 209 u8 __iomem *lbc_lcs1_ba = NULL;
210 phys_addr_t cs0_addr, cs1_addr; 210 phys_addr_t cs0_addr, cs1_addr;
211 u32 br0, or0, br1, or1;
211 const __be32 *iprop; 212 const __be32 *iprop;
212 unsigned int num_laws; 213 unsigned int num_laws;
213 u8 b; 214 u8 b;
@@ -256,11 +257,70 @@ static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port)
256 } 257 }
257 num_laws = be32_to_cpup(iprop); 258 num_laws = be32_to_cpup(iprop);
258 259
259 cs0_addr = lbc_br_to_phys(ecm, num_laws, in_be32(&lbc->bank[0].br)); 260 /*
260 cs1_addr = lbc_br_to_phys(ecm, num_laws, in_be32(&lbc->bank[1].br)); 261 * Indirect mode requires both BR0 and BR1 to be set to "GPCM",
262 * otherwise writes to these addresses won't actually appear on the
263 * local bus, and so the PIXIS won't see them.
264 *
265 * In FCM mode, writes go to the NAND controller, which does not pass
266 * them to the localbus directly. So we force BR0 and BR1 into GPCM
267 * mode, since we don't care about what's behind the localbus any
268 * more.
269 */
270 br0 = in_be32(&lbc->bank[0].br);
271 br1 = in_be32(&lbc->bank[1].br);
272 or0 = in_be32(&lbc->bank[0].or);
273 or1 = in_be32(&lbc->bank[1].or);
274
275 /* Make sure CS0 and CS1 are programmed */
276 if (!(br0 & BR_V) || !(br1 & BR_V)) {
277 pr_err("p1022ds: CS0 and/or CS1 is not programmed\n");
278 goto exit;
279 }
280
281 /*
282 * Use the existing BRx/ORx values if it's already GPCM. Otherwise,
283 * force the values to simple 32KB GPCM windows with the most
284 * conservative timing.
285 */
286 if ((br0 & BR_MSEL) != BR_MS_GPCM) {
287 br0 = (br0 & BR_BA) | BR_V;
288 or0 = 0xFFFF8000 | 0xFF7;
289 out_be32(&lbc->bank[0].br, br0);
290 out_be32(&lbc->bank[0].or, or0);
291 }
292 if ((br1 & BR_MSEL) != BR_MS_GPCM) {
293 br1 = (br1 & BR_BA) | BR_V;
294 or1 = 0xFFFF8000 | 0xFF7;
295 out_be32(&lbc->bank[1].br, br1);
296 out_be32(&lbc->bank[1].or, or1);
297 }
298
299 cs0_addr = lbc_br_to_phys(ecm, num_laws, br0);
300 if (!cs0_addr) {
301 pr_err("p1022ds: could not determine physical address for CS0"
302 " (BR0=%08x)\n", br0);
303 goto exit;
304 }
305 cs1_addr = lbc_br_to_phys(ecm, num_laws, br1);
306 if (!cs0_addr) {
307 pr_err("p1022ds: could not determine physical address for CS1"
308 " (BR1=%08x)\n", br1);
309 goto exit;
310 }
261 311
262 lbc_lcs0_ba = ioremap(cs0_addr, 1); 312 lbc_lcs0_ba = ioremap(cs0_addr, 1);
313 if (!lbc_lcs0_ba) {
314 pr_err("p1022ds: could not ioremap CS0 address %llx\n",
315 (unsigned long long)cs0_addr);
316 goto exit;
317 }
263 lbc_lcs1_ba = ioremap(cs1_addr, 1); 318 lbc_lcs1_ba = ioremap(cs1_addr, 1);
319 if (!lbc_lcs1_ba) {
320 pr_err("p1022ds: could not ioremap CS1 address %llx\n",
321 (unsigned long long)cs1_addr);
322 goto exit;
323 }
264 324
265 /* Make sure we're in indirect mode first. */ 325 /* Make sure we're in indirect mode first. */
266 if ((in_be32(&guts->pmuxcr) & PMUXCR_ELBCDIU_MASK) != 326 if ((in_be32(&guts->pmuxcr) & PMUXCR_ELBCDIU_MASK) !=
@@ -419,18 +479,6 @@ void __init p1022_ds_pic_init(void)
419 479
420#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE) 480#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
421 481
422/*
423 * Disables a node in the device tree.
424 *
425 * This function is called before kmalloc() is available, so the 'new' object
426 * should be allocated in the global area. The easiest way is to do that is
427 * to allocate one static local variable for each call to this function.
428 */
429static void __init disable_one_node(struct device_node *np, struct property *new)
430{
431 prom_update_property(np, new);
432}
433
434/* TRUE if there is a "video=fslfb" command-line parameter. */ 482/* TRUE if there is a "video=fslfb" command-line parameter. */
435static bool fslfb; 483static bool fslfb;
436 484
@@ -493,28 +541,58 @@ static void __init p1022_ds_setup_arch(void)
493 diu_ops.valid_monitor_port = p1022ds_valid_monitor_port; 541 diu_ops.valid_monitor_port = p1022ds_valid_monitor_port;
494 542
495 /* 543 /*
496 * Disable the NOR flash node if there is video=fslfb... command-line 544 * Disable the NOR and NAND flash nodes if there is video=fslfb...
497 * parameter. When the DIU is active, NOR flash is unavailable, so we 545 * command-line parameter. When the DIU is active, the localbus is
498 * have to disable the node before the MTD driver loads. 546 * unavailable, so we have to disable these nodes before the MTD
547 * driver loads.
499 */ 548 */
500 if (fslfb) { 549 if (fslfb) {
501 struct device_node *np = 550 struct device_node *np =
502 of_find_compatible_node(NULL, NULL, "fsl,p1022-elbc"); 551 of_find_compatible_node(NULL, NULL, "fsl,p1022-elbc");
503 552
504 if (np) { 553 if (np) {
505 np = of_find_compatible_node(np, NULL, "cfi-flash"); 554 struct device_node *np2;
506 if (np) { 555
556 of_node_get(np);
557 np2 = of_find_compatible_node(np, NULL, "cfi-flash");
558 if (np2) {
507 static struct property nor_status = { 559 static struct property nor_status = {
508 .name = "status", 560 .name = "status",
509 .value = "disabled", 561 .value = "disabled",
510 .length = sizeof("disabled"), 562 .length = sizeof("disabled"),
511 }; 563 };
512 564
565 /*
566 * prom_update_property() is called before
567 * kmalloc() is available, so the 'new' object
568 * should be allocated in the global area.
569 * The easiest way is to do that is to
570 * allocate one static local variable for each
571 * call to this function.
572 */
513 pr_info("p1022ds: disabling %s node", 573 pr_info("p1022ds: disabling %s node",
514 np->full_name); 574 np2->full_name);
515 disable_one_node(np, &nor_status); 575 prom_update_property(np2, &nor_status);
516 of_node_put(np); 576 of_node_put(np2);
517 } 577 }
578
579 of_node_get(np);
580 np2 = of_find_compatible_node(np, NULL,
581 "fsl,elbc-fcm-nand");
582 if (np2) {
583 static struct property nand_status = {
584 .name = "status",
585 .value = "disabled",
586 .length = sizeof("disabled"),
587 };
588
589 pr_info("p1022ds: disabling %s node",
590 np2->full_name);
591 prom_update_property(np2, &nand_status);
592 of_node_put(np2);
593 }
594
595 of_node_put(np);
518 } 596 }
519 597
520 } 598 }
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index d544d7816df..dba1ce235da 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -186,10 +186,13 @@ static void spufs_prune_dir(struct dentry *dir)
186static int spufs_rmdir(struct inode *parent, struct dentry *dir) 186static int spufs_rmdir(struct inode *parent, struct dentry *dir)
187{ 187{
188 /* remove all entries */ 188 /* remove all entries */
189 int res;
189 spufs_prune_dir(dir); 190 spufs_prune_dir(dir);
190 d_drop(dir); 191 d_drop(dir);
191 192 res = simple_rmdir(parent, dir);
192 return simple_rmdir(parent, dir); 193 /* We have to give up the mm_struct */
194 spu_forget(SPUFS_I(dir->d_inode)->i_ctx);
195 return res;
193} 196}
194 197
195static int spufs_fill_dir(struct dentry *dir, 198static int spufs_fill_dir(struct dentry *dir,
@@ -245,9 +248,6 @@ static int spufs_dir_close(struct inode *inode, struct file *file)
245 mutex_unlock(&parent->i_mutex); 248 mutex_unlock(&parent->i_mutex);
246 WARN_ON(ret); 249 WARN_ON(ret);
247 250
248 /* We have to give up the mm_struct */
249 spu_forget(ctx);
250
251 return dcache_dir_close(inode, file); 251 return dcache_dir_close(inode, file);
252} 252}
253 253
@@ -450,28 +450,24 @@ spufs_create_context(struct inode *inode, struct dentry *dentry,
450 struct spu_context *neighbor; 450 struct spu_context *neighbor;
451 struct path path = {.mnt = mnt, .dentry = dentry}; 451 struct path path = {.mnt = mnt, .dentry = dentry};
452 452
453 ret = -EPERM;
454 if ((flags & SPU_CREATE_NOSCHED) && 453 if ((flags & SPU_CREATE_NOSCHED) &&
455 !capable(CAP_SYS_NICE)) 454 !capable(CAP_SYS_NICE))
456 goto out_unlock; 455 return -EPERM;
457 456
458 ret = -EINVAL;
459 if ((flags & (SPU_CREATE_NOSCHED | SPU_CREATE_ISOLATE)) 457 if ((flags & (SPU_CREATE_NOSCHED | SPU_CREATE_ISOLATE))
460 == SPU_CREATE_ISOLATE) 458 == SPU_CREATE_ISOLATE)
461 goto out_unlock; 459 return -EINVAL;
462 460
463 ret = -ENODEV;
464 if ((flags & SPU_CREATE_ISOLATE) && !isolated_loader) 461 if ((flags & SPU_CREATE_ISOLATE) && !isolated_loader)
465 goto out_unlock; 462 return -ENODEV;
466 463
467 gang = NULL; 464 gang = NULL;
468 neighbor = NULL; 465 neighbor = NULL;
469 affinity = flags & (SPU_CREATE_AFFINITY_MEM | SPU_CREATE_AFFINITY_SPU); 466 affinity = flags & (SPU_CREATE_AFFINITY_MEM | SPU_CREATE_AFFINITY_SPU);
470 if (affinity) { 467 if (affinity) {
471 gang = SPUFS_I(inode)->i_gang; 468 gang = SPUFS_I(inode)->i_gang;
472 ret = -EINVAL;
473 if (!gang) 469 if (!gang)
474 goto out_unlock; 470 return -EINVAL;
475 mutex_lock(&gang->aff_mutex); 471 mutex_lock(&gang->aff_mutex);
476 neighbor = spufs_assert_affinity(flags, gang, aff_filp); 472 neighbor = spufs_assert_affinity(flags, gang, aff_filp);
477 if (IS_ERR(neighbor)) { 473 if (IS_ERR(neighbor)) {
@@ -492,22 +488,12 @@ spufs_create_context(struct inode *inode, struct dentry *dentry,
492 } 488 }
493 489
494 ret = spufs_context_open(&path); 490 ret = spufs_context_open(&path);
495 if (ret < 0) { 491 if (ret < 0)
496 WARN_ON(spufs_rmdir(inode, dentry)); 492 WARN_ON(spufs_rmdir(inode, dentry));
497 if (affinity)
498 mutex_unlock(&gang->aff_mutex);
499 mutex_unlock(&inode->i_mutex);
500 spu_forget(SPUFS_I(dentry->d_inode)->i_ctx);
501 goto out;
502 }
503 493
504out_aff_unlock: 494out_aff_unlock:
505 if (affinity) 495 if (affinity)
506 mutex_unlock(&gang->aff_mutex); 496 mutex_unlock(&gang->aff_mutex);
507out_unlock:
508 mutex_unlock(&inode->i_mutex);
509out:
510 dput(dentry);
511 return ret; 497 return ret;
512} 498}
513 499
@@ -580,18 +566,13 @@ static int spufs_create_gang(struct inode *inode,
580 int ret; 566 int ret;
581 567
582 ret = spufs_mkgang(inode, dentry, mode & S_IRWXUGO); 568 ret = spufs_mkgang(inode, dentry, mode & S_IRWXUGO);
583 if (ret) 569 if (!ret) {
584 goto out; 570 ret = spufs_gang_open(&path);
585 571 if (ret < 0) {
586 ret = spufs_gang_open(&path); 572 int err = simple_rmdir(inode, dentry);
587 if (ret < 0) { 573 WARN_ON(err);
588 int err = simple_rmdir(inode, dentry); 574 }
589 WARN_ON(err);
590 } 575 }
591
592out:
593 mutex_unlock(&inode->i_mutex);
594 dput(dentry);
595 return ret; 576 return ret;
596} 577}
597 578
@@ -601,40 +582,32 @@ static struct file_system_type spufs_type;
601long spufs_create(struct path *path, struct dentry *dentry, 582long spufs_create(struct path *path, struct dentry *dentry,
602 unsigned int flags, umode_t mode, struct file *filp) 583 unsigned int flags, umode_t mode, struct file *filp)
603{ 584{
585 struct inode *dir = path->dentry->d_inode;
604 int ret; 586 int ret;
605 587
606 ret = -EINVAL;
607 /* check if we are on spufs */ 588 /* check if we are on spufs */
608 if (path->dentry->d_sb->s_type != &spufs_type) 589 if (path->dentry->d_sb->s_type != &spufs_type)
609 goto out; 590 return -EINVAL;
610 591
611 /* don't accept undefined flags */ 592 /* don't accept undefined flags */
612 if (flags & (~SPU_CREATE_FLAG_ALL)) 593 if (flags & (~SPU_CREATE_FLAG_ALL))
613 goto out; 594 return -EINVAL;
614 595
615 /* only threads can be underneath a gang */ 596 /* only threads can be underneath a gang */
616 if (path->dentry != path->dentry->d_sb->s_root) { 597 if (path->dentry != path->dentry->d_sb->s_root)
617 if ((flags & SPU_CREATE_GANG) || 598 if ((flags & SPU_CREATE_GANG) || !SPUFS_I(dir)->i_gang)
618 !SPUFS_I(path->dentry->d_inode)->i_gang) 599 return -EINVAL;
619 goto out;
620 }
621 600
622 mode &= ~current_umask(); 601 mode &= ~current_umask();
623 602
624 if (flags & SPU_CREATE_GANG) 603 if (flags & SPU_CREATE_GANG)
625 ret = spufs_create_gang(path->dentry->d_inode, 604 ret = spufs_create_gang(dir, dentry, path->mnt, mode);
626 dentry, path->mnt, mode);
627 else 605 else
628 ret = spufs_create_context(path->dentry->d_inode, 606 ret = spufs_create_context(dir, dentry, path->mnt, flags, mode,
629 dentry, path->mnt, flags, mode,
630 filp); 607 filp);
631 if (ret >= 0) 608 if (ret >= 0)
632 fsnotify_mkdir(path->dentry->d_inode, dentry); 609 fsnotify_mkdir(dir, dentry);
633 return ret;
634 610
635out:
636 mutex_unlock(&path->dentry->d_inode->i_mutex);
637 dput(dentry);
638 return ret; 611 return ret;
639} 612}
640 613
diff --git a/arch/powerpc/platforms/cell/spufs/syscalls.c b/arch/powerpc/platforms/cell/spufs/syscalls.c
index 5665dcc382c..5b7d8ffbf89 100644
--- a/arch/powerpc/platforms/cell/spufs/syscalls.c
+++ b/arch/powerpc/platforms/cell/spufs/syscalls.c
@@ -70,7 +70,7 @@ static long do_spu_create(const char __user *pathname, unsigned int flags,
70 ret = PTR_ERR(dentry); 70 ret = PTR_ERR(dentry);
71 if (!IS_ERR(dentry)) { 71 if (!IS_ERR(dentry)) {
72 ret = spufs_create(&path, dentry, flags, mode, neighbor); 72 ret = spufs_create(&path, dentry, flags, mode, neighbor);
73 path_put(&path); 73 done_path_create(&path, dentry);
74 } 74 }
75 75
76 return ret; 76 return ret;
diff --git a/arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h b/arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h
index 60c9c0bd5ba..2aa97ddb7b7 100644
--- a/arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h
+++ b/arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright 2009-2010 Freescale Semiconductor, Inc 2 * Copyright 2009-2010, 2012 Freescale Semiconductor, Inc
3 * 3 *
4 * QorIQ based Cache Controller Memory Mapped Registers 4 * QorIQ based Cache Controller Memory Mapped Registers
5 * 5 *
@@ -91,7 +91,7 @@ struct mpc85xx_l2ctlr {
91 91
92struct sram_parameters { 92struct sram_parameters {
93 unsigned int sram_size; 93 unsigned int sram_size;
94 uint64_t sram_offset; 94 phys_addr_t sram_offset;
95}; 95};
96 96
97extern int instantiate_cache_sram(struct platform_device *dev, 97extern int instantiate_cache_sram(struct platform_device *dev,
diff --git a/arch/powerpc/sysdev/fsl_85xx_l2ctlr.c b/arch/powerpc/sysdev/fsl_85xx_l2ctlr.c
index cedabd0f4bf..68ac3aacb19 100644
--- a/arch/powerpc/sysdev/fsl_85xx_l2ctlr.c
+++ b/arch/powerpc/sysdev/fsl_85xx_l2ctlr.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright 2009-2010 Freescale Semiconductor, Inc. 2 * Copyright 2009-2010, 2012 Freescale Semiconductor, Inc.
3 * 3 *
4 * QorIQ (P1/P2) L2 controller init for Cache-SRAM instantiation 4 * QorIQ (P1/P2) L2 controller init for Cache-SRAM instantiation
5 * 5 *
@@ -31,24 +31,21 @@ static char *sram_size;
31static char *sram_offset; 31static char *sram_offset;
32struct mpc85xx_l2ctlr __iomem *l2ctlr; 32struct mpc85xx_l2ctlr __iomem *l2ctlr;
33 33
34static long get_cache_sram_size(void) 34static int get_cache_sram_params(struct sram_parameters *sram_params)
35{ 35{
36 unsigned long val; 36 unsigned long long addr;
37 unsigned int size;
37 38
38 if (!sram_size || (strict_strtoul(sram_size, 0, &val) < 0)) 39 if (!sram_size || (kstrtouint(sram_size, 0, &size) < 0))
39 return -EINVAL; 40 return -EINVAL;
40 41
41 return val; 42 if (!sram_offset || (kstrtoull(sram_offset, 0, &addr) < 0))
42}
43
44static long get_cache_sram_offset(void)
45{
46 unsigned long val;
47
48 if (!sram_offset || (strict_strtoul(sram_offset, 0, &val) < 0))
49 return -EINVAL; 43 return -EINVAL;
50 44
51 return val; 45 sram_params->sram_offset = addr;
46 sram_params->sram_size = size;
47
48 return 0;
52} 49}
53 50
54static int __init get_size_from_cmdline(char *str) 51static int __init get_size_from_cmdline(char *str)
@@ -93,17 +90,9 @@ static int __devinit mpc85xx_l2ctlr_of_probe(struct platform_device *dev)
93 } 90 }
94 l2cache_size = *prop; 91 l2cache_size = *prop;
95 92
96 sram_params.sram_size = get_cache_sram_size(); 93 if (get_cache_sram_params(&sram_params)) {
97 if ((int)sram_params.sram_size <= 0) {
98 dev_err(&dev->dev,
99 "Entire L2 as cache, Aborting Cache-SRAM stuff\n");
100 return -EINVAL;
101 }
102
103 sram_params.sram_offset = get_cache_sram_offset();
104 if ((int64_t)sram_params.sram_offset <= 0) {
105 dev_err(&dev->dev, 94 dev_err(&dev->dev,
106 "Entire L2 as cache, provide a valid sram offset\n"); 95 "Entire L2 as cache, provide valid sram offset and size\n");
107 return -EINVAL; 96 return -EINVAL;
108 } 97 }
109 98
@@ -125,14 +114,14 @@ static int __devinit mpc85xx_l2ctlr_of_probe(struct platform_device *dev)
125 * Write bits[0-17] to srbar0 114 * Write bits[0-17] to srbar0
126 */ 115 */
127 out_be32(&l2ctlr->srbar0, 116 out_be32(&l2ctlr->srbar0,
128 sram_params.sram_offset & L2SRAM_BAR_MSK_LO18); 117 lower_32_bits(sram_params.sram_offset) & L2SRAM_BAR_MSK_LO18);
129 118
130 /* 119 /*
131 * Write bits[18-21] to srbare0 120 * Write bits[18-21] to srbare0
132 */ 121 */
133#ifdef CONFIG_PHYS_64BIT 122#ifdef CONFIG_PHYS_64BIT
134 out_be32(&l2ctlr->srbarea0, 123 out_be32(&l2ctlr->srbarea0,
135 (sram_params.sram_offset >> 32) & L2SRAM_BARE_MSK_HI4); 124 upper_32_bits(sram_params.sram_offset) & L2SRAM_BARE_MSK_HI4);
136#endif 125#endif
137 126
138 clrsetbits_be32(&l2ctlr->ctl, L2CR_L2E, L2CR_L2FI); 127 clrsetbits_be32(&l2ctlr->ctl, L2CR_L2E, L2CR_L2FI);
diff --git a/arch/powerpc/sysdev/xics/icp-hv.c b/arch/powerpc/sysdev/xics/icp-hv.c
index 253dce98c16..14469cf9df6 100644
--- a/arch/powerpc/sysdev/xics/icp-hv.c
+++ b/arch/powerpc/sysdev/xics/icp-hv.c
@@ -111,7 +111,7 @@ static unsigned int icp_hv_get_irq(void)
111 if (vec == XICS_IRQ_SPURIOUS) 111 if (vec == XICS_IRQ_SPURIOUS)
112 return NO_IRQ; 112 return NO_IRQ;
113 113
114 irq = irq_radix_revmap_lookup(xics_host, vec); 114 irq = irq_find_mapping(xics_host, vec);
115 if (likely(irq != NO_IRQ)) { 115 if (likely(irq != NO_IRQ)) {
116 xics_push_cppr(vec); 116 xics_push_cppr(vec);
117 return irq; 117 return irq;
diff --git a/arch/powerpc/sysdev/xics/icp-native.c b/arch/powerpc/sysdev/xics/icp-native.c
index 4c79b6fbee1..48861d3fcd0 100644
--- a/arch/powerpc/sysdev/xics/icp-native.c
+++ b/arch/powerpc/sysdev/xics/icp-native.c
@@ -119,7 +119,7 @@ static unsigned int icp_native_get_irq(void)
119 if (vec == XICS_IRQ_SPURIOUS) 119 if (vec == XICS_IRQ_SPURIOUS)
120 return NO_IRQ; 120 return NO_IRQ;
121 121
122 irq = irq_radix_revmap_lookup(xics_host, vec); 122 irq = irq_find_mapping(xics_host, vec);
123 if (likely(irq != NO_IRQ)) { 123 if (likely(irq != NO_IRQ)) {
124 xics_push_cppr(vec); 124 xics_push_cppr(vec);
125 return irq; 125 return irq;
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c
index cd1d18db92c..9049d9f4448 100644
--- a/arch/powerpc/sysdev/xics/xics-common.c
+++ b/arch/powerpc/sysdev/xics/xics-common.c
@@ -329,9 +329,6 @@ static int xics_host_map(struct irq_domain *h, unsigned int virq,
329 329
330 pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw); 330 pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw);
331 331
332 /* Insert the interrupt mapping into the radix tree for fast lookup */
333 irq_radix_revmap_insert(xics_host, virq, hw);
334
335 /* They aren't all level sensitive but we just don't really know */ 332 /* They aren't all level sensitive but we just don't really know */
336 irq_set_status_flags(virq, IRQ_LEVEL); 333 irq_set_status_flags(virq, IRQ_LEVEL);
337 334