Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp2570780ybe; Tue, 3 Sep 2019 15:10:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqwrQB0Ad7mpCQ+YMmEtxeYgx/SwdGE3YJDyjHv+3Yx8AOkY9NrsQxvx2hNk1d7zdG3w2MGO X-Received: by 2002:a65:62cd:: with SMTP id m13mr32087331pgv.437.1567548641481; Tue, 03 Sep 2019 15:10:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567548641; cv=none; d=google.com; s=arc-20160816; b=mlo6EgD6d9qPPTgyucLOtX4i7bBBNs7N3TkzYVbhxDN+5IB+VRrpuXFHvrc9a8bE8/ /dX3rmSYX0xA1f+JnQcRcQHHu1tKlcdF7aR+Dv5ufOUrSxBetm0XNniozl+rLt2ISzGs qlZaLjSw5MrwtkT+6mapIwyu/0VNEfZv7ECAfk9eCGkDjSVEwJoAapf/Utdc87axqMvH kr0ZJVTHt+qD5ulmpck0Pa8bNnSe47Y6RaXtsVjIsyREin/HkG6aOnhzJXci70PtvAOQ fPjvP9Zk6etO7RW4YPAdoJ9qQRRnNg9BKNr7SeF3hPOhm0ciySoDwBodlG4LtSNPCUSn uNMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject :dkim-signature; bh=gqNoqnFS7dQSnB66CGXAkmb3Ra6gEgUS75qIlOtvhSU=; b=s7B+3M5WpLypsLBZBMHX1gtvGkGlLFAZ8v8pJMLp58YTPd0BLihfk7TntX8XTc8W1V 4/oY1/VKRSwqOfGex0xNEhShsLC65SzJ1UAKYNLFCZ+VsuWQEoCCHzyvn3HQUalGxSq0 OMW2q5HM9ZEAV8xyJcszDWg6+nUuUPibsKU3zjTZsBk1aIiIBLBclwMNteGF27n8Z6iM Zq7XHQXwhZ3s+eq+O/W4BP1wFmoLNWW6ZK3f/u+R9mmRyyozgDqGp9RjjvfA7tXTzEFX 3TQLEj5UQa1qnFXyQ9dIsBZ2DZUvsmipWaxgQB0rkqQZX9z1BhdjXH3u7f8AteQs2dir q6Cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail (test mode) header.i=@shipmail.org header.s=mail header.b=pkx+xcp7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h1si15614382pgd.443.2019.09.03.15.10.24; Tue, 03 Sep 2019 15:10:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail (test mode) header.i=@shipmail.org header.s=mail header.b=pkx+xcp7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726858AbfICWIi (ORCPT + 99 others); Tue, 3 Sep 2019 18:08:38 -0400 Received: from ste-pvt-msa2.bahnhof.se ([213.80.101.71]:26175 "EHLO ste-pvt-msa2.bahnhof.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726009AbfICWIi (ORCPT ); Tue, 3 Sep 2019 18:08:38 -0400 Received: from localhost (localhost [127.0.0.1]) by ste-pvt-msa2.bahnhof.se (Postfix) with ESMTP id A5E7F3FA6C; Wed, 4 Sep 2019 00:08:30 +0200 (CEST) Authentication-Results: ste-pvt-msa2.bahnhof.se; dkim=pass (1024-bit key; unprotected) header.d=shipmail.org header.i=@shipmail.org header.b=pkx+xcp7; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at bahnhof.se X-Spam-Flag: NO X-Spam-Score: -2.099 X-Spam-Level: X-Spam-Status: No, score=-2.099 tagged_above=-999 required=6.31 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no Authentication-Results: ste-ftg-msa2.bahnhof.se (amavisd-new); dkim=pass (1024-bit key) header.d=shipmail.org Received: from ste-pvt-msa2.bahnhof.se ([127.0.0.1]) by localhost (ste-ftg-msa2.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vesswdzBSj4G; Wed, 4 Sep 2019 00:08:29 +0200 (CEST) Received: from mail1.shipmail.org (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) (Authenticated sender: mb878879) by ste-pvt-msa2.bahnhof.se (Postfix) with ESMTPA id 4CC3A3F867; Wed, 4 Sep 2019 00:08:28 +0200 (CEST) Received: from localhost.localdomain (h-205-35.A357.priv.bahnhof.se [155.4.205.35]) by mail1.shipmail.org (Postfix) with ESMTPSA id BE2E7360160; Wed, 4 Sep 2019 00:08:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=shipmail.org; s=mail; t=1567548507; bh=PP08vBRpPI309PnHgg45hbLsURQYHx2L5Y1XUs0y6nM=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=pkx+xcp7hRW0GXq5L6+AefZWEbZg0UOumvBTFZnEqaoGsI8veT+gNordaidfuAVSR FIujzRE3rpKodpvIxbxht6Ig9OXw1ylUXalqIMSnaL22ANMUIbkhue7Rhe2PYqta59 4FvVjoE0Af4SpyxGZ2Fsgsy/eKc99JNsguqTla4Q= Subject: Re: [PATCH v2 3/4] drm/ttm, drm/vmwgfx: Correctly support support AMD memory encryption To: Andy Lutomirski Cc: Dave Hansen , Daniel Vetter , dri-devel , pv-drivers@vmware.com, VMware Graphics , Linux Kernel Mailing List , Tom Lendacky , Thomas Hellstrom , Peter Zijlstra , Dave Hansen , Heiko Carstens , Christian Borntraeger , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Thomas Gleixner , =?UTF-8?Q?Christian_K=c3=b6nig?= References: <20190903131504.18935-1-thomas_os@shipmail.org> <20190903131504.18935-4-thomas_os@shipmail.org> <6d0fafcc-b596-481b-7b22-1f26f0c02c5c@intel.com> <7fa3b178-b9b4-2df9-1eee-54e24d48342e@intel.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m_=28VMware=29?= Organization: VMware Inc. Message-ID: <44b094c8-63fe-d9e5-1bf4-7da0788caccf@shipmail.org> Date: Wed, 4 Sep 2019 00:08:27 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 9/3/19 11:46 PM, Andy Lutomirski wrote: > On Tue, Sep 3, 2019 at 2:05 PM Thomas Hellström (VMware) > wrote: >> On 9/3/19 10:51 PM, Dave Hansen wrote: >>> On 9/3/19 1:36 PM, Thomas Hellström (VMware) wrote: >>>> So the question here should really be, can we determine already at mmap >>>> time whether backing memory will be unencrypted and adjust the *real* >>>> vma->vm_page_prot under the mmap_sem? >>>> >>>> Possibly, but that requires populating the buffer with memory at mmap >>>> time rather than at first fault time. >>> I'm not connecting the dots. >>> >>> vma->vm_page_prot is used to create a VMA's PTEs regardless of if they >>> are created at mmap() or fault time. If we establish a good >>> vma->vm_page_prot, can't we just use it forever for demand faults? >> With SEV I think that we could possibly establish the encryption flags >> at vma creation time. But thinking of it, it would actually break with >> SME where buffer content can be moved between encrypted system memory >> and unencrypted graphics card PCI memory behind user-space's back. That >> would imply killing all user-space encrypted PTEs and at fault time set >> up new ones pointing to unencrypted PCI memory.. >> >>> Or, are you concerned that if an attempt is made to demand-fault page >>> that's incompatible with vma->vm_page_prot that we have to SEGV? >>> >>>> And it still requires knowledge whether the device DMA is always >>>> unencrypted (or if SEV is active). >>> I may be getting mixed up on MKTME (the Intel memory encryption) and >>> SEV. Is SEV supported on all memory types? Page cache, hugetlbfs, >>> anonymous? Or just anonymous? >> SEV AFAIK encrypts *all* memory except DMA memory. To do that it uses a >> SWIOTLB backed by unencrypted memory, and it also flips coherent DMA >> memory to unencrypted (which is a very slow operation and patch 4 deals >> with caching such memory). >> > I'm still lost. You have some fancy VMA where the backing pages > change behind the application's back. This isn't particularly novel > -- plain old anonymous memory and plain old mapped files do this too. > Can't you all the insert_pfn APIs and call it a day? What's so > special that you need all this magic? ISTM you should be able to > allocate memory that's addressable by the device (dma_alloc_coherent() > or whatever) and then map it into user memory just like you'd map any > other page. > > I feel like I'm missing something here. Yes, so in this case we use dma_alloc_coherent(). With SEV, that gives us unencrypted pages. (Pages whose linear kernel map is marked unencrypted). With SME that (typcially) gives us encrypted pages. In both these cases, vm_get_page_prot() returns an encrypted page protection, which lands in vma->vm_page_prot. In the SEV case, we therefore need to modify the page protection to unencrypted. Hence we need to know whether we're running under SEV and therefore need to modify the protection. If not, the user-space PTE would incorrectly have the encryption flag set. /Thomas