From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754722AbdGXPXz (ORCPT ); Mon, 24 Jul 2017 11:23:55 -0400 Received: from mail-he1eur01on0127.outbound.protection.outlook.com ([104.47.0.127]:27520 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751671AbdGXPXr (ORCPT ); Mon, 24 Jul 2017 11:23:47 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; From: Andrey Ryabinin To: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org Cc: "Kirill A. Shutemov" , linux-kernel@vger.kernel.org, Dmitry Vyukov , Alexander Potapenko , Andrey Ryabinin Subject: [PATCH] x86/mm/dump_pagetables: Speed up page tables dump for CONFIG_KASAN=y Date: Mon, 24 Jul 2017 18:25:58 +0300 Message-Id: <20170724152558.24689-1-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5PR04CA0014.eurprd04.prod.outlook.com (2603:10a6:206:1::27) To HE1PR0801MB2731.eurprd08.prod.outlook.com (2a01:111:e400:7baf::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6a11c0e1-8b07-4b09-2265-08d4d2a7f86d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:HE1PR0801MB2731; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;3:79dwlIEGX3M4cNYOIfbuimlWKRYjh6GPJIBTfHx1U5swzKw75T98+fvsdWF0FDDph4wX7GMq1X1qfq4ovepwwhJVtD8xdglx+4ob9bzhJgawHvQ/jbnb11COXM1aph8+YgbTvPKeI/+wmIeFVhYRGzle/ZTS4lPCyuvcEH73Z2xTqnQS8iVt5sfx4FImypksqwHKs0MOv+NPVdg0AKu5c0r0opD+yT90MZQIgOhia3Ndr1rN6ilCdE/ylHfVmXGE+aq1DjV57c+hhECsCh7/BPyf5QgN6c1HbWZNV3ChgYpuIKNyu/1ARphEBZ8pqOlx+1BkJ6fNdRdTPOkU6Z1GGNbg+R9hzjivkASD6U7Bh5did6WN+pPSLD0loV2c8m8O+t2h8PS1e2xlRsaq8/w9u3TTAh8pUddKf8xBednldcudanFDbVkUMsDCnNcLVP+D+0B34AR0oo+vqoJ8cuxNtxH4+ZmpK3bGNehRVU/pzBI/wxL4C75PPCy2NcGyjKlokfeWbJUjXVIB4jnZ3Z3xj2DUAh+0xys7yV2UIX9XsZaZ9MPSLMyxyAEtbaApNPMS1QE5FV7gUrQRaifUgF55fE2tszGS2BSai5D1PKqekioNFPLvClkLikOmRZQQVIspcdso5HdvpHGJrHyb6J0EtGT+lBEsvb4GLJmak/q1pALWF00qnEg/d4Dnnfa1DEAA5sI+sTPfsIPoD8Mw6hBid7K+5Cn3dslf8Z5sb5Xj4UY= X-MS-TrafficTypeDiagnostic: HE1PR0801MB2731: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;25:IVk0HM0dQZ+TRkahR8xv0q1eeVFeZkFhhnn7xlmj5PBGsMRFtE8ib0EhlZPs0eoO0jM+O2j8FvQ10WZcupKEtp+v+eH8j0EJZlrlGt8cikRTMd2mmcq/Q8TZYRSfIF5Y5A1MqTvpqXP6AFKBE8UHlD98RANCsGtcMp7tlh608kc47gMmVSBaTx43iG6/a97T6isgqJeQaPdX1ez9NiId2f8QlOecITh8d619wNXMeLBkWSyvuDaPlldDsCO2igDxKwfwi7PPVZxnLe61Pgq8M+NOLSjTTKPxEffGWRwxX8u1rHPpXkilU1pA8zOYJvaGt6mWqPvtNJhyOapiMVhFyWqyDdglVATlq3BtMNSxUYEdmaqWIzVTjFePM1APeIgXcv7XEgF1721wfbzUcg3PzGkByJrGMJ7xdepEpc3piSI+HEHYx1XPhoayEMME/+eC/tMg5Huszl7TNxPYmIIgG7PXs836yEiep7wChWeqPtTRIPRiWov6HQFPvBflCHiD5JWnSsyv2dULqnZX2rYwjTThIoFDILIqzmG79wZ4T/jGGHsI7UMqFgYdkFP9ZB02CmIbDdiYySYilLFHC9lpf8L9+lJQEfGy71+3Sslxpv63GWFi/b4GYp98cIONjCcrOdLwu2ZUqgeUHO/9iXt6Ob6NJHDgDXyVEKVi6Odl8GqJKbtkRVjFszqonp/NvRpg5i9gmsXFSMEVeiVIXSLGqtAvAhjY6af5upDLa8oKAJFOoMDNrdeKJZvvSV1h7FlQarMwhd454BVYZe9eKd1LnLnBYLGiGmyVX9GukfCTrWJrugD0nAeeX8b6xb+Aflh6tNPN8uZC06EvpgXmABTCOk6xEv5S0QFIjHPmSkpHY5an96WTE7R5MmF9TRD4d/wQ7U930EjQCWCz0QDqjjnXzLtactYa/8EmKTB5Sd/g9ME= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;31:AreHjFFxUEKGCBJmi+OWxbTw8xxJGDyaFVjozCWQ2/dnxfqEQfkE9H8IkCcQe4Tgp7+dBpGU0bHO3orlwk6mEGGNMq7D6tSMcpnFjzJygZpiQQ0X5S9vwyD72UT3Y0LBq5t+wv3d/vANzUI9IW/AMAqpJUThaqSEqWN4DCl5lsRMkNuYwukMIKOKgP1XRM9MpJUTDQCM1P6GQvzzQ/2kffUC5GNZ/WJkYZ42kM4pdfY+ohCnKc1gJPG2pi/NRdxeAJ3TRDhkkHV2JYZ7/6icsB0Ojsr5f9KD+OhUlrBu+LLhPUIxN8raNjGnF8hHPfxnRsT90gLNEnCiTdmEpvmPjAWPdy+/TbqeRs9TAU1J6ndw0Tsx+iY1MPzcaYIqSaC3+TaTkJrrVDR6uLvFqQg5zXgJb7ZZybhx783YxJvYWnN62D5aBuwnTNFMbuR7A5leQgNOX36gw89cnorPA34eRsO5cqSzxjDUzQmWy3Zik9Xovj6tduTdLmr0E/xSHzYUoq1QgkA3LgSB53GMSKNfodEEdSrK8Yp3HR4DIp1vvLNuaCA04BC7JsCnaFfasat/i200Jhh/HIOpmWLBBBRvNc3FS3xYBJ+yzJtOe2UAZZloDfYuYme9HqrX72mIBoyI+To7psmkolSjaoubk6cFHo184Y7HC1ADGT7iKa06AQE= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;20:Ed5+pf+t0lSBcXCjfVt1JUEXxi/SX4yYDnQbQ/EjuC8peLdBFGFSbLqS5PWTSYIAI7PnkXS2xAZjqCDdK1Vu04bLi3EN8NvPjE8OjrarnclYdKbwGJh2Hk4SUCTRjfJY64GU4YNOro7/6iKhRn5WeXsWUy9Hlkh1dyXaEvyofq22B17jyB821YnMUa4l9iMn1//IHJ3/yBCHhns8/MbtIZhdR/FjGD8A51IEAlqHy1AdCBPV/fFzEhCyKBihTNHKye9LA77ApwXdMsmkIdwoqt4IdCPyMRRtPJIcTa6v3tFoUuTChUMS8ZmYQ37LG1itVoIVini6/n+NuIcok2NoB579tT3KN81U5MU+rBYEU4OM1sRNdCYfG3e4uMKufnYqarX5mWnAZFBHYaTynGg0ufaqCRo4tKrnlDamTccl7Rw= 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)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0801MB2731;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0801MB2731; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB2731;4:/rfLL8uqJBrcbXhkJ3mLSQelEdBgq+E6bgUTKeA8?= =?us-ascii?Q?vGfVdaruvymJ8k/9PeVY0BPYohskQ2xvi8nhkgfoQwmCQZ/A6LOJoMjgdid5?= =?us-ascii?Q?B8wQV/Zyy6ykqwAX7aP4crVCrtAfn4hCWo407mJNXBnrRpz5YzC5hw2qcKdO?= =?us-ascii?Q?G1RKZ4afu8+G5G/qcUobs5krsu4auKZ580VSCmhwpMhcJGoLCR6u5i6jOWT8?= =?us-ascii?Q?3MV4BNVdYOo2m96NG9K7xKPuIKCpNq+BTU4ghASxGIDfkTbrPjUBWiHn5Zxf?= =?us-ascii?Q?iSIPcZcRbmTO1PzuCf/+CKOGnijNDXG1KhqBcs16jRxIWrzTUBTjqgRp3KaH?= =?us-ascii?Q?I1WPjcVfEeLE6vw6VhWLhphuelUUfRzeDH4o4pOZkJJ/LvplthGHx3Q+jUi3?= =?us-ascii?Q?XTyoyGFNRWWBEnvKZ/FYdRgIF/q4AHwsbmnSaOHB1O9Wrr3CYRiSzyPPgqRY?= =?us-ascii?Q?IpstnRyj8ZLoAjUzAd/Kw5GgNTi+Fa3FoKJrZQ+FkTLJe4zaplhFQktvLVJl?= =?us-ascii?Q?YKKhbirNOtu9zN3lsm1W0EO/cCqDuE4di8C8CW44U20UjUVSU4ZTI8HVmHUU?= =?us-ascii?Q?KrBsHb/ua2UgxcLUrSvfUKfc5Hl/hqNVSW3UqkJQDcsXvk9NopStLqzuqz4A?= =?us-ascii?Q?ozjIHsRGXYDna/STmt/w6LRcuJbyxXxB0xB4/t2AZ/VohBOt7PpLkrhwGm4H?= =?us-ascii?Q?EGQNY671cy8ZnQ6lwoRT3be43ZkZgAageeQGbWX6Lt0fmoHNdjp+LfQGxn0B?= =?us-ascii?Q?98JcdYXfK42JTL0sCPbc+z0DXeNzrsb9zFnR24yCxmiVk4LPxWSSvhXctbAF?= =?us-ascii?Q?N6jE77e+SxXOL8ZGxL1QW8qADPokB9BJvxThAWLn+EKJcQvjx8Z8NziI/BVU?= =?us-ascii?Q?aAXNAoX09AVB79g90DiG/3jpAwoXy02kTw+MOTbkG9ZPdzonJyQ/UjGE2Y+F?= =?us-ascii?Q?dw9Ne1SUW0l3V3AuWq3ZiMxhM1PqNFYtPnQHBNPd2bsuZNfk8e7YTJJQuGO5?= =?us-ascii?Q?p7K9Tad0oGTmycfnQ7J7ot1vN7VLWvOdtcmd3DTEoDArZ9ha1WSwkQ3TqMlD?= =?us-ascii?Q?DssVvXn8euChNNrF9kV3JUD3XgBLO2eeuZLpz8FKvV26pIUfctphtHbeL9M8?= =?us-ascii?Q?rsBvCx2czUNBmVctDsqd1D1Np1GtSXFX?= X-Forefront-PRVS: 0378F1E47A X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(7370300001)(4630300001)(6069001)(6009001)(39400400002)(39410400002)(39830400002)(39450400003)(199003)(189002)(5660300001)(76506005)(42186005)(48376002)(7736002)(6116002)(97736004)(3846002)(25786009)(4326008)(1076002)(2906002)(50466002)(33646002)(105586002)(305945005)(86362001)(53416004)(101416001)(69596002)(106356001)(5003940100001)(50986999)(36756003)(81156014)(53936002)(50226002)(81166006)(478600001)(6486002)(8676002)(107886003)(68736007)(66066001)(6506006)(6666003)(189998001)(38730400002)(7350300001)(47776003)(54906002)(6512007);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB2731;H:localhost.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB2731;23:kph7ad2U9bRjOzsYZOOQIYRhQZj5OFbsoqvdGCh?= =?us-ascii?Q?3Mb5LUstvMDD8QdD+HTKDdn4zpibx4s8uENRZIxUTZYOOs7Ufs0vWLX8xLXU?= =?us-ascii?Q?FUUhnlF/Gx3m74Zp1zYndla+ADtRkBKxGctI33G6qsuntSvUpyl3ZQjKdkF4?= =?us-ascii?Q?7rx13IeBz5FtEF3pLrgH8chd/d5LkjxLY1ZSsCmCwOKa4GMeZCiXQaEoj3Sh?= =?us-ascii?Q?ABai28/3m4Dab6KcRuNtDbFsIxnKmu2JZUu/c5M7K884skHYrQ8I6zVHdiHH?= =?us-ascii?Q?9/iq+bzB6cOwHTI7mJpTZdZrRlUzz0FQ6y4mTm4xIfMjJXCwXHI1ZOefE58o?= =?us-ascii?Q?Bqdp6IiVXOs21NSa+HKUAFEBBL9Jhb45G9OH4h1h0QS4Rw9WsgCCk+kcCmtW?= =?us-ascii?Q?g+LqmFvcHI29v0ecOLWxUpTT5g+Sd9Q5ZQ4+Mh4PFTOOkSVcRXqZc6885kNb?= =?us-ascii?Q?Dq8pIvi4lG6kzYN0lLuW5qeDeG639PI2AIBr1s9qVIOC9PG2j+ZiEvClrvsv?= =?us-ascii?Q?7PPQoxaqp2ExxuBBXxBLxXz40x2MSns8LsugFq9w+H9jFiDTzOSL/yKEB6r2?= =?us-ascii?Q?TUPRikLrbrrjGzuRGVPMOYE8ct63jMIXAgj5JvCpEr2DbYH9YoNylQsTzGTl?= =?us-ascii?Q?ZAWrXnK7mLCjZeJnJ23SGyGGVIcrDQPDWw/JHsORnI282KKNlgDGVC80KUMv?= =?us-ascii?Q?3Av+z+Xz/0ODIYU/5/i1Xtz2vV9YEFiahz2idJ1Y2TsZIRqLz47DYLO4BqqV?= =?us-ascii?Q?whBHVwZycPj3DwqyiguKQgLbXi92VakkWUDNM16Bml6FSCtWD5uNXBPPK06A?= =?us-ascii?Q?Vqi8q0zsRSFXZ5quQTJ+cRL7h1h7cQkpYthtnMn0WBXNj2d0d0lKtsL6bLTX?= =?us-ascii?Q?sHHD/7v9djC1QIF1rH2TBBZ4jGC5IyUeclKskW4ofCx/9raj33zdVnEMebgD?= =?us-ascii?Q?Jy+Vj2JA4TtRjMwkiTEMrsAkZzFQhcdwj8zXB82B0Tgd4njCjCo459WOdfVn?= =?us-ascii?Q?WPOXcnxk/+9/aPODGF5ZuE2wnnUlhp5wwwvpPdsMiiQOa/6Hmcemfb58DTY/?= =?us-ascii?Q?jFEuRYaeyUYDiMvB6ztGJ5ZZ96E6RJRKmzJ6cHxQ/QbpxsJ5vmUAo9yTqdnO?= =?us-ascii?Q?LQ4G48aqHI9xlWFCvscdRrWbg1tXO38x7Qr1dXCM8wmPyeGmVgQEI/b9rSjR?= =?us-ascii?Q?S1U1hqWlxuyYeX7ZQj+HbKBn8WgBFcpXZFBsy5jg4MWTay/Io7THK6sXzjwb?= =?us-ascii?Q?cx5GjK6UGbJCerjR4dldfhWXtKoKTu9aqYruKq5O1?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB2731;6:XgS0vh9mYuSDHXwMgPhys41dKWy1nUo1jpxohmkp?= =?us-ascii?Q?kY1GOGEN3Clt/zXazCKdm2+Iqkean4rCh1qE6K878wDHT90/2NKe86FUxG9m?= =?us-ascii?Q?RovX4FBGcQyGByulKU1jduZ2SBfvFv948mxygrF0cElYQQyq1Z9kZ5rZVLEh?= =?us-ascii?Q?kY460y0eq9aRBJvhjcS9bI6xvxx+6ZRmys2RIXqRB/xExm5yRFrXgvP/LiRF?= =?us-ascii?Q?Q8G3cS76SpUGkGj9m1V3e6M/ZQa/haWMPfdt3AnC4ZuU5557yd1lRYRDO10Y?= =?us-ascii?Q?S+pfl4UO3KsPKcnoJpiTX5ApiG8ZWN+wS+v4Ob3oeostt8y45zlupxiqlII9?= =?us-ascii?Q?Zv5VT2SHpce4NG3CVfzD6CxxSMeG2b3Hdqa+fBDnFw2Ifrjrb6FRaoZCIXs/?= =?us-ascii?Q?9nLfPnnY0xrojeogy6oteuN4Jvdp6inMvkQCTXqkbZK3awSDVoYN2jauGlE0?= =?us-ascii?Q?mOHdrfUK0pqgUofzO27C2hQ+oCRhhVLqMf6VnL2W01xVv/ixglwtxQKNgMBm?= =?us-ascii?Q?mrInkmyDqAiWwNX8Xz8Iy2gvYE7X/PUKXmGV/eq/1VtMPTdk2iNjLOEVQPlR?= =?us-ascii?Q?giSuB+gGcG/lBq85FPHIwmX48/Xt2zxRgaDq/eOrdc+7EVQKpE/Tdzbjs3Oz?= =?us-ascii?Q?36FxqiIDY7hknitNzyma7tCNquc38YxwjI1GbtmTQL1djr9O8oKTvFavclCt?= =?us-ascii?Q?dJnTGLc76m5kbT5/S5bM07UDb1fIy/LRYiGeHSJqOBtavHLyvZPmdxVeG7kG?= =?us-ascii?Q?VvoPRKi187lnWW48WRzDk4A6i1McVN1YPzXBKcjoisflOAnPYTYXnVJgulHJ?= =?us-ascii?Q?a6lI1h3VFgJaRbAUpRBvVJxDXei9OMio0hDq6LfJLUi8CRW1p/X8DINMCeC8?= =?us-ascii?Q?mghU+7v2+NJBenvoqFYud5XXoCCO2swTI7paKpgdoUsEVTqQMI7daNePIvgO?= =?us-ascii?Q?v29e+Gq40cnAIDGJfoouLEwZgwZKjhrIz7zurKuwQMFVFXibiXjOCXb7P1/H?= =?us-ascii?Q?bfg=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;5:FmiDJCwwqdp8Mbv7PGxl0c9MqSHo4qVB8UupRevwJ3XffTTVrtHp7kX7bPMnR2g+MJKyOxFKwefurFx/rZg33M/2rhBsFq+q55gQjswB6eUhMfuhWP2uPv0ZtQ6LN0471ppD4mLLotoR3La2OGNv2RxzBYmNfF5bh4/aViY2xaVzmdRbeqXPrGiwCTWhFhySzkVIk5Z0KC35trWRZY9IqyX1pQUJkZMX3IlAoxfkkdJkLfPJxJfFs9OjJRSA1QI0jQWhf4bnRHcCPDl7fpo3LElm24vdmS1bf3simDUc/vwAJ51aJIu2SIXsS5i9YI2fUbJ1OdVBN2zVaIkAUlRWLbtYJkLb0IqQLBey5XIdWt3Ae6fEfVMD75NKu1qYuBkl9VKGCrNQZ9YI9ho0g7Xra2DP5UK6J69Uo9rGnpltfhmyRSsX6FYarag2N31yvrQoHQw0FDiBfg/SpYRHB1CLp5OMFuv2jruqeQYBgv9RqpXBo8uoNoJC3448qGD2+x4F;24:75l3n4Ad0J+Y9L1mDnS3dMGcaI7hGptpiHRQSBxYjdIgC9MY4CdEFb+ahmQNgr0JTS7wAa8n8oFI0a90+fRRuNV5ejccIzy5/sv9h51abMQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;7:MpW/Fuw8AHpdy9Z1s0dPLmb4oGN2Sz70S/qVv/B5NyVC1MLhp8GxfKgm7cCQl470w1Q0I/MUWWuL5VT0nNTWLwophZxhtZAcyMXTsD+ncJH8b3Dv1B2qG2tQ/OMBV45wo7Pxk9R5Bi62ClzTvekuxjK2PBqrbl+l46x1KW2riE3UEChhTa0KJM2B4NzEzKmnUTAN0xjnyyjcH/57CIK1M1zMbrNgHV78hyLMlm/nFPxtPL7DUS7ySJo+3gUp2O3Ly0xRwQm/gnR0uI74eyPkguVO5lPF5acSqivVwoEYrnDlh4vpN3vZDsI9Jqoz85KSUBwOjDSWfzt5EJ+QAKJwHF4ADSLXlGldoqklj+3tp+SMAW9n7WrbzXkdqSU8FXRThrUpTyTt6rEibkUakUrdvIv5ASIhG3grWI3z/TuIkt1ds/OOhmx7fVrapgSadc0TGJC6Iw83fRC6CCizG9iGmdu4qaD9vSZvjYnxlluIfD8KoNyUbvQIuw8sqxkok3MJOG7H82vYZpb7xVz1zODgm+SZuhZVhMzEhYMeM5+VRU9ytB0tOLNUquilEgT8Ux1GiNTzKn/KfEHydzx1UEc0VUv9zZ2adMaBVfE4DFLgOFu3R8s3UXHW5GKQMIMMqFBDvVfB3tj/JhWYBbHi7S2Waipm4rqiViVWVdPdXgv+2Iyql008MUMjBMTNyBe1Vp/1P1l+DDz3fyd8J3TQjaY6U+dj2kgdS/MniFkG5nB3qtdF3cQCIubb3Bz2J4pRTfO941OtjryCgckJyrO3Pduzf3iU3l6mTd3BtLJhD1fev+w= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB2731;20:cn6zDgsBZrY4VAYkbnIaJp+ZE3icPSu673onwocQIXqtvhEYNddDa2HUsL5PT55Rd7IN/fJKcwMUwQzsBoNikAagiY3WPXyaUTOgzaftVeSjyiVKPreYi3ssYn4VfCgG2gJMV0EHz403qqWQDrifandE2PQ+js4uKtqb+kiLcWM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2017 15:23:42.6449 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB2731 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org KASAN fills kernel page tables with repeated values to map several TBs of the virtual memory to the single kasan_zero_page: kasan_zero_p4d -> kasan_zero_pud -> kasan_zero_pmd-> kasan_zero_pte-> kasan_zero_page Walking the whole KASAN shadow range takes a lot of time, especially with 5-level page tables. Since we already know that all kasan page tables eventually point to the kasan_zero_page we could call note_page() right and avoid walking lower levels of the page tables. This will not affect the output of the kernel_page_tables file, but let us avoid spending time in page table walkers: Before: time cat /sys/kernel/debug/kernel_page_tables > /dev/null real 0m55.855s user 0m0.000s sys 0m55.840s After: time cat /sys/kernel/debug/kernel_page_tables > /dev/null real 0m0.054s user 0m0.000s sys 0m0.054s Signed-off-by: Andrey Ryabinin --- arch/x86/mm/dump_pagetables.c | 64 +++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index b371ab68f2d4..5e3ac6fe6c9e 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -13,12 +13,12 @@ */ #include +#include #include #include #include #include -#include #include /* @@ -302,23 +302,53 @@ static void walk_pte_level(struct seq_file *m, struct pg_state *st, pmd_t addr, start++; } } +#ifdef CONFIG_KASAN + +/* + * This is an optimization for KASAN=y case. Since all kasan page tables + * eventually point to the kasan_zero_page we could call note_page() + * right away without walking through lower level page tables. This saves + * us dozens of seconds (minutes for 5-level config) while checking for + * W+X mapping or reading kernel_page_tables debugfs file. + */ +static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, + void *pt) +{ + if (__pa(pt) == __pa(kasan_zero_pmd) || +#ifdef CONFIG_X86_5LEVEL + __pa(pt) == __pa(kasan_zero_p4d) || +#endif + __pa(pt) == __pa(kasan_zero_pud)) { + pgprotval_t prot = pte_flags(kasan_zero_pte[0]); + note_page(m, st, __pgprot(prot), 5); + return true; + } + return false; +} +#else +static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, + void *pt) +{ + return false; +} +#endif #if PTRS_PER_PMD > 1 static void walk_pmd_level(struct seq_file *m, struct pg_state *st, pud_t addr, unsigned long P) { int i; - pmd_t *start; + pmd_t *start, *pmd_start; pgprotval_t prot; - start = (pmd_t *)pud_page_vaddr(addr); + pmd_start = start = (pmd_t *)pud_page_vaddr(addr); for (i = 0; i < PTRS_PER_PMD; i++) { st->current_address = normalize_addr(P + i * PMD_LEVEL_MULT); if (!pmd_none(*start)) { if (pmd_large(*start) || !pmd_present(*start)) { prot = pmd_flags(*start); note_page(m, st, __pgprot(prot), 4); - } else { + } else if (!kasan_page_table(m, st, pmd_start)) { walk_pte_level(m, st, *start, P + i * PMD_LEVEL_MULT); } @@ -336,34 +366,22 @@ static void walk_pmd_level(struct seq_file *m, struct pg_state *st, pud_t addr, #if PTRS_PER_PUD > 1 -/* - * This is an optimization for CONFIG_DEBUG_WX=y + CONFIG_KASAN=y - * KASAN fills page tables with the same values. Since there is no - * point in checking page table more than once we just skip repeated - * entries. This saves us dozens of seconds during boot. - */ -static bool pud_already_checked(pud_t *prev_pud, pud_t *pud, bool checkwx) -{ - return checkwx && prev_pud && (pud_val(*prev_pud) == pud_val(*pud)); -} - static void walk_pud_level(struct seq_file *m, struct pg_state *st, p4d_t addr, unsigned long P) { int i; - pud_t *start; + pud_t *start, *pud_start; pgprotval_t prot; pud_t *prev_pud = NULL; - start = (pud_t *)p4d_page_vaddr(addr); + pud_start = start = (pud_t *)p4d_page_vaddr(addr); for (i = 0; i < PTRS_PER_PUD; i++) { st->current_address = normalize_addr(P + i * PUD_LEVEL_MULT); - if (!pud_none(*start) && - !pud_already_checked(prev_pud, start, st->check_wx)) { + if (!pud_none(*start)) { if (pud_large(*start) || !pud_present(*start)) { prot = pud_flags(*start); note_page(m, st, __pgprot(prot), 3); - } else { + } else if (!kasan_page_table(m, st, pud_start)) { walk_pmd_level(m, st, *start, P + i * PUD_LEVEL_MULT); } @@ -386,10 +404,10 @@ static void walk_pud_level(struct seq_file *m, struct pg_state *st, p4d_t addr, static void walk_p4d_level(struct seq_file *m, struct pg_state *st, pgd_t addr, unsigned long P) { int i; - p4d_t *start; + p4d_t *start, *p4d_start; pgprotval_t prot; - start = (p4d_t *)pgd_page_vaddr(addr); + p4d_start = start = (p4d_t *)pgd_page_vaddr(addr); for (i = 0; i < PTRS_PER_P4D; i++) { st->current_address = normalize_addr(P + i * P4D_LEVEL_MULT); @@ -397,7 +415,7 @@ static void walk_p4d_level(struct seq_file *m, struct pg_state *st, pgd_t addr, if (p4d_large(*start) || !p4d_present(*start)) { prot = p4d_flags(*start); note_page(m, st, __pgprot(prot), 2); - } else { + } else if (!kasan_page_table(m, st, p4d_start)) { walk_pud_level(m, st, *start, P + i * P4D_LEVEL_MULT); } -- 2.13.0