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 BE550C636D6 for ; Thu, 23 Feb 2023 17:40:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 51B306B0071; Thu, 23 Feb 2023 12:40:58 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4CC116B0072; Thu, 23 Feb 2023 12:40:58 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3932D6B0073; Thu, 23 Feb 2023 12:40:58 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 26C336B0071 for ; Thu, 23 Feb 2023 12:40:58 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id F118DC035E for ; Thu, 23 Feb 2023 17:40:57 +0000 (UTC) X-FDA: 80499272154.29.7D143D9 Received: from mail-vs1-f47.google.com (mail-vs1-f47.google.com [209.85.217.47]) by imf12.hostedemail.com (Postfix) with ESMTP id 3A86D4001A for ; Thu, 23 Feb 2023 17:40:56 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=GBvZr3FR; spf=pass (imf12.hostedemail.com: domain of yuzhao@google.com designates 209.85.217.47 as permitted sender) smtp.mailfrom=yuzhao@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=1677174056; 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=fo7AgQ2bct21yLgbxRinWk51c7Sq7xFh6y+K3L6/tTM=; b=aqJkX+rcP4SJG4qSs3pvetRh5gd7P+j9enliRMnoivIR4jQSD4CzswCuSC40ezG6n4uCwS QhrkupVdsC0ycKPL/d0avzSx6EF4hazo/HzWMx874sh9icp+Mxb9EsD4x1R8M8NM8cChVU vxWHCTcQjBgu337S/+TfqUMCaU8zfWc= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=GBvZr3FR; spf=pass (imf12.hostedemail.com: domain of yuzhao@google.com designates 209.85.217.47 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677174056; a=rsa-sha256; cv=none; b=Sm5b9SXsqsfKkTQhhRhUUx29bPfn3b8JC6NkdFLPex9cG7m1M4OoC4FmqcORLSplJ5naZd DiwSJunteW0vmm0d9cVg4kxBSlhJBR7+YuRt0WhxrkxyPfZLXA2zIs/DZrywwivT9tYgqd Id/zoW9S2oTbFML3KebZSCeRinhGZD8= Received: by mail-vs1-f47.google.com with SMTP id a3so3702874vsi.0 for ; Thu, 23 Feb 2023 09:40:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; 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=fo7AgQ2bct21yLgbxRinWk51c7Sq7xFh6y+K3L6/tTM=; b=GBvZr3FRKM3NOesy8gVSZUY02Sq7aNLAUfDffqGDvKf740Ehqv8nBE7Oi8FsVIN6J1 JkZFMoh+qCPEAzymwVHG0z1bBMx/KYg6SymF2QTZuOLraOywk3TLiLhpYUErfPSbomdU FdELqyo5w45/teVQSzUk24vH1+jYHCr88FiP2s8cZmTnhZ/p9c9I1VeiW+nF0kurnbWN zU2trwEFNYfVM5n6sxlFHrJwWriTlH1Yux1MJGSccWSU+BwuGOcqC/WBw7sP08hDnexG HURlUENH3H2vj5o3TSRbImMuccAeHy0C5gzNj/u3KE2SP/RtkjYxI2vBWBhCxO8K3UcO df/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=fo7AgQ2bct21yLgbxRinWk51c7Sq7xFh6y+K3L6/tTM=; b=XR5RML2Z8aFkEMiK4XJyKt6itLJ/7aFYEjfUnAr4RphQTcdHfQeh4sQQcMNk/tXY2S zCjhwaTRiD+N2ovSKhuz6IBuAhT6EcBwVbVbf4BEfEjflQo0Gh7Ym5RiVHdO/vMNvbc3 OkFZ5V9YSZa3DdCQfAQmv1aCYrkJHQZ+xSdF75nHtnEG2VlwtMFZa+lT8XNZKOx8FhBW bldy2k26X5kyW938isUlcrqXko1cVx2ONos4Q+Bsetjk34kEn/pxAt5BMR0xhGi7hQzx bec5AAO5Bi56/mGmjb6/dshLpaOYwwiIfAu6Kl3NoDbKrZ6R7jGCdugYJmJgAI/3cfZs oUOw== X-Gm-Message-State: AO0yUKWJj6etoXeOLIUA9cBHfRixOVcpVxQ7OkTMeHG3fhAePNBO2DsD M09pXmbf08LgNMMIhrLwDlroDFLo/F68z1WKShFGTg== X-Google-Smtp-Source: AK7set9wJbC1t128b6r/YElZqMz+AmeZGkkjsbu1lRieG6NYjdy/fQfX1OM7M72E6+9T9qCprQHwdxazlikgHRzNMDs= X-Received: by 2002:a05:6102:108f:b0:41e:d8b5:ee40 with SMTP id s15-20020a056102108f00b0041ed8b5ee40mr899877vsr.26.1677174055279; Thu, 23 Feb 2023 09:40:55 -0800 (PST) MIME-Version: 1.0 References: <20230217041230.2417228-1-yuzhao@google.com> <20230217041230.2417228-2-yuzhao@google.com> In-Reply-To: From: Yu Zhao Date: Thu, 23 Feb 2023 10:40:19 -0700 Message-ID: Subject: Re: [PATCH mm-unstable v1 1/5] mm/kvm: add mmu_notifier_test_clear_young() To: Sean Christopherson Cc: Andrew Morton , Paolo Bonzini , Jonathan Corbet , Michael Larabel , kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, x86@kernel.org, linux-mm@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3A86D4001A X-Stat-Signature: gqtzwpssx8u1t6ib9sayrg5x1ta7ghm6 X-Rspam-User: X-HE-Tag: 1677174056-894669 X-HE-Meta: U2FsdGVkX19AU7o/kmR8uiljmM0+7uucizFCUF1F3drXvs2rV6crvx3QM80WpCQL+oxN50m7Noc44t0oiSMTuuh1OB/ARExpwZd1ONMD42GvMZTrXRtozq2LgwLiSoWO9Kgw9dOF/UlxCcaXlJayVtdP94nDVBMr4UZ/jXO//aHroLLpa4egIrh3fVxAZCKipSPUaksEgwmrSfRfZP5msAa/uQtV6yyC1mRYZj+IFbc4G3rol0pY8NeyyasLGpyW/eB9dpLGMG2ZDhGkaCnv7Moqd1px7fJMBnTiUo5XWqRaBLqx0EvzS8nQJ6yj+eeWPb5CHAx/Db+jkWwYzw/4VvaQKC4tdIelLEOlmCgB6YJf0SrkGvD6wESwI83c9mMRADnD7eZjETQN+31lBAarygBTggqxB5q3sr2luQEjex7f3amNv5+ThRqT7LZh+yMXNWLhpmRMWfZ1sSQRVV7SrwSjXDav/dbX40OxTjpL+YryEyNMkk1n4lNhVUxlslOK9hjXTM5cOs8C6tdtgBCtOtdUNsxuycIat3UP87V38rdgQ9B9PR1YiQHKpbmF3iHR2KY/mO2fEZTiQB16htzAnJTjlrnIQ2aM0K7Wbbkrle7cFTrQr+RRuxQo8mhVFVidXvsu6nBCjfPViZ1L16ocxwuvRFEyzDgYoW06yJJjF0nzh9Vwmrn/1DyKLvgd7vy7XA8tU89vfhIn865+mecwZee9wNn+7CJyqLvE8OMGFxMfdjm348DAWylhqhguX5lAzat9Kt+rp3fekbvCDIiYoJTwIVADWtB+Atc5rNL8Bc8ReeldheuSfRPPuVefIDhjuS95lOLlMIwVB2Vpunj3P5Pi/WljB8yaXoecUthMELnLBu3mqe/a62rO8c2Yoaq+pU7n9Mw/1/8wx72pPtCuVYqs69PSnNahxdqUsJj9YauuueK601Is6E0KeM75+A3G/jHyViUijiwYOSbnihf i1s8K926 6/cCviSMS6rPUy+YdhmihOpHXC+xqRPvpcqIZY3fLoaien5N6mErNemT4v3QhznBwJc/G/EYkX7JiNBqik+LXS12KmWuk/4+1U/+pKHfoZ9/Qo+3Y5tf6lUfnUH3i+bxwN2981AzxepPpYN+KePn21sTIFiWdejrSPvAu0nfizU+3giTtUk7+kl+2QJaTRIfQzqWa0/U7Y4777ZB6+nuLvL3ilJIZq0Ie4/M1tmeLZZjZ86a2i2n+jvJzpVjCPKGp9Zrgv05Evf+xIxp4ngRaXfMGTqcmkmsy/nnIFnhszeFRYgQoPsgEwCQzBg== 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 Thu, Feb 23, 2023 at 10:14=E2=80=AFAM Sean Christopherson wrote: > > On Thu, Feb 16, 2023, Yu Zhao wrote: > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > > index 9c60384b5ae0..1b465df4a93d 100644 > > --- a/virt/kvm/kvm_main.c > > +++ b/virt/kvm/kvm_main.c > > @@ -875,6 +875,63 @@ static int kvm_mmu_notifier_clear_young(struct mmu= _notifier *mn, > > return kvm_handle_hva_range_no_flush(mn, start, end, kvm_age_gfn)= ; > > } > > > > +static bool kvm_test_clear_young(struct kvm *kvm, unsigned long start, > > + unsigned long end, unsigned long *bitmap= ) > > +{ > > + int i; > > + int key; > > + bool success =3D true; > > + > > + trace_kvm_age_hva(start, end); > > + > > + key =3D srcu_read_lock(&kvm->srcu); > > + > > + for (i =3D 0; i < KVM_ADDRESS_SPACE_NUM; i++) { > > + struct interval_tree_node *node; > > + struct kvm_memslots *slots =3D __kvm_memslots(kvm, i); > > + > > + kvm_for_each_memslot_in_hva_range(node, slots, start, end= - 1) { > > + gfn_t lsb_gfn; > > + unsigned long hva_start, hva_end; > > + struct kvm_gfn_range range =3D { > > + .slot =3D container_of(node, struct kvm_m= emory_slot, > > + hva_node[slots->node= _idx]), > > + }; > > + > > + hva_start =3D max(start, range.slot->userspace_ad= dr); > > + hva_end =3D min(end - 1, range.slot->userspace_ad= dr + > > + range.slot->npages * PAGE_= SIZE - 1); > > + > > + range.start =3D hva_to_gfn_memslot(hva_start, ran= ge.slot); > > + range.end =3D hva_to_gfn_memslot(hva_end, range.s= lot) + 1; > > + > > + if (WARN_ON_ONCE(range.end <=3D range.start)) > > + continue; > > Extend __kvm_handle_hva_range() instead of copy-pasting. At a very quick= glance, > I believe all that is needed is (minus sanity checks): Yes, will do. I do need to add one more parameter to kvm_gfn_range, because that's what the current kvm_arch_test_clear_young() needs, assuming that function is acceptable. Also, just a side note, from MM's POV, the following in __kvm_handle_hva_range() seems to forget to handle end =3D=3D 0, if that's possible? hva_end =3D min(range->end, slot->userspace_addr + (slot->npages << PAGE_SHIFT)); > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index d255964ec331..3296ae2cf6fa 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -544,6 +544,7 @@ struct kvm_hva_range { > hva_handler_t handler; > on_lock_fn_t on_lock; > on_unlock_fn_t on_unlock; > + bool lockless; > bool flush_on_ret; > bool may_block; > }; > @@ -616,7 +617,7 @@ static __always_inline int __kvm_handle_hva_range(str= uct kvm *kvm, > gfn_range.end =3D hva_to_gfn_memslot(hva_end + PA= GE_SIZE - 1, slot); > gfn_range.slot =3D slot; > > - if (!locked) { > + if (!range->lockless && !locked) { > locked =3D true; > KVM_MMU_LOCK(kvm); > if (!IS_KVM_NULL_FN(range->on_lock)) > > > + > > + /* see the comments on the generic kvm_arch_has_t= est_clear_young() */ > > + lsb_gfn =3D hva_to_gfn_memslot(end - 1, range.slo= t); > > + > > + success =3D kvm_arch_test_clear_young(kvm, &range= , lsb_gfn, bitmap); > > + if (!success) > > + break; > > + } > > + } > > + > > + srcu_read_unlock(&kvm->srcu, key); > > + > > + return success; > > +}