From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752534AbbI3CBM (ORCPT ); Tue, 29 Sep 2015 22:01:12 -0400 Received: from mail-am1on0055.outbound.protection.outlook.com ([157.56.112.55]:36480 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751115AbbI3CBK (ORCPT ); Tue, 29 Sep 2015 22:01:10 -0400 X-Greylist: delayed 374 seconds by postgrey-1.27 at vger.kernel.org; Tue, 29 Sep 2015 22:01:09 EDT Authentication-Results: spf=fail (sender IP is 124.207.145.166) smtp.mailfrom=ezchip.com; ezchip.com; dkim=none (message not signed) header.d=none;ezchip.com; dmarc=none action=none header.from=ezchip.com; From: Zhigang Lu To: , CC: Zhigang Lu Subject: [PATCH 1/2] tile: define a macro ktext_writable_addr to get writable kernel text address Date: Wed, 30 Sep 2015 09:53:47 +0800 Message-ID: <1443578029-21546-2-git-send-email-zlu@ezchip.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1443578029-21546-1-git-send-email-zlu@ezchip.com> References: <1443578029-21546-1-git-send-email-zlu@ezchip.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD034;1:N5nKe3SZyiKzpFgL9jP+pRVCLMryZmfqj7Xqr8+ed/gjYes5TeIsEWxUP9tNdPEYPTtFM3sbhlPX1a1PbwmMlpWoBErNuaZe9XzdFpsAj7eIYpwTzdKE7AWXsDhsyMNs6Dv/UsL6vCv/URq0aMNZ2uGMopkNs/21BG79aGJxxCl4EbOSTd2M9T++dLeKYUFb8UROg5meJXchToIoVPipleUtbCl3Lbs7aOj5PzjeSREAXRZ1icyJ5z7T26n17PTimxxabCNUKgoUviFy2bm/yD7EUoepOQOV643lhVqy0VNasorSqRYa+Kn75zQvApeqdkAA+ZiN5hJVLi80u7i7ANSR2CtC968P6PEAke1mb8Mh77D9DW/GU2y/xRDekC5j7c7COo54SU2WpgSr5FYipQ== X-Forefront-Antispam-Report: CIP:124.207.145.166;CTRY:CN;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(450100001)(105606002)(76176999)(33646002)(81156007)(50466002)(106466001)(229853001)(48376002)(68736005)(189998001)(5001860100001)(4001540100001)(5001770100001)(97736004)(104016004)(46102003)(107886002)(62966003)(50986999)(4001450100002)(5001960100002)(87936001)(5003940100001)(50226001)(5007970100001)(36756003)(5001830100001)(19580405001)(77156002)(19580395003)(2950100001)(64706001)(92566002)(6806005)(85426001)(47776003)(42186005)(86362001)(5008740100001)(9376005)(4001430100001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM2PR02MB0772;H:bjgfarm-2.internal.tilera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0772;2:1fiCnv13O9OiLXLeomasDC8NVd5S02i6y99VV/WbeJ315+gGrlpDc9jMSPF8FTdLLFp0fwBvkeKYjfdFiW4oUaiIcChkeBUjLG+gA76bnUD/+HMW4a49E5z150eInG8di0GKxC9ihlQhNUDBAMWDkydmB0BKTG7Jrrcb8bmz46A=;3:SmrCKxBJSKOtQUSdaefaTDkZuiJDBFPMsZGy2A7mmEeczCt3KhZftTTLBnEIc6Fxxr4G96KNqf3NdRnxmm4fNPhDU4JE3udecIRS/OjNJ5zbaDz3k7Gplrxy0Pko/SvmNFsBA8P3YyMmx74RO1SeqM/oClVSiUuDBVp6WgCu/m62QhiBIUQaYN3/CT+OFIGdI4Vgx5wA/KQyCHwW/+7lv0gcNUKnD5i+OeBDBjz1TFg0FEwx9IhzN4kla7QUghu5;25:Yib1GWY0tSfmDcyD0Vp+WWYPHaXv023wK3FqEajzPI6/jLFgAe+q+hiaY7lqgsFa7Q50YIYXHQfo9TfRLeca7oTm599j4SG5QOVRJgHBtE741NOxcXeQJDe2Rb/WU4ZBiZpseYmuACCe1wrdwESfj4gVkFxYGeREncSLlsfdTVcZSIu09JmyMjpsIFijCFikncjqTaR9nXNwoIweOSyJJ0E5arKmsKtAEC4dyVo8YCJYDw8+gP58pqf/vKcGXBbC1rNpyCT+PMPOxLW7mJBtLA==;20:OkNEW3vJiMuilZ1SU4nia4GnNqjC/XhsybapLJjjBKb1v7A0IDU1KRNADEFmgRNq9IBmJur4QjoIX1fAo8d3wTGOVU077s2gZz/sB5SxU7WZaQNPPe0HxRJPLXDlmT5ZU5JSimsiEfTJg/Voqkukdl07LF5S4+rNpoqTYnUZIKg= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM2PR02MB0772; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001);SRVR:AM2PR02MB0772;BCL:0;PCL:0;RULEID:;SRVR:AM2PR02MB0772; X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0772;4:VSD3Y9YH81URrTkTOid2xRhBNH6+kNZoyVUxITt8VzvJCMUN2FMzDbDwIUkNFpK+Ah4++uOSG3wbtMK/vbz2qb5vN2f0abFJNMwKt5cbGCvwtnvgAFSPBk3g/P9TmYEFP1ay1+DjWcVXauw47l/PL9+GacCcCtOK2ycbh9B0X7QpaInmBDzpuN9DL9Df3mmCKtsNALltpyuUXDlCi0vWrmL9eTtUN9P33Qlkb/Fr2p3I/1OtHb4TjFI/isCx/X1nlJ9GUvhsKgIEnkxqh5UrQnZqw1zRWMjJ7+Lop9/bsMZJUQg2yBPTUvnMEny47rLHN09W1g6snbz3y77mjYQ+TBcPSPBb69qEGya+YbD7Z24= X-Forefront-PRVS: 071518EF63 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM2PR02MB0772;23:XQsc+UyBMfW/8vDzmfD6WxiLBjc2Ryu5iJFueddVF?= =?us-ascii?Q?rbx0QLEYGFUAq306DYV8X7K/rC4QmaU+CTWkVyLsz8VuiMUiZZIEuTj5y0s8?= =?us-ascii?Q?WRNznP/ydktiW07kfY6AfSBDfcXaolwwwqGPjMl//48CoBnZ1q24PAbEbzYy?= =?us-ascii?Q?gBqV9r67FULN2+hJ7eqDNb6JF2RNgJnOPYE1BLZXPFOTtwjAKzyHedUiwekW?= =?us-ascii?Q?lGBofF5ABDGBCaK7T7oouSU9hEleK6n9NE1Jv1tpwKkfuZRfjn2R6YFt6PnM?= =?us-ascii?Q?OfnhcQwIkETrQo1aKXW0a3+4JIvuH2hNCM5EsaQo38H0jSat2S3ILL16WwoF?= =?us-ascii?Q?HmThjhNWvaOQowIgqcDVT5yq4b1zv1VEziukpxh/L/g6JL0q5I0v1MR5pza9?= =?us-ascii?Q?GVmiOLlZE0hrUnU8oQY6gCtyoMGj9LbgSsaHiSiOXLElHL+n9DvHXOj8Ojfr?= =?us-ascii?Q?gQ4HlzyIEDBVkfeocubPVpf/44t6y1KcZJG+t9Ro3P1lUerAdEfmu4WT4HKJ?= =?us-ascii?Q?4DwnQTHInn+2+0tKxGRUwVWcGgTMHEegxz4PsimSjI7uz9cdwyaLNF6QvJRX?= =?us-ascii?Q?O88LMLjUmTF+xeSWmXbK/mdga5Itagyb2WJ1QUQoB+et+jhd11lvO0cwurZ2?= =?us-ascii?Q?vKQuJDHRXNw8HY6OlJmpmnVMytBBNjaIPxMrZs+3e8u7GnnwBLo3LmCucd/d?= =?us-ascii?Q?SdC0FS/EQwpRx3Lr319PIRilbE8Bm4wdmUuRakD3zQ1kPfLvsSGLUxbO9bZk?= =?us-ascii?Q?KNk6RsMXqqJd1orKf/JiL1avI0xMr23KC60m7O6MgB7M3eIUnWEJZKNwjGe6?= =?us-ascii?Q?qRQVv4IXp4kpXCHgJp/NF/L7xyokdhP9/ddSiAlKiEY15HAEgHaR6Pad+Ywo?= =?us-ascii?Q?8u1LE+0BZ6TGQYYbNzR/E0+FxI9z0+F0N25YMT0YOh19Zgka2lMOaD/5Fmgz?= =?us-ascii?Q?QrJJbcOKZHMVcQsQ8Il4hgnnxiAESRtA8OU8MdO/C5nNkVv/A5px/Eea9d49?= =?us-ascii?Q?aoRRO+b9jM+C7jWJ68MPP7bVnCGWHqN10ofs49OFaHOghTvDQTg/Zt+dQrMZ?= =?us-ascii?Q?5LsPCgOf84191rYI7U2mxmnek/oANjp0FVW5ZyrJ2uOMBA8urURJ/nOZ74WH?= =?us-ascii?Q?QQ9PjJwMM1+5k5s1BUqg9QjlYkw4YvZIwZ2KqIikamkARRGrmnA7TJ1HR0ge?= =?us-ascii?Q?ViL/3dg35VmovxL10YUeE1cwQbH6Ziz6GGqKaXK47Mtt27OHPAthVxpnNc7g?= =?us-ascii?Q?yGBZ3gmHqjfgXEvvbfQLhcS0PkoxUo78CfUpiPT3EJjfRTMpOMmY95wuw6Ic?= =?us-ascii?Q?e62pbdkGwAM3xpd8CFohtCWFY+tunxQSGSY3HLqKYsM?= X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0772;5:Ki6DVTsYNu0oYbl8QhNTiYEyL5N2S6Gbls/H/p0La8xm7x2LaDXhGgNCqfmTlrd/OiaXJB4Ypw8RVlfa3wxY27i59NxvxVncmwRNjDj5DfOhH5Eslslziey1wuSeSLPv3BQ4Lcl2yDhgWdWZFwcySQ==;24:pqsylWUjCnARAi7fuF2mSa0cip8qS6x165+FJV57IJDk3CwWVkG7nIqTx6dOqlUzJNz2KmG66EDGJnvi877qzHt5wB3zoEJO6RZ2fUQUw2Y=;20:Gh+yTXKW5ueXRLAS21pR1tMkQzI/NGYj0gK2q/dhqDPha2x5yZssF/yyA1Dqj6JdOOCKxcCVSsTZ+BXoGSpewg==;23:PJz2nWqdsbzVooCc5rUB78dLavrtTB4tp3Tbvp+PXkrNlH2Qxy7xow3KjvP29KO3+gxyE2FQrsIe4ZEf49S4VnPRI3rUL19DuQJh4phPEUqF0KG4A2fGPIFLszRMOo6VTMx66vcKQRNtHoZdrCwRvz9HlX13Rhxj1hGD1wSWE3xngCVJea3FCDF68RkIoTcP SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2015 01:54:43.6880 (UTC) X-MS-Exchange-CrossTenant-Id: 0fc16e0a-3cd3-4092-8b2f-0a42cff122c3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0fc16e0a-3cd3-4092-8b2f-0a42cff122c3;Ip=[124.207.145.166];Helo=[bjgfarm-2.internal.tilera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR02MB0772 X-OriginatorOrg: ezchip.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is used by kgdb, ftrace, kprobe and jump label, so we factor this out into a helper routine. Reviewed-by: Chris Metcalf Signed-off-by: Zhigang Lu --- arch/tile/include/asm/page.h | 10 ++++++++++ arch/tile/kernel/ftrace.c | 2 +- arch/tile/kernel/kgdb.c | 2 +- arch/tile/kernel/kprobes.c | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/tile/include/asm/page.h b/arch/tile/include/asm/page.h index a213a8d..5cee2cb 100644 --- a/arch/tile/include/asm/page.h +++ b/arch/tile/include/asm/page.h @@ -319,6 +319,16 @@ static inline int pfn_valid(unsigned long pfn) #define virt_to_page(kaddr) pfn_to_page(kaddr_to_pfn((void *)(kaddr))) #define page_to_virt(page) pfn_to_kaddr(page_to_pfn(page)) +/* + * The kernel text is mapped at MEM_SV_START as read-only. To allow + * modifying kernel text, it is also mapped at PAGE_OFFSET as read-write. + * This macro converts a kernel address to its writable kernel text mapping, + * which is used to modify the text code on a running kernel by kgdb, + * ftrace, kprobe, jump label, etc. + */ +#define ktext_writable_addr(kaddr) \ + ((unsigned long)(kaddr) - MEM_SV_START + PAGE_OFFSET) + struct mm_struct; extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr); extern pte_t *virt_to_kpte(unsigned long kaddr); diff --git a/arch/tile/kernel/ftrace.c b/arch/tile/kernel/ftrace.c index 0c09961..4180ccdf 100644 --- a/arch/tile/kernel/ftrace.c +++ b/arch/tile/kernel/ftrace.c @@ -117,7 +117,7 @@ static int ftrace_modify_code(unsigned long pc, unsigned long old, return -EINVAL; /* Operate on writable kernel text mapping. */ - pc_wr = pc - MEM_SV_START + PAGE_OFFSET; + pc_wr = ktext_writable_addr(pc); if (probe_kernel_write((void *)pc_wr, &new, MCOUNT_INSN_SIZE)) return -EPERM; diff --git a/arch/tile/kernel/kgdb.c b/arch/tile/kernel/kgdb.c index ff5335a..a506c2c 100644 --- a/arch/tile/kernel/kgdb.c +++ b/arch/tile/kernel/kgdb.c @@ -164,7 +164,7 @@ static unsigned long writable_address(unsigned long addr) unsigned long ret = 0; if (core_kernel_text(addr)) - ret = addr - MEM_SV_START + PAGE_OFFSET; + ret = ktext_writable_addr(addr); else if (is_module_text_address(addr)) ret = addr; else diff --git a/arch/tile/kernel/kprobes.c b/arch/tile/kernel/kprobes.c index f8a45c5..c68694b 100644 --- a/arch/tile/kernel/kprobes.c +++ b/arch/tile/kernel/kprobes.c @@ -116,7 +116,7 @@ void __kprobes arch_arm_kprobe(struct kprobe *p) unsigned long addr_wr; /* Operate on writable kernel text mapping. */ - addr_wr = (unsigned long)p->addr - MEM_SV_START + PAGE_OFFSET; + addr_wr = ktext_writable_addr(p->addr); if (probe_kernel_write((void *)addr_wr, &breakpoint_insn, sizeof(breakpoint_insn))) @@ -131,7 +131,7 @@ void __kprobes arch_disarm_kprobe(struct kprobe *kp) unsigned long addr_wr; /* Operate on writable kernel text mapping. */ - addr_wr = (unsigned long)kp->addr - MEM_SV_START + PAGE_OFFSET; + addr_wr = ktext_writable_addr(kp->addr); if (probe_kernel_write((void *)addr_wr, &kp->opcode, sizeof(kp->opcode))) -- 2.1.2