diff options
author | Haavard Skinnemoen <haavard.skinnemoen@atmel.com> | 2008-07-27 07:54:08 -0400 |
---|---|---|
committer | Haavard Skinnemoen <haavard.skinnemoen@atmel.com> | 2008-07-27 07:54:08 -0400 |
commit | eda3d8f5604860aae1bb9996bb5efc4213778369 (patch) | |
tree | 9d3887d2665bcc5f5abf200758794545c7b2c69b /arch/sparc64 | |
parent | 87a9f704658a40940e740b1d73d861667e9164d3 (diff) | |
parent | 8be1a6d6c77ab4532e4476fdb8177030ef48b52c (diff) |
Merge commit 'upstream/master'
Diffstat (limited to 'arch/sparc64')
33 files changed, 256 insertions, 343 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 | ||
20 | config GENERIC_TIME | 21 | config 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 | ||
85 | source "init/Kconfig" | ||
86 | |||
87 | menu "Processor type and features" | ||
88 | |||
84 | choice | 89 | choice |
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 | ||
100 | config SPARC64_PAGE_SIZE_64KB | 103 | config SPARC64_PAGE_SIZE_64KB |
101 | bool "64KB" | 104 | bool "64KB" |
102 | 105 | ||
103 | config SPARC64_PAGE_SIZE_512KB | ||
104 | bool "512KB" | ||
105 | |||
106 | config SPARC64_PAGE_SIZE_4MB | ||
107 | bool "4MB" | ||
108 | |||
109 | endchoice | 106 | endchoice |
110 | 107 | ||
111 | config SECCOMP | 108 | config 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 | ||
139 | source "init/Kconfig" | ||
140 | |||
141 | config GENERIC_HARDIRQS | 136 | config GENERIC_HARDIRQS |
142 | bool | 137 | bool |
143 | default y | 138 | default y |
144 | 139 | ||
145 | menu "General machine setup" | ||
146 | |||
147 | source "kernel/time/Kconfig" | 140 | source "kernel/time/Kconfig" |
148 | 141 | ||
149 | config SMP | 142 | config SMP |
@@ -225,11 +218,10 @@ config HUGETLB_PAGE_SIZE_4MB | |||
225 | bool "4MB" | 218 | bool "4MB" |
226 | 219 | ||
227 | config HUGETLB_PAGE_SIZE_512K | 220 | config HUGETLB_PAGE_SIZE_512K |
228 | depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB | ||
229 | bool "512K" | 221 | bool "512K" |
230 | 222 | ||
231 | config HUGETLB_PAGE_SIZE_64K | 223 | config 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 | ||
235 | endchoice | 227 | endchoice |
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 | ||
10 | CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64 | 10 | CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64 |
11 | 11 | ||
12 | CPPFLAGS_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) | ||
14 | CPPFLAGS_vmlinux.lds += -m64 -Usparc | ||
13 | 15 | ||
14 | LDFLAGS := -m elf64_sparc | 16 | LDFLAGS := -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 | # |
6 | CONFIG_SPARC=y | 6 | CONFIG_SPARC=y |
7 | CONFIG_SPARC64=y | 7 | CONFIG_SPARC64=y |
@@ -22,18 +22,6 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y | |||
22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
23 | CONFIG_OF=y | 23 | CONFIG_OF=y |
24 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 24 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
25 | CONFIG_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 | ||
29 | CONFIG_SECCOMP=y | ||
30 | CONFIG_HZ_100=y | ||
31 | # CONFIG_HZ_250 is not set | ||
32 | # CONFIG_HZ_300 is not set | ||
33 | # CONFIG_HZ_1000 is not set | ||
34 | CONFIG_HZ=100 | ||
35 | # CONFIG_SCHED_HRTICK is not set | ||
36 | CONFIG_HOTPLUG_CPU=y | ||
37 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 25 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
38 | 26 | ||
39 | # | 27 | # |
@@ -105,6 +93,7 @@ CONFIG_KRETPROBES=y | |||
105 | CONFIG_HAVE_KPROBES=y | 93 | CONFIG_HAVE_KPROBES=y |
106 | CONFIG_HAVE_KRETPROBES=y | 94 | CONFIG_HAVE_KRETPROBES=y |
107 | # CONFIG_HAVE_DMA_ATTRS is not set | 95 | # CONFIG_HAVE_DMA_ATTRS is not set |
96 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
108 | CONFIG_PROC_PAGE_MONITOR=y | 97 | CONFIG_PROC_PAGE_MONITOR=y |
109 | CONFIG_SLABINFO=y | 98 | CONFIG_SLABINFO=y |
110 | CONFIG_RT_MUTEXES=y | 99 | CONFIG_RT_MUTEXES=y |
@@ -121,6 +110,7 @@ CONFIG_STOP_MACHINE=y | |||
121 | CONFIG_BLOCK=y | 110 | CONFIG_BLOCK=y |
122 | CONFIG_BLK_DEV_IO_TRACE=y | 111 | CONFIG_BLK_DEV_IO_TRACE=y |
123 | CONFIG_BLK_DEV_BSG=y | 112 | CONFIG_BLK_DEV_BSG=y |
113 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
124 | CONFIG_BLOCK_COMPAT=y | 114 | CONFIG_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 |
137 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 127 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
138 | CONFIG_CLASSIC_RCU=y | 128 | CONFIG_CLASSIC_RCU=y |
139 | CONFIG_GENERIC_HARDIRQS=y | ||
140 | 129 | ||
141 | # | 130 | # |
142 | # General machine setup | 131 | # Processor type and features |
143 | # | 132 | # |
133 | CONFIG_SPARC64_PAGE_SIZE_8KB=y | ||
134 | # CONFIG_SPARC64_PAGE_SIZE_64KB is not set | ||
135 | CONFIG_SECCOMP=y | ||
136 | CONFIG_HZ_100=y | ||
137 | # CONFIG_HZ_250 is not set | ||
138 | # CONFIG_HZ_300 is not set | ||
139 | # CONFIG_HZ_1000 is not set | ||
140 | CONFIG_HZ=100 | ||
141 | # CONFIG_SCHED_HRTICK is not set | ||
142 | CONFIG_HOTPLUG_CPU=y | ||
143 | CONFIG_GENERIC_HARDIRQS=y | ||
144 | CONFIG_TICK_ONESHOT=y | 144 | CONFIG_TICK_ONESHOT=y |
145 | CONFIG_NO_HZ=y | 145 | CONFIG_NO_HZ=y |
146 | CONFIG_HIGH_RES_TIMERS=y | 146 | CONFIG_HIGH_RES_TIMERS=y |
@@ -342,6 +342,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
342 | CONFIG_STANDALONE=y | 342 | CONFIG_STANDALONE=y |
343 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | 343 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set |
344 | CONFIG_FW_LOADER=y | 344 | CONFIG_FW_LOADER=y |
345 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
346 | CONFIG_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 | |||
366 | CONFIG_CDROM_PKTCDVD_WCACHE=y | 368 | CONFIG_CDROM_PKTCDVD_WCACHE=y |
367 | CONFIG_ATA_OVER_ETH=m | 369 | CONFIG_ATA_OVER_ETH=m |
368 | CONFIG_SUNVDC=m | 370 | CONFIG_SUNVDC=m |
371 | # CONFIG_BLK_DEV_HD is not set | ||
369 | CONFIG_MISC_DEVICES=y | 372 | CONFIG_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 | # |
385 | CONFIG_IDE_TIMINGS=y | ||
382 | # CONFIG_BLK_DEV_IDE_SATA is not set | 386 | # CONFIG_BLK_DEV_IDE_SATA is not set |
383 | CONFIG_BLK_DEV_IDEDISK=y | 387 | CONFIG_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 |
431 | CONFIG_BLK_DEV_IDEDMA=y | 435 | CONFIG_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 |
508 | CONFIG_MD=y | 511 | CONFIG_MD=y |
509 | CONFIG_BLK_DEV_MD=m | 512 | CONFIG_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 | |||
745 | CONFIG_UNIX98_PTYS=y | 752 | CONFIG_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 | 755 | CONFIG_HW_RANDOM=m |
756 | CONFIG_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 |
987 | CONFIG_LOGO_SUN_CLUT224=y | 1016 | CONFIG_LOGO_SUN_CLUT224=y |
988 | |||
989 | # | ||
990 | # Sound | ||
991 | # | ||
992 | CONFIG_SOUND=m | 1017 | CONFIG_SOUND=m |
993 | |||
994 | # | ||
995 | # Advanced Linux Sound Architecture | ||
996 | # | ||
997 | CONFIG_SND=m | 1018 | CONFIG_SND=m |
998 | CONFIG_SND_TIMER=m | 1019 | CONFIG_SND_TIMER=m |
999 | CONFIG_SND_PCM=m | 1020 | CONFIG_SND_PCM=m |
@@ -1010,21 +1031,17 @@ CONFIG_SND_SUPPORT_OLD_API=y | |||
1010 | CONFIG_SND_VERBOSE_PROCFS=y | 1031 | CONFIG_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 | 1034 | CONFIG_SND_VMASTER=y | |
1014 | # | ||
1015 | # Generic devices | ||
1016 | # | ||
1017 | CONFIG_SND_MPU401_UART=m | 1035 | CONFIG_SND_MPU401_UART=m |
1018 | CONFIG_SND_AC97_CODEC=m | 1036 | CONFIG_SND_AC97_CODEC=m |
1037 | CONFIG_SND_DRIVERS=y | ||
1019 | CONFIG_SND_DUMMY=m | 1038 | CONFIG_SND_DUMMY=m |
1020 | CONFIG_SND_VIRMIDI=m | 1039 | CONFIG_SND_VIRMIDI=m |
1021 | CONFIG_SND_MTPAV=m | 1040 | CONFIG_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 | # | 1044 | CONFIG_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 |
1030 | CONFIG_SND_ALI5451=m | 1047 | CONFIG_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 | 1104 | CONFIG_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 | 1107 | CONFIG_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 |
1099 | CONFIG_SND_SUN_CS4231=m | 1109 | CONFIG_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 |
1119 | CONFIG_AC97_BUS=m | 1113 | CONFIG_AC97_BUS=m |
1120 | CONFIG_HID_SUPPORT=y | 1114 | CONFIG_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 |
1419 | CONFIG_HAVE_FTRACE=y | ||
1420 | CONFIG_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 |
1424 | CONFIG_HAVE_ARCH_KGDB=y | 1426 | CONFIG_HAVE_ARCH_KGDB=y |
1425 | # CONFIG_KGDB is not set | 1427 | # CONFIG_KGDB is not set |
@@ -1486,6 +1488,10 @@ CONFIG_CRYPTO_CRC32C=m | |||
1486 | CONFIG_CRYPTO_MD4=y | 1488 | CONFIG_CRYPTO_MD4=y |
1487 | CONFIG_CRYPTO_MD5=y | 1489 | CONFIG_CRYPTO_MD5=y |
1488 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1490 | CONFIG_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 | ||
1489 | CONFIG_CRYPTO_SHA1=y | 1495 | CONFIG_CRYPTO_SHA1=y |
1490 | CONFIG_CRYPTO_SHA256=m | 1496 | CONFIG_CRYPTO_SHA256=m |
1491 | CONFIG_CRYPTO_SHA512=m | 1497 | CONFIG_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 |
1528 | CONFIG_CRC_CCITT=m | 1534 | CONFIG_CRC_CCITT=m |
1529 | CONFIG_CRC16=m | 1535 | CONFIG_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 |
1531 | CONFIG_CRC32=y | 1538 | CONFIG_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 | ||
19 | struct linux_central *central_bus = NULL; | 19 | static struct linux_central *central_bus = NULL; |
20 | struct linux_fhc *fhc_list = NULL; | 20 | static 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. */ |
82 | void apply_fhc_ranges(struct linux_fhc *fhc, | 82 | static 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. */ |
92 | void apply_central_ranges(struct linux_central *central, | 92 | static 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 | ||
162 | struct ds_cap_state ds_states_template[] = { | 162 | static 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) | |||
621 | unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino) | 621 | unsigned 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/kprobes.c b/arch/sparc64/kernel/kprobes.c index f43b5d755354..201a6e547e4a 100644 --- a/arch/sparc64/kernel/kprobes.c +++ b/arch/sparc64/kernel/kprobes.c | |||
@@ -478,9 +478,9 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) | |||
478 | return 0; | 478 | return 0; |
479 | } | 479 | } |
480 | 480 | ||
481 | /* Called with kretprobe_lock held. The value stored in the return | 481 | /* The value stored in the return address register is actually 2 |
482 | * address register is actually 2 instructions before where the | 482 | * instructions before where the callee will return to. |
483 | * callee will return to. Sequences usually look something like this | 483 | * Sequences usually look something like this |
484 | * | 484 | * |
485 | * call some_function <--- return register points here | 485 | * call some_function <--- return register points here |
486 | * nop <--- call delay slot | 486 | * nop <--- call delay slot |
@@ -512,8 +512,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | |||
512 | unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline; | 512 | unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline; |
513 | 513 | ||
514 | INIT_HLIST_HEAD(&empty_rp); | 514 | INIT_HLIST_HEAD(&empty_rp); |
515 | spin_lock_irqsave(&kretprobe_lock, flags); | 515 | kretprobe_hash_lock(current, &head, &flags); |
516 | head = kretprobe_inst_table_head(current); | ||
517 | 516 | ||
518 | /* | 517 | /* |
519 | * It is possible to have multiple instances associated with a given | 518 | * It is possible to have multiple instances associated with a given |
@@ -553,7 +552,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | |||
553 | regs->tnpc = orig_ret_address + 4; | 552 | regs->tnpc = orig_ret_address + 4; |
554 | 553 | ||
555 | reset_current_kprobe(); | 554 | reset_current_kprobe(); |
556 | spin_unlock_irqrestore(&kretprobe_lock, flags); | 555 | kretprobe_hash_unlock(current, &flags); |
557 | preempt_enable_no_resched(); | 556 | preempt_enable_no_resched(); |
558 | 557 | ||
559 | hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { | 558 | hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { |
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 | ||
29 | static char version[] __devinitdata = | 29 | static 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: | |||
1304 | out_unmap_tx: | 1307 | out_unmap_tx: |
1305 | sun4v_ldc_tx_qconf(lp->id, 0, 0); | 1308 | sun4v_ldc_tx_qconf(lp->id, 0, 0); |
1306 | 1309 | ||
1307 | out_free_tx_irq: | 1310 | out_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 | |||
1311 | out_free_rx_irq: | ||
1312 | free_irq(lp->cfg.rx_irq, lp); | 1313 | free_irq(lp->cfg.rx_irq, lp); |
1313 | 1314 | ||
1314 | out_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 | ||
123 | int sparc64_setup_msi_irq(unsigned int *virt_irq_p, | 123 | static 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 | ||
182 | void sparc64_teardown_msi_irq(unsigned int virt_irq, | 182 | static 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 | ||
534 | const struct dma_ops sun4v_dma_ops = { | 534 | static 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 2084f81a76e1..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> |
@@ -97,7 +96,7 @@ void cpu_idle(void) | |||
97 | set_thread_flag(TIF_POLLING_NRFLAG); | 96 | set_thread_flag(TIF_POLLING_NRFLAG); |
98 | 97 | ||
99 | while(1) { | 98 | while(1) { |
100 | tick_nohz_stop_sched_tick(); | 99 | tick_nohz_stop_sched_tick(1); |
101 | 100 | ||
102 | while (!need_resched() && !cpu_is_offline(cpu)) | 101 | while (!need_resched() && !cpu_is_offline(cpu)) |
103 | sparc64_yield(cpu); | 102 | sparc64_yield(cpu); |
@@ -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(®dump_lock); | 250 | spin_unlock(®dump_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 | |||
795 | struct call_data_struct { | ||
796 | void (*func) (void *info); | ||
797 | void *info; | ||
798 | atomic_t finished; | ||
799 | int wait; | ||
800 | }; | ||
801 | |||
802 | static struct call_data_struct *call_data; | ||
803 | |||
804 | extern unsigned long xcall_call_function; | 791 | extern unsigned long xcall_call_function; |
805 | 792 | ||
806 | /** | 793 | void 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 | */ | ||
818 | static 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 */ | 798 | extern unsigned long xcall_call_function_single; |
845 | while (atomic_read(&data.finished) != cpus) | ||
846 | cpu_relax(); | ||
847 | 799 | ||
848 | out_unlock: | 800 | void 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 | ||
854 | int 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 | ||
859 | void smp_call_function_client(int irq, struct pt_regs *regs) | 811 | void 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 | ||
817 | void 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 | ||
876 | static void tsb_sync(void *info) | 823 | static void tsb_sync(void *info) |
@@ -890,7 +837,7 @@ static void tsb_sync(void *info) | |||
890 | 837 | ||
891 | void smp_tsb_sync(struct mm_struct *mm) | 838 | void 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 | ||
896 | extern unsigned long xcall_flush_tlb_mm; | 843 | extern 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); | |||
108 | EXPORT_SYMBOL(__write_lock); | 108 | EXPORT_SYMBOL(__write_lock); |
109 | EXPORT_SYMBOL(__write_unlock); | 109 | EXPORT_SYMBOL(__write_unlock); |
110 | EXPORT_SYMBOL(__write_trylock); | 110 | EXPORT_SYMBOL(__write_trylock); |
111 | |||
112 | EXPORT_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 | ||
545 | int sparc64_mmap_check(unsigned long addr, unsigned long len) | 545 | int 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(¤t->mm->mmap_sem); | 622 | down_write(¤t->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 | ||
362 | int cp_compat_stat64(struct kstat *stat, struct compat_stat64 __user *statbuf) | 362 | static 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(¤t->mm->mmap_sem); | 878 | down_write(¤t->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 @@ | |||
14 | static DEFINE_PER_CPU(struct hv_mmu_statistics, mmu_stats) __attribute__((aligned(64))); | 14 | static 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) \ |
17 | static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ | 17 | static 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 | ||
138 | static ssize_t show_mmustat_enable(struct sys_device *s, char *buf) | 139 | static 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 | ||
144 | static ssize_t store_mmustat_enable(struct sys_device *s, const char *buf, size_t count) | 146 | static 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) \ |
182 | static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ | 186 | static 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) \ |
189 | static ssize_t show_##NAME(struct sys_device *dev, char *buf) \ | 194 | static 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/systbls.S b/arch/sparc64/kernel/systbls.S index 8b5282d433c4..1095bf4c5100 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
@@ -81,7 +81,8 @@ sys_call_table32: | |||
81 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages, compat_sys_mbind, compat_sys_get_mempolicy | 81 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages, compat_sys_mbind, compat_sys_get_mempolicy |
82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait | 82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait |
83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate | 83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate |
84 | .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime | 84 | .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1 |
85 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1 | ||
85 | 86 | ||
86 | #endif /* CONFIG_COMPAT */ | 87 | #endif /* CONFIG_COMPAT */ |
87 | 88 | ||
@@ -154,4 +155,5 @@ sys_call_table: | |||
154 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy | 155 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy |
155 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait | 156 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait |
156 | /*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate | 157 | /*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate |
157 | .word sys_timerfd_settime, sys_timerfd_gettime | 158 | .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 |
159 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1 | ||
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 | ||
887 | static 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 | |||
895 | core_initcall(register_sparc64_cpufreq_notifier); | ||
896 | |||
887 | #endif /* CONFIG_CPU_FREQ */ | 897 | #endif /* CONFIG_CPU_FREQ */ |
888 | 898 | ||
889 | static int sparc64_next_event(unsigned long delta, | 899 | static 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 | ||
1060 | unsigned long long sched_clock(void) | 1065 | unsigned 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 | ||
1703 | struct sun4v_error_entry { | 1699 | struct 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 | ||
2148 | void dump_stack(void) | 2139 | void 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) | |||
58 | tl0_irq4: BTRAP(0x44) | 58 | tl0_irq4: BTRAP(0x44) |
59 | #endif | 59 | #endif |
60 | tl0_irq5: TRAP_IRQ(handler_irq, 5) | 60 | tl0_irq5: TRAP_IRQ(handler_irq, 5) |
61 | tl0_irq6: BTRAP(0x46) BTRAP(0x47) BTRAP(0x48) BTRAP(0x49) | 61 | #ifdef CONFIG_SMP |
62 | tl0_irq6: TRAP_IRQ(smp_call_function_single_client, 6) | ||
63 | #else | ||
64 | tl0_irq6: BTRAP(0x46) | ||
65 | #endif | ||
66 | tl0_irq7: BTRAP(0x47) BTRAP(0x48) BTRAP(0x49) | ||
62 | tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d) | 67 | tl0_irq10: BTRAP(0x4a) BTRAP(0x4b) BTRAP(0x4c) BTRAP(0x4d) |
63 | tl0_irq14: TRAP_IRQ(timer_interrupt, 14) | 68 | tl0_irq14: TRAP_IRQ(timer_interrupt, 14) |
64 | tl0_irq15: TRAP_IRQ(handler_irq, 15) | 69 | tl0_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 | ||
198 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr) | 198 | pte_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 | ||
298 | int pud_huge(pud_t pud) | ||
299 | { | ||
300 | return 0; | ||
301 | } | ||
302 | |||
297 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, | 303 | struct 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..4e821b3ecb03 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c | |||
@@ -392,51 +392,6 @@ void __kprobes flush_icache_range(unsigned long start, unsigned long end) | |||
392 | } | 392 | } |
393 | } | 393 | } |
394 | 394 | ||
395 | void show_mem(void) | ||
396 | { | ||
397 | unsigned long total = 0, reserved = 0; | ||
398 | unsigned long shared = 0, cached = 0; | ||
399 | pg_data_t *pgdat; | ||
400 | |||
401 | printk(KERN_INFO "Mem-info:\n"); | ||
402 | show_free_areas(); | ||
403 | printk(KERN_INFO "Free swap: %6ldkB\n", | ||
404 | nr_swap_pages << (PAGE_SHIFT-10)); | ||
405 | for_each_online_pgdat(pgdat) { | ||
406 | unsigned long i, flags; | ||
407 | |||
408 | pgdat_resize_lock(pgdat, &flags); | ||
409 | for (i = 0; i < pgdat->node_spanned_pages; i++) { | ||
410 | struct page *page = pgdat_page_nr(pgdat, i); | ||
411 | total++; | ||
412 | if (PageReserved(page)) | ||
413 | reserved++; | ||
414 | else if (PageSwapCache(page)) | ||
415 | cached++; | ||
416 | else if (page_count(page)) | ||
417 | shared += page_count(page) - 1; | ||
418 | } | ||
419 | pgdat_resize_unlock(pgdat, &flags); | ||
420 | } | ||
421 | |||
422 | printk(KERN_INFO "%lu pages of RAM\n", total); | ||
423 | printk(KERN_INFO "%lu reserved pages\n", reserved); | ||
424 | printk(KERN_INFO "%lu pages shared\n", shared); | ||
425 | printk(KERN_INFO "%lu pages swap cached\n", cached); | ||
426 | |||
427 | printk(KERN_INFO "%lu pages dirty\n", | ||
428 | global_page_state(NR_FILE_DIRTY)); | ||
429 | printk(KERN_INFO "%lu pages writeback\n", | ||
430 | global_page_state(NR_WRITEBACK)); | ||
431 | printk(KERN_INFO "%lu pages mapped\n", | ||
432 | global_page_state(NR_FILE_MAPPED)); | ||
433 | printk(KERN_INFO "%lu pages slab\n", | ||
434 | global_page_state(NR_SLAB_RECLAIMABLE) + | ||
435 | global_page_state(NR_SLAB_UNRECLAIMABLE)); | ||
436 | printk(KERN_INFO "%lu pages pagetables\n", | ||
437 | global_page_state(NR_PAGETABLE)); | ||
438 | } | ||
439 | |||
440 | void mmu_info(struct seq_file *m) | 395 | void mmu_info(struct seq_file *m) |
441 | { | 396 | { |
442 | if (tlb_type == cheetah) | 397 | if (tlb_type == cheetah) |
@@ -788,7 +743,6 @@ int numa_cpu_lookup_table[NR_CPUS]; | |||
788 | cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES]; | 743 | cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES]; |
789 | 744 | ||
790 | #ifdef CONFIG_NEED_MULTIPLE_NODES | 745 | #ifdef CONFIG_NEED_MULTIPLE_NODES |
791 | static bootmem_data_t plat_node_bdata[MAX_NUMNODES]; | ||
792 | 746 | ||
793 | struct mdesc_mblock { | 747 | struct mdesc_mblock { |
794 | u64 base; | 748 | u64 base; |
@@ -871,7 +825,7 @@ static void __init allocate_node_data(int nid) | |||
871 | NODE_DATA(nid) = __va(paddr); | 825 | NODE_DATA(nid) = __va(paddr); |
872 | memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); | 826 | memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); |
873 | 827 | ||
874 | NODE_DATA(nid)->bdata = &plat_node_bdata[nid]; | 828 | NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; |
875 | #endif | 829 | #endif |
876 | 830 | ||
877 | p = NODE_DATA(nid); | 831 | 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 | ||
692 | xcall_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 |
692 | xcall_receive_signal: | 697 | xcall_receive_signal: |
693 | wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint | 698 | wr %g0, (1 << PIL_SMP_RECEIVE_SIGNAL), %set_softint |