From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 678E3C3DA4A for ; Fri, 16 Aug 2024 19:32:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F154B6B0099; Fri, 16 Aug 2024 15:32:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEB4F8D0066; Fri, 16 Aug 2024 15:32:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DD9DF6B00C2; Fri, 16 Aug 2024 15:32:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id BFEE66B0099 for ; Fri, 16 Aug 2024 15:32:24 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 8F1BA1A01E0 for ; Fri, 16 Aug 2024 19:32:24 +0000 (UTC) X-FDA: 82459105008.11.0794FD6 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf14.hostedemail.com (Postfix) with ESMTP id CA09A10001D for ; Fri, 16 Aug 2024 19:32:22 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=4ciqk7eR; spf=pass (imf14.hostedemail.com: domain of 3Ram_ZgYKCNIG2yB704CC492.0CA96BIL-AA8Jy08.CF4@flex--seanjc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3Ram_ZgYKCNIG2yB704CC492.0CA96BIL-AA8Jy08.CF4@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723836644; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=cbbwALysxAKAZiiwWFvsXslN5HMdm8PtgVwiZZNny5A=; b=lNbZ1MoN94XVmNn3trix7Tdonwv+ap8qWWMpQxihEt3t3Jup7wrXDYUbbA3rhW2S2L07hH Jxd2LuB5YLtXqWfLVfEt7GpsM8DpQYhrqSvHjDZ6zETgQTwJ2XGW1kVxeiETZtTi3vw4XB 3BaZ3Wo6Rs7TAqMWzRPC4JjsIui/9QA= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=4ciqk7eR; spf=pass (imf14.hostedemail.com: domain of 3Ram_ZgYKCNIG2yB704CC492.0CA96BIL-AA8Jy08.CF4@flex--seanjc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3Ram_ZgYKCNIG2yB704CC492.0CA96BIL-AA8Jy08.CF4@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723836644; a=rsa-sha256; cv=none; b=HnBrUAxQf8cQJggrFeDDilzadk2Z9QnWiNYZljD+9kgFvbZTHzHE1KVSxoVtO8GEf/Kwj2 jJ/KYgHNPHLzLsHkSGeCgx0H7Y8jFsGlhhCGVAwrQ4FkxOnyc4uKnYIcKCSeq524B1OksM 9XcXYycuoz43+LgWw2Oo21xXyPEwh08= Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-6b44f75f886so4484447b3.1 for ; Fri, 16 Aug 2024 12:32:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1723836742; x=1724441542; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=cbbwALysxAKAZiiwWFvsXslN5HMdm8PtgVwiZZNny5A=; b=4ciqk7eRkLmzNd/swQeS7yNFp/StYQ/40H09N6MmrG86EedTeWcT9FNW2q3r+E+gFR P6A/6UJftTdioZx7JouZtPl1vaBcHFuBpyuVlP2A4koN8Pkp8chLH9KVT66/XTpd6fOT L+DxeWlt08OfbquuThvjlBQF/IJw0gzIQd55MP1OnvfB836BUir641F0+n5HDIUXRu8c v9nqIgZ4YllnH5EuuY/Sm5Jjz5RXJrsb0CaZupaZlMt5oaBYiwEML4FRi5nkMniEl4ap tDM2BmssIpywIorF2zMAdLfQ8+qCQqoJMuR1DFuVhJ56wZRXOc9p6u/sHgYDqO0Y8oud CZ4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723836742; x=1724441542; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cbbwALysxAKAZiiwWFvsXslN5HMdm8PtgVwiZZNny5A=; b=hpTQNG1nY85F5eswFKJgGxUUWz5f6eudO6OqMmwKHv/kV3bCsKaGdCXERDUOw0ChbV Y0s92lsjAQUOKMd/Uh9Fh00PAEtRN6LJSnlA9kJKMbPdirCTd3JGZ3BfoWJ08IBLpAyV nqrxW/zX2822ZLVpRcf3AyenhTYTrnrkn5QwcSTwnHpE3jDgaswS4zuQlzFGhgyM1pZN GvSO+wElmAIZZ7OfPbJltj8JJoM9oh16dNU4tk7EUh6WcSWASN84wKBW8s1rvGYonTOb prMnVr36tWQrklNarHSWHHJSW8afS2W+4gTrSv5edtE901svX1JJ6tN9fmM4+CjuIPfr wUOg== X-Forwarded-Encrypted: i=1; AJvYcCWU0stncISFzZw9L8WihxSXaZAdVa4s7LjDxfKSYky/RihRSrLonjMu8wBESxsu8WDbWt/Cr+zUXPC/hS9HOpyfKgo= X-Gm-Message-State: AOJu0YzMa9R4ui6SYudSomcBUvZU5jq2dXyKqMymjl1yZrUIa8m3ZyA7 dhCLDr6DkNuarlgdXhbqEvvDRa28lUZPz0pW8hOj3gHlG699ks4sU4znlRYqtWl2qipJLbRJgZh gbg== X-Google-Smtp-Source: AGHT+IHxI7a6saXi7ISTiFHJHCquHUevVm+Bv9GxPJERDYGDgVOOouWrzQkYJOULpNklx+j3O4vhJAjBF+M= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:690c:368a:b0:697:9aae:1490 with SMTP id 00721157ae682-6b1b6cb8bc2mr1076867b3.1.1723836741860; Fri, 16 Aug 2024 12:32:21 -0700 (PDT) Date: Fri, 16 Aug 2024 12:32:20 -0700 In-Reply-To: <20240801090117.3841080-4-tabba@google.com> Mime-Version: 1.0 References: <20240801090117.3841080-1-tabba@google.com> <20240801090117.3841080-4-tabba@google.com> Message-ID: Subject: Re: [RFC PATCH v2 03/10] KVM: Implement kvm_(read|/write)_guest_page for private memory slots From: Sean Christopherson To: Fuad Tabba Cc: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, yu.c.zhang@linux.intel.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, ackerleytng@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com Content-Type: text/plain; charset="us-ascii" X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: CA09A10001D X-Stat-Signature: j6ns316xbcfr3hsiuatr6qt1cwwsxuh1 X-Rspam-User: X-HE-Tag: 1723836742-447533 X-HE-Meta: U2FsdGVkX19Hyxglaun5WrPzuSU7/f8PJZ6fsAlkBMEAMzAHxzc3QgyF2Q0OZVyc9FsJSE63DwiCLbblaCwx/8CsWWbl62SrhiLxMXRQXU0hyTMOACKoyHSumXHTsyJcoFoolqFhOiziFBUzNWTDPo/pC1nQYDB5AxaWAtG1kNNHSs7BEu7IvaEuQpR4v9rY8hqvMdK/nxsCfmK3X2dgi8rRXr/cRYVQAeyMSy0I4+UeezvVeIoHDxQNe8p3g71svhOFHdYXtDaoF22Bf3de+Qg6MLoNRFonD9McKfIK632QCK8sc8qruK5rhz4/IouVxHUvvtjopEHjnU0yjQfIIMLvB1sr5FQlcvjuit5YVzGpf5VIodl0yDf9NARqUcB4OAIU+wXEpFpJsS/RPfsPDN5pXfsUwz+YoZ9NH5CCxJIgmh+Qr5tOivUaVmCtHpJl4plIctcBzAWaGkw0lFWDcLrEfafd9VYMhkrfCsib2NcGjOOw5Cc+fHfVoZiRLidR36sQ9xVGWSLUfhhcEs1S9EnGQ/u0ifcUQRAB5SeLR7b+YCcy7+AcYCTtaG0KKQW4F4liZqlL5WPYsz4VG1F1v2RIalqjbPjMqnUWsPIL5qZiusZMuU3gig/Tep3ytc0pAleIPmIdqiEFChWSd8AMuXkBSf0aIrl0+3fe2l8xRFkO53l6V6esHGilAemsXfuH+yh9sTZpmD+GIGACQ2m6gD87Q/7XC8IwbOJTYskwgskRXR6+pME3Tf2ynmm0DTm6EkzBi2ymC5zBdBaplVZGaCM3F9apDOcmgQ+iEm7LL3p+LQ6xEPE5ycM0S1eoy0BVyWdvdy0NgmhZTSRHqezzUy+19P3RT02QNlQK4VA5VeO6sHz5q9l5CH2MAuL2f0vObjQOtuaJkhLWidKiOGtAuJLA8NDNXO8lPcPsOjrTOaj3xUlKOY1azRsJzBoy0YY+8CFoyY1nNuUlMDIG5xK A0yxEsEO JFOsa3YkxveUReHGzxAcno8xqms7GjswHe3zsTyl3l2lpbHQU1lurAu6luXsZhBUNzDjQWrtZRdY4tJ52uJmmZr3QMlfEni8UXyeMQlMgc8TT2Tv0HR3WmFzHw47j1hOM8FL1TVm2HQ1ABgIebXbIgj8j+U/qcgx+F6UYcCBEkzwJYoJLTYnPIergRUUXwW7yJn3x/7zSYhsv/AUD36HywLzOe4iagEf8218MktyL5th3wI5ninKmRZnyafr9006oa86Tb6Opxon2hzD419v3lqcP77y/sIlEH0zBhCHecTX9sFERDgTjTWiVla1xcGPXzn2WnRquPJ/QwRnix6me1P13PoP8ZIlp57EZLdbDDgdrPq/eM/nMxTuM8/bmOl6kLY3LIWGg5b8Vdf8bt9odPZV+ZKDjzcaT5fvmpKf0J/H5Gyg8K91oQLV50TmXboL4+3m2C8xlnnJ2MQpa7I3gHrbM/RblV0fL59RfTgk1kO+uhOMjT569zzeVZDVW6bGqSaKO5/kcAGvUbsRkTw9kdttcNtd4Pk9ivLjb0RaOe5dLqVXWKPw71WMZjPkAPpqjb+sry/QSugHWCLMrQLy90VsiJMcbgEi6TfObkdXnT7rklt9ARuZhz0QUEyDujw4gHfHCWe78Ixkr6q04rgF0DeGWQSHnaDaDJXBy X-Bogosity: Ham, tests=bogofilter, spamicity=0.007864, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Aug 01, 2024, Fuad Tabba wrote: > Make __kvm_read_guest_page/__kvm_write_guest_page capable of > accessing guest memory if no userspace address is available. > Moreover, check that the memory being accessed is shared with the > host before attempting the access. > > KVM at the host might need to access shared memory that is not > mapped in the host userspace but is in fact shared with the host, > e.g., when accounting for stolen time. This allows the access > without relying on the slot's userspace_addr being set. Why? As evidenced by the amount of code below, special casing guest_memfd isn't trivial, and taking kvm->slots_lock is likely a complete non-starter. In the happy case, uaccess is about as fast as can be, and has no inherent scaling issues. > This does not circumvent protection, since the access is only > attempted if the memory is mappable by the host, which implies > shareability. > > Signed-off-by: Fuad Tabba > --- > virt/kvm/kvm_main.c | 127 ++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 111 insertions(+), 16 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index f4b4498d4de6..ec6255c7325e 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -3385,20 +3385,108 @@ int kvm_gmem_clear_mappable(struct kvm *kvm, gfn_t start, gfn_t end) > return kvm_gmem_toggle_mappable(kvm, start, end, false); > } > > +static int __kvm_read_private_guest_page(struct kvm *kvm, The changelog says this is for accessing memory that is shared, but this says "private". > + struct kvm_memory_slot *slot, > + gfn_t gfn, void *data, int offset, > + int len)