From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758190AbcEFOEz (ORCPT ); Fri, 6 May 2016 10:04:55 -0400 Received: from mail-bn1bon0068.outbound.protection.outlook.com ([157.56.111.68]:54080 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1757430AbcEFOEv (ORCPT ); Fri, 6 May 2016 10:04:51 -0400 Authentication-Results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=caviumnetworks.com; Date: Fri, 6 May 2016 17:00:22 +0300 From: Yury Norov To: Andrew Pinski CC: "Zhangjian (Bamvor)" , Arnd Bergmann , Catalin Marinas , Linux-Arch , linux-s390 , "Kapoor, Prasun" , Andreas Schwab , Mark Brown , , Heiko Carstens , LKML , Alexander Graf , Alexey Klimov , "Joseph S. Myers" , Martin Schwidefsky , Nathan Lynch , Philipp Tomsich , "linux-arm-kernel@lists.infradead.org" , , Hanjun Guo Subject: Re: [PATCH 24/25] arm64:ilp32: add vdso-ilp32 and use for signal return Message-ID: <20160506140022.GA18587@yury-N73SV> References: <1459894127-17698-1-git-send-email-ynorov@caviumnetworks.com> <1554541.oDP7Ro5zB2@wuerfel> <20160503090045.GB10733@e104818-lin.cambridge.arm.com> <3846428.6xx69KGEja@wuerfel> <57288660.9030607@huawei.com> <57289C75.50904@huawei.com> <20160504214949.GA28217@yury-N73SV> <572AAED2.7050604@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: AM2PR09CA0048.eurprd09.prod.outlook.com (10.160.228.144) To CY1PR07MB2230.namprd07.prod.outlook.com (10.164.112.144) X-MS-Office365-Filtering-Correlation-Id: dbc7339c-891e-41cb-3d83-08d375b76291 X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2230;2:JGXo8NK9hjvupbZH+b8jWaX3+ZIXto8Sn6tgl+HyFve5fLTY8Uds6d9SWREaplNyGdmDG8z9qEUgwc4accHdQSSQRHojHKVNcVF2SXBefS7H+3MDYx8/xkcurt1Hvzo19fWy/sa86E6C12ePd9St/lKR32y9sAqMC8Tai3lhTsnH5fu+2ZEAXdp36FcE38n5;3:UWpJPLYArB+St5Hxb6rw5BKeMe+pdODlk3JmlnPtVBYze5iy1sENX9IFRDlgqImC0OoaXRoKBzavI4GzxJRDxeKOj4fiDlke0T6+3stj51cD+vKJHIpvra6OJnBGmnDv X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2230; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2230;25:A4LICaORxE2JxABt7S+c0kraCa9+ENm1FUO08qgFvaP9Fgw0Soj1Fvexa+bVh/lJs/yUPI/UPa9TzL33JogIV6SdJxV4UeRPKmlrHZ+ek+GdfUIKvWdEvVZMtBVJVrW/XqW85ArtUOL6Eow0ir3Svi0lXbSxpkJCWj3nVnJ4Nz58XClEGnDDBiX4vqoCa5eJW0KaHaYoBjGQuNCXQN392BtvBrJDzI6CGlRaa/FWg7fztO6CyNBW0qNBspIiAbF3oWJuDrtJWrZ5AhiracrmZitsxNUOVv+JqkCB8eti1iH/mgImZtBdUPOLfX/0pkJY0NODWdfWa9VIjMY/42k3qbPAyfABUYHbPGAURtRURvGdGCO4stBvFNJ1UyS9aKBvNHv/Qgsq7Uzu6HW4i9oA1UIUDZy76mCn697VPPVqlMN1sS5mDTscPaGsk9mOBSlAAXsAIxdQlFMvJLT6hwanDWZNMqy2n8cjHDVQo3Wtzzirm68dq1yvDWBWYZTo4U7h7z50nIOasdmd1c/stLRVLRIsF2ikutqrGJPQyAa3mZVUmOjvla8NZyzc2Wji9aCrl0A11VeX9bYACLVwz59oIjSlQw/Fg6NbU0YjZkb+FwWh/3K2mSxX448p93yU+ATNys9ysM938G0YIuf46LGh3x+TGZp8Z5rwuD+TAmv0vJ0Azg0kLE4uXXnjvTbQKiCk+RFFu4FHiClZpXpAcftKDUPiMllCugPLEnbmWF7pNN6LIsyf+qHTnOTz9AHi9jek82s+HSzG/vHnTN3+0vjeFTnm+p040Hr82+0x+0/hmyo= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2230;20:NOcVq7mlL6ED6yyv994Ch3JOWb0B6VEQRbcvWiPDSIudo1nEkfYqdurK4Du7qO4gMC5Y81DX+3VxAthLRpuvXXJZcuUv2kpu7DGCgfskHyixDXKukvkPVRnv7XIq853Wd56Ht4x1+INprsDbjkmW0yTML0j9+TDD1omOSV4Q+lN/Ek5U4uq7uhih8MdttAfJORKN9pQksu9Pf4DYuBlgP1Nt9W7trT3Qa2Wo1va8MAxfL4LsHn+/ZlU5dX/NzCraU79klIuBn1UcboVW2u5jI77jSKnysTu5Q4Lh/T7SyaUlxJ0XHn+iY+gfTfqJHVTl2u9bCx2ufHAMh7JQYpy2qMt2PYQ7b+kH5hkKYvw+Py+E8Ld+7+pa6/NbOnDFUDySL9glheBhxPzZDQ/H88geED3KfFRa+Xz0F7HVPZJMiAL66u3VTWcicx7bLCRXIcKODEVC7338pNwLgcm/ty/wxDH1p5a3J081/8UgSmn/vYI/2udBDynaPQ4fR5l1L4RpUv5L8y0EjDbkQE46xmUjRCUwFZ5wUIrW0gjCX7/ZvV05rXa4TQYJFm+P9UxPmsgRkKQc4CbSOP224q+x3iWMtVafLq2Szk6fkM2DAZRMet8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:CY1PR07MB2230;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2230; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2230;4:ekRbh8bnT0mp7YExj1bIa17fzCM5Q7J1DgQ7/di7QNCut2COGMraibkFPIBm3VMBgVHcrllnaUcxb1NI7fkf/y2e/LEZ4dAHxB5Q5Nb1GF8xsUEoiJeenDtVc43UZV794n1VYo9e2AMXboTL9JX9xspN4LQ/DZvgwTII0nQruQg4L6nXlSIP6hhBJX6HwReoePSeslxq+U5puIgVyO61gqxuLzQfejzZn2IGOhN/7ut/uCwcpzSIZjamr4dvUP2J7DCSqnAACszkMmeRTZw3KkFiaF/yjcVyvWvahcPIUjp1o55atjkxYBEMDUSQa5b4B29mLf91xSEAY5LChT7+FeZJEEm/ekVe6qEJTWaVTU9VCZKplfW14i4E3o+b4724 X-Forefront-PRVS: 09347618C4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(1076002)(23726003)(83506001)(189998001)(42186005)(47776003)(93886004)(66066001)(1411001)(586003)(4001350100001)(50466002)(77096005)(6116002)(97756001)(110136002)(3846002)(5008740100001)(33656002)(5004730100002)(92566002)(46406003)(4326007)(33716001)(2950100001)(76176999)(54356999)(81166005)(2906002)(19580405001)(76506005)(9686002)(19580395003)(50986999);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2230;H:localhost;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR07MB2230;23:Wh17qZ2KmYhrIUN7hoAcEPFj6sElVKGuI338roAj+?= =?us-ascii?Q?m/kn+GprfRjL6zQZO27HoJ9PscaX1wX3T3GuDQy2M1OgQ2dEgcHyJjRgTaJc?= =?us-ascii?Q?hRR7YKlguofP1lnYX7uz7vYjCSEtpLAv4+cz5TmbaKN+R2/iMVjSDREX2pOU?= =?us-ascii?Q?10MR8JjCVqejlVJvYqLOiQw0KHvUfRXjcR8RtwppAGq1b9hMl9R8zF8i3PM+?= =?us-ascii?Q?i/sd2yipER0+5+pJQBJWa5ySCzfjpUp/p29KP3P9yrBggwi8vwvmlGRgIs+q?= =?us-ascii?Q?Pe/i9oaIyWJ6S9fUt3LSKGAmIhlJ277oU4YOZRmUn1kzu5p4vZDbQ/F9R/Il?= =?us-ascii?Q?5qEdmJPxMC+VCzDCLm4fzvSbjSHtzRSKK+dFyJ9dHTPM+sHqNY/3TClYs2CT?= =?us-ascii?Q?+vJN5DDwpS79jqfUdFQekwY5CRcQ/aI7uSecCSI0UNd3ub7RklNAZa05pACj?= =?us-ascii?Q?c3PxlKTwF7hUHCd7m9M+s42qKdVlqpV1r5fgqRhJVd2VFHeIQgiZUQxWZBoB?= =?us-ascii?Q?xNq/d42Gf1c5FsmMDQD6qAlMefTzRfEBqbpiJeSaP6kFlO0zP1gh4DBN8Tgv?= =?us-ascii?Q?kcQBBsLskMxY/hjZolcprTr2fcxL9Cmq3wmqpiGmiGf4NTlZkgmaCz86hYcs?= =?us-ascii?Q?73y0fx6/OAANYTclhXMNISJiP/EnGijaxkbBPO0tY2c6YBtyRZ/q/ZQWTdNw?= =?us-ascii?Q?0Hcpnaxc89fKvvHwLGPzhnUshJbnl1pQLze0UCdzxHkuJPBHp8C6oT/VPaQZ?= =?us-ascii?Q?N6IaeCklTXINfzstuUtqUnjktUSLmlGfbrlAPSF5kEc+ML7RxrEUz1ZUpzFu?= =?us-ascii?Q?O79L4XXaY2AWKKdjJyfQQJWuLsjiJjaUDipZLzhahTgiyTH1qKRAwtvoqLbc?= =?us-ascii?Q?Iuaa6/Rz2zb52cNzpCAL+bHy+ELEz9qS6b+SHAYzuvY8qHsKTC3GMr0tMmMA?= =?us-ascii?Q?L8e9Mcp+z2wg/A5IykJpwk4KMHs7SOJNG0wTsCerVd2Xomj9okJ7Xv9lctuj?= =?us-ascii?Q?9g=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2230;5:sIVfimZZNGDAuT9n4Mggx/yr+d7MZMYumW7YXzoqvFFc2pShy45u2+l4EngFlvw0HQO9apd3kc9e+GXVVkT8z+l9s6/akywCmgXoRK3hy3Hyp2R8ftG7/LNvDqFTvToLkx8yC6FID0mYcQ4/x5kncg==;24:8NyAz7FOF8ENzACRvKvz0rckX1kG7dWl7+CuJD6hZYsa/tF5WV+eI73dmSQhRbzJIAWNnhnbSTVak7XTLsHn+rSxPEXax2kgZWBqnTtV07g=;7:lTcK0oYDOF+RVRl6AJzMQoPH3AC9VqUeeLbXRQa4h8qjtYj06fz4NiePM9VmnaGS0yaJAjWjC6c36BKTU8ALtDTYBBLMqqj0fWJaUKl+ocaR9kPzORgIpYKVld+vcKkMTvG7ZZDz1HquC0S1ekA9dsYIOJQsH8p3r6MbDjZsP9G0m4heBINwuiWdzPYqn8Yt SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2016 14:04:47.8928 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2230 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello colleagues, After all comments, VDSO fix looks like this for me. Note I renamed Andrew's ZERO macro to DELOUSE, as there already is __SC_DELOUSE which does the same, but in C, not asm. Like Bamvor, I'm not sure how we'd apply this patch - standalone or meld to VDSO. I think, VDSO patch is too big and bad-structurized, and if I find how to refactor it, I'll incorporate this fix. Signed-off-by: Yury Norov --- arch/arm64/kernel/asm-offsets.c | 7 +++++++ arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S | 2 +- arch/arm64/kernel/vdso/gettimeofday.S | 20 +++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index e229525..fcfd087 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c @@ -101,6 +101,13 @@ int main(void) DEFINE(TSPEC_TV_SEC, offsetof(struct timespec, tv_sec)); DEFINE(TSPEC_TV_NSEC, offsetof(struct timespec, tv_nsec)); BLANK(); +#ifdef CONFIG_ARM64_ILP32 + DEFINE(COMPAT_TVAL_TV_SEC, offsetof(struct compat_timeval, tv_sec)); + DEFINE(COMPAT_TVAL_TV_USEC, offsetof(struct compat_timeval, tv_usec)); + DEFINE(COMPAT_TSPEC_TV_SEC, offsetof(struct compat_timespec, tv_sec)); + DEFINE(COMPAT_TSPEC_TV_NSEC, offsetof(struct compat_timespec, tv_nsec)); + BLANK(); +#endif DEFINE(TZ_MINWEST, offsetof(struct timezone, tz_minuteswest)); DEFINE(TZ_DSTTIME, offsetof(struct timezone, tz_dsttime)); BLANK(); diff --git a/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S index ddc63fd..d182a8d 100644 --- a/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S +++ b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S @@ -79,7 +79,7 @@ PHDRS */ VERSION { - LINUX_2.6 { + LINUX_2.6.39 { global: __kernel_rt_sigreturn; __kernel_gettimeofday; diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index efa79e8..a2d8a70 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S @@ -25,6 +25,16 @@ #define NSEC_PER_SEC_LO16 0xca00 #define NSEC_PER_SEC_HI16 0x3b9a +#ifdef __LP64__ +#define PTR_REG(n) x##n +#define OFFSET(n) n +#define DELOUSE(n) +#else +#define PTR_REG(n) w##n +#define OFFSET(n) COMPAT_##n +#define DELOUSE(n) mov w##n, w##n +#endif + vdso_data .req x6 use_syscall .req w7 seqcnt .req w8 @@ -51,6 +61,8 @@ seqcnt .req w8 /* int __kernel_gettimeofday(struct timeval *tv, struct timezone *tz); */ ENTRY(__kernel_gettimeofday) .cfi_startproc + DELOUSE(0) + DELOUSE(1) mov x2, x30 .cfi_register x30, x2 @@ -68,7 +80,7 @@ ENTRY(__kernel_gettimeofday) mov x13, #1000 lsl x13, x13, x12 udiv x11, x11, x13 - stp x10, x11, [x0, #TVAL_TV_SEC] + stp PTR_REG(10), PTR_REG(11), [x0, #OFFSET(TVAL_TV_SEC)] 2: /* If tz is NULL, return 0. */ cbz x1, 3f @@ -88,6 +100,7 @@ ENDPROC(__kernel_gettimeofday) /* int __kernel_clock_gettime(clockid_t clock_id, struct timespec *tp); */ ENTRY(__kernel_clock_gettime) .cfi_startproc + DELOUSE(1) cmp w0, #CLOCK_REALTIME ccmp w0, #CLOCK_MONOTONIC, #0x4, ne b.ne 2f @@ -159,7 +172,7 @@ ENTRY(__kernel_clock_gettime) 6: /* Store to the user timespec. */ lsr x11, x11, x12 - stp x10, x11, [x1, #TSPEC_TV_SEC] + stp PTR_REG(10), PTR_REG(11), [x1, #OFFSET(TSPEC_TV_SEC)] mov x0, xzr ret 7: @@ -174,6 +187,7 @@ ENDPROC(__kernel_clock_gettime) /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ ENTRY(__kernel_clock_getres) .cfi_startproc + DELOUSE(1) cmp w0, #CLOCK_REALTIME ccmp w0, #CLOCK_MONOTONIC, #0x4, ne b.ne 1f @@ -187,7 +201,7 @@ ENTRY(__kernel_clock_getres) ldr x2, 6f 2: cbz w1, 3f - stp xzr, x2, [x1] + stp PTR_REG(zr), PTR_REG(2), [x1] 3: /* res == NULL. */ mov w0, wzr -- 2.5.0