diff options
Diffstat (limited to 'arch')
94 files changed, 912 insertions, 760 deletions
diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S index 71470e9d93ba..76bf071e376c 100644 --- a/arch/alpha/kernel/vmlinux.lds.S +++ b/arch/alpha/kernel/vmlinux.lds.S | |||
| @@ -48,13 +48,7 @@ SECTIONS | |||
| 48 | . = ALIGN(8); | 48 | . = ALIGN(8); |
| 49 | __initcall_start = .; | 49 | __initcall_start = .; |
| 50 | .initcall.init : { | 50 | .initcall.init : { |
| 51 | *(.initcall1.init) | 51 | INITCALLS |
| 52 | *(.initcall2.init) | ||
| 53 | *(.initcall3.init) | ||
| 54 | *(.initcall4.init) | ||
| 55 | *(.initcall5.init) | ||
| 56 | *(.initcall6.init) | ||
| 57 | *(.initcall7.init) | ||
| 58 | } | 52 | } |
| 59 | __initcall_end = .; | 53 | __initcall_end = .; |
| 60 | 54 | ||
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 3ca574ee2772..a8fa75ea07a9 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
| @@ -45,13 +45,7 @@ SECTIONS | |||
| 45 | *(.early_param.init) | 45 | *(.early_param.init) |
| 46 | __early_end = .; | 46 | __early_end = .; |
| 47 | __initcall_start = .; | 47 | __initcall_start = .; |
| 48 | *(.initcall1.init) | 48 | INITCALLS |
| 49 | *(.initcall2.init) | ||
| 50 | *(.initcall3.init) | ||
| 51 | *(.initcall4.init) | ||
| 52 | *(.initcall5.init) | ||
| 53 | *(.initcall6.init) | ||
| 54 | *(.initcall7.init) | ||
| 55 | __initcall_end = .; | 49 | __initcall_end = .; |
| 56 | __con_initcall_start = .; | 50 | __con_initcall_start = .; |
| 57 | *(.con_initcall.init) | 51 | *(.con_initcall.init) |
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c index 9ee63834e603..0fdd03ab36e6 100644 --- a/arch/arm/mach-ixp2000/ixdp2400.c +++ b/arch/arm/mach-ixp2000/ixdp2400.c | |||
| @@ -135,11 +135,11 @@ static void ixdp2400_pci_postinit(void) | |||
| 135 | if (ixdp2x00_master_npu()) { | 135 | if (ixdp2x00_master_npu()) { |
| 136 | dev = pci_get_bus_and_slot(1, IXDP2400_SLAVE_ENET_DEVFN); | 136 | dev = pci_get_bus_and_slot(1, IXDP2400_SLAVE_ENET_DEVFN); |
| 137 | pci_remove_bus_device(dev); | 137 | pci_remove_bus_device(dev); |
| 138 | pci_dev_put(dev) | 138 | pci_dev_put(dev); |
| 139 | } else { | 139 | } else { |
| 140 | dev = pci_get_bus_and_slot(1, IXDP2400_MASTER_ENET_DEVFN); | 140 | dev = pci_get_bus_and_slot(1, IXDP2400_MASTER_ENET_DEVFN); |
| 141 | pci_remove_bus_device(dev); | 141 | pci_remove_bus_device(dev); |
| 142 | pci_dev_put(dev) | 142 | pci_dev_put(dev); |
| 143 | 143 | ||
| 144 | ixdp2x00_slave_pci_postinit(); | 144 | ixdp2x00_slave_pci_postinit(); |
| 145 | } | 145 | } |
diff --git a/arch/arm/mach-lh7a40x/Kconfig b/arch/arm/mach-lh7a40x/Kconfig index 558a34f53b1c..147b01928a9b 100644 --- a/arch/arm/mach-lh7a40x/Kconfig +++ b/arch/arm/mach-lh7a40x/Kconfig | |||
| @@ -14,7 +14,7 @@ config MACH_LPD7A400 | |||
| 14 | bool "LPD7A400 Card Engine" | 14 | bool "LPD7A400 Card Engine" |
| 15 | select ARCH_LH7A400 | 15 | select ARCH_LH7A400 |
| 16 | # select IDE_POLL | 16 | # select IDE_POLL |
| 17 | select HAS_TOUCHSCREEN_ADS7843_LH7 | 17 | # select HAS_TOUCHSCREEN_ADS7843_LH7 |
| 18 | help | 18 | help |
| 19 | Say Y here if you are using Logic Product Development's | 19 | Say Y here if you are using Logic Product Development's |
| 20 | LPD7A400 CardEngine. For the time being, the LPD7A400 and | 20 | LPD7A400 CardEngine. For the time being, the LPD7A400 and |
| @@ -24,7 +24,7 @@ config MACH_LPD7A404 | |||
| 24 | bool "LPD7A404 Card Engine" | 24 | bool "LPD7A404 Card Engine" |
| 25 | select ARCH_LH7A404 | 25 | select ARCH_LH7A404 |
| 26 | # select IDE_POLL | 26 | # select IDE_POLL |
| 27 | select HAS_TOUCHSCREEN_ADC_LH7 | 27 | # select HAS_TOUCHSCREEN_ADC_LH7 |
| 28 | help | 28 | help |
| 29 | Say Y here if you are using Logic Product Development's | 29 | Say Y here if you are using Logic Product Development's |
| 30 | LPD7A404 CardEngine. For the time being, the LPD7A400 and | 30 | LPD7A404 CardEngine. For the time being, the LPD7A400 and |
diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile index cefc95a73980..7b842e98efed 100644 --- a/arch/avr32/Makefile +++ b/arch/avr32/Makefile | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | # Default target when executing plain make | 8 | # Default target when executing plain make |
| 9 | .PHONY: all | 9 | .PHONY: all |
| 10 | all: uImage vmlinux.elf linux.lst | 10 | all: uImage vmlinux.elf |
| 11 | 11 | ||
| 12 | KBUILD_DEFCONFIG := atstk1002_defconfig | 12 | KBUILD_DEFCONFIG := atstk1002_defconfig |
| 13 | 13 | ||
| @@ -21,9 +21,7 @@ cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000 | |||
| 21 | CFLAGS += $(cpuflags-y) | 21 | CFLAGS += $(cpuflags-y) |
| 22 | AFLAGS += $(cpuflags-y) | 22 | AFLAGS += $(cpuflags-y) |
| 23 | 23 | ||
| 24 | CHECKFLAGS += -D__avr32__ | 24 | CHECKFLAGS += -D__avr32__ -D__BIG_ENDIAN |
| 25 | |||
| 26 | LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) | ||
| 27 | 25 | ||
| 28 | head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o | 26 | head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o |
| 29 | head-y += arch/avr32/kernel/head.o | 27 | head-y += arch/avr32/kernel/head.o |
| @@ -32,7 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/ | |||
| 32 | core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ | 30 | core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ |
| 33 | core-y += arch/avr32/kernel/ | 31 | core-y += arch/avr32/kernel/ |
| 34 | core-y += arch/avr32/mm/ | 32 | core-y += arch/avr32/mm/ |
| 35 | libs-y += arch/avr32/lib/ #$(LIBGCC) | 33 | libs-y += arch/avr32/lib/ |
| 36 | 34 | ||
| 37 | archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap | 35 | archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap |
| 38 | 36 | ||
| @@ -48,6 +46,8 @@ endif | |||
| 48 | 46 | ||
| 49 | archprepare: include/asm-avr32/.arch | 47 | archprepare: include/asm-avr32/.arch |
| 50 | 48 | ||
| 49 | CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch | ||
| 50 | |||
| 51 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec | 51 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec |
| 52 | 52 | ||
| 53 | .PHONY: $(BOOT_TARGETS) install | 53 | .PHONY: $(BOOT_TARGETS) install |
| @@ -71,14 +71,19 @@ vmlinux.elf vmlinux.bin uImage.srec uImage vmlinux.cso: vmlinux | |||
| 71 | install: vmlinux | 71 | install: vmlinux |
| 72 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ | 72 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ |
| 73 | 73 | ||
| 74 | linux.s: vmlinux | 74 | vmlinux.s: vmlinux |
| 75 | $(call if_changed,disasm) | 75 | $(call if_changed,disasm) |
| 76 | 76 | ||
| 77 | linux.lst: vmlinux | 77 | vmlinux.lst: vmlinux |
| 78 | $(call if_changed,listing) | 78 | $(call if_changed,listing) |
| 79 | 79 | ||
| 80 | CLEAN_FILES += vmlinux.s vmlinux.lst | ||
| 81 | |||
| 82 | archclean: | ||
| 83 | $(Q)$(MAKE) $(clean)=$(boot) | ||
| 84 | |||
| 80 | define archhelp | 85 | define archhelp |
| 81 | @echo '* vmlinux.elf - ELF image with load address 0' | 86 | @echo '* vmlinux.elf - ELF image with load address 0' |
| 82 | @echo ' vmlinux.cso - PathFinder CSO image' | 87 | @echo ' vmlinux.cso - PathFinder CSO image' |
| 83 | @echo ' uImage - Create a bootable image for U-Boot' | 88 | @echo '* uImage - Create a bootable image for U-Boot' |
| 84 | endef | 89 | endef |
diff --git a/arch/avr32/boot/images/Makefile b/arch/avr32/boot/images/Makefile index ccd74eeecec3..219720a47bf9 100644 --- a/arch/avr32/boot/images/Makefile +++ b/arch/avr32/boot/images/Makefile | |||
| @@ -37,14 +37,12 @@ OBJCOPYFLAGS_vmlinux.elf := --change-section-lma .text-0x80000000 \ | |||
| 37 | --change-section-lma .data-0x80000000 \ | 37 | --change-section-lma .data-0x80000000 \ |
| 38 | --change-section-lma .init-0x80000000 \ | 38 | --change-section-lma .init-0x80000000 \ |
| 39 | --change-section-lma .bss-0x80000000 \ | 39 | --change-section-lma .bss-0x80000000 \ |
| 40 | --change-section-lma .initrd-0x80000000 \ | ||
| 41 | --change-section-lma __param-0x80000000 \ | 40 | --change-section-lma __param-0x80000000 \ |
| 42 | --change-section-lma __ksymtab-0x80000000 \ | 41 | --change-section-lma __ksymtab-0x80000000 \ |
| 43 | --change-section-lma __ksymtab_gpl-0x80000000 \ | 42 | --change-section-lma __ksymtab_gpl-0x80000000 \ |
| 44 | --change-section-lma __kcrctab-0x80000000 \ | 43 | --change-section-lma __kcrctab-0x80000000 \ |
| 45 | --change-section-lma __kcrctab_gpl-0x80000000 \ | 44 | --change-section-lma __kcrctab_gpl-0x80000000 \ |
| 46 | --change-section-lma __ksymtab_strings-0x80000000 \ | 45 | --change-section-lma __ksymtab_strings-0x80000000 \ |
| 47 | --change-section-lma .got-0x80000000 \ | ||
| 48 | --set-start 0xa0000000 | 46 | --set-start 0xa0000000 |
| 49 | $(obj)/vmlinux.elf: vmlinux FORCE | 47 | $(obj)/vmlinux.elf: vmlinux FORCE |
| 50 | $(call if_changed,objcopy) | 48 | $(call if_changed,objcopy) |
| @@ -59,4 +57,4 @@ install: $(BOOTIMAGE) | |||
| 59 | sh $(srctree)/install-kernel.sh $< | 57 | sh $(srctree)/install-kernel.sh $< |
| 60 | 58 | ||
| 61 | # Generated files to be removed upon make clean | 59 | # Generated files to be removed upon make clean |
| 62 | clean-files := vmlinux* uImage uImage.srec | 60 | clean-files := vmlinux.elf vmlinux.bin vmlinux.gz uImage uImage.srec |
diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig index 6c2c5e00dfc7..ae92a14ef9a0 100644 --- a/arch/avr32/configs/atstk1002_defconfig +++ b/arch/avr32/configs/atstk1002_defconfig | |||
| @@ -1,13 +1,14 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc2 |
| 4 | # Tue Jul 11 12:41:36 2006 | 4 | # Fri Oct 20 11:52:37 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_HARDIRQS=y | 7 | CONFIG_GENERIC_HARDIRQS=y |
| 8 | CONFIG_HARDIRQS_SW_RESEND=y | 8 | CONFIG_HARDIRQS_SW_RESEND=y |
| 9 | CONFIG_GENERIC_IRQ_PROBE=y | 9 | CONFIG_GENERIC_IRQ_PROBE=y |
| 10 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 10 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 11 | CONFIG_GENERIC_TIME=y | ||
| 11 | CONFIG_GENERIC_HWEIGHT=y | 12 | CONFIG_GENERIC_HWEIGHT=y |
| 12 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 13 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 13 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| @@ -25,16 +26,23 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
| 25 | CONFIG_LOCALVERSION="" | 26 | CONFIG_LOCALVERSION="" |
| 26 | # CONFIG_LOCALVERSION_AUTO is not set | 27 | # CONFIG_LOCALVERSION_AUTO is not set |
| 27 | CONFIG_SWAP=y | 28 | CONFIG_SWAP=y |
| 28 | # CONFIG_SYSVIPC is not set | 29 | CONFIG_SYSVIPC=y |
| 29 | # CONFIG_POSIX_MQUEUE is not set | 30 | # CONFIG_IPC_NS is not set |
| 30 | # CONFIG_BSD_PROCESS_ACCT is not set | 31 | CONFIG_POSIX_MQUEUE=y |
| 31 | CONFIG_SYSCTL=y | 32 | CONFIG_BSD_PROCESS_ACCT=y |
| 32 | # CONFIG_AUDIT is not set | 33 | CONFIG_BSD_PROCESS_ACCT_V3=y |
| 34 | CONFIG_TASKSTATS=y | ||
| 35 | CONFIG_TASK_DELAY_ACCT=y | ||
| 36 | # CONFIG_UTS_NS is not set | ||
| 37 | CONFIG_AUDIT=y | ||
| 33 | # CONFIG_IKCONFIG is not set | 38 | # CONFIG_IKCONFIG is not set |
| 34 | # CONFIG_RELAY is not set | 39 | CONFIG_RELAY=y |
| 35 | CONFIG_INITRAMFS_SOURCE="" | 40 | CONFIG_INITRAMFS_SOURCE="" |
| 36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 41 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 42 | # CONFIG_TASK_XACCT is not set | ||
| 43 | CONFIG_SYSCTL=y | ||
| 37 | CONFIG_EMBEDDED=y | 44 | CONFIG_EMBEDDED=y |
| 45 | # CONFIG_SYSCTL_SYSCALL is not set | ||
| 38 | CONFIG_KALLSYMS=y | 46 | CONFIG_KALLSYMS=y |
| 39 | # CONFIG_KALLSYMS_ALL is not set | 47 | # CONFIG_KALLSYMS_ALL is not set |
| 40 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 48 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -43,14 +51,15 @@ CONFIG_PRINTK=y | |||
| 43 | CONFIG_BUG=y | 51 | CONFIG_BUG=y |
| 44 | CONFIG_ELF_CORE=y | 52 | CONFIG_ELF_CORE=y |
| 45 | # CONFIG_BASE_FULL is not set | 53 | # CONFIG_BASE_FULL is not set |
| 46 | # CONFIG_FUTEX is not set | 54 | CONFIG_FUTEX=y |
| 47 | # CONFIG_EPOLL is not set | 55 | CONFIG_EPOLL=y |
| 48 | CONFIG_SHMEM=y | 56 | CONFIG_SHMEM=y |
| 49 | # CONFIG_SLAB is not set | 57 | CONFIG_SLAB=y |
| 50 | # CONFIG_VM_EVENT_COUNTERS is not set | 58 | CONFIG_VM_EVENT_COUNTERS=y |
| 59 | CONFIG_RT_MUTEXES=y | ||
| 51 | # CONFIG_TINY_SHMEM is not set | 60 | # CONFIG_TINY_SHMEM is not set |
| 52 | CONFIG_BASE_SMALL=1 | 61 | CONFIG_BASE_SMALL=1 |
| 53 | CONFIG_SLOB=y | 62 | # CONFIG_SLOB is not set |
| 54 | 63 | ||
| 55 | # | 64 | # |
| 56 | # Loadable module support | 65 | # Loadable module support |
| @@ -65,6 +74,7 @@ CONFIG_MODULE_UNLOAD=y | |||
| 65 | # | 74 | # |
| 66 | # Block layer | 75 | # Block layer |
| 67 | # | 76 | # |
| 77 | CONFIG_BLOCK=y | ||
| 68 | # CONFIG_BLK_DEV_IO_TRACE is not set | 78 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 69 | 79 | ||
| 70 | # | 80 | # |
| @@ -166,10 +176,12 @@ CONFIG_IP_PNP_DHCP=y | |||
| 166 | # CONFIG_INET_TUNNEL is not set | 176 | # CONFIG_INET_TUNNEL is not set |
| 167 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 177 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
| 168 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 178 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
| 179 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 169 | CONFIG_INET_DIAG=y | 180 | CONFIG_INET_DIAG=y |
| 170 | CONFIG_INET_TCP_DIAG=y | 181 | CONFIG_INET_TCP_DIAG=y |
| 171 | # CONFIG_TCP_CONG_ADVANCED is not set | 182 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 172 | CONFIG_TCP_CONG_BIC=y | 183 | CONFIG_TCP_CONG_CUBIC=y |
| 184 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 173 | # CONFIG_IPV6 is not set | 185 | # CONFIG_IPV6 is not set |
| 174 | # CONFIG_INET6_XFRM_TUNNEL is not set | 186 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 175 | # CONFIG_INET6_TUNNEL is not set | 187 | # CONFIG_INET6_TUNNEL is not set |
| @@ -199,7 +211,6 @@ CONFIG_TCP_CONG_BIC=y | |||
| 199 | # CONFIG_ATALK is not set | 211 | # CONFIG_ATALK is not set |
| 200 | # CONFIG_X25 is not set | 212 | # CONFIG_X25 is not set |
| 201 | # CONFIG_LAPB is not set | 213 | # CONFIG_LAPB is not set |
| 202 | # CONFIG_NET_DIVERT is not set | ||
| 203 | # CONFIG_ECONET is not set | 214 | # CONFIG_ECONET is not set |
| 204 | # CONFIG_WAN_ROUTER is not set | 215 | # CONFIG_WAN_ROUTER is not set |
| 205 | 216 | ||
| @@ -212,7 +223,6 @@ CONFIG_TCP_CONG_BIC=y | |||
| 212 | # Network testing | 223 | # Network testing |
| 213 | # | 224 | # |
| 214 | # CONFIG_NET_PKTGEN is not set | 225 | # CONFIG_NET_PKTGEN is not set |
| 215 | # CONFIG_NET_TCPPROBE is not set | ||
| 216 | # CONFIG_HAMRADIO is not set | 226 | # CONFIG_HAMRADIO is not set |
| 217 | # CONFIG_IRDA is not set | 227 | # CONFIG_IRDA is not set |
| 218 | # CONFIG_BT is not set | 228 | # CONFIG_BT is not set |
| @@ -239,7 +249,84 @@ CONFIG_STANDALONE=y | |||
| 239 | # | 249 | # |
| 240 | # Memory Technology Devices (MTD) | 250 | # Memory Technology Devices (MTD) |
| 241 | # | 251 | # |
| 242 | # CONFIG_MTD is not set | 252 | CONFIG_MTD=y |
| 253 | # CONFIG_MTD_DEBUG is not set | ||
| 254 | # CONFIG_MTD_CONCAT is not set | ||
| 255 | CONFIG_MTD_PARTITIONS=y | ||
| 256 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 257 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 258 | |||
| 259 | # | ||
| 260 | # User Modules And Translation Layers | ||
| 261 | # | ||
| 262 | CONFIG_MTD_CHAR=y | ||
| 263 | CONFIG_MTD_BLOCK=y | ||
| 264 | # CONFIG_FTL is not set | ||
| 265 | # CONFIG_NFTL is not set | ||
| 266 | # CONFIG_INFTL is not set | ||
| 267 | # CONFIG_RFD_FTL is not set | ||
| 268 | # CONFIG_SSFDC is not set | ||
| 269 | |||
| 270 | # | ||
| 271 | # RAM/ROM/Flash chip drivers | ||
| 272 | # | ||
| 273 | CONFIG_MTD_CFI=y | ||
| 274 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 275 | CONFIG_MTD_GEN_PROBE=y | ||
| 276 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 277 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 278 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 279 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 280 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 281 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 282 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 283 | CONFIG_MTD_CFI_I1=y | ||
| 284 | CONFIG_MTD_CFI_I2=y | ||
| 285 | # CONFIG_MTD_CFI_I4 is not set | ||
| 286 | # CONFIG_MTD_CFI_I8 is not set | ||
| 287 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 288 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 289 | # CONFIG_MTD_CFI_STAA is not set | ||
| 290 | CONFIG_MTD_CFI_UTIL=y | ||
| 291 | # CONFIG_MTD_RAM is not set | ||
| 292 | # CONFIG_MTD_ROM is not set | ||
| 293 | # CONFIG_MTD_ABSENT is not set | ||
| 294 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||
| 295 | |||
| 296 | # | ||
| 297 | # Mapping drivers for chip access | ||
| 298 | # | ||
| 299 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 300 | CONFIG_MTD_PHYSMAP=y | ||
| 301 | CONFIG_MTD_PHYSMAP_START=0x8000000 | ||
| 302 | CONFIG_MTD_PHYSMAP_LEN=0x0 | ||
| 303 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | ||
| 304 | # CONFIG_MTD_PLATRAM is not set | ||
| 305 | |||
| 306 | # | ||
| 307 | # Self-contained MTD device drivers | ||
| 308 | # | ||
| 309 | # CONFIG_MTD_SLRAM is not set | ||
| 310 | # CONFIG_MTD_PHRAM is not set | ||
| 311 | # CONFIG_MTD_MTDRAM is not set | ||
| 312 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 313 | |||
| 314 | # | ||
| 315 | # Disk-On-Chip Device Drivers | ||
| 316 | # | ||
| 317 | # CONFIG_MTD_DOC2000 is not set | ||
| 318 | # CONFIG_MTD_DOC2001 is not set | ||
| 319 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 320 | |||
| 321 | # | ||
| 322 | # NAND Flash Device Drivers | ||
| 323 | # | ||
| 324 | # CONFIG_MTD_NAND is not set | ||
| 325 | |||
| 326 | # | ||
| 327 | # OneNAND Flash Device Drivers | ||
| 328 | # | ||
| 329 | # CONFIG_MTD_ONENAND is not set | ||
| 243 | 330 | ||
| 244 | # | 331 | # |
| 245 | # Parallel port support | 332 | # Parallel port support |
| @@ -260,11 +347,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 260 | CONFIG_BLK_DEV_RAM=m | 347 | CONFIG_BLK_DEV_RAM=m |
| 261 | CONFIG_BLK_DEV_RAM_COUNT=16 | 348 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 262 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 349 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 350 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 263 | CONFIG_BLK_DEV_INITRD=y | 351 | CONFIG_BLK_DEV_INITRD=y |
| 264 | # CONFIG_CDROM_PKTCDVD is not set | 352 | # CONFIG_CDROM_PKTCDVD is not set |
| 265 | # CONFIG_ATA_OVER_ETH is not set | 353 | # CONFIG_ATA_OVER_ETH is not set |
| 266 | 354 | ||
| 267 | # | 355 | # |
| 356 | # Misc devices | ||
| 357 | # | ||
| 358 | # CONFIG_SGI_IOC4 is not set | ||
| 359 | # CONFIG_TIFM_CORE is not set | ||
| 360 | |||
| 361 | # | ||
| 268 | # ATA/ATAPI/MFM/RLL support | 362 | # ATA/ATAPI/MFM/RLL support |
| 269 | # | 363 | # |
| 270 | # CONFIG_IDE is not set | 364 | # CONFIG_IDE is not set |
| @@ -274,6 +368,12 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 274 | # | 368 | # |
| 275 | # CONFIG_RAID_ATTRS is not set | 369 | # CONFIG_RAID_ATTRS is not set |
| 276 | # CONFIG_SCSI is not set | 370 | # CONFIG_SCSI is not set |
| 371 | # CONFIG_SCSI_NETLINK is not set | ||
| 372 | |||
| 373 | # | ||
| 374 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
| 375 | # | ||
| 376 | # CONFIG_ATA is not set | ||
| 277 | 377 | ||
| 278 | # | 378 | # |
| 279 | # Multi-device support (RAID and LVM) | 379 | # Multi-device support (RAID and LVM) |
| @@ -305,14 +405,11 @@ CONFIG_TUN=m | |||
| 305 | # | 405 | # |
| 306 | # PHY device support | 406 | # PHY device support |
| 307 | # | 407 | # |
| 308 | # CONFIG_PHYLIB is not set | ||
| 309 | 408 | ||
| 310 | # | 409 | # |
| 311 | # Ethernet (10 or 100Mbit) | 410 | # Ethernet (10 or 100Mbit) |
| 312 | # | 411 | # |
| 313 | CONFIG_NET_ETHERNET=y | 412 | # CONFIG_NET_ETHERNET is not set |
| 314 | CONFIG_MII=y | ||
| 315 | CONFIG_MACB=y | ||
| 316 | 413 | ||
| 317 | # | 414 | # |
| 318 | # Ethernet (1000 Mbit) | 415 | # Ethernet (1000 Mbit) |
| @@ -341,10 +438,11 @@ CONFIG_PPP=m | |||
| 341 | CONFIG_PPP_ASYNC=m | 438 | CONFIG_PPP_ASYNC=m |
| 342 | # CONFIG_PPP_SYNC_TTY is not set | 439 | # CONFIG_PPP_SYNC_TTY is not set |
| 343 | CONFIG_PPP_DEFLATE=m | 440 | CONFIG_PPP_DEFLATE=m |
| 344 | # CONFIG_PPP_BSDCOMP is not set | 441 | CONFIG_PPP_BSDCOMP=m |
| 345 | # CONFIG_PPP_MPPE is not set | 442 | # CONFIG_PPP_MPPE is not set |
| 346 | # CONFIG_PPPOE is not set | 443 | # CONFIG_PPPOE is not set |
| 347 | # CONFIG_SLIP is not set | 444 | # CONFIG_SLIP is not set |
| 445 | CONFIG_SLHC=m | ||
| 348 | # CONFIG_SHAPER is not set | 446 | # CONFIG_SHAPER is not set |
| 349 | # CONFIG_NETCONSOLE is not set | 447 | # CONFIG_NETCONSOLE is not set |
| 350 | # CONFIG_NETPOLL is not set | 448 | # CONFIG_NETPOLL is not set |
| @@ -417,7 +515,6 @@ CONFIG_UNIX98_PTYS=y | |||
| 417 | # TPM devices | 515 | # TPM devices |
| 418 | # | 516 | # |
| 419 | # CONFIG_TCG_TPM is not set | 517 | # CONFIG_TCG_TPM is not set |
| 420 | # CONFIG_TELCLOCK is not set | ||
| 421 | 518 | ||
| 422 | # | 519 | # |
| 423 | # I2C support | 520 | # I2C support |
| @@ -427,23 +524,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 427 | # | 524 | # |
| 428 | # SPI support | 525 | # SPI support |
| 429 | # | 526 | # |
| 430 | CONFIG_SPI=y | 527 | # CONFIG_SPI is not set |
| 431 | # CONFIG_SPI_DEBUG is not set | 528 | # CONFIG_SPI_MASTER is not set |
| 432 | CONFIG_SPI_MASTER=y | ||
| 433 | |||
| 434 | # | ||
| 435 | # SPI Master Controller Drivers | ||
| 436 | # | ||
| 437 | CONFIG_SPI_ATMEL=m | ||
| 438 | # CONFIG_SPI_BITBANG is not set | ||
| 439 | |||
| 440 | # | ||
| 441 | # SPI Protocol Masters | ||
| 442 | # | ||
| 443 | 529 | ||
| 444 | # | 530 | # |
| 445 | # Dallas's 1-wire bus | 531 | # Dallas's 1-wire bus |
| 446 | # | 532 | # |
| 533 | # CONFIG_W1 is not set | ||
| 447 | 534 | ||
| 448 | # | 535 | # |
| 449 | # Hardware Monitoring support | 536 | # Hardware Monitoring support |
| @@ -452,14 +539,9 @@ CONFIG_SPI_ATMEL=m | |||
| 452 | # CONFIG_HWMON_VID is not set | 539 | # CONFIG_HWMON_VID is not set |
| 453 | 540 | ||
| 454 | # | 541 | # |
| 455 | # Misc devices | ||
| 456 | # | ||
| 457 | |||
| 458 | # | ||
| 459 | # Multimedia devices | 542 | # Multimedia devices |
| 460 | # | 543 | # |
| 461 | # CONFIG_VIDEO_DEV is not set | 544 | # CONFIG_VIDEO_DEV is not set |
| 462 | CONFIG_VIDEO_V4L2=y | ||
| 463 | 545 | ||
| 464 | # | 546 | # |
| 465 | # Digital Video Broadcasting Devices | 547 | # Digital Video Broadcasting Devices |
| @@ -470,28 +552,8 @@ CONFIG_VIDEO_V4L2=y | |||
| 470 | # Graphics support | 552 | # Graphics support |
| 471 | # | 553 | # |
| 472 | # CONFIG_FIRMWARE_EDID is not set | 554 | # CONFIG_FIRMWARE_EDID is not set |
| 473 | CONFIG_FB=m | 555 | # CONFIG_FB is not set |
| 474 | CONFIG_FB_CFB_FILLRECT=m | 556 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
| 475 | CONFIG_FB_CFB_COPYAREA=m | ||
| 476 | CONFIG_FB_CFB_IMAGEBLIT=m | ||
| 477 | # CONFIG_FB_MACMODES is not set | ||
| 478 | # CONFIG_FB_BACKLIGHT is not set | ||
| 479 | # CONFIG_FB_MODE_HELPERS is not set | ||
| 480 | # CONFIG_FB_TILEBLITTING is not set | ||
| 481 | CONFIG_FB_SIDSA=m | ||
| 482 | CONFIG_FB_SIDSA_DEFAULT_BPP=24 | ||
| 483 | # CONFIG_FB_S1D13XXX is not set | ||
| 484 | # CONFIG_FB_VIRTUAL is not set | ||
| 485 | |||
| 486 | # | ||
| 487 | # Logo configuration | ||
| 488 | # | ||
| 489 | # CONFIG_LOGO is not set | ||
| 490 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
| 491 | # CONFIG_BACKLIGHT_CLASS_DEVICE is not set | ||
| 492 | CONFIG_LCD_CLASS_DEVICE=m | ||
| 493 | CONFIG_LCD_DEVICE=y | ||
| 494 | CONFIG_LCD_LTV350QV=m | ||
| 495 | 557 | ||
| 496 | # | 558 | # |
| 497 | # Sound | 559 | # Sound |
| @@ -561,18 +623,21 @@ CONFIG_LCD_LTV350QV=m | |||
| 561 | # | 623 | # |
| 562 | # File systems | 624 | # File systems |
| 563 | # | 625 | # |
| 564 | CONFIG_EXT2_FS=y | 626 | CONFIG_EXT2_FS=m |
| 565 | # CONFIG_EXT2_FS_XATTR is not set | 627 | # CONFIG_EXT2_FS_XATTR is not set |
| 566 | # CONFIG_EXT2_FS_XIP is not set | 628 | # CONFIG_EXT2_FS_XIP is not set |
| 567 | # CONFIG_EXT3_FS is not set | 629 | # CONFIG_EXT3_FS is not set |
| 630 | # CONFIG_EXT4DEV_FS is not set | ||
| 568 | # CONFIG_REISERFS_FS is not set | 631 | # CONFIG_REISERFS_FS is not set |
| 569 | # CONFIG_JFS_FS is not set | 632 | # CONFIG_JFS_FS is not set |
| 570 | # CONFIG_FS_POSIX_ACL is not set | 633 | # CONFIG_FS_POSIX_ACL is not set |
| 571 | # CONFIG_XFS_FS is not set | 634 | # CONFIG_XFS_FS is not set |
| 635 | # CONFIG_GFS2_FS is not set | ||
| 572 | # CONFIG_OCFS2_FS is not set | 636 | # CONFIG_OCFS2_FS is not set |
| 573 | CONFIG_MINIX_FS=m | 637 | CONFIG_MINIX_FS=m |
| 574 | CONFIG_ROMFS_FS=m | 638 | # CONFIG_ROMFS_FS is not set |
| 575 | # CONFIG_INOTIFY is not set | 639 | CONFIG_INOTIFY=y |
| 640 | CONFIG_INOTIFY_USER=y | ||
| 576 | # CONFIG_QUOTA is not set | 641 | # CONFIG_QUOTA is not set |
| 577 | # CONFIG_DNOTIFY is not set | 642 | # CONFIG_DNOTIFY is not set |
| 578 | # CONFIG_AUTOFS_FS is not set | 643 | # CONFIG_AUTOFS_FS is not set |
| @@ -600,8 +665,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
| 600 | # | 665 | # |
| 601 | CONFIG_PROC_FS=y | 666 | CONFIG_PROC_FS=y |
| 602 | CONFIG_PROC_KCORE=y | 667 | CONFIG_PROC_KCORE=y |
| 668 | CONFIG_PROC_SYSCTL=y | ||
| 603 | CONFIG_SYSFS=y | 669 | CONFIG_SYSFS=y |
| 604 | CONFIG_TMPFS=y | 670 | CONFIG_TMPFS=y |
| 671 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 605 | # CONFIG_HUGETLB_PAGE is not set | 672 | # CONFIG_HUGETLB_PAGE is not set |
| 606 | CONFIG_RAMFS=y | 673 | CONFIG_RAMFS=y |
| 607 | CONFIG_CONFIGFS_FS=m | 674 | CONFIG_CONFIGFS_FS=m |
| @@ -616,6 +683,16 @@ CONFIG_CONFIGFS_FS=m | |||
| 616 | # CONFIG_BEFS_FS is not set | 683 | # CONFIG_BEFS_FS is not set |
| 617 | # CONFIG_BFS_FS is not set | 684 | # CONFIG_BFS_FS is not set |
| 618 | # CONFIG_EFS_FS is not set | 685 | # CONFIG_EFS_FS is not set |
| 686 | # CONFIG_JFFS_FS is not set | ||
| 687 | CONFIG_JFFS2_FS=y | ||
| 688 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 689 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
| 690 | # CONFIG_JFFS2_SUMMARY is not set | ||
| 691 | # CONFIG_JFFS2_FS_XATTR is not set | ||
| 692 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
| 693 | CONFIG_JFFS2_ZLIB=y | ||
| 694 | CONFIG_JFFS2_RTIME=y | ||
| 695 | # CONFIG_JFFS2_RUBIN is not set | ||
| 619 | # CONFIG_CRAMFS is not set | 696 | # CONFIG_CRAMFS is not set |
| 620 | # CONFIG_VXFS_FS is not set | 697 | # CONFIG_VXFS_FS is not set |
| 621 | # CONFIG_HPFS_FS is not set | 698 | # CONFIG_HPFS_FS is not set |
| @@ -626,26 +703,10 @@ CONFIG_CONFIGFS_FS=m | |||
| 626 | # | 703 | # |
| 627 | # Network File Systems | 704 | # Network File Systems |
| 628 | # | 705 | # |
| 629 | CONFIG_NFS_FS=y | 706 | # CONFIG_NFS_FS is not set |
| 630 | CONFIG_NFS_V3=y | ||
| 631 | # CONFIG_NFS_V3_ACL is not set | ||
| 632 | # CONFIG_NFS_V4 is not set | ||
| 633 | # CONFIG_NFS_DIRECTIO is not set | ||
| 634 | # CONFIG_NFSD is not set | 707 | # CONFIG_NFSD is not set |
| 635 | CONFIG_ROOT_NFS=y | ||
| 636 | CONFIG_LOCKD=y | ||
| 637 | CONFIG_LOCKD_V4=y | ||
| 638 | CONFIG_NFS_COMMON=y | ||
| 639 | CONFIG_SUNRPC=y | ||
| 640 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 641 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 642 | # CONFIG_SMB_FS is not set | 708 | # CONFIG_SMB_FS is not set |
| 643 | CONFIG_CIFS=m | 709 | # CONFIG_CIFS is not set |
| 644 | # CONFIG_CIFS_STATS is not set | ||
| 645 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 646 | # CONFIG_CIFS_XATTR is not set | ||
| 647 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 648 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 649 | # CONFIG_NCP_FS is not set | 710 | # CONFIG_NCP_FS is not set |
| 650 | # CONFIG_CODA_FS is not set | 711 | # CONFIG_CODA_FS is not set |
| 651 | # CONFIG_AFS_FS is not set | 712 | # CONFIG_AFS_FS is not set |
| @@ -665,7 +726,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
| 665 | CONFIG_NLS_CODEPAGE_437=m | 726 | CONFIG_NLS_CODEPAGE_437=m |
| 666 | # CONFIG_NLS_CODEPAGE_737 is not set | 727 | # CONFIG_NLS_CODEPAGE_737 is not set |
| 667 | # CONFIG_NLS_CODEPAGE_775 is not set | 728 | # CONFIG_NLS_CODEPAGE_775 is not set |
| 668 | CONFIG_NLS_CODEPAGE_850=m | 729 | # CONFIG_NLS_CODEPAGE_850 is not set |
| 669 | # CONFIG_NLS_CODEPAGE_852 is not set | 730 | # CONFIG_NLS_CODEPAGE_852 is not set |
| 670 | # CONFIG_NLS_CODEPAGE_855 is not set | 731 | # CONFIG_NLS_CODEPAGE_855 is not set |
| 671 | # CONFIG_NLS_CODEPAGE_857 is not set | 732 | # CONFIG_NLS_CODEPAGE_857 is not set |
| @@ -705,13 +766,17 @@ CONFIG_NLS_UTF8=m | |||
| 705 | # Kernel hacking | 766 | # Kernel hacking |
| 706 | # | 767 | # |
| 707 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 768 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 708 | CONFIG_PRINTK_TIME=y | 769 | # CONFIG_PRINTK_TIME is not set |
| 770 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 709 | CONFIG_MAGIC_SYSRQ=y | 771 | CONFIG_MAGIC_SYSRQ=y |
| 710 | # CONFIG_UNUSED_SYMBOLS is not set | 772 | # CONFIG_UNUSED_SYMBOLS is not set |
| 711 | CONFIG_DEBUG_KERNEL=y | 773 | CONFIG_DEBUG_KERNEL=y |
| 712 | CONFIG_LOG_BUF_SHIFT=14 | 774 | CONFIG_LOG_BUF_SHIFT=14 |
| 713 | CONFIG_DETECT_SOFTLOCKUP=y | 775 | CONFIG_DETECT_SOFTLOCKUP=y |
| 714 | # CONFIG_SCHEDSTATS is not set | 776 | # CONFIG_SCHEDSTATS is not set |
| 777 | # CONFIG_DEBUG_SLAB is not set | ||
| 778 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 779 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 715 | # CONFIG_DEBUG_SPINLOCK is not set | 780 | # CONFIG_DEBUG_SPINLOCK is not set |
| 716 | # CONFIG_DEBUG_MUTEXES is not set | 781 | # CONFIG_DEBUG_MUTEXES is not set |
| 717 | # CONFIG_DEBUG_RWSEMS is not set | 782 | # CONFIG_DEBUG_RWSEMS is not set |
| @@ -722,11 +787,13 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 722 | # CONFIG_DEBUG_INFO is not set | 787 | # CONFIG_DEBUG_INFO is not set |
| 723 | CONFIG_DEBUG_FS=y | 788 | CONFIG_DEBUG_FS=y |
| 724 | # CONFIG_DEBUG_VM is not set | 789 | # CONFIG_DEBUG_VM is not set |
| 790 | # CONFIG_DEBUG_LIST is not set | ||
| 725 | CONFIG_FRAME_POINTER=y | 791 | CONFIG_FRAME_POINTER=y |
| 726 | # CONFIG_UNWIND_INFO is not set | 792 | # CONFIG_UNWIND_INFO is not set |
| 727 | CONFIG_FORCED_INLINING=y | 793 | CONFIG_FORCED_INLINING=y |
| 794 | # CONFIG_HEADERS_CHECK is not set | ||
| 728 | # CONFIG_RCU_TORTURE_TEST is not set | 795 | # CONFIG_RCU_TORTURE_TEST is not set |
| 729 | CONFIG_KPROBES=y | 796 | # CONFIG_KPROBES is not set |
| 730 | 797 | ||
| 731 | # | 798 | # |
| 732 | # Security options | 799 | # Security options |
| @@ -740,15 +807,13 @@ CONFIG_KPROBES=y | |||
| 740 | # CONFIG_CRYPTO is not set | 807 | # CONFIG_CRYPTO is not set |
| 741 | 808 | ||
| 742 | # | 809 | # |
| 743 | # Hardware crypto devices | ||
| 744 | # | ||
| 745 | |||
| 746 | # | ||
| 747 | # Library routines | 810 | # Library routines |
| 748 | # | 811 | # |
| 749 | CONFIG_CRC_CCITT=m | 812 | CONFIG_CRC_CCITT=m |
| 750 | # CONFIG_CRC16 is not set | 813 | # CONFIG_CRC16 is not set |
| 751 | CONFIG_CRC32=m | 814 | CONFIG_CRC32=y |
| 752 | # CONFIG_LIBCRC32C is not set | 815 | # CONFIG_LIBCRC32C is not set |
| 753 | CONFIG_ZLIB_INFLATE=m | 816 | CONFIG_AUDIT_GENERIC=y |
| 754 | CONFIG_ZLIB_DEFLATE=m | 817 | CONFIG_ZLIB_INFLATE=y |
| 818 | CONFIG_ZLIB_DEFLATE=y | ||
| 819 | CONFIG_PLIST=y | ||
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 04f767a272b7..372e3f8b2417 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #include <linux/io.h> | ||
| 10 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 11 | 12 | ||
| 12 | #include <asm/checksum.h> | 13 | #include <asm/checksum.h> |
| @@ -53,3 +54,11 @@ EXPORT_SYMBOL(find_next_zero_bit); | |||
| 53 | EXPORT_SYMBOL(find_first_bit); | 54 | EXPORT_SYMBOL(find_first_bit); |
| 54 | EXPORT_SYMBOL(find_next_bit); | 55 | EXPORT_SYMBOL(find_next_bit); |
| 55 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); | 56 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); |
| 57 | |||
| 58 | /* I/O primitives (lib/io-*.S) */ | ||
| 59 | EXPORT_SYMBOL(__raw_readsb); | ||
| 60 | EXPORT_SYMBOL(__raw_readsw); | ||
| 61 | EXPORT_SYMBOL(__raw_readsl); | ||
| 62 | EXPORT_SYMBOL(__raw_writesb); | ||
| 63 | EXPORT_SYMBOL(__raw_writesw); | ||
| 64 | EXPORT_SYMBOL(__raw_writesl); | ||
diff --git a/arch/avr32/kernel/kprobes.c b/arch/avr32/kernel/kprobes.c index 6caf9e8d8080..ca41fc1edbe1 100644 --- a/arch/avr32/kernel/kprobes.c +++ b/arch/avr32/kernel/kprobes.c | |||
| @@ -109,7 +109,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) | |||
| 109 | void *addr = (void *)regs->pc; | 109 | void *addr = (void *)regs->pc; |
| 110 | int ret = 0; | 110 | int ret = 0; |
| 111 | 111 | ||
| 112 | pr_debug("kprobe_handler: kprobe_running=%d\n", | 112 | pr_debug("kprobe_handler: kprobe_running=%p\n", |
| 113 | kprobe_running()); | 113 | kprobe_running()); |
| 114 | 114 | ||
| 115 | /* | 115 | /* |
diff --git a/arch/avr32/kernel/module.c b/arch/avr32/kernel/module.c index dfc32f2817b6..b599eae64576 100644 --- a/arch/avr32/kernel/module.c +++ b/arch/avr32/kernel/module.c | |||
| @@ -263,7 +263,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, | |||
| 263 | * value of PC. Just subtract the value of | 263 | * value of PC. Just subtract the value of |
| 264 | * GOT, and we're done. | 264 | * GOT, and we're done. |
| 265 | */ | 265 | */ |
| 266 | pr_debug("GOTPC: PC=0x%lx, got_offset=0x%lx, core=0x%p\n", | 266 | pr_debug("GOTPC: PC=0x%x, got_offset=0x%lx, core=0x%p\n", |
| 267 | relocation, module->arch.got_offset, | 267 | relocation, module->arch.got_offset, |
| 268 | module->module_core); | 268 | module->module_core); |
| 269 | relocation -= ((unsigned long)module->module_core | 269 | relocation -= ((unsigned long)module->module_core |
| @@ -282,7 +282,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, | |||
| 282 | && (relocation & 0xffff0000) != 0xffff0000) | 282 | && (relocation & 0xffff0000) != 0xffff0000) |
| 283 | return reloc_overflow(module, "R_AVR32_GOT16S", | 283 | return reloc_overflow(module, "R_AVR32_GOT16S", |
| 284 | relocation); | 284 | relocation); |
| 285 | pr_debug("GOT reloc @ 0x%lx -> %lu\n", | 285 | pr_debug("GOT reloc @ 0x%x -> %u\n", |
| 286 | rel->r_offset, relocation); | 286 | rel->r_offset, relocation); |
| 287 | value = *location; | 287 | value = *location; |
| 288 | value = ((value & 0xffff0000) | 288 | value = ((value & 0xffff0000) |
diff --git a/arch/avr32/kernel/ptrace.c b/arch/avr32/kernel/ptrace.c index 3c89e59029ab..f2e81cd79002 100644 --- a/arch/avr32/kernel/ptrace.c +++ b/arch/avr32/kernel/ptrace.c | |||
| @@ -157,7 +157,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
| 157 | unsigned long tmp; | 157 | unsigned long tmp; |
| 158 | int ret; | 158 | int ret; |
| 159 | 159 | ||
| 160 | pr_debug("arch_ptrace(%ld, %ld, %#lx, %#lx)\n", | 160 | pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n", |
| 161 | request, child->pid, addr, data); | 161 | request, child->pid, addr, data); |
| 162 | 162 | ||
| 163 | pr_debug("ptrace: Enabling monitor mode...\n"); | 163 | pr_debug("ptrace: Enabling monitor mode...\n"); |
diff --git a/arch/avr32/kernel/vmlinux.lds.c b/arch/avr32/kernel/vmlinux.lds.c index cdd627c6b7dc..5c4424e362b5 100644 --- a/arch/avr32/kernel/vmlinux.lds.c +++ b/arch/avr32/kernel/vmlinux.lds.c | |||
| @@ -38,13 +38,7 @@ SECTIONS | |||
| 38 | __setup_end = .; | 38 | __setup_end = .; |
| 39 | . = ALIGN(4); | 39 | . = ALIGN(4); |
| 40 | __initcall_start = .; | 40 | __initcall_start = .; |
| 41 | *(.initcall1.init) | 41 | INITCALLS |
| 42 | *(.initcall2.init) | ||
| 43 | *(.initcall3.init) | ||
| 44 | *(.initcall4.init) | ||
| 45 | *(.initcall5.init) | ||
| 46 | *(.initcall6.init) | ||
| 47 | *(.initcall7.init) | ||
| 48 | __initcall_end = .; | 42 | __initcall_end = .; |
| 49 | __con_initcall_start = .; | 43 | __con_initcall_start = .; |
| 50 | *(.con_initcall.init) | 44 | *(.con_initcall.init) |
diff --git a/arch/avr32/lib/Makefile b/arch/avr32/lib/Makefile index 09ac43e40522..084d95bac5e7 100644 --- a/arch/avr32/lib/Makefile +++ b/arch/avr32/lib/Makefile | |||
| @@ -7,4 +7,5 @@ lib-y += strncpy_from_user.o strnlen_user.o | |||
| 7 | lib-y += delay.o memset.o memcpy.o findbit.o | 7 | lib-y += delay.o memset.o memcpy.o findbit.o |
| 8 | lib-y += csum_partial.o csum_partial_copy_generic.o | 8 | lib-y += csum_partial.o csum_partial_copy_generic.o |
| 9 | lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o | 9 | lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o |
| 10 | lib-y += io-readsb.o io-writesb.o | ||
| 10 | lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o | 11 | lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o |
diff --git a/arch/avr32/lib/io-readsb.S b/arch/avr32/lib/io-readsb.S new file mode 100644 index 000000000000..b319d5e71749 --- /dev/null +++ b/arch/avr32/lib/io-readsb.S | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004-2006 Atmel Corporation | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | .text | ||
| 10 | .Lnot_word_aligned: | ||
| 11 | 1: ld.ub r8, r12[0] | ||
| 12 | sub r10, 1 | ||
| 13 | st.b r11++, r8 | ||
| 14 | reteq r12 | ||
| 15 | tst r11, r9 | ||
| 16 | brne 1b | ||
| 17 | |||
| 18 | /* fall through */ | ||
| 19 | |||
| 20 | .global __raw_readsb | ||
| 21 | .type __raw_readsb,@function | ||
| 22 | __raw_readsb: | ||
| 23 | cp.w r10, 0 | ||
| 24 | mov r9, 3 | ||
| 25 | reteq r12 | ||
| 26 | |||
| 27 | tst r11, r9 | ||
| 28 | brne .Lnot_word_aligned | ||
| 29 | |||
| 30 | sub r10, 4 | ||
| 31 | brlt 2f | ||
| 32 | |||
| 33 | 1: ldins.b r8:t, r12[0] | ||
| 34 | ldins.b r8:u, r12[0] | ||
| 35 | ldins.b r8:l, r12[0] | ||
| 36 | ldins.b r8:b, r12[0] | ||
| 37 | st.w r11++, r8 | ||
| 38 | sub r10, 4 | ||
| 39 | brge 1b | ||
| 40 | |||
| 41 | 2: sub r10, -4 | ||
| 42 | reteq r12 | ||
| 43 | |||
| 44 | 3: ld.uh r8, r12[0] | ||
| 45 | sub r10, 1 | ||
| 46 | st.b r11++, r8 | ||
| 47 | brne 3b | ||
diff --git a/arch/avr32/lib/io-writesb.S b/arch/avr32/lib/io-writesb.S new file mode 100644 index 000000000000..b4ebaacccf68 --- /dev/null +++ b/arch/avr32/lib/io-writesb.S | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004-2006 Atmel Corporation | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | .text | ||
| 10 | .Lnot_word_aligned: | ||
| 11 | 1: ld.ub r8, r11++ | ||
| 12 | sub r10, 1 | ||
| 13 | st.b r12[0], r8 | ||
| 14 | reteq r12 | ||
| 15 | tst r11, r9 | ||
| 16 | brne 1b | ||
| 17 | |||
| 18 | /* fall through */ | ||
| 19 | |||
| 20 | .global __raw_writesb | ||
| 21 | .type __raw_writesb,@function | ||
| 22 | __raw_writesb: | ||
| 23 | cp.w r10, 0 | ||
| 24 | mov r9, 3 | ||
| 25 | reteq r12 | ||
| 26 | |||
| 27 | tst r11, r9 | ||
| 28 | brne .Lnot_word_aligned | ||
| 29 | |||
| 30 | sub r10, 4 | ||
| 31 | brlt 2f | ||
| 32 | |||
| 33 | 1: ld.w r8, r11++ | ||
| 34 | bfextu r9, r8, 24, 8 | ||
| 35 | st.b r12[0], r9 | ||
| 36 | bfextu r9, r8, 16, 8 | ||
| 37 | st.b r12[0], r9 | ||
| 38 | bfextu r9, r8, 8, 8 | ||
| 39 | st.b r12[0], r9 | ||
| 40 | st.b r12[0], r8 | ||
| 41 | sub r10, 4 | ||
| 42 | brge 1b | ||
| 43 | |||
| 44 | 2: sub r10, -4 | ||
| 45 | reteq r12 | ||
| 46 | |||
| 47 | 3: ld.ub r8, r11++ | ||
| 48 | sub r10, 1 | ||
| 49 | st.b r12[0], r8 | ||
| 50 | brne 3b | ||
| 51 | |||
| 52 | retal r12 | ||
diff --git a/arch/avr32/mach-at32ap/hsmc.h b/arch/avr32/mach-at32ap/hsmc.h index 5681276fafdb..d1d48e26e393 100644 --- a/arch/avr32/mach-at32ap/hsmc.h +++ b/arch/avr32/mach-at32ap/hsmc.h | |||
| @@ -120,8 +120,8 @@ | |||
| 120 | 120 | ||
| 121 | /* Register access macros */ | 121 | /* Register access macros */ |
| 122 | #define hsmc_readl(port,reg) \ | 122 | #define hsmc_readl(port,reg) \ |
| 123 | readl((port)->regs + HSMC_##reg) | 123 | __raw_readl((port)->regs + HSMC_##reg) |
| 124 | #define hsmc_writel(port,reg,value) \ | 124 | #define hsmc_writel(port,reg,value) \ |
| 125 | writel((value), (port)->regs + HSMC_##reg) | 125 | __raw_writel((value), (port)->regs + HSMC_##reg) |
| 126 | 126 | ||
| 127 | #endif /* __ASM_AVR32_HSMC_H__ */ | 127 | #endif /* __ASM_AVR32_HSMC_H__ */ |
diff --git a/arch/avr32/mach-at32ap/intc.h b/arch/avr32/mach-at32ap/intc.h index d289ca2fff13..4d3664e43a8e 100644 --- a/arch/avr32/mach-at32ap/intc.h +++ b/arch/avr32/mach-at32ap/intc.h | |||
| @@ -321,7 +321,9 @@ | |||
| 321 | #define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET) | 321 | #define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET) |
| 322 | #define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1)) | 322 | #define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1)) |
| 323 | 323 | ||
| 324 | #define intc_readl(port,reg) readl((port)->regs + INTC_##reg) | 324 | #define intc_readl(port,reg) \ |
| 325 | #define intc_writel(port,reg,value) writel((value), (port)->regs + INTC_##reg) | 325 | __raw_readl((port)->regs + INTC_##reg) |
| 326 | #define intc_writel(port,reg,value) \ | ||
| 327 | __raw_writel((value), (port)->regs + INTC_##reg) | ||
| 326 | 328 | ||
| 327 | #endif /* __ASM_AVR32_PERIHP_INTC_H__ */ | 329 | #endif /* __ASM_AVR32_PERIHP_INTC_H__ */ |
diff --git a/arch/avr32/mach-at32ap/pio.h b/arch/avr32/mach-at32ap/pio.h index cfea12351599..50fa3aca32c5 100644 --- a/arch/avr32/mach-at32ap/pio.h +++ b/arch/avr32/mach-at32ap/pio.h | |||
| @@ -170,8 +170,10 @@ | |||
| 170 | #define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value)) | 170 | #define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value)) |
| 171 | 171 | ||
| 172 | /* Register access macros */ | 172 | /* Register access macros */ |
| 173 | #define pio_readl(port,reg) readl((port)->regs + PIO_##reg) | 173 | #define pio_readl(port,reg) \ |
| 174 | #define pio_writel(port,reg,value) writel((value), (port)->regs + PIO_##reg) | 174 | __raw_readl((port)->regs + PIO_##reg) |
| 175 | #define pio_writel(port,reg,value) \ | ||
| 176 | __raw_writel((value), (port)->regs + PIO_##reg) | ||
| 175 | 177 | ||
| 176 | void at32_init_pio(struct platform_device *pdev); | 178 | void at32_init_pio(struct platform_device *pdev); |
| 177 | 179 | ||
diff --git a/arch/avr32/mach-at32ap/sm.h b/arch/avr32/mach-at32ap/sm.h index 27565822ae2a..cad02b512bcb 100644 --- a/arch/avr32/mach-at32ap/sm.h +++ b/arch/avr32/mach-at32ap/sm.h | |||
| @@ -234,7 +234,9 @@ | |||
| 234 | #define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value)) | 234 | #define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value)) |
| 235 | 235 | ||
| 236 | /* Register access macros */ | 236 | /* Register access macros */ |
| 237 | #define sm_readl(port,reg) readl((port)->regs + SM_##reg) | 237 | #define sm_readl(port,reg) \ |
| 238 | #define sm_writel(port,reg,value) writel((value), (port)->regs + SM_##reg) | 238 | __raw_readl((port)->regs + SM_##reg) |
| 239 | #define sm_writel(port,reg,value) \ | ||
| 240 | __raw_writel((value), (port)->regs + SM_##reg) | ||
| 239 | 241 | ||
| 240 | #endif /* __ASM_AVR32_SM_H__ */ | 242 | #endif /* __ASM_AVR32_SM_H__ */ |
diff --git a/arch/avr32/mm/init.c b/arch/avr32/mm/init.c index 3e6c41039808..70da6894acc1 100644 --- a/arch/avr32/mm/init.c +++ b/arch/avr32/mm/init.c | |||
| @@ -206,7 +206,7 @@ void __init setup_bootmem(void) | |||
| 206 | 206 | ||
| 207 | if (mem_ramdisk) { | 207 | if (mem_ramdisk) { |
| 208 | #ifdef CONFIG_BLK_DEV_INITRD | 208 | #ifdef CONFIG_BLK_DEV_INITRD |
| 209 | initrd_start = __va(mem_ramdisk->addr); | 209 | initrd_start = (unsigned long)__va(mem_ramdisk->addr); |
| 210 | initrd_end = initrd_start + mem_ramdisk->size; | 210 | initrd_end = initrd_start + mem_ramdisk->size; |
| 211 | 211 | ||
| 212 | print_memory_map("RAMDISK images", mem_ramdisk); | 212 | print_memory_map("RAMDISK images", mem_ramdisk); |
diff --git a/arch/avr32/mm/ioremap.c b/arch/avr32/mm/ioremap.c index 8cfec65e37f7..3437c82434ac 100644 --- a/arch/avr32/mm/ioremap.c +++ b/arch/avr32/mm/ioremap.c | |||
| @@ -77,6 +77,8 @@ void __iounmap(void __iomem *addr) | |||
| 77 | 77 | ||
| 78 | if ((unsigned long)addr >= P4SEG) | 78 | if ((unsigned long)addr >= P4SEG) |
| 79 | return; | 79 | return; |
| 80 | if (PXSEG(addr) == P2SEG) | ||
| 81 | return; | ||
| 80 | 82 | ||
| 81 | p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); | 83 | p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); |
| 82 | if (unlikely(!p)) { | 84 | if (unlikely(!p)) { |
diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S index f474534ba78a..9c1fb12367fa 100644 --- a/arch/frv/kernel/vmlinux.lds.S +++ b/arch/frv/kernel/vmlinux.lds.S | |||
| @@ -44,13 +44,7 @@ SECTIONS | |||
| 44 | 44 | ||
| 45 | __initcall_start = .; | 45 | __initcall_start = .; |
| 46 | .initcall.init : { | 46 | .initcall.init : { |
| 47 | *(.initcall1.init) | 47 | INITCALLS |
| 48 | *(.initcall2.init) | ||
| 49 | *(.initcall3.init) | ||
| 50 | *(.initcall4.init) | ||
| 51 | *(.initcall5.init) | ||
| 52 | *(.initcall6.init) | ||
| 53 | *(.initcall7.init) | ||
| 54 | } | 48 | } |
| 55 | __initcall_end = .; | 49 | __initcall_end = .; |
| 56 | __con_initcall_start = .; | 50 | __con_initcall_start = .; |
diff --git a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S index 6406c388f88a..756325dd480e 100644 --- a/arch/h8300/kernel/vmlinux.lds.S +++ b/arch/h8300/kernel/vmlinux.lds.S | |||
| @@ -118,13 +118,7 @@ SECTIONS | |||
| 118 | . = ALIGN(0x4) ; | 118 | . = ALIGN(0x4) ; |
| 119 | ___setup_end = .; | 119 | ___setup_end = .; |
| 120 | ___initcall_start = .; | 120 | ___initcall_start = .; |
| 121 | *(.initcall1.init) | 121 | INITCALLS |
| 122 | *(.initcall2.init) | ||
| 123 | *(.initcall3.init) | ||
| 124 | *(.initcall4.init) | ||
| 125 | *(.initcall5.init) | ||
| 126 | *(.initcall6.init) | ||
| 127 | *(.initcall7.init) | ||
| 128 | ___initcall_end = .; | 122 | ___initcall_end = .; |
| 129 | ___con_initcall_start = .; | 123 | ___con_initcall_start = .; |
| 130 | *(.con_initcall.init) | 124 | *(.con_initcall.init) |
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 519e63c3c130..141041dde74d 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
| @@ -846,7 +846,7 @@ efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) | |||
| 846 | static int __init | 846 | static int __init |
| 847 | efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) | 847 | efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) |
| 848 | { | 848 | { |
| 849 | memory_present(0, start, end); | 849 | memory_present(0, PFN_UP(start), PFN_DOWN(end)); |
| 850 | return 0; | 850 | return 0; |
| 851 | } | 851 | } |
| 852 | 852 | ||
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S index 1e7ac1c44ddc..adc1f232afee 100644 --- a/arch/i386/kernel/vmlinux.lds.S +++ b/arch/i386/kernel/vmlinux.lds.S | |||
| @@ -126,13 +126,7 @@ SECTIONS | |||
| 126 | __setup_end = .; | 126 | __setup_end = .; |
| 127 | __initcall_start = .; | 127 | __initcall_start = .; |
| 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { | 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { |
| 129 | *(.initcall1.init) | 129 | INITCALLS |
| 130 | *(.initcall2.init) | ||
| 131 | *(.initcall3.init) | ||
| 132 | *(.initcall4.init) | ||
| 133 | *(.initcall5.init) | ||
| 134 | *(.initcall6.init) | ||
| 135 | *(.initcall7.init) | ||
| 136 | } | 130 | } |
| 137 | __initcall_end = .; | 131 | __initcall_end = .; |
| 138 | __con_initcall_start = .; | 132 | __con_initcall_start = .; |
diff --git a/arch/i386/mach-visws/visws_apic.c b/arch/i386/mach-visws/visws_apic.c index 07097ed48890..38c2b13124d9 100644 --- a/arch/i386/mach-visws/visws_apic.c +++ b/arch/i386/mach-visws/visws_apic.c | |||
| @@ -122,7 +122,7 @@ static void end_cobalt_irq(unsigned int irq) | |||
| 122 | spin_unlock_irqrestore(&cobalt_lock, flags); | 122 | spin_unlock_irqrestore(&cobalt_lock, flags); |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | static struct hw_interrupt_type cobalt_irq_type = { | 125 | static struct irq_chip cobalt_irq_type = { |
| 126 | .typename = "Cobalt-APIC", | 126 | .typename = "Cobalt-APIC", |
| 127 | .startup = startup_cobalt_irq, | 127 | .startup = startup_cobalt_irq, |
| 128 | .shutdown = disable_cobalt_irq, | 128 | .shutdown = disable_cobalt_irq, |
| @@ -159,7 +159,7 @@ static void end_piix4_master_irq(unsigned int irq) | |||
| 159 | spin_unlock_irqrestore(&cobalt_lock, flags); | 159 | spin_unlock_irqrestore(&cobalt_lock, flags); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | static struct hw_interrupt_type piix4_master_irq_type = { | 162 | static struct irq_chip piix4_master_irq_type = { |
| 163 | .typename = "PIIX4-master", | 163 | .typename = "PIIX4-master", |
| 164 | .startup = startup_piix4_master_irq, | 164 | .startup = startup_piix4_master_irq, |
| 165 | .ack = ack_cobalt_irq, | 165 | .ack = ack_cobalt_irq, |
| @@ -167,9 +167,8 @@ static struct hw_interrupt_type piix4_master_irq_type = { | |||
| 167 | }; | 167 | }; |
| 168 | 168 | ||
| 169 | 169 | ||
| 170 | static struct hw_interrupt_type piix4_virtual_irq_type = { | 170 | static struct irq_chip piix4_virtual_irq_type = { |
| 171 | .typename = "PIIX4-virtual", | 171 | .typename = "PIIX4-virtual", |
| 172 | .startup = startup_8259A_irq, | ||
| 173 | .shutdown = disable_8259A_irq, | 172 | .shutdown = disable_8259A_irq, |
| 174 | .enable = enable_8259A_irq, | 173 | .enable = enable_8259A_irq, |
| 175 | .disable = disable_8259A_irq, | 174 | .disable = disable_8259A_irq, |
diff --git a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c index 908b410f4c93..c1949ff38d61 100644 --- a/arch/i386/pci/fixup.c +++ b/arch/i386/pci/fixup.c | |||
| @@ -343,6 +343,61 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC, pcie_ro | |||
| 343 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_rootport_aspm_quirk ); | 343 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_rootport_aspm_quirk ); |
| 344 | 344 | ||
| 345 | /* | 345 | /* |
| 346 | * Fixup to mark boot BIOS video selected by BIOS before it changes | ||
| 347 | * | ||
| 348 | * From information provided by "Jon Smirl" <jonsmirl@gmail.com> | ||
| 349 | * | ||
| 350 | * The standard boot ROM sequence for an x86 machine uses the BIOS | ||
| 351 | * to select an initial video card for boot display. This boot video | ||
| 352 | * card will have it's BIOS copied to C0000 in system RAM. | ||
| 353 | * IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
| 354 | * card with this copy. On laptops this copy has to be used since | ||
| 355 | * the main ROM may be compressed or combined with another image. | ||
| 356 | * See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
| 357 | * is marked here since the boot video device will be the only enabled | ||
| 358 | * video device at this point. | ||
| 359 | */ | ||
| 360 | |||
| 361 | static void __devinit pci_fixup_video(struct pci_dev *pdev) | ||
| 362 | { | ||
| 363 | struct pci_dev *bridge; | ||
| 364 | struct pci_bus *bus; | ||
| 365 | u16 config; | ||
| 366 | |||
| 367 | if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
| 368 | return; | ||
| 369 | |||
| 370 | /* Is VGA routed to us? */ | ||
| 371 | bus = pdev->bus; | ||
| 372 | while (bus) { | ||
| 373 | bridge = bus->self; | ||
| 374 | |||
| 375 | /* | ||
| 376 | * From information provided by | ||
| 377 | * "David Miller" <davem@davemloft.net> | ||
| 378 | * The bridge control register is valid for PCI header | ||
| 379 | * type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
| 380 | * PCI header type NORMAL. | ||
| 381 | */ | ||
| 382 | if (bridge | ||
| 383 | &&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
| 384 | ||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
| 385 | pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
| 386 | &config); | ||
| 387 | if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
| 388 | return; | ||
| 389 | } | ||
| 390 | bus = bus->parent; | ||
| 391 | } | ||
| 392 | pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
| 393 | if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
| 394 | pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
| 395 | printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
| 396 | } | ||
| 397 | } | ||
| 398 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); | ||
| 399 | |||
| 400 | /* | ||
| 346 | * Some Toshiba laptops need extra code to enable their TI TSB43AB22/A. | 401 | * Some Toshiba laptops need extra code to enable their TI TSB43AB22/A. |
| 347 | * | 402 | * |
| 348 | * We pretend to bring them out of full D3 state, and restore the proper | 403 | * We pretend to bring them out of full D3 state, and restore the proper |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index b3b2e389d6b2..d6083a0936f4 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -128,13 +128,7 @@ SECTIONS | |||
| 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) | 128 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) |
| 129 | { | 129 | { |
| 130 | __initcall_start = .; | 130 | __initcall_start = .; |
| 131 | *(.initcall1.init) | 131 | INITCALLS |
| 132 | *(.initcall2.init) | ||
| 133 | *(.initcall3.init) | ||
| 134 | *(.initcall4.init) | ||
| 135 | *(.initcall5.init) | ||
| 136 | *(.initcall6.init) | ||
| 137 | *(.initcall7.init) | ||
| 138 | __initcall_end = .; | 132 | __initcall_end = .; |
| 139 | } | 133 | } |
| 140 | 134 | ||
diff --git a/arch/ia64/pci/Makefile b/arch/ia64/pci/Makefile index e66889e6922a..fb14dc520d2d 100644 --- a/arch/ia64/pci/Makefile +++ b/arch/ia64/pci/Makefile | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # | 1 | # |
| 2 | # Makefile for the ia64-specific parts of the pci bus | 2 | # Makefile for the ia64-specific parts of the pci bus |
| 3 | # | 3 | # |
| 4 | obj-y := pci.o | 4 | obj-y := pci.o fixup.o |
diff --git a/arch/ia64/pci/fixup.c b/arch/ia64/pci/fixup.c new file mode 100644 index 000000000000..245dc1fedc24 --- /dev/null +++ b/arch/ia64/pci/fixup.c | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | /* | ||
| 2 | * Exceptions for specific devices. Usually work-arounds for fatal design flaws. | ||
| 3 | * Derived from fixup.c of i386 tree. | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <linux/pci.h> | ||
| 7 | #include <linux/init.h> | ||
| 8 | |||
| 9 | #include <asm/machvec.h> | ||
| 10 | |||
| 11 | /* | ||
| 12 | * Fixup to mark boot BIOS video selected by BIOS before it changes | ||
| 13 | * | ||
| 14 | * From information provided by "Jon Smirl" <jonsmirl@gmail.com> | ||
| 15 | * | ||
| 16 | * The standard boot ROM sequence for an x86 machine uses the BIOS | ||
| 17 | * to select an initial video card for boot display. This boot video | ||
| 18 | * card will have it's BIOS copied to C0000 in system RAM. | ||
| 19 | * IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
| 20 | * card with this copy. On laptops this copy has to be used since | ||
| 21 | * the main ROM may be compressed or combined with another image. | ||
| 22 | * See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
| 23 | * is marked here since the boot video device will be the only enabled | ||
| 24 | * video device at this point. | ||
| 25 | */ | ||
| 26 | |||
| 27 | static void __devinit pci_fixup_video(struct pci_dev *pdev) | ||
| 28 | { | ||
| 29 | struct pci_dev *bridge; | ||
| 30 | struct pci_bus *bus; | ||
| 31 | u16 config; | ||
| 32 | |||
| 33 | if ((strcmp(platform_name, "dig") != 0) | ||
| 34 | && (strcmp(platform_name, "hpzx1") != 0)) | ||
| 35 | return; | ||
| 36 | /* Maybe, this machine supports legacy memory map. */ | ||
| 37 | |||
| 38 | if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
| 39 | return; | ||
| 40 | |||
| 41 | /* Is VGA routed to us? */ | ||
| 42 | bus = pdev->bus; | ||
| 43 | while (bus) { | ||
| 44 | bridge = bus->self; | ||
| 45 | |||
| 46 | /* | ||
| 47 | * From information provided by | ||
| 48 | * "David Miller" <davem@davemloft.net> | ||
| 49 | * The bridge control register is valid for PCI header | ||
| 50 | * type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
| 51 | * PCI header type NORMAL. | ||
| 52 | */ | ||
| 53 | if (bridge | ||
| 54 | &&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
| 55 | ||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
| 56 | pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
| 57 | &config); | ||
| 58 | if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
| 59 | return; | ||
| 60 | } | ||
| 61 | bus = bus->parent; | ||
| 62 | } | ||
| 63 | pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
| 64 | if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
| 65 | pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
| 66 | printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
| 67 | } | ||
| 68 | } | ||
| 69 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); | ||
diff --git a/arch/m32r/kernel/vmlinux.lds.S b/arch/m32r/kernel/vmlinux.lds.S index 13c7bb698e37..358b9cee2c65 100644 --- a/arch/m32r/kernel/vmlinux.lds.S +++ b/arch/m32r/kernel/vmlinux.lds.S | |||
| @@ -83,13 +83,7 @@ SECTIONS | |||
| 83 | __setup_end = .; | 83 | __setup_end = .; |
| 84 | __initcall_start = .; | 84 | __initcall_start = .; |
| 85 | .initcall.init : { | 85 | .initcall.init : { |
| 86 | *(.initcall1.init) | 86 | INITCALLS |
| 87 | *(.initcall2.init) | ||
| 88 | *(.initcall3.init) | ||
| 89 | *(.initcall4.init) | ||
| 90 | *(.initcall5.init) | ||
| 91 | *(.initcall6.init) | ||
| 92 | *(.initcall7.init) | ||
| 93 | } | 87 | } |
| 94 | __initcall_end = .; | 88 | __initcall_end = .; |
| 95 | __con_initcall_start = .; | 89 | __con_initcall_start = .; |
diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds index 69d1d3d30c78..d2794452b195 100644 --- a/arch/m68k/kernel/vmlinux-std.lds +++ b/arch/m68k/kernel/vmlinux-std.lds | |||
| @@ -54,13 +54,7 @@ SECTIONS | |||
| 54 | __setup_end = .; | 54 | __setup_end = .; |
| 55 | __initcall_start = .; | 55 | __initcall_start = .; |
| 56 | .initcall.init : { | 56 | .initcall.init : { |
| 57 | *(.initcall1.init) | 57 | INITCALLS |
| 58 | *(.initcall2.init) | ||
| 59 | *(.initcall3.init) | ||
| 60 | *(.initcall4.init) | ||
| 61 | *(.initcall5.init) | ||
| 62 | *(.initcall6.init) | ||
| 63 | *(.initcall7.init) | ||
| 64 | } | 58 | } |
| 65 | __initcall_end = .; | 59 | __initcall_end = .; |
| 66 | __con_initcall_start = .; | 60 | __con_initcall_start = .; |
diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds index 65cc39c24185..2550b4ae2732 100644 --- a/arch/m68k/kernel/vmlinux-sun3.lds +++ b/arch/m68k/kernel/vmlinux-sun3.lds | |||
| @@ -48,13 +48,7 @@ __init_begin = .; | |||
| 48 | __setup_end = .; | 48 | __setup_end = .; |
| 49 | __initcall_start = .; | 49 | __initcall_start = .; |
| 50 | .initcall.init : { | 50 | .initcall.init : { |
| 51 | *(.initcall1.init) | 51 | INITCALLS |
| 52 | *(.initcall2.init) | ||
| 53 | *(.initcall3.init) | ||
| 54 | *(.initcall4.init) | ||
| 55 | *(.initcall5.init) | ||
| 56 | *(.initcall6.init) | ||
| 57 | *(.initcall7.init) | ||
| 58 | } | 52 | } |
| 59 | __initcall_end = .; | 53 | __initcall_end = .; |
| 60 | __con_initcall_start = .; | 54 | __con_initcall_start = .; |
diff --git a/arch/m68knommu/kernel/vmlinux.lds.S b/arch/m68knommu/kernel/vmlinux.lds.S index ccd2ceb05cfb..58afa8be604e 100644 --- a/arch/m68knommu/kernel/vmlinux.lds.S +++ b/arch/m68knommu/kernel/vmlinux.lds.S | |||
| @@ -140,13 +140,7 @@ SECTIONS { | |||
| 140 | *(.init.setup) | 140 | *(.init.setup) |
| 141 | __setup_end = .; | 141 | __setup_end = .; |
| 142 | __initcall_start = .; | 142 | __initcall_start = .; |
| 143 | *(.initcall1.init) | 143 | INITCALLS |
| 144 | *(.initcall2.init) | ||
| 145 | *(.initcall3.init) | ||
| 146 | *(.initcall4.init) | ||
| 147 | *(.initcall5.init) | ||
| 148 | *(.initcall6.init) | ||
| 149 | *(.initcall7.init) | ||
| 150 | __initcall_end = .; | 144 | __initcall_end = .; |
| 151 | __con_initcall_start = .; | 145 | __con_initcall_start = .; |
| 152 | *(.con_initcall.init) | 146 | *(.con_initcall.init) |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 0bb9cd889456..25ed3337ce35 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
| @@ -91,13 +91,7 @@ SECTIONS | |||
| 91 | 91 | ||
| 92 | __initcall_start = .; | 92 | __initcall_start = .; |
| 93 | .initcall.init : { | 93 | .initcall.init : { |
| 94 | *(.initcall1.init) | 94 | INITCALLS |
| 95 | *(.initcall2.init) | ||
| 96 | *(.initcall3.init) | ||
| 97 | *(.initcall4.init) | ||
| 98 | *(.initcall5.init) | ||
| 99 | *(.initcall6.init) | ||
| 100 | *(.initcall7.init) | ||
| 101 | } | 95 | } |
| 102 | __initcall_end = .; | 96 | __initcall_end = .; |
| 103 | 97 | ||
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S index b3677fc8eef5..7b943b45f7cd 100644 --- a/arch/parisc/kernel/vmlinux.lds.S +++ b/arch/parisc/kernel/vmlinux.lds.S | |||
| @@ -153,13 +153,7 @@ SECTIONS | |||
| 153 | __setup_end = .; | 153 | __setup_end = .; |
| 154 | __initcall_start = .; | 154 | __initcall_start = .; |
| 155 | .initcall.init : { | 155 | .initcall.init : { |
| 156 | *(.initcall1.init) | 156 | INITCALLS |
| 157 | *(.initcall2.init) | ||
| 158 | *(.initcall3.init) | ||
| 159 | *(.initcall4.init) | ||
| 160 | *(.initcall5.init) | ||
| 161 | *(.initcall6.init) | ||
| 162 | *(.initcall7.init) | ||
| 163 | } | 157 | } |
| 164 | __initcall_end = .; | 158 | __initcall_end = .; |
| 165 | __con_initcall_start = .; | 159 | __con_initcall_start = .; |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 37ddfcab0003..4b2be611f77f 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
| @@ -115,7 +115,7 @@ endif | |||
| 115 | quiet_cmd_wrap = WRAP $@ | 115 | quiet_cmd_wrap = WRAP $@ |
| 116 | cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux | 116 | cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux |
| 117 | quiet_cmd_wrap_initrd = WRAP $@ | 117 | quiet_cmd_wrap_initrd = WRAP $@ |
| 118 | cmd_wrap_initrd =$(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \ | 118 | cmd_wrap_initrd =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \ |
| 119 | -i $(obj)/ramdisk.image.gz vmlinux | 119 | -i $(obj)/ramdisk.image.gz vmlinux |
| 120 | 120 | ||
| 121 | $(obj)/zImage.chrp: vmlinux $(wrapperbits) | 121 | $(obj)/zImage.chrp: vmlinux $(wrapperbits) |
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig index 892d5dd3254e..0aba06d7d2ec 100644 --- a/arch/powerpc/configs/cell_defconfig +++ b/arch/powerpc/configs/cell_defconfig | |||
| @@ -254,6 +254,7 @@ CONFIG_SYN_COOKIES=y | |||
| 254 | CONFIG_INET_TUNNEL=y | 254 | CONFIG_INET_TUNNEL=y |
| 255 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 255 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
| 256 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 256 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
| 257 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 257 | CONFIG_INET_DIAG=y | 258 | CONFIG_INET_DIAG=y |
| 258 | CONFIG_INET_TCP_DIAG=y | 259 | CONFIG_INET_TCP_DIAG=y |
| 259 | # CONFIG_TCP_CONG_ADVANCED is not set | 260 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -275,7 +276,9 @@ CONFIG_INET6_XFRM_TUNNEL=m | |||
| 275 | CONFIG_INET6_TUNNEL=m | 276 | CONFIG_INET6_TUNNEL=m |
| 276 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | 277 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y |
| 277 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | 278 | CONFIG_INET6_XFRM_MODE_TUNNEL=y |
| 279 | # CONFIG_INET6_XFRM_MODE_BEET is not set | ||
| 278 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 280 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 281 | # CONFIG_IPV6_SIT is not set | ||
| 279 | CONFIG_IPV6_TUNNEL=m | 282 | CONFIG_IPV6_TUNNEL=m |
| 280 | # CONFIG_IPV6_SUBTREES is not set | 283 | # CONFIG_IPV6_SUBTREES is not set |
| 281 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 284 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| @@ -406,6 +409,12 @@ CONFIG_BLK_DEV_INITRD=y | |||
| 406 | # CONFIG_ATA_OVER_ETH is not set | 409 | # CONFIG_ATA_OVER_ETH is not set |
| 407 | 410 | ||
| 408 | # | 411 | # |
| 412 | # Misc devices | ||
| 413 | # | ||
| 414 | # CONFIG_SGI_IOC4 is not set | ||
| 415 | # CONFIG_TIFM_CORE is not set | ||
| 416 | |||
| 417 | # | ||
| 409 | # ATA/ATAPI/MFM/RLL support | 418 | # ATA/ATAPI/MFM/RLL support |
| 410 | # | 419 | # |
| 411 | CONFIG_IDE=y | 420 | CONFIG_IDE=y |
| @@ -738,7 +747,6 @@ CONFIG_GEN_RTC=y | |||
| 738 | # TPM devices | 747 | # TPM devices |
| 739 | # | 748 | # |
| 740 | # CONFIG_TCG_TPM is not set | 749 | # CONFIG_TCG_TPM is not set |
| 741 | # CONFIG_TELCLOCK is not set | ||
| 742 | 750 | ||
| 743 | # | 751 | # |
| 744 | # I2C support | 752 | # I2C support |
| @@ -802,6 +810,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 802 | # | 810 | # |
| 803 | # Dallas's 1-wire bus | 811 | # Dallas's 1-wire bus |
| 804 | # | 812 | # |
| 813 | # CONFIG_W1 is not set | ||
| 805 | 814 | ||
| 806 | # | 815 | # |
| 807 | # Hardware Monitoring support | 816 | # Hardware Monitoring support |
| @@ -810,14 +819,9 @@ CONFIG_I2C_ALGOBIT=y | |||
| 810 | # CONFIG_HWMON_VID is not set | 819 | # CONFIG_HWMON_VID is not set |
| 811 | 820 | ||
| 812 | # | 821 | # |
| 813 | # Misc devices | ||
| 814 | # | ||
| 815 | |||
| 816 | # | ||
| 817 | # Multimedia devices | 822 | # Multimedia devices |
| 818 | # | 823 | # |
| 819 | # CONFIG_VIDEO_DEV is not set | 824 | # CONFIG_VIDEO_DEV is not set |
| 820 | CONFIG_VIDEO_V4L2=y | ||
| 821 | 825 | ||
| 822 | # | 826 | # |
| 823 | # Digital Video Broadcasting Devices | 827 | # Digital Video Broadcasting Devices |
| @@ -923,6 +927,7 @@ CONFIG_EXT3_FS=y | |||
| 923 | CONFIG_EXT3_FS_XATTR=y | 927 | CONFIG_EXT3_FS_XATTR=y |
| 924 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 928 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
| 925 | # CONFIG_EXT3_FS_SECURITY is not set | 929 | # CONFIG_EXT3_FS_SECURITY is not set |
| 930 | # CONFIG_EXT4DEV_FS is not set | ||
| 926 | CONFIG_JBD=y | 931 | CONFIG_JBD=y |
| 927 | # CONFIG_JBD_DEBUG is not set | 932 | # CONFIG_JBD_DEBUG is not set |
| 928 | CONFIG_FS_MBCACHE=y | 933 | CONFIG_FS_MBCACHE=y |
| @@ -930,6 +935,7 @@ CONFIG_FS_MBCACHE=y | |||
| 930 | # CONFIG_JFS_FS is not set | 935 | # CONFIG_JFS_FS is not set |
| 931 | CONFIG_FS_POSIX_ACL=y | 936 | CONFIG_FS_POSIX_ACL=y |
| 932 | # CONFIG_XFS_FS is not set | 937 | # CONFIG_XFS_FS is not set |
| 938 | # CONFIG_GFS2_FS is not set | ||
| 933 | # CONFIG_OCFS2_FS is not set | 939 | # CONFIG_OCFS2_FS is not set |
| 934 | # CONFIG_MINIX_FS is not set | 940 | # CONFIG_MINIX_FS is not set |
| 935 | # CONFIG_ROMFS_FS is not set | 941 | # CONFIG_ROMFS_FS is not set |
| @@ -1129,6 +1135,7 @@ CONFIG_DEBUG_FS=y | |||
| 1129 | # CONFIG_DEBUG_VM is not set | 1135 | # CONFIG_DEBUG_VM is not set |
| 1130 | # CONFIG_DEBUG_LIST is not set | 1136 | # CONFIG_DEBUG_LIST is not set |
| 1131 | # CONFIG_FORCED_INLINING is not set | 1137 | # CONFIG_FORCED_INLINING is not set |
| 1138 | # CONFIG_HEADERS_CHECK is not set | ||
| 1132 | # CONFIG_RCU_TORTURE_TEST is not set | 1139 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1133 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1140 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
| 1134 | # CONFIG_DEBUG_STACK_USAGE is not set | 1141 | # CONFIG_DEBUG_STACK_USAGE is not set |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 95382f994404..bfd499ee3753 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <asm/oprofile_impl.h> | 19 | #include <asm/oprofile_impl.h> |
| 20 | #include <asm/cputable.h> | 20 | #include <asm/cputable.h> |
| 21 | #include <asm/prom.h> /* for PTRRELOC on ARCH=ppc */ | ||
| 21 | 22 | ||
| 22 | struct cpu_spec* cur_cpu_spec = NULL; | 23 | struct cpu_spec* cur_cpu_spec = NULL; |
| 23 | EXPORT_SYMBOL(cur_cpu_spec); | 24 | EXPORT_SYMBOL(cur_cpu_spec); |
| @@ -73,7 +74,7 @@ extern void __restore_cpu_ppc970(void); | |||
| 73 | #define PPC_FEATURE_SPE_COMP 0 | 74 | #define PPC_FEATURE_SPE_COMP 0 |
| 74 | #endif | 75 | #endif |
| 75 | 76 | ||
| 76 | struct cpu_spec cpu_specs[] = { | 77 | static struct cpu_spec cpu_specs[] = { |
| 77 | #ifdef CONFIG_PPC64 | 78 | #ifdef CONFIG_PPC64 |
| 78 | { /* Power3 */ | 79 | { /* Power3 */ |
| 79 | .pvr_mask = 0xffff0000, | 80 | .pvr_mask = 0xffff0000, |
| @@ -227,6 +228,21 @@ struct cpu_spec cpu_specs[] = { | |||
| 227 | .oprofile_type = PPC_OPROFILE_POWER4, | 228 | .oprofile_type = PPC_OPROFILE_POWER4, |
| 228 | .platform = "ppc970", | 229 | .platform = "ppc970", |
| 229 | }, | 230 | }, |
| 231 | { /* PPC970GX */ | ||
| 232 | .pvr_mask = 0xffff0000, | ||
| 233 | .pvr_value = 0x00450000, | ||
| 234 | .cpu_name = "PPC970GX", | ||
| 235 | .cpu_features = CPU_FTRS_PPC970, | ||
| 236 | .cpu_user_features = COMMON_USER_POWER4 | | ||
| 237 | PPC_FEATURE_HAS_ALTIVEC_COMP, | ||
| 238 | .icache_bsize = 128, | ||
| 239 | .dcache_bsize = 128, | ||
| 240 | .num_pmcs = 8, | ||
| 241 | .cpu_setup = __setup_cpu_ppc970, | ||
| 242 | .oprofile_cpu_type = "ppc64/970", | ||
| 243 | .oprofile_type = PPC_OPROFILE_POWER4, | ||
| 244 | .platform = "ppc970", | ||
| 245 | }, | ||
| 230 | { /* Power5 GR */ | 246 | { /* Power5 GR */ |
| 231 | .pvr_mask = 0xffff0000, | 247 | .pvr_mask = 0xffff0000, |
| 232 | .pvr_value = 0x003a0000, | 248 | .pvr_value = 0x003a0000, |
| @@ -1152,3 +1168,71 @@ struct cpu_spec cpu_specs[] = { | |||
| 1152 | #endif /* !CLASSIC_PPC */ | 1168 | #endif /* !CLASSIC_PPC */ |
| 1153 | #endif /* CONFIG_PPC32 */ | 1169 | #endif /* CONFIG_PPC32 */ |
| 1154 | }; | 1170 | }; |
| 1171 | |||
| 1172 | struct cpu_spec *identify_cpu(unsigned long offset) | ||
| 1173 | { | ||
| 1174 | struct cpu_spec *s = cpu_specs; | ||
| 1175 | struct cpu_spec **cur = &cur_cpu_spec; | ||
| 1176 | unsigned int pvr = mfspr(SPRN_PVR); | ||
| 1177 | int i; | ||
| 1178 | |||
| 1179 | s = PTRRELOC(s); | ||
| 1180 | cur = PTRRELOC(cur); | ||
| 1181 | |||
| 1182 | if (*cur != NULL) | ||
| 1183 | return PTRRELOC(*cur); | ||
| 1184 | |||
| 1185 | for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) | ||
| 1186 | if ((pvr & s->pvr_mask) == s->pvr_value) { | ||
| 1187 | *cur = cpu_specs + i; | ||
| 1188 | #ifdef CONFIG_PPC64 | ||
| 1189 | /* ppc64 expects identify_cpu to also call setup_cpu | ||
| 1190 | * for that processor. I will consolidate that at a | ||
| 1191 | * later time, for now, just use our friend #ifdef. | ||
| 1192 | * we also don't need to PTRRELOC the function pointer | ||
| 1193 | * on ppc64 as we are running at 0 in real mode. | ||
| 1194 | */ | ||
| 1195 | if (s->cpu_setup) { | ||
| 1196 | s->cpu_setup(offset, s); | ||
| 1197 | } | ||
| 1198 | #endif /* CONFIG_PPC64 */ | ||
| 1199 | return s; | ||
| 1200 | } | ||
| 1201 | BUG(); | ||
| 1202 | return NULL; | ||
| 1203 | } | ||
| 1204 | |||
| 1205 | void do_feature_fixups(unsigned long value, void *fixup_start, void *fixup_end) | ||
| 1206 | { | ||
| 1207 | struct fixup_entry { | ||
| 1208 | unsigned long mask; | ||
| 1209 | unsigned long value; | ||
| 1210 | long start_off; | ||
| 1211 | long end_off; | ||
| 1212 | } *fcur, *fend; | ||
| 1213 | |||
| 1214 | fcur = fixup_start; | ||
| 1215 | fend = fixup_end; | ||
| 1216 | |||
| 1217 | for (; fcur < fend; fcur++) { | ||
| 1218 | unsigned int *pstart, *pend, *p; | ||
| 1219 | |||
| 1220 | if ((value & fcur->mask) == fcur->value) | ||
| 1221 | continue; | ||
| 1222 | |||
| 1223 | /* These PTRRELOCs will disappear once the new scheme for | ||
| 1224 | * modules and vdso is implemented | ||
| 1225 | */ | ||
| 1226 | pstart = ((unsigned int *)fcur) + (fcur->start_off / 4); | ||
| 1227 | pend = ((unsigned int *)fcur) + (fcur->end_off / 4); | ||
| 1228 | |||
| 1229 | for (p = pstart; p < pend; p++) { | ||
| 1230 | *p = 0x60000000u; | ||
| 1231 | asm volatile ("dcbst 0, %0" : : "r" (p)); | ||
| 1232 | } | ||
| 1233 | asm volatile ("sync" : : : "memory"); | ||
| 1234 | for (p = pstart; p < pend; p++) | ||
| 1235 | asm volatile ("icbi 0,%0" : : "r" (p)); | ||
| 1236 | asm volatile ("sync; isync" : : : "memory"); | ||
| 1237 | } | ||
| 1238 | } | ||
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 645c7f10fb28..291e3629b504 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
| @@ -1580,11 +1580,6 @@ _STATIC(__start_initialization_iSeries) | |||
| 1580 | li r0,0 | 1580 | li r0,0 |
| 1581 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1581 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
| 1582 | 1582 | ||
| 1583 | LOAD_REG_IMMEDIATE(r3,cpu_specs) | ||
| 1584 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) | ||
| 1585 | li r5,0 | ||
| 1586 | bl .identify_cpu | ||
| 1587 | |||
| 1588 | LOAD_REG_IMMEDIATE(r2,__toc_start) | 1583 | LOAD_REG_IMMEDIATE(r2,__toc_start) |
| 1589 | addi r2,r2,0x4000 | 1584 | addi r2,r2,0x4000 |
| 1590 | addi r2,r2,0x4000 | 1585 | addi r2,r2,0x4000 |
| @@ -1646,6 +1641,8 @@ _GLOBAL(__start_initialization_multiplatform) | |||
| 1646 | cmpwi r0,0x3c /* 970FX */ | 1641 | cmpwi r0,0x3c /* 970FX */ |
| 1647 | beq 1f | 1642 | beq 1f |
| 1648 | cmpwi r0,0x44 /* 970MP */ | 1643 | cmpwi r0,0x44 /* 970MP */ |
| 1644 | beq 1f | ||
| 1645 | cmpwi r0,0x45 /* 970GX */ | ||
| 1649 | bne 2f | 1646 | bne 2f |
| 1650 | 1: bl .__cpu_preinit_ppc970 | 1647 | 1: bl .__cpu_preinit_ppc970 |
| 1651 | 2: | 1648 | 2: |
| @@ -1964,13 +1961,6 @@ _STATIC(start_here_multiplatform) | |||
| 1964 | addi r2,r2,0x4000 | 1961 | addi r2,r2,0x4000 |
| 1965 | add r2,r2,r26 | 1962 | add r2,r2,r26 |
| 1966 | 1963 | ||
| 1967 | LOAD_REG_IMMEDIATE(r3, cpu_specs) | ||
| 1968 | add r3,r3,r26 | ||
| 1969 | LOAD_REG_IMMEDIATE(r4,cur_cpu_spec) | ||
| 1970 | add r4,r4,r26 | ||
| 1971 | mr r5,r26 | ||
| 1972 | bl .identify_cpu | ||
| 1973 | |||
| 1974 | /* Do very early kernel initializations, including initial hash table, | 1964 | /* Do very early kernel initializations, including initial hash table, |
| 1975 | * stab and slb setup before we turn on relocation. */ | 1965 | * stab and slb setup before we turn on relocation. */ |
| 1976 | 1966 | ||
| @@ -2000,13 +1990,6 @@ _STATIC(start_here_common) | |||
| 2000 | li r0,0 | 1990 | li r0,0 |
| 2001 | stdu r0,-STACK_FRAME_OVERHEAD(r1) | 1991 | stdu r0,-STACK_FRAME_OVERHEAD(r1) |
| 2002 | 1992 | ||
| 2003 | /* Apply the CPUs-specific fixups (nop out sections not relevant | ||
| 2004 | * to this CPU | ||
| 2005 | */ | ||
| 2006 | li r3,0 | ||
| 2007 | bl .do_cpu_ftr_fixups | ||
| 2008 | bl .do_fw_ftr_fixups | ||
| 2009 | |||
| 2010 | /* ptr to current */ | 1993 | /* ptr to current */ |
| 2011 | LOAD_REG_IMMEDIATE(r4, init_task) | 1994 | LOAD_REG_IMMEDIATE(r4, init_task) |
| 2012 | std r4,PACACURRENT(r13) | 1995 | std r4,PACACURRENT(r13) |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 88fd73fdf048..412bea3cf813 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -102,80 +102,6 @@ _GLOBAL(reloc_got2) | |||
| 102 | blr | 102 | blr |
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| 105 | * identify_cpu, | ||
| 106 | * called with r3 = data offset and r4 = CPU number | ||
| 107 | * doesn't change r3 | ||
| 108 | */ | ||
| 109 | _GLOBAL(identify_cpu) | ||
| 110 | addis r8,r3,cpu_specs@ha | ||
| 111 | addi r8,r8,cpu_specs@l | ||
| 112 | mfpvr r7 | ||
| 113 | 1: | ||
| 114 | lwz r5,CPU_SPEC_PVR_MASK(r8) | ||
| 115 | and r5,r5,r7 | ||
| 116 | lwz r6,CPU_SPEC_PVR_VALUE(r8) | ||
| 117 | cmplw 0,r6,r5 | ||
| 118 | beq 1f | ||
| 119 | addi r8,r8,CPU_SPEC_ENTRY_SIZE | ||
| 120 | b 1b | ||
| 121 | 1: | ||
| 122 | addis r6,r3,cur_cpu_spec@ha | ||
| 123 | addi r6,r6,cur_cpu_spec@l | ||
| 124 | sub r8,r8,r3 | ||
| 125 | stw r8,0(r6) | ||
| 126 | blr | ||
| 127 | |||
| 128 | /* | ||
| 129 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 130 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 131 | * r3 = data offset (not changed) | ||
| 132 | */ | ||
| 133 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 134 | /* Get CPU 0 features */ | ||
| 135 | addis r6,r3,cur_cpu_spec@ha | ||
| 136 | addi r6,r6,cur_cpu_spec@l | ||
| 137 | lwz r4,0(r6) | ||
| 138 | add r4,r4,r3 | ||
| 139 | lwz r4,CPU_SPEC_FEATURES(r4) | ||
| 140 | |||
| 141 | /* Get the fixup table */ | ||
| 142 | addis r6,r3,__start___ftr_fixup@ha | ||
| 143 | addi r6,r6,__start___ftr_fixup@l | ||
| 144 | addis r7,r3,__stop___ftr_fixup@ha | ||
| 145 | addi r7,r7,__stop___ftr_fixup@l | ||
| 146 | |||
| 147 | /* Do the fixup */ | ||
| 148 | 1: cmplw 0,r6,r7 | ||
| 149 | bgelr | ||
| 150 | addi r6,r6,16 | ||
| 151 | lwz r8,-16(r6) /* mask */ | ||
| 152 | and r8,r8,r4 | ||
| 153 | lwz r9,-12(r6) /* value */ | ||
| 154 | cmplw 0,r8,r9 | ||
| 155 | beq 1b | ||
| 156 | lwz r8,-8(r6) /* section begin */ | ||
| 157 | lwz r9,-4(r6) /* section end */ | ||
| 158 | subf. r9,r8,r9 | ||
| 159 | beq 1b | ||
| 160 | /* write nops over the section of code */ | ||
| 161 | /* todo: if large section, add a branch at the start of it */ | ||
| 162 | srwi r9,r9,2 | ||
| 163 | mtctr r9 | ||
| 164 | add r8,r8,r3 | ||
| 165 | lis r0,0x60000000@h /* nop */ | ||
| 166 | 3: stw r0,0(r8) | ||
| 167 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 168 | beq 2f | ||
| 169 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 170 | sync | ||
| 171 | icbi 0,r8 | ||
| 172 | 2: addi r8,r8,4 | ||
| 173 | bdnz 3b | ||
| 174 | sync /* additional sync needed on g4 */ | ||
| 175 | isync | ||
| 176 | b 1b | ||
| 177 | |||
| 178 | /* | ||
| 179 | * call_setup_cpu - call the setup_cpu function for this cpu | 105 | * call_setup_cpu - call the setup_cpu function for this cpu |
| 180 | * r3 = data offset, r24 = cpu number | 106 | * r3 = data offset, r24 = cpu number |
| 181 | * | 107 | * |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index c70e20708a1f..21fd2c662a99 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
| @@ -246,130 +246,6 @@ _GLOBAL(__flush_dcache_icache) | |||
| 246 | isync | 246 | isync |
| 247 | blr | 247 | blr |
| 248 | 248 | ||
| 249 | /* | ||
| 250 | * identify_cpu and calls setup_cpu | ||
| 251 | * In: r3 = base of the cpu_specs array | ||
| 252 | * r4 = address of cur_cpu_spec | ||
| 253 | * r5 = relocation offset | ||
| 254 | */ | ||
| 255 | _GLOBAL(identify_cpu) | ||
| 256 | mfpvr r7 | ||
| 257 | 1: | ||
| 258 | lwz r8,CPU_SPEC_PVR_MASK(r3) | ||
| 259 | and r8,r8,r7 | ||
| 260 | lwz r9,CPU_SPEC_PVR_VALUE(r3) | ||
| 261 | cmplw 0,r9,r8 | ||
| 262 | beq 1f | ||
| 263 | addi r3,r3,CPU_SPEC_ENTRY_SIZE | ||
| 264 | b 1b | ||
| 265 | 1: | ||
| 266 | sub r0,r3,r5 | ||
| 267 | std r0,0(r4) | ||
| 268 | ld r4,CPU_SPEC_SETUP(r3) | ||
| 269 | cmpdi 0,r4,0 | ||
| 270 | add r4,r4,r5 | ||
| 271 | beqlr | ||
| 272 | ld r4,0(r4) | ||
| 273 | add r4,r4,r5 | ||
| 274 | mtctr r4 | ||
| 275 | /* Calling convention for cpu setup is r3=offset, r4=cur_cpu_spec */ | ||
| 276 | mr r4,r3 | ||
| 277 | mr r3,r5 | ||
| 278 | bctr | ||
| 279 | |||
| 280 | /* | ||
| 281 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 282 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 283 | * r3 = data offset (not changed) | ||
| 284 | */ | ||
| 285 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 286 | /* Get CPU 0 features */ | ||
| 287 | LOAD_REG_IMMEDIATE(r6,cur_cpu_spec) | ||
| 288 | sub r6,r6,r3 | ||
| 289 | ld r4,0(r6) | ||
| 290 | sub r4,r4,r3 | ||
| 291 | ld r4,CPU_SPEC_FEATURES(r4) | ||
| 292 | /* Get the fixup table */ | ||
| 293 | LOAD_REG_IMMEDIATE(r6,__start___ftr_fixup) | ||
| 294 | sub r6,r6,r3 | ||
| 295 | LOAD_REG_IMMEDIATE(r7,__stop___ftr_fixup) | ||
| 296 | sub r7,r7,r3 | ||
| 297 | /* Do the fixup */ | ||
| 298 | 1: cmpld r6,r7 | ||
| 299 | bgelr | ||
| 300 | addi r6,r6,32 | ||
| 301 | ld r8,-32(r6) /* mask */ | ||
| 302 | and r8,r8,r4 | ||
| 303 | ld r9,-24(r6) /* value */ | ||
| 304 | cmpld r8,r9 | ||
| 305 | beq 1b | ||
| 306 | ld r8,-16(r6) /* section begin */ | ||
| 307 | ld r9,-8(r6) /* section end */ | ||
| 308 | subf. r9,r8,r9 | ||
| 309 | beq 1b | ||
| 310 | /* write nops over the section of code */ | ||
| 311 | /* todo: if large section, add a branch at the start of it */ | ||
| 312 | srwi r9,r9,2 | ||
| 313 | mtctr r9 | ||
| 314 | sub r8,r8,r3 | ||
| 315 | lis r0,0x60000000@h /* nop */ | ||
| 316 | 3: stw r0,0(r8) | ||
| 317 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 318 | beq 2f | ||
| 319 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 320 | sync | ||
| 321 | icbi 0,r8 | ||
| 322 | 2: addi r8,r8,4 | ||
| 323 | bdnz 3b | ||
| 324 | sync /* additional sync needed on g4 */ | ||
| 325 | isync | ||
| 326 | b 1b | ||
| 327 | |||
| 328 | /* | ||
| 329 | * do_fw_ftr_fixups - goes through the list of firmware feature fixups | ||
| 330 | * and writes nop's over sections of code that don't apply for this firmware. | ||
| 331 | * r3 = data offset (not changed) | ||
| 332 | */ | ||
| 333 | _GLOBAL(do_fw_ftr_fixups) | ||
| 334 | /* Get firmware features */ | ||
| 335 | LOAD_REG_IMMEDIATE(r6,powerpc_firmware_features) | ||
| 336 | sub r6,r6,r3 | ||
| 337 | ld r4,0(r6) | ||
| 338 | /* Get the fixup table */ | ||
| 339 | LOAD_REG_IMMEDIATE(r6,__start___fw_ftr_fixup) | ||
| 340 | sub r6,r6,r3 | ||
| 341 | LOAD_REG_IMMEDIATE(r7,__stop___fw_ftr_fixup) | ||
| 342 | sub r7,r7,r3 | ||
| 343 | /* Do the fixup */ | ||
| 344 | 1: cmpld r6,r7 | ||
| 345 | bgelr | ||
| 346 | addi r6,r6,32 | ||
| 347 | ld r8,-32(r6) /* mask */ | ||
| 348 | and r8,r8,r4 | ||
| 349 | ld r9,-24(r6) /* value */ | ||
| 350 | cmpld r8,r9 | ||
| 351 | beq 1b | ||
| 352 | ld r8,-16(r6) /* section begin */ | ||
| 353 | ld r9,-8(r6) /* section end */ | ||
| 354 | subf. r9,r8,r9 | ||
| 355 | beq 1b | ||
| 356 | /* write nops over the section of code */ | ||
| 357 | /* todo: if large section, add a branch at the start of it */ | ||
| 358 | srwi r9,r9,2 | ||
| 359 | mtctr r9 | ||
| 360 | sub r8,r8,r3 | ||
| 361 | lis r0,0x60000000@h /* nop */ | ||
| 362 | 3: stw r0,0(r8) | ||
| 363 | BEGIN_FTR_SECTION | ||
| 364 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 365 | sync | ||
| 366 | icbi 0,r8 | ||
| 367 | END_FTR_SECTION_IFSET(CPU_FTR_SPLIT_ID_CACHE) | ||
| 368 | addi r8,r8,4 | ||
| 369 | bdnz 3b | ||
| 370 | sync /* additional sync needed on g4 */ | ||
| 371 | isync | ||
| 372 | b 1b | ||
| 373 | 249 | ||
| 374 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) | 250 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) |
| 375 | /* | 251 | /* |
diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c index 92f4e5f64f02..e2c3c6a85f33 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
| 25 | #include <linux/cache.h> | 25 | #include <linux/cache.h> |
| 26 | 26 | ||
| 27 | #include "setup.h" | ||
| 28 | |||
| 27 | #if 0 | 29 | #if 0 |
| 28 | #define DEBUGP printk | 30 | #define DEBUGP printk |
| 29 | #else | 31 | #else |
| @@ -269,33 +271,50 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 269 | return 0; | 271 | return 0; |
| 270 | } | 272 | } |
| 271 | 273 | ||
| 274 | static const Elf_Shdr *find_section(const Elf_Ehdr *hdr, | ||
| 275 | const Elf_Shdr *sechdrs, | ||
| 276 | const char *name) | ||
| 277 | { | ||
| 278 | char *secstrings; | ||
| 279 | unsigned int i; | ||
| 280 | |||
| 281 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | ||
| 282 | for (i = 1; i < hdr->e_shnum; i++) | ||
| 283 | if (strcmp(secstrings+sechdrs[i].sh_name, name) == 0) | ||
| 284 | return &sechdrs[i]; | ||
| 285 | return NULL; | ||
| 286 | } | ||
| 287 | |||
| 272 | int module_finalize(const Elf_Ehdr *hdr, | 288 | int module_finalize(const Elf_Ehdr *hdr, |
| 273 | const Elf_Shdr *sechdrs, | 289 | const Elf_Shdr *sechdrs, |
| 274 | struct module *me) | 290 | struct module *me) |
| 275 | { | 291 | { |
| 276 | char *secstrings; | 292 | const Elf_Shdr *sect; |
| 277 | unsigned int i; | ||
| 278 | 293 | ||
| 279 | me->arch.bug_table = NULL; | 294 | me->arch.bug_table = NULL; |
| 280 | me->arch.num_bugs = 0; | 295 | me->arch.num_bugs = 0; |
| 281 | 296 | ||
| 282 | /* Find the __bug_table section, if present */ | 297 | /* Find the __bug_table section, if present */ |
| 283 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 298 | sect = find_section(hdr, sechdrs, "__bug_table"); |
| 284 | for (i = 1; i < hdr->e_shnum; i++) { | 299 | if (sect != NULL) { |
| 285 | if (strcmp(secstrings+sechdrs[i].sh_name, "__bug_table")) | 300 | me->arch.bug_table = (void *) sect->sh_addr; |
| 286 | continue; | 301 | me->arch.num_bugs = sect->sh_size / sizeof(struct bug_entry); |
| 287 | me->arch.bug_table = (void *) sechdrs[i].sh_addr; | ||
| 288 | me->arch.num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry); | ||
| 289 | break; | ||
| 290 | } | 302 | } |
| 291 | 303 | ||
| 292 | /* | 304 | /* |
| 293 | * Strictly speaking this should have a spinlock to protect against | 305 | * Strictly speaking this should have a spinlock to protect against |
| 294 | * traversals, but since we only traverse on BUG()s, a spinlock | 306 | * traversals, but since we only traverse on BUG()s, a spinlock |
| 295 | * could potentially lead to deadlock and thus be counter-productive. | 307 | * could potentially lead to deadlock and thus be counter-productive. |
| 296 | */ | 308 | */ |
| 297 | list_add(&me->arch.bug_list, &module_bug_list); | 309 | list_add(&me->arch.bug_list, &module_bug_list); |
| 298 | 310 | ||
| 311 | /* Apply feature fixups */ | ||
| 312 | sect = find_section(hdr, sechdrs, "__ftr_fixup"); | ||
| 313 | if (sect != NULL) | ||
| 314 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 315 | (void *)sect->sh_addr, | ||
| 316 | (void *)sect->sh_addr + sect->sh_size); | ||
| 317 | |||
| 299 | return 0; | 318 | return 0; |
| 300 | } | 319 | } |
| 301 | 320 | ||
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c index ba34001fca8e..8dd1f0aae5d6 100644 --- a/arch/powerpc/kernel/module_64.c +++ b/arch/powerpc/kernel/module_64.c | |||
| @@ -22,6 +22,9 @@ | |||
| 22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
| 23 | #include <asm/module.h> | 23 | #include <asm/module.h> |
| 24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
| 25 | #include <asm/firmware.h> | ||
| 26 | |||
| 27 | #include "setup.h" | ||
| 25 | 28 | ||
| 26 | /* FIXME: We don't do .init separately. To do this, we'd need to have | 29 | /* FIXME: We don't do .init separately. To do this, we'd need to have |
| 27 | a separate r2 value in the init and core section, and stub between | 30 | a separate r2 value in the init and core section, and stub between |
| @@ -400,6 +403,11 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
| 400 | | (value & 0x03fffffc); | 403 | | (value & 0x03fffffc); |
| 401 | break; | 404 | break; |
| 402 | 405 | ||
| 406 | case R_PPC64_REL64: | ||
| 407 | /* 64 bits relative (used by features fixups) */ | ||
| 408 | *location = value - (unsigned long)location; | ||
| 409 | break; | ||
| 410 | |||
| 403 | default: | 411 | default: |
| 404 | printk("%s: Unknown ADD relocation: %lu\n", | 412 | printk("%s: Unknown ADD relocation: %lu\n", |
| 405 | me->name, | 413 | me->name, |
| @@ -413,23 +421,33 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
| 413 | 421 | ||
| 414 | LIST_HEAD(module_bug_list); | 422 | LIST_HEAD(module_bug_list); |
| 415 | 423 | ||
| 416 | int module_finalize(const Elf_Ehdr *hdr, | 424 | static const Elf_Shdr *find_section(const Elf_Ehdr *hdr, |
| 417 | const Elf_Shdr *sechdrs, struct module *me) | 425 | const Elf_Shdr *sechdrs, |
| 426 | const char *name) | ||
| 418 | { | 427 | { |
| 419 | char *secstrings; | 428 | char *secstrings; |
| 420 | unsigned int i; | 429 | unsigned int i; |
| 421 | 430 | ||
| 431 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | ||
| 432 | for (i = 1; i < hdr->e_shnum; i++) | ||
| 433 | if (strcmp(secstrings+sechdrs[i].sh_name, name) == 0) | ||
| 434 | return &sechdrs[i]; | ||
| 435 | return NULL; | ||
| 436 | } | ||
| 437 | |||
| 438 | int module_finalize(const Elf_Ehdr *hdr, | ||
| 439 | const Elf_Shdr *sechdrs, struct module *me) | ||
| 440 | { | ||
| 441 | const Elf_Shdr *sect; | ||
| 442 | |||
| 422 | me->arch.bug_table = NULL; | 443 | me->arch.bug_table = NULL; |
| 423 | me->arch.num_bugs = 0; | 444 | me->arch.num_bugs = 0; |
| 424 | 445 | ||
| 425 | /* Find the __bug_table section, if present */ | 446 | /* Find the __bug_table section, if present */ |
| 426 | secstrings = (char *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; | 447 | sect = find_section(hdr, sechdrs, "__bug_table"); |
| 427 | for (i = 1; i < hdr->e_shnum; i++) { | 448 | if (sect != NULL) { |
| 428 | if (strcmp(secstrings+sechdrs[i].sh_name, "__bug_table")) | 449 | me->arch.bug_table = (void *) sect->sh_addr; |
| 429 | continue; | 450 | me->arch.num_bugs = sect->sh_size / sizeof(struct bug_entry); |
| 430 | me->arch.bug_table = (void *) sechdrs[i].sh_addr; | ||
| 431 | me->arch.num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry); | ||
| 432 | break; | ||
| 433 | } | 451 | } |
| 434 | 452 | ||
| 435 | /* | 453 | /* |
| @@ -439,6 +457,19 @@ int module_finalize(const Elf_Ehdr *hdr, | |||
| 439 | */ | 457 | */ |
| 440 | list_add(&me->arch.bug_list, &module_bug_list); | 458 | list_add(&me->arch.bug_list, &module_bug_list); |
| 441 | 459 | ||
| 460 | /* Apply feature fixups */ | ||
| 461 | sect = find_section(hdr, sechdrs, "__ftr_fixup"); | ||
| 462 | if (sect != NULL) | ||
| 463 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 464 | (void *)sect->sh_addr, | ||
| 465 | (void *)sect->sh_addr + sect->sh_size); | ||
| 466 | |||
| 467 | sect = find_section(hdr, sechdrs, "__fw_ftr_fixup"); | ||
| 468 | if (sect != NULL) | ||
| 469 | do_feature_fixups(powerpc_firmware_features, | ||
| 470 | (void *)sect->sh_addr, | ||
| 471 | (void *)sect->sh_addr + sect->sh_size); | ||
| 472 | |||
| 442 | return 0; | 473 | return 0; |
| 443 | } | 474 | } |
| 444 | 475 | ||
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 865b9648d0d5..bdb412d4b748 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -1014,7 +1014,7 @@ EXPORT_SYMBOL(find_all_nodes); | |||
| 1014 | /** Checks if the given "compat" string matches one of the strings in | 1014 | /** Checks if the given "compat" string matches one of the strings in |
| 1015 | * the device's "compatible" property | 1015 | * the device's "compatible" property |
| 1016 | */ | 1016 | */ |
| 1017 | int device_is_compatible(struct device_node *device, const char *compat) | 1017 | int device_is_compatible(const struct device_node *device, const char *compat) |
| 1018 | { | 1018 | { |
| 1019 | const char* cp; | 1019 | const char* cp; |
| 1020 | int cplen, l; | 1020 | int cplen, l; |
| @@ -1491,7 +1491,8 @@ static int __init prom_reconfig_setup(void) | |||
| 1491 | __initcall(prom_reconfig_setup); | 1491 | __initcall(prom_reconfig_setup); |
| 1492 | #endif | 1492 | #endif |
| 1493 | 1493 | ||
| 1494 | struct property *of_find_property(struct device_node *np, const char *name, | 1494 | struct property *of_find_property(const struct device_node *np, |
| 1495 | const char *name, | ||
| 1495 | int *lenp) | 1496 | int *lenp) |
| 1496 | { | 1497 | { |
| 1497 | struct property *pp; | 1498 | struct property *pp; |
| @@ -1512,7 +1513,8 @@ struct property *of_find_property(struct device_node *np, const char *name, | |||
| 1512 | * Find a property with a given name for a given node | 1513 | * Find a property with a given name for a given node |
| 1513 | * and return the value. | 1514 | * and return the value. |
| 1514 | */ | 1515 | */ |
| 1515 | const void *get_property(struct device_node *np, const char *name, int *lenp) | 1516 | const void *get_property(const struct device_node *np, const char *name, |
| 1517 | int *lenp) | ||
| 1516 | { | 1518 | { |
| 1517 | struct property *pp = of_find_property(np,name,lenp); | 1519 | struct property *pp = of_find_property(np,name,lenp); |
| 1518 | return pp ? pp->value : NULL; | 1520 | return pp ? pp->value : NULL; |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 191d0ab09222..a4c2964a3ca6 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
| @@ -91,6 +91,7 @@ int ucache_bsize; | |||
| 91 | unsigned long __init early_init(unsigned long dt_ptr) | 91 | unsigned long __init early_init(unsigned long dt_ptr) |
| 92 | { | 92 | { |
| 93 | unsigned long offset = reloc_offset(); | 93 | unsigned long offset = reloc_offset(); |
| 94 | struct cpu_spec *spec; | ||
| 94 | 95 | ||
| 95 | /* First zero the BSS -- use memset_io, some platforms don't have | 96 | /* First zero the BSS -- use memset_io, some platforms don't have |
| 96 | * caches on yet */ | 97 | * caches on yet */ |
| @@ -100,8 +101,11 @@ unsigned long __init early_init(unsigned long dt_ptr) | |||
| 100 | * Identify the CPU type and fix up code sections | 101 | * Identify the CPU type and fix up code sections |
| 101 | * that depend on which cpu we have. | 102 | * that depend on which cpu we have. |
| 102 | */ | 103 | */ |
| 103 | identify_cpu(offset, 0); | 104 | spec = identify_cpu(offset); |
| 104 | do_cpu_ftr_fixups(offset); | 105 | |
| 106 | do_feature_fixups(spec->cpu_features, | ||
| 107 | PTRRELOC(&__start___ftr_fixup), | ||
| 108 | PTRRELOC(&__stop___ftr_fixup)); | ||
| 105 | 109 | ||
| 106 | return KERNELBASE + offset; | 110 | return KERNELBASE + offset; |
| 107 | } | 111 | } |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 4b2e32eab9dc..16278968dab6 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -170,6 +170,9 @@ void __init setup_paca(int cpu) | |||
| 170 | 170 | ||
| 171 | void __init early_setup(unsigned long dt_ptr) | 171 | void __init early_setup(unsigned long dt_ptr) |
| 172 | { | 172 | { |
| 173 | /* Identify CPU type */ | ||
| 174 | identify_cpu(0); | ||
| 175 | |||
| 173 | /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ | 176 | /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ |
| 174 | setup_paca(0); | 177 | setup_paca(0); |
| 175 | 178 | ||
| @@ -348,6 +351,14 @@ void __init setup_system(void) | |||
| 348 | { | 351 | { |
| 349 | DBG(" -> setup_system()\n"); | 352 | DBG(" -> setup_system()\n"); |
| 350 | 353 | ||
| 354 | /* Apply the CPUs-specific and firmware specific fixups to kernel | ||
| 355 | * text (nop out sections not relevant to this CPU or this firmware) | ||
| 356 | */ | ||
| 357 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 358 | &__start___ftr_fixup, &__stop___ftr_fixup); | ||
| 359 | do_feature_fixups(powerpc_firmware_features, | ||
| 360 | &__start___fw_ftr_fixup, &__stop___fw_ftr_fixup); | ||
| 361 | |||
| 351 | /* | 362 | /* |
| 352 | * Unflatten the device-tree passed by prom_init or kexec | 363 | * Unflatten the device-tree passed by prom_init or kexec |
| 353 | */ | 364 | */ |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 5b59bc18dfe7..a1b5e4b16151 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -220,11 +220,8 @@ static void account_process_time(struct pt_regs *regs) | |||
| 220 | */ | 220 | */ |
| 221 | struct cpu_purr_data { | 221 | struct cpu_purr_data { |
| 222 | int initialized; /* thread is running */ | 222 | int initialized; /* thread is running */ |
| 223 | u64 tb0; /* timebase at origin time */ | ||
| 224 | u64 purr0; /* PURR at origin time */ | ||
| 225 | u64 tb; /* last TB value read */ | 223 | u64 tb; /* last TB value read */ |
| 226 | u64 purr; /* last PURR value read */ | 224 | u64 purr; /* last PURR value read */ |
| 227 | u64 stolen; /* stolen time so far */ | ||
| 228 | spinlock_t lock; | 225 | spinlock_t lock; |
| 229 | }; | 226 | }; |
| 230 | 227 | ||
| @@ -234,10 +231,8 @@ static void snapshot_tb_and_purr(void *data) | |||
| 234 | { | 231 | { |
| 235 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); | 232 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); |
| 236 | 233 | ||
| 237 | p->tb0 = mftb(); | 234 | p->tb = mftb(); |
| 238 | p->purr0 = mfspr(SPRN_PURR); | 235 | p->purr = mfspr(SPRN_PURR); |
| 239 | p->tb = p->tb0; | ||
| 240 | p->purr = 0; | ||
| 241 | wmb(); | 236 | wmb(); |
| 242 | p->initialized = 1; | 237 | p->initialized = 1; |
| 243 | } | 238 | } |
| @@ -258,37 +253,24 @@ void snapshot_timebases(void) | |||
| 258 | 253 | ||
| 259 | void calculate_steal_time(void) | 254 | void calculate_steal_time(void) |
| 260 | { | 255 | { |
| 261 | u64 tb, purr, t0; | 256 | u64 tb, purr; |
| 262 | s64 stolen; | 257 | s64 stolen; |
| 263 | struct cpu_purr_data *p0, *pme, *phim; | 258 | struct cpu_purr_data *pme; |
| 264 | int cpu; | ||
| 265 | 259 | ||
| 266 | if (!cpu_has_feature(CPU_FTR_PURR)) | 260 | if (!cpu_has_feature(CPU_FTR_PURR)) |
| 267 | return; | 261 | return; |
| 268 | cpu = smp_processor_id(); | 262 | pme = &per_cpu(cpu_purr_data, smp_processor_id()); |
| 269 | pme = &per_cpu(cpu_purr_data, cpu); | ||
| 270 | if (!pme->initialized) | 263 | if (!pme->initialized) |
| 271 | return; /* this can happen in early boot */ | 264 | return; /* this can happen in early boot */ |
| 272 | p0 = &per_cpu(cpu_purr_data, cpu & ~1); | 265 | spin_lock(&pme->lock); |
| 273 | phim = &per_cpu(cpu_purr_data, cpu ^ 1); | ||
| 274 | spin_lock(&p0->lock); | ||
| 275 | tb = mftb(); | 266 | tb = mftb(); |
| 276 | purr = mfspr(SPRN_PURR) - pme->purr0; | 267 | purr = mfspr(SPRN_PURR); |
| 277 | if (!phim->initialized || !cpu_online(cpu ^ 1)) { | 268 | stolen = (tb - pme->tb) - (purr - pme->purr); |
| 278 | stolen = (tb - pme->tb) - (purr - pme->purr); | 269 | if (stolen > 0) |
| 279 | } else { | ||
| 280 | t0 = pme->tb0; | ||
| 281 | if (phim->tb0 < t0) | ||
| 282 | t0 = phim->tb0; | ||
| 283 | stolen = phim->tb - t0 - phim->purr - purr - p0->stolen; | ||
| 284 | } | ||
| 285 | if (stolen > 0) { | ||
| 286 | account_steal_time(current, stolen); | 270 | account_steal_time(current, stolen); |
| 287 | p0->stolen += stolen; | ||
| 288 | } | ||
| 289 | pme->tb = tb; | 271 | pme->tb = tb; |
| 290 | pme->purr = purr; | 272 | pme->purr = purr; |
| 291 | spin_unlock(&p0->lock); | 273 | spin_unlock(&pme->lock); |
| 292 | } | 274 | } |
| 293 | 275 | ||
| 294 | /* | 276 | /* |
| @@ -297,30 +279,17 @@ void calculate_steal_time(void) | |||
| 297 | */ | 279 | */ |
| 298 | static void snapshot_purr(void) | 280 | static void snapshot_purr(void) |
| 299 | { | 281 | { |
| 300 | int cpu; | 282 | struct cpu_purr_data *pme; |
| 301 | u64 purr; | ||
| 302 | struct cpu_purr_data *p0, *pme, *phim; | ||
| 303 | unsigned long flags; | 283 | unsigned long flags; |
| 304 | 284 | ||
| 305 | if (!cpu_has_feature(CPU_FTR_PURR)) | 285 | if (!cpu_has_feature(CPU_FTR_PURR)) |
| 306 | return; | 286 | return; |
| 307 | cpu = smp_processor_id(); | 287 | pme = &per_cpu(cpu_purr_data, smp_processor_id()); |
| 308 | pme = &per_cpu(cpu_purr_data, cpu); | 288 | spin_lock_irqsave(&pme->lock, flags); |
| 309 | p0 = &per_cpu(cpu_purr_data, cpu & ~1); | 289 | pme->tb = mftb(); |
| 310 | phim = &per_cpu(cpu_purr_data, cpu ^ 1); | 290 | pme->purr = mfspr(SPRN_PURR); |
| 311 | spin_lock_irqsave(&p0->lock, flags); | ||
| 312 | pme->tb = pme->tb0 = mftb(); | ||
| 313 | purr = mfspr(SPRN_PURR); | ||
| 314 | if (!phim->initialized) { | ||
| 315 | pme->purr = 0; | ||
| 316 | pme->purr0 = purr; | ||
| 317 | } else { | ||
| 318 | /* set p->purr and p->purr0 for no change in p0->stolen */ | ||
| 319 | pme->purr = phim->tb - phim->tb0 - phim->purr - p0->stolen; | ||
| 320 | pme->purr0 = purr - pme->purr; | ||
| 321 | } | ||
| 322 | pme->initialized = 1; | 291 | pme->initialized = 1; |
| 323 | spin_unlock_irqrestore(&p0->lock, flags); | 292 | spin_unlock_irqrestore(&pme->lock, flags); |
| 324 | } | 293 | } |
| 325 | 294 | ||
| 326 | #endif /* CONFIG_PPC_SPLPAR */ | 295 | #endif /* CONFIG_PPC_SPLPAR */ |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 1a7e19cdab39..c913ad5cad29 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
| @@ -36,6 +36,8 @@ | |||
| 36 | #include <asm/vdso.h> | 36 | #include <asm/vdso.h> |
| 37 | #include <asm/vdso_datapage.h> | 37 | #include <asm/vdso_datapage.h> |
| 38 | 38 | ||
| 39 | #include "setup.h" | ||
| 40 | |||
| 39 | #undef DEBUG | 41 | #undef DEBUG |
| 40 | 42 | ||
| 41 | #ifdef DEBUG | 43 | #ifdef DEBUG |
| @@ -586,6 +588,43 @@ static __init int vdso_fixup_datapage(struct lib32_elfinfo *v32, | |||
| 586 | return 0; | 588 | return 0; |
| 587 | } | 589 | } |
| 588 | 590 | ||
| 591 | |||
| 592 | static __init int vdso_fixup_features(struct lib32_elfinfo *v32, | ||
| 593 | struct lib64_elfinfo *v64) | ||
| 594 | { | ||
| 595 | void *start32; | ||
| 596 | unsigned long size32; | ||
| 597 | |||
| 598 | #ifdef CONFIG_PPC64 | ||
| 599 | void *start64; | ||
| 600 | unsigned long size64; | ||
| 601 | |||
| 602 | start64 = find_section64(v64->hdr, "__ftr_fixup", &size64); | ||
| 603 | if (start64) | ||
| 604 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 605 | start64, start64 + size64); | ||
| 606 | |||
| 607 | start64 = find_section64(v64->hdr, "__fw_ftr_fixup", &size64); | ||
| 608 | if (start64) | ||
| 609 | do_feature_fixups(powerpc_firmware_features, | ||
| 610 | start64, start64 + size64); | ||
| 611 | #endif /* CONFIG_PPC64 */ | ||
| 612 | |||
| 613 | start32 = find_section32(v32->hdr, "__ftr_fixup", &size32); | ||
| 614 | if (start32) | ||
| 615 | do_feature_fixups(cur_cpu_spec->cpu_features, | ||
| 616 | start32, start32 + size32); | ||
| 617 | |||
| 618 | #ifdef CONFIG_PPC64 | ||
| 619 | start32 = find_section32(v32->hdr, "__fw_ftr_fixup", &size32); | ||
| 620 | if (start32) | ||
| 621 | do_feature_fixups(powerpc_firmware_features, | ||
| 622 | start32, start32 + size32); | ||
| 623 | #endif /* CONFIG_PPC64 */ | ||
| 624 | |||
| 625 | return 0; | ||
| 626 | } | ||
| 627 | |||
| 589 | static __init int vdso_fixup_alt_funcs(struct lib32_elfinfo *v32, | 628 | static __init int vdso_fixup_alt_funcs(struct lib32_elfinfo *v32, |
| 590 | struct lib64_elfinfo *v64) | 629 | struct lib64_elfinfo *v64) |
| 591 | { | 630 | { |
| @@ -634,6 +673,9 @@ static __init int vdso_setup(void) | |||
| 634 | if (vdso_fixup_datapage(&v32, &v64)) | 673 | if (vdso_fixup_datapage(&v32, &v64)) |
| 635 | return -1; | 674 | return -1; |
| 636 | 675 | ||
| 676 | if (vdso_fixup_features(&v32, &v64)) | ||
| 677 | return -1; | ||
| 678 | |||
| 637 | if (vdso_fixup_alt_funcs(&v32, &v64)) | 679 | if (vdso_fixup_alt_funcs(&v32, &v64)) |
| 638 | return -1; | 680 | return -1; |
| 639 | 681 | ||
| @@ -714,6 +756,7 @@ void __init vdso_init(void) | |||
| 714 | * Setup the syscall map in the vDOS | 756 | * Setup the syscall map in the vDOS |
| 715 | */ | 757 | */ |
| 716 | vdso_setup_syscall_map(); | 758 | vdso_setup_syscall_map(); |
| 759 | |||
| 717 | /* | 760 | /* |
| 718 | * Initialize the vDSO images in memory, that is do necessary | 761 | * Initialize the vDSO images in memory, that is do necessary |
| 719 | * fixups of vDSO symbols, locate trampolines, etc... | 762 | * fixups of vDSO symbols, locate trampolines, etc... |
diff --git a/arch/powerpc/kernel/vdso32/vdso32.lds.S b/arch/powerpc/kernel/vdso32/vdso32.lds.S index 6187af2d54c3..26e138c4ce17 100644 --- a/arch/powerpc/kernel/vdso32/vdso32.lds.S +++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S | |||
| @@ -32,6 +32,18 @@ SECTIONS | |||
| 32 | PROVIDE (_etext = .); | 32 | PROVIDE (_etext = .); |
| 33 | PROVIDE (etext = .); | 33 | PROVIDE (etext = .); |
| 34 | 34 | ||
| 35 | . = ALIGN(8); | ||
| 36 | __ftr_fixup : { | ||
| 37 | *(__ftr_fixup) | ||
| 38 | } | ||
| 39 | |||
| 40 | #ifdef CONFIG_PPC64 | ||
| 41 | . = ALIGN(8); | ||
| 42 | __fw_ftr_fixup : { | ||
| 43 | *(__fw_ftr_fixup) | ||
| 44 | } | ||
| 45 | #endif | ||
| 46 | |||
| 35 | /* Other stuff is appended to the text segment: */ | 47 | /* Other stuff is appended to the text segment: */ |
| 36 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } | 48 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } |
| 37 | .rodata1 : { *(.rodata1) } | 49 | .rodata1 : { *(.rodata1) } |
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S index 56e76ff5498f..40ffd9b6cef7 100644 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | |||
| @@ -229,8 +229,10 @@ V_FUNCTION_BEGIN(__do_get_xsec) | |||
| 229 | xor r0,r8,r8 /* create dependency */ | 229 | xor r0,r8,r8 /* create dependency */ |
| 230 | add r3,r3,r0 | 230 | add r3,r3,r0 |
| 231 | 231 | ||
| 232 | /* Get TB & offset it */ | 232 | /* Get TB & offset it. We use the MFTB macro which will generate |
| 233 | mftb r7 | 233 | * workaround code for Cell. |
| 234 | */ | ||
| 235 | MFTB(r7) | ||
| 234 | ld r9,CFG_TB_ORIG_STAMP(r3) | 236 | ld r9,CFG_TB_ORIG_STAMP(r3) |
| 235 | subf r7,r9,r7 | 237 | subf r7,r9,r7 |
| 236 | 238 | ||
diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S index 4a2b6dc0960c..2d70f35d50b5 100644 --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S | |||
| @@ -31,6 +31,16 @@ SECTIONS | |||
| 31 | PROVIDE (_etext = .); | 31 | PROVIDE (_etext = .); |
| 32 | PROVIDE (etext = .); | 32 | PROVIDE (etext = .); |
| 33 | 33 | ||
| 34 | . = ALIGN(8); | ||
| 35 | __ftr_fixup : { | ||
| 36 | *(__ftr_fixup) | ||
| 37 | } | ||
| 38 | |||
| 39 | . = ALIGN(8); | ||
| 40 | __fw_ftr_fixup : { | ||
| 41 | *(__fw_ftr_fixup) | ||
| 42 | } | ||
| 43 | |||
| 34 | /* Other stuff is appended to the text segment: */ | 44 | /* Other stuff is appended to the text segment: */ |
| 35 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } | 45 | .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } |
| 36 | .rodata1 : { *(.rodata1) } | 46 | .rodata1 : { *(.rodata1) } |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index cb0e8d46c3e8..e8342d867536 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
| @@ -108,13 +108,7 @@ SECTIONS | |||
| 108 | 108 | ||
| 109 | .initcall.init : { | 109 | .initcall.init : { |
| 110 | __initcall_start = .; | 110 | __initcall_start = .; |
| 111 | *(.initcall1.init) | 111 | INITCALLS |
| 112 | *(.initcall2.init) | ||
| 113 | *(.initcall3.init) | ||
| 114 | *(.initcall4.init) | ||
| 115 | *(.initcall5.init) | ||
| 116 | *(.initcall6.init) | ||
| 117 | *(.initcall7.init) | ||
| 118 | __initcall_end = .; | 112 | __initcall_end = .; |
| 119 | } | 113 | } |
| 120 | 114 | ||
diff --git a/arch/powerpc/oprofile/op_model_power4.c b/arch/powerpc/oprofile/op_model_power4.c index 506f6b79f893..6a927effcc77 100644 --- a/arch/powerpc/oprofile/op_model_power4.c +++ b/arch/powerpc/oprofile/op_model_power4.c | |||
| @@ -76,7 +76,7 @@ static inline int mmcra_must_set_sample(void) | |||
| 76 | { | 76 | { |
| 77 | if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p) || | 77 | if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p) || |
| 78 | __is_processor(PV_970) || __is_processor(PV_970FX) || | 78 | __is_processor(PV_970) || __is_processor(PV_970FX) || |
| 79 | __is_processor(PV_970MP)) | 79 | __is_processor(PV_970MP) || __is_processor(PV_970GX)) |
| 80 | return 1; | 80 | return 1; |
| 81 | 81 | ||
| 82 | return 0; | 82 | return 0; |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index 0de8e114e6b6..533e2723e184 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
| @@ -385,7 +385,7 @@ static ssize_t spufs_mbox_read(struct file *file, char __user *buf, | |||
| 385 | udata = (void __user *)buf; | 385 | udata = (void __user *)buf; |
| 386 | 386 | ||
| 387 | spu_acquire(ctx); | 387 | spu_acquire(ctx); |
| 388 | for (count = 0; count <= len; count += 4, udata++) { | 388 | for (count = 0; (count + 4) <= len; count += 4, udata++) { |
| 389 | int ret; | 389 | int ret; |
| 390 | ret = ctx->ops->mbox_read(ctx, &mbox_data); | 390 | ret = ctx->ops->mbox_read(ctx, &mbox_data); |
| 391 | if (ret == 0) | 391 | if (ret == 0) |
diff --git a/arch/powerpc/platforms/cell/spufs/hw_ops.c b/arch/powerpc/platforms/cell/spufs/hw_ops.c index efc452e71ab0..d805ffed892d 100644 --- a/arch/powerpc/platforms/cell/spufs/hw_ops.c +++ b/arch/powerpc/platforms/cell/spufs/hw_ops.c | |||
| @@ -147,7 +147,7 @@ static void spu_hw_signal1_write(struct spu_context *ctx, u32 data) | |||
| 147 | 147 | ||
| 148 | static u32 spu_hw_signal2_read(struct spu_context *ctx) | 148 | static u32 spu_hw_signal2_read(struct spu_context *ctx) |
| 149 | { | 149 | { |
| 150 | return in_be32(&ctx->spu->problem->signal_notify1); | 150 | return in_be32(&ctx->spu->problem->signal_notify2); |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | static void spu_hw_signal2_write(struct spu_context *ctx, u32 data) | 153 | static void spu_hw_signal2_write(struct spu_context *ctx, u32 data) |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index cae3d13229b9..49b8dabcbc99 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
| @@ -477,8 +477,10 @@ static void __init chrp_find_8259(void) | |||
| 477 | " address, polling\n"); | 477 | " address, polling\n"); |
| 478 | 478 | ||
| 479 | i8259_init(pic, chrp_int_ack); | 479 | i8259_init(pic, chrp_int_ack); |
| 480 | if (ppc_md.get_irq == NULL) | 480 | if (ppc_md.get_irq == NULL) { |
| 481 | ppc_md.get_irq = i8259_irq; | 481 | ppc_md.get_irq = i8259_irq; |
| 482 | irq_set_default_host(i8259_get_host()); | ||
| 483 | } | ||
| 482 | if (chrp_mpic != NULL) { | 484 | if (chrp_mpic != NULL) { |
| 483 | cascade_irq = irq_of_parse_and_map(pic, 0); | 485 | cascade_irq = irq_of_parse_and_map(pic, 0); |
| 484 | if (cascade_irq == NO_IRQ) | 486 | if (cascade_irq == NO_IRQ) |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index a0ff7ba7d666..6f73469fd3b0 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
| @@ -694,6 +694,11 @@ void * __init iSeries_early_setup(void) | |||
| 694 | { | 694 | { |
| 695 | unsigned long phys_mem_size; | 695 | unsigned long phys_mem_size; |
| 696 | 696 | ||
| 697 | /* Identify CPU type. This is done again by the common code later | ||
| 698 | * on but calling this function multiple times is fine. | ||
| 699 | */ | ||
| 700 | identify_cpu(0); | ||
| 701 | |||
| 697 | powerpc_firmware_features |= FW_FEATURE_ISERIES; | 702 | powerpc_firmware_features |= FW_FEATURE_ISERIES; |
| 698 | powerpc_firmware_features |= FW_FEATURE_LPAR; | 703 | powerpc_firmware_features |= FW_FEATURE_LPAR; |
| 699 | 704 | ||
diff --git a/arch/powerpc/platforms/powermac/sleep.S b/arch/powerpc/platforms/powermac/sleep.S index 1174ca128efa..adee28da353f 100644 --- a/arch/powerpc/platforms/powermac/sleep.S +++ b/arch/powerpc/platforms/powermac/sleep.S | |||
| @@ -45,7 +45,8 @@ | |||
| 45 | .section .text | 45 | .section .text |
| 46 | .align 5 | 46 | .align 5 |
| 47 | 47 | ||
| 48 | #if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC) | 48 | #if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC) || \ |
| 49 | (defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32)) | ||
| 49 | 50 | ||
| 50 | /* This gets called by via-pmu.c late during the sleep process. | 51 | /* This gets called by via-pmu.c late during the sleep process. |
| 51 | * The PMU was already send the sleep command and will shut us down | 52 | * The PMU was already send the sleep command and will shut us down |
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c index 0450265d73bb..ad87adc975bc 100644 --- a/arch/powerpc/sysdev/i8259.c +++ b/arch/powerpc/sysdev/i8259.c | |||
| @@ -224,6 +224,11 @@ static struct irq_host_ops i8259_host_ops = { | |||
| 224 | .xlate = i8259_host_xlate, | 224 | .xlate = i8259_host_xlate, |
| 225 | }; | 225 | }; |
| 226 | 226 | ||
| 227 | struct irq_host *i8259_get_host(void) | ||
| 228 | { | ||
| 229 | return i8259_host; | ||
| 230 | } | ||
| 231 | |||
| 227 | /** | 232 | /** |
| 228 | * i8259_init - Initialize the legacy controller | 233 | * i8259_init - Initialize the legacy controller |
| 229 | * @node: device node of the legacy PIC (can be NULL, but then, it will match | 234 | * @node: device node of the legacy PIC (can be NULL, but then, it will match |
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index bc4d4a7f9657..746f78c15375 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
| @@ -473,9 +473,9 @@ static int ipic_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
| 473 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; | 473 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; |
| 474 | if (flow_type & IRQ_TYPE_LEVEL_LOW) { | 474 | if (flow_type & IRQ_TYPE_LEVEL_LOW) { |
| 475 | desc->status |= IRQ_LEVEL; | 475 | desc->status |= IRQ_LEVEL; |
| 476 | set_irq_handler(virq, handle_level_irq); | 476 | desc->handle_irq = handle_level_irq; |
| 477 | } else { | 477 | } else { |
| 478 | set_irq_handler(virq, handle_edge_irq); | 478 | desc->handle_irq = handle_edge_irq; |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | /* only EXT IRQ senses are programmable on ipic | 481 | /* only EXT IRQ senses are programmable on ipic |
diff --git a/arch/powerpc/sysdev/qe_lib/ucc.c b/arch/powerpc/sysdev/qe_lib/ucc.c index 916c9e5df57f..ac12a44d516f 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc.c +++ b/arch/powerpc/sysdev/qe_lib/ucc.c | |||
| @@ -207,6 +207,7 @@ int ucc_set_qe_mux_rxtx(int ucc_num, enum qe_clock clock, enum comm_dir mode) | |||
| 207 | case QE_CLK18: source = 8; break; | 207 | case QE_CLK18: source = 8; break; |
| 208 | case QE_CLK7: source = 9; break; | 208 | case QE_CLK7: source = 9; break; |
| 209 | case QE_CLK8: source = 10; break; | 209 | case QE_CLK8: source = 10; break; |
| 210 | case QE_CLK16: source = 11; break; | ||
| 210 | default: source = -1; break; | 211 | default: source = -1; break; |
| 211 | } | 212 | } |
| 212 | break; | 213 | break; |
| @@ -222,6 +223,7 @@ int ucc_set_qe_mux_rxtx(int ucc_num, enum qe_clock clock, enum comm_dir mode) | |||
| 222 | case QE_CLK22: source = 8; break; | 223 | case QE_CLK22: source = 8; break; |
| 223 | case QE_CLK7: source = 9; break; | 224 | case QE_CLK7: source = 9; break; |
| 224 | case QE_CLK8: source = 10; break; | 225 | case QE_CLK8: source = 10; break; |
| 226 | case QE_CLK16: source = 11; break; | ||
| 225 | default: source = -1; break; | 227 | default: source = -1; break; |
| 226 | } | 228 | } |
| 227 | break; | 229 | break; |
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_fast.c b/arch/powerpc/sysdev/qe_lib/ucc_fast.c index c2be7348fcbd..75fa3104a43a 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c +++ b/arch/powerpc/sysdev/qe_lib/ucc_fast.c | |||
| @@ -163,7 +163,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc | |||
| 163 | 163 | ||
| 164 | /* check if the UCC port number is in range. */ | 164 | /* check if the UCC port number is in range. */ |
| 165 | if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) { | 165 | if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) { |
| 166 | uccf_err("ucc_fast_init: Illagal UCC number!"); | 166 | uccf_err("ucc_fast_init: Illegal UCC number!"); |
| 167 | return -EINVAL; | 167 | return -EINVAL; |
| 168 | } | 168 | } |
| 169 | 169 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_slow.c b/arch/powerpc/sysdev/qe_lib/ucc_slow.c index 1fb88ef7cf06..a49da6b73ecf 100644 --- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c +++ b/arch/powerpc/sysdev/qe_lib/ucc_slow.c | |||
| @@ -152,7 +152,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc | |||
| 152 | 152 | ||
| 153 | /* check if the UCC port number is in range. */ | 153 | /* check if the UCC port number is in range. */ |
| 154 | if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) { | 154 | if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) { |
| 155 | uccs_err("ucc_slow_init: Illagal UCC number!"); | 155 | uccs_err("ucc_slow_init: Illegal UCC number!"); |
| 156 | return -EINVAL; | 156 | return -EINVAL; |
| 157 | } | 157 | } |
| 158 | 158 | ||
diff --git a/arch/powerpc/sysdev/tsi108_dev.c b/arch/powerpc/sysdev/tsi108_dev.c index 11de090eb901..97f37ef4bbbf 100644 --- a/arch/powerpc/sysdev/tsi108_dev.c +++ b/arch/powerpc/sysdev/tsi108_dev.c | |||
| @@ -48,7 +48,7 @@ phys_addr_t get_csrbase(void) | |||
| 48 | tsi = of_find_node_by_type(NULL, "tsi-bridge"); | 48 | tsi = of_find_node_by_type(NULL, "tsi-bridge"); |
| 49 | if (tsi) { | 49 | if (tsi) { |
| 50 | unsigned int size; | 50 | unsigned int size; |
| 51 | void *prop = get_property(tsi, "reg", &size); | 51 | const void *prop = get_property(tsi, "reg", &size); |
| 52 | tsi108_csr_base = of_translate_address(tsi, prop); | 52 | tsi108_csr_base = of_translate_address(tsi, prop); |
| 53 | of_node_put(tsi); | 53 | of_node_put(tsi); |
| 54 | }; | 54 | }; |
| @@ -79,7 +79,7 @@ static int __init tsi108_eth_of_init(void) | |||
| 79 | hw_info tsi_eth_data; | 79 | hw_info tsi_eth_data; |
| 80 | unsigned int *id; | 80 | unsigned int *id; |
| 81 | unsigned int *phy_id; | 81 | unsigned int *phy_id; |
| 82 | void *mac_addr; | 82 | const void *mac_addr; |
| 83 | phandle *ph; | 83 | phandle *ph; |
| 84 | 84 | ||
| 85 | memset(r, 0, sizeof(r)); | 85 | memset(r, 0, sizeof(r)); |
diff --git a/arch/ppc/boot/simple/relocate.S b/arch/ppc/boot/simple/relocate.S index 0c021556d78e..1bbbcd2f2bcb 100644 --- a/arch/ppc/boot/simple/relocate.S +++ b/arch/ppc/boot/simple/relocate.S | |||
| @@ -154,8 +154,8 @@ do_relocate_out: | |||
| 154 | 154 | ||
| 155 | start_ldr: | 155 | start_ldr: |
| 156 | /* Clear all of BSS and set up stack for C calls */ | 156 | /* Clear all of BSS and set up stack for C calls */ |
| 157 | lis r3,edata@h | 157 | lis r3,__bss_start@h |
| 158 | ori r3,r3,edata@l | 158 | ori r3,r3,__bss_start@l |
| 159 | lis r4,end@h | 159 | lis r4,end@h |
| 160 | ori r4,r4,end@l | 160 | ori r4,r4,end@l |
| 161 | subi r3,r3,4 | 161 | subi r3,r3,4 |
| @@ -163,7 +163,7 @@ start_ldr: | |||
| 163 | li r0,0 | 163 | li r0,0 |
| 164 | 50: stwu r0,4(r3) | 164 | 50: stwu r0,4(r3) |
| 165 | cmpw cr0,r3,r4 | 165 | cmpw cr0,r3,r4 |
| 166 | bne 50b | 166 | blt 50b |
| 167 | 90: mr r9,r1 /* Save old stack pointer (in case it matters) */ | 167 | 90: mr r9,r1 /* Save old stack pointer (in case it matters) */ |
| 168 | lis r1,.stack@h | 168 | lis r1,.stack@h |
| 169 | ori r1,r1,.stack@l | 169 | ori r1,r1,.stack@l |
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S index 5f6684012ded..d319f9ba2379 100644 --- a/arch/ppc/kernel/misc.S +++ b/arch/ppc/kernel/misc.S | |||
| @@ -110,80 +110,6 @@ _GLOBAL(reloc_got2) | |||
| 110 | blr | 110 | blr |
| 111 | 111 | ||
| 112 | /* | 112 | /* |
| 113 | * identify_cpu, | ||
| 114 | * called with r3 = data offset and r4 = CPU number | ||
| 115 | * doesn't change r3 | ||
| 116 | */ | ||
| 117 | _GLOBAL(identify_cpu) | ||
| 118 | addis r8,r3,cpu_specs@ha | ||
| 119 | addi r8,r8,cpu_specs@l | ||
| 120 | mfpvr r7 | ||
| 121 | 1: | ||
| 122 | lwz r5,CPU_SPEC_PVR_MASK(r8) | ||
| 123 | and r5,r5,r7 | ||
| 124 | lwz r6,CPU_SPEC_PVR_VALUE(r8) | ||
| 125 | cmplw 0,r6,r5 | ||
| 126 | beq 1f | ||
| 127 | addi r8,r8,CPU_SPEC_ENTRY_SIZE | ||
| 128 | b 1b | ||
| 129 | 1: | ||
| 130 | addis r6,r3,cur_cpu_spec@ha | ||
| 131 | addi r6,r6,cur_cpu_spec@l | ||
| 132 | sub r8,r8,r3 | ||
| 133 | stw r8,0(r6) | ||
| 134 | blr | ||
| 135 | |||
| 136 | /* | ||
| 137 | * do_cpu_ftr_fixups - goes through the list of CPU feature fixups | ||
| 138 | * and writes nop's over sections of code that don't apply for this cpu. | ||
| 139 | * r3 = data offset (not changed) | ||
| 140 | */ | ||
| 141 | _GLOBAL(do_cpu_ftr_fixups) | ||
| 142 | /* Get CPU 0 features */ | ||
| 143 | addis r6,r3,cur_cpu_spec@ha | ||
| 144 | addi r6,r6,cur_cpu_spec@l | ||
| 145 | lwz r4,0(r6) | ||
| 146 | add r4,r4,r3 | ||
| 147 | lwz r4,CPU_SPEC_FEATURES(r4) | ||
| 148 | |||
| 149 | /* Get the fixup table */ | ||
| 150 | addis r6,r3,__start___ftr_fixup@ha | ||
| 151 | addi r6,r6,__start___ftr_fixup@l | ||
| 152 | addis r7,r3,__stop___ftr_fixup@ha | ||
| 153 | addi r7,r7,__stop___ftr_fixup@l | ||
| 154 | |||
| 155 | /* Do the fixup */ | ||
| 156 | 1: cmplw 0,r6,r7 | ||
| 157 | bgelr | ||
| 158 | addi r6,r6,16 | ||
| 159 | lwz r8,-16(r6) /* mask */ | ||
| 160 | and r8,r8,r4 | ||
| 161 | lwz r9,-12(r6) /* value */ | ||
| 162 | cmplw 0,r8,r9 | ||
| 163 | beq 1b | ||
| 164 | lwz r8,-8(r6) /* section begin */ | ||
| 165 | lwz r9,-4(r6) /* section end */ | ||
| 166 | subf. r9,r8,r9 | ||
| 167 | beq 1b | ||
| 168 | /* write nops over the section of code */ | ||
| 169 | /* todo: if large section, add a branch at the start of it */ | ||
| 170 | srwi r9,r9,2 | ||
| 171 | mtctr r9 | ||
| 172 | add r8,r8,r3 | ||
| 173 | lis r0,0x60000000@h /* nop */ | ||
| 174 | 3: stw r0,0(r8) | ||
| 175 | andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l | ||
| 176 | beq 2f | ||
| 177 | dcbst 0,r8 /* suboptimal, but simpler */ | ||
| 178 | sync | ||
| 179 | icbi 0,r8 | ||
| 180 | 2: addi r8,r8,4 | ||
| 181 | bdnz 3b | ||
| 182 | sync /* additional sync needed on g4 */ | ||
| 183 | isync | ||
| 184 | b 1b | ||
| 185 | |||
| 186 | /* | ||
| 187 | * call_setup_cpu - call the setup_cpu function for this cpu | 113 | * call_setup_cpu - call the setup_cpu function for this cpu |
| 188 | * r3 = data offset, r24 = cpu number | 114 | * r3 = data offset, r24 = cpu number |
| 189 | * | 115 | * |
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c index 75fe13815be2..27faeca2c7a2 100644 --- a/arch/ppc/kernel/setup.c +++ b/arch/ppc/kernel/setup.c | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <asm/nvram.h> | 38 | #include <asm/nvram.h> |
| 39 | #include <asm/xmon.h> | 39 | #include <asm/xmon.h> |
| 40 | #include <asm/ocp.h> | 40 | #include <asm/ocp.h> |
| 41 | #include <asm/prom.h> | ||
| 41 | 42 | ||
| 42 | #define USES_PPC_SYS (defined(CONFIG_85xx) || defined(CONFIG_83xx) || \ | 43 | #define USES_PPC_SYS (defined(CONFIG_85xx) || defined(CONFIG_83xx) || \ |
| 43 | defined(CONFIG_MPC10X_BRIDGE) || defined(CONFIG_8260) || \ | 44 | defined(CONFIG_MPC10X_BRIDGE) || defined(CONFIG_8260) || \ |
| @@ -53,8 +54,6 @@ | |||
| 53 | 54 | ||
| 54 | extern void platform_init(unsigned long r3, unsigned long r4, | 55 | extern void platform_init(unsigned long r3, unsigned long r4, |
| 55 | unsigned long r5, unsigned long r6, unsigned long r7); | 56 | unsigned long r5, unsigned long r6, unsigned long r7); |
| 56 | extern void identify_cpu(unsigned long offset, unsigned long cpu); | ||
| 57 | extern void do_cpu_ftr_fixups(unsigned long offset); | ||
| 58 | extern void reloc_got2(unsigned long offset); | 57 | extern void reloc_got2(unsigned long offset); |
| 59 | 58 | ||
| 60 | extern void ppc6xx_idle(void); | 59 | extern void ppc6xx_idle(void); |
| @@ -301,6 +300,7 @@ early_init(int r3, int r4, int r5) | |||
| 301 | { | 300 | { |
| 302 | unsigned long phys; | 301 | unsigned long phys; |
| 303 | unsigned long offset = reloc_offset(); | 302 | unsigned long offset = reloc_offset(); |
| 303 | struct cpu_spec *spec; | ||
| 304 | 304 | ||
| 305 | /* Default */ | 305 | /* Default */ |
| 306 | phys = offset + KERNELBASE; | 306 | phys = offset + KERNELBASE; |
| @@ -313,8 +313,10 @@ early_init(int r3, int r4, int r5) | |||
| 313 | * Identify the CPU type and fix up code sections | 313 | * Identify the CPU type and fix up code sections |
| 314 | * that depend on which cpu we have. | 314 | * that depend on which cpu we have. |
| 315 | */ | 315 | */ |
| 316 | identify_cpu(offset, 0); | 316 | spec = identify_cpu(offset); |
| 317 | do_cpu_ftr_fixups(offset); | 317 | do_feature_fixups(spec->cpu_features, |
| 318 | PTRRELOC(&__start___ftr_fixup), | ||
| 319 | PTRRELOC(&__stop___ftr_fixup)); | ||
| 318 | 320 | ||
| 319 | return phys; | 321 | return phys; |
| 320 | } | 322 | } |
diff --git a/arch/ppc/kernel/vmlinux.lds.S b/arch/ppc/kernel/vmlinux.lds.S index 095fd3323323..16e8661e1fec 100644 --- a/arch/ppc/kernel/vmlinux.lds.S +++ b/arch/ppc/kernel/vmlinux.lds.S | |||
| @@ -115,13 +115,7 @@ SECTIONS | |||
| 115 | __setup_end = .; | 115 | __setup_end = .; |
| 116 | __initcall_start = .; | 116 | __initcall_start = .; |
| 117 | .initcall.init : { | 117 | .initcall.init : { |
| 118 | *(.initcall1.init) | 118 | INITCALLS |
| 119 | *(.initcall2.init) | ||
| 120 | *(.initcall3.init) | ||
| 121 | *(.initcall4.init) | ||
| 122 | *(.initcall5.init) | ||
| 123 | *(.initcall6.init) | ||
| 124 | *(.initcall7.init) | ||
| 125 | } | 119 | } |
| 126 | __initcall_end = .; | 120 | __initcall_end = .; |
| 127 | 121 | ||
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 45c9fa7d7545..af1e8fc7d985 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
| @@ -310,6 +310,7 @@ appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 310 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) { | 310 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) { |
| 311 | return -EFAULT; | 311 | return -EFAULT; |
| 312 | } | 312 | } |
| 313 | interval = 0; | ||
| 313 | sscanf(buf, "%i", &interval); | 314 | sscanf(buf, "%i", &interval); |
| 314 | if (interval <= 0) { | 315 | if (interval <= 0) { |
| 315 | P_ERROR("Timer CPU interval has to be > 0!\n"); | 316 | P_ERROR("Timer CPU interval has to be > 0!\n"); |
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 2001767e1dc7..5b33f823863a 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
| @@ -757,7 +757,9 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) | |||
| 757 | put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp))) | 757 | put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp))) |
| 758 | error = -EFAULT; | 758 | error = -EFAULT; |
| 759 | } | 759 | } |
| 760 | copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); | 760 | if (copy_to_user(args->__unused, tmp.__unused, |
| 761 | sizeof(tmp.__unused))) | ||
| 762 | error = -EFAULT; | ||
| 761 | } | 763 | } |
| 762 | return error; | 764 | return error; |
| 763 | } | 765 | } |
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index d49b876a83bf..861888ab8c13 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
| @@ -169,12 +169,12 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | |||
| 169 | compat_old_sigset_t mask; | 169 | compat_old_sigset_t mask; |
| 170 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || | 170 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || |
| 171 | __get_user(sa_handler, &act->sa_handler) || | 171 | __get_user(sa_handler, &act->sa_handler) || |
| 172 | __get_user(sa_restorer, &act->sa_restorer)) | 172 | __get_user(sa_restorer, &act->sa_restorer) || |
| 173 | __get_user(new_ka.sa.sa_flags, &act->sa_flags) || | ||
| 174 | __get_user(mask, &act->sa_mask)) | ||
| 173 | return -EFAULT; | 175 | return -EFAULT; |
| 174 | new_ka.sa.sa_handler = (__sighandler_t) sa_handler; | 176 | new_ka.sa.sa_handler = (__sighandler_t) sa_handler; |
| 175 | new_ka.sa.sa_restorer = (void (*)(void)) sa_restorer; | 177 | new_ka.sa.sa_restorer = (void (*)(void)) sa_restorer; |
| 176 | __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
| 177 | __get_user(mask, &act->sa_mask); | ||
| 178 | siginitset(&new_ka.sa.sa_mask, mask); | 178 | siginitset(&new_ka.sa.sa_mask, mask); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| @@ -185,10 +185,10 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | |||
| 185 | sa_restorer = (unsigned long) old_ka.sa.sa_restorer; | 185 | sa_restorer = (unsigned long) old_ka.sa.sa_restorer; |
| 186 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || | 186 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || |
| 187 | __put_user(sa_handler, &oact->sa_handler) || | 187 | __put_user(sa_handler, &oact->sa_handler) || |
| 188 | __put_user(sa_restorer, &oact->sa_restorer)) | 188 | __put_user(sa_restorer, &oact->sa_restorer) || |
| 189 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || | ||
| 190 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) | ||
| 189 | return -EFAULT; | 191 | return -EFAULT; |
| 190 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
| 191 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | return ret; | 194 | return ret; |
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index cb0efae6802f..71e54ef0931e 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
| @@ -1664,4 +1664,4 @@ sys_getcpu_wrapper: | |||
| 1664 | llgtr %r2,%r2 # unsigned * | 1664 | llgtr %r2,%r2 # unsigned * |
| 1665 | llgtr %r3,%r3 # unsigned * | 1665 | llgtr %r3,%r3 # unsigned * |
| 1666 | llgtr %r4,%r4 # struct getcpu_cache * | 1666 | llgtr %r4,%r4 # struct getcpu_cache * |
| 1667 | jg sys_tee | 1667 | jg sys_getcpu |
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 4392a77cbae8..4c8a7954ef48 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
| @@ -80,10 +80,10 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
| 80 | old_sigset_t mask; | 80 | old_sigset_t mask; |
| 81 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || | 81 | if (!access_ok(VERIFY_READ, act, sizeof(*act)) || |
| 82 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || | 82 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || |
| 83 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) | 83 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || |
| 84 | __get_user(new_ka.sa.sa_flags, &act->sa_flags) || | ||
| 85 | __get_user(mask, &act->sa_mask)) | ||
| 84 | return -EFAULT; | 86 | return -EFAULT; |
| 85 | __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
| 86 | __get_user(mask, &act->sa_mask); | ||
| 87 | siginitset(&new_ka.sa.sa_mask, mask); | 87 | siginitset(&new_ka.sa.sa_mask, mask); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| @@ -92,10 +92,10 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
| 92 | if (!ret && oact) { | 92 | if (!ret && oact) { |
| 93 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || | 93 | if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || |
| 94 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || | 94 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || |
| 95 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) | 95 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || |
| 96 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || | ||
| 97 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) | ||
| 96 | return -EFAULT; | 98 | return -EFAULT; |
| 97 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
| 98 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | return ret; | 101 | return ret; |
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 66375a5e3d12..92ecffbc8d82 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
| @@ -462,7 +462,8 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
| 462 | local_irq_enable(); | 462 | local_irq_enable(); |
| 463 | 463 | ||
| 464 | if (regs->psw.mask & PSW_MASK_PSTATE) { | 464 | if (regs->psw.mask & PSW_MASK_PSTATE) { |
| 465 | get_user(*((__u16 *) opcode), (__u16 __user *) location); | 465 | if (get_user(*((__u16 *) opcode), (__u16 __user *) location)) |
| 466 | return; | ||
| 466 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { | 467 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { |
| 467 | if (current->ptrace & PT_PTRACED) | 468 | if (current->ptrace & PT_PTRACED) |
| 468 | force_sig(SIGTRAP, current); | 469 | force_sig(SIGTRAP, current); |
| @@ -470,20 +471,25 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
| 470 | signal = SIGILL; | 471 | signal = SIGILL; |
| 471 | #ifdef CONFIG_MATHEMU | 472 | #ifdef CONFIG_MATHEMU |
| 472 | } else if (opcode[0] == 0xb3) { | 473 | } else if (opcode[0] == 0xb3) { |
| 473 | get_user(*((__u16 *) (opcode+2)), location+1); | 474 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 475 | return; | ||
| 474 | signal = math_emu_b3(opcode, regs); | 476 | signal = math_emu_b3(opcode, regs); |
| 475 | } else if (opcode[0] == 0xed) { | 477 | } else if (opcode[0] == 0xed) { |
| 476 | get_user(*((__u32 *) (opcode+2)), | 478 | if (get_user(*((__u32 *) (opcode+2)), |
| 477 | (__u32 __user *)(location+1)); | 479 | (__u32 __user *)(location+1))) |
| 480 | return; | ||
| 478 | signal = math_emu_ed(opcode, regs); | 481 | signal = math_emu_ed(opcode, regs); |
| 479 | } else if (*((__u16 *) opcode) == 0xb299) { | 482 | } else if (*((__u16 *) opcode) == 0xb299) { |
| 480 | get_user(*((__u16 *) (opcode+2)), location+1); | 483 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 484 | return; | ||
| 481 | signal = math_emu_srnm(opcode, regs); | 485 | signal = math_emu_srnm(opcode, regs); |
| 482 | } else if (*((__u16 *) opcode) == 0xb29c) { | 486 | } else if (*((__u16 *) opcode) == 0xb29c) { |
| 483 | get_user(*((__u16 *) (opcode+2)), location+1); | 487 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 488 | return; | ||
| 484 | signal = math_emu_stfpc(opcode, regs); | 489 | signal = math_emu_stfpc(opcode, regs); |
| 485 | } else if (*((__u16 *) opcode) == 0xb29d) { | 490 | } else if (*((__u16 *) opcode) == 0xb29d) { |
| 486 | get_user(*((__u16 *) (opcode+2)), location+1); | 491 | if (get_user(*((__u16 *) (opcode+2)), location+1)) |
| 492 | return; | ||
| 487 | signal = math_emu_lfpc(opcode, regs); | 493 | signal = math_emu_lfpc(opcode, regs); |
| 488 | #endif | 494 | #endif |
| 489 | } else | 495 | } else |
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S index af9e69a03011..fe0f2e97ba7b 100644 --- a/arch/s390/kernel/vmlinux.lds.S +++ b/arch/s390/kernel/vmlinux.lds.S | |||
| @@ -83,13 +83,7 @@ SECTIONS | |||
| 83 | __setup_end = .; | 83 | __setup_end = .; |
| 84 | __initcall_start = .; | 84 | __initcall_start = .; |
| 85 | .initcall.init : { | 85 | .initcall.init : { |
| 86 | *(.initcall1.init) | 86 | INITCALLS |
| 87 | *(.initcall2.init) | ||
| 88 | *(.initcall3.init) | ||
| 89 | *(.initcall4.init) | ||
| 90 | *(.initcall5.init) | ||
| 91 | *(.initcall6.init) | ||
| 92 | *(.initcall7.init) | ||
| 93 | } | 87 | } |
| 94 | __initcall_end = .; | 88 | __initcall_end = .; |
| 95 | __con_initcall_start = .; | 89 | __con_initcall_start = .; |
diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S index 5eb930918186..77b4026d5688 100644 --- a/arch/sh/kernel/vmlinux.lds.S +++ b/arch/sh/kernel/vmlinux.lds.S | |||
| @@ -76,13 +76,7 @@ SECTIONS | |||
| 76 | __setup_end = .; | 76 | __setup_end = .; |
| 77 | __initcall_start = .; | 77 | __initcall_start = .; |
| 78 | .initcall.init : { | 78 | .initcall.init : { |
| 79 | *(.initcall1.init) | 79 | INITCALLS |
| 80 | *(.initcall2.init) | ||
| 81 | *(.initcall3.init) | ||
| 82 | *(.initcall4.init) | ||
| 83 | *(.initcall5.init) | ||
| 84 | *(.initcall6.init) | ||
| 85 | *(.initcall7.init) | ||
| 86 | } | 80 | } |
| 87 | __initcall_end = .; | 81 | __initcall_end = .; |
| 88 | __con_initcall_start = .; | 82 | __con_initcall_start = .; |
diff --git a/arch/sh64/kernel/vmlinux.lds.S b/arch/sh64/kernel/vmlinux.lds.S index a8fcc3a71585..95c4d753e357 100644 --- a/arch/sh64/kernel/vmlinux.lds.S +++ b/arch/sh64/kernel/vmlinux.lds.S | |||
| @@ -108,13 +108,7 @@ SECTIONS | |||
| 108 | __setup_end = .; | 108 | __setup_end = .; |
| 109 | __initcall_start = .; | 109 | __initcall_start = .; |
| 110 | .initcall.init : C_PHYS(.initcall.init) { | 110 | .initcall.init : C_PHYS(.initcall.init) { |
| 111 | *(.initcall1.init) | 111 | INITCALLS |
| 112 | *(.initcall2.init) | ||
| 113 | *(.initcall3.init) | ||
| 114 | *(.initcall4.init) | ||
| 115 | *(.initcall5.init) | ||
| 116 | *(.initcall6.init) | ||
| 117 | *(.initcall7.init) | ||
| 118 | } | 112 | } |
| 119 | __initcall_end = .; | 113 | __initcall_end = .; |
| 120 | __con_initcall_start = .; | 114 | __con_initcall_start = .; |
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c index 75ac24d229b1..ba58c3a061fd 100644 --- a/arch/sparc/kernel/ebus.c +++ b/arch/sparc/kernel/ebus.c | |||
| @@ -237,12 +237,12 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d | |||
| 237 | dev->ofdev.node = dp; | 237 | dev->ofdev.node = dp; |
| 238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; | 238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; |
| 239 | dev->ofdev.dev.bus = &ebus_bus_type; | 239 | dev->ofdev.dev.bus = &ebus_bus_type; |
| 240 | strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); | 240 | sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); |
| 241 | 241 | ||
| 242 | /* Register with core */ | 242 | /* Register with core */ |
| 243 | if (of_device_register(&dev->ofdev) != 0) | 243 | if (of_device_register(&dev->ofdev) != 0) |
| 244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 245 | dev->ofdev.dev.bus_id); | 245 | dp->path_component_name); |
| 246 | 246 | ||
| 247 | if ((dp = dp->child) != NULL) { | 247 | if ((dp = dp->child) != NULL) { |
| 248 | dev->children = (struct linux_ebus_child *) | 248 | dev->children = (struct linux_ebus_child *) |
| @@ -332,12 +332,12 @@ void __init ebus_init(void) | |||
| 332 | ebus->ofdev.node = dp; | 332 | ebus->ofdev.node = dp; |
| 333 | ebus->ofdev.dev.parent = &pdev->dev; | 333 | ebus->ofdev.dev.parent = &pdev->dev; |
| 334 | ebus->ofdev.dev.bus = &ebus_bus_type; | 334 | ebus->ofdev.dev.bus = &ebus_bus_type; |
| 335 | strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); | 335 | sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); |
| 336 | 336 | ||
| 337 | /* Register with core */ | 337 | /* Register with core */ |
| 338 | if (of_device_register(&ebus->ofdev) != 0) | 338 | if (of_device_register(&ebus->ofdev) != 0) |
| 339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 340 | ebus->ofdev.dev.bus_id); | 340 | dp->path_component_name); |
| 341 | 341 | ||
| 342 | 342 | ||
| 343 | nd = dp->child; | 343 | nd = dp->child; |
diff --git a/arch/sparc/kernel/of_device.c b/arch/sparc/kernel/of_device.c index 74bef2a2d37f..46200c43ffb1 100644 --- a/arch/sparc/kernel/of_device.c +++ b/arch/sparc/kernel/of_device.c | |||
| @@ -651,7 +651,7 @@ build_resources: | |||
| 651 | if (!parent) | 651 | if (!parent) |
| 652 | strcpy(op->dev.bus_id, "root"); | 652 | strcpy(op->dev.bus_id, "root"); |
| 653 | else | 653 | else |
| 654 | strcpy(op->dev.bus_id, dp->path_component_name); | 654 | sprintf(op->dev.bus_id, "%08x", dp->node); |
| 655 | 655 | ||
| 656 | if (of_device_register(op)) { | 656 | if (of_device_register(op)) { |
| 657 | printk("%s: Could not register of device.\n", | 657 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 1dd78c84888a..5cc5ff7f8824 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
| @@ -49,13 +49,7 @@ SECTIONS | |||
| 49 | __setup_end = .; | 49 | __setup_end = .; |
| 50 | __initcall_start = .; | 50 | __initcall_start = .; |
| 51 | .initcall.init : { | 51 | .initcall.init : { |
| 52 | *(.initcall1.init) | 52 | INITCALLS |
| 53 | *(.initcall2.init) | ||
| 54 | *(.initcall3.init) | ||
| 55 | *(.initcall4.init) | ||
| 56 | *(.initcall5.init) | ||
| 57 | *(.initcall6.init) | ||
| 58 | *(.initcall7.init) | ||
| 59 | } | 53 | } |
| 60 | __initcall_end = .; | 54 | __initcall_end = .; |
| 61 | __con_initcall_start = .; | 55 | __con_initcall_start = .; |
diff --git a/arch/sparc64/kernel/central.c b/arch/sparc64/kernel/central.c index b66336db00ee..e724c54af029 100644 --- a/arch/sparc64/kernel/central.c +++ b/arch/sparc64/kernel/central.c | |||
| @@ -126,6 +126,10 @@ static void probe_other_fhcs(void) | |||
| 126 | int board; | 126 | int board; |
| 127 | u32 tmp; | 127 | u32 tmp; |
| 128 | 128 | ||
| 129 | if (dp->parent && | ||
| 130 | dp->parent->parent != NULL) | ||
| 131 | continue; | ||
| 132 | |||
| 129 | fhc = (struct linux_fhc *) | 133 | fhc = (struct linux_fhc *) |
| 130 | central_alloc_bootmem(sizeof(struct linux_fhc)); | 134 | central_alloc_bootmem(sizeof(struct linux_fhc)); |
| 131 | if (fhc == NULL) | 135 | if (fhc == NULL) |
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c index 2df25c2b4071..35bf895fdeee 100644 --- a/arch/sparc64/kernel/ebus.c +++ b/arch/sparc64/kernel/ebus.c | |||
| @@ -389,12 +389,12 @@ static void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_de | |||
| 389 | dev->ofdev.node = dp; | 389 | dev->ofdev.node = dp; |
| 390 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; | 390 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; |
| 391 | dev->ofdev.dev.bus = &ebus_bus_type; | 391 | dev->ofdev.dev.bus = &ebus_bus_type; |
| 392 | strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); | 392 | sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); |
| 393 | 393 | ||
| 394 | /* Register with core */ | 394 | /* Register with core */ |
| 395 | if (of_device_register(&dev->ofdev) != 0) | 395 | if (of_device_register(&dev->ofdev) != 0) |
| 396 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 396 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 397 | dev->ofdev.dev.bus_id); | 397 | dp->path_component_name); |
| 398 | 398 | ||
| 399 | dp = dp->child; | 399 | dp = dp->child; |
| 400 | if (dp) { | 400 | if (dp) { |
| @@ -494,12 +494,12 @@ void __init ebus_init(void) | |||
| 494 | ebus->ofdev.node = dp; | 494 | ebus->ofdev.node = dp; |
| 495 | ebus->ofdev.dev.parent = &pdev->dev; | 495 | ebus->ofdev.dev.parent = &pdev->dev; |
| 496 | ebus->ofdev.dev.bus = &ebus_bus_type; | 496 | ebus->ofdev.dev.bus = &ebus_bus_type; |
| 497 | strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); | 497 | sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); |
| 498 | 498 | ||
| 499 | /* Register with core */ | 499 | /* Register with core */ |
| 500 | if (of_device_register(&ebus->ofdev) != 0) | 500 | if (of_device_register(&ebus->ofdev) != 0) |
| 501 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 501 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
| 502 | ebus->ofdev.dev.bus_id); | 502 | dp->path_component_name); |
| 503 | 503 | ||
| 504 | 504 | ||
| 505 | child = dp->child; | 505 | child = dp->child; |
diff --git a/arch/sparc64/kernel/isa.c b/arch/sparc64/kernel/isa.c index 0f3aec72ef5f..f028e68b23f2 100644 --- a/arch/sparc64/kernel/isa.c +++ b/arch/sparc64/kernel/isa.c | |||
| @@ -115,12 +115,12 @@ static void __init isa_fill_devices(struct sparc_isa_bridge *isa_br) | |||
| 115 | isa_dev->ofdev.node = dp; | 115 | isa_dev->ofdev.node = dp; |
| 116 | isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev; | 116 | isa_dev->ofdev.dev.parent = &isa_br->ofdev.dev; |
| 117 | isa_dev->ofdev.dev.bus = &isa_bus_type; | 117 | isa_dev->ofdev.dev.bus = &isa_bus_type; |
| 118 | strcpy(isa_dev->ofdev.dev.bus_id, dp->path_component_name); | 118 | sprintf(isa_dev->ofdev.dev.bus_id, "isa[%08x]", dp->node); |
| 119 | 119 | ||
| 120 | /* Register with core */ | 120 | /* Register with core */ |
| 121 | if (of_device_register(&isa_dev->ofdev) != 0) { | 121 | if (of_device_register(&isa_dev->ofdev) != 0) { |
| 122 | printk(KERN_DEBUG "isa: device registration error for %s!\n", | 122 | printk(KERN_DEBUG "isa: device registration error for %s!\n", |
| 123 | isa_dev->ofdev.dev.bus_id); | 123 | dp->path_component_name); |
| 124 | kfree(isa_dev); | 124 | kfree(isa_dev); |
| 125 | goto next_sibling; | 125 | goto next_sibling; |
| 126 | } | 126 | } |
| @@ -191,12 +191,12 @@ void __init isa_init(void) | |||
| 191 | isa_br->ofdev.node = dp; | 191 | isa_br->ofdev.node = dp; |
| 192 | isa_br->ofdev.dev.parent = &pdev->dev; | 192 | isa_br->ofdev.dev.parent = &pdev->dev; |
| 193 | isa_br->ofdev.dev.bus = &isa_bus_type; | 193 | isa_br->ofdev.dev.bus = &isa_bus_type; |
| 194 | strcpy(isa_br->ofdev.dev.bus_id, dp->path_component_name); | 194 | sprintf(isa_br->ofdev.dev.bus_id, "isa%d", index); |
| 195 | 195 | ||
| 196 | /* Register with core */ | 196 | /* Register with core */ |
| 197 | if (of_device_register(&isa_br->ofdev) != 0) { | 197 | if (of_device_register(&isa_br->ofdev) != 0) { |
| 198 | printk(KERN_DEBUG "isa: device registration error for %s!\n", | 198 | printk(KERN_DEBUG "isa: device registration error for %s!\n", |
| 199 | isa_br->ofdev.dev.bus_id); | 199 | dp->path_component_name); |
| 200 | kfree(isa_br); | 200 | kfree(isa_br); |
| 201 | return; | 201 | return; |
| 202 | } | 202 | } |
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index d3dfb2a36d47..8cc14fc6b6f1 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c | |||
| @@ -402,16 +402,22 @@ static void of_bus_sbus_count_cells(struct device_node *child, | |||
| 402 | *sizec = 1; | 402 | *sizec = 1; |
| 403 | } | 403 | } |
| 404 | 404 | ||
| 405 | static int of_bus_sbus_map(u32 *addr, const u32 *range, int na, int ns, int pna) | 405 | /* |
| 406 | { | 406 | * FHC/Central bus specific translator. |
| 407 | return of_bus_default_map(addr, range, na, ns, pna); | 407 | * |
| 408 | } | 408 | * This is just needed to hard-code the address and size cell |
| 409 | 409 | * counts. 'fhc' and 'central' nodes lack the #address-cells and | |
| 410 | static unsigned int of_bus_sbus_get_flags(u32 *addr) | 410 | * #size-cells properties, and if you walk to the root on such |
| 411 | * Enterprise boxes all you'll get is a #size-cells of 2 which is | ||
| 412 | * not what we want to use. | ||
| 413 | */ | ||
| 414 | static int of_bus_fhc_match(struct device_node *np) | ||
| 411 | { | 415 | { |
| 412 | return IORESOURCE_MEM; | 416 | return !strcmp(np->name, "fhc") || |
| 417 | !strcmp(np->name, "central"); | ||
| 413 | } | 418 | } |
| 414 | 419 | ||
| 420 | #define of_bus_fhc_count_cells of_bus_sbus_count_cells | ||
| 415 | 421 | ||
| 416 | /* | 422 | /* |
| 417 | * Array of bus specific translators | 423 | * Array of bus specific translators |
| @@ -433,8 +439,17 @@ static struct of_bus of_busses[] = { | |||
| 433 | .addr_prop_name = "reg", | 439 | .addr_prop_name = "reg", |
| 434 | .match = of_bus_sbus_match, | 440 | .match = of_bus_sbus_match, |
| 435 | .count_cells = of_bus_sbus_count_cells, | 441 | .count_cells = of_bus_sbus_count_cells, |
| 436 | .map = of_bus_sbus_map, | 442 | .map = of_bus_default_map, |
| 437 | .get_flags = of_bus_sbus_get_flags, | 443 | .get_flags = of_bus_default_get_flags, |
| 444 | }, | ||
| 445 | /* FHC */ | ||
| 446 | { | ||
| 447 | .name = "fhc", | ||
| 448 | .addr_prop_name = "reg", | ||
| 449 | .match = of_bus_fhc_match, | ||
| 450 | .count_cells = of_bus_fhc_count_cells, | ||
| 451 | .map = of_bus_default_map, | ||
| 452 | .get_flags = of_bus_default_get_flags, | ||
| 438 | }, | 453 | }, |
| 439 | /* Default */ | 454 | /* Default */ |
| 440 | { | 455 | { |
| @@ -846,7 +861,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 846 | if (!parent) | 861 | if (!parent) |
| 847 | strcpy(op->dev.bus_id, "root"); | 862 | strcpy(op->dev.bus_id, "root"); |
| 848 | else | 863 | else |
| 849 | sprintf(op->dev.bus_id, "%s@%08x", dp->name, dp->node); | 864 | sprintf(op->dev.bus_id, "%08x", dp->node); |
| 850 | 865 | ||
| 851 | if (of_device_register(op)) { | 866 | if (of_device_register(op)) { |
| 852 | printk("%s: Could not register of device.\n", | 867 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c index 82e5455134c6..2e7f1427088a 100644 --- a/arch/sparc64/kernel/pci_iommu.c +++ b/arch/sparc64/kernel/pci_iommu.c | |||
| @@ -281,7 +281,7 @@ static void pci_4u_free_consistent(struct pci_dev *pdev, size_t size, void *cpu, | |||
| 281 | 281 | ||
| 282 | spin_lock_irqsave(&iommu->lock, flags); | 282 | spin_lock_irqsave(&iommu->lock, flags); |
| 283 | 283 | ||
| 284 | free_npages(iommu, dvma, npages); | 284 | free_npages(iommu, dvma - iommu->page_table_map_base, npages); |
| 285 | 285 | ||
| 286 | spin_unlock_irqrestore(&iommu->lock, flags); | 286 | spin_unlock_irqrestore(&iommu->lock, flags); |
| 287 | 287 | ||
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index e21cd6afa709..c60efb3cb22e 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c | |||
| @@ -1079,23 +1079,22 @@ static void sun4v_vdev_irq_trans_init(struct device_node *dp) | |||
| 1079 | 1079 | ||
| 1080 | static void irq_trans_init(struct device_node *dp) | 1080 | static void irq_trans_init(struct device_node *dp) |
| 1081 | { | 1081 | { |
| 1082 | const char *model; | ||
| 1083 | #ifdef CONFIG_PCI | 1082 | #ifdef CONFIG_PCI |
| 1083 | const char *model; | ||
| 1084 | int i; | 1084 | int i; |
| 1085 | #endif | 1085 | #endif |
| 1086 | 1086 | ||
| 1087 | #ifdef CONFIG_PCI | ||
| 1087 | model = of_get_property(dp, "model", NULL); | 1088 | model = of_get_property(dp, "model", NULL); |
| 1088 | if (!model) | 1089 | if (!model) |
| 1089 | model = of_get_property(dp, "compatible", NULL); | 1090 | model = of_get_property(dp, "compatible", NULL); |
| 1090 | if (!model) | 1091 | if (model) { |
| 1091 | return; | 1092 | for (i = 0; i < ARRAY_SIZE(pci_irq_trans_table); i++) { |
| 1092 | 1093 | struct irq_trans *t = &pci_irq_trans_table[i]; | |
| 1093 | #ifdef CONFIG_PCI | ||
| 1094 | for (i = 0; i < ARRAY_SIZE(pci_irq_trans_table); i++) { | ||
| 1095 | struct irq_trans *t = &pci_irq_trans_table[i]; | ||
| 1096 | 1094 | ||
| 1097 | if (!strcmp(model, t->name)) | 1095 | if (!strcmp(model, t->name)) |
| 1098 | return t->init(dp); | 1096 | return t->init(dp); |
| 1097 | } | ||
| 1099 | } | 1098 | } |
| 1100 | #endif | 1099 | #endif |
| 1101 | #ifdef CONFIG_SBUS | 1100 | #ifdef CONFIG_SBUS |
| @@ -1103,8 +1102,9 @@ static void irq_trans_init(struct device_node *dp) | |||
| 1103 | !strcmp(dp->name, "sbi")) | 1102 | !strcmp(dp->name, "sbi")) |
| 1104 | return sbus_irq_trans_init(dp); | 1103 | return sbus_irq_trans_init(dp); |
| 1105 | #endif | 1104 | #endif |
| 1106 | if (!strcmp(dp->name, "central")) | 1105 | if (!strcmp(dp->name, "fhc") && |
| 1107 | return central_irq_trans_init(dp->child); | 1106 | !strcmp(dp->parent->name, "central")) |
| 1107 | return central_irq_trans_init(dp); | ||
| 1108 | if (!strcmp(dp->name, "virtual-devices")) | 1108 | if (!strcmp(dp->name, "virtual-devices")) |
| 1109 | return sun4v_vdev_irq_trans_init(dp); | 1109 | return sun4v_vdev_irq_trans_init(dp); |
| 1110 | } | 1110 | } |
| @@ -1516,7 +1516,7 @@ static char * __init get_one_property(phandle node, const char *name) | |||
| 1516 | return buf; | 1516 | return buf; |
| 1517 | } | 1517 | } |
| 1518 | 1518 | ||
| 1519 | static struct device_node * __init create_node(phandle node) | 1519 | static struct device_node * __init create_node(phandle node, struct device_node *parent) |
| 1520 | { | 1520 | { |
| 1521 | struct device_node *dp; | 1521 | struct device_node *dp; |
| 1522 | 1522 | ||
| @@ -1525,6 +1525,7 @@ static struct device_node * __init create_node(phandle node) | |||
| 1525 | 1525 | ||
| 1526 | dp = prom_early_alloc(sizeof(*dp)); | 1526 | dp = prom_early_alloc(sizeof(*dp)); |
| 1527 | dp->unique_id = unique_id++; | 1527 | dp->unique_id = unique_id++; |
| 1528 | dp->parent = parent; | ||
| 1528 | 1529 | ||
| 1529 | kref_init(&dp->kref); | 1530 | kref_init(&dp->kref); |
| 1530 | 1531 | ||
| @@ -1543,12 +1544,11 @@ static struct device_node * __init build_tree(struct device_node *parent, phandl | |||
| 1543 | { | 1544 | { |
| 1544 | struct device_node *dp; | 1545 | struct device_node *dp; |
| 1545 | 1546 | ||
| 1546 | dp = create_node(node); | 1547 | dp = create_node(node, parent); |
| 1547 | if (dp) { | 1548 | if (dp) { |
| 1548 | *(*nextp) = dp; | 1549 | *(*nextp) = dp; |
| 1549 | *nextp = &dp->allnext; | 1550 | *nextp = &dp->allnext; |
| 1550 | 1551 | ||
| 1551 | dp->parent = parent; | ||
| 1552 | dp->path_component_name = build_path_component(dp); | 1552 | dp->path_component_name = build_path_component(dp); |
| 1553 | dp->full_name = build_full_name(dp); | 1553 | dp->full_name = build_full_name(dp); |
| 1554 | 1554 | ||
| @@ -1564,7 +1564,7 @@ void __init prom_build_devicetree(void) | |||
| 1564 | { | 1564 | { |
| 1565 | struct device_node **nextp; | 1565 | struct device_node **nextp; |
| 1566 | 1566 | ||
| 1567 | allnodes = create_node(prom_root_node); | 1567 | allnodes = create_node(prom_root_node, NULL); |
| 1568 | allnodes->path_component_name = ""; | 1568 | allnodes->path_component_name = ""; |
| 1569 | allnodes->full_name = "/"; | 1569 | allnodes->full_name = "/"; |
| 1570 | 1570 | ||
diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S index b097379a49a8..bd9de8c2a2aa 100644 --- a/arch/sparc64/kernel/vmlinux.lds.S +++ b/arch/sparc64/kernel/vmlinux.lds.S | |||
| @@ -57,13 +57,7 @@ SECTIONS | |||
| 57 | __setup_end = .; | 57 | __setup_end = .; |
| 58 | __initcall_start = .; | 58 | __initcall_start = .; |
| 59 | .initcall.init : { | 59 | .initcall.init : { |
| 60 | *(.initcall1.init) | 60 | INITCALLS |
| 61 | *(.initcall2.init) | ||
| 62 | *(.initcall3.init) | ||
| 63 | *(.initcall4.init) | ||
| 64 | *(.initcall5.init) | ||
| 65 | *(.initcall6.init) | ||
| 66 | *(.initcall7.init) | ||
| 67 | } | 61 | } |
| 68 | __initcall_end = .; | 62 | __initcall_end = .; |
| 69 | __con_initcall_start = .; | 63 | __con_initcall_start = .; |
diff --git a/arch/v850/kernel/vmlinux.lds.S b/arch/v850/kernel/vmlinux.lds.S index 63399219cd9f..88d087f527c9 100644 --- a/arch/v850/kernel/vmlinux.lds.S +++ b/arch/v850/kernel/vmlinux.lds.S | |||
| @@ -140,13 +140,7 @@ | |||
| 140 | ___setup_end = . ; \ | 140 | ___setup_end = . ; \ |
| 141 | ___initcall_start = . ; \ | 141 | ___initcall_start = . ; \ |
| 142 | *(.initcall.init) \ | 142 | *(.initcall.init) \ |
| 143 | *(.initcall1.init) \ | 143 | INITCALLS \ |
| 144 | *(.initcall2.init) \ | ||
| 145 | *(.initcall3.init) \ | ||
| 146 | *(.initcall4.init) \ | ||
| 147 | *(.initcall5.init) \ | ||
| 148 | *(.initcall6.init) \ | ||
| 149 | *(.initcall7.init) \ | ||
| 150 | . = ALIGN (4) ; \ | 144 | . = ALIGN (4) ; \ |
| 151 | ___initcall_end = . ; \ | 145 | ___initcall_end = . ; \ |
| 152 | ___con_initcall_start = .; \ | 146 | ___con_initcall_start = .; \ |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index b000017e4b5d..fe429e5d6b29 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
| @@ -63,7 +63,7 @@ int timer_over_8254 __initdata = 1; | |||
| 63 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 63 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; |
| 64 | 64 | ||
| 65 | static DEFINE_SPINLOCK(ioapic_lock); | 65 | static DEFINE_SPINLOCK(ioapic_lock); |
| 66 | static DEFINE_SPINLOCK(vector_lock); | 66 | DEFINE_SPINLOCK(vector_lock); |
| 67 | 67 | ||
| 68 | /* | 68 | /* |
| 69 | * # of IRQ routing registers | 69 | * # of IRQ routing registers |
| @@ -612,15 +612,15 @@ static int __assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 612 | * Also, we've got to be careful not to trash gate | 612 | * Also, we've got to be careful not to trash gate |
| 613 | * 0x80, because int 0x80 is hm, kind of importantish. ;) | 613 | * 0x80, because int 0x80 is hm, kind of importantish. ;) |
| 614 | */ | 614 | */ |
| 615 | static struct { | 615 | static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0; |
| 616 | int vector; | ||
| 617 | int offset; | ||
| 618 | } pos[NR_CPUS] = { [ 0 ... NR_CPUS - 1] = {FIRST_DEVICE_VECTOR, 0} }; | ||
| 619 | int old_vector = -1; | 616 | int old_vector = -1; |
| 620 | int cpu; | 617 | int cpu; |
| 621 | 618 | ||
| 622 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 619 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
| 623 | 620 | ||
| 621 | /* Only try and allocate irqs on cpus that are present */ | ||
| 622 | cpus_and(mask, mask, cpu_online_map); | ||
| 623 | |||
| 624 | if (irq_vector[irq] > 0) | 624 | if (irq_vector[irq] > 0) |
| 625 | old_vector = irq_vector[irq]; | 625 | old_vector = irq_vector[irq]; |
| 626 | if (old_vector > 0) { | 626 | if (old_vector > 0) { |
| @@ -630,15 +630,15 @@ static int __assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 630 | } | 630 | } |
| 631 | 631 | ||
| 632 | for_each_cpu_mask(cpu, mask) { | 632 | for_each_cpu_mask(cpu, mask) { |
| 633 | cpumask_t domain; | 633 | cpumask_t domain, new_mask; |
| 634 | int first, new_cpu; | 634 | int new_cpu; |
| 635 | int vector, offset; | 635 | int vector, offset; |
| 636 | 636 | ||
| 637 | domain = vector_allocation_domain(cpu); | 637 | domain = vector_allocation_domain(cpu); |
| 638 | first = first_cpu(domain); | 638 | cpus_and(new_mask, domain, cpu_online_map); |
| 639 | 639 | ||
| 640 | vector = pos[first].vector; | 640 | vector = current_vector; |
| 641 | offset = pos[first].offset; | 641 | offset = current_offset; |
| 642 | next: | 642 | next: |
| 643 | vector += 8; | 643 | vector += 8; |
| 644 | if (vector >= FIRST_SYSTEM_VECTOR) { | 644 | if (vector >= FIRST_SYSTEM_VECTOR) { |
| @@ -646,24 +646,24 @@ next: | |||
| 646 | offset = (offset + 1) % 8; | 646 | offset = (offset + 1) % 8; |
| 647 | vector = FIRST_DEVICE_VECTOR + offset; | 647 | vector = FIRST_DEVICE_VECTOR + offset; |
| 648 | } | 648 | } |
| 649 | if (unlikely(pos[first].vector == vector)) | 649 | if (unlikely(current_vector == vector)) |
| 650 | continue; | 650 | continue; |
| 651 | if (vector == IA32_SYSCALL_VECTOR) | 651 | if (vector == IA32_SYSCALL_VECTOR) |
| 652 | goto next; | 652 | goto next; |
| 653 | for_each_cpu_mask(new_cpu, domain) | 653 | for_each_cpu_mask(new_cpu, new_mask) |
| 654 | if (per_cpu(vector_irq, new_cpu)[vector] != -1) | 654 | if (per_cpu(vector_irq, new_cpu)[vector] != -1) |
| 655 | goto next; | 655 | goto next; |
| 656 | /* Found one! */ | 656 | /* Found one! */ |
| 657 | for_each_cpu_mask(new_cpu, domain) { | 657 | current_vector = vector; |
| 658 | pos[new_cpu].vector = vector; | 658 | current_offset = offset; |
| 659 | pos[new_cpu].offset = offset; | ||
| 660 | } | ||
| 661 | if (old_vector >= 0) { | 659 | if (old_vector >= 0) { |
| 660 | cpumask_t old_mask; | ||
| 662 | int old_cpu; | 661 | int old_cpu; |
| 663 | for_each_cpu_mask(old_cpu, irq_domain[irq]) | 662 | cpus_and(old_mask, irq_domain[irq], cpu_online_map); |
| 663 | for_each_cpu_mask(old_cpu, old_mask) | ||
| 664 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; | 664 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; |
| 665 | } | 665 | } |
| 666 | for_each_cpu_mask(new_cpu, domain) | 666 | for_each_cpu_mask(new_cpu, new_mask) |
| 667 | per_cpu(vector_irq, new_cpu)[vector] = irq; | 667 | per_cpu(vector_irq, new_cpu)[vector] = irq; |
| 668 | irq_vector[irq] = vector; | 668 | irq_vector[irq] = vector; |
| 669 | irq_domain[irq] = domain; | 669 | irq_domain[irq] = domain; |
| @@ -684,6 +684,32 @@ static int assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) | |||
| 684 | return vector; | 684 | return vector; |
| 685 | } | 685 | } |
| 686 | 686 | ||
| 687 | void __setup_vector_irq(int cpu) | ||
| 688 | { | ||
| 689 | /* Initialize vector_irq on a new cpu */ | ||
| 690 | /* This function must be called with vector_lock held */ | ||
| 691 | unsigned long flags; | ||
| 692 | int irq, vector; | ||
| 693 | |||
| 694 | |||
| 695 | /* Mark the inuse vectors */ | ||
| 696 | for (irq = 0; irq < NR_IRQ_VECTORS; ++irq) { | ||
| 697 | if (!cpu_isset(cpu, irq_domain[irq])) | ||
| 698 | continue; | ||
| 699 | vector = irq_vector[irq]; | ||
| 700 | per_cpu(vector_irq, cpu)[vector] = irq; | ||
| 701 | } | ||
| 702 | /* Mark the free vectors */ | ||
| 703 | for (vector = 0; vector < NR_VECTORS; ++vector) { | ||
| 704 | irq = per_cpu(vector_irq, cpu)[vector]; | ||
| 705 | if (irq < 0) | ||
| 706 | continue; | ||
| 707 | if (!cpu_isset(cpu, irq_domain[irq])) | ||
| 708 | per_cpu(vector_irq, cpu)[vector] = -1; | ||
| 709 | } | ||
| 710 | } | ||
| 711 | |||
| 712 | |||
| 687 | extern void (*interrupt[NR_IRQS])(void); | 713 | extern void (*interrupt[NR_IRQS])(void); |
| 688 | 714 | ||
| 689 | static struct irq_chip ioapic_chip; | 715 | static struct irq_chip ioapic_chip; |
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c index 7b7a6870288a..62c2e747af58 100644 --- a/arch/x86_64/kernel/smpboot.c +++ b/arch/x86_64/kernel/smpboot.c | |||
| @@ -581,12 +581,16 @@ void __cpuinit start_secondary(void) | |||
| 581 | * smp_call_function(). | 581 | * smp_call_function(). |
| 582 | */ | 582 | */ |
| 583 | lock_ipi_call_lock(); | 583 | lock_ipi_call_lock(); |
| 584 | spin_lock(&vector_lock); | ||
| 584 | 585 | ||
| 586 | /* Setup the per cpu irq handling data structures */ | ||
| 587 | __setup_vector_irq(smp_processor_id()); | ||
| 585 | /* | 588 | /* |
| 586 | * Allow the master to continue. | 589 | * Allow the master to continue. |
| 587 | */ | 590 | */ |
| 588 | cpu_set(smp_processor_id(), cpu_online_map); | 591 | cpu_set(smp_processor_id(), cpu_online_map); |
| 589 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; | 592 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; |
| 593 | spin_unlock(&vector_lock); | ||
| 590 | unlock_ipi_call_lock(); | 594 | unlock_ipi_call_lock(); |
| 591 | 595 | ||
| 592 | cpu_idle(); | 596 | cpu_idle(); |
| @@ -799,7 +803,6 @@ static int __cpuinit do_boot_cpu(int cpu, int apicid) | |||
| 799 | cpu, node); | 803 | cpu, node); |
| 800 | } | 804 | } |
| 801 | 805 | ||
| 802 | |||
| 803 | alternatives_smp_switch(1); | 806 | alternatives_smp_switch(1); |
| 804 | 807 | ||
| 805 | c_idle.idle = get_idle_for_cpu(cpu); | 808 | c_idle.idle = get_idle_for_cpu(cpu); |
| @@ -1246,8 +1249,10 @@ int __cpu_disable(void) | |||
| 1246 | local_irq_disable(); | 1249 | local_irq_disable(); |
| 1247 | remove_siblinginfo(cpu); | 1250 | remove_siblinginfo(cpu); |
| 1248 | 1251 | ||
| 1252 | spin_lock(&vector_lock); | ||
| 1249 | /* It's now safe to remove this processor from the online map */ | 1253 | /* It's now safe to remove this processor from the online map */ |
| 1250 | cpu_clear(cpu, cpu_online_map); | 1254 | cpu_clear(cpu, cpu_online_map); |
| 1255 | spin_unlock(&vector_lock); | ||
| 1251 | remove_cpu_from_maps(); | 1256 | remove_cpu_from_maps(); |
| 1252 | fixup_irqs(cpu_online_map); | 1257 | fixup_irqs(cpu_online_map); |
| 1253 | return 0; | 1258 | return 0; |
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S index 1283614c9b24..edb24aa714b4 100644 --- a/arch/x86_64/kernel/vmlinux.lds.S +++ b/arch/x86_64/kernel/vmlinux.lds.S | |||
| @@ -175,13 +175,7 @@ SECTIONS | |||
| 175 | __setup_end = .; | 175 | __setup_end = .; |
| 176 | __initcall_start = .; | 176 | __initcall_start = .; |
| 177 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { | 177 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { |
| 178 | *(.initcall1.init) | 178 | INITCALLS |
| 179 | *(.initcall2.init) | ||
| 180 | *(.initcall3.init) | ||
| 181 | *(.initcall4.init) | ||
| 182 | *(.initcall5.init) | ||
| 183 | *(.initcall6.init) | ||
| 184 | *(.initcall7.init) | ||
| 185 | } | 179 | } |
| 186 | __initcall_end = .; | 180 | __initcall_end = .; |
| 187 | __con_initcall_start = .; | 181 | __con_initcall_start = .; |
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c index 7732f4254d21..e61093b34c26 100644 --- a/arch/x86_64/pci/mmconfig.c +++ b/arch/x86_64/pci/mmconfig.c | |||
| @@ -220,7 +220,7 @@ void __init pci_mmcfg_init(int type) | |||
| 220 | 220 | ||
| 221 | pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); | 221 | pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); |
| 222 | if (pci_mmcfg_virt == NULL) { | 222 | if (pci_mmcfg_virt == NULL) { |
| 223 | printk("PCI: Can not allocate memory for mmconfig structures\n"); | 223 | printk(KERN_ERR "PCI: Can not allocate memory for mmconfig structures\n"); |
| 224 | return; | 224 | return; |
| 225 | } | 225 | } |
| 226 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | 226 | for (i = 0; i < pci_mmcfg_config_num; ++i) { |
| @@ -228,7 +228,8 @@ void __init pci_mmcfg_init(int type) | |||
| 228 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, | 228 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, |
| 229 | MMCONFIG_APER_MAX); | 229 | MMCONFIG_APER_MAX); |
| 230 | if (!pci_mmcfg_virt[i].virt) { | 230 | if (!pci_mmcfg_virt[i].virt) { |
| 231 | printk("PCI: Cannot map mmconfig aperture for segment %d\n", | 231 | printk(KERN_ERR "PCI: Cannot map mmconfig aperture for " |
| 232 | "segment %d\n", | ||
| 232 | pci_mmcfg_config[i].pci_segment_group_number); | 233 | pci_mmcfg_config[i].pci_segment_group_number); |
| 233 | return; | 234 | return; |
| 234 | } | 235 | } |
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index ab6cdbd5eb68..cfe75f528725 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
| @@ -184,13 +184,7 @@ SECTIONS | |||
| 184 | 184 | ||
| 185 | __initcall_start = .; | 185 | __initcall_start = .; |
| 186 | .initcall.init : { | 186 | .initcall.init : { |
| 187 | *(.initcall1.init) | 187 | INITCALLS |
| 188 | *(.initcall2.init) | ||
| 189 | *(.initcall3.init) | ||
| 190 | *(.initcall4.init) | ||
| 191 | *(.initcall5.init) | ||
| 192 | *(.initcall6.init) | ||
| 193 | *(.initcall7.init) | ||
| 194 | } | 188 | } |
| 195 | __initcall_end = .; | 189 | __initcall_end = .; |
| 196 | 190 | ||
