Merge tag 'csky-for-linus-6.2-rc1' of https://github.com/c-sky/csky-linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 19 Dec 2022 13:51:30 +0000 (07:51 -0600)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 19 Dec 2022 13:51:30 +0000 (07:51 -0600)
Pull arch/csky updates from Guo Ren:

 - Revert rseq support - it wasn't ready

 - Add current_stack_pointer support

 - Typo fixup

* tag 'csky-for-linus-6.2-rc1' of https://github.com/c-sky/csky-linux:
  Revert "csky: Add support for restartable sequence"
  Revert "csky: Fixup CONFIG_DEBUG_RSEQ"
  csky: Kconfig: Fix spelling mistake "Meory" -> "Memory"
  csky: add arch support current_stack_pointer

arch/csky/Kconfig
arch/csky/include/asm/processor.h
arch/csky/kernel/entry.S
arch/csky/kernel/signal.c
arch/csky/kernel/stacktrace.c

index adee6ab..dba02da 100644 (file)
@@ -9,6 +9,7 @@ config CSKY
        select ARCH_USE_BUILTIN_BSWAP
        select ARCH_USE_QUEUED_RWLOCKS
        select ARCH_USE_QUEUED_SPINLOCKS
+       select ARCH_HAS_CURRENT_STACK_POINTER
        select ARCH_INLINE_READ_LOCK if !PREEMPTION
        select ARCH_INLINE_READ_LOCK_BH if !PREEMPTION
        select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPTION
@@ -93,7 +94,6 @@ config CSKY
        select HAVE_PERF_USER_STACK_DUMP
        select HAVE_DMA_CONTIGUOUS
        select HAVE_REGS_AND_STACK_ACCESS_API
-       select HAVE_RSEQ
        select HAVE_STACKPROTECTOR
        select HAVE_SYSCALL_TRACEPOINTS
        select MAY_HAVE_SPARSE_IRQ
@@ -269,7 +269,7 @@ menuconfig HAVE_TCM
        bool "Tightly-Coupled/Sram Memory"
        depends on !COMPILE_TEST
        help
-         The implementation are not only used by TCM (Tightly-Coupled Meory)
+         The implementation are not only used by TCM (Tightly-Coupled Memory)
          but also used by sram on SOC bus. It follow existed linux tcm
          software interface, so that old tcm application codes could be
          re-used directly.
index 63ad71f..ea75d72 100644 (file)
@@ -84,4 +84,6 @@ unsigned long __get_wchan(struct task_struct *p);
 
 #define cpu_relax() barrier()
 
+register unsigned long current_stack_pointer __asm__("sp");
+
 #endif /* __ASM_CSKY_PROCESSOR_H */
index 547b4cd..c68cdcc 100644 (file)
@@ -54,7 +54,7 @@ ENTRY(csky_systemcall)
 
        lrw     r9, __NR_syscalls
        cmphs   syscallid, r9           /* Check nr of syscall */
-       bt      1f
+       bt      ret_from_exception
 
        lrw     r9, sys_call_table
        ixw     r9, syscallid
@@ -80,11 +80,6 @@ ENTRY(csky_systemcall)
        jsr     syscallid
 #endif
        stw     a0, (sp, LSAVE_A0)      /* Save return value */
-1:
-#ifdef CONFIG_DEBUG_RSEQ
-       mov     a0, sp
-       jbsr    rseq_syscall
-#endif
        jmpi    ret_from_exception
 
 csky_syscall_trace:
@@ -113,10 +108,6 @@ csky_syscall_trace:
        stw     a0, (sp, LSAVE_A0)      /* Save return value */
 
 1:
-#ifdef CONFIG_DEBUG_RSEQ
-       mov     a0, sp
-       jbsr    rseq_syscall
-#endif
        mov     a0, sp                  /* right now, sp --> pt_regs */
        jbsr    syscall_trace_exit
        br      ret_from_exception
index b7b3685..10da0fe 100644 (file)
@@ -179,8 +179,6 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
        sigset_t *oldset = sigmask_to_save();
        int ret;
 
-       rseq_signal_deliver(ksig, regs);
-
        /* Are we from a system call? */
        if (in_syscall(regs)) {
                /* Avoid additional syscall restarting via ret_from_exception */
index 9f78f5d..27ecd63 100644 (file)
@@ -23,10 +23,9 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
                sp = user_stack_pointer(regs);
                pc = instruction_pointer(regs);
        } else if (task == NULL || task == current) {
-               const register unsigned long current_sp __asm__ ("sp");
                const register unsigned long current_fp __asm__ ("r8");
                fp = current_fp;
-               sp = current_sp;
+               sp = current_stack_pointer;
                pc = (unsigned long)walk_stackframe;
        } else {
                /* task blocked in __switch_to */
@@ -68,8 +67,7 @@ static void notrace walk_stackframe(struct task_struct *task,
                sp = user_stack_pointer(regs);
                pc = instruction_pointer(regs);
        } else if (task == NULL || task == current) {
-               const register unsigned long current_sp __asm__ ("sp");
-               sp = current_sp;
+               sp = current_stack_pointer;
                pc = (unsigned long)walk_stackframe;
        } else {
                /* task blocked in __switch_to */