diff options
Diffstat (limited to 'arch/hexagon')
-rw-r--r-- | arch/hexagon/Kconfig | 23 | ||||
-rw-r--r-- | arch/hexagon/Makefile | 5 | ||||
-rw-r--r-- | arch/hexagon/include/asm/processor.h | 7 | ||||
-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 |
7 files changed, 24 insertions, 43 deletions
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index d2e4a333033..bc979f77098 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -13,13 +13,11 @@ 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 - select GENERIC_HARDIRQS_NO__DO_IRQ - select GENERIC_HARDIRQS_NO_DEPRECATED # GENERIC_ALLOCATOR is used by dma_alloc_coherent() select GENERIC_ALLOCATOR select GENERIC_IRQ_SHOW @@ -28,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. @@ -75,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 @@ -116,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" @@ -196,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 e27d030846a..d00d900b256 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/processor.h b/arch/hexagon/include/asm/processor.h index 20c5ddabbd8..e8ea459002a 100644 --- a/arch/hexagon/include/asm/processor.h +++ b/arch/hexagon/include/asm/processor.h @@ -59,13 +59,6 @@ struct thread_struct { #define cpu_relax() __vmyield() /* - * "Unlazying all lazy status" occurs here. - */ -static inline void prepare_to_copy(struct task_struct *tsk) -{ -} - -/* * Decides where the kernel will search for a free chunk of vm space during * mmaps. * See also arch_get_unmapped_area. diff --git a/arch/hexagon/include/asm/spinlock_types.h b/arch/hexagon/include/asm/spinlock_types.h index 5e937af1c4a..99b5a7575c2 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 0f2367cc549..2b48751aa5f 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 5d9b33b6793..36ba6418571 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 c10b76ff9d6..06695cc4fe5 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; |