From: Guo Ren <ren_guo@c-sky.com> To: akpm@linux-foundation.org, arnd@arndb.de, daniel.lezcano@linaro.org, davem@davemloft.net, gregkh@linuxfoundation.org, hch@infradead.org, marc.zyngier@arm.com, mark.rutland@arm.com, peterz@infradead.org, robh@kernel.org, tglx@linutronix.de Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, devicetree@vger.kernel.org, robh+dt@kernel.org, c-sky_gcc_upstream@c-sky.com, Guo Ren <ren_guo@c-sky.com> Subject: [PATCH V9 09/21] csky: VDSO and rt_sigreturn Date: Tue, 16 Oct 2018 10:58:28 +0800 [thread overview] Message-ID: <cdb473fa2fc1dd5752a989a03b1b9fb2016cb1a2.1539655732.git.ren_guo@c-sky.com> (raw) In-Reply-To: <cover.1539655731.git.ren_guo@c-sky.com> In-Reply-To: <cover.1539655731.git.ren_guo@c-sky.com> This patch adds files related to VDSO and our VDSO only support rt_sigreturn. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Cc: Arnd Bergmann <arnd@arndb.de> --- arch/csky/abiv1/inc/abi/vdso.h | 17 +++++++++ arch/csky/abiv2/inc/abi/vdso.h | 23 +++++++++++ arch/csky/include/asm/vdso.h | 12 ++++++ arch/csky/kernel/vdso.c | 86 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 arch/csky/abiv1/inc/abi/vdso.h create mode 100644 arch/csky/abiv2/inc/abi/vdso.h create mode 100644 arch/csky/include/asm/vdso.h create mode 100644 arch/csky/kernel/vdso.c diff --git a/arch/csky/abiv1/inc/abi/vdso.h b/arch/csky/abiv1/inc/abi/vdso.h new file mode 100644 index 0000000..14352f5 --- /dev/null +++ b/arch/csky/abiv1/inc/abi/vdso.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include <linux/uaccess.h> + +static inline int setup_vdso_page(unsigned short *ptr) +{ + int err = 0; + + /* movi r1, 127 */ + err |= __put_user(0x67f1, ptr + 0); + /* addi r1, (139 - 127) */ + err |= __put_user(0x20b1, ptr + 1); + /* trap 0 */ + err |= __put_user(0x0008, ptr + 2); + + return err; +} diff --git a/arch/csky/abiv2/inc/abi/vdso.h b/arch/csky/abiv2/inc/abi/vdso.h new file mode 100644 index 0000000..b60d4a0 --- /dev/null +++ b/arch/csky/abiv2/inc/abi/vdso.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __ABI_CSKY_VDSO_H +#define __ABI_CSKY_VDSO_H + +#include <linux/uaccess.h> + +static inline int setup_vdso_page(unsigned short *ptr) +{ + int err = 0; + + /* movi r7, 173 */ + err |= __put_user(0xea07, ptr); + err |= __put_user(0x008b, ptr+1); + + /* trap 0 */ + err |= __put_user(0xc000, ptr+2); + err |= __put_user(0x2020, ptr+3); + + return err; +} + +#endif /* __ABI_CSKY_STRING_H */ diff --git a/arch/csky/include/asm/vdso.h b/arch/csky/include/asm/vdso.h new file mode 100644 index 0000000..d963d69 --- /dev/null +++ b/arch/csky/include/asm/vdso.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __ASM_CSKY_VDSO_H +#define __ASM_CSKY_VDSO_H + +#include <abi/vdso.h> + +struct csky_vdso { + unsigned short rt_signal_retcode[4]; +}; + +#endif /* __ASM_CSKY_VDSO_H */ diff --git a/arch/csky/kernel/vdso.c b/arch/csky/kernel/vdso.c new file mode 100644 index 0000000..60ff7ad --- /dev/null +++ b/arch/csky/kernel/vdso.c @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/kernel.h> +#include <linux/err.h> +#include <linux/sched.h> +#include <linux/mm.h> +#include <linux/init.h> +#include <linux/binfmts.h> +#include <linux/elf.h> +#include <linux/vmalloc.h> +#include <linux/unistd.h> +#include <linux/uaccess.h> + +#include <asm/vdso.h> +#include <asm/cacheflush.h> + +static struct page *vdso_page; + +static int __init init_vdso(void) +{ + struct csky_vdso *vdso; + int err = 0; + + vdso_page = alloc_page(GFP_KERNEL); + if (!vdso_page) + panic("Cannot allocate vdso"); + + vdso = vmap(&vdso_page, 1, 0, PAGE_KERNEL); + if (!vdso) + panic("Cannot map vdso"); + + clear_page(vdso); + + err = setup_vdso_page(vdso->rt_signal_retcode); + if (err) + panic("Cannot set signal return code, err: %x.", err); + + dcache_wb_range((unsigned long)vdso, (unsigned long)vdso + 16); + + vunmap(vdso); + + return 0; +} +subsys_initcall(init_vdso); + +int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) +{ + int ret; + unsigned long addr; + struct mm_struct *mm = current->mm; + + down_write(&mm->mmap_sem); + + addr = get_unmapped_area(NULL, STACK_TOP, PAGE_SIZE, 0, 0); + if (IS_ERR_VALUE(addr)) { + ret = addr; + goto up_fail; + } + + ret = install_special_mapping( + mm, + addr, + PAGE_SIZE, + VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC, + &vdso_page); + if (ret) + goto up_fail; + + mm->context.vdso = (void *)addr; + +up_fail: + up_write(&mm->mmap_sem); + return ret; +} + +const char *arch_vma_name(struct vm_area_struct *vma) +{ + if (vma->vm_mm == NULL) + return NULL; + + if (vma->vm_start == (long)vma->vm_mm->context.vdso) + return "[vdso]"; + else + return NULL; +} -- 2.7.4
next prev parent reply other threads:[~2018-10-16 3:02 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-16 2:58 [PATCH V9 00/21] C-SKY(csky) Linux Kernel Port Guo Ren 2018-10-16 2:58 ` [PATCH V9 01/21] csky: Build infrastructure Guo Ren 2018-10-23 0:08 ` Guo Ren 2018-10-24 22:53 ` Arnd Bergmann 2018-10-25 17:04 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 02/21] csky: defconfig Guo Ren 2018-10-17 14:56 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 03/21] csky: Kernel booting Guo Ren 2018-10-17 14:58 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 04/21] csky: Exception handling and mm-fault Guo Ren 2018-10-17 14:59 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 05/21] csky: System Call Guo Ren 2018-10-17 15:02 ` Arnd Bergmann 2018-10-18 2:02 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 06/21] csky: Cache and TLB routines Guo Ren 2018-10-17 15:08 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 07/21] csky: MMU and page table management Guo Ren 2018-10-17 15:06 ` Arnd Bergmann 2018-10-18 2:05 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 08/21] csky: Process management and Signal Guo Ren 2018-10-17 15:11 ` Arnd Bergmann 2018-10-18 2:37 ` Guo Ren 2018-10-16 2:58 ` Guo Ren [this message] 2018-10-17 15:13 ` [PATCH V9 09/21] csky: VDSO and rt_sigreturn Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 10/21] csky: IRQ handling Guo Ren 2018-10-17 15:14 ` Arnd Bergmann 2018-10-18 2:39 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 11/21] csky: Atomic operations Guo Ren 2018-10-17 15:17 ` Arnd Bergmann 2018-10-18 2:40 ` Guo Ren 2018-10-21 20:55 ` Peter Zijlstra 2018-10-22 1:52 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 12/21] csky: ELF and module probe Guo Ren 2018-10-17 15:18 ` Arnd Bergmann 2018-10-18 2:49 ` Guo Ren 2018-10-18 8:31 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 13/21] csky: Library functions Guo Ren 2018-10-17 15:24 ` Arnd Bergmann 2018-10-18 3:10 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 14/21] csky: User access Guo Ren 2018-10-17 15:37 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 15/21] csky: Debug and Ptrace GDB Guo Ren 2018-10-17 15:46 ` Arnd Bergmann 2018-10-18 3:17 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 16/21] csky: SMP support Guo Ren 2018-10-17 15:47 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 17/21] csky: Misc headers Guo Ren 2018-10-17 15:49 ` Arnd Bergmann 2018-10-16 2:58 ` [PATCH V9 18/21] dt-bindings: csky CPU Bindings Guo Ren 2018-10-17 15:50 ` Arnd Bergmann 2018-10-18 3:21 ` Guo Ren 2018-10-18 3:45 ` Guo Ren 2018-10-18 14:31 ` Rob Herring 2018-10-19 2:19 ` Guo Ren 2018-10-16 2:58 ` [PATCH V9 19/21] dt-bindings: Add vendor prefix for csky Guo Ren 2018-10-16 2:58 ` [PATCH V9 20/21] MAINTAINERS: Add csky Guo Ren 2018-10-17 15:51 ` Arnd Bergmann 2018-10-16 5:48 ` [PATCH V9 21/21] csky: support dword access for get_user_size() Guo Ren 2018-10-17 15:44 ` Arnd Bergmann 2018-10-18 3:41 ` Guo Ren 2018-10-18 8:34 ` Arnd Bergmann 2018-10-18 8:57 ` Guo Ren 2018-10-24 7:17 ` Arnd Bergmann 2018-10-25 17:08 ` Guo Ren 2018-10-17 15:58 ` [PATCH V9 00/21] C-SKY(csky) Linux Kernel Port Arnd Bergmann 2018-10-18 4:10 ` Guo Ren 2018-10-18 8:36 ` Arnd Bergmann 2018-10-18 9:03 ` Guo Ren
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cdb473fa2fc1dd5752a989a03b1b9fb2016cb1a2.1539655732.git.ren_guo@c-sky.com \ --to=ren_guo@c-sky.com \ --cc=akpm@linux-foundation.org \ --cc=arnd@arndb.de \ --cc=c-sky_gcc_upstream@c-sky.com \ --cc=daniel.lezcano@linaro.org \ --cc=davem@davemloft.net \ --cc=devicetree@vger.kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=hch@infradead.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=marc.zyngier@arm.com \ --cc=mark.rutland@arm.com \ --cc=peterz@infradead.org \ --cc=robh+dt@kernel.org \ --cc=robh@kernel.org \ --cc=tglx@linutronix.de \ --subject='Re: [PATCH V9 09/21] csky: VDSO and rt_sigreturn' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).