From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753120AbdBJMPX (ORCPT ); Fri, 10 Feb 2017 07:15:23 -0500 Received: from mail-ve1eur01on0094.outbound.protection.outlook.com ([104.47.1.94]:43072 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751674AbdBJMPU (ORCPT ); Fri, 10 Feb 2017 07:15:20 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH] x86/mm/ptdump: Fix soft lockup in page table walker. To: Thomas Gleixner , Dmitry Vyukov References: <0d19ac08-88b0-675d-19bd-4cdc543fdb30@virtuozzo.com> <20170210095405.31802-1-aryabinin@virtuozzo.com> CC: Ingo Molnar , "H. Peter Anvin" , "x86@kernel.org" , Tobias Regnery , "Paul E . McKenney" , Alexander Potapenko , kasan-dev , LKML , stable From: Andrey Ryabinin Message-ID: <4bdfc6e9-0f68-bc30-fd1c-0def4508b472@virtuozzo.com> Date: Fri, 10 Feb 2017 15:15:48 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6P191CA0015.EURP191.PROD.OUTLOOK.COM (10.175.236.153) To HE1PR0801MB2059.eurprd08.prod.outlook.com (10.168.95.135) X-MS-Office365-Filtering-Correlation-Id: d2285a73-3469-46bb-9bf7-08d451ae69e1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HE1PR0801MB2059; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2059;3:aQUo1lAQT9CV0AQrM0xJLtRqlLme8wP7G8bvh1S6SyQUPugk+V74NKHS38WJZVvLwKLFzzY1xMzHiJbi2x59RyubC28SgBn/gCtVschB0LjH9x6kaegghCTSWGu7HKQIWcnjf8CDig/clFcat4FwBHkKCYL8ocOXm0nqGqZFg2CtckA+x2rQHNX3eTo6ae/aXQ3syLwiRirzn3ukca5GbJ9EhRbfTnr80+U6w85eDRytDK7CovTsLunlUlxdAvs+wfdCHxn6fLi3to+HCvZ/dQ==;25:NQKZYp+9wB8xNeMzaqwVOhwUtMqqKeLbiSlb/QwDR0lf17R1TEXwCe/Kw9zW+0f/KfbhVY0Ltb6KDT6ebFOuVP8Pp+3pFs+b3CGkvTo7snqM9DR8kqLcODQtg3OR69Z1lxQB6g2kWbfo+2c8iZQGYsJ8XrqbiwpmtsppjlevKmjR7RJqDK+QLrFfKB/U7yIeHaAmlTJjM85xLVF0NQmBNauvnnmrb1CLtAyv2kNLOp9lzbfYwRP/N230dSC8vk9vh6n/giFONQivq9gwIzcINaLWdqtP9KeDrPTxd0BmzC9QKxOh5RVvXF7dEiSKHwnWqiZq034lEBiAU922GSW/BhAVviuHZl8Aq3d52+xNXovBEbrN2SlogMqAdTF+CDT43lk7BEXNWIB30Ry1RC+ano2PXVp1hZ0mwecmVza9evMk73pHmzcXHyVBzxRh079L3UsfsZt2B4yuRaw37b0PxQ== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2059;31:Zfo1nBloKRR/3ZwtKXrtIV0vGhZ1L+LOqJKjIab02OGUr8M2PkppIO9i8SoK54Qh+3AawqM4ijg7SyWI+wp8g14Y0u+ux/qrVFM92a6HkgDlBjd2dkgilPTLZVsrzFxnox7TVKuzoj39FCjZcQj/0x/1HKyeqWkq7XHlQGUCggvbVLd76EmFv5sBbc0u2ObQB26yP2VMwj3CoNqtag2ilQltwhJrxEp+yy5DlsyqVlnqI6xQwHpGN5sO5zgUaw/+;20:39VhuBQ0NC49jfKZEiRER8wt6VxXpqRJ9PLITZbqe1qzV+ETxxsXtjD/eRwLxJvsCeEh5NyY1jsRagFUug5iojuy7xnVdpfp9HnlPE8H6vVkiAzG/XRIVvGzo3HnI6kO+mJl2UIy3gA9oeN35yLcgur8RmxxCug9uvWmw3q1iICDVtvOQuJpbisxnVp3vxOxuaOKxQFEYmoOtxCQdkk7QvOWT9QCQbZchmYVNJQnxSBQp0lV+52tQQlgycSYiBji4xKj8cFCe0kxKOCiO2CBN+2m/C/08SIgienItnhOBkljhndKX7kaWvJgFoUxrRqqdYFVigZLUZvFY8Op844BGly/L25EIi/dkjmybq2pNsO0+9zD3jAYboYwzNtVNQBHbK8P/7VzSfO/Vtr9dde1unyr0dZdM7U2PL4BlD0tddQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123564025)(20161123562025)(20161123558025)(20161123555025)(20161123560025)(6072148);SRVR:HE1PR0801MB2059;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB2059; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2059;4:6Pz9lHo5SpU/aL2sP1EBytbX7wS3L959U7J0jvhXi7A3ovEt0zt+uFalF5FaCqXukCt+1nwFFF/wPuTfwknhWMuTJEQ0Tdd9phZer2KW6IUIoyLzKMHgtGV9TJlJhxJjyJ0GHFk8x4Bn3ePHp7758RdLFGubNvv2+U+Dq4xo3g84ZDFr8jq/ScI5QN5sUfoWk5Tj+AlQzpCInBCUczk4SZ6ewPBrT67F0f15C+bH6qwQca8i9vDdcCRzrlv2OhGq+LZsGbMdRF52oRlgdLurIeLTvSlPAbyt+AAIwNBOwPnWKiEdM6BWiFuAGU4bh+w/PrzVe1UTx69Od38yAVACYTPF7N5E/aSu4Rb9mvLVgaf1qx18hqcdJedqSYzuT8lDoZdmSG1tfq63gaDEHTZfySdsxLNfYt399rll/uCAiupASTVGdNW6tyiVSUaXNT8v1XWDw3gbMl/3kuP2Jh7n8KUI6UK32cC0ZmVVtYFhMT87R3qg5Cv59WRknnAKsnSCy2/k+zEwaWqXu8fIiumVf9vEWUZQuTfVNXrpjE8h3eSSGcByTwgMqxQCoTXxa8aVPrzvA6WGF0IlLwe/EHXWz8RueeGSETIxNYwt3Rjhnek= X-Forefront-PRVS: 0214EB3F68 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(39450400003)(189002)(24454002)(377454003)(199003)(33646002)(83506001)(53936002)(230700001)(53546003)(50466002)(23746002)(4326007)(2906002)(6246003)(93886004)(54906002)(5660300001)(39060400001)(229853002)(68736007)(65826007)(31696002)(2950100002)(25786008)(77096006)(38730400002)(90366009)(86362001)(6486002)(3846002)(6116002)(76176999)(105586002)(54356999)(50986999)(305945005)(106356001)(65806001)(65956001)(66066001)(7416002)(47776003)(189998001)(101416001)(31686004)(97736004)(92566002)(42186005)(7736002)(36756003)(8676002)(81156014)(81166006)(4001350100001)(64126003);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB2059;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;HE1PR0801MB2059;23:Y61VeWBjfltbN80W9glucKUIDEzhE3vhj1x?= =?Windows-1252?Q?FzOeL7E7oJXasvbpiXjD/nRV3v6OqDQ3MyKgMxLN/Rz+T7A275vB6Nlm?= =?Windows-1252?Q?JwXf/sQpQP0TZA2r23AM2la56tUoHTi35n0+cxF2qK8ozcPl3ZFyVspj?= =?Windows-1252?Q?0He92sB8WIIDQR5qFSTeWx+W6zkpNzys0lp7Y5uCIHD8ClDnV4qW7aoY?= =?Windows-1252?Q?wVF61Er83VtF5+p6E9meifp7Mt7daXA5+SAdLfsExtTr9UcxJHNAEi5y?= =?Windows-1252?Q?/YfT4aPCeVWgfOeHzNjjMRgLOoOv0LJDPhz4weqPySL6I0mJAqHVll2H?= =?Windows-1252?Q?cEeYi0lQ6xcaPHcr5TF//0vAVd+8ve5vH17m4aOpfIr6MiCNa2TvKuda?= =?Windows-1252?Q?SKaOhLjWJobFAjvWEl4ypt0QqV1gJs01J/9OIscVHEBYlx6V18OLyUuy?= =?Windows-1252?Q?Lz1uARDf82mpsKeRlHOtn/kQQ951yM6t15BH9BJJ6E8r4SpvZYAkVh9a?= =?Windows-1252?Q?4g/o0OvDcicE6wWzSZmtjgLA0swKjpEI2vJnXOmcuZjLi/ILT0CAP8T8?= =?Windows-1252?Q?l7fMXUjzGnKGBBVOtwc3uzE94FWPtUvSxbKEFbiXmqDZEZ+ByNNMWqGn?= =?Windows-1252?Q?P/dTNNCGb3FJBcs4HuNtNUBdlDXMw1iDqTrtHh3ivsHY2msAJJLUGpSF?= =?Windows-1252?Q?4Getu9a/trpwcsrCayQzzQhuE7HqUzcur1n4c6R/8a84zxHyEZOQVgvX?= =?Windows-1252?Q?XaL1DvJTz2yhHV/D1SiON5xidY66fsWy7Z5goAUYYBUyEsCgaKdWfgUe?= =?Windows-1252?Q?rahCbXFED44aKBKzixFKKYQ+tncLAskkMUBSje8jTK1ODlvsgbIZG6NN?= =?Windows-1252?Q?TlC6D6Pb4pQ8TnZMe+FPxvZVOjr343yDWgNBz7dUJx/gfxjdE9jl6HpZ?= =?Windows-1252?Q?NgaYRnarvIZH+bHEQSvmgsKkb/PFnjuty8daI7+/r8+CNXwE22niFLE+?= =?Windows-1252?Q?6DBbRr7yqctkZtYjWxHhyzLVaHDaG63RmEqk0p8UFCU1OBr7v7QaMKjs?= =?Windows-1252?Q?5dKt1WoLAxxjkEeH63IkU1t2uJk4irNM7UM5TXr4EzdqaDAgnXsjQehp?= =?Windows-1252?Q?3hh6Cd6Idt0ojGfHQQYFTuWNKTUgrnWln+k0h7wyN6PxepUU/P8W/ODv?= =?Windows-1252?Q?CvfL3KREh8RhfMFlmylRY2OYl9lTyJz9rjqKSLTXHYZpCX9q45zyp3ly?= =?Windows-1252?Q?Cjq4d1WkydjZqb1edtD0jYGkjDhO0J/x93C0PWN12a9oVeyRP5xwgAj+?= =?Windows-1252?Q?sYnsLeYWoAZ2HDMks/p/AjyA7xWrqI1ij/sWCaz4FueC7ztcSRZy98XK?= =?Windows-1252?Q?keu6V7gSxktnhKo4qU4ynLUpPLnCd4GnRfs5Iz7oj0EE+P3m9a55f/1Y?= =?Windows-1252?Q?uP4e49WRdbwmsCXFwGGTQzr9jsPjfPFUE7geIZuSwGFB9Aszb7ONHQsg?= =?Windows-1252?Q?60huuCvaJaebQtS8/D0eUaICjMOhYH+M0gBtv4nMQ4Q4PiI0UayZB1yg?= =?Windows-1252?Q?mi1R2vsL8rLf9fYA=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2059;6:7iMbwthzkwDDdlFZiTQ0wr6uSA/3JMlJhlooNN7KAtM+8f9h+48K8SuNVXqHMy1r8VP7AtS8/W7ntp0lqKXy/lgLL+EfFASFM45iMX4UAJ+7ig2gEYtJxaKc6LMQhp+SIiTdBSFwXmmqBGTTCMBJa9JqojEytZLapoUgpoVTYsD++sVa1/4ZgCjl6BfinF3CxIQQ7sx95EzDTYWYycOgv0zUgA0YZmjhAoUGej5kB2LAOaoZb7QaX4pxOUNXjqAjvezHIopLLGSaiw4vmFiTdkJwXkXC8OM30VefSoI0Hyt407PHJ4aWCSf8TcVMGObezlgSKU1JJ/+jv+bE+gJPrH8C1PBngWOoHaVs+VorGDfvhrd30Dc0Awm/idnoZ8hVAZxVbi+AqQo5fy5KwfbImw==;5:Wo7Hw5d6XmlWbna1PjVIihFCTan2acSw5ZSx4WI+iL1YMrre/uZIeu1qqlNZGRtt0C0+baX5J42B19IU5QIjYBl55q8Nc5xsoE5Gy5GAVqM8lqnas06vWC4h6TUmWKklyA+fC7IN5ZEDBh+FIXa0Yg==;24:ZxNIARZhGsWLuSnAF1A2IMrA1sUAFIPIBKNpudt6i1RqbfcOGn+a0f6mwHnSAXGMqSbGAzmJREz2l4yChRTKTjeMq9qZ0HT0xDbR3ZveOxQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2059;7:4/Uaj2oX9FNXOoNNUY+LUCbG3f1uyCl1Ilyuc8oWRfk6IFIhyH/qE68CxqlCs5J63ThrRmUHZF9QzWluEBVFMg9Jb+LC2alSot1dYVc9BJof99gmdPd9mW4G96VKA4i87juDNu7czBRWKLCgo/BryA3bKlwoZYDB8jS62HblUl/LwfyMA3DmX9U4tUoBr4ZYYD0rpoEObd363jfgwPgaI6tpGzVe6S0wJF8p39wiHepTRVMfubHOyjgBlwavhBk+ETo0jscyk5GHNy9NBdcnjwIFOAUUWTLM6mRS6+QfR40bBRP+JA+JxiAcNBXY2/2FkNC6I7tIjpY+yXh28wIB8cLmshnzNyURlZDNbxrdDbqBIX7QVWyFGrbYiJMhsduEt7QNh8j6rr9bat8OGCpnQiL56Jwf0yMvY9RqSSNK9MQy5QE10b4kh98jl2oaAJ55P3O8dZdkuHOaZOnJG0FIM9sTOTqQxSis/B/OUUmMnB2EEgkJs0V+m/NLIrYn0ToXC0QLY6EsIIJtftFpDKfk1Q==;20:aBZ8cWelxYlb5RB5QLBirL1vPdsQq5MTpAb54ejyNR7HWnTfrGbu8zRkAnOersq42kITc/SVLWtsYqXaCkrhTSB46QdYFuFjfhcnqa1+tztOMbEDvloFiBiV9IGwHapYwMbepu2zJUqey5R4LmPsQEPDhg1AgYPieI7wjFBmQB3gs2Cg2iCAqX8y2n2dgZAJOkPUaPDzUsofI9A/pV8RCG9503dXJpejNihyZxa1MhdzgzzXYPFFrvtTfqjiX1mG X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Feb 2017 12:14:49.4133 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB2059 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/10/2017 02:18 PM, Thomas Gleixner wrote: > On Fri, 10 Feb 2017, Dmitry Vyukov wrote: >> This is the right thing to do per se, but I am concerned that now >> people will just suffers from slow boot (it can take literally >> minutes) and will not realize the root cause nor that it's fixable >> (e.g. with rodata=n) and will probably just blame KASAN for slowness. >> >> Could we default this rodata check to n under KASAN? Or at least print >> some explanatory warning message before doing marking rodata (it >> should be printed right before "hang", so if you stare at it for a >> minute during each boot you realize that it may be related)? Or >> something along these lines. FWIW in my builds I just always disable >> the check. > > That certainly makes sense and we emit such warnings in other places > already (lockdep, trace_printk ...) > Agreed, but perhaps it would be better to make this code faster for KASAN=y? The main problem here is that we have many pgd entries containing kasan_zero_pud values and ptdump walker checks kasan_zero_pud many times. Instead, we could check it only once and skip further kasan_zero_pud's. I can't say I like this hack very much, but it wins me almost 20 seconds of boot time. Any objections? diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 8aa6bea..0fbae1d 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -13,6 +13,7 @@ */ #include +#include #include #include #include @@ -121,6 +122,30 @@ static struct addr_marker address_markers[] = { seq_printf(m, fmt, ##args); \ }) + +#ifdef CONFIG_KASAN +static bool kasan_pgd_checked(pgd_t pgd, bool checkwx) +{ + static bool kasan_zero_pgd_checked = false; + pgd_t kasan_zero_pgd = __pgd(__pa(kasan_zero_pud) | _PAGE_TABLE); + + if (!checkwx) + return false; + + if (pgd_val(pgd) == pgd_val(kasan_zero_pgd)) { + if (kasan_zero_pgd_checked) + return true; + kasan_zero_pgd_checked = true; + } + return false; +} +#else +static inline bool kasan_pgd_checked(pgd_t pgd, bool checkwx) +{ + return false; +} +#endif + /* * Print a readable form of a pgprot_t to the seq_file */ @@ -396,7 +421,8 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, for (i = 0; i < PTRS_PER_PGD; i++) { st.current_address = normalize_addr(i * PGD_LEVEL_MULT); - if (!pgd_none(*start) && !is_hypervisor_range(i)) { + if (!pgd_none(*start) && !is_hypervisor_range(i) && + !kasan_pgd_checked(*start, checkwx)) { if (pgd_large(*start) || !pgd_present(*start)) { prot = pgd_flags(*start); note_page(m, &st, __pgprot(prot), 1);