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 B323BC4332F for ; Wed, 1 Nov 2023 12:46:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E2A398E000A; Wed, 1 Nov 2023 08:46:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DB3BF8D0040; Wed, 1 Nov 2023 08:46:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C2D598E000A; Wed, 1 Nov 2023 08:46:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B1B778D0040 for ; Wed, 1 Nov 2023 08:46:42 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 7E054A0CAF for ; Wed, 1 Nov 2023 12:46:42 +0000 (UTC) X-FDA: 81409359444.14.21CECC8 Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by imf23.hostedemail.com (Postfix) with ESMTP id BBDEE14001B for ; Wed, 1 Nov 2023 12:46:40 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=MoXqdS9p; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of tabba@google.com designates 209.85.219.44 as permitted sender) smtp.mailfrom=tabba@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1698842800; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mygXGcRJ5YlWP61Tr7KN5KWyfhmOoXTRmQYYFZqOKKI=; b=hLGi/4Bqu+jgX7QURjecUbZXwxzV/huUprxkzVOhHBk/APKuq5h9HeR7K8uaFbDEJuOryG AcULJfhC+LkEAKB+R2eudpLSKnEZWn45TeWiE+anJ7P5XnXqc89q94eMxmtR6K/1hnf7Vb RXv1krrjwgYzRFhrp4aDB4S2fsgUsIY= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=MoXqdS9p; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of tabba@google.com designates 209.85.219.44 as permitted sender) smtp.mailfrom=tabba@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1698842800; a=rsa-sha256; cv=none; b=QoQ2HnV0+QfPG7hjYEdA+tPj3pUZjjOocd1DniMjELkQ4w4uA9qz8heyCpuzSGOIP3KXq1 le1cOO8sP6d6ns7b306hMK8z9KyCOC4uThSiaNo9CftJguEcyTtqkgPYqV68AyqUQw/mUt DZvpqLxTzR7CTiKPDbIhRBHVU0Kuzuw= Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-66d2f3bb312so43083026d6.0 for ; Wed, 01 Nov 2023 05:46:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1698842800; x=1699447600; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=mygXGcRJ5YlWP61Tr7KN5KWyfhmOoXTRmQYYFZqOKKI=; b=MoXqdS9pvEXhJZVf+z67KmQAvB21/psrvRwSAIf/brVrwdDmSwc4nZkBiLSCloOWPV lYvFpHgsG849y9hQliPURzPSaBFPgHvTyw3AgkYkrS/Ver33RrOSg6MZCDF+HYHI1bOX MUqEeupe26685u/0lR+uS29htQJMMlPsWpdF0LjVcqGNDVGFOQXg0dUGn3kDqOb4kSLZ qWCBg/qnqAR6SxutBwaQ4v0UWjsCVWpSJtYFRbRfrMHb53gqNiPUBIe5sgCFpjf7W/QA rRfX5pf6KvrxFLawTP758L+c5W3wx5W/CpoPU57xljUpjEJzqYPl4QQtW5zvOJTbC8Qt 1qEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698842800; x=1699447600; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mygXGcRJ5YlWP61Tr7KN5KWyfhmOoXTRmQYYFZqOKKI=; b=ao4Mt0GS6nLjhHIf5TFvDhXe/efQGATtnbu3WUdu2cTahRhh29SVTT+JqfexcxQL35 XrNAT8xeqOFiQHq0zS3PGLs6k7ln0tsowI+4wq4Hm3/QO3VZ/PIvS3AwrX7LAomgm2RY 470B4CR66dhnLNPIuA0dIA2MihhjI0iwwdMoeY/qtAdeVCEfuVbdUiJn4NKJIhs1skGz sLX0R+VRYEdzfOmxUNG1PpvsTd62QxZ/MrJL1m+s4Iodr1TfKJE+jyRr77hKncxP+MEh T6KHXdi1el/d6d3ozB3E/DfbLyc/XqRGJUoZCX3Lra4dt1WuBTAxhtVChKzepaF29f+K gTJQ== X-Gm-Message-State: AOJu0YwiQytcRBW3nc154umPLVxejQNO9FjlSTiXowvu8xQ0mUahSmbi 09KesLHsWgcr3/t0qxJhwIEWMWn4AlL+h+hm9ml7YQ== X-Google-Smtp-Source: AGHT+IHd9N8dL6zdz3IA97hhnoDYG1Yv2Mx5veJZKoCg3Vt6EBcnFz3FSACXzGNwepp4FUZ865yy59BtQyGtgdViYUM= X-Received: by 2002:a05:6214:f6c:b0:671:739e:e2fa with SMTP id iy12-20020a0562140f6c00b00671739ee2famr13258176qvb.59.1698842799599; Wed, 01 Nov 2023 05:46:39 -0700 (PDT) MIME-Version: 1.0 References: <20231027182217.3615211-1-seanjc@google.com> <20231027182217.3615211-2-seanjc@google.com> In-Reply-To: <20231027182217.3615211-2-seanjc@google.com> From: Fuad Tabba Date: Wed, 1 Nov 2023 12:46:02 +0000 Message-ID: Subject: Re: [PATCH v13 01/35] KVM: Tweak kvm_hva_range and hva_handler_t to allow reusing for gfn ranges To: Sean Christopherson Cc: Paolo Bonzini , Marc Zyngier , Oliver Upton , Huacai Chen , Michael Ellerman , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexander Viro , Christian Brauner , "Matthew Wilcox (Oracle)" , Andrew Morton , 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-kernel@vger.kernel.org, Xiaoyao Li , Xu Yilun , Chao Peng , Jarkko Sakkinen , Anish Moorthy , David Matlack , Yu Zhang , Isaku Yamahata , =?UTF-8?B?TWlja2HDq2wgU2FsYcO8bg==?= , Vlastimil Babka , Vishal Annapurve , Ackerley Tng , Maciej Szmigiero , David Hildenbrand , Quentin Perret , Michael Roth , Wang , Liam Merwick , Isaku Yamahata , "Kirill A . Shutemov" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: BBDEE14001B X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: q36t6c4enybqu4bmmuomtdkz945obxc5 X-HE-Tag: 1698842800-828437 X-HE-Meta: U2FsdGVkX1+w1twlLSn0nplL8QnxGTcLSPOuwO1u+yFhzY29SGpOl7x5rHr56LdrwcE02FaCR1aUGeJuN3FhE5zLLVKI1DymlfzmiDxHrcjh4UNI3dvgugQrQTVLVw+hIZz+YbG1ljDTPzB/b2fSzXXgpHirPlDo8FU8nkkpOkNRVgOID/OUnFyJNTUsNfzg2vYHkCGzthw0yvPRgZlgUiOmhpoZpHx7Q3t6sGkDw6+UFijQwyrYExX+JVbHddCtK5CfM8nSr4YHLYB/za+LF9WVsVsIFueCUuh25krhzclzkoeKf93wvOJc0EUJ08PlVaC1ZYdKbl4/lRVVf6qlZ+sxMRmc44aLAKE2Lr3c/uPB5djheSxsR/lEc4WHqRE+pmSISCyMRSJxoVaAyC1iXUZ6UEJ+DLnIOv5hTO4sHg9oDCj7+JYEKytUKipJJqbDJXsragLiz++nTBVL5kCIhMmJW6wmx7Fs8hsoqwT6HuFGaKvpKHXQY/3Bros1BB5+3UjNjSccHpHn05OT7oTbgVvNYlPlbt6mV6zmxrrp0Fuo59nAadGS9Lz2xkhSEV1P+3zqnmdcltuhw0APF9qT4NFTIglsIDMNbD3++0jhPK/j+F8JsvN6Bpqem6jSNhfoxpIVZORykWpI4AC+hPLvHYjo1EwEHfQbYje+J7u+f2xGZNqrX0jCfxuRHQBfgr9yvP/4l33ZcCdFAhyCwWWoQCrQ9nINWq1LQij9A4rnhGY81lZz2zSZcs1mcGgz7ijUX+8n361owi2gFsFA4BZC3HCedbKZL1liTZ8VILZ4qoo8CugKffqiFLSyDByQagG/wLLmtm0Psrtk0gfbu/OivsWkk6/qCNtRcLEK+ruUppbqWH7F0aPic8MrEftylw0YDt1U290f/1wBJpa+Qq2YDGHU2ZvffhldHggWt2oIVqmzLj4kPwssGFaedRliWBUoQJygWKgCIiyDC5f5iO+ 7aQI3k/f jiSpqNXF64Sr0UksUgcl9lzmLwhU30k5zt7HQDISOR6KwKvssRewFV/zGEIMMuTqxoCQD7Eebfrh/hQCV3H32bX8SZlTSBx49hEfLbzXHtf59XlXYYETHCkPTPH9ntmNGAYBiQ5rf9sM6BU6QNSzMrqJ1dCu0nzCkdW9vFqcNEn3XnY/6icHYRCWeHAPVHKBA2nSlk2lhTdfJG+qsDYWzXu3ba7L3n9wFK2ATLfYqCEcudN3LKeHKxa76Zvy5Ga/WdzmLwY2f+AyZwIoxViRxLHQmFilHrTGeZ1WStoaTZm0NBvM3pxvwWaKo/FhCAvnbStzh3/AGqSRWRXATDML09SEwHs7PUmER3I8VJB0okfvFCYx2PTeoJXFf2Aeq6kx9oIQmZM1hdb8R9069FsJ3ePjFVDt2nDalx2+B 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: List-Subscribe: List-Unsubscribe: On Fri, Oct 27, 2023 at 7:22=E2=80=AFPM Sean Christopherson wrote: > > Rework and rename "struct kvm_hva_range" into "kvm_mmu_notifier_range" so > that the structure can be used to handle notifications that operate on gf= n > context, i.e. that aren't tied to a host virtual address. Rename the > handler typedef too (arguably it should always have been gfn_handler_t). > > Practically speaking, this is a nop for 64-bit kernels as the only > meaningful change is to store start+end as u64s instead of unsigned longs= . > > Reviewed-by: Paolo Bonzini > Reviewed-by: Xiaoyao Li > Signed-off-by: Sean Christopherson > --- Reviewed-by: Fuad Tabba Tested-by: Fuad Tabba Cheers, /fuad > virt/kvm/kvm_main.c | 34 +++++++++++++++++++--------------- > 1 file changed, 19 insertions(+), 15 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 486800a7024b..0524933856d4 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -541,18 +541,22 @@ static inline struct kvm *mmu_notifier_to_kvm(struc= t mmu_notifier *mn) > return container_of(mn, struct kvm, mmu_notifier); > } > > -typedef bool (*hva_handler_t)(struct kvm *kvm, struct kvm_gfn_range *ran= ge); > +typedef bool (*gfn_handler_t)(struct kvm *kvm, struct kvm_gfn_range *ran= ge); > > typedef void (*on_lock_fn_t)(struct kvm *kvm, unsigned long start, > unsigned long end); > > typedef void (*on_unlock_fn_t)(struct kvm *kvm); > > -struct kvm_hva_range { > - unsigned long start; > - unsigned long end; > +struct kvm_mmu_notifier_range { > + /* > + * 64-bit addresses, as KVM notifiers can operate on host virtual > + * addresses (unsigned long) and guest physical addresses (64-bit= ). > + */ > + u64 start; > + u64 end; > union kvm_mmu_notifier_arg arg; > - hva_handler_t handler; > + gfn_handler_t handler; > on_lock_fn_t on_lock; > on_unlock_fn_t on_unlock; > bool flush_on_ret; > @@ -581,7 +585,7 @@ static const union kvm_mmu_notifier_arg KVM_MMU_NOTIF= IER_NO_ARG; > node =3D interval_tree_iter_next(node, start, last)) \ > > static __always_inline int __kvm_handle_hva_range(struct kvm *kvm, > - const struct kvm_hva_ra= nge *range) > + const struct kvm_mmu_no= tifier_range *range) > { > bool ret =3D false, locked =3D false; > struct kvm_gfn_range gfn_range; > @@ -608,9 +612,9 @@ static __always_inline int __kvm_handle_hva_range(str= uct kvm *kvm, > unsigned long hva_start, hva_end; > > slot =3D container_of(node, struct kvm_memory_slo= t, hva_node[slots->node_idx]); > - hva_start =3D max(range->start, slot->userspace_a= ddr); > - hva_end =3D min(range->end, slot->userspace_addr = + > - (slot->npages << PAGE_S= HIFT)); > + hva_start =3D max_t(unsigned long, range->start, = slot->userspace_addr); > + hva_end =3D min_t(unsigned long, range->end, > + slot->userspace_addr + (slot->npa= ges << PAGE_SHIFT)); > > /* > * To optimize for the likely case where the addr= ess > @@ -660,10 +664,10 @@ static __always_inline int kvm_handle_hva_range(str= uct mmu_notifier *mn, > unsigned long start, > unsigned long end, > union kvm_mmu_notifier_ar= g arg, > - hva_handler_t handler) > + gfn_handler_t handler) > { > struct kvm *kvm =3D mmu_notifier_to_kvm(mn); > - const struct kvm_hva_range range =3D { > + const struct kvm_mmu_notifier_range range =3D { > .start =3D start, > .end =3D end, > .arg =3D arg, > @@ -680,10 +684,10 @@ static __always_inline int kvm_handle_hva_range(str= uct mmu_notifier *mn, > static __always_inline int kvm_handle_hva_range_no_flush(struct mmu_noti= fier *mn, > unsigned long st= art, > unsigned long en= d, > - hva_handler_t ha= ndler) > + gfn_handler_t ha= ndler) > { > struct kvm *kvm =3D mmu_notifier_to_kvm(mn); > - const struct kvm_hva_range range =3D { > + const struct kvm_mmu_notifier_range range =3D { > .start =3D start, > .end =3D end, > .handler =3D handler, > @@ -771,7 +775,7 @@ static int kvm_mmu_notifier_invalidate_range_start(st= ruct mmu_notifier *mn, > const struct mmu_notifier_range *= range) > { > struct kvm *kvm =3D mmu_notifier_to_kvm(mn); > - const struct kvm_hva_range hva_range =3D { > + const struct kvm_mmu_notifier_range hva_range =3D { > .start =3D range->start, > .end =3D range->end, > .handler =3D kvm_unmap_gfn_range, > @@ -835,7 +839,7 @@ static void kvm_mmu_notifier_invalidate_range_end(str= uct mmu_notifier *mn, > const struct mmu_notifier_range *= range) > { > struct kvm *kvm =3D mmu_notifier_to_kvm(mn); > - const struct kvm_hva_range hva_range =3D { > + const struct kvm_mmu_notifier_range hva_range =3D { > .start =3D range->start, > .end =3D range->end, > .handler =3D (void *)kvm_null_fn, > -- > 2.42.0.820.g83a721a137-goog >