From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752635AbdFPSw1 (ORCPT ); Fri, 16 Jun 2017 14:52:27 -0400 Received: from mail-bl2nam02on0074.outbound.protection.outlook.com ([104.47.38.74]:46338 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752087AbdFPSwS (ORCPT ); Fri, 16 Jun 2017 14:52:18 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Tom Lendacky Subject: [PATCH v7 12/36] x86/mm: Extend early_memremap() support with additional attrs To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, xen-devel@lists.xen.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Brijesh Singh , Toshimitsu Kani , Radim =?utf-8?b?S3LEjW3DocWZ?= , Matt Fleming , Alexander Potapenko , "H. Peter Anvin" , Larry Woodman , Jonathan Corbet , Joerg Roedel , "Michael S. Tsirkin" , Ingo Molnar , Andrey Ryabinin , Dave Young , Rik van Riel , Arnd Bergmann , Konrad Rzeszutek Wilk , Borislav Petkov , Andy Lutomirski , Boris Ostrovsky , Dmitry Vyukov , Juergen Gross , Thomas Gleixner , Paolo Bonzini Date: Fri, 16 Jun 2017 13:52:08 -0500 Message-ID: <20170616185208.18967.72141.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> References: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR04CA0060.namprd04.prod.outlook.com (10.174.93.177) To CY4PR12MB1141.namprd12.prod.outlook.com (10.168.163.149) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PR12MB1141: X-MS-Office365-Filtering-Correlation-Id: 764815ef-f74c-4521-c16e-08d4b4e8ce76 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;3:5MoVfHqF28IG04XcVFUslmGYlKs2NBbPJ92siDs3nkAZQcKZJ7NhtNAmu5/CISkCxA9yuzIoFSMCQZGZumYAAGIDC3VeE1DgkI7U4DyBwzrC/FRFAaPMZYU9SSXgqPegV6CUtgRAv8cixiDfLBAYAj2ZB8dd42RYoDo1EC+T7NDKdTklgccz9NKgrXjW2qgX068HNmceAl725DEtIAX2iu60Ve8VYbDJVBnYoQbpCIAxq/pYpIDazpGc/eqvqXQ54XhScAHGp7eHyh7GIibFaeIhwYNlpWASFrP6QcbsR8OZbCv1cVj/pNy6CLQsitjreM/Il4GiAxK8ANrivcivgemks6oJoyrkav9A0vKkDL4=;25:9ho7wkDih00mXo+p8KYm5bg69ZzMjC3et/a7A7T5bwokrKSvBi8Bcxtc45ztAltg7WGfhyAXQ75H7CNR1x1CtDv9WyecObVbAVPlKrM4XrJaJdvFGMoQJ/UHzzMSH0MAS/GqbvH2IbITazVrasLOVVhtUDS7HLXqwXTc+JiLI4iSiFjZDqv2dlDW280EDDOqs9S037lKFzaFDobpttWQKPdbXDr6q+KHx+0xdX+bL1kAzZV8iWxzVrzjJtqX17G7wO04k4Mcxk7JN/YzrLziv41CInjfJEF42MQeVfeaWM78Bg789OgtdXGuWsGN7kRO7UMgo0hsS1zFT8Xdxtdl3dulDck1Vw0j1pM/lFdwPfaGvlJjbdxK9ijcR1JJBhxM4tUI85J1fvL554EoXAuXzfr2KdfzE1nM4c7ba+gYF4vTaJZLfG+VQLTIxXuLtfMkLKpsZE181LE7FU72n0wsybsWe43beb05OPuh8uVVzgk= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;31:m4hDiXVnq/VRA+keqR/BogL9AthFlQJVkxYRSI+OhtMPVXcDRhi8puOQLW1qSCsSoCHWwsb/0b8UGa0/iSqPxnbyYKnZFxAb2xat9mekYfFZjRGvn5ycUr5u45FfpYA47Fs2GPEL0w2GGIHz5ZqbekRr3owSW9B07qVaNMLLAYxC6iJfE8zcvj7zMEfptcMRGJkkcn20FDl583X7p+xfi1BnfM+rdSaqS20EX0XBSfc=;20:jMzQ60XR7H8WjNbQDFecdtNuV8y829sa9pokt5PkX5Yyn4jZOLX5TqKxL4JEC5/o+LnqsGql3XkMxlwxwCj+efveA8lbO929O/xDxaamUhlijDpvHSi028JEbkRMC11hQwghUNsL7NAky8IAU68XRUhQhoTsUqiWhYzjcqRTIDi0wi0WOTn456figyB01IY0pQ9g7iORCDj0z6xjQ5UlaZBb05002AU7J0oW4wCqknjU/JGGg1T/8qqFcnxuIRn7sxL9UAE5CuL8A5MwXUDZsQfQABKSIBPOogmGUwRjJTLRJHqogEhkiHMrrdRr/IhjIKreBI4aVwSEYyovNgGxyfqIw4rNb0sCwrn/P1FmUPR1zyaEnMeb92r6gR5uqfFaByfwMXHudJH8ZfxU2E1mF0vPaScfRTfj87BZdH05eAVVmw9qq1LcG7a2JOf5DWU0OnrTWqnpw4P6BoMRNw8aWUqCC/z+z9xajJV955FJm72Mg4lbMw1RAa8BjIVU8rF/ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR12MB1141;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzQ6RXYvWEh5dlU2ck9DcER4cEl5ek4wREI2aDlw?= =?utf-8?B?WkhKaEZ3YWNqUS92R0VnMyszakJnNENKN1AyT2ZET3VvUk5ra3NjOHZPNGF2?= =?utf-8?B?UExXQ3BPQkgxVUZFbjVYUmtSL2RoVU81QXk0eXNNekpTcHlLU0NGNzVFdUNO?= =?utf-8?B?VDMwaEhaN2p1YkRaWnRreUpzZ1I2OUtyRUJCNDF6UEkxYUxZd0xCWXY5aHpv?= =?utf-8?B?VVRoYUwreWRpZTNXMUs2bmo2aFlSL1Bza2lHNG1CMDVEVVdTbHN2eHoycGVD?= =?utf-8?B?K2hDYlRtS2VJOWsxaUZ3b09VN2d4ZlNhYk8vV3RvVHI4dVZzUEl4bjNaSmRE?= =?utf-8?B?ZU5nNjMwNDI1WW04Rzd2c1E5S0ptOUhLR3FqcmU1ZWJZeUUrRGpQVThMY0Zo?= =?utf-8?B?Y3l1NTVOemF4WE9lK0kyOGd5a0JoeXg5MnFWUVVxTmlWWi92ZUtoc3ZWc3lM?= =?utf-8?B?cDU3emw1amVqWVQ5NFdpZkx6T0thaDhyMFd2NUJBVjUrMnVqaFQ2eklUa01X?= =?utf-8?B?Mm5LaEJ0MFllaHhmOVVqV2cwVkNqLzBldG5lQ0Fob0pqaHJqSi8rNTVyY3ZE?= =?utf-8?B?UHVBcHN0NHV6QmhucmhXZ2M5YlVxNkh0aGhuTmczdittOFlmb3p6QVJURWR5?= =?utf-8?B?bEQ2cEtDZFpXMXlBSFcyOStoNjdranJQdFRWa2orbGN3K0FiN3VpN0tuZnhY?= =?utf-8?B?aVoweTFQVVA4L3E0MSt5SHc2Y3BTZVk0K21sTWljSzdZS004QWxkZkNBTnVQ?= =?utf-8?B?TENEVVlZVGEyaVpZTy8rajhYOHRmVDM1eDlIUGRiTkJWR1V3UCt5TWhlTzZx?= =?utf-8?B?Z2lBa0ZwbGZpOGsyQnd0cmsxUCs3ZVRZMjVISm1qOFNsSTQ0aHlLY2pic3JP?= =?utf-8?B?V0pZOEhiSUthdUphQnVERmREUXlwMlNsVXQ2L1pRckFXcVQzS2xmcWplZXNH?= =?utf-8?B?WlVaSnc5bnd4aThLQnYyMDlSU0RtQW1rMzcxWGJwbFpsT3ZxanFkeElUcnM3?= =?utf-8?B?K2hhMzBQWXV4R2J4Z3BHZWZDUUpiM3NMUWptYkpzWHJWK2xOaWpaYzBYczlu?= =?utf-8?B?aDBxY2NlNkZ1SDFtNXR3V0lUK0ZscUlVUHk2NFpIaUc5NHF6clloSmREWmxN?= =?utf-8?B?encvd3hzcW5iQUJDWm9WRlBSMnR3bVB0ZWxNNGhrQlZ5bXF2blI1Qm5DdVll?= =?utf-8?B?M2prNmNBYnFlMGtRRlZ6OEdWQnQ2UjAwRTYxKzVoU2x4VzhMUFo3QXdNSk9a?= =?utf-8?B?Ym1xaVg1RkxpUFNyQkg1VTM4aW9KTEU0NzhJMkxKTDYvS1BmeGswY0c3NGpu?= =?utf-8?B?UFpOZFk5VGx3S3lWR0FJTTJyaTBLS204RERyRHdzME95TGkvUGlGWUF2MFJy?= =?utf-8?B?NkN5OHE2WUhucXIrbUplOWRXcU96aUJ5SlRzc3l6ZERoUzlKSStPQWQ3eU5v?= =?utf-8?B?TnUvZmIzTCtGYjJybjlCUUQyYW1Vb3JoT3B6RXpWOEdOdUxPcEZMN2dPdFFK?= =?utf-8?B?QTAwT3E5NEV1Rlo5cGFUZ0JpR214MmE5N1pwTXNrV3ZmdU9yTkhBZ2lpallq?= =?utf-8?B?QjVMQXdFMXFIZ2N2K3RSejNxMzNJYlE2Zm5TY0Myay94MnZ6SERJQ0IyTEpI?= =?utf-8?Q?BHDZH0qCdS0JdNJ+NYz?= X-Forefront-PRVS: 0340850FCD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39450400003)(39840400002)(39400400002)(39860400002)(39410400002)(39850400002)(54356999)(4001350100001)(50986999)(305945005)(86362001)(76176999)(8676002)(81166006)(6506006)(7736002)(4326008)(189998001)(83506001)(25786009)(5660300001)(1076002)(6666003)(230700001)(9686003)(3846002)(6116002)(47776003)(66066001)(2906002)(23676002)(33646002)(103116003)(2950100002)(7416002)(50466002)(54906002)(7406005)(110136004)(478600001)(38730400002)(55016002)(53416004)(72206003)(42186005)(53936002)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1141;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzIzOks0bTVDUWMrUk15cUc1ZVAyK3dBQXlneVVT?= =?utf-8?B?a1FHdjV3RDBaSC9JdDR5MDNNeThiZ3J5NTc1QmM1YUxmbHlmTGwxRk1ZR05W?= =?utf-8?B?SWpZRlh5dUNQc2crYUZkNk4vWDR4YjV4NVFnUGgvRWlXcG5BZzJpcDJOUEFQ?= =?utf-8?B?V0x0T3FQQUVWSmJjOFV3aGhmd3FWSXhpTG9CZU9TSXRhNzZ3dHl2M0pKNC8r?= =?utf-8?B?UStQa2lwMTdEVkVaVmpaVlVzTFZUakRxM3lBMW9wdWZwZHZGc1NrY2gxOHlM?= =?utf-8?B?Y3BBaUFwc1N1SjFKaDF0OHlZaGhDem5ZTG5kTnNWWUFULzdkcXY3LzN6THFp?= =?utf-8?B?TXhrZU0vZGgwanFzWkFkNzlyRWFXNlBPemZpeE1ydVhqVlY1cU91TUdlTFVo?= =?utf-8?B?U01VR3luL3habjBldm9UbmxldkdESFBiRG8zWGdmVTRKdE1CMzRDbjl2THJS?= =?utf-8?B?STZlNGVwV3lFTjJpSkFWcFRBZ1R4ZGt6MXNPZDRJQ3M5ZHhRVVl2eU56bUNq?= =?utf-8?B?TlhUY213Y1E5N21Wc3B6aWw1Z3p4SzArMUlrdjE0RWI1R0FzM081Uks2aVlV?= =?utf-8?B?R1BCR3FMVUR3S1FrTnBzZlJQYm1RcjQ1RWtrNEN5dmNZMnBuVnFIWUV1NlpE?= =?utf-8?B?SkJ6U2VCeDQ1RHdlWGI3WjRDYkYyR09rZ3phcUhRK3oyeGkzR2xrRi9Qa05J?= =?utf-8?B?YjlKZVEzaGNYcGdNZFY1eHBRR1Bybm9ONFRHUWF4VEl5Y3dWMkZYc0NmN3dz?= =?utf-8?B?cFpVOUw5MzlrdnF0LzNRVGlqeEczenU3WG5pMU5ISjBCZlRDemhEWE5pV0FN?= =?utf-8?B?dHNuNmtiYVh0bkJCODV4aHVTQ3JTV1RkQ0hFbHNaNFNzc0ZDWUx1TXZkaGNj?= =?utf-8?B?KzBObElnVkRXeGRnNFozYUtpbFk2K0k4cTVYMC9XRG05L3BNUkczTCs4dGdV?= =?utf-8?B?a2RSRmFIL1JMMHcxUVU4SG9lQ2JBaHZ1M05COXAwRFgzSGdoaEQyTlJZQ1Bz?= =?utf-8?B?djAwWnlPUTB3eWFLSWxSdXJ4OXFTRlVKY1BwYTg3Snk1alRRakFIYkNkN2ZO?= =?utf-8?B?YkNKT21lSGI2SG50RHlmdDlVSHE2T1VNSTJnSjZ4d0x5R0xzaUMvTEZPNys5?= =?utf-8?B?ZURUalBlVm5OS2RrZGowVkJDOXZuYlpCT3gyTCtFYkdpeTFTbktoMndqSU1k?= =?utf-8?B?YklHeUZZa0VXc2ZKUnlyQW11RXBXbURKa3hFVlFjanJZMkVGd1BlQkFUODNH?= =?utf-8?B?TnhlQ3NyRzZjMkFJcWpqSy9LUE5NNGdUL2lmUFZiRGxsU2NaQWR6R3I5ZWpW?= =?utf-8?B?RXZQQUZ4alIyZnlpWXppUzZrL1l6b0JNU3pZcnkvdmVOZU9UOXIzMFpFcGly?= =?utf-8?B?WlZoeHlvMEdHODdWUUxtZVl6U1dkWDFJa0V6cndTUWRTMzdhMmVxQlJhRHU3?= =?utf-8?B?c011NHg2emdQUC94Y0RxRVJZN3c2eWE5bWJDSHBGcHhuK2lTUmxBMXpzVS9j?= =?utf-8?B?OVdKSi9qTlRpUDB3RERpNWF1QkJ2VHhZS0ZZUkprVm5hZjhFTXlheVhEK3dM?= =?utf-8?B?NnY3THRvVE5jV0Q0K29DL0tja3JIbDVhd3pKUVJ0NjZWWVVjNzgvK0d1a1RX?= =?utf-8?B?WWZRclRScG8rcWtrQlU0b3FvL1dBYzJFU3J1YUpYbTF3Y1NJTmJxZWJRPT0=?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzY6RU8wNUh0WTZiR2xjQnY3USttbk9ub3FOeFJz?= =?utf-8?B?VG51KzNlZVphbmtjVStOSVkzbW44NG5nZmpYV2h4NFdNY2ZGanFxZGVYTmxI?= =?utf-8?B?emN2MnJpWS80ZVJaTUVxelJwdjB5TGVBWTB6WUZpeU4zRTBSSFVtMG1yVmFp?= =?utf-8?B?T2pPNmlneWtld2NVSTJMYjg1dXhWSmxZMWdLODh3YjgvUTI2SE5HMkhqdGZM?= =?utf-8?B?WlI3eTVOTnoxN2Q1clFZRE45VDl4M3pBY0pVZlVtMThnVTAvcHFxR1Q0VWpi?= =?utf-8?B?NUxpZHdmcGtLdDVPbHpVQkd6WnFDOU5GTFNVVkVSMGlIZjVPVG1CR01neW5q?= =?utf-8?B?ZEt3cmZzT3ZQRDNYclh6Z3kxVWU2b1pEUWRwUVlhWHZuSm1LWmZVanE0QnlN?= =?utf-8?B?NkZLOCtNdzJ5cVBzT2dreXpmdFc1WXFvVW9GYllnZXhuN2tPVDBrd25LL0t0?= =?utf-8?B?Umh6ck5tTFNtSzFNblBadmpMbWNIV3gzVC81WWpFM2kzMGx0ZVlNc1Voem1J?= =?utf-8?B?OGQzZUtpVWhnSWJQTUhYRXhhRis3a0wxaUs3dGZqRmZaZks0TVovOFpsTTVu?= =?utf-8?B?MWF0SVExNThJK2N4WXl2aFVEN0tkNXFST21iKzNQNzM3eXQyKzlsZGt0U0t4?= =?utf-8?B?S21GWnNNbFhrdEVzdkRDWTkxR3pHYnRoaE5wbEc3TTB3dllWb0dqdjc4MS9t?= =?utf-8?B?Mkg1Sk1YT0svOEVyUnRTb011dVdra1Zza1dHRXpYWUQrb2ZSWXdEdUNFa1pJ?= =?utf-8?B?WnpxOGVsbGhqZGdYWnRaWmVieTFRQjNIOXlRNXdSRmJrNU9zRHhGeElxSHQz?= =?utf-8?B?T2gzQkZpMlcxRWNhRTQ5elpuOTZ4K09xWCtaUlloSm1Nam1VM21qU1BLSGlq?= =?utf-8?B?SFFRdUU3MlBUZ0MxdlNLKzAzdTBIZDdlRFdIQzFyN1lIcFFTekJWYjFwUjhi?= =?utf-8?B?d3c5bmtieVZMT01vRWhvZzNSVDdHbDBGcDhqZmFBek5WMGt4ay9OamlQQzNZ?= =?utf-8?B?ZU16dzBYTnhMaHJVM3BXdmhvV0dUaklBZDBjaGR0TWVDSHVVODJXSGNBT2hI?= =?utf-8?B?cmxhRnY4bERMTHJqV3NjNGZHNVhTM3d2cElma0hsSU5NZll4dTcxbXZBVFdW?= =?utf-8?B?c3ZsVkJLNVllVk1sNkNyQnFMeGVnb2FSMm5pZlUrOEdNUVdFOVpGaUdVeEtp?= =?utf-8?B?UFJrR1hOcy82dmRNa3pjcDdrVTVYSFlQa0RpOTNRSytvM28wdm04WFpvQ2d4?= =?utf-8?B?OHhNR0k0SGpVSW9NRlo0YXpBRDJhVzA1UEpTaGZoU0hNbmd0YXIySGg5LzZi?= =?utf-8?B?RXdhZWNmSFBhNVVlYmRMSTRCSE10bTlVRXlRM1JhOHAxcUg3UUxGUFFYeU51?= =?utf-8?Q?FGpT4TJ?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;5:R32jsYKI4/9/RZA22KTsW6k9ph0iGGr7eX9d0/2qyrutMFwtjBRTvPkVR2ZpauJ/oS2mhl/B66Ud2q38Ei7iLJaUUm4pyKW7uF7AB7U6pq0dwMXjWvPWkkzo3mPzWo2AJpcm/Fx1q010QZJPC6XHSdv7K7y5vPpy9SHUkQBrnQJ6Y+KKfKoBDiPMbKMkYB0lTVBud7gbUMeAO/vk54nkq94cg+UgrHSIpDhsYbP77YeV9QV6pwNSAVwLTyfiXpGaEMqr0esX0wnxUUbl47dEBOxYXPmGkFinVcXQyskah4T5ZXjl0KFZf4uaTBLOsW/zs42CXuFjeW698UH4HDzinkW6CNxO+HD17F4F+OKONl78Xyf0/TSBXho3Tr7gHC03YV8ypLrGI/SC7UcwDbx7VxCLEKx2dGY7TsTeCeysqdyOYCWOeV56m5zpJaqnWsavs0+gAryzkeVvHVZXRcUMiwY6rFWOLBFo3E0AaGhSyOz0nXRzGcY/j4ahPJDAJkHy;24:QcpRdsjYGm0rQ3ASofelUTLnFp5VMYV7nZ0PAKtCc+zzTcNJwLV8F4xCZaYNRZH1haDtnsrHoECVHMlg3sfiaQIG2zqYp0R08ttc6xSCT3E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;7:Sqmegvrk2oaOaDxI71KFqotcYht4d23goAsUUeBNVcuGDkc+e2VYqjGGVisBuKSBDJHJfdezM3VN1yaJR0qeCIMXmAJV7n8Us7Jx1XMdUEghAVsT9BCzK+qdy17uYiJ9N4EZis1511dhyZbsTru5B8dVlfCVK1pzWkwQAeTT5X1auFOWsKdruNETHEw6AnO7py0f0hDlyu9S5gQ6dtP9WUYNG2vi8wkcRE99CP2UdJ76veyZVAixSuxeCL9me54EAImL6DQ+PG8azOxdz3RYW8MtoazDNSpvxg1bAd5lNEM4VhjvKPegr3PSYQAS5I3eBHTY/y0Bg3ROOT9rb+nl5i426ZMFzl6hrgmqCY8sCFtyjieOsGE9bt0yRhnU0+SH9lkPd5Yv5qyPa0YIp2J9Uk6RYsxoMZBGzwF+Pph9B+xMuUQ7zwIkRtOSMTFPMu9RCDlFfkOBZcC87sr61FY8M5rhRZCrk/jCOoNAEggLNmUnqZHD479KDGFZIQIvgnVyGa3+gTBmhTPQA9rsWrdP2o1IjWeDBbFc8Ajl8FOzTsrIaY1X1DUt/2Fm7tUepgkkSVV6rDlkzQXW1t1B3xLwAQiNgB02YtbNXfpvIVbYvIumHJ1yy3gCQ4u5fX7JpeR/fas0F6qxZOLxda0TScwEy+QAX2D/s53jvT4ny90lcT0PCcL3yOdkyG/axk/WaySHhGoL3nzkKqi/HrPIzcpvT6M9qWF7nM1Mv7Ba+yrU+jw1jgTT9uBb4lKJNpQpQIkFVJSNlSXn5Uq3oid857bIDKIqhdWQcg8gIQTohXz5AXg= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;20:jRCigXllqmr3wMozaizcsxspZTirO/K0FWHXt4MOE/BUtqVAS2dwxSLKOwM96Lf0Ge7h4vzPeDMl+sLH6QkfRIhC+LwOPa6V4/t9ZdtDlnYDkgEB3tHaR2FFrAqOcvhMlVpQKfP64tvfjIpfPl5Z0dxp2xYMgEnlWLMhmW68Ofu89Nhtlq2NGJ3dO+xnRbvBd6RSMcZaB1Y9a8e1xyDe7qcx1KxalK6nszleznsEklUyu3fEg9QAsrm+tB984RLP X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2017 18:52:11.8213 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1141 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add early_memremap() support to be able to specify encrypted and decrypted mappings with and without write-protection. The use of write-protection is necessary when encrypting data "in place". The write-protect attribute is considered cacheable for loads, but not stores. This implies that the hardware will never give the core a dirty line with this memtype. Reviewed-by: Borislav Petkov Signed-off-by: Tom Lendacky --- arch/x86/Kconfig | 4 +++ arch/x86/include/asm/fixmap.h | 13 ++++++++++ arch/x86/include/asm/pgtable_types.h | 8 ++++++ arch/x86/mm/ioremap.c | 44 ++++++++++++++++++++++++++++++++++ include/asm-generic/early_ioremap.h | 2 ++ mm/early_ioremap.c | 10 ++++++++ 6 files changed, 81 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index cf74791..0b09b88 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1433,6 +1433,10 @@ config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT If set to N, then the encryption of system memory can be activated with the mem_encrypt=on command line option. +config ARCH_USE_MEMREMAP_PROT + def_bool y + depends on AMD_MEM_ENCRYPT + # Common NUMA Features config NUMA bool "Numa Memory Allocation and Scheduler Support" diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index d9ff226..dcd9fb5 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -164,6 +164,19 @@ static inline void __set_fixmap(enum fixed_addresses idx, */ #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_IO_NOCACHE +/* + * Early memremap routines used for in-place encryption. The mappings created + * by these routines are intended to be used as temporary mappings. + */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size); + #include #define __late_set_fixmap(idx, phys, flags) __set_fixmap(idx, phys, flags) diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h index de32ca3..32095af 100644 --- a/arch/x86/include/asm/pgtable_types.h +++ b/arch/x86/include/asm/pgtable_types.h @@ -161,6 +161,7 @@ enum page_cache_mode { #define _PAGE_CACHE_MASK (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT) #define _PAGE_NOCACHE (cachemode2protval(_PAGE_CACHE_MODE_UC)) +#define _PAGE_CACHE_WP (cachemode2protval(_PAGE_CACHE_MODE_WP)) #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \ @@ -189,6 +190,7 @@ enum page_cache_mode { #define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) +#define __PAGE_KERNEL_WP (__PAGE_KERNEL | _PAGE_CACHE_WP) #define __PAGE_KERNEL_IO (__PAGE_KERNEL) #define __PAGE_KERNEL_IO_NOCACHE (__PAGE_KERNEL_NOCACHE) @@ -202,6 +204,12 @@ enum page_cache_mode { #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \ _PAGE_DIRTY | _PAGE_ENC) +#define __PAGE_KERNEL_ENC (__PAGE_KERNEL | _PAGE_ENC) +#define __PAGE_KERNEL_ENC_WP (__PAGE_KERNEL_WP | _PAGE_ENC) + +#define __PAGE_KERNEL_NOENC (__PAGE_KERNEL) +#define __PAGE_KERNEL_NOENC_WP (__PAGE_KERNEL_WP) + #define PAGE_KERNEL __pgprot(__PAGE_KERNEL | _PAGE_ENC) #define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO | _PAGE_ENC) #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC | _PAGE_ENC) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index a382ba9..4feda83 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -422,6 +422,50 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK)); } +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +/* Remap memory with encryption */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC); +} + +/* + * Remap memory with encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC_WP); +} + +/* Remap memory without encryption */ +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC); +} + +/* + * Remap memory without encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC_WP); +} +#endif /* CONFIG_ARCH_USE_MEMREMAP_PROT */ + static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss; static inline pmd_t * __init early_ioremap_pmd(unsigned long addr) diff --git a/include/asm-generic/early_ioremap.h b/include/asm-generic/early_ioremap.h index 734ad4d..2edef8d 100644 --- a/include/asm-generic/early_ioremap.h +++ b/include/asm-generic/early_ioremap.h @@ -13,6 +13,8 @@ extern void *early_memremap(resource_size_t phys_addr, unsigned long size); extern void *early_memremap_ro(resource_size_t phys_addr, unsigned long size); +extern void *early_memremap_prot(resource_size_t phys_addr, + unsigned long size, unsigned long prot_val); extern void early_iounmap(void __iomem *addr, unsigned long size); extern void early_memunmap(void *addr, unsigned long size); diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c index 6d5717b..d7d30da 100644 --- a/mm/early_ioremap.c +++ b/mm/early_ioremap.c @@ -226,6 +226,16 @@ void __init early_iounmap(void __iomem *addr, unsigned long size) } #endif +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +void __init * +early_memremap_prot(resource_size_t phys_addr, unsigned long size, + unsigned long prot_val) +{ + return (__force void *)__early_ioremap(phys_addr, size, + __pgprot(prot_val)); +} +#endif + #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT) void __init copy_from_early_mem(void *dest, phys_addr_t src, unsigned long size) From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: [PATCH v7 12/36] x86/mm: Extend early_memremap() support with additional attrs Date: Fri, 16 Jun 2017 13:52:08 -0500 Message-ID: <20170616185208.18967.72141.stgit@tlendack-t1.amdoffice.net> References: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> Sender: owner-linux-mm@kvack.org To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, xen-devel@lists.xen.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Brijesh Singh , Toshimitsu Kani , Radim =?utf-8?b?S3LEjW3DocWZ?= , Matt Fleming , Alexander Potapenko , "H. Peter Anvin" , Larry Woodman , Jonathan Corbet , Joerg Roedel , "Michael S. Tsirkin" , Ingo Molnar , Andrey Ryabinin , Dave Young , Rik van Riel , Arnd Bergmann , Konrad Rzeszutek Wilk , Borislav Petkov , Andy Lutomirski , Boris Ostrovsky , Dmitry Vyukov , Juergen Gross , Thomas Gleixner , Paolo Bonzini List-Id: linux-efi@vger.kernel.org Add early_memremap() support to be able to specify encrypted and decrypted mappings with and without write-protection. The use of write-protection is necessary when encrypting data "in place". The write-protect attribute is considered cacheable for loads, but not stores. This implies that the hardware will never give the core a dirty line with this memtype. Reviewed-by: Borislav Petkov Signed-off-by: Tom Lendacky --- arch/x86/Kconfig | 4 +++ arch/x86/include/asm/fixmap.h | 13 ++++++++++ arch/x86/include/asm/pgtable_types.h | 8 ++++++ arch/x86/mm/ioremap.c | 44 ++++++++++++++++++++++++++++++++++ include/asm-generic/early_ioremap.h | 2 ++ mm/early_ioremap.c | 10 ++++++++ 6 files changed, 81 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index cf74791..0b09b88 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1433,6 +1433,10 @@ config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT If set to N, then the encryption of system memory can be activated with the mem_encrypt=on command line option. +config ARCH_USE_MEMREMAP_PROT + def_bool y + depends on AMD_MEM_ENCRYPT + # Common NUMA Features config NUMA bool "Numa Memory Allocation and Scheduler Support" diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index d9ff226..dcd9fb5 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -164,6 +164,19 @@ static inline void __set_fixmap(enum fixed_addresses idx, */ #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_IO_NOCACHE +/* + * Early memremap routines used for in-place encryption. The mappings created + * by these routines are intended to be used as temporary mappings. + */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size); + #include #define __late_set_fixmap(idx, phys, flags) __set_fixmap(idx, phys, flags) diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h index de32ca3..32095af 100644 --- a/arch/x86/include/asm/pgtable_types.h +++ b/arch/x86/include/asm/pgtable_types.h @@ -161,6 +161,7 @@ enum page_cache_mode { #define _PAGE_CACHE_MASK (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT) #define _PAGE_NOCACHE (cachemode2protval(_PAGE_CACHE_MODE_UC)) +#define _PAGE_CACHE_WP (cachemode2protval(_PAGE_CACHE_MODE_WP)) #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \ @@ -189,6 +190,7 @@ enum page_cache_mode { #define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) +#define __PAGE_KERNEL_WP (__PAGE_KERNEL | _PAGE_CACHE_WP) #define __PAGE_KERNEL_IO (__PAGE_KERNEL) #define __PAGE_KERNEL_IO_NOCACHE (__PAGE_KERNEL_NOCACHE) @@ -202,6 +204,12 @@ enum page_cache_mode { #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \ _PAGE_DIRTY | _PAGE_ENC) +#define __PAGE_KERNEL_ENC (__PAGE_KERNEL | _PAGE_ENC) +#define __PAGE_KERNEL_ENC_WP (__PAGE_KERNEL_WP | _PAGE_ENC) + +#define __PAGE_KERNEL_NOENC (__PAGE_KERNEL) +#define __PAGE_KERNEL_NOENC_WP (__PAGE_KERNEL_WP) + #define PAGE_KERNEL __pgprot(__PAGE_KERNEL | _PAGE_ENC) #define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO | _PAGE_ENC) #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC | _PAGE_ENC) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index a382ba9..4feda83 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -422,6 +422,50 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK)); } +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +/* Remap memory with encryption */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC); +} + +/* + * Remap memory with encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC_WP); +} + +/* Remap memory without encryption */ +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC); +} + +/* + * Remap memory without encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC_WP); +} +#endif /* CONFIG_ARCH_USE_MEMREMAP_PROT */ + static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss; static inline pmd_t * __init early_ioremap_pmd(unsigned long addr) diff --git a/include/asm-generic/early_ioremap.h b/include/asm-generic/early_ioremap.h index 734ad4d..2edef8d 100644 --- a/include/asm-generic/early_ioremap.h +++ b/include/asm-generic/early_ioremap.h @@ -13,6 +13,8 @@ extern void *early_memremap(resource_size_t phys_addr, unsigned long size); extern void *early_memremap_ro(resource_size_t phys_addr, unsigned long size); +extern void *early_memremap_prot(resource_size_t phys_addr, + unsigned long size, unsigned long prot_val); extern void early_iounmap(void __iomem *addr, unsigned long size); extern void early_memunmap(void *addr, unsigned long size); diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c index 6d5717b..d7d30da 100644 --- a/mm/early_ioremap.c +++ b/mm/early_ioremap.c @@ -226,6 +226,16 @@ void __init early_iounmap(void __iomem *addr, unsigned long size) } #endif +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +void __init * +early_memremap_prot(resource_size_t phys_addr, unsigned long size, + unsigned long prot_val) +{ + return (__force void *)__early_ioremap(phys_addr, size, + __pgprot(prot_val)); +} +#endif + #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT) void __init copy_from_early_mem(void *dest, phys_addr_t src, unsigned long size) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-bl2nam02on0089.outbound.protection.outlook.com ([104.47.38.89] helo=NAM02-BL2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dLwMI-0000uT-Fz for kexec@lists.infradead.org; Fri, 16 Jun 2017 18:52:41 +0000 From: Tom Lendacky Subject: [PATCH v7 12/36] x86/mm: Extend early_memremap() support with additional attrs Date: Fri, 16 Jun 2017 13:52:08 -0500 Message-ID: <20170616185208.18967.72141.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> References: <20170616184947.18967.84890.stgit@tlendack-t1.amdoffice.net> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, xen-devel@lists.xen.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Brijesh Singh , Toshimitsu Kani , "Michael S. Tsirkin" , Matt Fleming , Alexander Potapenko , "H. Peter Anvin" , Boris Ostrovsky , Jonathan Corbet , Joerg Roedel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Larry Woodman , Ingo Molnar , Andrey Ryabinin , Dave Young , Rik van Riel , Arnd Bergmann , Konrad Rzeszutek Wilk , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , Dmitry Vyukov , Juergen Gross , Paolo Bonzini Add early_memremap() support to be able to specify encrypted and decrypted mappings with and without write-protection. The use of write-protection is necessary when encrypting data "in place". The write-protect attribute is considered cacheable for loads, but not stores. This implies that the hardware will never give the core a dirty line with this memtype. Reviewed-by: Borislav Petkov Signed-off-by: Tom Lendacky --- arch/x86/Kconfig | 4 +++ arch/x86/include/asm/fixmap.h | 13 ++++++++++ arch/x86/include/asm/pgtable_types.h | 8 ++++++ arch/x86/mm/ioremap.c | 44 ++++++++++++++++++++++++++++++++++ include/asm-generic/early_ioremap.h | 2 ++ mm/early_ioremap.c | 10 ++++++++ 6 files changed, 81 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index cf74791..0b09b88 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1433,6 +1433,10 @@ config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT If set to N, then the encryption of system memory can be activated with the mem_encrypt=on command line option. +config ARCH_USE_MEMREMAP_PROT + def_bool y + depends on AMD_MEM_ENCRYPT + # Common NUMA Features config NUMA bool "Numa Memory Allocation and Scheduler Support" diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index d9ff226..dcd9fb5 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -164,6 +164,19 @@ static inline void __set_fixmap(enum fixed_addresses idx, */ #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_IO_NOCACHE +/* + * Early memremap routines used for in-place encryption. The mappings created + * by these routines are intended to be used as temporary mappings. + */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size); +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size); + #include #define __late_set_fixmap(idx, phys, flags) __set_fixmap(idx, phys, flags) diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h index de32ca3..32095af 100644 --- a/arch/x86/include/asm/pgtable_types.h +++ b/arch/x86/include/asm/pgtable_types.h @@ -161,6 +161,7 @@ enum page_cache_mode { #define _PAGE_CACHE_MASK (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT) #define _PAGE_NOCACHE (cachemode2protval(_PAGE_CACHE_MODE_UC)) +#define _PAGE_CACHE_WP (cachemode2protval(_PAGE_CACHE_MODE_WP)) #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \ @@ -189,6 +190,7 @@ enum page_cache_mode { #define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) +#define __PAGE_KERNEL_WP (__PAGE_KERNEL | _PAGE_CACHE_WP) #define __PAGE_KERNEL_IO (__PAGE_KERNEL) #define __PAGE_KERNEL_IO_NOCACHE (__PAGE_KERNEL_NOCACHE) @@ -202,6 +204,12 @@ enum page_cache_mode { #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \ _PAGE_DIRTY | _PAGE_ENC) +#define __PAGE_KERNEL_ENC (__PAGE_KERNEL | _PAGE_ENC) +#define __PAGE_KERNEL_ENC_WP (__PAGE_KERNEL_WP | _PAGE_ENC) + +#define __PAGE_KERNEL_NOENC (__PAGE_KERNEL) +#define __PAGE_KERNEL_NOENC_WP (__PAGE_KERNEL_WP) + #define PAGE_KERNEL __pgprot(__PAGE_KERNEL | _PAGE_ENC) #define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO | _PAGE_ENC) #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC | _PAGE_ENC) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index a382ba9..4feda83 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -422,6 +422,50 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK)); } +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +/* Remap memory with encryption */ +void __init *early_memremap_encrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC); +} + +/* + * Remap memory with encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_encrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_ENC_WP); +} + +/* Remap memory without encryption */ +void __init *early_memremap_decrypted(resource_size_t phys_addr, + unsigned long size) +{ + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC); +} + +/* + * Remap memory without encryption and write-protected - cannot be called + * before pat_init() is called + */ +void __init *early_memremap_decrypted_wp(resource_size_t phys_addr, + unsigned long size) +{ + /* Be sure the write-protect PAT entry is set for write-protect */ + if (__pte2cachemode_tbl[_PAGE_CACHE_MODE_WP] != _PAGE_CACHE_MODE_WP) + return NULL; + + return early_memremap_prot(phys_addr, size, __PAGE_KERNEL_NOENC_WP); +} +#endif /* CONFIG_ARCH_USE_MEMREMAP_PROT */ + static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss; static inline pmd_t * __init early_ioremap_pmd(unsigned long addr) diff --git a/include/asm-generic/early_ioremap.h b/include/asm-generic/early_ioremap.h index 734ad4d..2edef8d 100644 --- a/include/asm-generic/early_ioremap.h +++ b/include/asm-generic/early_ioremap.h @@ -13,6 +13,8 @@ extern void *early_memremap(resource_size_t phys_addr, unsigned long size); extern void *early_memremap_ro(resource_size_t phys_addr, unsigned long size); +extern void *early_memremap_prot(resource_size_t phys_addr, + unsigned long size, unsigned long prot_val); extern void early_iounmap(void __iomem *addr, unsigned long size); extern void early_memunmap(void *addr, unsigned long size); diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c index 6d5717b..d7d30da 100644 --- a/mm/early_ioremap.c +++ b/mm/early_ioremap.c @@ -226,6 +226,16 @@ void __init early_iounmap(void __iomem *addr, unsigned long size) } #endif +#ifdef CONFIG_ARCH_USE_MEMREMAP_PROT +void __init * +early_memremap_prot(resource_size_t phys_addr, unsigned long size, + unsigned long prot_val) +{ + return (__force void *)__early_ioremap(phys_addr, size, + __pgprot(prot_val)); +} +#endif + #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT) void __init copy_from_early_mem(void *dest, phys_addr_t src, unsigned long size) _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec