Updated Cortex-M3 series
Subsystems (2)
v5 cover Updated Cortex-M3 series
Hello,
now that 3.5 is about to come I invested the time to update the beginning of the Cortex-M3 support.
Over all I rebased to v3.5-rc5 and addressed the comments by Russell.
It would be great to get these patches into next early after the merge window for 3.6 closes to get them into 3.7. But I won't argue if they made it into 3.6 ;-)
For reference, v4 of this series can be found at
http://thread.gmane.org/gmane.linux.ports.arm.kernel/160510
Best regards
Uwe
Catalin Marinas (1):
Cortex-M3: Add base support for Cortex-M3
Uwe Kleine-K?nig (2):
ARM: make cr_alignment read-only #ifndef CONFIG_CPU_CP15
Cortex-M3: Add support for exception handling
arch/arm/include/asm/assembler.h | 13 ++- arch/arm/include/asm/cp15.h | 11 ++- arch/arm/include/asm/cputype.h | 3 + arch/arm/include/asm/glue-cache.h | 24 ++++++ arch/arm/include/asm/glue-df.h | 8 ++ arch/arm/include/asm/glue-proc.h | 9 ++ arch/arm/include/asm/irqflags.h | 22 +++-- arch/arm/include/asm/processor.h | 7 ++ arch/arm/include/asm/ptrace.h | 44 ++++++++-- arch/arm/include/asm/system_info.h | 1 + arch/arm/kernel/asm-offsets.c | 3 + arch/arm/kernel/entry-common.S | 4 + arch/arm/kernel/entry-header.S | 148 +++++++++++++++++++++++++++++++++ arch/arm/kernel/entry-v7m.S | 134 ++++++++++++++++++++++++++++++ arch/arm/kernel/head-common.S | 9 +- arch/arm/kernel/head-nommu.S | 9 +- arch/arm/kernel/process.c | 8 ++ arch/arm/kernel/ptrace.c | 3 + arch/arm/kernel/setup.c | 13 ++- arch/arm/kernel/signal.c | 13 +++ arch/arm/kernel/sys_arm.c | 1 + arch/arm/kernel/traps.c | 2 + arch/arm/mm/alignment.c | 2 + arch/arm/mm/mmu.c | 17 ++++ arch/arm/mm/nommu.c | 2 + arch/arm/mm/proc-v7m.S | 161 ++++++++++++++++++++++++++++++++++++ 26 files changed, 649 insertions(+), 22 deletions(-) create mode 100644 arch/arm/kernel/entry-v7m.S create mode 100644 arch/arm/mm/proc-v7m.S
Signature · 1 line
1.7.10
PATCH v5 1/3 ARM: make cr_alignment read-only #ifndef CONFIG_CPU_CP15
This makes cr_alignment a constant 0 to break code that tries to modify the value as it's likely that it's built on wrong assumption when CONFIG_CPU_CP15 isn't defined. For code that is only reading the value 0 is more or less a fine value to report.
---
This patch is unchanged since v4.
arch/arm/include/asm/cp15.h | 11 ++++++++++- arch/arm/kernel/head-common.S | 9 +++++++-- arch/arm/mm/alignment.c | 2 ++ arch/arm/mm/mmu.c | 17 +++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-)
arch/arm/include/asm/cp15.h +10 -1
@@ -42,6 +42,8 @@#define vectors_high () (0)#endif +#ifdef CONFIG_CPU_CP15 +extern unsigned long cr_no_alignment;/* defined in entry-armv.S */ extern unsigned long cr_alignment;/* defined in entry-armv.S */
@@ -82,6 +84,13 @@ static inline void set_copro_access(unsigned int val)isb (); } -#endif +#else /* ifdef CONFIG_CPU_CP15 */ + +#define cr_no_alignment UL(0) +#define cr_alignment UL(0) + +#endif /* ifdef CONFIG_CPU_CP15 / else */ + +#endif /* ifndef __ASSEMBLY__ */ #endif
arch/arm/kernel/head-common.S +7 -2
@@ -98,8 +98,9 @@ __mmap_switched: str r9, [r4] @ Save processor ID str r1, [r5] @ Save machine type str r2, [r6] @ Save atags pointer - bic r4, r0, #CR_A @ Clear 'A' bit - stmia r7, {r0, r4} @ Save control register values + cmp r7, #0 + bicne r4, r0, #CR_A @ Clear 'A' bit + stmneia r7, {r0, r4} @ Save control register values b start_kernel ENDPROC(__mmap_switched)
@@ -113,7 +114,11 @@ __mmap_switched_data: .long processor_id @ r4 .long __machine_arch_type @ r5 .long __atags_pointer @ r6 +#ifdef CONFIG_CPU_CP15 .long cr_alignment @ r7 +#else + .long 0 +#endif .long init_thread_union + THREAD_START_SP @ sp .size __mmap_switched_data, . - __mmap_switched_data
arch/arm/mm/alignment.c +2 -0
@@ -962,12 +962,14 @@ static int __init alignment_init(void)return -ENOMEM ;#endif +#ifdef CONFIG_CPU_CP15 if (cpu_is_v6_unaligned ()) { cr_alignment &= ~CR_A ; cr_no_alignment &= ~CR_A ;set_cr (cr_alignment); ai_usermode =safe_usermode (ai_usermode, false); } +#endif hook_fault_code (FAULT_CODE_ALIGNMENT , do_alignment,SIGBUS ,BUS_ADRALN ,"alignment exception" );
arch/arm/mm/mmu.c +17 -0
@@ -96,6 +96,7 @@ static struct cachepolicy cache_policies[] __initdata = { } }; +#ifdef CONFIG_CPU_CP15 /* * These are useful for identifying cache coherency * problems by allowing the cache or the cache and
@@ -194,6 +195,22 @@ void adjust_cr(unsigned long mask, unsigned long set) }#endif +#else + +static int __init early_cachepolicy (char *p) +{ +pr_warning ("cachepolicy kernel parameter not supported without cp15\n" ); +} +early_param ("cachepolicy" , early_cachepolicy); + +static int __init noalign_setup (char *__unused) +{ +pr_warning ("noalign kernel parameter not supported without cp15\n" ); +} +__setup ("noalign" , noalign_setup); + +#endif +#define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN#define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE
Signature · 1 line
1.7.10
PATCH v5 2/3 Cortex-M3: Add base support for Cortex-M3
In reply to Uwe Kleine-KönigFrom: Catalin Marinas <[email protected]>
This patch adds the base support for the Cortex-M3 processor (ARMv7-M architecture). It consists of the corresponding arch/arm/mm/ files and various #ifdef's around the kernel. Exception handling is implemented by a subsequent patch.
[ukleinek: squash in some changes originating from commit
b5717ba (Cortex-M3: Add support for the Microcontroller Prototyping System)
from the v2.6.33-arm1 patch stack, port to post 3.4, drop zImage support, drop reorganisation of pt_regs, assert CONFIG_V7M doesn't leak into installed headers and a few cosmetic changes]
---
Changes since v4, id:1333573807-23709-2-git-send-email-u.kleine-koenig at pengutronix.de
- simplify irq enable/disable ops as suggested by Russell
- don't leak kernel config symbols into userspace headers and add some
comments
- rebase on v3.5-rc5
Only nop_coherent_user_range needed adaption to
c5102f5 (ARM: 7408/1: cacheflush: return error to userspace when flushing syscall fails)
arch/arm/include/asm/assembler.h | 13 ++- arch/arm/include/asm/cputype.h | 3 + arch/arm/include/asm/glue-cache.h | 24 ++++++ arch/arm/include/asm/glue-df.h | 8 ++ arch/arm/include/asm/glue-proc.h | 9 ++ arch/arm/include/asm/irqflags.h | 22 +++-- arch/arm/include/asm/processor.h | 7 ++ arch/arm/include/asm/ptrace.h | 44 ++++++++-- arch/arm/include/asm/system_info.h | 1 + arch/arm/kernel/asm-offsets.c | 3 + arch/arm/kernel/head-nommu.S | 9 +- arch/arm/kernel/setup.c | 13 ++- arch/arm/kernel/traps.c | 2 + arch/arm/mm/nommu.c | 2 + arch/arm/mm/proc-v7m.S | 161 ++++++++++++++++++++++++++++++++++++ 15 files changed, 302 insertions(+), 19 deletions(-) create mode 100644 arch/arm/mm/proc-v7m.S
arch/arm/include/asm/assembler.h +12 -1
@@ -135,7 +135,11 @@* assumes FIQs are enabled, and that the processor is in SVC mode. */ .macro save_and_disable_irqs, oldcpsr +#ifdef CONFIG_CPU_V7M + mrs \oldcpsr, primask +#else mrs \oldcpsr, cpsr +#endif disable_irq .endm
@@ -149,7 +153,11 @@* guarantee that this will preserve the flags. */ .macro restore_irqs_notrace, oldcpsr +#ifdef CONFIG_CPU_V7M + msr primask, \oldcpsr +#else msr cpsr_c, \oldcpsr +#endif .endm .macro restore_irqs, oldcpsr
@@ -228,7 +236,10 @@#endif .endm -#ifdef CONFIG_THUMB2_KERNEL +#if defined(CONFIG_CPU_V7M ) + .macro setmode, mode, reg + .endm +#elif defined(CONFIG_THUMB2_KERNEL ) .macro setmode, mode, reg mov \reg, #\mode msr cpsr_c, \reg
arch/arm/include/asm/cputype.h +3 -0
@@ -46,6 +46,9 @@ extern unsigned int processor_id; : "cc"); \ __val; \ }) +#elif defined(CONFIG_CPU_V7M ) +#define read_cpuid (reg) (*(unsigned int *)0xe000ed00) +#define read_cpuid_ext (reg) 0#else #define read_cpuid (reg) (processor_id)#define read_cpuid_ext (reg) 0
arch/arm/include/asm/glue-cache.h +24 -0
@@ -125,10 +125,34 @@//# endif #endif +#if defined(CONFIG_CPU_V7M ) +# ifdef _CACHE +# error "Multi-cache not supported on ARMv7-M" +# else +# define _CACHE nop +# endif +#endif +#if !defined(_CACHE) && !defined(MULTI_CACHE )#error Unknown cache maintenance model#endif +#ifndef __ASSEMBLER__ +static inline void nop_flush_icache_all (void ) { } +static inline void nop_flush_kern_cache_all (void ) { } +static inline void nop_flush_user_cache_all (void ) { } +static inline void nop_flush_user_cache_range (unsigned long a,unsigned long b,unsigned int c) { } + +static inline void nop_coherent_kern_range (unsigned long a,unsigned long b) { } +static inline int nop_coherent_user_range (unsigned long a,unsigned long b) {return 0 ; } +static inline void nop_flush_kern_dcache_area (void *a,size_t s) { } + +static inline void nop_dma_flush_range (const void *a,const void *b) { } + +static inline void nop_dma_map_area (const void *s,size_t l,int f) { } +static inline void nop_dma_unmap_area (const void *s,size_t l,int f) { } +#endif +#ifndef MULTI_CACHE #define __cpuc_flush_icache_all __glue(_CACHE,_flush_icache_all)#define __cpuc_flush_kern_all __glue(_CACHE,_flush_kern_cache_all)
arch/arm/include/asm/glue-df.h +8 -0
@@ -95,6 +95,14 @@# endif #endif +#ifdef CONFIG_CPU_ABRT_NOMMU +# ifdef CPU_DABORT_HANDLER +# define MULTI_DABORT 1 +# else +# define CPU_DABORT_HANDLER nommu_early_abort +# endif +#endif +#ifndef CPU_DABORT_HANDLER #error Unknown data abort handler type#endif
arch/arm/include/asm/glue-proc.h +9 -0
@@ -230,6 +230,15 @@# endif #endif +#ifdef CONFIG_CPU_V7M +# ifdef CPU_NAME +# undef MULTI_CPU +# define MULTI_CPU +# else +# define CPU_NAME cpu_v7m +# endif +#endif +#ifndef MULTI_CPU #define cpu_proc_init __glue(CPU_NAME,_proc_init)#define cpu_proc_fin __glue(CPU_NAME,_proc_fin)
arch/arm/include/asm/irqflags.h +16 -6
@@ -8,6 +8,16 @@/* * CPU interrupt mask handling. */ +#ifdef CONFIG_CPU_V7M +#define IRQMASK_REG_NAME_R "primask" +#define IRQMASK_REG_NAME_W "primask" +#define IRQMASK_I_BIT 1 +#else +#define IRQMASK_REG_NAME_R "cpsr" +#define IRQMASK_REG_NAME_W "cpsr_c" +#define IRQMASK_I_BIT PSR_I_BIT +#endif +#if __LINUX_ARM_ARCH__ >=6 static inline unsigned long arch_local_irq_save (void )
@@ -15,7 +25,7 @@ static inline unsigned long arch_local_irq_save(void)unsigned long flags; asmvolatile ( -" mrs %0, cpsr @ arch_local_irq_save\n" +" mrs %0, " IRQMASK_REG_NAME_R " @ arch_local_irq_save\n" " cpsid i" :"=r" (flags) : :"memory" ,"cc" );return flags;
@@ -129,7 +139,7 @@ static inline unsigned long arch_local_save_flags(void) {unsigned long flags; asmvolatile ( -" mrs %0, cpsr @ local_save_flags" +" mrs %0, " IRQMASK_REG_NAME_R " @ local_save_flags" :"=r" (flags) : :"memory" ,"cc" );return flags; }
@@ -140,7 +150,7 @@ static inline unsigned long arch_local_save_flags(void)static inline void arch_local_irq_restore (unsigned long flags) { asmvolatile ( -" msr cpsr_c, %0 @ local_irq_restore" +" msr " IRQMASK_REG_NAME_W ", %0 @ local_irq_restore" : :"r" (flags) :"memory" ,"cc" );
@@ -148,8 +158,8 @@ static inline void arch_local_irq_restore(unsigned long flags)static inline int arch_irqs_disabled_flags (unsigned long flags) { -return flags &PSR_I_BIT ; +return flags &IRQMASK_I_BIT ; } -#endif -#endif +#endif /* ifdef __KERNEL__ */ +#endif /* ifndef __ASM_ARM_IRQFLAGS_H */
arch/arm/include/asm/processor.h +7 -0
@@ -49,7 +49,14 @@ struct thread_struct {#ifdef CONFIG_MMU #define nommu_start_thread (regs) do { } while (0)#else +#ifndef CONFIG_CPU_V7M #define nommu_start_thread (regs) regs->ARM_r10 = current->mm->start_data +#else +#define nommu_start_thread (regs) do { \ + regs->ARM_r10 = current->mm->start_data; \ + regs->ARM_EXC_RET = 0xfffffffdL; \ +} while (0) +#endif #endif #define start_thread (regs,pc,sp) \
arch/arm/include/asm/ptrace.h +36 -8
88 lines not on this page · raw message
arch/arm/include/asm/system_info.h +1 -0
@@ -11,6 +11,7 @@#define CPU_ARCH_ARMv5TEJ 7#define CPU_ARCH_ARMv6 8#define CPU_ARCH_ARMv7 9 +#define CPU_ARCH_ARMv7M 10#ifndef __ASSEMBLY__
arch/arm/kernel/asm-offsets.c +3 -0
@@ -91,6 +91,9 @@ int main(void)DEFINE (S_PC , offsetof(struct pt_regs , ARM_pc));DEFINE (S_PSR , offsetof(struct pt_regs , ARM_cpsr));DEFINE (S_OLD_R0 , offsetof(struct pt_regs , ARM_ORIG_r0)); +#ifdef CONFIG_CPU_V7M +DEFINE (S_EXC_RET , offsetof(struct pt_regs , ARM_EXC_RET)); +#endif DEFINE (S_FRAME_SIZE ,sizeof (struct pt_regs ));BLANK ();#ifdef CONFIG_CACHE_L2X0
arch/arm/kernel/head-nommu.S +6 -3
@@ -44,10 +44,13 @@ ENTRY(stext) setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode @ and irqs disabled -#ifndef CONFIG_CPU_CP15 - ldr r9, =CONFIG_PROCESSOR_ID -#else +#if defined(CONFIG_CPU_CP15) mrc p15, 0, r9, c0, c0 @ get processor id +#elif defined(CONFIG_CPU_V7M) + ldr r9, =0xe000ed00 @ CPUID register address + ldr r9, [r9] +#else + ldr r9, =CONFIG_PROCESSOR_ID #endif bl __lookup_processor_type @ r5=procinfo r9=cpuid movs r10, r5 @ invalid processor (r5=0)?
arch/arm/kernel/setup.c +12 -1
@@ -135,7 +135,9 @@ struct stack {u32 und[3 ]; }____cacheline_aligned ; +#ifndef CONFIG_CPU_V7M static struct stack stacks[NR_CPUS ]; +#endif char elf_platform[ELF_PLATFORM_SIZE ];EXPORT_SYMBOL (elf_platform);
@@ -215,7 +217,7 @@ static const char *proc_arch[] = {"5TEJ" ,"6TEJ" ,"7" , -"?(11)" , +"7M" ,"?(12)" ,"?(13)" , "?(14)",
@@ -224,6 +226,12 @@ static const char *proc_arch[] = { "?(17)", }; +#ifdef CONFIG_CPU_V7M +static int __get_cpu_architecture (void ) +{ +return CPU_ARCH_ARMv7M; +} +#else static int __get_cpu_architecture (void ) {int cpu_arch;
@@ -256,6 +264,7 @@ static int __get_cpu_architecture(void) return cpu_arch; } +#endif int __pure cpu_architecture (void ) {
@@ -383,6 +392,7 @@ static void __init feat_v6_fixup(void)*/ void cpu_init (void ) { +#ifndef CONFIG_CPU_V7M unsigned int cpu =smp_processor_id ();struct stack *stk = &stacks[cpu];
@@ -427,6 +437,7 @@ void cpu_init(void) "I" (offsetof(struct stack, und[0])), PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE) : "r14"); +#endif }int __cpu_logical_map[NR_CPUS ];
arch/arm/kernel/traps.c +2 -0
@@ -792,6 +792,7 @@ static void __init kuser_get_tls_init(unsigned long vectors)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[];
@@ -823,4 +824,5 @@ void __init early_trap_init(void *vectors_base)flush_icache_range (vectors, vectors +PAGE_SIZE );modify_domain (DOMAIN_USER ,DOMAIN_CLIENT ); +#endif }
arch/arm/mm/nommu.c +2 -0
@@ -20,12 +20,14 @@void __init arm_mm_memblock_reserve (void ) { +#ifndef CONFIG_CPU_V7M /* * Register the exception vector page. * some architectures which the DRAM is the exception vector to trap, * alloc_page breaks with error, although it is not NULL, but "0." */ memblock_reserve (CONFIG_VECTORS_BASE ,PAGE_SIZE ); +#endif }void __init sanity_check_meminfo (void )
arch/arm/mm/proc-v7m.S new file +161 -0
161 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH v5 3/3 Cortex-M3: Add support for exception handling
In reply to Uwe Kleine-KönigThis patch implements the exception handling for the ARMv7-M architecture (pretty different from the A or R profiles).
It bases on work done earlier by Catalin for 2.6.33 but was nearly completely rewritten to use a pt_regs layout compatible to the A profile.
---
No changes since v4
arch/arm/kernel/entry-common.S | 4 ++ arch/arm/kernel/entry-header.S | 148 ++++++++++++++++++++++++++++++++++++++++ arch/arm/kernel/entry-v7m.S | 134 ++++++++++++++++++++++++++++++++++++ arch/arm/kernel/process.c | 8 +++ arch/arm/kernel/ptrace.c | 3 + arch/arm/kernel/signal.c | 13 ++++ arch/arm/kernel/sys_arm.c | 1 + 7 files changed, 311 insertions(+) create mode 100644 arch/arm/kernel/entry-v7m.S
arch/arm/kernel/entry-common.S +4 -0
@@ -341,6 +341,9 @@ ENDPROC(ftrace_stub) .align 5 ENTRY(vector_swi) +#ifdef CONFIG_CPU_V7M + v7m_exception_entry +#else sub sp, sp, #S_FRAME_SIZE stmia sp, {r0 - r12} @ Calling r0 - r12 ARM( add r8, sp, #S_PC )
@@ -351,6 +354,7 @@ ENTRY(vector_swi) str lr, [sp, #S_PC] @ Save calling PC str r8, [sp, #S_PSR] @ Save CPSR str r0, [sp, #S_OLD_R0] @ Save OLD_R0 +#endif zero_fp /*
arch/arm/kernel/entry-header.S +148 -0
166 lines not on this page · raw message
arch/arm/kernel/entry-v7m.S new file +134 -0
134 lines not on this page · raw message
arch/arm/kernel/process.c +8 -0
@@ -434,7 +434,11 @@ asm( ".pushsection .text\n"#ifdef CONFIG_TRACE_IRQFLAGS " bl trace_hardirqs_on\n"#endif +#ifdef CONFIG_CPU_V7M +" msr primask, r7\n" +#else " msr cpsr_c, r7\n" +#endif " mov r0, r4\n" " mov lr, r6\n" " mov pc, r5\n"
@@ -473,6 +477,10 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) regs.ARM_r7 =SVC_MODE |PSR_ENDSTATE |PSR_ISETSTATE ; regs.ARM_pc = (unsigned long )kernel_thread_helper; regs.ARM_cpsr = regs.ARM_r7 |PSR_I_BIT ; +#if definedCONFIG_CPU_V7M +/* Return to Handler mode */ + regs.ARM_EXC_RET =0xfffffff1L ; +#endif return do_fork (flags|CLONE_VM |CLONE_UNTRACED ,0 , ®s,0 ,NULL ,NULL ); }
arch/arm/kernel/ptrace.c +3 -0
@@ -84,6 +84,9 @@ static const struct pt_regs_offset regoffset_table[] = {REG_OFFSET_NAME (pc),REG_OFFSET_NAME (cpsr),REG_OFFSET_NAME (ORIG_r0), +#ifdef CONFIG_CPU_V7M +REG_OFFSET_NAME (EXC_RET ), +#endif REG_OFFSET_END, };
arch/arm/kernel/signal.c +13 -0
@@ -207,6 +207,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)sigset_t set;int err; +pr_info ("%s(regs=%p)\n" , __func__, regs); + err =__copy_from_user (&set, &sf->uc.uc_sigmask,sizeof (set));if (err ==0 )set_current_blocked (&set);
@@ -252,6 +254,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs) {struct sigframe __user *frame; +pr_info ("%s(regs=%p)\n" , __func__, regs);/* Always make any pending restarted system calls return -EINTR */ current_thread_info ()->restart_block.fn = do_no_restart_syscall;
@@ -282,6 +285,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) {struct rt_sigframe __user *frame; +pr_info ("%s(regs=%p)\n" , __func__, regs);/* Always make any pending restarted system calls return -EINTR */ current_thread_info ()->restart_block.fn = do_no_restart_syscall;
@@ -366,6 +370,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, int framesize)unsigned long sp = regs->ARM_sp;void __user *frame; +pr_info ("%s(regs=%p)\n" , __func__, regs);/* * This is the X/Open sanctioned signal stack switching. */
@@ -395,6 +400,8 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,int thumb =0 ;unsigned long cpsr = regs->ARM_cpsr & ~(PSR_f |PSR_E_BIT ); +pr_info ("%s(regs=%p)\n" , __func__, regs); + cpsr |=PSR_ENDSTATE ;/*
@@ -467,6 +474,8 @@ setup_frame(int usig, struct k_sigaction *ka, sigset_t *set, struct pt_regs *regstruct sigframe __user *frame =get_sigframe (ka, regs,sizeof (*frame));int err =0 ; +pr_info ("%s(regs=%p)\n" , __func__, regs); +if (!frame)return 1 ;
@@ -490,6 +499,8 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,stack_t stack;int err =0 ; +pr_info ("%s(regs=%p)\n" , __func__, regs); +if (!frame)return 1 ;
@@ -534,6 +545,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,int usig = sig;int ret; +pr_info ("%s(regs=%p)\n" , __func__, regs);/* * translate the signal */
@@ -642,6 +654,7 @@ static void do_signal(struct pt_regs *regs, int syscall) asmlinkage voiddo_notify_resume (struct pt_regs *regs,unsigned int thread_flags,int syscall) { +pr_info ("%s(regs=%p)\n" , __func__, regs);if (thread_flags & _TIF_SIGPENDING)do_signal (regs, syscall);
arch/arm/kernel/sys_arm.c +1 -0
@@ -102,6 +102,7 @@ int kernel_execve(const char *filename,* We were successful. We won't be returning to our caller, but * instead to user space by manipulating the kernel stack. */ +pr_info ("we were successful\n" ); asm("add r0, %0, %1\n\t" "mov r1, %2\n\t" "mov r2, %3\n\t"
Signature · 1 line
1.7.10
v5 cover Updated Cortex-M3 series
In reply to Uwe Kleine-KönigHello,
Quoted 10 lines · Uwe Kleine-K?nig
Hello,
now that 3.5 is about to come I invested the time to update the beginning of the Cortex-M3 support.
Over all I rebased to v3.5-rc5 and addressed the comments by Russell.
It would be great to get these patches into next early after the merge window for 3.6 closes to get them into 3.7. But I won't argue if they made it into 3.6 ;-)
Now that v3.6-rc1 is out can these go into next for the next merge window?
Thanks
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
v5 cover Updated Cortex-M3 series
Quoted 1 line · Uwe Kleine-K?nig
Hello,
Hi Uwe,
Quoted 6 lines · Uwe Kleine-K?nig
Quoted 5 lines
Hello,
now that 3.5 is about to come I invested the time to update the beginning of the Cortex-M3 support.
Quoted 7 lines
Quoted 5 lines
Over all I rebased to v3.5-rc5 and addressed the comments by Russell.
It would be great to get these patches into next early after the merge window for 3.6 closes to get them into 3.7. But I won't argue if they made it into 3.6 ;-)
Now that v3.6-rc1 is out can these go into next for the next merge window?
Last time I looked at the code, patch 3/3 was adding some fairly noisy debug prints to various syscalls and pieces of signal handling. e.g.:
arch/arm/kernel/sys_arm.c +1 -0
@@ -102,6 +102,7 @@ int kernel_execve(const char *filename,* We were successful. We won't be returning to our caller, but * instead to user space by manipulating the kernel stack. */ +pr_info ("we were successful\n" ); asm("add r0, %0, %1\n\t" "mov r1, %2\n\t" "mov r2, %3\n\t"
Can we drop these bits please?
Will
v5 cover Updated Cortex-M3 series
Hello Will,
Quoted 24 lines · Will Deacon
Quoted 6 lines · Uwe Kleine-K?nig
Quoted 5 lines · Uwe Kleine-K?nig
Hello,
now that 3.5 is about to come I invested the time to update the beginning of the Cortex-M3 support.
Quoted 7 lines
Quoted 5 lines
Over all I rebased to v3.5-rc5 and addressed the comments by Russell.
It would be great to get these patches into next early after the merge window for 3.6 closes to get them into 3.7. But I won't argue if they made it into 3.6 ;-)
Now that v3.6-rc1 is out can these go into next for the next merge window?
Last time I looked at the code, patch 3/3 was adding some fairly noisy debug prints to various syscalls and pieces of signal handling. e.g.:
arch/arm/kernel/sys_arm.c +0
-0
arch/arm/kernel/sys_arm.c int kernel_execve(const char *filename, · line 108
Quoted 7 lines
arch/arm/kernel/sys_arm.c +1
-0@@ -102,6 +102,7 @@ int kernel_execve(const char *filename,* We were successful. We won't be returning to our caller, but * instead to user space by manipulating the kernel stack. */ +pr_info ("we were successful\n" ); asm("add r0, %0, %1\n\t" "mov r1, %2\n\t" "mov r2, %3\n\t"
Huh, I removed them from arch/arm/kernel/signal.c and arch/arm/kernel/sys_arm.c now and will resend in a moment. Thanks for catching that.
I saw them when testing on an arm11, but was sure they were introduced in a later patch on the stack.
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |