From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751387AbdFDMDB (ORCPT ); Sun, 4 Jun 2017 08:03:01 -0400 Received: from mail-bl2nam02on0083.outbound.protection.outlook.com ([104.47.38.83]:39726 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751356AbdFDMCV (ORCPT ); Sun, 4 Jun 2017 08:02:21 -0400 Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=caviumnetworks.com; From: Yury Norov To: Catalin Marinas , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Arnd Bergmann Cc: Yury Norov , Andrew Pinski , Andrew Pinski , Adam Borowski , Chris Metcalf , Steve Ellcey , Maxim Kuvyrkov , Ramana Radhakrishnan , Florian Weimer , Bamvor Zhangjian , Andreas Schwab , Chris Metcalf , Heiko Carstens , schwidefsky@de.ibm.com, broonie@kernel.org, Joseph Myers , christoph.muellner@theobroma-systems.com, szabolcs.nagy@arm.com, klimov.linux@gmail.com, Nathan_Lynch@mentor.com, agraf@suse.de, Prasun.Kapoor@caviumnetworks.com, geert@linux-m68k.org, philipp.tomsich@theobroma-systems.com, manuel.montezelo@gmail.com, linyongting@huawei.com, davem@davemloft.net, zhouchengming1@huawei.com Subject: [PATCH 10/20] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Date: Sun, 4 Jun 2017 14:59:59 +0300 Message-Id: <20170604120009.342-11-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170604120009.342-1-ynorov@caviumnetworks.com> References: <20170604120009.342-1-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [176.59.55.28] X-ClientProxiedBy: HE1PR09CA0078.eurprd09.prod.outlook.com (2603:10a6:7:3d::22) To DM2PR0701MB1280.namprd07.prod.outlook.com (2a01:111:e400:5118::18) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM2PR0701MB1280: X-MS-Office365-Filtering-Correlation-Id: 2fccd041-0a5d-432b-0c6b-08d4ab418b1e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:DM2PR0701MB1280; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0701MB1280;3:4ty/g/g8tULwE2Jngnfq3Fd+lzBrB5XnSSmSgdqOjHIgrRhOkqfmKGkvfh8yELBtvxTc26vuRwPkEzwdcW8kLETUa8C3CHdTzu66ewG8rPmVX/jjpcGH8UdguYpkaQTMR8SWHPAzvWSZC2jbhvKkcxVn/8uh/ouQh0SEjkAuTX/8voCvGDBNpJdIFJTvo66/N27gXOczQkMgnDpWBn++wQYB1uO9zwyuMX5C38025qWRPcjRuiPFBAyYjtAB8fWp6WL0+csEkvC8luADCCNdtzjk9cJn35DPfJ/4+oymEsIP/p4nZbjrleYEito/l7lUgZkth94ntL97cKNNpZpmYw==;25:iWAM8J/1Dy8Hy7FePzt/9/FmF9hOkGU1HYOFdKli7FA5BBe8+9ZbKql+tk7cAfIVqCP29NzHjAVwcw+5ykV7YYYvcZeL/Hc6ZxdpRJjJ3xUu86huigRAWDtgWm2ocRFcitbv7Y1wsuS3K5UPHtICPpNEowWkXLgygbzUfgl7i24Vnc56CEY4ffydd0CxCz4XnqekJ9X5cOo9JfxD0A9x+2WEAZzVGFvv7EzTSr+cRtrBdve8wM4L2CECbHBd68DKGPhI426k4DFgokohSKM48GjaWvvngVTaqPnckSbCT126h3gSuABX8q23c6/1yxj0mW/FLrYJy4QgddPnVGZwSDdo/R5AApD/Ln+u0OefIHClv4WbujCdCITK77aoSBhQsYTOUtSFmkVa45DpTH6hDUmQFnzyY7uuGNW4Kj8qpx3CVdQIcQyGCQNyyP84q9k7j7nEqJ5B8fiAARo5Epnn4B4077peVH7nPqXu66QJ9ew= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0701MB1280;31:vlOFGetOih3N850ZumiHv+TvoRBWUULh95fpy+fGjGY4oOypzh6wsA/tJOft3LWCfFRCBM4EbsxntijaEtL1mO4gSzEWSW8ccd9GFcrTRYKyqjlNFnuOTs4RrlrFfmuOI6URw9z4vXKo7sUCR1erWewUzAwhLt41lHYM3N7dMl/XzvBLWnCW61EA3wVUE3QU3y3cXDnG3A2Ayy6r8mne63zCbkDDEA6CdTgNrbujrIg=;20:yAXzhDbm7Rbm444kokC3hi+HN5Tg8oyZeVKQIKvsbODTwGha6WX6mXAjBkzQPmOD5klFh6dbvjAjxjXv79wfJQosUV0TiXoeqv/wvggLhZV+66yqHo0G+oT6ZNSYgAUbAfv68Jg/RqHC+Zfl5+EvACNqs5OEQlU95dOAGyZZRvTdli2m2AeYhvhixeBIc2+yby25C00qXFdLVzbDcPreHDF3zc36fK5Li+tI0R5q2gEXTuw9q62fvviK0VIOxBpHGrqia0xYO9ZFSNXMsnotAZ9Z/T9UeoNB4NE6qsluM3nndOawpl0YpKfRldnr4C/Vhzd52uM1SQPbWFHRpkJhFb96NH80CQjVOxzk5/VoU03QjExufKrg/fYslff9jrdrN4sDjuW8JDrIATDT/Ayzotjcl0K/Caxd6TD5f+EitWcHNtdgvi94iBClAicz89lhNwuR1pd+ECb/qFzau86X99W/tuaEWSMRBJuAalkn2/aVGF5tPxLCqQnKnsHeI7V6T0QetzDbGVclg/0PCp3eqxbitYf/SYKJPLMqpn3ybQb0UIhsqRTwAOiDzhLTUUE3xLByLgbZip1uiLtfcLWNzGhMY9NfmJDc98IFqVKGZeY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123555025)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM2PR0701MB1280;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM2PR0701MB1280; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0701MB1280;4:1eGchK+pKhLyecjihf1wE4aqKLl0k3AlPi/81pHL?= =?us-ascii?Q?AccyKzLMKAYvOZ21hxTRQQrZdpqJqAWIm4H3pfyyqjMO/SNG2Mw+5tSFfStl?= =?us-ascii?Q?VoS6My5HK8GbyY5Ko+nD4lQ+ODV9V/qNUHqNhUEZXN9tPvk36zdqCR0ga+Rz?= =?us-ascii?Q?t1yI5QrrRvRzZ4yGxVwc/7nSC4FNpiaGQILIhtPF73vYeQ1wxb/Ok49Ic4vv?= =?us-ascii?Q?up0DOepaZNhHbtDWgpqogYTPELAYzWFe0BC4RVFF3S8LtnIyOG/PJMqAxFoh?= =?us-ascii?Q?hheC1IiW6HJv8xuh1drr3L1RqvOmuvFLxI8dAA/8R7OehLvKDnpL75JPxBvv?= =?us-ascii?Q?b7c2X5dvtJ2HCAj820ckT4LoKOF52InKi5cKNPcdOoSzTWkxRPdyVfPUdS9n?= =?us-ascii?Q?O9x5YNYmp+ESGp80mXiuhyE9fjkkS1fvKraVrLfKntwzrFsc3kFOG9rgBnWU?= =?us-ascii?Q?5fiI+x4O1eE7e1IQeJ84rI3G9b+Ls9BKLpRzSu8WcCVA6XR0E0cKqMkpDg0T?= =?us-ascii?Q?DazBHZAyJ4QTtYjC6Rui+2fggTOphO7GRroOSOzvdYSULIkbhn3a/l4IyGfH?= =?us-ascii?Q?oMHPkSmLpK/6fxi1RCitn5q+uye7BGcxbKSvI6p9pENQ+GrzEBo/httjaChT?= =?us-ascii?Q?AlPXowY8hwV8dmM52zcvnNVPFfBZ4gtJBUB6We0GwOKWN1pg4b2kywtt9FdK?= =?us-ascii?Q?F0L56UYdDgBXtJSbpFcDAnn7P+ykUN3FKLsi101b1XoZvVqXt4tee52G74eO?= =?us-ascii?Q?rR5E8c4a/HXlyFwB5HNfV7zgiE4QcW0QMbwW8+xgs2BUrl0EchRKhmtCPul2?= =?us-ascii?Q?9YBKdoUKIKFxnw+fVJ5H+Jn7z2amFu2OCAMZy2RN7lDmHSla9/JXa6X03NKc?= =?us-ascii?Q?xDKW+r3Eom+Am23jsGApjngAQ2yjEV+Brfg9vJkr905jOsVkcyaxdhGOE4Uq?= =?us-ascii?Q?vtV/h/3+hHbqhT2RrlqUntWYGNAkRKTemJ8xDVUZcGQQDsSi+I1tz4s6q4CE?= =?us-ascii?Q?ZS1t8z8FeGpe5c3SCvadLKAzYgw0i4oz1Hhslu0pjIwn4tVqCxMqN7Tg8mM2?= =?us-ascii?Q?L6XByBiyqqgTKJygrgO4xrnG/rqKUGZkF0Tq/jP/SrI2B4CAJPUG8DWAU8ax?= =?us-ascii?Q?spspVUQLcNM=3D?= X-Forefront-PRVS: 03283976A6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(39400400002)(39410400002)(6666003)(54906002)(2950100002)(81166006)(47776003)(42882006)(66066001)(50986999)(76176999)(36756003)(305945005)(38730400002)(6486002)(50466002)(53936002)(8676002)(7416002)(4326008)(25786009)(5660300001)(5003940100001)(6496005)(76506005)(42186005)(189998001)(50226002)(3846002)(72206003)(6116002)(33646002)(2906002)(48376002)(1076002)(478600001)(15760500002)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0701MB1280;H:localhost;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0701MB1280;23:/y5xI5G2D3Lo5BklHWuR8pAci9RP00anFH1Tgh0?= =?us-ascii?Q?xZSAWpQQ1FGTy+ntUYa/VZLjA7JleZG3YScNIaGxyTFgzBREt7kNjqAw0OLV?= =?us-ascii?Q?onW7pZQOgXEz/veAgJq/iBAOLVsfmsTfTAv+II1VhoYHn35pMhHd42a9695E?= =?us-ascii?Q?eu3C0H7TH4iGRdd3Rwyvf6BaYDD0ch06MKNogm9UsQIaTxpCHqWf2AcsJU46?= =?us-ascii?Q?FHYmsecLDNQtOGqF5p66v0FrCdIX34ukc+iBv0Aga+zZQfeKRyXv8zhR5Ssv?= =?us-ascii?Q?bGDSTEoUiYWATeEWcIPdP4JOWA76crQJtj8EHHKl/rKOzBAxUvQwtEQ3W+A5?= =?us-ascii?Q?RSNk022oX2cXpkTkMyJzrUFuTMBsCEO8HO2Nxyu2TnCCMNWiSVi9B7IgjInw?= =?us-ascii?Q?t4bxEjbRlD9XXGBHxf2i0lYmiQBEQXD3COhlt/4xvRO2vrLiv1bnabLSi+w0?= =?us-ascii?Q?UcogqJ+ph7qEWjOgT7BEgLiXE2txTJbqM+A/WlvjhVHdPBRsPI2XqwgXyqIu?= =?us-ascii?Q?9hi9N/sBRykMbtKMjjdmfG5zxF8QV3oHbsKu8ltGGyd3JyEIp8upVixJ9Qv5?= =?us-ascii?Q?aefgcYTae9+M9myjJbHh2Byx3Rlzx9iNso6rcaYtR1wvvqmnrLI+DkMpNeze?= =?us-ascii?Q?f/CVo1WWgXsHa9EnZwP8t5x6RzyO1oaMnF81RtLwvATFSv62MayvNzCaMP4r?= =?us-ascii?Q?I51o1zRfVyhFuq5C8OLbwdbOENt4LzEbJH5ZaH/8g35c3DjtFBbgHi+IUw7u?= =?us-ascii?Q?xihVNZGC7Yi9xziJ7gZUH+J4B8aWShLSOXT1D+Wkv6rO763wtgVIVIKfgmcb?= =?us-ascii?Q?l8a6h347opJ3MDXRt0JuWYQgNNHy61W/F6+VMji5j2DmPK4FbNjlweT/c3Dz?= =?us-ascii?Q?9STnOwT4SI48C2rdXK2bZ/xOxEvgacT3J67j2iKoVoUt2RaDQXMYtzYzFUyQ?= =?us-ascii?Q?p427m0V/widD4c1uEFV+HRjbzC4/pcS8Rn1bDbTFQlT9lawjnkDJh/tQzvaP?= =?us-ascii?Q?4TqLw+JFerpRbREC/NIfLT5xAsmMUvAtDOHdoQUHL7gIyvw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0701MB1280;6:5uNRHRCHT7kGnsHJYzP90DT5OpE88Fb4SrFPzbScZtPiyyKRBpfRmTYmavnrm4EJpcMxl/y8jwevtc0pjwVglIXcqx9SEFVkDz98xiRI4KrVF3ZerRH1Tw4EmjPT9PiJ2fHIg6hlXVtH/zKVJxt/VGJX4bIJsSpt2NpEypx6u9RVlMGtT2qevg2YI4tilw7xVuEeHNymBGO+1kTCkUTEm8kw5WZJpPAIE2dSlOsUHP0Cs4C60yY1sCBMUPSGL2nG1HmQtDlLX+rJS+GIDW/soEf1gx0X76D1M8DjO2u0/uBkQKg0q1XqVnTpriW0/mLt4vFOM1PvNLvfmgrxbJfrlWutsGnSxz5NGJSh3UZHwNVpciO7g1K0Ksx3fo7zSQkEyeOsZiDpw8nXwr+EKmNp+QCHLbPn50U75CPDtITvcbnxSAynsUnotRCVdyByvTKiaKepx/TiYsAvhKD2hGgOF2vcQVab/TLEeyJNsoFwn5sq6na2PQhaH3lNCBJbm5oosdiPG1YgzUqP+ZF9h5akAw== X-Microsoft-Exchange-Diagnostics: 1;DM2PR0701MB1280;5:vIhM6VOgAc4Ug/2GtJ/PO4dwGUP7Ghj/CCTrUKClufN9zQNz5n0jA6sK+EswYGqk2cpuLJmSjoN4yqS4z1BPyDGq8598n5J77hC7ssdWbZTvThA/+6PffCYWe7KlinGfbIz/UTKdsaJsXf2Tcd9+k5HB8rsufGl0e1r8qp0FEmj0au+9/xpse4AKedKZRdV7uCMuNAy4P7zoF+BKMs0anSotvDEdDvAj8cNzTsPIIIKkr8jr2TuhXADtqJ/LAcf41j+MZ95H7D1WVufn3USJQQ4Rwx2gbmeTz0zrc6u672ZIpwtZLhHKf9Mm7ia7QSlV2Vnuv+6O/bGlus4HoWTzwCORHdXup1XOPTLXFnsbfLtciGLGKi8zO+cGKA3J2hRbXnE60BgXLGQYBHgAC1rqDWgBj2JA7ho8EembCrOMc7iCSfxy6A9sQFbm81JtrZ9FXecJc69z2w6lVo8rI0JevBD5DEF3N2Ca6URhdDBxLadrmCe4OZ0hxsp+vhzoS2B5;24:5OWENzzA8b8X95NMoopy9te/80BAo01GQN0Q2N9Dng0tHx4piKsX4aBqBOaMfMs9zImlnCmukTY7wlyGb7JePyT9n6mU6Fes6vJUspQ9Njo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR0701MB1280;7:dtbGzCxmtkNm8+7MDHZEReCA25ShHNiwPL/couMpZXsuF03wlkatZyG35Kc4470Ax1oEr0p2XEjONQABDxyFoj89Qn6reIuQhOboA2vwYxUZVwz3DDCEFN6HXpgcee5+SAVvOap4Vl4xrNQUOkQpWx+ldcMgIqY3SUZcSCNI3xeXqh4rIawOR+KBf+KNmjuGqVxtBn1cMEF8Ys96iRwyIaw3Sv+ds4ZIEj9HrVnT/4zNvJcw05LK6N/y+6DHdx1XAyTwT1codLsuUtg/Et3hptDruTc40Hagm9hngfTm2A/Ahjn+8a7lStpCNejBfLsNERDvHg4NwTUQFAIadVgXDg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2017 12:02:15.5996 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0701MB1280 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ILP32 tasks are needed to be distinguished from lp64 and aarch32. This patch adds helper functions is_ilp32_compat_{task,thread} and thread flag TIF_32BIT_AARCH64 to address it. This is a preparation for following patches in ilp32 patchset. For consistency, SET_PERSONALITY is changed here accordingly. Signed-off-by: Andrew Pinski Signed-off-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Yury Norov Reviewed-by: David Daney --- arch/arm64/include/asm/elf.h | 2 ++ arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a37b6facc69..8f7bafa60d01 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -145,6 +145,7 @@ typedef struct user_fpsimd_state elf_fpregset_t; #define SET_PERSONALITY(ex) \ ({ \ clear_bit(TIF_32BIT, ¤t->mm->context.flags); \ + clear_thread_flag(TIF_32BIT_AARCH64); \ clear_thread_flag(TIF_32BIT); \ current->personality &= ~READ_IMPLIES_EXEC; \ }) @@ -196,6 +197,7 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; #define COMPAT_SET_PERSONALITY(ex) \ ({ \ set_bit(TIF_32BIT, ¤t->mm->context.flags); \ + clear_thread_flag(TIF_32BIT_AARCH64); \ set_thread_flag(TIF_32BIT); \ }) #define COMPAT_ARCH_DLINFO diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5caaf5d1..7726bebc4115 100644 --- a/arch/arm64/include/asm/is_compat.h +++ b/arch/arm64/include/asm/is_compat.h @@ -45,18 +45,44 @@ static inline int is_a32_compat_thread(struct thread_info *thread) #endif /* CONFIG_AARCH32_EL0 */ +#ifdef CONFIG_ARM64_ILP32 + +static inline int is_ilp32_compat_task(void) +{ + return test_thread_flag(TIF_32BIT_AARCH64); +} + +static inline int is_ilp32_compat_thread(struct thread_info *thread) +{ + return test_ti_thread_flag(thread, TIF_32BIT_AARCH64); +} + +#else + +static inline int is_ilp32_compat_task(void) +{ + return 0; +} + +static inline int is_ilp32_compat_thread(struct thread_info *thread) +{ + return 0; +} + +#endif /* CONFIG_ARM64_ILP32 */ + #ifdef CONFIG_COMPAT static inline int is_compat_task(void) { - return is_a32_compat_task(); + return is_a32_compat_task() || is_ilp32_compat_task(); } #endif /* CONFIG_COMPAT */ static inline int is_compat_thread(struct thread_info *thread) { - return is_a32_compat_thread(thread); + return is_a32_compat_thread(thread) || is_ilp32_compat_thread(thread); } diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h index a7ffea24d94d..abb60b5fc9f4 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -96,6 +96,7 @@ struct thread_info { #define TIF_RESTORE_SIGMASK 20 #define TIF_SINGLESTEP 21 #define TIF_32BIT 22 /* AARCH32 process */ +#define TIF_32BIT_AARCH64 23 /* 32 bit process on AArch64(ILP32) */ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) @@ -108,6 +109,7 @@ struct thread_info { #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_UPROBE (1 << TIF_UPROBE) #define _TIF_32BIT (1 << TIF_32BIT) +#define _TIF_32BIT_AARCH64 (1 << TIF_32BIT_AARCH64) #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \ -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: ynorov@caviumnetworks.com (Yury Norov) Date: Sun, 4 Jun 2017 14:59:59 +0300 Subject: [PATCH 10/20] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 In-Reply-To: <20170604120009.342-1-ynorov@caviumnetworks.com> References: <20170604120009.342-1-ynorov@caviumnetworks.com> Message-ID: <20170604120009.342-11-ynorov@caviumnetworks.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org ILP32 tasks are needed to be distinguished from lp64 and aarch32. This patch adds helper functions is_ilp32_compat_{task,thread} and thread flag TIF_32BIT_AARCH64 to address it. This is a preparation for following patches in ilp32 patchset. For consistency, SET_PERSONALITY is changed here accordingly. Signed-off-by: Andrew Pinski Signed-off-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Yury Norov Reviewed-by: David Daney --- arch/arm64/include/asm/elf.h | 2 ++ arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a37b6facc69..8f7bafa60d01 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -145,6 +145,7 @@ typedef struct user_fpsimd_state elf_fpregset_t; #define SET_PERSONALITY(ex) \ ({ \ clear_bit(TIF_32BIT, ¤t->mm->context.flags); \ + clear_thread_flag(TIF_32BIT_AARCH64); \ clear_thread_flag(TIF_32BIT); \ current->personality &= ~READ_IMPLIES_EXEC; \ }) @@ -196,6 +197,7 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; #define COMPAT_SET_PERSONALITY(ex) \ ({ \ set_bit(TIF_32BIT, ¤t->mm->context.flags); \ + clear_thread_flag(TIF_32BIT_AARCH64); \ set_thread_flag(TIF_32BIT); \ }) #define COMPAT_ARCH_DLINFO diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5caaf5d1..7726bebc4115 100644 --- a/arch/arm64/include/asm/is_compat.h +++ b/arch/arm64/include/asm/is_compat.h @@ -45,18 +45,44 @@ static inline int is_a32_compat_thread(struct thread_info *thread) #endif /* CONFIG_AARCH32_EL0 */ +#ifdef CONFIG_ARM64_ILP32 + +static inline int is_ilp32_compat_task(void) +{ + return test_thread_flag(TIF_32BIT_AARCH64); +} + +static inline int is_ilp32_compat_thread(struct thread_info *thread) +{ + return test_ti_thread_flag(thread, TIF_32BIT_AARCH64); +} + +#else + +static inline int is_ilp32_compat_task(void) +{ + return 0; +} + +static inline int is_ilp32_compat_thread(struct thread_info *thread) +{ + return 0; +} + +#endif /* CONFIG_ARM64_ILP32 */ + #ifdef CONFIG_COMPAT static inline int is_compat_task(void) { - return is_a32_compat_task(); + return is_a32_compat_task() || is_ilp32_compat_task(); } #endif /* CONFIG_COMPAT */ static inline int is_compat_thread(struct thread_info *thread) { - return is_a32_compat_thread(thread); + return is_a32_compat_thread(thread) || is_ilp32_compat_thread(thread); } diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h index a7ffea24d94d..abb60b5fc9f4 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -96,6 +96,7 @@ struct thread_info { #define TIF_RESTORE_SIGMASK 20 #define TIF_SINGLESTEP 21 #define TIF_32BIT 22 /* AARCH32 process */ +#define TIF_32BIT_AARCH64 23 /* 32 bit process on AArch64(ILP32) */ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) @@ -108,6 +109,7 @@ struct thread_info { #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_UPROBE (1 << TIF_UPROBE) #define _TIF_32BIT (1 << TIF_32BIT) +#define _TIF_32BIT_AARCH64 (1 << TIF_32BIT_AARCH64) #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \ -- 2.11.0