diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-23 19:48:56 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-23 19:48:56 -0400 |
| commit | db725c88c74669603239a757761a2aecc390f55d (patch) | |
| tree | 7e549a6d102bd6044cc87082a7c9cb2b4c7951ef | |
| parent | 1aae31c8306e5f1bdeafd87b2cd9e3f0df3709e5 (diff) | |
| parent | 556d3f7f4d791cae54fd24ef28296e666f4c96a6 (diff) | |
Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM fixes from Russell King:
"Various fixes and post-merge window updates. Included here are:
- ensure Kconfig things which should be sorted remain sorted
- fix three big-endian bugs which crept in during the last merge
window
- add the renameat2 syscall
- fix big.LITTLE switcher initialisation checks
- fix kdump vmcore for LPAE kernels"
* 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
ARM: add renameat2 syscall
ARM: keep arch/arm/Kconfig and arch/arm/mm/Kconfig select entries sorted
ARM: 8033/1: fix big endian __pv_phys_pfn_offset size related issue
ARM: 8032/1: bL_switcher: fix validation check before its activation
ARM: 8030/1: ARM : kdump : add arch_crash_save_vmcoreinfo
ARM: 8027/1: fix do_div() bug in big-endian systems
ARM: 8026/1: Fix emulation of multiply accumulate instructions
ARM: 8024/1: Keep DEBUG_UART_{PHYS,VIRT} entries sorted
| -rw-r--r-- | arch/arm/Kconfig | 10 | ||||
| -rw-r--r-- | arch/arm/Kconfig.debug | 12 | ||||
| -rw-r--r-- | arch/arm/common/bL_switcher.c | 6 | ||||
| -rw-r--r-- | arch/arm/common/mcpm_entry.c | 5 | ||||
| -rw-r--r-- | arch/arm/include/asm/div64.h | 2 | ||||
| -rw-r--r-- | arch/arm/include/asm/mcpm.h | 7 | ||||
| -rw-r--r-- | arch/arm/include/uapi/asm/unistd.h | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/calls.S | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/machine_kexec.c | 7 | ||||
| -rw-r--r-- | arch/arm/mm/Kconfig | 8 | ||||
| -rw-r--r-- | arch/arm/vfp/vfpdouble.c | 2 | ||||
| -rw-r--r-- | arch/arm/vfp/vfpsingle.c | 2 |
13 files changed, 44 insertions, 21 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ab438cb5af55..53e99eb543d9 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -30,9 +30,9 @@ config ARM | |||
| 30 | select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) | 30 | select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) |
| 31 | select HAVE_ARCH_TRACEHOOK | 31 | select HAVE_ARCH_TRACEHOOK |
| 32 | select HAVE_BPF_JIT | 32 | select HAVE_BPF_JIT |
| 33 | select HAVE_CC_STACKPROTECTOR | ||
| 33 | select HAVE_CONTEXT_TRACKING | 34 | select HAVE_CONTEXT_TRACKING |
| 34 | select HAVE_C_RECORDMCOUNT | 35 | select HAVE_C_RECORDMCOUNT |
| 35 | select HAVE_CC_STACKPROTECTOR | ||
| 36 | select HAVE_DEBUG_KMEMLEAK | 36 | select HAVE_DEBUG_KMEMLEAK |
| 37 | select HAVE_DMA_API_DEBUG | 37 | select HAVE_DMA_API_DEBUG |
| 38 | select HAVE_DMA_ATTRS | 38 | select HAVE_DMA_ATTRS |
| @@ -422,8 +422,8 @@ config ARCH_EFM32 | |||
| 422 | bool "Energy Micro efm32" | 422 | bool "Energy Micro efm32" |
| 423 | depends on !MMU | 423 | depends on !MMU |
| 424 | select ARCH_REQUIRE_GPIOLIB | 424 | select ARCH_REQUIRE_GPIOLIB |
| 425 | select AUTO_ZRELADDR | ||
| 426 | select ARM_NVIC | 425 | select ARM_NVIC |
| 426 | select AUTO_ZRELADDR | ||
| 427 | select CLKSRC_OF | 427 | select CLKSRC_OF |
| 428 | select COMMON_CLK | 428 | select COMMON_CLK |
| 429 | select CPU_V7M | 429 | select CPU_V7M |
| @@ -511,8 +511,8 @@ config ARCH_IXP4XX | |||
| 511 | bool "IXP4xx-based" | 511 | bool "IXP4xx-based" |
| 512 | depends on MMU | 512 | depends on MMU |
| 513 | select ARCH_HAS_DMA_SET_COHERENT_MASK | 513 | select ARCH_HAS_DMA_SET_COHERENT_MASK |
| 514 | select ARCH_SUPPORTS_BIG_ENDIAN | ||
| 515 | select ARCH_REQUIRE_GPIOLIB | 514 | select ARCH_REQUIRE_GPIOLIB |
| 515 | select ARCH_SUPPORTS_BIG_ENDIAN | ||
| 516 | select CLKSRC_MMIO | 516 | select CLKSRC_MMIO |
| 517 | select CPU_XSCALE | 517 | select CPU_XSCALE |
| 518 | select DMABOUNCE if PCI | 518 | select DMABOUNCE if PCI |
| @@ -1575,8 +1575,8 @@ config BIG_LITTLE | |||
| 1575 | config BL_SWITCHER | 1575 | config BL_SWITCHER |
| 1576 | bool "big.LITTLE switcher support" | 1576 | bool "big.LITTLE switcher support" |
| 1577 | depends on BIG_LITTLE && MCPM && HOTPLUG_CPU | 1577 | depends on BIG_LITTLE && MCPM && HOTPLUG_CPU |
| 1578 | select CPU_PM | ||
| 1579 | select ARM_CPU_SUSPEND | 1578 | select ARM_CPU_SUSPEND |
| 1579 | select CPU_PM | ||
| 1580 | help | 1580 | help |
| 1581 | The big.LITTLE "switcher" provides the core functionality to | 1581 | The big.LITTLE "switcher" provides the core functionality to |
| 1582 | transparently handle transition between a cluster of A15's | 1582 | transparently handle transition between a cluster of A15's |
| @@ -1920,9 +1920,9 @@ config XEN | |||
| 1920 | depends on CPU_V7 && !CPU_V6 | 1920 | depends on CPU_V7 && !CPU_V6 |
| 1921 | depends on !GENERIC_ATOMIC64 | 1921 | depends on !GENERIC_ATOMIC64 |
| 1922 | depends on MMU | 1922 | depends on MMU |
| 1923 | select ARCH_DMA_ADDR_T_64BIT | ||
| 1923 | select ARM_PSCI | 1924 | select ARM_PSCI |
| 1924 | select SWIOTLB_XEN | 1925 | select SWIOTLB_XEN |
| 1925 | select ARCH_DMA_ADDR_T_64BIT | ||
| 1926 | help | 1926 | help |
| 1927 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1927 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
| 1928 | 1928 | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 4a2fc0bf6fc9..eab8ecbe69c1 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
| @@ -1030,9 +1030,9 @@ config DEBUG_UART_PHYS | |||
| 1030 | default 0x40100000 if DEBUG_PXA_UART1 | 1030 | default 0x40100000 if DEBUG_PXA_UART1 |
| 1031 | default 0x42000000 if ARCH_GEMINI | 1031 | default 0x42000000 if ARCH_GEMINI |
| 1032 | default 0x7c0003f8 if FOOTBRIDGE | 1032 | default 0x7c0003f8 if FOOTBRIDGE |
| 1033 | default 0x80230000 if DEBUG_PICOXCELL_UART | ||
| 1034 | default 0x80070000 if DEBUG_IMX23_UART | 1033 | default 0x80070000 if DEBUG_IMX23_UART |
| 1035 | default 0x80074000 if DEBUG_IMX28_UART | 1034 | default 0x80074000 if DEBUG_IMX28_UART |
| 1035 | default 0x80230000 if DEBUG_PICOXCELL_UART | ||
| 1036 | default 0x808c0000 if ARCH_EP93XX | 1036 | default 0x808c0000 if ARCH_EP93XX |
| 1037 | default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART | 1037 | default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART |
| 1038 | default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX | 1038 | default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX |
| @@ -1096,22 +1096,22 @@ config DEBUG_UART_VIRT | |||
| 1096 | default 0xfeb26000 if DEBUG_RK3X_UART1 | 1096 | default 0xfeb26000 if DEBUG_RK3X_UART1 |
| 1097 | default 0xfeb30c00 if DEBUG_KEYSTONE_UART0 | 1097 | default 0xfeb30c00 if DEBUG_KEYSTONE_UART0 |
| 1098 | default 0xfeb31000 if DEBUG_KEYSTONE_UART1 | 1098 | default 0xfeb31000 if DEBUG_KEYSTONE_UART1 |
| 1099 | default 0xfec12000 if DEBUG_MVEBU_UART || DEBUG_MVEBU_UART_ALTERNATE | ||
| 1100 | default 0xfed60000 if DEBUG_RK29_UART0 | ||
| 1101 | default 0xfed64000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 | ||
| 1102 | default 0xfed68000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 | ||
| 1103 | default 0xfec02000 if DEBUG_SOCFPGA_UART | 1099 | default 0xfec02000 if DEBUG_SOCFPGA_UART |
| 1100 | default 0xfec12000 if DEBUG_MVEBU_UART || DEBUG_MVEBU_UART_ALTERNATE | ||
| 1104 | default 0xfec20000 if DEBUG_DAVINCI_DMx_UART0 | 1101 | default 0xfec20000 if DEBUG_DAVINCI_DMx_UART0 |
| 1105 | default 0xfed0c000 if DEBUG_DAVINCI_DA8XX_UART1 | 1102 | default 0xfed0c000 if DEBUG_DAVINCI_DA8XX_UART1 |
| 1106 | default 0xfed0d000 if DEBUG_DAVINCI_DA8XX_UART2 | 1103 | default 0xfed0d000 if DEBUG_DAVINCI_DA8XX_UART2 |
| 1107 | default 0xfed12000 if ARCH_KIRKWOOD | 1104 | default 0xfed12000 if ARCH_KIRKWOOD |
| 1105 | default 0xfed60000 if DEBUG_RK29_UART0 | ||
| 1106 | default 0xfed64000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 | ||
| 1107 | default 0xfed68000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 | ||
| 1108 | default 0xfedc0000 if ARCH_EP93XX | 1108 | default 0xfedc0000 if ARCH_EP93XX |
| 1109 | default 0xfee003f8 if FOOTBRIDGE | 1109 | default 0xfee003f8 if FOOTBRIDGE |
| 1110 | default 0xfee20000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART | 1110 | default 0xfee20000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART |
| 1111 | default 0xfef36000 if DEBUG_HIGHBANK_UART | ||
| 1112 | default 0xfee82340 if ARCH_IOP13XX | 1111 | default 0xfee82340 if ARCH_IOP13XX |
| 1113 | default 0xfef00000 if ARCH_IXP4XX && !CPU_BIG_ENDIAN | 1112 | default 0xfef00000 if ARCH_IXP4XX && !CPU_BIG_ENDIAN |
| 1114 | default 0xfef00003 if ARCH_IXP4XX && CPU_BIG_ENDIAN | 1113 | default 0xfef00003 if ARCH_IXP4XX && CPU_BIG_ENDIAN |
| 1114 | default 0xfef36000 if DEBUG_HIGHBANK_UART | ||
| 1115 | default 0xfefff700 if ARCH_IOP33X | 1115 | default 0xfefff700 if ARCH_IOP33X |
| 1116 | default 0xff003000 if DEBUG_U300_UART | 1116 | default 0xff003000 if DEBUG_U300_UART |
| 1117 | default DEBUG_UART_PHYS if !MMU | 1117 | default DEBUG_UART_PHYS if !MMU |
diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c index 5774b6ea7ad5..f01c0ee0c87e 100644 --- a/arch/arm/common/bL_switcher.c +++ b/arch/arm/common/bL_switcher.c | |||
| @@ -797,10 +797,8 @@ static int __init bL_switcher_init(void) | |||
| 797 | { | 797 | { |
| 798 | int ret; | 798 | int ret; |
| 799 | 799 | ||
| 800 | if (MAX_NR_CLUSTERS != 2) { | 800 | if (!mcpm_is_available()) |
| 801 | pr_err("%s: only dual cluster systems are supported\n", __func__); | 801 | return -ENODEV; |
| 802 | return -EINVAL; | ||
| 803 | } | ||
| 804 | 802 | ||
| 805 | cpu_notifier(bL_switcher_hotplug_callback, 0); | 803 | cpu_notifier(bL_switcher_hotplug_callback, 0); |
| 806 | 804 | ||
diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c index 1e361abc29eb..86fd60fefbc9 100644 --- a/arch/arm/common/mcpm_entry.c +++ b/arch/arm/common/mcpm_entry.c | |||
| @@ -48,6 +48,11 @@ int __init mcpm_platform_register(const struct mcpm_platform_ops *ops) | |||
| 48 | return 0; | 48 | return 0; |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | bool mcpm_is_available(void) | ||
| 52 | { | ||
| 53 | return (platform_ops) ? true : false; | ||
| 54 | } | ||
| 55 | |||
| 51 | int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) | 56 | int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) |
| 52 | { | 57 | { |
| 53 | if (!platform_ops) | 58 | if (!platform_ops) |
diff --git a/arch/arm/include/asm/div64.h b/arch/arm/include/asm/div64.h index 191ada6e4d2d..662c7bd06108 100644 --- a/arch/arm/include/asm/div64.h +++ b/arch/arm/include/asm/div64.h | |||
| @@ -156,7 +156,7 @@ | |||
| 156 | /* Select the best insn combination to perform the */ \ | 156 | /* Select the best insn combination to perform the */ \ |
| 157 | /* actual __m * __n / (__p << 64) operation. */ \ | 157 | /* actual __m * __n / (__p << 64) operation. */ \ |
| 158 | if (!__c) { \ | 158 | if (!__c) { \ |
| 159 | asm ( "umull %Q0, %R0, %1, %Q2\n\t" \ | 159 | asm ( "umull %Q0, %R0, %Q1, %Q2\n\t" \ |
| 160 | "mov %Q0, #0" \ | 160 | "mov %Q0, #0" \ |
| 161 | : "=&r" (__res) \ | 161 | : "=&r" (__res) \ |
| 162 | : "r" (__m), "r" (__n) \ | 162 | : "r" (__m), "r" (__n) \ |
diff --git a/arch/arm/include/asm/mcpm.h b/arch/arm/include/asm/mcpm.h index 608516ebabfe..a5ff410dcdb6 100644 --- a/arch/arm/include/asm/mcpm.h +++ b/arch/arm/include/asm/mcpm.h | |||
| @@ -54,6 +54,13 @@ void mcpm_set_early_poke(unsigned cpu, unsigned cluster, | |||
| 54 | */ | 54 | */ |
| 55 | 55 | ||
| 56 | /** | 56 | /** |
| 57 | * mcpm_is_available - returns whether MCPM is initialized and available | ||
| 58 | * | ||
| 59 | * This returns true or false accordingly. | ||
| 60 | */ | ||
| 61 | bool mcpm_is_available(void); | ||
| 62 | |||
| 63 | /** | ||
| 57 | * mcpm_cpu_power_up - make given CPU in given cluster runable | 64 | * mcpm_cpu_power_up - make given CPU in given cluster runable |
| 58 | * | 65 | * |
| 59 | * @cpu: CPU number within given cluster | 66 | * @cpu: CPU number within given cluster |
diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h index fb5584d0cc05..ba94446c72d9 100644 --- a/arch/arm/include/uapi/asm/unistd.h +++ b/arch/arm/include/uapi/asm/unistd.h | |||
| @@ -408,6 +408,7 @@ | |||
| 408 | #define __NR_finit_module (__NR_SYSCALL_BASE+379) | 408 | #define __NR_finit_module (__NR_SYSCALL_BASE+379) |
| 409 | #define __NR_sched_setattr (__NR_SYSCALL_BASE+380) | 409 | #define __NR_sched_setattr (__NR_SYSCALL_BASE+380) |
| 410 | #define __NR_sched_getattr (__NR_SYSCALL_BASE+381) | 410 | #define __NR_sched_getattr (__NR_SYSCALL_BASE+381) |
| 411 | #define __NR_renameat2 (__NR_SYSCALL_BASE+382) | ||
| 411 | 412 | ||
| 412 | /* | 413 | /* |
| 413 | * This may need to be greater than __NR_last_syscall+1 in order to | 414 | * This may need to be greater than __NR_last_syscall+1 in order to |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 166e945de832..8f51bdcdacbb 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
| @@ -391,6 +391,7 @@ | |||
| 391 | CALL(sys_finit_module) | 391 | CALL(sys_finit_module) |
| 392 | /* 380 */ CALL(sys_sched_setattr) | 392 | /* 380 */ CALL(sys_sched_setattr) |
| 393 | CALL(sys_sched_getattr) | 393 | CALL(sys_sched_getattr) |
| 394 | CALL(sys_renameat2) | ||
| 394 | #ifndef syscalls_counted | 395 | #ifndef syscalls_counted |
| 395 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls | 396 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
| 396 | #define syscalls_counted | 397 | #define syscalls_counted |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index f8c08839edf3..591d6e4a6492 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -587,7 +587,7 @@ __fixup_pv_table: | |||
| 587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address | 587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address |
| 588 | add r7, r7, r3 @ adjust __pv_offset address | 588 | add r7, r7, r3 @ adjust __pv_offset address |
| 589 | mov r0, r8, lsr #12 @ convert to PFN | 589 | mov r0, r8, lsr #12 @ convert to PFN |
| 590 | str r0, [r6, #LOW_OFFSET] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset | 590 | str r0, [r6] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset |
| 591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits | 591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits |
| 592 | mov r6, r3, lsr #24 @ constant for add/sub instructions | 592 | mov r6, r3, lsr #24 @ constant for add/sub instructions |
| 593 | teq r3, r6, lsl #24 @ must be 16MiB aligned | 593 | teq r3, r6, lsl #24 @ must be 16MiB aligned |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index f0d180d8b29f..8cf0996aa1a8 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -184,3 +184,10 @@ void machine_kexec(struct kimage *image) | |||
| 184 | 184 | ||
| 185 | soft_restart(reboot_entry_phys); | 185 | soft_restart(reboot_entry_phys); |
| 186 | } | 186 | } |
| 187 | |||
| 188 | void arch_crash_save_vmcoreinfo(void) | ||
| 189 | { | ||
| 190 | #ifdef CONFIG_ARM_LPAE | ||
| 191 | VMCOREINFO_CONFIG(ARM_LPAE); | ||
| 192 | #endif | ||
| 193 | } | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index f5ad9ee70426..5bf7c3c3b301 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -420,29 +420,29 @@ config CPU_32v3 | |||
| 420 | bool | 420 | bool |
| 421 | select CPU_USE_DOMAINS if MMU | 421 | select CPU_USE_DOMAINS if MMU |
| 422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
| 423 | select TLS_REG_EMUL if SMP || !MMU | ||
| 424 | select NEED_KUSER_HELPERS | 423 | select NEED_KUSER_HELPERS |
| 424 | select TLS_REG_EMUL if SMP || !MMU | ||
| 425 | 425 | ||
| 426 | config CPU_32v4 | 426 | config CPU_32v4 |
| 427 | bool | 427 | bool |
| 428 | select CPU_USE_DOMAINS if MMU | 428 | select CPU_USE_DOMAINS if MMU |
| 429 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 429 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
| 430 | select TLS_REG_EMUL if SMP || !MMU | ||
| 431 | select NEED_KUSER_HELPERS | 430 | select NEED_KUSER_HELPERS |
| 431 | select TLS_REG_EMUL if SMP || !MMU | ||
| 432 | 432 | ||
| 433 | config CPU_32v4T | 433 | config CPU_32v4T |
| 434 | bool | 434 | bool |
| 435 | select CPU_USE_DOMAINS if MMU | 435 | select CPU_USE_DOMAINS if MMU |
| 436 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 436 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
| 437 | select TLS_REG_EMUL if SMP || !MMU | ||
| 438 | select NEED_KUSER_HELPERS | 437 | select NEED_KUSER_HELPERS |
| 438 | select TLS_REG_EMUL if SMP || !MMU | ||
| 439 | 439 | ||
| 440 | config CPU_32v5 | 440 | config CPU_32v5 |
| 441 | bool | 441 | bool |
| 442 | select CPU_USE_DOMAINS if MMU | 442 | select CPU_USE_DOMAINS if MMU |
| 443 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 443 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
| 444 | select TLS_REG_EMUL if SMP || !MMU | ||
| 445 | select NEED_KUSER_HELPERS | 444 | select NEED_KUSER_HELPERS |
| 445 | select TLS_REG_EMUL if SMP || !MMU | ||
| 446 | 446 | ||
| 447 | config CPU_32v6 | 447 | config CPU_32v6 |
| 448 | bool | 448 | bool |
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c index 6cac43bd1d86..423f56dd4028 100644 --- a/arch/arm/vfp/vfpdouble.c +++ b/arch/arm/vfp/vfpdouble.c | |||
| @@ -866,6 +866,8 @@ vfp_double_multiply_accumulate(int dd, int dn, int dm, u32 fpscr, u32 negate, ch | |||
| 866 | vdp.sign = vfp_sign_negate(vdp.sign); | 866 | vdp.sign = vfp_sign_negate(vdp.sign); |
| 867 | 867 | ||
| 868 | vfp_double_unpack(&vdn, vfp_get_double(dd)); | 868 | vfp_double_unpack(&vdn, vfp_get_double(dd)); |
| 869 | if (vdn.exponent == 0 && vdn.significand) | ||
| 870 | vfp_double_normalise_denormal(&vdn); | ||
| 869 | if (negate & NEG_SUBTRACT) | 871 | if (negate & NEG_SUBTRACT) |
| 870 | vdn.sign = vfp_sign_negate(vdn.sign); | 872 | vdn.sign = vfp_sign_negate(vdn.sign); |
| 871 | 873 | ||
diff --git a/arch/arm/vfp/vfpsingle.c b/arch/arm/vfp/vfpsingle.c index b252631b406b..4f96c1617aae 100644 --- a/arch/arm/vfp/vfpsingle.c +++ b/arch/arm/vfp/vfpsingle.c | |||
| @@ -915,6 +915,8 @@ vfp_single_multiply_accumulate(int sd, int sn, s32 m, u32 fpscr, u32 negate, cha | |||
| 915 | v = vfp_get_float(sd); | 915 | v = vfp_get_float(sd); |
| 916 | pr_debug("VFP: s%u = %08x\n", sd, v); | 916 | pr_debug("VFP: s%u = %08x\n", sd, v); |
| 917 | vfp_single_unpack(&vsn, v); | 917 | vfp_single_unpack(&vsn, v); |
| 918 | if (vsn.exponent == 0 && vsn.significand) | ||
| 919 | vfp_single_normalise_denormal(&vsn); | ||
| 918 | if (negate & NEG_SUBTRACT) | 920 | if (negate & NEG_SUBTRACT) |
| 919 | vsn.sign = vfp_sign_negate(vsn.sign); | 921 | vsn.sign = vfp_sign_negate(vsn.sign); |
| 920 | 922 | ||
