From patchwork Mon Dec 17 10:40:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Firoz Khan X-Patchwork-Id: 153978 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp2311696ljp; Mon, 17 Dec 2018 02:41:47 -0800 (PST) X-Google-Smtp-Source: AFSGD/VwxhrzvRgzW61PG4OTpdh0ENGqId6wuv60prwlzuc2Zhx9n5kkhsZw3zkZDHuvN8wIEzv2 X-Received: by 2002:a62:442:: with SMTP id 63mr12120991pfe.156.1545043306897; Mon, 17 Dec 2018 02:41:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545043306; cv=none; d=google.com; s=arc-20160816; b=eOmPZN+xn48/P/+QwPWa2v30ADAf2IPw6cYh8h8RTK5D8bfPtZaTI7I6HP0lKQ1D2m XBEkJuqxXJOU7ELj/DstsZoLKT2yWyU4wBZRyXT34OHpEl6KDKq+8hejYEp+8mjUzj0M QDrinTdptzM4GTJyhb9IrIQS8AoQzRE/KeAUBN3npiumc1rLIo/5uMwz8HI/tiXFI+YQ ln826/JNHcWLwLDHyAOBAIjli7N4QB7hFEy/chd7TMfD/GK11yNuSY9tNjIhYYHB05SE x54h0er6S1igPpwvygWrFoVvVLsY8KYzrhKsfvZ7eQm+7AyBm35uG5DzIcNDcZJmqv+9 W3uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=O2M3lHo2o6XYI5wC/7SaWlJ8PncIq3R9Hnh0sXXFTvk=; b=rbLxEZ/SPUmI6MmUqF29gnJ8pU0j5kuHEroWvXbvo3ejiNrGuNtqQ9LpWBzOW3lPG8 SinCTNkjp17xe0Ji0ekTHilTlS7Sc8kIF1P2BckCoYoY9CKtQwD+FwRbmvOR1jX9o/IX zW7GyiUr2RepE3acdePrrtnlYP2cWEF56Rr//xPiOdoL3QEYcZ1fclN4aCdJaTvf5Kxv uhJwFI0qMfeGW5nOaOfvGVxWN03cO4F3teTAJipyIeu+9gqsZG0GJsRNQ2HAkvRb8ynj R/PnDaJv97sJhKjxMSOlWiHhFhI7fJCjieZVvZ4z8dhG5CV34elucKnnOiO/7Df9lrVz zQFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HObR345Z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q4si10791049pfq.56.2018.12.17.02.41.46; Mon, 17 Dec 2018 02:41:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HObR345Z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732424AbeLQKlo (ORCPT + 31 others); Mon, 17 Dec 2018 05:41:44 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:43253 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732410AbeLQKln (ORCPT ); Mon, 17 Dec 2018 05:41:43 -0500 Received: by mail-pg1-f196.google.com with SMTP id v28so5920782pgk.10 for ; Mon, 17 Dec 2018 02:41:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=O2M3lHo2o6XYI5wC/7SaWlJ8PncIq3R9Hnh0sXXFTvk=; b=HObR345Zskt+VvPJbFlKmEepcBUOQO9DgrUeR8VNlrZHRAIVhSZw3VH9oU9LVNnb7D taDjnsOSBQswtf9MJNbTY7wfgXGjb6BPDednhTT6vVIItnfvafl2L5BZ0yBY6EvdWBT3 vF96EIqhAII/OCMbQbUkxy/5Tl3IcehqGIJTw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=O2M3lHo2o6XYI5wC/7SaWlJ8PncIq3R9Hnh0sXXFTvk=; b=LVXgkkUIDpSVdVEkgYbUroyvqYbvAYihDM1L376i9cVqNfwht+VZvKcTxZGl94uSB0 RQMpshOtmATmJylq56jAecnj59ITWZA9q0xBE+hov9ngeheqLb3GOLvxyUFw6HudT4cO wt2ijfdo/claShOVxl2y534YFzIbchGoEkyh5lXrWBTpYDv4a02ETgnhREoN3iAOvprz w2h4wosqIA7hXQzBWpulNgndRC3yR0e+wU9ihFtJGbQKp8kq+AQ0LBmCvGNLueZw+Kju 554e67yimyf/KySqyiSL6cg/4Xjh+hu8E1UwYXcq94qcLY7qbMMTc5NItMbUlUSjr2Ap O7DQ== X-Gm-Message-State: AA+aEWYzZ1soAmVRQotEAvtCD28DEHaQEwxDTIfhmDeUdj2uSj3a3/DY FI2tLrqiZhevjxk96vNNlioMMw== X-Received: by 2002:a63:801:: with SMTP id 1mr11564326pgi.275.1545043302786; Mon, 17 Dec 2018 02:41:42 -0800 (PST) Received: from qualcomm-HP-ZBook-14-G2.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id b27sm17224826pfh.113.2018.12.17.02.41.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 17 Dec 2018 02:41:42 -0800 (PST) From: Firoz Khan To: linuxppc-dev@lists.ozlabs.org, sathnaga@linux.vnet.ibm.com, Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Arnd Bergmann , Geert Uytterhoeven , Ram Pai , Mathieu Desnoyers , Boqun Feng , Breno Leitao , Greg Kroah-Hartman , Philippe Ombredanne , Thomas Gleixner , Kate Stewart Cc: y2038@lists.linaro.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, deepa.kernel@gmail.com, marcin.juszkiewicz@linaro.org, firoz.khan@linaro.org Subject: [PATCH v6 4/5] powerpc: split compat syscall table out from native table Date: Mon, 17 Dec 2018 16:10:35 +0530 Message-Id: <1545043236-11649-5-git-send-email-firoz.khan@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1545043236-11649-1-git-send-email-firoz.khan@linaro.org> References: <1545043236-11649-1-git-send-email-firoz.khan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PowerPC uses a syscall table with native and compat calls interleaved, which is a slightly simpler way to define two matching tables. As we move to having the tables generated, that advantage is no longer important, but the interleaved table gets in the way of using the same scripts as on the other archit- ectures. Split out a new compat_sys_call_table symbol that contains all the compat calls, and leave the main table for the nat- ive calls, to more closely match the method we use every- where else. Suggested-by: Arnd Bergmann Signed-off-by: Firoz Khan --- arch/powerpc/include/asm/syscall.h | 3 +-- arch/powerpc/kernel/entry_64.S | 7 +++++-- arch/powerpc/kernel/systbl.S | 35 ++++++++++++++++++++++++++++------- arch/powerpc/kernel/vdso.c | 7 +++++-- 4 files changed, 39 insertions(+), 13 deletions(-) -- 1.9.1 diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h index ab9f3f0..1a0e7a8 100644 --- a/arch/powerpc/include/asm/syscall.h +++ b/arch/powerpc/include/asm/syscall.h @@ -18,9 +18,8 @@ #include /* ftrace syscalls requires exporting the sys_call_table */ -#ifdef CONFIG_FTRACE_SYSCALLS extern const unsigned long sys_call_table[]; -#endif /* CONFIG_FTRACE_SYSCALLS */ +extern const unsigned long compat_sys_call_table[]; static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs) { diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 7b1693a..5574d92 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -54,6 +54,9 @@ SYS_CALL_TABLE: .tc sys_call_table[TC],sys_call_table +COMPAT_SYS_CALL_TABLE: + .tc compat_sys_call_table[TC],compat_sys_call_table + /* This value is used to mark exception frames on the stack. */ exception_marker: .tc ID_EXC_MARKER[TC],STACK_FRAME_REGS_MARKER @@ -173,7 +176,7 @@ system_call: /* label this so stack traces look sane */ ld r11,SYS_CALL_TABLE@toc(2) andis. r10,r10,_TIF_32BIT@h beq 15f - addi r11,r11,8 /* use 32-bit syscall entries */ + ld r11,COMPAT_SYS_CALL_TABLE@toc(2) clrldi r3,r3,32 clrldi r4,r4,32 clrldi r5,r5,32 @@ -181,7 +184,7 @@ system_call: /* label this so stack traces look sane */ clrldi r7,r7,32 clrldi r8,r8,32 15: - slwi r0,r0,4 + slwi r0,r0,3 barrier_nospec_asm /* diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.S index 9ff1913..0fa84e1 100644 --- a/arch/powerpc/kernel/systbl.S +++ b/arch/powerpc/kernel/systbl.S @@ -17,13 +17,13 @@ #include #ifdef CONFIG_PPC64 -#define SYSCALL(func) .8byte DOTSYM(sys_##func),DOTSYM(sys_##func) -#define COMPAT_SYS(func) .8byte DOTSYM(sys_##func),DOTSYM(compat_sys_##func) -#define PPC_SYS(func) .8byte DOTSYM(ppc_##func),DOTSYM(ppc_##func) -#define OLDSYS(func) .8byte DOTSYM(sys_ni_syscall),DOTSYM(sys_ni_syscall) -#define SYS32ONLY(func) .8byte DOTSYM(sys_ni_syscall),DOTSYM(compat_sys_##func) -#define PPC64ONLY(func) .8byte DOTSYM(ppc_##func),DOTSYM(sys_ni_syscall) -#define SYSX(f, f3264, f32) .8byte DOTSYM(f),DOTSYM(f3264) +#define SYSCALL(func) .8byte DOTSYM(sys_##func) +#define COMPAT_SYS(func) .8byte DOTSYM(sys_##func) +#define PPC_SYS(func) .8byte DOTSYM(ppc_##func) +#define OLDSYS(func) .8byte DOTSYM(sys_ni_syscall) +#define SYS32ONLY(func) .8byte DOTSYM(sys_ni_syscall) +#define PPC64ONLY(func) .8byte DOTSYM(ppc_##func) +#define SYSX(f, f3264, f32) .8byte DOTSYM(f) #else #define SYSCALL(func) .long sys_##func #define COMPAT_SYS(func) .long sys_##func @@ -46,6 +46,27 @@ .globl sys_call_table sys_call_table: +#include + +#undef SYSCALL +#undef COMPAT_SYS +#undef PPC_SYS +#undef OLDSYS +#undef SYS32ONLY +#undef PPC64ONLY +#undef SYSX +#ifdef CONFIG_COMPAT +#define SYSCALL(func) .8byte DOTSYM(sys_##func) +#define COMPAT_SYS(func) .8byte DOTSYM(compat_sys_##func) +#define PPC_SYS(func) .8byte DOTSYM(ppc_##func) +#define OLDSYS(func) .8byte DOTSYM(sys_ni_syscall) +#define SYS32ONLY(func) .8byte DOTSYM(compat_sys_##func) +#define PPC64ONLY(func) .8byte DOTSYM(sys_ni_syscall) +#define SYSX(f, f3264, f32) .8byte DOTSYM(f3264) + +.globl compat_sys_call_table +compat_sys_call_table: #define compat_sys_sigsuspend sys_sigsuspend #include +#endif diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 65b3bdb..7725a97 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -671,15 +671,18 @@ static void __init vdso_setup_syscall_map(void) { unsigned int i; extern unsigned long *sys_call_table; +#ifdef CONFIG_PPC64 + extern unsigned long *compat_sys_call_table; +#endif extern unsigned long sys_ni_syscall; for (i = 0; i < NR_syscalls; i++) { #ifdef CONFIG_PPC64 - if (sys_call_table[i*2] != sys_ni_syscall) + if (sys_call_table[i] != sys_ni_syscall) vdso_data->syscall_map_64[i >> 5] |= 0x80000000UL >> (i & 0x1f); - if (sys_call_table[i*2+1] != sys_ni_syscall) + if (compat_sys_call_table[i] != sys_ni_syscall) vdso_data->syscall_map_32[i >> 5] |= 0x80000000UL >> (i & 0x1f); #else /* CONFIG_PPC64 */