Loading arch/arm/kernel/traps.c +21 −6 Original line number Diff line number Diff line Loading @@ -787,10 +787,22 @@ static inline void __init kuser_init(void *vectors) } #endif #ifndef CONFIG_CPU_V7M static void copy_from_lma(void *vma, void *lma_start, void *lma_end) { memcpy(vma, lma_start, lma_end - lma_start); } static void flush_vectors(void *vma, size_t offset, size_t size) { unsigned long start = (unsigned long)vma + offset; unsigned long end = start + size; flush_icache_range(start, end); } void __init early_trap_init(void *vectors_base) { #ifndef CONFIG_CPU_V7M unsigned long vectors = (unsigned long)vectors_base; extern char __stubs_start[], __stubs_end[]; extern char __vectors_start[], __vectors_end[]; unsigned i; Loading @@ -811,17 +823,20 @@ void __init early_trap_init(void *vectors_base) * into the vector page, mapped at 0xffff0000, and ensure these * are visible to the instruction stream. */ memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start); memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start); copy_from_lma(vectors_base, __vectors_start, __vectors_end); copy_from_lma(vectors_base + 0x1000, __stubs_start, __stubs_end); kuser_init(vectors_base); flush_icache_range(vectors, vectors + PAGE_SIZE * 2); flush_vectors(vectors_base, 0, PAGE_SIZE * 2); } #else /* ifndef CONFIG_CPU_V7M */ void __init early_trap_init(void *vectors_base) { /* * on V7-M there is no need to copy the vector table to a dedicated * memory area. The address is configurable and so a table in the kernel * image can be used. */ #endif } #endif Loading
arch/arm/kernel/traps.c +21 −6 Original line number Diff line number Diff line Loading @@ -787,10 +787,22 @@ static inline void __init kuser_init(void *vectors) } #endif #ifndef CONFIG_CPU_V7M static void copy_from_lma(void *vma, void *lma_start, void *lma_end) { memcpy(vma, lma_start, lma_end - lma_start); } static void flush_vectors(void *vma, size_t offset, size_t size) { unsigned long start = (unsigned long)vma + offset; unsigned long end = start + size; flush_icache_range(start, end); } void __init early_trap_init(void *vectors_base) { #ifndef CONFIG_CPU_V7M unsigned long vectors = (unsigned long)vectors_base; extern char __stubs_start[], __stubs_end[]; extern char __vectors_start[], __vectors_end[]; unsigned i; Loading @@ -811,17 +823,20 @@ void __init early_trap_init(void *vectors_base) * into the vector page, mapped at 0xffff0000, and ensure these * are visible to the instruction stream. */ memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start); memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start); copy_from_lma(vectors_base, __vectors_start, __vectors_end); copy_from_lma(vectors_base + 0x1000, __stubs_start, __stubs_end); kuser_init(vectors_base); flush_icache_range(vectors, vectors + PAGE_SIZE * 2); flush_vectors(vectors_base, 0, PAGE_SIZE * 2); } #else /* ifndef CONFIG_CPU_V7M */ void __init early_trap_init(void *vectors_base) { /* * on V7-M there is no need to copy the vector table to a dedicated * memory area. The address is configurable and so a table in the kernel * image can be used. */ #endif } #endif