From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752716AbdHTKVa (ORCPT ); Sun, 20 Aug 2017 06:21:30 -0400 Received: from mail-bl2nam02on0051.outbound.protection.outlook.com ([104.47.38.51]:4286 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752588AbdHTKV3 (ORCPT ); Sun, 20 Aug 2017 06:21:29 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@cavium.com; From: Yury Norov To: Catalin Marinas , Pratyush Anand Cc: Yury Norov , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] arm64: introduce separated bits for mm_context_t flags Date: Sun, 20 Aug 2017 13:20:47 +0300 Message-Id: <20170820102048.7537-2-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170820102048.7537-1-ynorov@caviumnetworks.com> References: <20170820102048.7537-1-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [88.148.44.91] X-ClientProxiedBy: HE1PR06CA0145.eurprd06.prod.outlook.com (10.170.251.32) To CY1PR07MB2120.namprd07.prod.outlook.com (10.164.73.158) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bdbdc44c-7f1b-405c-bca7-08d4e7b536bf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY1PR07MB2120; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2120;3:qg5L98GPhfZm3ghsSn1hN+Rd5lu77xnEZ6GfwM62JrpKSuCwuJ9abXXkovnvmgvH1/+4bwPna/1IPL+aD+2IhjKrkiwkUNExijRYc9JsR0u5py+tkbHGLx0C5f3UuNUxn3z7AWMsoavq+JPWLjTFpVWd5hpBPdXiGD21npizbg7dgw3GF8uJmQH+RBLyWUKl9/qmgLncSmy+51iv1tzYqVMvi4QBOQ9BZtZz/Z9y39xuGgmjZX3nM3FY/maMPjQn;25:jya0FOgv34A1fnvX397wEZZsnZAW9qFNbHig/OWKQySbNzYEhW5mQZE0cm1wNdpESE208wNwFZHZ827ANOIHFHwWXKO/0cxuoasy4vugsddZb7fnmo10RrTShigttw7xngDNaRoogT7da0qdepw+o7ejmMmpFnhUPzxnh2+W7bvM+ZwMrytCPZZw9XxnaG5RR7I+TJdw1UfThEuGuUDtFLPkM1V/5wmvQE8B6tonY3u+9ZRREQqSxmuW7k9Mf0dq/LeldOM8lsYP0bVOuDUM56mRoSyrz5qPuLpUwQ7EL5NQUeJzuJ8KKsmO+IT6E9U3VSKk+Fijlc5Yop97NBEnQQ==;31:Fbhj8MeWwNUFCwTt5g97cc8ARjcMqBF674f54A7iprQxn7jtEPOjkzJn4+5Fdw1g8r6rBaJZ4LwSMrE6mEup+uJuguqZ7Zm+/xo0MR0EKiLNOMmEJ9AWcsaFu6xHouip/XmDkFdNd8h7Znc+d8DwyO+4nMZJDZ10ABaXgHGR2K8B6bAYgo204rIhy+oo+xPs9GvpVR+lXOpvu280QEZE4UvRAGaAW3ZKnvI6wxZMIVU= X-MS-TrafficTypeDiagnostic: CY1PR07MB2120: X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2120;20:JdG06jifrJwW/14MZ6fxypYPw27JWAF+mzhHc7Fz3fNUrQFmCyywJRhUJn2UMvtsFFboQFrItpqPWuQC1roSsIptxLTZyaIQZjXcd4I0yswYBra+49Hy3jo/YjDrZtY4NIclALf+kmk4V3AMWtDJKS+gAH6txircT3AonnWg42Z4iemRAtLlqZ4ZUIoyBppDgCpeaBe7N0MO9d0uGZjGGZOmiS8b1u19F8/0UpRiM82a9D2Sp6rBT9AYVDHwwPgCYonN7b7NNilzhgzsFEU1hDWuokRadn6r8N+7uUACeh4tSCQtsNLx3P6ha7kmrqG/GiMG/3xmUiuedX7So/+uFW9Ffas0E8z+WjDJzT+9QYBFrhirN98OVIYdjiDvRTdsj6r/akjodgh4RC6v1ijdfUdvH/Md1GfLfXHePCcmfpmoxL/nezLDYnOfCMDAuok/+fz3fQ/4yoyBMivAyY9ZtPfpbWj/ZB+Hti8oliHljE1l1TdquC5MULRZaDt6+pFQxtm0doAXhmsCkd0RysAI7Cv6L2YMfawjfVeDTAU3VlxqrUCdmxmrhW6ZZZJIdInJ5K1+40x4fU/yh1MAy3gO+iY81O8C5w42omK3qNgvVog=;4:H5+X8eCGGsdbSY6mRRJwMXOe81NcXHRa+CBng6nyhu1LbSHDkI+qJI+O0YAHskK0e3ImPMkm2xMay2WQ6R3vle3CeZDyNi+J1NtSiOVVpfnJ2K4ToxFKutydbHmPo++JO1Fdb1VAQuq+e2PF3VWQyHB+Vqb85mLhTvLyMiZfFovSVTGkWi+4K3RktOyh3wA1ksG9VGNW8WvFu+7EndL66nV05d8H60ERxAzhoXvQSpi5kS+gfcx9qUrlAtv5QLSi X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(93006095)(10201501046)(6041248)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY1PR07MB2120;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY1PR07MB2120; X-Forefront-PRVS: 040513D301 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(6069001)(199003)(189002)(36756003)(50986999)(106356001)(6486002)(42882006)(76506005)(76176999)(2950100002)(42186005)(33646002)(105586002)(6496005)(6666003)(6306002)(53936002)(47776003)(48376002)(66066001)(50466002)(101416001)(305945005)(7350300001)(7736002)(575784001)(5660300001)(4326008)(50226002)(81166006)(8676002)(81156014)(3846002)(6116002)(72206003)(2906002)(478600001)(966005)(25786009)(97736004)(68736007)(5003940100001)(1076002)(189998001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2120;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR07MB2120;23:ejSbK5Po28ahttTq9oqV+57giWJ6ffQhc7FUG/k4w?= =?us-ascii?Q?EUdXk5GFR2SzupS+N0E5nf3oDZuoReFKBDzz/BdI1V3onsLKN+WCIVscez01?= =?us-ascii?Q?OBpNO/T/JL+cfy3Ytjp6UChIPyih85g1NAyVPMBI9DtPb285Rx8wiHAwqw1u?= =?us-ascii?Q?8u8QywpHbYVEhgNpH/OrwV3FHrZQ4p2QTE//BH2bnZJsLU0GKEzUwg8Jd/Zn?= =?us-ascii?Q?rLZTT6PG/qnY4Xvf83HowRMdNhTCTvCxhZMQvAyPuvHJcHKZXa10O00JyGoD?= =?us-ascii?Q?fLnQe7VdevPiYmrIb63rZcxn17Y19DPe+PwTOKciNbPYjTHhiO8mYvtildo5?= =?us-ascii?Q?/lfnO1dChlYxm0XUstFIgYB1KlJItrpG2j/DnDzwsHOSB0G1G3RuqkbhaLb5?= =?us-ascii?Q?jioC7zwtRsSSt4vjblemrUqQdDofAiXM+YYT7am0D1+Tn0L8zISmnB2qQyaW?= =?us-ascii?Q?ZmU7+XPIlvd5mPRYZCMfLPTiV5rNiRWJ8RaHCAy/dJEKVT8oue5wD7D2GMJx?= =?us-ascii?Q?TpVA/dzcJkXr6CY6Yk0IKT04ihHnrKmMeLuy5sk+/mloAX9flHsMinKOMUiJ?= =?us-ascii?Q?VlvxgkflYt22K4GnpFIxmBXUXwy5Ud7jNvOzEnSaHw8s8YcVc3ftHR5C5WrP?= =?us-ascii?Q?fn6XEdj+qbm/juhbkHrqAgqK9nZCM4UJJkGG8CpZZXjOdleQhofzN+Vvn4OS?= =?us-ascii?Q?RMWgyj8w21Ghlh4iEzl33am+SVuDzCy7s0TJMcJ8JiwjgwO0spkylJ0gdRfG?= =?us-ascii?Q?qniKe/Z+FuYpVe4vtLDbkVgKReZs6Mrht9rYIOKbrX0j+SQ2fcbEpvt7P5rY?= =?us-ascii?Q?ocle4jh5DG5+C1ZPAcfx1cSnMAcCqQOxfPisI2HiiXTJD94Z3IYWU8r5od4v?= =?us-ascii?Q?ZwRWr75kk4Bx20PnkOUXGgprafKQtBsHFlinVBUv0Y45HuQX7hX+BEYsL5/6?= =?us-ascii?Q?J6ccmkVOlgaw6V5pGEqNe2jKBPQ/pkHq6lP2n/URYbCRmNCC08pDLoq5QrlV?= =?us-ascii?Q?NemqQjKR6rAJMc4Qk/7X8vYReDQIUtvHalV9+Sl9l19ynRtj2OHxGPiIiUx3?= =?us-ascii?Q?OP6ESPVTvKgngftNtywDlaBErFy2Eqb+c94YirUPv6owifi9llv1gQeF0hvW?= =?us-ascii?Q?FN5FvNuz5r5WaNMzTR4q6yjMF639d3e8oqfE565ob0lMWpzfP7uwA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2120;6:e5wCpdh7U9wLggWz1OctIWWTzl+FxUL3AsPU5ytRtHe1hY9xtsFuN/XZuVSIProC2463GYo1poAkw69I0re/FoKD8Thpo3p5BD5j14s311M10v4KbBsDBPV1UDf9VWCsW3WMu1wj0Tp+kKed6aZxrhCqF0SRYNo+LdMAY7F5CGCa0zhZAPdkou6xj/VrQUNT6ahDeBeZxSHe3CneQ0s5U7wLTNcRhHlub9kQO3gDfB2JStHIwN07tmfoITHQdLyNF/RAQ92TsWBnamUa992tgiEVZGaYKUnhRGy4FRcaTi9rAalTubi6ODKbyC5anisk3iyZeDAFGogGdD3Yoq5eJQ==;5:cmBXhI6fWO8aSt8DlEbTjxlo76x2+h0Fe01iwtWUZAEm9d6i5g1CYzs8GEASoeaFOJDRDwzySvzpUEKYFjepbfSlTCA/M5m52mb8aH9FnxnkIxY86TNt2pMhBxA8uBx3TOR5CA1we4UkvJFBbJgIiA==;24:2BGwLM2+ULb69voF+hxq6+3j1Gw15bsknv7KhfQ9yW/SfStp9kQjFcxClk+tPROplFSXHPV5u3HZNOZxujSEKLFM9gt+cAnsx9ChcI6W9Mk=;7:+RLBIjUQJAjHK0dYEWP+Bu1wyMp8X5k5p+N3MC/MXKLlYpp4dfB5RuzvO9EacvTMO4jsZvngXaNhUEpxQXpHV4wmiLieNBG08h6vTpsKUgzFJqttUO9m9jOJLkMz3ImzfiCle/3g8Yl8PX6F+kld54hOQFpbs4Y/Z+P/WN8VVude9B/qQ3u/6+UreoyMUSqPjZbUdXDWl4NdPtADQQTmF7mLzynM6JlEcI09hN9E/Po= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2017 10:21:24.6745 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2120 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently mm->context.flags field uses thread_info flags which is not the best idea for many reasons. For example, mm_context_t doesn't need most of thread_info flags. And it would be difficult to add new mm-related flag if needed because it may easily interfere with TIF ones. To deal with it, the new MMCF_AARCH32 flag is introduced for mm_context_t->flags, where MMCF prefix stands for mm_context_t flags. Also, mm_context_t flag doesn't require atomicity and ordering of the access, so using set/clear_bit() is replaced with simple masks. RFC: https://lkml.org/lkml/2017/7/31/454 v1: - changed the MMCF_AARCH32 bit number from 0x1 to 0x0 and added comment v2: - using set/clear_bit() is replaced with simple masks. Signed-off-by: Yury Norov --- arch/arm64/include/asm/elf.h | 4 ++-- arch/arm64/include/asm/mmu.h | 2 ++ arch/arm64/kernel/probes/uprobes.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 3288c2b36731..517b9ff0456c 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -139,7 +139,7 @@ typedef struct user_fpsimd_state elf_fpregset_t; #define SET_PERSONALITY(ex) \ ({ \ - clear_bit(TIF_32BIT, ¤t->mm->context.flags); \ + current->mm->context.flags = 0; \ clear_thread_flag(TIF_32BIT); \ current->personality &= ~READ_IMPLIES_EXEC; \ }) @@ -195,7 +195,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); \ + current->mm->context.flags = MMCF_AARCH32; \ set_thread_flag(TIF_32BIT); \ }) #define COMPAT_ARCH_DLINFO diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h index 5468c834b072..e4c474c6501e 100644 --- a/arch/arm64/include/asm/mmu.h +++ b/arch/arm64/include/asm/mmu.h @@ -16,6 +16,8 @@ #ifndef __ASM_MMU_H #define __ASM_MMU_H +#define MMCF_AARCH32 0x1 /* MM hosts AArch32 executables */ + typedef struct { atomic64_t id; void *vdso; diff --git a/arch/arm64/kernel/probes/uprobes.c b/arch/arm64/kernel/probes/uprobes.c index 26c998534dca..636ca0119c0e 100644 --- a/arch/arm64/kernel/probes/uprobes.c +++ b/arch/arm64/kernel/probes/uprobes.c @@ -40,7 +40,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, probe_opcode_t insn; /* TODO: Currently we do not support AARCH32 instruction probing */ - if (test_bit(TIF_32BIT, &mm->context.flags)) + if (mm->context.flags & MMCF_AARCH32) return -ENOTSUPP; else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE)) return -EINVAL; -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: ynorov@caviumnetworks.com (Yury Norov) Date: Sun, 20 Aug 2017 13:20:47 +0300 Subject: [PATCH 1/2] arm64: introduce separated bits for mm_context_t flags In-Reply-To: <20170820102048.7537-1-ynorov@caviumnetworks.com> References: <20170820102048.7537-1-ynorov@caviumnetworks.com> Message-ID: <20170820102048.7537-2-ynorov@caviumnetworks.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Currently mm->context.flags field uses thread_info flags which is not the best idea for many reasons. For example, mm_context_t doesn't need most of thread_info flags. And it would be difficult to add new mm-related flag if needed because it may easily interfere with TIF ones. To deal with it, the new MMCF_AARCH32 flag is introduced for mm_context_t->flags, where MMCF prefix stands for mm_context_t flags. Also, mm_context_t flag doesn't require atomicity and ordering of the access, so using set/clear_bit() is replaced with simple masks. RFC: https://lkml.org/lkml/2017/7/31/454 v1: - changed the MMCF_AARCH32 bit number from 0x1 to 0x0 and added comment v2: - using set/clear_bit() is replaced with simple masks. Signed-off-by: Yury Norov --- arch/arm64/include/asm/elf.h | 4 ++-- arch/arm64/include/asm/mmu.h | 2 ++ arch/arm64/kernel/probes/uprobes.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 3288c2b36731..517b9ff0456c 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -139,7 +139,7 @@ typedef struct user_fpsimd_state elf_fpregset_t; #define SET_PERSONALITY(ex) \ ({ \ - clear_bit(TIF_32BIT, ¤t->mm->context.flags); \ + current->mm->context.flags = 0; \ clear_thread_flag(TIF_32BIT); \ current->personality &= ~READ_IMPLIES_EXEC; \ }) @@ -195,7 +195,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); \ + current->mm->context.flags = MMCF_AARCH32; \ set_thread_flag(TIF_32BIT); \ }) #define COMPAT_ARCH_DLINFO diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h index 5468c834b072..e4c474c6501e 100644 --- a/arch/arm64/include/asm/mmu.h +++ b/arch/arm64/include/asm/mmu.h @@ -16,6 +16,8 @@ #ifndef __ASM_MMU_H #define __ASM_MMU_H +#define MMCF_AARCH32 0x1 /* MM hosts AArch32 executables */ + typedef struct { atomic64_t id; void *vdso; diff --git a/arch/arm64/kernel/probes/uprobes.c b/arch/arm64/kernel/probes/uprobes.c index 26c998534dca..636ca0119c0e 100644 --- a/arch/arm64/kernel/probes/uprobes.c +++ b/arch/arm64/kernel/probes/uprobes.c @@ -40,7 +40,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, probe_opcode_t insn; /* TODO: Currently we do not support AARCH32 instruction probing */ - if (test_bit(TIF_32BIT, &mm->context.flags)) + if (mm->context.flags & MMCF_AARCH32) return -ENOTSUPP; else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE)) return -EINVAL; -- 2.11.0