From b1a9aaad4ef4468b3887572e815dbb0676adb01a Mon Sep 17 00:00:00 2001 From: Yoshinori Sato Date: Fri, 28 Jan 2022 00:32:48 +0900 Subject: [PATCH] rx: wire up 5.15. Signed-off-by: Yoshinori Sato --- arch/rx/kernel/asm-offsets.c | 1 - arch/rx/kernel/process.c | 42 ++++++++++++++++--------------- arch/rx/kernel/ptrace.c | 18 ++++++-------- arch/rx/kernel/setup.c | 59 ++++++++++++-------------------------------- arch/rx/kernel/signal.c | 14 +++++------ arch/rx/kernel/traps.c | 24 +++++++++--------- 6 files changed, 64 insertions(+), 94 deletions(-) diff --git a/arch/rx/kernel/asm-offsets.c b/arch/rx/kernel/asm-offsets.c index 5b299f20263a..d1a9a1b60836 100644 --- a/arch/rx/kernel/asm-offsets.c +++ b/arch/rx/kernel/asm-offsets.c @@ -20,7 +20,6 @@ int main(void) { /* offsets into the task struct */ - DEFINE(TASK_STATE, offsetof(struct task_struct, state)); DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); diff --git a/arch/rx/kernel/process.c b/arch/rx/kernel/process.c index 51693091cb10..9e52401b8eef 100644 --- a/arch/rx/kernel/process.c +++ b/arch/rx/kernel/process.c @@ -60,24 +60,26 @@ void machine_power_off(void) void show_regs(struct pt_regs * regs) { - printk("\n"); - printk("Pid : %d, Comm: \t\t%s\n", task_pid_nr(current), current->comm); - printk("PC is at %pS\n", (void *)instruction_pointer(regs)); - - printk("PC : %08lx SP : %08lx PSW : %08lx\n", - regs->pc, regs->r[0], regs->psw); - printk("R1 : %08lx R2 : %08lx R3 : %08lx\n", - regs->r[1], - regs->r[2],regs->r[3]); - printk("R4 : %08lx R5 : %08lx R6 : %08lx R7 : %08lx\n", - regs->r[4],regs->r[5], - regs->r[6],regs->r[7]); - printk("R8 : %08lx R9 : %08lx R10 : %08lx R11 : %08lx\n", - regs->r[8],regs->r[9], - regs->r[10],regs->r[11]); - printk("R12 : %08lx R13 : %08lx R14 : %08lx R15 : %08lx\n", - regs->r[12],regs->r[13], - regs->r[14],regs->r[15]); + show_regs_print_info(KERN_DEFAULT); + pr_notice("\n"); + pr_notice("Pid : %d, Comm: \t\t%s\n", + task_pid_nr(current), current->comm); +- pr_notice("PC is at %pS\n", (void *)instruction_pointer(regs)); + + pr_notice("PC : %08lx SP : %08lx PSW : %08lx\n", + regs->pc, regs->r[0], regs->psw); + pr_notice("R1 : %08lx R2 : %08lx R3 : %08lx\n", + regs->r[1], + regs->r[2],regs->r[3]); + pr_notice("R4 : %08lx R5 : %08lx R6 : %08lx R7 : %08lx\n", + regs->r[4],regs->r[5], + regs->r[6],regs->r[7]); + pr_notice("R8 : %08lx R9 : %08lx R10 : %08lx R11 : %08lx\n", + regs->r[8],regs->r[9], + regs->r[10],regs->r[11]); + pr_notice("R12 : %08lx R13 : %08lx R14 : %08lx R15 : %08lx\n", + regs->r[12],regs->r[13], + regs->r[14],regs->r[15]); } asmlinkage void ret_from_fork(void); @@ -89,7 +91,7 @@ void flush_thread(void) int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long topstk, - struct task_struct * p) + struct task_struct * p, unsigned long tls) { struct pt_regs *childregs = (struct pt_regs *) (THREAD_SIZE + task_stack_page(p)) - 1; @@ -119,7 +121,7 @@ unsigned long get_wchan(struct task_struct *p) unsigned long fp; unsigned long stack_page; - if (!p || p == current || p->state == TASK_RUNNING) + if (!p || p == current || task_is_running(p)) return 0; stack_page = (unsigned long)p; diff --git a/arch/rx/kernel/ptrace.c b/arch/rx/kernel/ptrace.c index 00d8164f5dd1..1b8f241858d5 100644 --- a/arch/rx/kernel/ptrace.c +++ b/arch/rx/kernel/ptrace.c @@ -27,23 +27,19 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) */ ret = -1L; - if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) - trace_sys_enter(regs, regs->r[8]); - - if (unlikely(current->audit_context)) - audit_syscall_entry(regs->r[1], regs->r[2], regs->r[3], - regs->r[4], regs->r[5]); + audit_syscall_entry(regs->r[1], regs->r[2], regs->r[3], + regs->r[4], regs->r[5]); return ret ?: regs->r[1]; } asmlinkage void syscall_trace_leave(struct pt_regs *regs) { - audit_syscall_exit(regs); + int step; - if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) - trace_sys_exit(regs, regs->r[1]); + audit_syscall_exit(regs); - if (test_thread_flag(TIF_SYSCALL_TRACE)) - tracehook_report_syscall_exit(regs, 0); + step = test_thread_flag(TIF_SINGLESTEP); + if (step || test_thread_flag(TIF_SYSCALL_TRACE)) + tracehook_report_syscall_exit(regs, step); } diff --git a/arch/rx/kernel/setup.c b/arch/rx/kernel/setup.c index 11c72753253e..3bf2d49e59da 100644 --- a/arch/rx/kernel/setup.c +++ b/arch/rx/kernel/setup.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -31,64 +30,43 @@ #include #include -unsigned long rom_length; unsigned long memory_start; unsigned long memory_end; +unsigned int rx_ram_pfn_base; #ifdef CONFIG_VT struct screen_info screen_info; #endif -static struct resource code_resource = { - .name = "Kernel code", -}; -static struct resource data_resource = { - .name = "Kernel data", -}; +void __init rx_fdt_init(phys_addr_t dt_phys) +{ + void *dt_virt; -static struct resource bss_resource = { - .name = "Kernel bss", -}; +#ifdef CONFIG_USE_BUILTIN_DTB + dt_virt = __dtb_start; +#else + dt_virt = phys_to_virt(dt_phys); +#endif -void __init rx_fdt_init(void *fdt) -{ - char saved_command_line[512]; - - *saved_command_line = 0; - if (fdt == (void *)-1) { - memcpy(saved_command_line, boot_command_line, - sizeof(saved_command_line)); - fdt = NULL; - } - if (!fdt) - fdt = __dtb_start; - - early_init_dt_scan(fdt); - memblock_allow_resize(); - if (*saved_command_line) - memcpy(boot_command_line, saved_command_line, - sizeof(saved_command_line)); + early_init_dt_scan(dt_virt); } static void __init bootmem_init(void) { - struct memblock_region *region; - memory_end = memory_start = 0; /* Find main memory where is the kernel */ - for_each_memblock(memory, region) { - memory_start = region->base; - memory_end = region->base + region->size; - } + memory_start = memblock_start_of_DRAM(); + memory_end = memblock_end_of_DRAM(); if (!memory_end) panic("No memory!"); /* setup bootmem globals (we use no_bootmem, but mm still depends on this) */ + rx_ram_pfn_base = memory_start >> PAGE_SHIFT; min_low_pfn = PFN_UP(memory_start); - max_low_pfn = PFN_DOWN(memblock_end_of_DRAM()); + max_low_pfn = PFN_DOWN(memory_end); max_pfn = max_low_pfn; memblock_reserve(__pa(_stext), _end - _stext); @@ -96,18 +74,13 @@ static void __init bootmem_init(void) early_init_fdt_reserve_self(); early_init_fdt_scan_reserved_mem(); - memblock_dump_all(); } void __init setup_arch(char **cmdline_p) { - memblock_set_current_limit(CONFIG_RAMEND - 0x10000); - unflatten_and_copy_device_tree(); + unflatten_device_tree(); - init_mm.start_code = (unsigned long) &_stext; - init_mm.end_code = (unsigned long) &_etext; - init_mm.end_data = (unsigned long) &_edata; - init_mm.brk = 0; + setup_initial_init_mm(_text, _etext, _edata, _end); *cmdline_p = boot_command_line; diff --git a/arch/rx/kernel/signal.c b/arch/rx/kernel/signal.c index 970b2c430239..1d94200f17f3 100644 --- a/arch/rx/kernel/signal.c +++ b/arch/rx/kernel/signal.c @@ -33,7 +33,7 @@ restore_sigcontext(struct sigcontext __user *sc, unsigned int err = 0; /* Always make any pending restarted system calls return -EINTR */ - current_thread_info()->restart_block.fn = do_no_restart_syscall; + current->restart_block.fn = do_no_restart_syscall; #define COPY(x) err |= __get_user(regs->x, &sc->sc_##x) COPY(r[0]); COPY(r[1]); @@ -59,9 +59,9 @@ asmlinkage int sys_rt_sigreturn(void) sigset_t set; unsigned long r1; - if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) + if (!access_ok(frame, sizeof(*frame))) goto badframe; - if (raw_copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) + if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) goto badframe; set_current_blocked(&set); @@ -75,7 +75,7 @@ asmlinkage int sys_rt_sigreturn(void) return r1; badframe: - force_sig(SIGSEGV, current); + force_sig(SIGSEGV); return 0; } @@ -132,7 +132,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, frame = get_sigframe(ksig, regs->usp, sizeof(*frame)); - if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) + if (!access_ok(frame, sizeof(*frame))) return -EFAULT; if (ksig->ka.sa.sa_flags & SA_SIGINFO) @@ -163,8 +163,6 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, regs->r[3] = (unsigned long)&frame->uc; regs->pc = (unsigned long)ksig->ka.sa.sa_handler; - set_fs(USER_DS); - return 0 ; } @@ -192,7 +190,7 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka) regs->r[1] = -EINTR; break; } - /* fallthrough */ + fallthrough; case -ERESTARTNOINTR: do_restart: regs->pc -= 1; diff --git a/arch/rx/kernel/traps.c b/arch/rx/kernel/traps.c index 996c19dfc9d5..57566a46b59f 100644 --- a/arch/rx/kernel/traps.c +++ b/arch/rx/kernel/traps.c @@ -52,15 +52,13 @@ struct installed_exception { }; static void do_trap(int signr, char *str, struct pt_regs *regs, - siginfo_t *info) + kernel_siginfo_t *info) { - struct task_struct *tsk = current; - if (user_mode(regs)) { if (info) - force_sig_info(signr, info, tsk); + force_sig_info(info); else - force_sig(signr, tsk); + force_sig(signr); } else { die(str, regs); } @@ -76,7 +74,7 @@ static inline void conditional_sti(struct pt_regs *regs) #define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \ asmlinkage void do_##name(struct pt_regs *regs) \ { \ - siginfo_t info; \ + kernel_siginfo_t info; \ info.si_signo = signr; \ info.si_errno = 0; \ info.si_code = sicode; \ @@ -88,10 +86,14 @@ asmlinkage void do_##name(struct pt_regs *regs) \ do_trap(signr, str, regs, &info); \ } -DO_ERROR_INFO(20, SIGILL, "privileged exception", privileged_op, ILL_PRVOPC, regs->pc) -DO_ERROR_INFO(21, SIGSEGV, "access exception", eaccess, SEGV_ACCERR, regs->pc) -DO_ERROR_INFO(23, SIGILL, "invalid opcode", invalid_op, ILL_ILLOPC, regs->pc) -DO_ERROR_INFO(48, SIGBUS, "BUS error", buserr, BUS_ADRERR, regs->pc) +DO_ERROR_INFO(20, SIGILL, "privileged exception", + privileged_op, ILL_PRVOPC, regs->pc) +DO_ERROR_INFO(21, SIGSEGV, "access exception", + eaccess, SEGV_ACCERR, regs->pc) +DO_ERROR_INFO(23, SIGILL, "invalid opcode", + invalid_op, ILL_ILLOPC, regs->pc) +DO_ERROR_INFO(48, SIGBUS, "BUS error", + buserr, BUS_ADRERR, regs->pc) static inline int fpsw_decode(void) { @@ -111,7 +113,7 @@ static inline int fpsw_decode(void) asmlinkage void do_fpuerror(struct pt_regs *regs) { - siginfo_t info; + kernel_siginfo_t info; info.si_signo = fpsw_decode(); info.si_errno = 0; info.si_addr = (void __user *)regs->pc; -- 2.11.0