diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-23 09:04:58 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-23 09:04:58 -0700 |
commit | 514b1923e1549162f1597f81113c0e5b72aed691 (patch) | |
tree | b804bc621d81e022593584fc608df563c8c6b8ca | |
parent | 6f73b3629f774c6cba589b15fd095112b25ca923 (diff) | |
parent | 5042ab91c4272e158748180ae70a2e097f9e90e3 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel
Pull Hexagon architecture changes from Richard Kuo:
"These are mostly cleanups and feedback remaining from the original
upstreaming."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel:
various Kconfig cleanup and old platform build code removal
hexagon/mm/vm_fault.c: Port OOM changes to do_page_fault
arch/hexagon/kernel/dma.c: make function static
Remove unneeded include of version.h from arch/hexagon/include/asm/spinlock_types.h
Hexagon: Use resource_size function
-rw-r--r-- | arch/hexagon/Kconfig | 21 | ||||
-rw-r--r-- | arch/hexagon/Makefile | 5 | ||||
-rw-r--r-- | arch/hexagon/include/asm/spinlock_types.h | 2 | ||||
-rw-r--r-- | arch/hexagon/kernel/dma.c | 2 | ||||
-rw-r--r-- | arch/hexagon/kernel/time.c | 6 | ||||
-rw-r--r-- | arch/hexagon/mm/vm_fault.c | 22 |
6 files changed, 24 insertions, 34 deletions
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index 22615dd02219..bc979f770980 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -13,8 +13,8 @@ config HEXAGON # select ARCH_REQUIRE_GPIOLIB # select HAVE_CLK # select IRQ_PER_CPU - select HAVE_IRQ_WORK # select GENERIC_PENDING_IRQ if SMP + select HAVE_IRQ_WORK select GENERIC_ATOMIC64 select HAVE_PERF_EVENTS select HAVE_GENERIC_HARDIRQS @@ -26,7 +26,7 @@ config HEXAGON select NO_IOPORT select GENERIC_IOMAP select GENERIC_SMP_IDLE_THREAD - # mostly generic routines, with some accelerated ones + select STACKTRACE_SUPPORT ---help--- Qualcomm Hexagon is a processor architecture designed for high performance and low power across a wide variety of applications. @@ -73,15 +73,6 @@ config GENERIC_CSUM config GENERIC_IRQ_PROBE def_bool y -#config ZONE_DMA -# bool -# default y - -config HAS_DMA - bool - select HAVE_DMA_ATTRS - default y - config NEED_SG_DMA_LENGTH def_bool y @@ -114,14 +105,11 @@ config GENERIC_BUG def_bool y depends on BUG -config BUG - def_bool y - menu "Machine selection" choice prompt "System type" - default HEXAGON_ARCH_V2 + default HEXAGON_COMET config HEXAGON_COMET bool "Comet Board" @@ -194,8 +182,7 @@ source "kernel/Kconfig.hz" source "kernel/time/Kconfig" config GENERIC_GPIO - bool "Generic GPIO support" - default n + def_bool n endmenu diff --git a/arch/hexagon/Makefile b/arch/hexagon/Makefile index e27d030846ae..d00d900b2566 100644 --- a/arch/hexagon/Makefile +++ b/arch/hexagon/Makefile @@ -50,8 +50,3 @@ head-y := arch/hexagon/kernel/head.o core-y += arch/hexagon/kernel/ \ arch/hexagon/mm/ \ arch/hexagon/lib/ - -# arch/hexagon/platform/common/ -# -#core-$(CONFIG_HEXAGON_COMET) += arch/hexagon/platform/comet/ -#machine-$(CONFIG_HEXAGON_COMET) := comet diff --git a/arch/hexagon/include/asm/spinlock_types.h b/arch/hexagon/include/asm/spinlock_types.h index 5e937af1c4ad..99b5a7575c21 100644 --- a/arch/hexagon/include/asm/spinlock_types.h +++ b/arch/hexagon/include/asm/spinlock_types.h @@ -21,8 +21,6 @@ #ifndef _ASM_SPINLOCK_TYPES_H #define _ASM_SPINLOCK_TYPES_H -#include <linux/version.h> - #ifndef __LINUX_SPINLOCK_TYPES_H # error "please don't include this file directly" #endif diff --git a/arch/hexagon/kernel/dma.c b/arch/hexagon/kernel/dma.c index 0f2367cc5493..2b48751aa5f7 100644 --- a/arch/hexagon/kernel/dma.c +++ b/arch/hexagon/kernel/dma.c @@ -54,7 +54,7 @@ static struct gen_pool *coherent_pool; /* Allocates from a pool of uncached memory that was reserved at boot time */ -void *hexagon_dma_alloc_coherent(struct device *dev, size_t size, +static void *hexagon_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, struct dma_attrs *attrs) { diff --git a/arch/hexagon/kernel/time.c b/arch/hexagon/kernel/time.c index 5d9b33b67935..36ba64185711 100644 --- a/arch/hexagon/kernel/time.c +++ b/arch/hexagon/kernel/time.c @@ -201,12 +201,10 @@ void __init time_init_deferred(void) resource = rtos_timer_device.resource; /* ioremap here means this has to run later, after paging init */ - rtos_timer = ioremap(resource->start, resource->end - - resource->start + 1); + rtos_timer = ioremap(resource->start, resource_size(resource)); if (!rtos_timer) { - release_mem_region(resource->start, resource->end - - resource->start + 1); + release_mem_region(resource->start, resource_size(resource)); } clocksource_register_khz(&hexagon_clocksource, pcycle_freq_mhz * 1000); diff --git a/arch/hexagon/mm/vm_fault.c b/arch/hexagon/mm/vm_fault.c index c10b76ff9d65..06695cc4fe58 100644 --- a/arch/hexagon/mm/vm_fault.c +++ b/arch/hexagon/mm/vm_fault.c @@ -53,6 +53,8 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs) int si_code = SEGV_MAPERR; int fault; const struct exception_table_entry *fixup; + unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE | + (cause > 0 ? FAULT_FLAG_WRITE : 0); /* * If we're in an interrupt or have no user context, @@ -63,6 +65,7 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs) local_irq_enable(); +retry: down_read(&mm->mmap_sem); vma = find_vma(mm, address); if (!vma) @@ -96,14 +99,23 @@ good_area: break; } - fault = handle_mm_fault(mm, vma, address, (cause > 0)); + fault = handle_mm_fault(mm, vma, address, flags); + + if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + return; /* The most common case -- we are done. */ if (likely(!(fault & VM_FAULT_ERROR))) { - if (fault & VM_FAULT_MAJOR) - current->maj_flt++; - else - current->min_flt++; + if (flags & FAULT_FLAG_ALLOW_RETRY) { + if (fault & VM_FAULT_MAJOR) + current->maj_flt++; + else + current->min_flt++; + if (fault & VM_FAULT_RETRY) { + flags &= ~FAULT_FLAG_ALLOW_RETRY; + goto retry; + } + } up_read(&mm->mmap_sem); return; |