aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64')
-rw-r--r--arch/sparc64/Kconfig20
-rw-r--r--arch/sparc64/Makefile4
-rw-r--r--arch/sparc64/defconfig145
-rw-r--r--arch/sparc64/kernel/central.c14
-rw-r--r--arch/sparc64/kernel/ds.c2
-rw-r--r--arch/sparc64/kernel/ebus.c4
-rw-r--r--arch/sparc64/kernel/hvapi.c4
-rw-r--r--arch/sparc64/kernel/iommu_common.h2
-rw-r--r--arch/sparc64/kernel/irq.c10
-rw-r--r--arch/sparc64/kernel/ldc.c38
-rw-r--r--arch/sparc64/kernel/of_device.c4
-rw-r--r--arch/sparc64/kernel/pci.c2
-rw-r--r--arch/sparc64/kernel/pci_msi.c10
-rw-r--r--arch/sparc64/kernel/pci_sun4v.c2
-rw-r--r--arch/sparc64/kernel/process.c32
-rw-r--r--arch/sparc64/kernel/smp.c87
-rw-r--r--arch/sparc64/kernel/sparc64_ksyms.c2
-rw-r--r--arch/sparc64/kernel/sys_sparc.c8
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c7
-rw-r--r--arch/sparc64/kernel/sysfs.c16
-rw-r--r--arch/sparc64/kernel/time.c15
-rw-r--r--arch/sparc64/kernel/traps.c40
-rw-r--r--arch/sparc64/kernel/ttable.S7
-rw-r--r--arch/sparc64/kernel/unaligned.c7
-rw-r--r--arch/sparc64/kernel/vio.c18
-rw-r--r--arch/sparc64/lib/copy_page.S6
-rw-r--r--arch/sparc64/mm/fault.c5
-rw-r--r--arch/sparc64/mm/hugetlbpage.c10
-rw-r--r--arch/sparc64/mm/init.c3
-rw-r--r--arch/sparc64/mm/tsb.c6
-rw-r--r--arch/sparc64/mm/ultra.S5
31 files changed, 246 insertions, 289 deletions
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index fca9246470b1..7c88263256af 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -16,6 +16,7 @@ config SPARC64
16 select HAVE_IDE 16 select HAVE_IDE
17 select HAVE_LMB 17 select HAVE_LMB
18 select HAVE_ARCH_KGDB 18 select HAVE_ARCH_KGDB
19 select USE_GENERIC_SMP_HELPERS if SMP
19 20
20config GENERIC_TIME 21config GENERIC_TIME
21 bool 22 bool
@@ -81,6 +82,10 @@ config GENERIC_HARDIRQS_NO__DO_IRQ
81 bool 82 bool
82 def_bool y 83 def_bool y
83 84
85source "init/Kconfig"
86
87menu "Processor type and features"
88
84choice 89choice
85 prompt "Kernel page size" 90 prompt "Kernel page size"
86 default SPARC64_PAGE_SIZE_8KB 91 default SPARC64_PAGE_SIZE_8KB
@@ -93,19 +98,11 @@ config SPARC64_PAGE_SIZE_8KB
93 8KB and 64KB work quite well, since SPARC ELF sections 98 8KB and 64KB work quite well, since SPARC ELF sections
94 provide for up to 64KB alignment. 99 provide for up to 64KB alignment.
95 100
96 Therefore, 512KB and 4MB are for expert hackers only.
97
98 If you don't know what to do, choose 8KB. 101 If you don't know what to do, choose 8KB.
99 102
100config SPARC64_PAGE_SIZE_64KB 103config SPARC64_PAGE_SIZE_64KB
101 bool "64KB" 104 bool "64KB"
102 105
103config SPARC64_PAGE_SIZE_512KB
104 bool "512KB"
105
106config SPARC64_PAGE_SIZE_4MB
107 bool "4MB"
108
109endchoice 106endchoice
110 107
111config SECCOMP 108config SECCOMP
@@ -136,14 +133,10 @@ config HOTPLUG_CPU
136 can be controlled through /sys/devices/system/cpu/cpu#. 133 can be controlled through /sys/devices/system/cpu/cpu#.
137 Say N if you want to disable CPU hotplug. 134 Say N if you want to disable CPU hotplug.
138 135
139source "init/Kconfig"
140
141config GENERIC_HARDIRQS 136config GENERIC_HARDIRQS
142 bool 137 bool
143 default y 138 default y
144 139
145menu "General machine setup"
146
147source "kernel/time/Kconfig" 140source "kernel/time/Kconfig"
148 141
149config SMP 142config SMP
@@ -225,11 +218,10 @@ config HUGETLB_PAGE_SIZE_4MB
225 bool "4MB" 218 bool "4MB"
226 219
227config HUGETLB_PAGE_SIZE_512K 220config HUGETLB_PAGE_SIZE_512K
228 depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB
229 bool "512K" 221 bool "512K"
230 222
231config HUGETLB_PAGE_SIZE_64K 223config HUGETLB_PAGE_SIZE_64K
232 depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB && !SPARC64_PAGE_SIZE_64KB 224 depends on !SPARC64_PAGE_SIZE_64KB
233 bool "64K" 225 bool "64K"
234 226
235endchoice 227endchoice
diff --git a/arch/sparc64/Makefile b/arch/sparc64/Makefile
index 4b8f2b084c21..b785a395b12f 100644
--- a/arch/sparc64/Makefile
+++ b/arch/sparc64/Makefile
@@ -9,7 +9,9 @@
9 9
10CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64 10CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64
11 11
12CPPFLAGS_vmlinux.lds += -Usparc 12# Undefine sparc when processing vmlinux.lds - it is used
13# And teach CPP we are doing 64 bit builds (for this case)
14CPPFLAGS_vmlinux.lds += -m64 -Usparc
13 15
14LDFLAGS := -m elf64_sparc 16LDFLAGS := -m elf64_sparc
15 17
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index 76eb832527f2..82cab5cc8070 100644
--- a/arch/sparc64/defconfig
+++ b/arch/sparc64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.26-rc2 3# Linux kernel version: 2.6.26
4# Fri May 16 13:36:07 2008 4# Fri Jul 18 00:47:07 2008
5# 5#
6CONFIG_SPARC=y 6CONFIG_SPARC=y
7CONFIG_SPARC64=y 7CONFIG_SPARC64=y
@@ -22,18 +22,6 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
22CONFIG_ARCH_NO_VIRT_TO_BUS=y 22CONFIG_ARCH_NO_VIRT_TO_BUS=y
23CONFIG_OF=y 23CONFIG_OF=y
24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
25CONFIG_SPARC64_PAGE_SIZE_8KB=y
26# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
27# CONFIG_SPARC64_PAGE_SIZE_512KB is not set
28# CONFIG_SPARC64_PAGE_SIZE_4MB is not set
29CONFIG_SECCOMP=y
30CONFIG_HZ_100=y
31# CONFIG_HZ_250 is not set
32# CONFIG_HZ_300 is not set
33# CONFIG_HZ_1000 is not set
34CONFIG_HZ=100
35# CONFIG_SCHED_HRTICK is not set
36CONFIG_HOTPLUG_CPU=y
37CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 25CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
38 26
39# 27#
@@ -105,6 +93,7 @@ CONFIG_KRETPROBES=y
105CONFIG_HAVE_KPROBES=y 93CONFIG_HAVE_KPROBES=y
106CONFIG_HAVE_KRETPROBES=y 94CONFIG_HAVE_KRETPROBES=y
107# CONFIG_HAVE_DMA_ATTRS is not set 95# CONFIG_HAVE_DMA_ATTRS is not set
96CONFIG_USE_GENERIC_SMP_HELPERS=y
108CONFIG_PROC_PAGE_MONITOR=y 97CONFIG_PROC_PAGE_MONITOR=y
109CONFIG_SLABINFO=y 98CONFIG_SLABINFO=y
110CONFIG_RT_MUTEXES=y 99CONFIG_RT_MUTEXES=y
@@ -121,6 +110,7 @@ CONFIG_STOP_MACHINE=y
121CONFIG_BLOCK=y 110CONFIG_BLOCK=y
122CONFIG_BLK_DEV_IO_TRACE=y 111CONFIG_BLK_DEV_IO_TRACE=y
123CONFIG_BLK_DEV_BSG=y 112CONFIG_BLK_DEV_BSG=y
113# CONFIG_BLK_DEV_INTEGRITY is not set
124CONFIG_BLOCK_COMPAT=y 114CONFIG_BLOCK_COMPAT=y
125 115
126# 116#
@@ -136,11 +126,21 @@ CONFIG_DEFAULT_AS=y
136# CONFIG_DEFAULT_NOOP is not set 126# CONFIG_DEFAULT_NOOP is not set
137CONFIG_DEFAULT_IOSCHED="anticipatory" 127CONFIG_DEFAULT_IOSCHED="anticipatory"
138CONFIG_CLASSIC_RCU=y 128CONFIG_CLASSIC_RCU=y
139CONFIG_GENERIC_HARDIRQS=y
140 129
141# 130#
142# General machine setup 131# Processor type and features
143# 132#
133CONFIG_SPARC64_PAGE_SIZE_8KB=y
134# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
135CONFIG_SECCOMP=y
136CONFIG_HZ_100=y
137# CONFIG_HZ_250 is not set
138# CONFIG_HZ_300 is not set
139# CONFIG_HZ_1000 is not set
140CONFIG_HZ=100
141# CONFIG_SCHED_HRTICK is not set
142CONFIG_HOTPLUG_CPU=y
143CONFIG_GENERIC_HARDIRQS=y
144CONFIG_TICK_ONESHOT=y 144CONFIG_TICK_ONESHOT=y
145CONFIG_NO_HZ=y 145CONFIG_NO_HZ=y
146CONFIG_HIGH_RES_TIMERS=y 146CONFIG_HIGH_RES_TIMERS=y
@@ -342,6 +342,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
342CONFIG_STANDALONE=y 342CONFIG_STANDALONE=y
343# CONFIG_PREVENT_FIRMWARE_BUILD is not set 343# CONFIG_PREVENT_FIRMWARE_BUILD is not set
344CONFIG_FW_LOADER=y 344CONFIG_FW_LOADER=y
345CONFIG_FIRMWARE_IN_KERNEL=y
346CONFIG_EXTRA_FIRMWARE=""
345# CONFIG_DEBUG_DRIVER is not set 347# CONFIG_DEBUG_DRIVER is not set
346# CONFIG_DEBUG_DEVRES is not set 348# CONFIG_DEBUG_DEVRES is not set
347# CONFIG_SYS_HYPERVISOR is not set 349# CONFIG_SYS_HYPERVISOR is not set
@@ -366,6 +368,7 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8
366CONFIG_CDROM_PKTCDVD_WCACHE=y 368CONFIG_CDROM_PKTCDVD_WCACHE=y
367CONFIG_ATA_OVER_ETH=m 369CONFIG_ATA_OVER_ETH=m
368CONFIG_SUNVDC=m 370CONFIG_SUNVDC=m
371# CONFIG_BLK_DEV_HD is not set
369CONFIG_MISC_DEVICES=y 372CONFIG_MISC_DEVICES=y
370# CONFIG_PHANTOM is not set 373# CONFIG_PHANTOM is not set
371# CONFIG_EEPROM_93CX6 is not set 374# CONFIG_EEPROM_93CX6 is not set
@@ -379,6 +382,7 @@ CONFIG_BLK_DEV_IDE=y
379# 382#
380# Please see Documentation/ide/ide.txt for help/info on IDE drives 383# Please see Documentation/ide/ide.txt for help/info on IDE drives
381# 384#
385CONFIG_IDE_TIMINGS=y
382# CONFIG_BLK_DEV_IDE_SATA is not set 386# CONFIG_BLK_DEV_IDE_SATA is not set
383CONFIG_BLK_DEV_IDEDISK=y 387CONFIG_BLK_DEV_IDEDISK=y
384# CONFIG_IDEDISK_MULTI_MODE is not set 388# CONFIG_IDEDISK_MULTI_MODE is not set
@@ -429,8 +433,6 @@ CONFIG_BLK_DEV_ALI15X3=y
429# CONFIG_BLK_DEV_VIA82CXXX is not set 433# CONFIG_BLK_DEV_VIA82CXXX is not set
430# CONFIG_BLK_DEV_TC86C001 is not set 434# CONFIG_BLK_DEV_TC86C001 is not set
431CONFIG_BLK_DEV_IDEDMA=y 435CONFIG_BLK_DEV_IDEDMA=y
432# CONFIG_BLK_DEV_HD_ONLY is not set
433# CONFIG_BLK_DEV_HD is not set
434 436
435# 437#
436# SCSI device support 438# SCSI device support
@@ -504,6 +506,7 @@ CONFIG_SCSI_LOWLEVEL=y
504# CONFIG_SCSI_DEBUG is not set 506# CONFIG_SCSI_DEBUG is not set
505# CONFIG_SCSI_SUNESP is not set 507# CONFIG_SCSI_SUNESP is not set
506# CONFIG_SCSI_SRP is not set 508# CONFIG_SCSI_SRP is not set
509# CONFIG_SCSI_DH is not set
507# CONFIG_ATA is not set 510# CONFIG_ATA is not set
508CONFIG_MD=y 511CONFIG_MD=y
509CONFIG_BLK_DEV_MD=m 512CONFIG_BLK_DEV_MD=m
@@ -529,6 +532,10 @@ CONFIG_DM_ZERO=m
529# 532#
530# IEEE 1394 (FireWire) support 533# IEEE 1394 (FireWire) support
531# 534#
535
536#
537# Enable only one of the two stacks, unless you know what you are doing
538#
532# CONFIG_FIREWIRE is not set 539# CONFIG_FIREWIRE is not set
533# CONFIG_IEEE1394 is not set 540# CONFIG_IEEE1394 is not set
534# CONFIG_I2O is not set 541# CONFIG_I2O is not set
@@ -745,7 +752,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y
745CONFIG_UNIX98_PTYS=y 752CONFIG_UNIX98_PTYS=y
746# CONFIG_LEGACY_PTYS is not set 753# CONFIG_LEGACY_PTYS is not set
747# CONFIG_IPMI_HANDLER is not set 754# CONFIG_IPMI_HANDLER is not set
748# CONFIG_HW_RANDOM is not set 755CONFIG_HW_RANDOM=m
756CONFIG_HW_RANDOM_N2RNG=m
749# CONFIG_R3964 is not set 757# CONFIG_R3964 is not set
750# CONFIG_APPLICOM is not set 758# CONFIG_APPLICOM is not set
751# CONFIG_RAW_DRIVER is not set 759# CONFIG_RAW_DRIVER is not set
@@ -759,38 +767,58 @@ CONFIG_I2C_ALGOBIT=y
759# 767#
760# I2C Hardware Bus support 768# I2C Hardware Bus support
761# 769#
770
771#
772# PC SMBus host controller drivers
773#
762# CONFIG_I2C_ALI1535 is not set 774# CONFIG_I2C_ALI1535 is not set
763# CONFIG_I2C_ALI1563 is not set 775# CONFIG_I2C_ALI1563 is not set
764# CONFIG_I2C_ALI15X3 is not set 776# CONFIG_I2C_ALI15X3 is not set
765# CONFIG_I2C_AMD756 is not set 777# CONFIG_I2C_AMD756 is not set
766# CONFIG_I2C_AMD8111 is not set 778# CONFIG_I2C_AMD8111 is not set
767# CONFIG_I2C_I801 is not set 779# CONFIG_I2C_I801 is not set
768# CONFIG_I2C_I810 is not set 780# CONFIG_I2C_ISCH is not set
769# CONFIG_I2C_PIIX4 is not set 781# CONFIG_I2C_PIIX4 is not set
770# CONFIG_I2C_NFORCE2 is not set 782# CONFIG_I2C_NFORCE2 is not set
771# CONFIG_I2C_OCORES is not set
772# CONFIG_I2C_PARPORT_LIGHT is not set
773# CONFIG_I2C_PROSAVAGE is not set
774# CONFIG_I2C_SAVAGE4 is not set
775# CONFIG_I2C_SIMTEC is not set
776# CONFIG_I2C_SIS5595 is not set 783# CONFIG_I2C_SIS5595 is not set
777# CONFIG_I2C_SIS630 is not set 784# CONFIG_I2C_SIS630 is not set
778# CONFIG_I2C_SIS96X is not set 785# CONFIG_I2C_SIS96X is not set
779# CONFIG_I2C_TAOS_EVM is not set
780# CONFIG_I2C_STUB is not set
781# CONFIG_I2C_TINY_USB is not set
782# CONFIG_I2C_VIA is not set 786# CONFIG_I2C_VIA is not set
783# CONFIG_I2C_VIAPRO is not set 787# CONFIG_I2C_VIAPRO is not set
788
789#
790# I2C system bus drivers (mostly embedded / system-on-chip)
791#
792# CONFIG_I2C_OCORES is not set
793# CONFIG_I2C_SIMTEC is not set
794
795#
796# External I2C/SMBus adapter drivers
797#
798# CONFIG_I2C_PARPORT_LIGHT is not set
799# CONFIG_I2C_TAOS_EVM is not set
800# CONFIG_I2C_TINY_USB is not set
801
802#
803# Graphics adapter I2C/DDC channel drivers
804#
784# CONFIG_I2C_VOODOO3 is not set 805# CONFIG_I2C_VOODOO3 is not set
806
807#
808# Other I2C/SMBus bus drivers
809#
785# CONFIG_I2C_PCA_PLATFORM is not set 810# CONFIG_I2C_PCA_PLATFORM is not set
811# CONFIG_I2C_STUB is not set
786 812
787# 813#
788# Miscellaneous I2C Chip support 814# Miscellaneous I2C Chip support
789# 815#
790# CONFIG_DS1682 is not set 816# CONFIG_DS1682 is not set
817# CONFIG_AT24 is not set
791# CONFIG_SENSORS_EEPROM is not set 818# CONFIG_SENSORS_EEPROM is not set
792# CONFIG_SENSORS_PCF8574 is not set 819# CONFIG_SENSORS_PCF8574 is not set
793# CONFIG_PCF8575 is not set 820# CONFIG_PCF8575 is not set
821# CONFIG_SENSORS_PCA9539 is not set
794# CONFIG_SENSORS_PCF8591 is not set 822# CONFIG_SENSORS_PCF8591 is not set
795# CONFIG_SENSORS_MAX6875 is not set 823# CONFIG_SENSORS_MAX6875 is not set
796# CONFIG_SENSORS_TSL2550 is not set 824# CONFIG_SENSORS_TSL2550 is not set
@@ -856,6 +884,7 @@ CONFIG_HWMON=y
856# CONFIG_SENSORS_W83627EHF is not set 884# CONFIG_SENSORS_W83627EHF is not set
857# CONFIG_HWMON_DEBUG_CHIP is not set 885# CONFIG_HWMON_DEBUG_CHIP is not set
858# CONFIG_THERMAL is not set 886# CONFIG_THERMAL is not set
887# CONFIG_THERMAL_HWMON is not set
859# CONFIG_WATCHDOG is not set 888# CONFIG_WATCHDOG is not set
860 889
861# 890#
@@ -985,15 +1014,7 @@ CONFIG_LOGO=y
985# CONFIG_LOGO_LINUX_VGA16 is not set 1014# CONFIG_LOGO_LINUX_VGA16 is not set
986# CONFIG_LOGO_LINUX_CLUT224 is not set 1015# CONFIG_LOGO_LINUX_CLUT224 is not set
987CONFIG_LOGO_SUN_CLUT224=y 1016CONFIG_LOGO_SUN_CLUT224=y
988
989#
990# Sound
991#
992CONFIG_SOUND=m 1017CONFIG_SOUND=m
993
994#
995# Advanced Linux Sound Architecture
996#
997CONFIG_SND=m 1018CONFIG_SND=m
998CONFIG_SND_TIMER=m 1019CONFIG_SND_TIMER=m
999CONFIG_SND_PCM=m 1020CONFIG_SND_PCM=m
@@ -1010,21 +1031,17 @@ CONFIG_SND_SUPPORT_OLD_API=y
1010CONFIG_SND_VERBOSE_PROCFS=y 1031CONFIG_SND_VERBOSE_PROCFS=y
1011# CONFIG_SND_VERBOSE_PRINTK is not set 1032# CONFIG_SND_VERBOSE_PRINTK is not set
1012# CONFIG_SND_DEBUG is not set 1033# CONFIG_SND_DEBUG is not set
1013 1034CONFIG_SND_VMASTER=y
1014#
1015# Generic devices
1016#
1017CONFIG_SND_MPU401_UART=m 1035CONFIG_SND_MPU401_UART=m
1018CONFIG_SND_AC97_CODEC=m 1036CONFIG_SND_AC97_CODEC=m
1037CONFIG_SND_DRIVERS=y
1019CONFIG_SND_DUMMY=m 1038CONFIG_SND_DUMMY=m
1020CONFIG_SND_VIRMIDI=m 1039CONFIG_SND_VIRMIDI=m
1021CONFIG_SND_MTPAV=m 1040CONFIG_SND_MTPAV=m
1022# CONFIG_SND_SERIAL_U16550 is not set 1041# CONFIG_SND_SERIAL_U16550 is not set
1023# CONFIG_SND_MPU401 is not set 1042# CONFIG_SND_MPU401 is not set
1024 1043# CONFIG_SND_AC97_POWER_SAVE is not set
1025# 1044CONFIG_SND_PCI=y
1026# PCI devices
1027#
1028# CONFIG_SND_AD1889 is not set 1045# CONFIG_SND_AD1889 is not set
1029# CONFIG_SND_ALS300 is not set 1046# CONFIG_SND_ALS300 is not set
1030CONFIG_SND_ALI5451=m 1047CONFIG_SND_ALI5451=m
@@ -1084,37 +1101,14 @@ CONFIG_SND_ALI5451=m
1084# CONFIG_SND_VIRTUOSO is not set 1101# CONFIG_SND_VIRTUOSO is not set
1085# CONFIG_SND_VX222 is not set 1102# CONFIG_SND_VX222 is not set
1086# CONFIG_SND_YMFPCI is not set 1103# CONFIG_SND_YMFPCI is not set
1087# CONFIG_SND_AC97_POWER_SAVE is not set 1104CONFIG_SND_USB=y
1088
1089#
1090# USB devices
1091#
1092# CONFIG_SND_USB_AUDIO is not set 1105# CONFIG_SND_USB_AUDIO is not set
1093# CONFIG_SND_USB_CAIAQ is not set 1106# CONFIG_SND_USB_CAIAQ is not set
1094 1107CONFIG_SND_SPARC=y
1095#
1096# ALSA Sparc devices
1097#
1098# CONFIG_SND_SUN_AMD7930 is not set 1108# CONFIG_SND_SUN_AMD7930 is not set
1099CONFIG_SND_SUN_CS4231=m 1109CONFIG_SND_SUN_CS4231=m
1100# CONFIG_SND_SUN_DBRI is not set 1110# CONFIG_SND_SUN_DBRI is not set
1101
1102#
1103# System on Chip audio support
1104#
1105# CONFIG_SND_SOC is not set 1111# CONFIG_SND_SOC is not set
1106
1107#
1108# ALSA SoC audio for Freescale SOCs
1109#
1110
1111#
1112# SoC Audio for the Texas Instruments OMAP
1113#
1114
1115#
1116# Open Sound System
1117#
1118# CONFIG_SOUND_PRIME is not set 1112# CONFIG_SOUND_PRIME is not set
1119CONFIG_AC97_BUS=m 1113CONFIG_AC97_BUS=m
1120CONFIG_HID_SUPPORT=y 1114CONFIG_HID_SUPPORT=y
@@ -1167,6 +1161,7 @@ CONFIG_USB_UHCI_HCD=m
1167# 1161#
1168# CONFIG_USB_ACM is not set 1162# CONFIG_USB_ACM is not set
1169# CONFIG_USB_PRINTER is not set 1163# CONFIG_USB_PRINTER is not set
1164# CONFIG_USB_WDM is not set
1170 1165
1171# 1166#
1172# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1167# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1226,6 +1221,7 @@ CONFIG_USB_STORAGE=m
1226# CONFIG_USB_TRANCEVIBRATOR is not set 1221# CONFIG_USB_TRANCEVIBRATOR is not set
1227# CONFIG_USB_IOWARRIOR is not set 1222# CONFIG_USB_IOWARRIOR is not set
1228# CONFIG_USB_TEST is not set 1223# CONFIG_USB_TEST is not set
1224# CONFIG_USB_ISIGHTFW is not set
1229# CONFIG_USB_GADGET is not set 1225# CONFIG_USB_GADGET is not set
1230# CONFIG_MMC is not set 1226# CONFIG_MMC is not set
1231# CONFIG_MEMSTICK is not set 1227# CONFIG_MEMSTICK is not set
@@ -1420,6 +1416,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
1420# CONFIG_BACKTRACE_SELF_TEST is not set 1416# CONFIG_BACKTRACE_SELF_TEST is not set
1421# CONFIG_LKDTM is not set 1417# CONFIG_LKDTM is not set
1422# CONFIG_FAULT_INJECTION is not set 1418# CONFIG_FAULT_INJECTION is not set
1419CONFIG_HAVE_FTRACE=y
1420CONFIG_HAVE_DYNAMIC_FTRACE=y
1421# CONFIG_FTRACE is not set
1422# CONFIG_IRQSOFF_TRACER is not set
1423# CONFIG_SCHED_TRACER is not set
1424# CONFIG_CONTEXT_SWITCH_TRACER is not set
1423# CONFIG_SAMPLES is not set 1425# CONFIG_SAMPLES is not set
1424CONFIG_HAVE_ARCH_KGDB=y 1426CONFIG_HAVE_ARCH_KGDB=y
1425# CONFIG_KGDB is not set 1427# CONFIG_KGDB is not set
@@ -1486,6 +1488,10 @@ CONFIG_CRYPTO_CRC32C=m
1486CONFIG_CRYPTO_MD4=y 1488CONFIG_CRYPTO_MD4=y
1487CONFIG_CRYPTO_MD5=y 1489CONFIG_CRYPTO_MD5=y
1488CONFIG_CRYPTO_MICHAEL_MIC=m 1490CONFIG_CRYPTO_MICHAEL_MIC=m
1491# CONFIG_CRYPTO_RMD128 is not set
1492# CONFIG_CRYPTO_RMD160 is not set
1493# CONFIG_CRYPTO_RMD256 is not set
1494# CONFIG_CRYPTO_RMD320 is not set
1489CONFIG_CRYPTO_SHA1=y 1495CONFIG_CRYPTO_SHA1=y
1490CONFIG_CRYPTO_SHA256=m 1496CONFIG_CRYPTO_SHA256=m
1491CONFIG_CRYPTO_SHA512=m 1497CONFIG_CRYPTO_SHA512=m
@@ -1527,6 +1533,7 @@ CONFIG_BITREVERSE=y
1527# CONFIG_GENERIC_FIND_FIRST_BIT is not set 1533# CONFIG_GENERIC_FIND_FIRST_BIT is not set
1528CONFIG_CRC_CCITT=m 1534CONFIG_CRC_CCITT=m
1529CONFIG_CRC16=m 1535CONFIG_CRC16=m
1536# CONFIG_CRC_T10DIF is not set
1530# CONFIG_CRC_ITU_T is not set 1537# CONFIG_CRC_ITU_T is not set
1531CONFIG_CRC32=y 1538CONFIG_CRC32=y
1532# CONFIG_CRC7 is not set 1539# CONFIG_CRC7 is not set
diff --git a/arch/sparc64/kernel/central.c b/arch/sparc64/kernel/central.c
index b61b8dfb09cf..f2e87d0d7e1d 100644
--- a/arch/sparc64/kernel/central.c
+++ b/arch/sparc64/kernel/central.c
@@ -16,8 +16,8 @@
16#include <asm/fhc.h> 16#include <asm/fhc.h>
17#include <asm/starfire.h> 17#include <asm/starfire.h>
18 18
19struct linux_central *central_bus = NULL; 19static struct linux_central *central_bus = NULL;
20struct linux_fhc *fhc_list = NULL; 20static struct linux_fhc *fhc_list = NULL;
21 21
22#define IS_CENTRAL_FHC(__fhc) ((__fhc) == central_bus->child) 22#define IS_CENTRAL_FHC(__fhc) ((__fhc) == central_bus->child)
23 23
@@ -79,9 +79,9 @@ static void adjust_regs(struct linux_prom_registers *regp, int nregs,
79} 79}
80 80
81/* Apply probed fhc ranges to registers passed, if no ranges return. */ 81/* Apply probed fhc ranges to registers passed, if no ranges return. */
82void apply_fhc_ranges(struct linux_fhc *fhc, 82static void apply_fhc_ranges(struct linux_fhc *fhc,
83 struct linux_prom_registers *regs, 83 struct linux_prom_registers *regs,
84 int nregs) 84 int nregs)
85{ 85{
86 if (fhc->num_fhc_ranges) 86 if (fhc->num_fhc_ranges)
87 adjust_regs(regs, nregs, fhc->fhc_ranges, 87 adjust_regs(regs, nregs, fhc->fhc_ranges,
@@ -89,8 +89,8 @@ void apply_fhc_ranges(struct linux_fhc *fhc,
89} 89}
90 90
91/* Apply probed central ranges to registers passed, if no ranges return. */ 91/* Apply probed central ranges to registers passed, if no ranges return. */
92void apply_central_ranges(struct linux_central *central, 92static void apply_central_ranges(struct linux_central *central,
93 struct linux_prom_registers *regs, int nregs) 93 struct linux_prom_registers *regs, int nregs)
94{ 94{
95 if (central->num_central_ranges) 95 if (central->num_central_ranges)
96 adjust_regs(regs, nregs, central->central_ranges, 96 adjust_regs(regs, nregs, central->central_ranges,
diff --git a/arch/sparc64/kernel/ds.c b/arch/sparc64/kernel/ds.c
index edb74f5a1186..d0fa5aa38934 100644
--- a/arch/sparc64/kernel/ds.c
+++ b/arch/sparc64/kernel/ds.c
@@ -159,7 +159,7 @@ static void ds_var_data(struct ds_info *dp,
159 struct ds_cap_state *cp, 159 struct ds_cap_state *cp,
160 void *buf, int len); 160 void *buf, int len);
161 161
162struct ds_cap_state ds_states_template[] = { 162static struct ds_cap_state ds_states_template[] = {
163 { 163 {
164 .service_id = "md-update", 164 .service_id = "md-update",
165 .data = md_update_data, 165 .data = md_update_data,
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c
index c49d0388b793..4d58d7ce708d 100644
--- a/arch/sparc64/kernel/ebus.c
+++ b/arch/sparc64/kernel/ebus.c
@@ -401,7 +401,7 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de
401 dev->ofdev.node = dp; 401 dev->ofdev.node = dp;
402 dev->ofdev.dev.parent = &dev->bus->ofdev.dev; 402 dev->ofdev.dev.parent = &dev->bus->ofdev.dev;
403 dev->ofdev.dev.bus = &ebus_bus_type; 403 dev->ofdev.dev.bus = &ebus_bus_type;
404 sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); 404 dev_set_name(&dev->ofdev.dev, "ebus[%08x]", dp->node);
405 405
406 /* Register with core */ 406 /* Register with core */
407 if (of_device_register(&dev->ofdev) != 0) 407 if (of_device_register(&dev->ofdev) != 0)
@@ -501,7 +501,7 @@ void __init ebus_init(void)
501 ebus->ofdev.node = dp; 501 ebus->ofdev.node = dp;
502 ebus->ofdev.dev.parent = &pdev->dev; 502 ebus->ofdev.dev.parent = &pdev->dev;
503 ebus->ofdev.dev.bus = &ebus_bus_type; 503 ebus->ofdev.dev.bus = &ebus_bus_type;
504 sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); 504 dev_set_name(&ebus->ofdev.dev, "ebus%d", num_ebus);
505 505
506 /* Register with core */ 506 /* Register with core */
507 if (of_device_register(&ebus->ofdev) != 0) 507 if (of_device_register(&ebus->ofdev) != 0)
diff --git a/arch/sparc64/kernel/hvapi.c b/arch/sparc64/kernel/hvapi.c
index f34f5d6181ef..691760b5b012 100644
--- a/arch/sparc64/kernel/hvapi.c
+++ b/arch/sparc64/kernel/hvapi.c
@@ -34,8 +34,12 @@ static struct api_info api_table[] = {
34 { .group = HV_GRP_LDOM, }, 34 { .group = HV_GRP_LDOM, },
35 { .group = HV_GRP_SVC_CHAN, .flags = FLAG_PRE_API }, 35 { .group = HV_GRP_SVC_CHAN, .flags = FLAG_PRE_API },
36 { .group = HV_GRP_NCS, .flags = FLAG_PRE_API }, 36 { .group = HV_GRP_NCS, .flags = FLAG_PRE_API },
37 { .group = HV_GRP_RNG, },
37 { .group = HV_GRP_NIAG_PERF, .flags = FLAG_PRE_API }, 38 { .group = HV_GRP_NIAG_PERF, .flags = FLAG_PRE_API },
38 { .group = HV_GRP_FIRE_PERF, }, 39 { .group = HV_GRP_FIRE_PERF, },
40 { .group = HV_GRP_N2_CPU, },
41 { .group = HV_GRP_NIU, },
42 { .group = HV_GRP_VF_CPU, },
39 { .group = HV_GRP_DIAG, .flags = FLAG_PRE_API }, 43 { .group = HV_GRP_DIAG, .flags = FLAG_PRE_API },
40}; 44};
41 45
diff --git a/arch/sparc64/kernel/iommu_common.h b/arch/sparc64/kernel/iommu_common.h
index f3575a614fa2..53b19c8231a9 100644
--- a/arch/sparc64/kernel/iommu_common.h
+++ b/arch/sparc64/kernel/iommu_common.h
@@ -23,7 +23,7 @@
23#define IO_PAGE_SHIFT 13 23#define IO_PAGE_SHIFT 13
24#define IO_PAGE_SIZE (1UL << IO_PAGE_SHIFT) 24#define IO_PAGE_SIZE (1UL << IO_PAGE_SHIFT)
25#define IO_PAGE_MASK (~(IO_PAGE_SIZE-1)) 25#define IO_PAGE_MASK (~(IO_PAGE_SIZE-1))
26#define IO_PAGE_ALIGN(addr) (((addr)+IO_PAGE_SIZE-1)&IO_PAGE_MASK) 26#define IO_PAGE_ALIGN(addr) ALIGN(addr, IO_PAGE_SIZE)
27 27
28#define IO_TSB_ENTRIES (128*1024) 28#define IO_TSB_ENTRIES (128*1024)
29#define IO_TSB_SIZE (IO_TSB_ENTRIES * 8) 29#define IO_TSB_SIZE (IO_TSB_ENTRIES * 8)
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index b441a26b73b0..c481673d249c 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -621,8 +621,9 @@ unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino)
621unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino) 621unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
622{ 622{
623 struct irq_handler_data *data; 623 struct irq_handler_data *data;
624 struct ino_bucket *bucket;
625 unsigned long hv_err, cookie; 624 unsigned long hv_err, cookie;
625 struct ino_bucket *bucket;
626 struct irq_desc *desc;
626 unsigned int virt_irq; 627 unsigned int virt_irq;
627 628
628 bucket = kzalloc(sizeof(struct ino_bucket), GFP_ATOMIC); 629 bucket = kzalloc(sizeof(struct ino_bucket), GFP_ATOMIC);
@@ -643,6 +644,13 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
643 if (unlikely(!data)) 644 if (unlikely(!data))
644 return 0; 645 return 0;
645 646
647 /* In order to make the LDC channel startup sequence easier,
648 * especially wrt. locking, we do not let request_irq() enable
649 * the interrupt.
650 */
651 desc = irq_desc + virt_irq;
652 desc->status |= IRQ_NOAUTOEN;
653
646 set_irq_chip_data(virt_irq, data); 654 set_irq_chip_data(virt_irq, data);
647 655
648 /* Catch accidental accesses to these things. IMAP/ICLR handling 656 /* Catch accidental accesses to these things. IMAP/ICLR handling
diff --git a/arch/sparc64/kernel/ldc.c b/arch/sparc64/kernel/ldc.c
index 63969f610284..d68982330f66 100644
--- a/arch/sparc64/kernel/ldc.c
+++ b/arch/sparc64/kernel/ldc.c
@@ -1,6 +1,6 @@
1/* ldc.c: Logical Domain Channel link-layer protocol driver. 1/* ldc.c: Logical Domain Channel link-layer protocol driver.
2 * 2 *
3 * Copyright (C) 2007 David S. Miller <davem@davemloft.net> 3 * Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
4 */ 4 */
5 5
6#include <linux/kernel.h> 6#include <linux/kernel.h>
@@ -23,8 +23,8 @@
23 23
24#define DRV_MODULE_NAME "ldc" 24#define DRV_MODULE_NAME "ldc"
25#define PFX DRV_MODULE_NAME ": " 25#define PFX DRV_MODULE_NAME ": "
26#define DRV_MODULE_VERSION "1.0" 26#define DRV_MODULE_VERSION "1.1"
27#define DRV_MODULE_RELDATE "June 25, 2007" 27#define DRV_MODULE_RELDATE "July 22, 2008"
28 28
29static char version[] __devinitdata = 29static char version[] __devinitdata =
30 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; 30 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
@@ -1235,13 +1235,9 @@ int ldc_bind(struct ldc_channel *lp, const char *name)
1235 unsigned long hv_err, flags; 1235 unsigned long hv_err, flags;
1236 int err = -EINVAL; 1236 int err = -EINVAL;
1237 1237
1238 spin_lock_irqsave(&lp->lock, flags); 1238 if (!name ||
1239 1239 (lp->state != LDC_STATE_INIT))
1240 if (!name) 1240 return -EINVAL;
1241 goto out_err;
1242
1243 if (lp->state != LDC_STATE_INIT)
1244 goto out_err;
1245 1241
1246 snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name); 1242 snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);
1247 snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name); 1243 snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
@@ -1250,25 +1246,32 @@ int ldc_bind(struct ldc_channel *lp, const char *name)
1250 IRQF_SAMPLE_RANDOM | IRQF_SHARED, 1246 IRQF_SAMPLE_RANDOM | IRQF_SHARED,
1251 lp->rx_irq_name, lp); 1247 lp->rx_irq_name, lp);
1252 if (err) 1248 if (err)
1253 goto out_err; 1249 return err;
1254 1250
1255 err = request_irq(lp->cfg.tx_irq, ldc_tx, 1251 err = request_irq(lp->cfg.tx_irq, ldc_tx,
1256 IRQF_SAMPLE_RANDOM | IRQF_SHARED, 1252 IRQF_SAMPLE_RANDOM | IRQF_SHARED,
1257 lp->tx_irq_name, lp); 1253 lp->tx_irq_name, lp);
1258 if (err) 1254 if (err) {
1259 goto out_free_rx_irq; 1255 free_irq(lp->cfg.rx_irq, lp);
1256 return err;
1257 }
1258
1260 1259
1260 spin_lock_irqsave(&lp->lock, flags);
1261
1262 enable_irq(lp->cfg.rx_irq);
1263 enable_irq(lp->cfg.tx_irq);
1261 1264
1262 lp->flags |= LDC_FLAG_REGISTERED_IRQS; 1265 lp->flags |= LDC_FLAG_REGISTERED_IRQS;
1263 1266
1264 err = -ENODEV; 1267 err = -ENODEV;
1265 hv_err = sun4v_ldc_tx_qconf(lp->id, 0, 0); 1268 hv_err = sun4v_ldc_tx_qconf(lp->id, 0, 0);
1266 if (hv_err) 1269 if (hv_err)
1267 goto out_free_tx_irq; 1270 goto out_free_irqs;
1268 1271
1269 hv_err = sun4v_ldc_tx_qconf(lp->id, lp->tx_ra, lp->tx_num_entries); 1272 hv_err = sun4v_ldc_tx_qconf(lp->id, lp->tx_ra, lp->tx_num_entries);
1270 if (hv_err) 1273 if (hv_err)
1271 goto out_free_tx_irq; 1274 goto out_free_irqs;
1272 1275
1273 hv_err = sun4v_ldc_rx_qconf(lp->id, 0, 0); 1276 hv_err = sun4v_ldc_rx_qconf(lp->id, 0, 0);
1274 if (hv_err) 1277 if (hv_err)
@@ -1304,14 +1307,11 @@ out_unmap_rx:
1304out_unmap_tx: 1307out_unmap_tx:
1305 sun4v_ldc_tx_qconf(lp->id, 0, 0); 1308 sun4v_ldc_tx_qconf(lp->id, 0, 0);
1306 1309
1307out_free_tx_irq: 1310out_free_irqs:
1308 lp->flags &= ~LDC_FLAG_REGISTERED_IRQS; 1311 lp->flags &= ~LDC_FLAG_REGISTERED_IRQS;
1309 free_irq(lp->cfg.tx_irq, lp); 1312 free_irq(lp->cfg.tx_irq, lp);
1310
1311out_free_rx_irq:
1312 free_irq(lp->cfg.rx_irq, lp); 1313 free_irq(lp->cfg.rx_irq, lp);
1313 1314
1314out_err:
1315 spin_unlock_irqrestore(&lp->lock, flags); 1315 spin_unlock_irqrestore(&lp->lock, flags);
1316 1316
1317 return err; 1317 return err;
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c
index d569f60c24b8..4fd48ab7dda4 100644
--- a/arch/sparc64/kernel/of_device.c
+++ b/arch/sparc64/kernel/of_device.c
@@ -797,9 +797,9 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
797 op->dev.parent = parent; 797 op->dev.parent = parent;
798 op->dev.bus = &of_platform_bus_type; 798 op->dev.bus = &of_platform_bus_type;
799 if (!parent) 799 if (!parent)
800 strcpy(op->dev.bus_id, "root"); 800 dev_set_name(&op->dev, "root");
801 else 801 else
802 sprintf(op->dev.bus_id, "%08x", dp->node); 802 dev_set_name(&op->dev, "%08x", dp->node);
803 803
804 if (of_device_register(op)) { 804 if (of_device_register(op)) {
805 printk("%s: Could not register of device.\n", 805 printk("%s: Could not register of device.\n",
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c
index d00a3656c287..55096195458f 100644
--- a/arch/sparc64/kernel/pci.c
+++ b/arch/sparc64/kernel/pci.c
@@ -408,7 +408,7 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
408 dev->class = class >> 8; 408 dev->class = class >> 8;
409 dev->revision = class & 0xff; 409 dev->revision = class & 0xff;
410 410
411 sprintf(dev->dev.bus_id, "%04x:%02x:%02x.%d", pci_domain_nr(bus), 411 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(bus),
412 dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); 412 dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn));
413 413
414 if (ofpci_verbose) 414 if (ofpci_verbose)
diff --git a/arch/sparc64/kernel/pci_msi.c b/arch/sparc64/kernel/pci_msi.c
index db5e8fd8f674..60c71e350212 100644
--- a/arch/sparc64/kernel/pci_msi.c
+++ b/arch/sparc64/kernel/pci_msi.c
@@ -120,9 +120,9 @@ static struct irq_chip msi_irq = {
120 /* XXX affinity XXX */ 120 /* XXX affinity XXX */
121}; 121};
122 122
123int sparc64_setup_msi_irq(unsigned int *virt_irq_p, 123static int sparc64_setup_msi_irq(unsigned int *virt_irq_p,
124 struct pci_dev *pdev, 124 struct pci_dev *pdev,
125 struct msi_desc *entry) 125 struct msi_desc *entry)
126{ 126{
127 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; 127 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
128 const struct sparc64_msiq_ops *ops = pbm->msi_ops; 128 const struct sparc64_msiq_ops *ops = pbm->msi_ops;
@@ -179,8 +179,8 @@ out_err:
179 return err; 179 return err;
180} 180}
181 181
182void sparc64_teardown_msi_irq(unsigned int virt_irq, 182static void sparc64_teardown_msi_irq(unsigned int virt_irq,
183 struct pci_dev *pdev) 183 struct pci_dev *pdev)
184{ 184{
185 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller; 185 struct pci_pbm_info *pbm = pdev->dev.archdata.host_controller;
186 const struct sparc64_msiq_ops *ops = pbm->msi_ops; 186 const struct sparc64_msiq_ops *ops = pbm->msi_ops;
diff --git a/arch/sparc64/kernel/pci_sun4v.c b/arch/sparc64/kernel/pci_sun4v.c
index e2bb9790039c..a104c80d319d 100644
--- a/arch/sparc64/kernel/pci_sun4v.c
+++ b/arch/sparc64/kernel/pci_sun4v.c
@@ -531,7 +531,7 @@ static void dma_4v_sync_sg_for_cpu(struct device *dev,
531 /* Nothing to do... */ 531 /* Nothing to do... */
532} 532}
533 533
534const struct dma_ops sun4v_dma_ops = { 534static const struct dma_ops sun4v_dma_ops = {
535 .alloc_coherent = dma_4v_alloc_coherent, 535 .alloc_coherent = dma_4v_alloc_coherent,
536 .free_coherent = dma_4v_free_coherent, 536 .free_coherent = dma_4v_free_coherent,
537 .map_single = dma_4v_map_single, 537 .map_single = dma_4v_map_single,
diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
index 0798928ba361..8a9cd3e165b9 100644
--- a/arch/sparc64/kernel/process.c
+++ b/arch/sparc64/kernel/process.c
@@ -15,7 +15,6 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/sched.h> 16#include <linux/sched.h>
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/kallsyms.h>
19#include <linux/mm.h> 18#include <linux/mm.h>
20#include <linux/fs.h> 19#include <linux/fs.h>
21#include <linux/smp.h> 20#include <linux/smp.h>
@@ -211,7 +210,7 @@ static void show_regwindow(struct pt_regs *regs)
211 printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n", 210 printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n",
212 rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]); 211 rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]);
213 if (regs->tstate & TSTATE_PRIV) 212 if (regs->tstate & TSTATE_PRIV)
214 print_symbol("I7: <%s>\n", rwk->ins[7]); 213 printk("I7: <%pS>\n", (void *) rwk->ins[7]);
215} 214}
216 215
217#ifdef CONFIG_SMP 216#ifdef CONFIG_SMP
@@ -232,7 +231,7 @@ void __show_regs(struct pt_regs * regs)
232#endif 231#endif
233 printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x %s\n", regs->tstate, 232 printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x %s\n", regs->tstate,
234 regs->tpc, regs->tnpc, regs->y, print_tainted()); 233 regs->tpc, regs->tnpc, regs->y, print_tainted());
235 print_symbol("TPC: <%s>\n", regs->tpc); 234 printk("TPC: <%pS>\n", (void *) regs->tpc);
236 printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n", 235 printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n",
237 regs->u_regs[0], regs->u_regs[1], regs->u_regs[2], 236 regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
238 regs->u_regs[3]); 237 regs->u_regs[3]);
@@ -245,7 +244,7 @@ void __show_regs(struct pt_regs * regs)
245 printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n", 244 printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n",
246 regs->u_regs[12], regs->u_regs[13], regs->u_regs[14], 245 regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
247 regs->u_regs[15]); 246 regs->u_regs[15]);
248 print_symbol("RPC: <%s>\n", regs->u_regs[15]); 247 printk("RPC: <%pS>\n", (void *) regs->u_regs[15]);
249 show_regwindow(regs); 248 show_regwindow(regs);
250#ifdef CONFIG_SMP 249#ifdef CONFIG_SMP
251 spin_unlock(&regdump_lock); 250 spin_unlock(&regdump_lock);
@@ -346,9 +345,6 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)
346{ 345{
347 struct thread_info *tp = current_thread_info(); 346 struct thread_info *tp = current_thread_info();
348 struct pt_regs *regs = get_irq_regs(); 347 struct pt_regs *regs = get_irq_regs();
349#ifdef CONFIG_KALLSYMS
350 char buffer[KSYM_SYMBOL_LEN];
351#endif
352 unsigned long flags; 348 unsigned long flags;
353 int this_cpu, cpu; 349 int this_cpu, cpu;
354 350
@@ -377,17 +373,13 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)
377 gp->tstate, gp->tpc, gp->tnpc, 373 gp->tstate, gp->tpc, gp->tnpc,
378 ((tp && tp->task) ? tp->task->comm : "NULL"), 374 ((tp && tp->task) ? tp->task->comm : "NULL"),
379 ((tp && tp->task) ? tp->task->pid : -1)); 375 ((tp && tp->task) ? tp->task->pid : -1));
380#ifdef CONFIG_KALLSYMS 376
381 if (gp->tstate & TSTATE_PRIV) { 377 if (gp->tstate & TSTATE_PRIV) {
382 sprint_symbol(buffer, gp->tpc); 378 printk(" TPC[%pS] O7[%pS] I7[%pS]\n",
383 printk(" TPC[%s] ", buffer); 379 (void *) gp->tpc,
384 sprint_symbol(buffer, gp->o7); 380 (void *) gp->o7,
385 printk("O7[%s] ", buffer); 381 (void *) gp->i7);
386 sprint_symbol(buffer, gp->i7); 382 } else {
387 printk("I7[%s]\n", buffer);
388 } else
389#endif
390 {
391 printk(" TPC[%lx] O7[%lx] I7[%lx]\n", 383 printk(" TPC[%lx] O7[%lx] I7[%lx]\n",
392 gp->tpc, gp->o7, gp->i7); 384 gp->tpc, gp->o7, gp->i7);
393 } 385 }
@@ -691,9 +683,9 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
691 ((unsigned long) child_sf) - STACK_BIAS; 683 ((unsigned long) child_sf) - STACK_BIAS;
692 684
693 /* Special case, if we are spawning a kernel thread from 685 /* Special case, if we are spawning a kernel thread from
694 * a userspace task (via KMOD, NFS, or similar) we must 686 * a userspace task (usermode helper, NFS or similar), we
695 * disable performance counters in the child because the 687 * must disable performance counters in the child because
696 * address space and protection realm are changing. 688 * the address space and protection realm are changing.
697 */ 689 */
698 if (t->flags & _TIF_PERFCTR) { 690 if (t->flags & _TIF_PERFCTR) {
699 t->user_cntd0 = t->user_cntd1 = NULL; 691 t->user_cntd0 = t->user_cntd1 = NULL;
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index c099d96f1239..7cf72b4bb108 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -788,89 +788,36 @@ static void smp_start_sync_tick_client(int cpu)
788 0, 0, 0, mask); 788 0, 0, 0, mask);
789} 789}
790 790
791/* Send cross call to all processors except self. */
792#define smp_cross_call(func, ctx, data1, data2) \
793 smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
794
795struct call_data_struct {
796 void (*func) (void *info);
797 void *info;
798 atomic_t finished;
799 int wait;
800};
801
802static struct call_data_struct *call_data;
803
804extern unsigned long xcall_call_function; 791extern unsigned long xcall_call_function;
805 792
806/** 793void arch_send_call_function_ipi(cpumask_t mask)
807 * smp_call_function(): Run a function on all other CPUs.
808 * @func: The function to run. This must be fast and non-blocking.
809 * @info: An arbitrary pointer to pass to the function.
810 * @wait: If true, wait (atomically) until function has completed on other CPUs.
811 *
812 * Returns 0 on success, else a negative status code. Does not return until
813 * remote CPUs are nearly ready to execute <<func>> or are or have executed.
814 *
815 * You must not call this function with disabled interrupts or from a
816 * hardware interrupt handler or from a bottom half handler.
817 */
818static int sparc64_smp_call_function_mask(void (*func)(void *info), void *info,
819 int wait, cpumask_t mask)
820{ 794{
821 struct call_data_struct data;
822 int cpus;
823
824 /* Can deadlock when called with interrupts disabled */
825 WARN_ON(irqs_disabled());
826
827 data.func = func;
828 data.info = info;
829 atomic_set(&data.finished, 0);
830 data.wait = wait;
831
832 spin_lock(&call_lock);
833
834 cpu_clear(smp_processor_id(), mask);
835 cpus = cpus_weight(mask);
836 if (!cpus)
837 goto out_unlock;
838
839 call_data = &data;
840 mb();
841
842 smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask); 795 smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask);
796}
843 797
844 /* Wait for response */ 798extern unsigned long xcall_call_function_single;
845 while (atomic_read(&data.finished) != cpus)
846 cpu_relax();
847 799
848out_unlock: 800void arch_send_call_function_single_ipi(int cpu)
849 spin_unlock(&call_lock); 801{
802 cpumask_t mask = cpumask_of_cpu(cpu);
850 803
851 return 0; 804 smp_cross_call_masked(&xcall_call_function_single, 0, 0, 0, mask);
852} 805}
853 806
854int smp_call_function(void (*func)(void *info), void *info, int wait) 807/* Send cross call to all processors except self. */
855{ 808#define smp_cross_call(func, ctx, data1, data2) \
856 return sparc64_smp_call_function_mask(func, info, wait, cpu_online_map); 809 smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
857}
858 810
859void smp_call_function_client(int irq, struct pt_regs *regs) 811void smp_call_function_client(int irq, struct pt_regs *regs)
860{ 812{
861 void (*func) (void *info) = call_data->func; 813 clear_softint(1 << irq);
862 void *info = call_data->info; 814 generic_smp_call_function_interrupt();
815}
863 816
817void smp_call_function_single_client(int irq, struct pt_regs *regs)
818{
864 clear_softint(1 << irq); 819 clear_softint(1 << irq);
865 if (call_data->wait) { 820 generic_smp_call_function_single_interrupt();
866 /* let initiator proceed only after completion */
867 func(info);
868 atomic_inc(&call_data->finished);
869 } else {
870 /* let initiator proceed after getting data */
871 atomic_inc(&call_data->finished);
872 func(info);
873 }
874} 821}
875 822
876static void tsb_sync(void *info) 823static void tsb_sync(void *info)
@@ -890,7 +837,7 @@ static void tsb_sync(void *info)
890 837
891void smp_tsb_sync(struct mm_struct *mm) 838void smp_tsb_sync(struct mm_struct *mm)
892{ 839{
893 sparc64_smp_call_function_mask(tsb_sync, mm, 1, mm->cpu_vm_mask); 840 smp_call_function_mask(mm->cpu_vm_mask, tsb_sync, mm, 1);
894} 841}
895 842
896extern unsigned long xcall_flush_tlb_mm; 843extern unsigned long xcall_flush_tlb_mm;
diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c
index 49d3ea50c247..504e678ee128 100644
--- a/arch/sparc64/kernel/sparc64_ksyms.c
+++ b/arch/sparc64/kernel/sparc64_ksyms.c
@@ -108,8 +108,6 @@ EXPORT_SYMBOL(__read_unlock);
108EXPORT_SYMBOL(__write_lock); 108EXPORT_SYMBOL(__write_lock);
109EXPORT_SYMBOL(__write_unlock); 109EXPORT_SYMBOL(__write_unlock);
110EXPORT_SYMBOL(__write_trylock); 110EXPORT_SYMBOL(__write_trylock);
111
112EXPORT_SYMBOL(smp_call_function);
113#endif /* CONFIG_SMP */ 111#endif /* CONFIG_SMP */
114 112
115#ifdef CONFIG_MCOUNT 113#ifdef CONFIG_MCOUNT
diff --git a/arch/sparc64/kernel/sys_sparc.c b/arch/sparc64/kernel/sys_sparc.c
index ac1bff58c1ac..39749e32dc7e 100644
--- a/arch/sparc64/kernel/sys_sparc.c
+++ b/arch/sparc64/kernel/sys_sparc.c
@@ -418,7 +418,7 @@ asmlinkage long sparc_pipe(struct pt_regs *regs)
418 int fd[2]; 418 int fd[2];
419 int error; 419 int error;
420 420
421 error = do_pipe(fd); 421 error = do_pipe_flags(fd, 0);
422 if (error) 422 if (error)
423 goto out; 423 goto out;
424 regs->u_regs[UREG_I1] = fd[1]; 424 regs->u_regs[UREG_I1] = fd[1];
@@ -542,7 +542,7 @@ asmlinkage long sparc64_personality(unsigned long personality)
542 return ret; 542 return ret;
543} 543}
544 544
545int sparc64_mmap_check(unsigned long addr, unsigned long len) 545int sparc_mmap_check(unsigned long addr, unsigned long len)
546{ 546{
547 if (test_thread_flag(TIF_32BIT)) { 547 if (test_thread_flag(TIF_32BIT)) {
548 if (len >= STACK_TOP32) 548 if (len >= STACK_TOP32)
@@ -614,9 +614,9 @@ asmlinkage unsigned long sys64_mremap(unsigned long addr,
614 goto out; 614 goto out;
615 if (unlikely(new_len >= VA_EXCLUDE_START)) 615 if (unlikely(new_len >= VA_EXCLUDE_START))
616 goto out; 616 goto out;
617 if (unlikely(sparc64_mmap_check(addr, old_len))) 617 if (unlikely(sparc_mmap_check(addr, old_len)))
618 goto out; 618 goto out;
619 if (unlikely(sparc64_mmap_check(new_addr, new_len))) 619 if (unlikely(sparc_mmap_check(new_addr, new_len)))
620 goto out; 620 goto out;
621 621
622 down_write(&current->mm->mmap_sem); 622 down_write(&current->mm->mmap_sem);
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
index ba5bd626b39e..97b77fb5c50e 100644
--- a/arch/sparc64/kernel/sys_sparc32.c
+++ b/arch/sparc64/kernel/sys_sparc32.c
@@ -359,7 +359,8 @@ int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
359 return err; 359 return err;
360} 360}
361 361
362int cp_compat_stat64(struct kstat *stat, struct compat_stat64 __user *statbuf) 362static int cp_compat_stat64(struct kstat *stat,
363 struct compat_stat64 __user *statbuf)
363{ 364{
364 int err; 365 int err;
365 366
@@ -870,9 +871,9 @@ asmlinkage unsigned long sys32_mremap(unsigned long addr,
870 unsigned long ret = -EINVAL; 871 unsigned long ret = -EINVAL;
871 unsigned long new_addr = __new_addr; 872 unsigned long new_addr = __new_addr;
872 873
873 if (unlikely(sparc64_mmap_check(addr, old_len))) 874 if (unlikely(sparc_mmap_check(addr, old_len)))
874 goto out; 875 goto out;
875 if (unlikely(sparc64_mmap_check(new_addr, new_len))) 876 if (unlikely(sparc_mmap_check(new_addr, new_len)))
876 goto out; 877 goto out;
877 down_write(&current->mm->mmap_sem); 878 down_write(&current->mm->mmap_sem);
878 ret = do_mremap(addr, old_len, new_len, flags, new_addr); 879 ret = do_mremap(addr, old_len, new_len, flags, new_addr);
diff --git a/arch/sparc64/kernel/sysfs.c b/arch/sparc64/kernel/sysfs.c
index e885034a6b73..84e5ce146713 100644
--- a/arch/sparc64/kernel/sysfs.c
+++ b/arch/sparc64/kernel/sysfs.c
@@ -14,7 +14,8 @@
14static DEFINE_PER_CPU(struct hv_mmu_statistics, mmu_stats) __attribute__((aligned(64))); 14static DEFINE_PER_CPU(struct hv_mmu_statistics, mmu_stats) __attribute__((aligned(64)));
15 15
16#define SHOW_MMUSTAT_ULONG(NAME) \ 16#define SHOW_MMUSTAT_ULONG(NAME) \
17static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 17static ssize_t show_##NAME(struct sys_device *dev, \
18 struct sysdev_attribute *attr, char *buf) \
18{ \ 19{ \
19 struct hv_mmu_statistics *p = &per_cpu(mmu_stats, dev->id); \ 20 struct hv_mmu_statistics *p = &per_cpu(mmu_stats, dev->id); \
20 return sprintf(buf, "%lu\n", p->NAME); \ 21 return sprintf(buf, "%lu\n", p->NAME); \
@@ -135,13 +136,16 @@ static unsigned long write_mmustat_enable(unsigned long val)
135 return sun4v_mmustat_conf(ra, &orig_ra); 136 return sun4v_mmustat_conf(ra, &orig_ra);
136} 137}
137 138
138static ssize_t show_mmustat_enable(struct sys_device *s, char *buf) 139static ssize_t show_mmustat_enable(struct sys_device *s,
140 struct sysdev_attribute *attr, char *buf)
139{ 141{
140 unsigned long val = run_on_cpu(s->id, read_mmustat_enable, 0); 142 unsigned long val = run_on_cpu(s->id, read_mmustat_enable, 0);
141 return sprintf(buf, "%lx\n", val); 143 return sprintf(buf, "%lx\n", val);
142} 144}
143 145
144static ssize_t store_mmustat_enable(struct sys_device *s, const char *buf, size_t count) 146static ssize_t store_mmustat_enable(struct sys_device *s,
147 struct sysdev_attribute *attr, const char *buf,
148 size_t count)
145{ 149{
146 unsigned long val, err; 150 unsigned long val, err;
147 int ret = sscanf(buf, "%ld", &val); 151 int ret = sscanf(buf, "%ld", &val);
@@ -179,14 +183,16 @@ static void unregister_mmu_stats(struct sys_device *s)
179#endif 183#endif
180 184
181#define SHOW_CPUDATA_ULONG_NAME(NAME, MEMBER) \ 185#define SHOW_CPUDATA_ULONG_NAME(NAME, MEMBER) \
182static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 186static ssize_t show_##NAME(struct sys_device *dev, \
187 struct sysdev_attribute *attr, char *buf) \
183{ \ 188{ \
184 cpuinfo_sparc *c = &cpu_data(dev->id); \ 189 cpuinfo_sparc *c = &cpu_data(dev->id); \
185 return sprintf(buf, "%lu\n", c->MEMBER); \ 190 return sprintf(buf, "%lu\n", c->MEMBER); \
186} 191}
187 192
188#define SHOW_CPUDATA_UINT_NAME(NAME, MEMBER) \ 193#define SHOW_CPUDATA_UINT_NAME(NAME, MEMBER) \
189static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ 194static ssize_t show_##NAME(struct sys_device *dev, \
195 struct sysdev_attribute *attr, char *buf) \
190{ \ 196{ \
191 cpuinfo_sparc *c = &cpu_data(dev->id); \ 197 cpuinfo_sparc *c = &cpu_data(dev->id); \
192 return sprintf(buf, "%u\n", c->MEMBER); \ 198 return sprintf(buf, "%u\n", c->MEMBER); \
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c
index bedc4c159b1c..a0c6a97eec6e 100644
--- a/arch/sparc64/kernel/time.c
+++ b/arch/sparc64/kernel/time.c
@@ -884,6 +884,16 @@ static struct notifier_block sparc64_cpufreq_notifier_block = {
884 .notifier_call = sparc64_cpufreq_notifier 884 .notifier_call = sparc64_cpufreq_notifier
885}; 885};
886 886
887static int __init register_sparc64_cpufreq_notifier(void)
888{
889
890 cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
891 CPUFREQ_TRANSITION_NOTIFIER);
892 return 0;
893}
894
895core_initcall(register_sparc64_cpufreq_notifier);
896
887#endif /* CONFIG_CPU_FREQ */ 897#endif /* CONFIG_CPU_FREQ */
888 898
889static int sparc64_next_event(unsigned long delta, 899static int sparc64_next_event(unsigned long delta,
@@ -1050,11 +1060,6 @@ void __init time_init(void)
1050 sparc64_clockevent.mult, sparc64_clockevent.shift); 1060 sparc64_clockevent.mult, sparc64_clockevent.shift);
1051 1061
1052 setup_sparc64_timer(); 1062 setup_sparc64_timer();
1053
1054#ifdef CONFIG_CPU_FREQ
1055 cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
1056 CPUFREQ_TRANSITION_NOTIFIER);
1057#endif
1058} 1063}
1059 1064
1060unsigned long long sched_clock(void) 1065unsigned long long sched_clock(void)
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c
index 369749262653..bd30ecba5630 100644
--- a/arch/sparc64/kernel/traps.c
+++ b/arch/sparc64/kernel/traps.c
@@ -1,6 +1,6 @@
1/* arch/sparc64/kernel/traps.c 1/* arch/sparc64/kernel/traps.c
2 * 2 *
3 * Copyright (C) 1995,1997 David S. Miller (davem@davemloft.net) 3 * Copyright (C) 1995,1997,2008 David S. Miller (davem@davemloft.net)
4 * Copyright (C) 1997,1999,2000 Jakub Jelinek (jakub@redhat.com) 4 * Copyright (C) 1997,1999,2000 Jakub Jelinek (jakub@redhat.com)
5 */ 5 */
6 6
@@ -11,7 +11,6 @@
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/kallsyms.h>
15#include <linux/signal.h> 14#include <linux/signal.h>
16#include <linux/smp.h> 15#include <linux/smp.h>
17#include <linux/mm.h> 16#include <linux/mm.h>
@@ -37,9 +36,6 @@
37#include <asm/processor.h> 36#include <asm/processor.h>
38#include <asm/timer.h> 37#include <asm/timer.h>
39#include <asm/head.h> 38#include <asm/head.h>
40#ifdef CONFIG_KMOD
41#include <linux/kmod.h>
42#endif
43#include <asm/prom.h> 39#include <asm/prom.h>
44 40
45#include "entry.h" 41#include "entry.h"
@@ -74,7 +70,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p)
74 i + 1, 70 i + 1,
75 p->trapstack[i].tstate, p->trapstack[i].tpc, 71 p->trapstack[i].tstate, p->trapstack[i].tpc,
76 p->trapstack[i].tnpc, p->trapstack[i].tt); 72 p->trapstack[i].tnpc, p->trapstack[i].tt);
77 print_symbol("TRAPLOG: TPC<%s>\n", p->trapstack[i].tpc); 73 printk("TRAPLOG: TPC<%pS>\n", (void *) p->trapstack[i].tpc);
78 } 74 }
79} 75}
80 76
@@ -1081,7 +1077,7 @@ static void cheetah_log_errors(struct pt_regs *regs, struct cheetah_err_info *in
1081 regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate); 1077 regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate);
1082 printk("%s" "ERROR(%d): ", 1078 printk("%s" "ERROR(%d): ",
1083 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id()); 1079 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id());
1084 print_symbol("TPC<%s>\n", regs->tpc); 1080 printk("TPC<%pS>\n", (void *) regs->tpc);
1085 printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n", 1081 printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n",
1086 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), 1082 (recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(),
1087 (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT, 1083 (afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT,
@@ -1689,7 +1685,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs)
1689 smp_processor_id(), 1685 smp_processor_id(),
1690 (type & 0x1) ? 'I' : 'D', 1686 (type & 0x1) ? 'I' : 'D',
1691 regs->tpc); 1687 regs->tpc);
1692 print_symbol(KERN_EMERG "TPC<%s>\n", regs->tpc); 1688 printk(KERN_EMERG "TPC<%pS>\n", (void *) regs->tpc);
1693 panic("Irrecoverable Cheetah+ parity error."); 1689 panic("Irrecoverable Cheetah+ parity error.");
1694 } 1690 }
1695 1691
@@ -1697,7 +1693,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs)
1697 smp_processor_id(), 1693 smp_processor_id(),
1698 (type & 0x1) ? 'I' : 'D', 1694 (type & 0x1) ? 'I' : 'D',
1699 regs->tpc); 1695 regs->tpc);
1700 print_symbol(KERN_WARNING "TPC<%s>\n", regs->tpc); 1696 printk(KERN_WARNING "TPC<%pS>\n", (void *) regs->tpc);
1701} 1697}
1702 1698
1703struct sun4v_error_entry { 1699struct sun4v_error_entry {
@@ -1904,9 +1900,10 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl)
1904 1900
1905 printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n", 1901 printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n",
1906 regs->tpc, tl); 1902 regs->tpc, tl);
1907 print_symbol(KERN_EMERG "SUN4V-ITLB: TPC<%s>\n", regs->tpc); 1903 printk(KERN_EMERG "SUN4V-ITLB: TPC<%pS>\n", (void *) regs->tpc);
1908 printk(KERN_EMERG "SUN4V-ITLB: O7[%lx]\n", regs->u_regs[UREG_I7]); 1904 printk(KERN_EMERG "SUN4V-ITLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
1909 print_symbol(KERN_EMERG "SUN4V-ITLB: O7<%s>\n", regs->u_regs[UREG_I7]); 1905 printk(KERN_EMERG "SUN4V-ITLB: O7<%pS>\n",
1906 (void *) regs->u_regs[UREG_I7]);
1910 printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] " 1907 printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] "
1911 "pte[%lx] error[%lx]\n", 1908 "pte[%lx] error[%lx]\n",
1912 sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx, 1909 sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx,
@@ -1927,9 +1924,10 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl)
1927 1924
1928 printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n", 1925 printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n",
1929 regs->tpc, tl); 1926 regs->tpc, tl);
1930 print_symbol(KERN_EMERG "SUN4V-DTLB: TPC<%s>\n", regs->tpc); 1927 printk(KERN_EMERG "SUN4V-DTLB: TPC<%pS>\n", (void *) regs->tpc);
1931 printk(KERN_EMERG "SUN4V-DTLB: O7[%lx]\n", regs->u_regs[UREG_I7]); 1928 printk(KERN_EMERG "SUN4V-DTLB: O7[%lx]\n", regs->u_regs[UREG_I7]);
1932 print_symbol(KERN_EMERG "SUN4V-DTLB: O7<%s>\n", regs->u_regs[UREG_I7]); 1929 printk(KERN_EMERG "SUN4V-DTLB: O7<%pS>\n",
1930 (void *) regs->u_regs[UREG_I7]);
1933 printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] " 1931 printk(KERN_EMERG "SUN4V-DTLB: vaddr[%lx] ctx[%lx] "
1934 "pte[%lx] error[%lx]\n", 1932 "pte[%lx] error[%lx]\n",
1935 sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx, 1933 sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx,
@@ -2111,10 +2109,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
2111 fp = ksp + STACK_BIAS; 2109 fp = ksp + STACK_BIAS;
2112 thread_base = (unsigned long) tp; 2110 thread_base = (unsigned long) tp;
2113 2111
2114 printk("Call Trace:"); 2112 printk("Call Trace:\n");
2115#ifdef CONFIG_KALLSYMS
2116 printk("\n");
2117#endif
2118 do { 2113 do {
2119 struct sparc_stackf *sf; 2114 struct sparc_stackf *sf;
2120 struct pt_regs *regs; 2115 struct pt_regs *regs;
@@ -2137,12 +2132,8 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
2137 fp = (unsigned long)sf->fp + STACK_BIAS; 2132 fp = (unsigned long)sf->fp + STACK_BIAS;
2138 } 2133 }
2139 2134
2140 printk(" [%016lx] ", pc); 2135 printk(" [%016lx] %pS\n", pc, (void *) pc);
2141 print_symbol("%s\n", pc);
2142 } while (++count < 16); 2136 } while (++count < 16);
2143#ifndef CONFIG_KALLSYMS
2144 printk("\n");
2145#endif
2146} 2137}
2147 2138
2148void dump_stack(void) 2139void dump_stack(void)
@@ -2211,9 +2202,8 @@ void die_if_kernel(char *str, struct pt_regs *regs)
2211 while (rw && 2202 while (rw &&
2212 count++ < 30&& 2203 count++ < 30&&
2213 is_kernel_stack(current, rw)) { 2204 is_kernel_stack(current, rw)) {
2214 printk("Caller[%016lx]", rw->ins[7]); 2205 printk("Caller[%016lx]: %pS\n", rw->ins[7],
2215 print_symbol(": %s", rw->ins[7]); 2206 (void *) rw->ins[7]);
2216 printk("\n");
2217 2207
2218 rw = kernel_stack_up(rw); 2208 rw = kernel_stack_up(rw);
2219 } 2209 }
diff --git a/arch/sparc64/kernel/ttable.S b/arch/sparc64/kernel/ttable.S
index 450053af039e..1ade3d6fb7fc 100644
--- a/arch/sparc64/kernel/ttable.S
+++ b/arch/sparc64/kernel/ttable.S
@@ -58,7 +58,12 @@ tl0_irq3: BTRAP(0x43)
58tl0_irq4: BTRAP(0x44) 58tl0_irq4: BTRAP(0x44)
59#endif 59#endif
60tl0_irq5: TRAP_IRQ(handler_irq, 5) 60tl0_irq5: TRAP_IRQ(handler_irq, 5)
61tl0_irq6: BTRAP(0x46) BTRAP(0x47) BTRAP(0x48) BTRAP(0x49) 61#ifdef CONFIG_SMP
62tl0_irq6: TRAP_IRQ(smp_call_function_single_client, 6)
63#else
64tl0_irq6: BTRAP(0x46)
65#endif
66tl0_irq7: BTRAP(0x47) BTRAP(0x48) BTRAP(0x49)
62tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d) 67tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d)
63tl0_irq14: TRAP_IRQ(timer_interrupt, 14) 68tl0_irq14: TRAP_IRQ(timer_interrupt, 14)
64tl0_irq15: TRAP_IRQ(handler_irq, 15) 69tl0_irq15: TRAP_IRQ(handler_irq, 15)
diff --git a/arch/sparc64/kernel/unaligned.c b/arch/sparc64/kernel/unaligned.c
index afa7fc4f5193..203ddfad9f27 100644
--- a/arch/sparc64/kernel/unaligned.c
+++ b/arch/sparc64/kernel/unaligned.c
@@ -2,7 +2,7 @@
2 * unaligned.c: Unaligned load/store trap handling with special 2 * unaligned.c: Unaligned load/store trap handling with special
3 * cases for the kernel to do them more quickly. 3 * cases for the kernel to do them more quickly.
4 * 4 *
5 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 5 * Copyright (C) 1996,2008 David S. Miller (davem@davemloft.net)
6 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 6 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
7 */ 7 */
8 8
@@ -20,7 +20,6 @@
20#include <asm/uaccess.h> 20#include <asm/uaccess.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/bitops.h> 22#include <linux/bitops.h>
23#include <linux/kallsyms.h>
24#include <asm/fpumacro.h> 23#include <asm/fpumacro.h>
25 24
26/* #define DEBUG_MNA */ 25/* #define DEBUG_MNA */
@@ -289,8 +288,8 @@ static void log_unaligned(struct pt_regs *regs)
289 if (count < 5) { 288 if (count < 5) {
290 last_time = jiffies; 289 last_time = jiffies;
291 count++; 290 count++;
292 printk("Kernel unaligned access at TPC[%lx] ", regs->tpc); 291 printk("Kernel unaligned access at TPC[%lx] %pS\n",
293 print_symbol("%s\n", regs->tpc); 292 regs->tpc, (void *) regs->tpc);
294 } 293 }
295} 294}
296 295
diff --git a/arch/sparc64/kernel/vio.c b/arch/sparc64/kernel/vio.c
index e78b3517940b..a490077891a4 100644
--- a/arch/sparc64/kernel/vio.c
+++ b/arch/sparc64/kernel/vio.c
@@ -224,7 +224,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
224 if (!strcmp(type, "domain-services-port")) 224 if (!strcmp(type, "domain-services-port"))
225 bus_id_name = "ds"; 225 bus_id_name = "ds";
226 226
227 if (strlen(bus_id_name) >= KOBJ_NAME_LEN - 4) { 227 if (strlen(bus_id_name) >= BUS_ID_SIZE - 4) {
228 printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n", 228 printk(KERN_ERR "VIO: bus_id_name [%s] is too long.\n",
229 bus_id_name); 229 bus_id_name);
230 return NULL; 230 return NULL;
@@ -260,16 +260,14 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
260 vio_fill_channel_info(hp, mp, vdev); 260 vio_fill_channel_info(hp, mp, vdev);
261 261
262 if (!id) { 262 if (!id) {
263 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s", 263 dev_set_name(&vdev->dev, "%s", bus_id_name);
264 bus_id_name);
265 vdev->dev_no = ~(u64)0; 264 vdev->dev_no = ~(u64)0;
266 } else if (!cfg_handle) { 265 } else if (!cfg_handle) {
267 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu", 266 dev_set_name(&vdev->dev, "%s-%lu", bus_id_name, *id);
268 bus_id_name, *id);
269 vdev->dev_no = *id; 267 vdev->dev_no = *id;
270 } else { 268 } else {
271 snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu-%lu", 269 dev_set_name(&vdev->dev, "%s-%lu-%lu", bus_id_name,
272 bus_id_name, *cfg_handle, *id); 270 *cfg_handle, *id);
273 vdev->dev_no = *cfg_handle; 271 vdev->dev_no = *cfg_handle;
274 } 272 }
275 273
@@ -292,12 +290,12 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
292 } 290 }
293 vdev->dp = dp; 291 vdev->dp = dp;
294 292
295 printk(KERN_INFO "VIO: Adding device %s\n", vdev->dev.bus_id); 293 printk(KERN_INFO "VIO: Adding device %s\n", dev_name(&vdev->dev));
296 294
297 err = device_register(&vdev->dev); 295 err = device_register(&vdev->dev);
298 if (err) { 296 if (err) {
299 printk(KERN_ERR "VIO: Could not register device %s, err=%d\n", 297 printk(KERN_ERR "VIO: Could not register device %s, err=%d\n",
300 vdev->dev.bus_id, err); 298 dev_name(&vdev->dev), err);
301 kfree(vdev); 299 kfree(vdev);
302 return NULL; 300 return NULL;
303 } 301 }
@@ -330,7 +328,7 @@ static void vio_remove(struct mdesc_handle *hp, u64 node)
330 dev = device_find_child(&root_vdev->dev, (void *) node, 328 dev = device_find_child(&root_vdev->dev, (void *) node,
331 vio_md_node_match); 329 vio_md_node_match);
332 if (dev) { 330 if (dev) {
333 printk(KERN_INFO "VIO: Removing device %s\n", dev->bus_id); 331 printk(KERN_INFO "VIO: Removing device %s\n", dev_name(dev));
334 332
335 device_unregister(dev); 333 device_unregister(dev);
336 } 334 }
diff --git a/arch/sparc64/lib/copy_page.S b/arch/sparc64/lib/copy_page.S
index 37460666a5c3..b243d3b606ba 100644
--- a/arch/sparc64/lib/copy_page.S
+++ b/arch/sparc64/lib/copy_page.S
@@ -25,9 +25,9 @@
25 25
26#define DCACHE_SIZE (PAGE_SIZE * 2) 26#define DCACHE_SIZE (PAGE_SIZE * 2)
27 27
28#if (PAGE_SHIFT == 13) || (PAGE_SHIFT == 19) 28#if (PAGE_SHIFT == 13)
29#define PAGE_SIZE_REM 0x80 29#define PAGE_SIZE_REM 0x80
30#elif (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) 30#elif (PAGE_SHIFT == 16)
31#define PAGE_SIZE_REM 0x100 31#define PAGE_SIZE_REM 0x100
32#else 32#else
33#error Wrong PAGE_SHIFT specified 33#error Wrong PAGE_SHIFT specified
@@ -198,7 +198,7 @@ cheetah_copy_page_insn:
198 cmp %o2, PAGE_SIZE_REM 198 cmp %o2, PAGE_SIZE_REM
199 bne,pt %xcc, 1b 199 bne,pt %xcc, 1b
200 add %o0, 0x40, %o0 200 add %o0, 0x40, %o0
201#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) 201#if (PAGE_SHIFT == 16)
202 TOUCH(f0, f2, f4, f6, f8, f10, f12, f14) 202 TOUCH(f0, f2, f4, f6, f8, f10, f12, f14)
203 ldda [%o1] ASI_BLK_P, %f32 203 ldda [%o1] ASI_BLK_P, %f32
204 stda %f48, [%o0] %asi 204 stda %f48, [%o0] %asi
diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c
index 236f4d228d2b..ea7d7ae76bc2 100644
--- a/arch/sparc64/mm/fault.c
+++ b/arch/sparc64/mm/fault.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc. 2 * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc.
3 * 3 *
4 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 4 * Copyright (C) 1996, 2008 David S. Miller (davem@davemloft.net)
5 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz) 5 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
6 */ 6 */
7 7
@@ -18,7 +18,6 @@
18#include <linux/init.h> 18#include <linux/init.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/kprobes.h> 20#include <linux/kprobes.h>
21#include <linux/kallsyms.h>
22#include <linux/kdebug.h> 21#include <linux/kdebug.h>
23 22
24#include <asm/page.h> 23#include <asm/page.h>
@@ -115,7 +114,7 @@ static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
115 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n", 114 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
116 regs->tpc); 115 regs->tpc);
117 printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]); 116 printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]);
118 print_symbol("RPC: <%s>\n", regs->u_regs[15]); 117 printk("OOPS: RPC <%pS>\n", (void *) regs->u_regs[15]);
119 printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr); 118 printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
120 dump_stack(); 119 dump_stack();
121 unhandled_fault(regs->tpc, current, regs); 120 unhandled_fault(regs->tpc, current, regs);
diff --git a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c
index ebefd2a14375..f27d10369e0c 100644
--- a/arch/sparc64/mm/hugetlbpage.c
+++ b/arch/sparc64/mm/hugetlbpage.c
@@ -175,7 +175,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
175 return -ENOMEM; 175 return -ENOMEM;
176 176
177 if (flags & MAP_FIXED) { 177 if (flags & MAP_FIXED) {
178 if (prepare_hugepage_range(addr, len)) 178 if (prepare_hugepage_range(file, addr, len))
179 return -EINVAL; 179 return -EINVAL;
180 return addr; 180 return addr;
181 } 181 }
@@ -195,7 +195,8 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
195 pgoff, flags); 195 pgoff, flags);
196} 196}
197 197
198pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr) 198pte_t *huge_pte_alloc(struct mm_struct *mm,
199 unsigned long addr, unsigned long sz)
199{ 200{
200 pgd_t *pgd; 201 pgd_t *pgd;
201 pud_t *pud; 202 pud_t *pud;
@@ -294,6 +295,11 @@ int pmd_huge(pmd_t pmd)
294 return 0; 295 return 0;
295} 296}
296 297
298int pud_huge(pud_t pud)
299{
300 return 0;
301}
302
297struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 303struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
298 pmd_t *pmd, int write) 304 pmd_t *pmd, int write)
299{ 305{
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c
index 84898c44dd4d..713297473951 100644
--- a/arch/sparc64/mm/init.c
+++ b/arch/sparc64/mm/init.c
@@ -788,7 +788,6 @@ int numa_cpu_lookup_table[NR_CPUS];
788cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES]; 788cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES];
789 789
790#ifdef CONFIG_NEED_MULTIPLE_NODES 790#ifdef CONFIG_NEED_MULTIPLE_NODES
791static bootmem_data_t plat_node_bdata[MAX_NUMNODES];
792 791
793struct mdesc_mblock { 792struct mdesc_mblock {
794 u64 base; 793 u64 base;
@@ -871,7 +870,7 @@ static void __init allocate_node_data(int nid)
871 NODE_DATA(nid) = __va(paddr); 870 NODE_DATA(nid) = __va(paddr);
872 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); 871 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
873 872
874 NODE_DATA(nid)->bdata = &plat_node_bdata[nid]; 873 NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
875#endif 874#endif
876 875
877 p = NODE_DATA(nid); 876 p = NODE_DATA(nid);
diff --git a/arch/sparc64/mm/tsb.c b/arch/sparc64/mm/tsb.c
index fe70c8a557b5..3547937b17a2 100644
--- a/arch/sparc64/mm/tsb.c
+++ b/arch/sparc64/mm/tsb.c
@@ -96,12 +96,6 @@ void flush_tsb_user(struct mmu_gather *mp)
96#elif defined(CONFIG_SPARC64_PAGE_SIZE_64KB) 96#elif defined(CONFIG_SPARC64_PAGE_SIZE_64KB)
97#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_64K 97#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_64K
98#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_64K 98#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_64K
99#elif defined(CONFIG_SPARC64_PAGE_SIZE_512KB)
100#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_512K
101#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_512K
102#elif defined(CONFIG_SPARC64_PAGE_SIZE_4MB)
103#define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_4MB
104#define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_4MB
105#else 99#else
106#error Broken base page size setting... 100#error Broken base page size setting...
107#endif 101#endif
diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S
index 9bb2d90a9df6..4c8ca131ffaf 100644
--- a/arch/sparc64/mm/ultra.S
+++ b/arch/sparc64/mm/ultra.S
@@ -688,6 +688,11 @@ xcall_call_function:
688 wr %g0, (1 << PIL_SMP_CALL_FUNC), %set_softint 688 wr %g0, (1 << PIL_SMP_CALL_FUNC), %set_softint
689 retry 689 retry
690 690
691 .globl xcall_call_function_single
692xcall_call_function_single:
693 wr %g0, (1 << PIL_SMP_CALL_FUNC_SNGL), %set_softint
694 retry
695
691 .globl xcall_receive_signal 696 .globl xcall_receive_signal
692xcall_receive_signal: 697xcall_receive_signal:
693 wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint 698 wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint