From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935315AbcJUUtP (ORCPT ); Fri, 21 Oct 2016 16:49:15 -0400 Received: from mail-bn3nam01on0044.outbound.protection.outlook.com ([104.47.33.44]:20055 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932739AbcJUUtJ (ORCPT ); Fri, 21 Oct 2016 16:49:09 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; From: Yury Norov To: , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , Andrew Pinski Subject: [PATCH 08/18] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Date: Fri, 21 Oct 2016 23:33:07 +0300 Message-ID: <1477081997-4770-9-git-send-email-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> References: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: AM4PR0701CA0002.eurprd07.prod.outlook.com (10.165.102.12) To SN1PR07MB2254.namprd07.prod.outlook.com (10.164.47.148) X-MS-Office365-Filtering-Correlation-Id: 31877821-c4ab-4c28-b2a9-08d3f9f1b5dd X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;2:YNQprZOGtLLtzWUi9YcLaxzSdAUxLRzCqsDaYGiFhkbjPB/0CoVKPZkQgxOxYor91kIEnLDIz/vQl2ieLs04h4R0ExRCPIRxbpnX2vwDUjSrvqTj8omVgzYhHSLWeIPPGuU3QeeX3KzrKgUTmrsWS7l3AZ+IkRWhp+yojqjAvIxrCziHV34UDHRf/BTmTP30MkWYdGNd9iht1/FF69BjgA==;3:vEENYC78Shh2tK2uefwvgUWh9/DnrVuYNJqR/3eN+50z8Q+uGmz2ROWdaHpShTWMAoC1HPwVfBDJshOvVgAH+YTtinpQFYhzsQnKlpRBetHdqvMI+hHYqqigzYFUx0eC8yROa8CwJH1qRLcXhlr1vg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2254; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;25:6KNG3s0poBMX73tINh5nHppPiR3VZLZU19FGFFSOUGAoQsgIIXBPnjqjknUIioGexJ89wXglsLdoU7HOkH92vPph4sIad/Y50FE1nG2GnOEbaPH+H93bW9omStgpL+IFvp813qAzI95z/IuPvJXDt9K5DiL608ryL4ZHek4oJVX0tLbD6mHmmREpYIcWE0WC6+iYIE8lckTxOhNLhsKew+jNsaXyOldhIbn1UydpBgXGhXIQ3ozOeGQi5WFb68+eMUa3U7seFp5vJmKa09ThZM/rnffpqXZ6wQjxvDrR70D9Bk4ZqIS+QfnQZXQGXvtEiud4dPdiBdDtzMy0PPM/dE1cAybCajUuXdnMl50DRabWBsSlOQiSZTBX+DD5EcOps2Kh0tF0COKNvRJgA9SObtKVvRkcQsy/MbK5RUSKMYAPAjwwMO6O9XACIDoNf0TU4l4fZsonnEumj5Sn30JIfM2dgsvMdRhxW1b0n57PgUzaY2iqrq0zF/7QZkpSBPIez7mHMMjw1OZRaxta80ZP4VudxEC0Ts8gqR+X5dhsyxrEuDRJTEdpROI921tfFjecmFcpd2l/Jipw0GDqNU9wd9Mmf8mf7DhxcUR46x7+mZDB/+EmA3ra8NLMzNu7zDZML6umwA02zxF2zR8hnfgZO5R0Q8vKU+3gEaoZ5fvYIZiwzF1O8eooMePOnZtb+AO6K/uRjZiKuaL5mwqsZyFxHCmsctBFQFozNy510Rg7toDPPzIyRclhr/8DTOZN1ruDqlpNFnCKrBrJJ7nlNbRyOw== X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;31:o0++Xku8K+s7pAvqP7/DDsGsRR2/XQM/Abp88mH5wjb6Utxu3dlR73OxCIcntIcK1TstH6slsFzOUSYVdts7hO3H5nulX44QnZrZZIU+4axF3IdabnAOPZJERtnTT/HdBMLkn1QBfYqcSDBvLSOMpJ8c8NbQQFyz1qqzXZs7ag1U07BxR1dMpDqEjlMkSbN4PmzJrtdeh2S6kQsz+7xZoi7FUf8pnzCvrqWvWe1pGfUqcSJXwEnx8MM8ftCa6Za5;20:A8QvVwgn5Xk6jfVuOfmg8Qoi5NLzK8OWVknNAVU4NrvDQ9nnXDsrdOiuCQ66ecRAy4qkNzgCMDSzgTvQOKteiz+pFz2fEU0SmbxATg2sdxYLMZmJivwvFHj/dgVF4D7y++xbuc5cbQs9Gy4j5zE9wcDupW4vDaKRYTBnDSxXJE31kM9o1GY40RrfGQ9RRVM6gnFB/j4aUq7nVsNTkN7oyMzc8f/d5Lz3+MrATbOsR3ISsNoKvUq/RyUKrJq+fr0tV97UzuFhw+0dt+BadfaRxYHVJHAzEngk2kIpPRVtRg26wQUsjwEBzIrHkGszhQhIEewCtB0lQPZvjysZFhEq1joud2Lyn2JSi2QymYfsH5jLgDXW4PwkPgSaRPhfZ73p/ZreP4DwNHx1h9GBSB+50YlRgYhmZiwGFK6VCy2fOqYSjceP+sQ5NKSB4NRGtLpO78iVCNYpkSSktdElto4vUjKioGYpr1syFFTudkgsr/7lksmbDeYThXwF8aDQjEZ3TTTF1+LDUkxLkBfvaAxpdyYRGL71i0x0kH0TXRadqJzsilYdU0+r/QYb8JcaelY++0YvhZ0jNoy2znByNoSih1lfmwUamF2GXIdT3CBW7Ns= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:SN1PR07MB2254;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2254; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;4:q8uoX1QkEQSzh6fMNHUxeX1j0iRp41cWPhEL9DWq6NVbQM23d46/tTwX+9YcslPbx3ezVF5fLmImJBmhQIstnSung3sXN0nO5tUB0cKmW08dhjlAm4ifcQ6Ts8cipFzYcFuIz1pwm6jceR0ph8hMwD8JTR3oJviRFQ2+jco+XooGjK1ftbzPXbfTzAV/vdW0f6+SHRyiElHtKBO6TyB2765IfnwOa+IXr4XwBPYeeuLBsVfUO92UwsAhQ1qHwMOb3vEaXUGtZisnGE999EV+wDDhsAE0UaD+f8hOedtOfdxJKdEGwsYKAh2LAcCiv3CI6DpQ+8QZ1vr/IPbr+4fnLssuyH81FUNWJTktHWVCU7/TEoyemRv//PqrnHsCgXPH6bLT589qKp8e974L6VL/yw== X-Forefront-PRVS: 01026E1310 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(42186005)(6666003)(5660300001)(76176999)(36756003)(4001430100002)(76506005)(50986999)(105586002)(106356001)(2906002)(229853001)(47776003)(48376002)(50226002)(2950100002)(68736007)(33646002)(2201001)(81156014)(7736002)(101416001)(7416002)(3846002)(7846002)(19580395003)(92566002)(305945005)(8676002)(5003940100001)(97736004)(6116002)(19580405001)(189998001)(4326007)(107886002)(81166006)(77096005)(586003)(50466002)(5001770100001)(66066001)(15760500001)(142933001)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR07MB2254;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR07MB2254;23:kikh8JInQs9uqVhme+xjpf+FtpmY3Se0c5oF/G2jn?= =?us-ascii?Q?HyQXU7vYaAqgWB+DwSzYrP66Y8Nt1yHrbPZPatI648HTjeOb7wJLz3JV9ath?= =?us-ascii?Q?Qwlv2hDNZRrg1ndp2gsnjltr2RQLplp9wKRFP65/HRFJBHO0HXlnaS1D2vdd?= =?us-ascii?Q?c///EiuYtjeULhIz/rqE+WKPSYfVuXqT/+0GlbZgyarI3Qukx0c6S51dOdw5?= =?us-ascii?Q?y1KREpfxs43B+ICeXZFPR1yVKo5UXWSHM4tTmX3MBxo4fDLHWnjyrfZrdjya?= =?us-ascii?Q?QzyjN9RAjyT2MZEdWMbUSyozjP359F/Tf4U3izSt+a2xFC59rFJUveU/csew?= =?us-ascii?Q?178Wc1ZG4M9S5cNeWzB3Tv4MFX3WUfhzpMc1SISPEuetDFT5qgxVsr8L469+?= =?us-ascii?Q?0hhVee9c8A2mdPkCRZAuxmq4T5R0/8l88yC6I4qfSNX8dP/+VyyVLODlhF+u?= =?us-ascii?Q?BD6YYdaK7jV6AYlCjIZbyauDyb4O5m+QJxAGBI30XPqXxW5TTJE4R1FJuqIs?= =?us-ascii?Q?A+CcA6qjUC0xWkjJ5Bs8ZT1jbze/E/NhBK9tA8/zNTAgIsSL4Ia60Sjh6uXr?= =?us-ascii?Q?cNk2xuPmPIJVwHvGKRpPkY9DIQtKnIClKEQc1XCBg3c4WFCdGzfxm7s6gP83?= =?us-ascii?Q?4JlF3IONTi6G8RYvFz7mvlKAyyyLBQ808/JGe8FvZX9tI5u+8Fns/5eDn+Bx?= =?us-ascii?Q?656iNLGcqnxTWDTIVGIhqT+UV4DmLuVILgBzHFBUgWRWSdNbUssIdvScIPxK?= =?us-ascii?Q?HTW8gPvypkDIVzX+z/gJ+YsEKBB+r1tF/UBK7BL+nCsNnrwKlyQuo5MkXhTL?= =?us-ascii?Q?Y0pLNp/dZ5fVQIHoORqhi89zED9mwHWF6d6z4vvBN4cAngqCWYIwl3i/6PQr?= =?us-ascii?Q?A9HOtGZdUkSmKjaDmM15AULfYzlfuBETDlntJ3usigPbdWjJieCs+6ZGDQ5R?= =?us-ascii?Q?kYrXH+YRz/5ItgwRB6gH0sUkliRjP7x24BEs/HuymXIYfuVdFvjMjsvWRsS+?= =?us-ascii?Q?7TpCPk4bIQCSXU6hs8kdUQS/haZtVHBd96Wsuvj//O9VTKb0AGmenn+YiJQT?= =?us-ascii?Q?orhddET+lt3hiytnZhkk8n8Ml2uh5qcaZoH1qA4uGkEkov1tm6SwzgkpbS6d?= =?us-ascii?Q?cfM9BIgxuqhjVVt0bApUxxTatLEv8brrze+RNpAdEaz+CFETCrg+IpZ+jXtZ?= =?us-ascii?Q?mS4/mEXw8dUCT+QjkGT84nD7i1LDbnGWFDeRMvRLZbD7hs+Mh9mbOFvOEcgQ?= =?us-ascii?Q?wvOv2sdAS8NWO6xnYSxv0j7WDLr6LPSMnfxvlGQ/ePQV+kLhnPBbZC3S5DNk?= =?us-ascii?B?UT09?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;6:hSeApxgtUjcoJjmbomIX4sFluFHIJk/XuikT+g2/EPL1IHlN8OABdgADBTyzDiZIlsbdOqb41kIhf7rwOXUG/9xYDlowVIp+ZnBalvYpOzikwC0ZvsOV6ZzidiaY59O1yajNOzt5kJsb/rSUVsEvpLgvt8wyt8RAiXiNfEyzPxDtHWHhWMjgJRap+9ApvtjQisgPRRO9eKQmeeP0lYeLEpX9GrK7ffiFumOjjYyr/+OiOOguxj6P4CThlxFAuMpBUQpWTpfeAT46vnHmNvGiW9amZzrC8LHrNBIbUDwSsEHXaoIbEFpPRkOb80NgkyZc;5:Cs4OvTRRQrqBm2YFOLhtvvF5nDD3GaDOO7X3vFA5S3dhAhYlpVCenVnrsWUmZIGR7rkBVbappwdvU2bZlRPa0Dvhscm8sxgdY3ECTbBHpdBgqKqh1ExDkh2Wma6CMvKWlNyqzjdTBGjsYVBSK3j4az+jhtNL9yDqUOT4FGy2fN0=;24:uMjZwc3KBIlI6Ay/dOkkNZcK73NFyOJHgeqeg85buPmjLLu/RZukEfdrYV2GriPJJyfwO8IQltDD+Gh61Zgfq0+LoDmniMmZq4Ns0ttCUsE=;7:R8K8CACW1pGtqqehuM8Q5XwCEyUcf5+V/N3jtgZKbkosc5tRo3//5SHDBOPztCBdH/+7WTSF03n+OdrwRl8vFWspswDBnEJvFxQ2yYc0J3LkF9zMmIRY/RQ5dGmiHnRnSG35aubzad80qBO+3XZut+I0d1mIGk4SJtBbVLeXPqFfvymztkQmggXD0B1xVh33sJfSdrHW0WzHT9VDrQS/Klk0oSmAj5f7FVktFdLR5phircRsAhAoA0ehxWsoTJqWVotbaVZ/OwiS2+718Byp9Ztg+/421lXLymG33mmhNjJN5tDPuak5DuoprHlTNhyETVWs3fMDzNG22VatayvuLhZtb0VLKczMBI60nezJRlo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2016 20:34:51.9418 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB2254 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 | 13 +++++++++++-- arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a9049b..f259fe8 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -142,7 +142,11 @@ typedef struct user_fpsimd_state elf_fpregset_t; */ #define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] = 0 -#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT); +#define SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + clear_thread_flag(TIF_32BIT); \ +} while (0) /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #define ARCH_DLINFO \ @@ -183,7 +187,12 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; ((x)->e_flags & EF_ARM_EABI_MASK)) #define compat_start_thread compat_start_thread -#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT); +#define COMPAT_SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + set_thread_flag(TIF_32BIT); \ +} while (0) + #define COMPAT_ARCH_DLINFO extern int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp); diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5ca..7726beb 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 e12411f..680aca5 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -122,6 +122,7 @@ static inline struct thread_info *current_thread_info(void) #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) @@ -133,6 +134,7 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #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.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yury Norov Subject: [PATCH 08/18] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 Date: Fri, 21 Oct 2016 23:33:07 +0300 Message-ID: <1477081997-4770-9-git-send-email-ynorov@caviumnetworks.com> References: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: arnd@arndb.de, catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arch@vger.kernel.org Cc: szabolcs.nagy@arm.com, heiko.carstens@de.ibm.com, cmetcalf@ezchip.com, ynorov@caviumnetworks.com, philipp.tomsich@theobroma-systems.com, joseph@codesourcery.com, zhouchengming1@huawei.com, Prasun.Kapoor@caviumnetworks.com, agraf@suse.de, Andrew Pinski , geert@linux-m68k.org, kilobyte@angband.pl, manuel.montezelo@gmail.com, pinskia@gmail.com, linyongting@huawei.com, klimov.linux@gmail.com, broonie@kernel.org, bamvor.zhangjian@huawei.com, maxim.kuvyrkov@linaro.org, Nathan_Lynch@mentor.com, schwidefsky@de.ibm.com, davem@davemloft.net, christoph.muellner@theobroma-systems.com List-Id: linux-arch.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 | 13 +++++++++++-- arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a9049b..f259fe8 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -142,7 +142,11 @@ typedef struct user_fpsimd_state elf_fpregset_t; */ #define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] = 0 -#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT); +#define SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + clear_thread_flag(TIF_32BIT); \ +} while (0) /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #define ARCH_DLINFO \ @@ -183,7 +187,12 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; ((x)->e_flags & EF_ARM_EABI_MASK)) #define compat_start_thread compat_start_thread -#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT); +#define COMPAT_SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + set_thread_flag(TIF_32BIT); \ +} while (0) + #define COMPAT_ARCH_DLINFO extern int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp); diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5ca..7726beb 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 e12411f..680aca5 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -122,6 +122,7 @@ static inline struct thread_info *current_thread_info(void) #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) @@ -133,6 +134,7 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #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.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-bn3nam01on0044.outbound.protection.outlook.com ([104.47.33.44]:20055 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932739AbcJUUtJ (ORCPT ); Fri, 21 Oct 2016 16:49:09 -0400 From: Yury Norov Subject: [PATCH 08/18] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Date: Fri, 21 Oct 2016 23:33:07 +0300 Message-ID: <1477081997-4770-9-git-send-email-ynorov@caviumnetworks.com> In-Reply-To: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> References: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-arch-owner@vger.kernel.org List-ID: To: arnd@arndb.de, catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-arch@vger.kernel.org Cc: schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com, ynorov@caviumnetworks.com, pinskia@gmail.com, broonie@kernel.org, joseph@codesourcery.com, christoph.muellner@theobroma-systems.com, bamvor.zhangjian@huawei.com, szabolcs.nagy@arm.com, klimov.linux@gmail.com, Nathan_Lynch@mentor.com, agraf@suse.de, Prasun.Kapoor@caviumnetworks.com, kilobyte@angband.pl, geert@linux-m68k.org, philipp.tomsich@theobroma-systems.com, manuel.montezelo@gmail.com, linyongting@huawei.com, maxim.kuvyrkov@linaro.org, davem@davemloft.net, zhouchengming1@huawei.com, cmetcalf@ezchip.com, Andrew Pinski Message-ID: <20161021203307.w8Cz6anO4vcai7xOF4S8cp1S-TElzMT8q_WVs3RahcE@z> 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 | 13 +++++++++++-- arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a9049b..f259fe8 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -142,7 +142,11 @@ typedef struct user_fpsimd_state elf_fpregset_t; */ #define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] = 0 -#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT); +#define SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + clear_thread_flag(TIF_32BIT); \ +} while (0) /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #define ARCH_DLINFO \ @@ -183,7 +187,12 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; ((x)->e_flags & EF_ARM_EABI_MASK)) #define compat_start_thread compat_start_thread -#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT); +#define COMPAT_SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + set_thread_flag(TIF_32BIT); \ +} while (0) + #define COMPAT_ARCH_DLINFO extern int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp); diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5ca..7726beb 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 e12411f..680aca5 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -122,6 +122,7 @@ static inline struct thread_info *current_thread_info(void) #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) @@ -133,6 +134,7 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #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.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: ynorov@caviumnetworks.com (Yury Norov) Date: Fri, 21 Oct 2016 23:33:07 +0300 Subject: [PATCH 08/18] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 In-Reply-To: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> References: <1477081997-4770-1-git-send-email-ynorov@caviumnetworks.com> Message-ID: <1477081997-4770-9-git-send-email-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 | 13 +++++++++++-- arch/arm64/include/asm/is_compat.h | 30 ++++++++++++++++++++++++++++-- arch/arm64/include/asm/thread_info.h | 2 ++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 6a9049b..f259fe8 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -142,7 +142,11 @@ typedef struct user_fpsimd_state elf_fpregset_t; */ #define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] = 0 -#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT); +#define SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + clear_thread_flag(TIF_32BIT); \ +} while (0) /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #define ARCH_DLINFO \ @@ -183,7 +187,12 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; ((x)->e_flags & EF_ARM_EABI_MASK)) #define compat_start_thread compat_start_thread -#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT); +#define COMPAT_SET_PERSONALITY(ex) \ +do { \ + clear_thread_flag(TIF_32BIT_AARCH64); \ + set_thread_flag(TIF_32BIT); \ +} while (0) + #define COMPAT_ARCH_DLINFO extern int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp); diff --git a/arch/arm64/include/asm/is_compat.h b/arch/arm64/include/asm/is_compat.h index 8dba5ca..7726beb 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 e12411f..680aca5 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -122,6 +122,7 @@ static inline struct thread_info *current_thread_info(void) #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) @@ -133,6 +134,7 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #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.7.4