Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752966AbdF2TUs (ORCPT ); Thu, 29 Jun 2017 15:20:48 -0400 Received: from g2t1383g.austin.hpe.com ([15.233.16.89]:53986 "EHLO g2t1383g.austin.hpe.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751537AbdF2TUh (ORCPT ); Thu, 29 Jun 2017 15:20:37 -0400 Authentication-Results: hpe.com; dkim=none (message not signed) header.d=none;hpe.com; dmarc=none action=none header.from=hpe.com; Subject: Re: [PATCH v4 12/16] libnvdimm, nfit: enable support for volatile ranges To: Dan Williams , References: <149875877608.10031.17813337234536358002.stgit@dwillia2-desk3.amr.corp.intel.com> <149875884190.10031.6179599135820559644.stgit@dwillia2-desk3.amr.corp.intel.com> CC: Jan Kara , Matthew Wilcox , , , , , From: Linda Knippers Message-ID: <595552F5.5040008@hpe.com> Date: Thu, 29 Jun 2017 15:20:21 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <149875884190.10031.6179599135820559644.stgit@dwillia2-desk3.amr.corp.intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Originating-IP: [73.60.235.182] X-ClientProxiedBy: DM5PR1601CA0015.namprd16.prod.outlook.com (2603:10b6:4:5e::28) To AT5PR84MB0066.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7403::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1b82a828-65ce-4587-1108-08d4bf23e81f X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:AT5PR84MB0066; X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;3:Foul357ooAj4JizOaSGPhb5RjjQQ/pHEJ3nPeoUTSZ54F7tgvKOwoIgAhtsP0scVRp6Tyrn5BIKft3Q1Udr32KKTnGRp1rH1krQM0jQ6cFazvuoYPcgP3DCGMjeBxcZFZwrwLf5h+Qv9UkyUtjwFKIR8f8ynkr/sPdIRfI0ohHlNQi/w02yIkrMmPrdVexZzioy57+mo2XAvPkzKs7ONMq3hL2L4+0WwEbBqritcD8ZQxkCAVI+DLG3yUI/hty+//oZKhb0OZtmvWTIXvCbb81dni0gBLvaq4VemtzWAB1Bq1Jf+l/RNqp0SJGiR27XwBV64fTMkP59WxGbxFUW563e2atLCcbk3dYsg+xONbBuijbRRlJYVhqMyuff4yFUwm/OxTK5h1Z7IXoLUcy1gndorgpuP7Xh2FUfPCzfodavNLpO/6Kia71/7AkYcv6FBPDLOAtaQTRugU5NlRSmiG1AAfsx5lhYHJekN77MZK6EsWuciUl2CuBv0d8iZjZDv06sRCuMCw5qhVdw3vkZrgV1kSKHOQS5/a+COERUeOtVVIWYzkVk/zj7XVN0BZTqqWjFcvT3llIP+w/c18x/00ahL1OoqaVmmU2wi9EF2m8jWvYBOywQf6c5CaoRUYM1tLNEJP+AD8gMdkUVVRI8nXT+YQGvlVStfMq9poGT56Z61Rv5Zdw4MSaxzKHjSyq8yin0c3RTlBRDbFx1kvoOXv8H4NxiEMhGcL72pVw7bS24oR9EzKxVpOfQI9+I657o3YoFVE3NBEhT08Evto0jcTg== X-MS-TrafficTypeDiagnostic: AT5PR84MB0066: X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;25:eFvHAA36krXVFGkRMwmkyjcuXLUaZtrSbd4PnWGnmXZ9s1asbpyXEQABsZfMl3H8LuWRwOPxwdufe+BxLuyDyc5IeGm30saGS3HnW+kqkIXMTm5wbF0Hx9nZYc5No2nQSyc58zKW51oViqj9Xzz5cdsdpTGcIGpdoR/4r2tCT7DYdeDGmuxxP88EPXPne4KL4s/G3eY9BLjIWXWyW8MRJPNNIWQA/SPY9bN8F0xez1O37UJTswT3Re6HRegsiLrtr6BvDfadIEx9iOj0Bzrtia+sE90W3VX4LslRpQKYBlKwZeFCoiYmyt9UFPj8sIU9eDgz7zAWduK3fAYug23HU8DX8gG9SlN+n73E53m19BxQyH+W/+9sd5EPYScPUXa2j2rD3xXl3PkF2zq57AREThgBGIu/6jBlBaLJwGD3ShnPNxommCUtJfbg4Ze+9hpO55FGJhVN7JIIwwAq8o4zRz52SHEyvK4QzDgj9QqGMGnM0EI8nu72NTOWK9SCXM1HdfjUKJhQJrVpPAFiWS+ELZPpxFH+vKa6Xy3BJqy3YXivXRKeONAc3ot4AO+z5DiJ7OY/ZahaQxw4sGZPe0TZgMtvhoiGkXxlWIgK99FRJBpCt64F1Wi++E8oNMfgWzkLsWDKO5uyzR9IWD3sKJ2XtcMiLEJ1OimPjvhLCEQ4tW00a7wgeN0k9LzHPcCjZbSMHINsiqn0RQD6TTMtw+p5yhaSOu71lbz3NnLtE3bwTiz7z4KThAMIxxtHSiISHH9zwaa/6QMTrF3c9A4Fyp1MC3kywd+dlQxSA7ptSMDtpaLtetURzWohczrxs3/RIOkPQw7KJRZ2bN8E2kf+O8jJI/Jwog0cKo1m6EI1uJ95k0AfHeeTSkh+kjVeMapU08cHxtTa8RfZzXDxk1Q3ESy1MEiePWu/jdrTIjoQOd3KGXo= X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;31:pPKRYtwCtEbrJVawArAIP2ODOo8q1KwSPKrhYr6DoiCAMXt3RatHrElnt9pMA1W0GJKQSwXHgKem5vdQN/qunJ04sJZKwybt9Nbd5zT0mfog0kO/ijoYDxlNxldvKrUzHtFU1z2drlCV7IuQUsYlN4vNKmJm9gjV63QnXLMYWGb5gRHxBTkTtL8VZoA3ZZyfh3RvCOzKvKixrkYD2Y0wsZyC7GzAOKDJc9/FaGyaa0FFrRRPunt+UB0w3K/3J0my7QzIy0xtYQa8rw2HD840jbcJaFmIu5N4b9Z+8eUPNsIpjiB3Va6z4tclMYeu+KFvs5e9teoC8d62cofVF5FWoqLubiT8ya0ZdCn98KL0dQoHRurprjd2Dl/SiSdUY8/bp/RtGqUrWjriEQ+fL6TshV8UAZ53OFlJguRjZ/4lWtpyfc/mkV/ochM3P+QFInSe+xMa/OlyZQi0eSMAsTuFn1KSMUMK2oGrATFvqYdK48XNVJO3Bcy6D6O7Dm06KSIqQJj1clzxoiKtkHpZV5LuJTjWLfuIepua8nnF/s8b1uFf/gmw+jpi9iGLidr2HUCtlP0YtCa8SEeax9GRbFu1DBRhUHkFRMDwZ6YNihwpfwv0Huy1fxwVA854+JMsGlJfKHPnIbFPBGCW9g0HgLJynuCt9WHxSJhRB5xxdAY1aV8= X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;20:gvtoOFefVPGveLhtwOvB+mpAPvgJUw/CYyUQZoQGiMeOXQ6mnfi4mEiHwJc6UfncszvLq8FvtpSDgvqZfODwGZOPu0ZM8GsDR3qVpjczj1PlhZkz9ntWhi8TrsXQ3yp0QWWiNNy9OIFCuQ79sBfBBfiDBWG1P0eGKPEvnjLlqfo2DS1jcWaBl7s7IVlEXuW0d0H4ewkDKA6m2/s09y6gCwRiJVv/WrHU36bpz4wmU33U9fzZeoGNlCJ8h8a7TAUbOn64FM7l5utj8WiPl9UBNc0tSyaGjzwY65ULil67HA4xXXscsTZQ6o0SW+UeTd8xLdwVZfL8/GL/NXAP3qsQW8PEL0GP1WplxLk6HXeE0HIbXLQ4Ap7YTCuLRLaOheuVKKKFC3FbKMUaKVj1cq/PY3KFfD/6vNmGiNRKanApVcUkNcNOgvZ+xQGJkzhzyU9BxhH5KkK1+s0s5cq3ymneZRP6r0axzA3vV4GKr8s7BT5L4icOPk6RqtUWFy/NBljv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(133145235818549)(236129657087228)(162533806227266)(228905959029699); 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)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123564025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AT5PR84MB0066;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AT5PR84MB0066; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AT5PR84MB0066;4:wISYQQhDrAqNc3T3rGywyExgDXVc0n39HkHdJe?= =?Windows-1252?Q?H2eKwXE/FLXtot+Dl6CoMHGzhiPOkNZAdAEvSz0TdH0lWbnoZaa26F24?= =?Windows-1252?Q?z3UCIJY4h/YJXeWgmJinZeXAU7mJomKu7dOSNqb/qkrpCWlJjmTbUQPm?= =?Windows-1252?Q?E2r2/ZgvdUe5O4Y94gd9uf8JNWoN/9dz/cfo6REZLejk14HnO16/6RUC?= =?Windows-1252?Q?Vuwq2UO90p4KHrTMZTgKA9z2pVDZg2aVT4M6D3wl3enNuzJyY+v6t8fo?= =?Windows-1252?Q?rygq42bQ5M2JYShkilNWzI+Lu/OO5ls7pUm+yjJlO48R/lXOQnxKIJXq?= =?Windows-1252?Q?DZrzp8hGJ5VBQ1bvPRFIBNAXgkcCuN7h9eEY3Yl6RoDWCzdYliT2+ner?= =?Windows-1252?Q?SOEbofB4Zr+Fy0gcJrkNCcSqIQq0NHF8adAqJ6th02i1v23mCcj5QZuw?= =?Windows-1252?Q?hnFxyAeK6jLA0dleNBUOPa1aysKJKvg8A9K+W8sxiopeAwDTXKed81rX?= =?Windows-1252?Q?R80aFb35pGNb+uBhtDexeCg+TvH1cOKqpE6QrhmjDKaBVGptSOlfIUwS?= =?Windows-1252?Q?xyUw3Jabv3/OShtQKsyWBiL2EXCHPnpIfiWuZ6mHmU4l5fZ/aqYtvYNA?= =?Windows-1252?Q?elFd1w6zjOa9mtpuhThcDNbnIvF70dy5yRnZRR6er5HbwwiUzc+JtZtM?= =?Windows-1252?Q?nor0uTnFBpZuICrB9pBlLsOZmEoQtSHZA21iCmxNzSm89YBFI79nAJn6?= =?Windows-1252?Q?R3ef+NxdYj7mqWSn8NHiXrdoZX6eisYij1yY4vxtTSJ1Lw+w+sHpS5gx?= =?Windows-1252?Q?a28c9uMbKSh+VARbWcCxww0HZv0WPL3Qz+az9DBuWMraFFnHEQAiBLXs?= =?Windows-1252?Q?ayaAqjdCPqnx6ByaF5wKv+gqfZGt4iq8VCQRlBoCAhV2RfWq5kF4ZwNc?= =?Windows-1252?Q?wpDuGSYEkMIa2ZnMUL0tFJ2cgOd65zJ3IbiyoHY+u0ZBykRa/iSM6HeK?= =?Windows-1252?Q?dfJJzmZgx4h6TuX8a17Al+Y6Lw0HLnxjzqBFxV0YvjfaxQhOwowRbfLx?= =?Windows-1252?Q?tvYhzo9GivUbqba4V3hNjbmhr253ak67/jZkUqtP756h0Zwp8gCnVOJE?= =?Windows-1252?Q?y/M4i5dY64BEZcq8LxI9w6bWbjyDzi1YWdytMhnGglcnyILlV1Rd1GOi?= =?Windows-1252?Q?FYKQ9CKK9POUVU5f65oPYU3kClL6aIz3natwbADdh5CUWNQnF03dyfY9?= =?Windows-1252?Q?ltZwzZU9mxcT5b6dGLqwKkqFy79Nre1HAKsKQ3l8xfZPZpFN+JchoCzy?= =?Windows-1252?Q?w3pMsXFztA8g7RuwcCvy1VZRt+y/OWYy530hdqk8bNtmg85Nd1NzDeFA?= =?Windows-1252?Q?GlrG5i/SDzXPmi2GDgxtLG6NJSFBAekGLwOlkmtuex5ZaGSewm6co=3D?= X-Forefront-PRVS: 0353563E2B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39410400002)(39400400002)(39860400002)(39840400002)(39450400003)(39850400002)(24454002)(377454003)(8676002)(38730400002)(110136004)(6246003)(53936002)(50986999)(33656002)(42186005)(189998001)(36756003)(50466002)(76176999)(80316001)(5660300001)(65816999)(64126003)(47776003)(54356999)(54906002)(65806001)(65956001)(4326008)(66066001)(478600001)(4001350100001)(8666007)(45080400002)(87266999)(117156002)(6306002)(25786009)(229853002)(83506001)(966005)(23746002)(6666003)(81166006)(2906002)(2950100002)(230700001)(53546010)(86362001)(77096006)(305945005)(7736002)(6486002)(575784001)(6116002)(3846002);DIR:OUT;SFP:1102;SCL:1;SRVR:AT5PR84MB0066;H:[192.168.1.12];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AT5PR84MB0066;23:TH5bcFmTT6fX4nKT+YB4Z+hzbyT7lsIA56y8z?= =?Windows-1252?Q?JVzducWaI3tlhZjqeiV7nmuPoLrzYG9wK8Fvdx/0f5O1woQAJOKP1cie?= =?Windows-1252?Q?V4nRlBP4xFT4T+qcC1nT2VvJbCzLB7BDOfFq+YBMIzSuV+a38ci8dOLz?= =?Windows-1252?Q?F+vsM5IP86BaA94vyN8gmk55ILK4HMS6Kg5TWDrbZnApkGzBofQS3h11?= =?Windows-1252?Q?ULCIXLeu5s5s6+COLZ5CxSmOos/DgVdKiMvK485Pb7ztHv/3tpOIzRui?= =?Windows-1252?Q?QLp6BNjzJCDSAnaqora5Nz2kgpuw3oeM9Gwv3KmbgFd0UHhqMuzHP5Km?= =?Windows-1252?Q?wH4uClknOw+N8DuSGUqBin4tLuOHw/xG+vhitJZB3qzYto72PsRPbwEX?= =?Windows-1252?Q?hgxVGHdqREJteYhMT7NtqLjCK1drIgMJ0JU4HKlsUkxEPZ5eKe9BaWve?= =?Windows-1252?Q?8/RHQ/ZTQQKlVPUDHAvqP5MeL8ZLudzYTbCpPmd8Fp73/aVZ3O84NP9U?= =?Windows-1252?Q?cIP5FdIg42m+d5MCPQ8Ysv5JmKnMaKUQHGPBQEItSSSydG9lcALlyWFK?= =?Windows-1252?Q?+yxU4KKhugHPbMGC531B8ogiQgph+i6hIctS3kRzs6ab3UL1Kfiz4VOY?= =?Windows-1252?Q?Fo1KhAyDKXPQRfxWr0ARFaJCsY5xLnTOEOzE/q25OaAJdEZ41EioC+Gv?= =?Windows-1252?Q?VpTwwO6bNg/K3qKGqIpqnxD53VmImhvnBeqjKkABIDc1egDfF6AR1N4e?= =?Windows-1252?Q?S77Lpn/O5smy6wkii4aA77ueaqVzs4dLOU6Ok2Ckf45XWWm0expvBLnE?= =?Windows-1252?Q?2Ve3ELP4YVY8x1IsV+E9kzvlZdUqwJIs/7CxR7ovP8msCStYm2ohcqtZ?= =?Windows-1252?Q?vMe8nEREmI/4Ysv6bwh5nbjcvwtXaz6f3+T77m8SXPbvN6gZ+xg1M1ju?= =?Windows-1252?Q?iM/G9jMnpSk0QwwF123DpWqZAa1YzGI0hudph2YipdiCRj6oHxhdshOR?= =?Windows-1252?Q?xEaiBBAYAVPmBgFLS96GWsorRqNIFx/Ud1f5mLUDCN2BZDMrzhxiQmUX?= =?Windows-1252?Q?K5oX6580PgSmSGMbhWmaXj6mdKXNP98rvoehHrE/wWzNKVNPuykChfu7?= =?Windows-1252?Q?JzqviGrIjZgkQdqVwxFGZVdgOWBK4VLHRXR0N7yrIoA3ppFREiNiuraN?= =?Windows-1252?Q?K6KDnqs8vEYZKCgyeYf683qmvLeJdlU6qj+bCNYLUejPHdVpR3xqhNfB?= =?Windows-1252?Q?4t53V3d9jdhNRyp/0qL6I1u1jJRSRMOtR4mJLdJY6nrcpwF7JgZSaSFU?= =?Windows-1252?Q?3Csi/gvO1cX3RuQh5Q7ALXTzQb4fAuO6GU4GLBnkJPVqhFFqsD0mRNzk?= =?Windows-1252?Q?EuyPQP0jgubMxnDojD4/A7WKUxymW5uUiWHMv9+CT7D0WNqbaHFZWpV7?= =?Windows-1252?Q?3aeycxfowu0/ceqneo0ShGFoTkZBGWUG8IMU4RqfOmpFCpbR4S39s4oN?= =?Windows-1252?Q?u72vPKGQBPk46YhWhP6AyB3L8HOp/r+wqOhkc8u5zJQjhKGJZ3K5thm5?= =?Windows-1252?Q?pIQ7HAiemW9DD06Gn+SQ689AISovzl9GjW1?= X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AT5PR84MB0066;6:UUd5UQbOlehplsoQ8DU15m8QBUIdqykeyoxJLE?= =?Windows-1252?Q?1LkmLKi8ottWuq1SfIxFRLnykkc/eaoUNODzD3g+ulRNMjXu7jc/Wx1K?= =?Windows-1252?Q?eZQsBrYBIGB1cf+zi+jKhEzuyZyZNEjzXnsNW6K70mw2RPe3adWJGlzT?= =?Windows-1252?Q?82M+YJAa6/1XephY4KhmBp9XiNy04xSJ+QFT/781vWEo5Cs4HhliXOwg?= =?Windows-1252?Q?b9IdUrSllvcg6LpTF3/NibBNjiAAC0C/XzrbxX13UibeltTSdlPPJnqq?= =?Windows-1252?Q?goizq2TzP7jmiy590ayInhMmw46igYW07ERSRd1qKg3dSzw/oqvHL0IY?= =?Windows-1252?Q?GnTGf7RmIaTkziapWv72k9vlW//gQFwSEwTtZzB5nLOCxGVr1nOeT5eK?= =?Windows-1252?Q?uwnCLT/2U6IoHkTVGocOP2hYaEl+jlb7afvn4KmqwAR9odVCNRHOrRbt?= =?Windows-1252?Q?2/IPJOhq3KxMS0uYCIew5iGuM0pJZw3iIqo2DkqMi5O+YAOnbmrI0xLV?= =?Windows-1252?Q?ha0EsW5LereYWSVqyhRk/mBb3wy0x0BExWxbDNjE+XRWHNOBpEJRNAZr?= =?Windows-1252?Q?zyLLt+0XgaDLU92RaHtk6uUxOd7EDUkcRfvvRmxbfCrVZU3UnULr94kV?= =?Windows-1252?Q?qRnVPinZy6cFwF3HCxrS5te9/tZ9jPjmN/Q17WKRJ2h5rfd/Lt+UhndW?= =?Windows-1252?Q?nehxuX4Fv4WmvqLuozUHMo8OWeojFoykVMJO7qPvhxqgIaHuKSfK/avU?= =?Windows-1252?Q?oCNaJMwakoqOctXjT2oBFcnxAwWWZdPRO3E0idA3bMU2Q+YGTNCLAkH9?= =?Windows-1252?Q?GKv5qyG5BXVe6Gx3OkBQMH26gu0KbXL6V+DETzhRCmiR/wEfNJ7JgWjV?= =?Windows-1252?Q?gWlWuN/R82Mz3yyAPPRnpFrt8233T+SGLaK6OdfZ5AanX6KKVGYNUY5L?= =?Windows-1252?Q?EtiTc2B5oDKYzQTI/ZDXw5Iu29zfPeHimHZR6TLzl/qkJDGDCdnwSFVA?= =?Windows-1252?Q?4yVwPPj7QNaPy8UOzUzyxLQ5A21JHcK7j6tx8hIQHbIZFjizF/tXfdDj?= =?Windows-1252?Q?IZH1GgAhwE+CytbS2JLNtpGamilcZAzE0Y?= X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;5:2GqceN/fmzX+HU8fDUafKaLGE32zJqykwKA9gAxgbGRYax27S2TYfYDErNmFKA/E8a9fEH0YicWTWMQIgYu37ItiImqhChpxqGh+BCM1849SjgGwSsTJFQBSH2eAvuuwMeK9EsL6y5v0FGYv8pPP0OUhKL9MT7sEZ+L+5NQLPfwssHwbcDcm3ulmGgrgX1sMpjJ3mOnQshDxac1lRqbo1HT/GPxxRoVZdeNUSSH0ccPmu2VL+f4dj7jJSR3xT2Jo3J1H+ztPBBL2zzOdhWB/CXKGWU2NU7IwTcLl3iMgpC88JOZ6KHgO+zTgLL4qNXZ+Yfgt72uKYad71bLefyn/7LYpoEjRrvxtolo7mthQ1hxZDGV88EXZFieGNysrLRJ9MbYUNbBkKmYtiM4nEnMYV8eXroO5gThL5CHWS5V6mgLw5yAMWqMZXqsGmAR6w6yO7xj7vMcBUgKm4/d/J+SsJPBrTV0bPQiS5Ec1qAzo1wbBNlltnxKjj+NUbuaL/Vsy;24:BvjlBnVBAyzNVfdt4LEruTCLdkY41Qpnv7MQw221Mz1lvJd510RcgnPHhnYk2hqrXWU06nz77zAH6+CnK/g3iI/0gmhZALz/A/gJTrpkrcE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AT5PR84MB0066;7:ymOVWdtenw+/J+PFGOyHR2ZGoELr6jL32nZxUAhbZz58Sp/d1kA5BvRAP22GBWaus8umRtLXWPLw2LSMnpMHVUYAcJVJJgIri8s2adPw54208ntSVaga4Da+xNo0Gef0VfJuBu8tfXpL1vB0EpDxpeAhVUdf4SsR0KTfA3pdGOhYjvi6Llt4aNdsy9hrrI8WX9oVnY2tWCjGkXIHs/t2Y2adJ1G3CSclmVWXhnmEERIz1z4l+rM3lDxhkbbcFfbxc+R2SzWp9FyUcjSbI2PJiCNls2UBBT7nhTwnOiwL1at74GD08/ew8JR3AnGoN9p33j0SE5dU17eFSTtnouy/SSqRJdzjjs3U88fi/arlLGTQcP8YkyN4sTWzVAbBTq9pJJY4VjBBSGO42MJtiH3xfdw9ujAPc8vHnqsxneDpsAVKydhvKmc/+pWG0M29++Pt/YZNwbqQk0M+6+Z1df21wyVRbjHyI9ebb2bTO/3oyPdXVxoIsRr/O2wnQFTCuzgd4tlnRlB0jBtNCZei1A9MLwOFpnisHSwc04VdhDLeZPBQrnXiHLCIjx6hXWFRDdl6B96CJTuRNs/J9cUVgiX2wSPknxMjcUu3J6gZKLtv5v13I/K+t21Om+2enwHpF6bHt/i+GIyG5CgnN2/Gi6NWV6MkZPyCrjYubp9wqd6TTuJwQ2Vw8B0ylT7emMsiMG/6VteKZflv5ASaTjub5ttquf7kCOn56227KkobkRkju0LAhwQXJ3ANaI5o+kVjdTP/b3wNvxnMTIRtldyBM5a1NQ3FqKz9nJ+TUwzsSCP0rIM= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2017 19:20:29.2693 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AT5PR84MB0066 X-OriginatorOrg: hpe.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 12154 Lines: 329 On 06/29/2017 01:54 PM, Dan Williams wrote: > Allow volatile nfit ranges to participate in all the same infrastructure > provided for persistent memory regions. This seems to be a bit more than "other rework". > A resulting resulting namespace > device will still be called "pmem", but the parent region type will be > "nd_volatile". What does this look like to a user or admin? How does someone know that /dev/pmemX is persistent memory and /dev/pmemY isn't? Someone shouldn't have to weed through /sys or ndctl some other interface to figure that out in the future if they don't have to do that today. We have different names for BTT namespaces. Is there a different name for volatile ranges? -- ljk > This is in preparation for disabling the dax ->flush() > operation in the pmem driver when it is hosted on a volatile range. > > Cc: Jan Kara > Cc: Jeff Moyer > Cc: Christoph Hellwig > Cc: Matthew Wilcox > Cc: Ross Zwisler > Signed-off-by: Dan Williams > --- > drivers/acpi/nfit/core.c | 9 ++++++++- > drivers/nvdimm/bus.c | 8 ++++---- > drivers/nvdimm/core.c | 2 +- > drivers/nvdimm/dax_devs.c | 2 +- > drivers/nvdimm/dimm_devs.c | 2 +- > drivers/nvdimm/namespace_devs.c | 8 ++++---- > drivers/nvdimm/nd-core.h | 9 +++++++++ > drivers/nvdimm/pfn_devs.c | 4 ++-- > drivers/nvdimm/region_devs.c | 27 ++++++++++++++------------- > 9 files changed, 44 insertions(+), 27 deletions(-) > > diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c > index ac2436538b7e..60d1ca149cc1 100644 > --- a/drivers/acpi/nfit/core.c > +++ b/drivers/acpi/nfit/core.c > @@ -2227,6 +2227,13 @@ static bool nfit_spa_is_virtual(struct acpi_nfit_system_address *spa) > nfit_spa_type(spa) == NFIT_SPA_PCD); > } > > +static bool nfit_spa_is_volatile(struct acpi_nfit_system_address *spa) > +{ > + return (nfit_spa_type(spa) == NFIT_SPA_VDISK || > + nfit_spa_type(spa) == NFIT_SPA_VCD || > + nfit_spa_type(spa) == NFIT_SPA_VOLATILE); > +} > + > static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc, > struct nfit_spa *nfit_spa) > { > @@ -2301,7 +2308,7 @@ static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc, > ndr_desc); > if (!nfit_spa->nd_region) > rc = -ENOMEM; > - } else if (nfit_spa_type(spa) == NFIT_SPA_VOLATILE) { > + } else if (nfit_spa_is_volatile(spa)) { > nfit_spa->nd_region = nvdimm_volatile_region_create(nvdimm_bus, > ndr_desc); > if (!nfit_spa->nd_region) > diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c > index e9361bffe5ee..4cfba534814b 100644 > --- a/drivers/nvdimm/bus.c > +++ b/drivers/nvdimm/bus.c > @@ -38,13 +38,13 @@ static int to_nd_device_type(struct device *dev) > { > if (is_nvdimm(dev)) > return ND_DEVICE_DIMM; > - else if (is_nd_pmem(dev)) > + else if (is_memory(dev)) > return ND_DEVICE_REGION_PMEM; > else if (is_nd_blk(dev)) > return ND_DEVICE_REGION_BLK; > else if (is_nd_dax(dev)) > return ND_DEVICE_DAX_PMEM; > - else if (is_nd_pmem(dev->parent) || is_nd_blk(dev->parent)) > + else if (is_nd_region(dev->parent)) > return nd_region_to_nstype(to_nd_region(dev->parent)); > > return 0; > @@ -56,7 +56,7 @@ static int nvdimm_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > * Ensure that region devices always have their numa node set as > * early as possible. > */ > - if (is_nd_pmem(dev) || is_nd_blk(dev)) > + if (is_nd_region(dev)) > set_dev_node(dev, to_nd_region(dev)->numa_node); > return add_uevent_var(env, "MODALIAS=" ND_DEVICE_MODALIAS_FMT, > to_nd_device_type(dev)); > @@ -65,7 +65,7 @@ static int nvdimm_bus_uevent(struct device *dev, struct kobj_uevent_env *env) > static struct module *to_bus_provider(struct device *dev) > { > /* pin bus providers while regions are enabled */ > - if (is_nd_pmem(dev) || is_nd_blk(dev)) { > + if (is_nd_region(dev)) { > struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev); > > return nvdimm_bus->nd_desc->module; > diff --git a/drivers/nvdimm/core.c b/drivers/nvdimm/core.c > index 2dee908e4bae..22e3ef463401 100644 > --- a/drivers/nvdimm/core.c > +++ b/drivers/nvdimm/core.c > @@ -504,7 +504,7 @@ void nvdimm_badblocks_populate(struct nd_region *nd_region, > struct nvdimm_bus *nvdimm_bus; > struct list_head *poison_list; > > - if (!is_nd_pmem(&nd_region->dev)) { > + if (!is_memory(&nd_region->dev)) { > dev_WARN_ONCE(&nd_region->dev, 1, > "%s only valid for pmem regions\n", __func__); > return; > diff --git a/drivers/nvdimm/dax_devs.c b/drivers/nvdimm/dax_devs.c > index c1b6556aea6e..a304983ac417 100644 > --- a/drivers/nvdimm/dax_devs.c > +++ b/drivers/nvdimm/dax_devs.c > @@ -89,7 +89,7 @@ struct device *nd_dax_create(struct nd_region *nd_region) > struct device *dev = NULL; > struct nd_dax *nd_dax; > > - if (!is_nd_pmem(&nd_region->dev)) > + if (!is_memory(&nd_region->dev)) > return NULL; > > nd_dax = nd_dax_alloc(nd_region); > diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c > index 6a1e7a3c0c17..f0d1b7e5de01 100644 > --- a/drivers/nvdimm/dimm_devs.c > +++ b/drivers/nvdimm/dimm_devs.c > @@ -419,7 +419,7 @@ int alias_dpa_busy(struct device *dev, void *data) > struct resource *res; > int i; > > - if (!is_nd_pmem(dev)) > + if (!is_memory(dev)) > return 0; > > nd_region = to_nd_region(dev); > diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c > index 4e9261ef8a95..57724da484d0 100644 > --- a/drivers/nvdimm/namespace_devs.c > +++ b/drivers/nvdimm/namespace_devs.c > @@ -112,7 +112,7 @@ static int is_uuid_busy(struct device *dev, void *data) > > static int is_namespace_uuid_busy(struct device *dev, void *data) > { > - if (is_nd_pmem(dev) || is_nd_blk(dev)) > + if (is_nd_region(dev)) > return device_for_each_child(dev, data, is_uuid_busy); > return 0; > } > @@ -783,7 +783,7 @@ static int __reserve_free_pmem(struct device *dev, void *data) > struct nd_label_id label_id; > int i; > > - if (!is_nd_pmem(dev)) > + if (!is_memory(dev)) > return 0; > > nd_region = to_nd_region(dev); > @@ -1872,7 +1872,7 @@ static struct device *nd_namespace_pmem_create(struct nd_region *nd_region) > struct resource *res; > struct device *dev; > > - if (!is_nd_pmem(&nd_region->dev)) > + if (!is_memory(&nd_region->dev)) > return NULL; > > nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); > @@ -2152,7 +2152,7 @@ static struct device **scan_labels(struct nd_region *nd_region) > } > dev->parent = &nd_region->dev; > devs[count++] = dev; > - } else if (is_nd_pmem(&nd_region->dev)) { > + } else if (is_memory(&nd_region->dev)) { > /* clean unselected labels */ > for (i = 0; i < nd_region->ndr_mappings; i++) { > struct list_head *l, *e; > diff --git a/drivers/nvdimm/nd-core.h b/drivers/nvdimm/nd-core.h > index 4c4bd209e725..86bc19ae30da 100644 > --- a/drivers/nvdimm/nd-core.h > +++ b/drivers/nvdimm/nd-core.h > @@ -64,7 +64,16 @@ struct blk_alloc_info { > > bool is_nvdimm(struct device *dev); > bool is_nd_pmem(struct device *dev); > +bool is_nd_volatile(struct device *dev); > bool is_nd_blk(struct device *dev); > +static inline bool is_nd_region(struct device *dev) > +{ > + return is_nd_pmem(dev) || is_nd_blk(dev) || is_nd_volatile(dev); > +} > +static inline bool is_memory(struct device *dev) > +{ > + return is_nd_pmem(dev) || is_nd_volatile(dev); > +} > struct nvdimm_bus *walk_to_nvdimm_bus(struct device *nd_dev); > int __init nvdimm_bus_init(void); > void nvdimm_bus_exit(void); > diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c > index a6c403600d19..5929eb65cee3 100644 > --- a/drivers/nvdimm/pfn_devs.c > +++ b/drivers/nvdimm/pfn_devs.c > @@ -331,7 +331,7 @@ struct device *nd_pfn_create(struct nd_region *nd_region) > struct nd_pfn *nd_pfn; > struct device *dev; > > - if (!is_nd_pmem(&nd_region->dev)) > + if (!is_memory(&nd_region->dev)) > return NULL; > > nd_pfn = nd_pfn_alloc(nd_region); > @@ -354,7 +354,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) > if (!pfn_sb || !ndns) > return -ENODEV; > > - if (!is_nd_pmem(nd_pfn->dev.parent)) > + if (!is_memory(nd_pfn->dev.parent)) > return -ENODEV; > > if (nvdimm_read_bytes(ndns, SZ_4K, pfn_sb, sizeof(*pfn_sb), 0)) > diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c > index 41b4cdf5dea8..53a64a16aba4 100644 > --- a/drivers/nvdimm/region_devs.c > +++ b/drivers/nvdimm/region_devs.c > @@ -168,6 +168,11 @@ bool is_nd_blk(struct device *dev) > return dev ? dev->type == &nd_blk_device_type : false; > } > > +bool is_nd_volatile(struct device *dev) > +{ > + return dev ? dev->type == &nd_volatile_device_type : false; > +} > + > struct nd_region *to_nd_region(struct device *dev) > { > struct nd_region *nd_region = container_of(dev, struct nd_region, dev); > @@ -214,7 +219,7 @@ EXPORT_SYMBOL_GPL(nd_blk_region_set_provider_data); > */ > int nd_region_to_nstype(struct nd_region *nd_region) > { > - if (is_nd_pmem(&nd_region->dev)) { > + if (is_memory(&nd_region->dev)) { > u16 i, alias; > > for (i = 0, alias = 0; i < nd_region->ndr_mappings; i++) { > @@ -242,7 +247,7 @@ static ssize_t size_show(struct device *dev, > struct nd_region *nd_region = to_nd_region(dev); > unsigned long long size = 0; > > - if (is_nd_pmem(dev)) { > + if (is_memory(dev)) { > size = nd_region->ndr_size; > } else if (nd_region->ndr_mappings == 1) { > struct nd_mapping *nd_mapping = &nd_region->mapping[0]; > @@ -307,7 +312,7 @@ static ssize_t set_cookie_show(struct device *dev, > struct nd_region *nd_region = to_nd_region(dev); > struct nd_interleave_set *nd_set = nd_region->nd_set; > > - if (is_nd_pmem(dev) && nd_set) > + if (is_memory(dev) && nd_set) > /* pass, should be precluded by region_visible */; > else > return -ENXIO; > @@ -334,7 +339,7 @@ resource_size_t nd_region_available_dpa(struct nd_region *nd_region) > if (!ndd) > return 0; > > - if (is_nd_pmem(&nd_region->dev)) { > + if (is_memory(&nd_region->dev)) { > available += nd_pmem_available_dpa(nd_region, > nd_mapping, &overlap); > if (overlap > blk_max_overlap) { > @@ -520,10 +525,10 @@ static umode_t region_visible(struct kobject *kobj, struct attribute *a, int n) > struct nd_interleave_set *nd_set = nd_region->nd_set; > int type = nd_region_to_nstype(nd_region); > > - if (!is_nd_pmem(dev) && a == &dev_attr_pfn_seed.attr) > + if (!is_memory(dev) && a == &dev_attr_pfn_seed.attr) > return 0; > > - if (!is_nd_pmem(dev) && a == &dev_attr_dax_seed.attr) > + if (!is_memory(dev) && a == &dev_attr_dax_seed.attr) > return 0; > > if (!is_nd_pmem(dev) && a == &dev_attr_badblocks.attr) > @@ -551,7 +556,7 @@ static umode_t region_visible(struct kobject *kobj, struct attribute *a, int n) > || type == ND_DEVICE_NAMESPACE_BLK) > && a == &dev_attr_available_size.attr) > return a->mode; > - else if (is_nd_pmem(dev) && nd_set) > + else if (is_memory(dev) && nd_set) > return a->mode; > > return 0; > @@ -603,7 +608,7 @@ static void nd_region_notify_driver_action(struct nvdimm_bus *nvdimm_bus, > { > struct nd_region *nd_region; > > - if (!probe && (is_nd_pmem(dev) || is_nd_blk(dev))) { > + if (!probe && is_nd_region(dev)) { > int i; > > nd_region = to_nd_region(dev); > @@ -621,12 +626,8 @@ static void nd_region_notify_driver_action(struct nvdimm_bus *nvdimm_bus, > if (ndd) > atomic_dec(&nvdimm->busy); > } > - > - if (is_nd_pmem(dev)) > - return; > } > - if (dev->parent && (is_nd_blk(dev->parent) || is_nd_pmem(dev->parent)) > - && probe) { > + if (dev->parent && is_nd_region(dev->parent) && probe) { > nd_region = to_nd_region(dev->parent); > nvdimm_bus_lock(dev); > if (nd_region->ns_seed == dev) > > _______________________________________________ > Linux-nvdimm mailing list > Linux-nvdimm@lists.01.org > https://lists.01.org/mailman/listinfo/linux-nvdimm >