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 F02BEC001DC for ; Wed, 26 Jul 2023 20:22:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D3226B0071; Wed, 26 Jul 2023 16:22:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 583EC6B0072; Wed, 26 Jul 2023 16:22:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 44B9C8D0001; Wed, 26 Jul 2023 16:22:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 3572E6B0071 for ; Wed, 26 Jul 2023 16:22:27 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 04AF1B2142 for ; Wed, 26 Jul 2023 20:22:26 +0000 (UTC) X-FDA: 81054885492.14.509E001 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by imf24.hostedemail.com (Postfix) with ESMTP id 33CBD180014 for ; Wed, 26 Jul 2023 20:22:24 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=eM8gatpI; spf=pass (imf24.hostedemail.com: domain of 3gIDBZAYKCLMlXTgcVZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--seanjc.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3gIDBZAYKCLMlXTgcVZhhZeX.Vhfebgnq-ffdoTVd.hkZ@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=1690402945; 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=wk8YN2z9DygnTN7wIkQ/drKhQeRLfAOWaFSkpwIJ9VA=; b=obMOeIikhsz9LqBl1cwF7uyH/FmYVZBhSKPK9Q0rbPWaVnxHfDIAR7kMxDYRgN2cHv/31y picHqgWyxi5RO8BzuZb9UxutF/NYOBxRzyXGi44Ymmd0TJZVZnmLKiXMMFssOE8cxdwcJQ 1hCVlUtiRNTOMv7tIbEv8VeLLs3Dfio= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690402945; a=rsa-sha256; cv=none; b=y5B4QPGAxK4YbHS3MxoZaEa11ZCkSKFb/Oh9BvhXGDA9cdWZsSchsz/Ym0+NZTVdtf7Zyw kWeoqKqOQoSKQqlvjBEo8vIspVsjzAaK8hFeVwevDVBlxL1meZQPm/Ngceqn0z9OqyggFF xlB6ax+X4f8Ws5R2O6wSd3DCKO1tLl0= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=eM8gatpI; spf=pass (imf24.hostedemail.com: domain of 3gIDBZAYKCLMlXTgcVZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--seanjc.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3gIDBZAYKCLMlXTgcVZhhZeX.Vhfebgnq-ffdoTVd.hkZ@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-d05883d850fso141315276.3 for ; Wed, 26 Jul 2023 13:22:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690402944; x=1691007744; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=wk8YN2z9DygnTN7wIkQ/drKhQeRLfAOWaFSkpwIJ9VA=; b=eM8gatpIFAPsVcHsvCyPq5hyC8MsN3TVlS3mNniSEUN+A8XGjxiS8F6dC4aFmL513/ OKqKBd4JNqQZqMKS0xCiGe+t5AXNUTDm2VuHrYqk4zFosWdPFjPIB6URfw5vd93IMKdx lKXXLluLhbwl+YjfsuqRPKzKU2+mG/aerZ1RHkgGlaQ2XngSQ4QWGzUzw8Bk02VhX6BY iemdbo75Y0mm9KaGC6Z479jAT6buL5FMFb75fU2ROzDvErIFsnjLxci0m6st5PC1U67q 6FdRgc7HGPP7DF/FaK/f0cWfoJ+ZjAfbcmtP5i/qUasNowuJ11SfJCK8qdGxq6HB8Y5C RWCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690402944; x=1691007744; 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=wk8YN2z9DygnTN7wIkQ/drKhQeRLfAOWaFSkpwIJ9VA=; b=c3ruFZbeh1MjbhJSaB+I70UhLkMilT7PdeXlxeF+S1wySHrT8r4QzJ4+rP+5l0t1Lp t202wY0pumVtuiiFjGeqszqynSx2S5I8v+2EYC1ZDzuaLgGYlza8ys7EIV/NTBPgVn+x +/LNEPwwkXb0v6HsqogtVpDy3uzskpgzx866ATQG+9mGFVHkgIovC7K7448DQDZesHW7 8hwQFSIA5JwhE4xHUXRpaC63Iq6GLZPg7AX+ALJB6yOb2QMbRrRCJbRMjgfafMMIApZh y/1QiQf8XqiyYvP+Vh8c7M+4g4UnoaAVRa+IFKhPy57h0rUCU+f/djLHLIuYXU2F2vy5 iZrg== X-Gm-Message-State: ABy/qLYy+IR0hpIy/0PE2kv0fIW+TFsDpehqoWPdwHwhcSA/QNNHwV8P QcT5f8Uunvrol/iJssCpzqJGkTiyqpI= X-Google-Smtp-Source: APBJJlHa4e7bNU/FXY+wuV4M+6WYSA4uQsVmjVu+paqFG49PZpexPl+XQpMgzwVCSNNiruIZErv3dNdZQXc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:cf48:0:b0:d06:1a77:7d2 with SMTP id f69-20020a25cf48000000b00d061a7707d2mr18632ybg.13.1690402944082; Wed, 26 Jul 2023 13:22:24 -0700 (PDT) Date: Wed, 26 Jul 2023 13:22:22 -0700 In-Reply-To: <711f74d6-fe15-6bd4-a9b9-c4f178d95bf3@redhat.com> Mime-Version: 1.0 References: <20230718234512.1690985-1-seanjc@google.com> <20230718234512.1690985-2-seanjc@google.com> <711f74d6-fe15-6bd4-a9b9-c4f178d95bf3@redhat.com> Message-ID: Subject: Re: [RFC PATCH v11 01/29] KVM: Wrap kvm_gfn_range.pte in a per-action union From: Sean Christopherson To: Paolo Bonzini Cc: Marc Zyngier , Oliver Upton , Huacai Chen , Michael Ellerman , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , "Matthew Wilcox (Oracle)" , Andrew Morton , Paul Moore , James Morris , "Serge E. Hallyn" , kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Chao Peng , Fuad Tabba , Jarkko Sakkinen , Yu Zhang , Vishal Annapurve , Ackerley Tng , Maciej Szmigiero , Vlastimil Babka , David Hildenbrand , Quentin Perret , Michael Roth , Wang , Liam Merwick , Isaku Yamahata , "Kirill A . Shutemov" Content-Type: text/plain; charset="us-ascii" X-Rspamd-Queue-Id: 33CBD180014 X-Rspam-User: X-Stat-Signature: dieqqsp4wtezk7rsjmemenoik3gf17ox X-Rspamd-Server: rspam03 X-HE-Tag: 1690402944-466076 X-HE-Meta: U2FsdGVkX1/mRDLPUdtTvfl2dZ/1tRQGRZvK/6ZoiAjpnpr7clvJUfD46oVJEt+yXwgwI8N7INbgu9slI/q4mNA7r9QJpM7M7PGkrFjrwEmxQnPBPWv/aZ7m/reaaLBfOAV1WhLbKpBxJ/aMQvFD9EQLK9eEtSwxtglev9SgpERvoJM/A9fQYI/Bhp6Y9VEZYD3Zf9tVJwfNgLUQqfr5ufoBLOOJ9RC/jr9L2qCysHtAeTY+izmluyoqFAcAhYw8TVDJ3Mm95tCSQZFiXj2fGtzSl/Ncfvj9c91vDnnzU8LVPyVVp4Hb+4CLae8mqj+f5Fs3UoIYd1c77Nu8bEP3xjaX0QtVHG6yLGpyyec32/QI6gO6Ku5fRmEGAEndu00QG1mCftHyhxJkPeVMSyw1yOECXudyrPOAcU80WeI+oheUbV8paRsbz6kV2a8MRYDySwGt5146bxiV5lVeseHhet3IG08G5AyShq2sxYcrsO5ZRTxwFOzJMtSyvQGtSmdDygxgCK0KvobyWWsUbpK7tkhi8vTPx95wC+TchyG12uvytqi3P1r7LGHI0NgWp6iKF4pqr01psd0G57zPRvsXLETg5rCbElY+yU8qJWDh+vTUivK+IZn4/ITMJ6PMs5duHit2fjosMwEYBDMhOCkpuG5KSW7td6un5MqJ2H76pLxmReoKEHFWUOvRBsvHLDmOMcH1F70EqieCT+EZRbeBi5MrGEjWh9MB6u5toDNbIFviW3X/wfgTZQopO5CHgBcmtY8pX/1s7bSk7qhAoQFsVMNiP3ju2d1A8y1JeyweAWg0xtFnIRQW3BUJ7NnmNI+bttTSnRVOeci6tZVJvjI6trWMNCa7VeDdmenrZD230aLpCT27IzGCt5mUfaUblE8j1voJAW7xkSfj3rjxinW2yn7MT72CNyt8ar+8Bx7JtfsiXKtqrSQm4e0jxlJQdIL6cU3Pe7H6+Qg1Wot19BC kBRuZo5d iffA64+ZLsfd+Mtcz5fa1+GpgxziGW89ivvHZEfGH3wHRgyqzOSvE8ddD211ORVNOu9VgKHSXhX290MvO95PAHoym4D94sbPpCFU1fBt8MxWGu0gcQ3G/haXfU4izqCs8HgRHNcJEkQyJ0+YwDVQEGP259OHkm2fFuQJvuCBGme7GimyYwmyA6VTZEm1kO2PfJuIBiDFscyLvs19/US+w7IQ7xYHej802GG1p+QUxKS9GN6fzvAc2bJ7SPLD/bmPsXu2PgzZNxgkcb3X1Nb3beCY9/+mg8/mUT2GPbhB1PRxUuq6qZtKswA1BEBO0XbIEw2Gg+F4zhPDrpdCvlNq1SF9l0lj7fohYdnpIi3KUZ+57n45BNlA3QxCh8iMP0kT3rfvNNpa71jyTu/u+XVc1JigrJCzvhfZp6i6RPSz9u+1Ta9Q+MPDkOVwg/45O+8KmF1IUFj6YAJG0lrpFyT+F1bs6ERh2lS8tg1lM9uecylJZtNAQ/qRdpINluCr+x9maW480/vuUUACwitrNeGUTJ3fwAaetoJduzV6yxG1X+f8dOCEM3haHPvAfGw4pCl8Mwq7jD+/KwETDuHfBtgZ5+CMyvV6HJnEDgV0BFYW69EZhl/5LckoSsu/EI/Dcd6RN4DuWtcj8CxJdISitp7qvWF27+0rYj1TgLu5Z8iz73UuAmHLNjFwzwBtPAVl6Q8cr+ZOZQfDC3P0yKNk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Jul 19, 2023, Paolo Bonzini wrote: > On 7/19/23 01:44, Sean Christopherson wrote: > > + BUILD_BUG_ON(sizeof(gfn_range.arg) != sizeof(gfn_range.arg.raw)); > > + BUILD_BUG_ON(sizeof(range->arg) != sizeof(range->arg.raw)); > > I think these should be static assertions near the definition of the > structs. However another possibility is to remove 'raw' and just assign the > whole union. Duh, and use a named union. I think when I first proposed this I forgot that a single value would be passed between kvm_hva_range *and* kvm_gfn_range, and so created an anonymous union without thinking about the impliciations. A named union is _much_ cleaner. I'll post a complete version of the below snippet as a standalone non-RFC patch. diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 9d3ac7720da9..9125d0ab642d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -256,11 +256,15 @@ int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu); #endif #ifdef KVM_ARCH_WANT_MMU_NOTIFIER +union kvm_mmu_notifier_arg { + pte_t pte; +}; + struct kvm_gfn_range { struct kvm_memory_slot *slot; gfn_t start; gfn_t end; - pte_t pte; + union kvm_mmu_notifier_arg arg; bool may_block; }; bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index dfbaafbe3a00..f84ef9399aee 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -526,7 +526,7 @@ typedef void (*on_unlock_fn_t)(struct kvm *kvm); struct kvm_hva_range { unsigned long start; unsigned long end; - pte_t pte; + union kvm_mmu_notifier_arg arg; hva_handler_t handler; on_lock_fn_t on_lock; on_unlock_fn_t on_unlock; @@ -547,6 +547,8 @@ static void kvm_null_fn(void) } #define IS_KVM_NULL_FN(fn) ((fn) == (void *)kvm_null_fn) +static const union kvm_mmu_notifier_arg KVM_NO_ARG; + /* Iterate over each memslot intersecting [start, last] (inclusive) range */ #define kvm_for_each_memslot_in_hva_range(node, slots, start, last) \ for (node = interval_tree_iter_first(&slots->hva_tree, start, last); \ @@ -591,7 +593,7 @@ static __always_inline int __kvm_handle_hva_range(struct kvm *kvm, * bother making these conditional (to avoid writes on * the second or later invocation of the handler). */ - gfn_range.pte = range->pte; + gfn_range.arg = range->arg; gfn_range.may_block = range->may_block; /*