From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752943AbdCPSU0 (ORCPT ); Thu, 16 Mar 2017 14:20:26 -0400 Received: from mail-dm3nam03on0055.outbound.protection.outlook.com ([104.47.41.55]:22800 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752119AbdCPSUW (ORCPT ); Thu, 16 Mar 2017 14:20:22 -0400 Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Subject: Re: [RFC PATCH v2 26/32] kvm: svm: Add support for SEV LAUNCH_UPDATE_DATA command To: Paolo Bonzini , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , References: <148846752022.2349.13667498174822419498.stgit@brijesh-build-machine> <148846786714.2349.17724971671841396908.stgit@brijesh-build-machine> <14021d2a-2a94-a0c8-88db-acbc04b4daac@redhat.com> CC: From: Brijesh Singh Message-ID: <5fb4d24c-f070-cc22-7a47-fb55ba430011@amd.com> Date: Thu, 16 Mar 2017 13:20:06 -0500 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: <14021d2a-2a94-a0c8-88db-acbc04b4daac@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CY4PR19CA0028.namprd19.prod.outlook.com (10.172.173.142) To SN1PR12MB0717.namprd12.prod.outlook.com (10.163.209.19) X-MS-Office365-Filtering-Correlation-Id: 3ac5286b-cc00-4ba6-a5ec-08d46c991a33 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:SN1PR12MB0717; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;3:IMAO2mdtSgwn9qonrXT/JGCarxs3WQtXK4vgv4GnY9B32JaQNLX+4du4LPIZKzAfmm3jusIw6+cIewLv95ykZngeJ/xVre5JP/VohxAw6YD2uraZlQL5ezbuqTBVqI1IQgW8BVJJqQH5unFzeAzVbYz8NVu7S+MUDYOGtpxpezXdjkfR+0FS9VKSonWDD2j8lwX8YXg971SU/b5JT/hE65El8kZQpQ/ApieCP0L1ZlpiluDSLk39wmjb18Px4bUWfLKaWmfpwjU0ambDErNEF87g3OFBej8Wb2T954JAXRc=;25:w25mU1FExn4wwKpUVKmtuPNwkWc3gvxQc/CcL0lDT9ql7KeGe/kJIj5hJ1gD42RHBdALUnDrajR+h1B0STmAV6odfbH9uqSgR50b5PmW/3SlIf4rwQXlQf9ZqyflAL6T5HWeuM2l2TGfnmEqk/vwJkYr9n8yKm0Qpo4INcTl95t/lbKXFme98ImB/pWbhi1cESXuIFXS7+lAd0Ujc3YaQoMtw9D/ZGfiW2kO5KkaPbY4zlr+Glu3jjIXUXo2qpOkcKsXGb82omC2IuAyJOS11PqZubgu8Lg0G9NnxiiBKr0UJGFYILWYlQBYewOYQmL8DfwKPamYLdpO83lmWzctSn0tHYV9HrMxWTzL+sIFZIJBa1+qxiYHgnCdy71ABuUQf7ljWZ81HuhzcgfrYVD76A2GWtThovjOTjTuz6vcjyRPcdYrT8BtuQ5WREpw/65ZkntfQuEuBBbwl25MfJDRaQ== X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;31:Yyi5ybmCwUEoIm458ecG4FAcoRrHZ+BqZO5p9UM9oq/naiT6b3tAgUvydrmQfljJLOnRJup96F9aTDQ3OgZqkPyhsx8KPOi0K7nN7p2A5De8c+w/X3jjgcJHpgJmM3AvE/mQpxk0bSYBddIIe4HizbMc/8DEtCQAOM64s5F2KoVHv4Bk7/sW5v54MowWkkHSUAkTEVraeRZzHEGrX1yFbMWg3TSKz8BDzN4FLyQSMyoAgfWTR9vDY2W7Ui7n76oQ;20:PvYZTvy0vuT+7vn+ZzDSffpxSWDaQl+5Ff361aybSlY7aoQRyzHeVx4ghgVLtzecfRgPbI3poyYjdZ7X0FRk8Z4gi9hUWId/DWF67kWoYeOyyQygeg2+OjxG2e1ttWZ95axOnMVeFPLgWDzxp5X1Hj4iqYNrR36otTXq5jv9auZ4Pbd3KiEeSytKVXryq/D6SesM8FJmQDVH/vo4BOt9MJL8h02VQdMWjlKcxm0Le2gxcHu1mhGYBbbdicoq3taeQh4/rUZzeyWFcixYNMQaOZ8va2jR/sBNJaMeh8gUbR0seknn0QfS8fQa+t/PhYpmzmDBsMA7BDp9V3Q49xOEAu1z7r5xVtIwONkJ7ipIt9uxxBrL3RuYphIa5v9e88xfW2TbHx8oa6kWPcaVk64jtop91q+mrNeH3Dlewemg+dYfAQRhHbNCcM7/uITi0ppSTM6vScz2EG8QlFbqH6usEkuxVafWERXqKR7p6ngeSW112uQ6PF0P1TWIGAhFXwVf X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123558025)(20161123560025)(20161123564025)(20161123555025)(6072148);SRVR:SN1PR12MB0717;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0717; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;4:k073gysVxbOWXK9VMaMxqFMxs8VcMoo/sn7TcN5wheaDhIsaNXWihQ71TjqwsOX9vvEffDnhB1/4UxAkwdxnAvo7tQbIMrB4TAK5qDaF8mEpIPpkVqUUFP+bmCVft4SNCXjZWC/sCzdocrUmKlJnwU29zw4dLjmIADH6R2TBlFZ/mNdCcmG9cqG5J6et5wjyebK4HwSIDCPWPN8qY1KA/yGcrXPHDZpMhCkisSPTdsVNK0wVd+tFrNGfrifcYgkWI8urtwprvVIAa5F38ZGTG+9XfbKUzTO5G12b/5/mfG6x8MTpRXMu8Hs5yIEueJIYKBS9ixpTgZ2i0j1VYEBeXUqfUCbMT9dRqKnfs/P3UmzXSoUaKZmprPPOzusAW1Yb8BZ9JceDAHuE2ah8R49Gxs0g1aPQo5qPllCYFb5J+SJqOe67KYs7KT5SHbyNKyGQT9mo+qOL2urPFxR3gDIx4jDrzUvC7wXWmbNmLGVzxUccNejLlLyvotZdsTgQhJkrn6Mw2Maf/e0V3UC3B3ri1oZDdQrf5ySQne/dZ/4MIf5g+upMHUWs6yZf+PsMogR9bPPMY/W96wJnMKi3PBrlp/9N4EZrtHKgqTgO3m41DeLDXJZcnDNEKVyiWE+XzeEsg7n68n6Oe9uppIFCTr4ssZCsjNh3tAeZRFCxgXpH11k= X-Forefront-PRVS: 024847EE92 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(39840400002)(39850400002)(39410400002)(39860400002)(39450400003)(377454003)(24454002)(189998001)(3846002)(64126003)(6116002)(1191002)(83506001)(36756003)(230700001)(2906002)(6486002)(77096006)(90366009)(2201001)(25786008)(6666003)(31696002)(86362001)(2950100002)(5660300001)(8676002)(47776003)(65806001)(305945005)(76176999)(53936002)(54356999)(7406005)(7416002)(23676002)(42186005)(4326008)(38730400002)(53546007)(229853002)(50466002)(4001350100001)(65956001)(66066001)(33646002)(6246003)(81166006)(50986999)(921003)(217873001)(1121003)(83996005)(84006005)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0717;H:[10.236.136.62];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwNzE3OzIzOkNFNEF3VGVOZjlYUVBHalMxK2R0KzlKUGxX?= =?utf-8?B?dFdmZU9zcG1EamNPYjFBTTQ5SUxRajF4bWdhcmc5d0dEOTRYSFFtSUxKcVhI?= =?utf-8?B?cXRJaFAzaUkxTWRnTndwNnQ5SmF2V0ZnRTJGblRFelZ3c2F0SVlVQWNMSzF5?= =?utf-8?B?Q3loSFU2SFZPSW1SdjIxY1J0bmNXVHMzK2xHUVlLRFNySGdXSERRKzc5Snc5?= =?utf-8?B?T1AwZ2FucEtGb2prV2huTTJWNUtFc2N6b0tBN3ZBNXlnNjJ4S1pkZ09haUxV?= =?utf-8?B?Qks5cjFHd1NaSVVDUnBkdTJyL01WTGdQZmFxZkJXR3dLdEpQNGxDVGdwUWN3?= =?utf-8?B?dUhHUHk0U0c4WWVNcDUyUmkrY3RaSkdmV3NuS3BsQ2ZFWHltb2tQVDF4VlFq?= =?utf-8?B?V2FURmx5bVdsWnhZWDZpMUppcVl5NGM2YU80SENUZU05bEl5NUtTWEdjSkp1?= =?utf-8?B?S21WWFAxaUFSUHVrQWdZRjZ1VkZSdkZnbXluNkZDeUUraFd1Rjd6UlA3Q0pr?= =?utf-8?B?TUlpQ3k5MTdCVkVENEF2ZUxweXU0dGlLS2p5d0hIL084c0pXS3NFb3VRTlFZ?= =?utf-8?B?ak9jamVVUkVXa1hNb3BoWHBRSWc2cXdCSFVXVG1iRm9vWjlReDlMQ0NiSkFY?= =?utf-8?B?TkxieDFHMzl4TjI5RHNQREFWbWF3TWRsUWhQQlFmTnFJM2YyRkVHSEtuWFZs?= =?utf-8?B?cWhQcTVyQmVjOVhBeW95clRFQ2U4TkljR3dEOG5Hcm92bmQ4TjlqWElrTi9C?= =?utf-8?B?TEdEYjdJVnRaM0ZTUlo3Z0ZBQXVUNkFodHRzSjBtak80bEdGRTBrSnJ5OFUx?= =?utf-8?B?aEpNWGJxWWd6Y2FIVXN6a0ZEOGRTMXZXb2VqVmg5ZnlleHcxRjRVR3Q2aUU4?= =?utf-8?B?Y1JaM004RWJ4d1VzNmRqWXZ5Z21zeURpWTdGc1ZSZHNYSmVqcm56Mm9GOFRK?= =?utf-8?B?RlhIYWVNUmJsdi9CY0dxQTZPMmpCRXJNNitDTk5mM2NreDQvL0x2blNIV3Yy?= =?utf-8?B?bmpLalp4QVF6TVNKMkEwK3g5UlVKNlF5Qms5NTRsK1U5R1NwcEFQMkVRSWVz?= =?utf-8?B?YXZrS2l0a0tiVnNrTCt4MlhxUGxUYXozTEtMSzZSWlc2WEtoY2RGekpKWU9Y?= =?utf-8?B?bGdJa3hlcVNZZXIzK2ZVaUhHTVZvem9QS0U5c292emk0UzAxV21CaFdoVkNk?= =?utf-8?B?MVB3MThYZlp0SlVvT2FkNEE1REhSdHBHSzQzT0ZTdjVjL2FtMjJzTWFta09X?= =?utf-8?B?WDNGVU1jZUowdDNhUnJ2UVhQakhuN29SckR1VjhFSDFaMUdpZWNmRnE4cUdW?= =?utf-8?B?OEYyT0pxcWQ2VDRncVJFTHVXejRTNmh5TGNFS3F3UzFDcHJOb2dNWnU3UnRK?= =?utf-8?B?K0FxZTZuNFJJczl1UDF1ejQ0bHJmL2dMQ3VZZXk0eEgxakVaQUxxWkREeTB3?= =?utf-8?B?L3ZnMUcwZjAxK0tkMzYwVGpXT3Zkd1llcjJDWkhiVnV5c0pqMENQano0bnZF?= =?utf-8?B?WDBvNVJPY3RIdmh5NURDamFuc3VWRy8rcit1TkVEMkk0elcxUDNBaG9PdXhT?= =?utf-8?B?Mzc2bkMrZ0dmcmQ3a0FCVkJHak1BeUZXS3RKY3UxMndnT3pqY2RraldyOHEy?= =?utf-8?B?RG1oRzI5Zkh6cTc3Zjk3RTJUVzJtK2pna3VhMGJ3bm1kWjNMRlFBWC9oL29x?= =?utf-8?B?RklsZFhHb2hSTzdTRzVnT2R3R0dFMnpleWJCTzFmNmVBYlhUZ25ERERWTXA1?= =?utf-8?B?Y25pbUZ4RXFKMzUwZXpLMUloNlNRUzNTY1NJdTBZa0N0Zm8vN0RvdFovVGtS?= =?utf-8?B?bUwzYnQ2R092OHd4QTZYeEZlRWlCalk1bTZZamdQMkdod1IwZEYwekVGeXlj?= =?utf-8?Q?dB7e8DSx8paTy56/fjNWbBaI6QQ2R2vw?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;6:z+QTZmPlzdEfI5IumgF7/9/S/PRBHIXXBZQNN94zJvbMNrtB5F8iLEPHQ61BQmwwkwfWnU+5p5n7oqA0cWhKOenK/vdMOE3LB8UDBXZOac3MowlZzfBRXLN/CI1mhysQHh0jHl6UW3iXfTei7j+lDG7CN2jqdcau2gG+1Jnagug2vphdXb9SVw0L8ugvHx2eQM+G2nSZ2zCw27X2IaXcNoXVB1bHN6QzDLErWgC13nbMlDT0Ymf1j29DEGdMUfRmWj4akvFcJhqmrFKi7X6TrqkSFsyKQJTx2ZFzsTRU5OkS0yISVEarPyq/k4eesO6MqddDaQTthGAu/7kPy/+FtvIfR34cKO2tphpe6B50/2QBB1jl5VIDXues2MPm0TvYKsBre5Cn/poUdSurXU6n3K5jILPh7Z6XerBB37TGIp0=;5:insQUnox43jOUXLoHVMT+QSsep5CH0jdGo2GU2tpw2jx+A2u7Lh20yXl+pTCjt3We048Tu+pv7Kfha99p5qO1zyHYflNh7nY01By5+L+g+LmdwsIJJ6BE+hp0gUUozTGzZbN3QSvI4ScCQCiI0zBgA==;24:W/Rg46kpR+upAuC0lhNGWrkEmvmoN5disop5mP4fg1tX3quIVgL+EAfJnEunFqLdYV7CrDphI9fx8+/MMYHltn19+uxJBHzgrVMmfjlMaXc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;7:XaQ9jMUREOfGTGrVPJfJZXF6ESCt3MYaWJt2y/AFiykjz5XS8NyV4DYkqxa0pRU+fT+HnwKPGoFxxW3rLvzafYRO7xul7VokMe/1Nk5HIyPWme4nlmj2M4uzzKRoYAw6JOwCRQmCshn9RWsLTrEZ9P7mZK2sE4Dg7/+PGbZTO9Tdo3djC3V+wiG7wcyzZx3Pp0Bpk6cEPzTUrbvpnRWzwJowQtCjbcZGXf9kTloIQtYe9DRC6U8q9EjJBBGsLYEcGsQpT/ZVsu8Ck1xBdASxzxigu7/H3rg2EBNaoj6Lxn5W+lIjGZeHi+xTww52QeNOE13Lplq/N9fXGF2WMaoLlw==;20:f7PXHiKstmOimQhfvpDPT2zHZ/E1eUu5UYKRtv9jPlu0wbRcL2xar8d8XS9PaeYfxMgCz0BpuPSaj7fSZWu7BoF+U4Ws6pDFrSrAlQ7ST9XoHKaRXCDNgmx3Twfg3HTzg5Z7XQKPb+JUkP/hlyOM44Nt8DJWp7AgN6Q02vz8mM5xLWXzvHOyh81KHugAuWUH1udJxh1odhgI5DcUKKl3JDB4Ic1HOMcYly1oMUNJaUc1P5W2M3miLF0Y3vAZBbvY X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2017 18:20:15.7095 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0717 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/16/2017 05:48 AM, Paolo Bonzini wrote: > > > On 02/03/2017 16:17, Brijesh Singh wrote: >> +static struct page **sev_pin_memory(unsigned long uaddr, unsigned long ulen, >> + unsigned long *n) >> +{ >> + struct page **pages; >> + int first, last; >> + unsigned long npages, pinned; >> + >> + /* Get number of pages */ >> + first = (uaddr & PAGE_MASK) >> PAGE_SHIFT; >> + last = ((uaddr + ulen - 1) & PAGE_MASK) >> PAGE_SHIFT; >> + npages = (last - first + 1); >> + >> + pages = kzalloc(npages * sizeof(struct page *), GFP_KERNEL); >> + if (!pages) >> + return NULL; >> + >> + /* pin the user virtual address */ >> + down_read(¤t->mm->mmap_sem); >> + pinned = get_user_pages_fast(uaddr, npages, 1, pages); >> + up_read(¤t->mm->mmap_sem); > > get_user_pages_fast, like get_user_pages_unlocked, must be called > without mmap_sem held. Sure. > >> + if (pinned != npages) { >> + printk(KERN_ERR "SEV: failed to pin %ld pages (got %ld)\n", >> + npages, pinned); >> + goto err; >> + } >> + >> + *n = npages; >> + return pages; >> +err: >> + if (pinned > 0) >> + release_pages(pages, pinned, 0); >> + kfree(pages); >> + >> + return NULL; >> +} >> >> + /* the array of pages returned by get_user_pages() is a page-aligned >> + * memory. Since the user buffer is probably not page-aligned, we need >> + * to calculate the offset within a page for first update entry. >> + */ >> + offset = uaddr & (PAGE_SIZE - 1); >> + len = min_t(size_t, (PAGE_SIZE - offset), ulen); >> + ulen -= len; >> + >> + /* update first page - >> + * special care need to be taken for the first page because we might >> + * be dealing with offset within the page >> + */ > > No need to special case the first page; just set "offset = 0" inside the > loop after the first iteration. > Will do. -Brijesh