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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71764C433F5 for ; Fri, 29 Apr 2022 01:04:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353735AbiD2BHv (ORCPT ); Thu, 28 Apr 2022 21:07:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353685AbiD2BHk (ORCPT ); Thu, 28 Apr 2022 21:07:40 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 57C30BC847 for ; Thu, 28 Apr 2022 18:04:24 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id s185-20020a632cc2000000b003c18e076a2bso1193575pgs.13 for ; Thu, 28 Apr 2022 18:04:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=+c4kuAeaVpJbT9SeG2Y2z8NNvzs3pnH/Z0LBmJvTN5A=; b=g8Kk4kb1zRPfAmwfq190ewZE78OEB/To/C1WROecCUOzvO+V3UkZ1lKuMx7SdGTej3 A5PnrAq/SMMG4W54y3jV6ul9BcQxuAKrGsYxCmLg8LeFDGumYlz2lMSdDRes2OQ5L/+8 HWDw6PMMIPs1r0e93ntUbRaqWL+r/gjkFryZvUimq2p2qW0GrDzjbs0JON4ZYjiz/wWm u9SS5HdqDlWJJE/5TbHy6oAH6xR/e3CeXlUjDUg39QHOukwib533BNft8OdFDVXbPoOb aB/3MryJse88GOvZg3DQXk03/oD2Sss8lvAgxrorp0B9irNC+wYPi2eWLYEHaaPwnr7S vNww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=+c4kuAeaVpJbT9SeG2Y2z8NNvzs3pnH/Z0LBmJvTN5A=; b=ZSQeoaiVL4oHZ5LabpfbaDaGVVSspcPvCUquy/e2d/wJEI0CNbF8ux3MrGs8Pkj0qM T27B/KgDRyUHPMczyx/CilSHeOYrdX1enE7vjKJVPwXspDN18uwzZ8o2jQ1jn76y+YpK clBrJZw//ppcqLxiNE8qiWcD/4H7kHiy88Ul96e/ttRAa49Tnejb61C9g4xfo2OF5frM lzCz6SJPnRQBOWmguVoS8NIMJXOopwBjHv9FZ81s90ZlDIogpDZdHJoEXyhunsUj+3vr u396t9eHbytNWQRMYFSMfRjlk4GcMHnkyFgxegIN94TbsCrK60bAqw5yLJU1iXR7t/jx CD8w== X-Gm-Message-State: AOAM531cB+jcuVD+vupM8E/gy/KhA5bxXAbJf6ra3MA2w4T1Z9za8OfN X83cUKTSST6MO3MU8fMCyWDxGratdgY= X-Google-Smtp-Source: ABdhPJyTGZSZaFMkbQsKd4UoidwtkFlyObqzGBxtSKoDdfJjb9PJPZZV4vy+Y+PEPbINE0XzKfUaVj73ldU= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a17:902:dacd:b0:15e:75e6:da26 with SMTP id q13-20020a170902dacd00b0015e75e6da26mr1810973plx.61.1651194263858; Thu, 28 Apr 2022 18:04:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 29 Apr 2022 01:04:09 +0000 In-Reply-To: <20220429010416.2788472-1-seanjc@google.com> Message-Id: <20220429010416.2788472-4-seanjc@google.com> Mime-Version: 1.0 References: <20220429010416.2788472-1-seanjc@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH 03/10] KVM: Don't set Accessed/Dirty bits for ZERO_PAGE From: Sean Christopherson To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Don't set Accessed/Dirty bits for a struct page with PG_reserved set, i.e. don't set A/D bits for the ZERO_PAGE. The ZERO_PAGE (or pages depending on the architecture) should obviously never be written, and similarly there's no point in marking it accessed as the page will never be swapped out or reclaimed. The comment in page-flags.h is quite clear that PG_reserved pages should be managed only by their owner, and strictly following that mandate also simplifies KVM's logic. Fixes: 7df003c85218 ("KVM: fix overflow of zero page refcount with ksm running") Signed-off-by: Sean Christopherson --- virt/kvm/kvm_main.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 154c3dda7010..46d12998732e 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2828,16 +2828,28 @@ void kvm_release_pfn_dirty(kvm_pfn_t pfn) } EXPORT_SYMBOL_GPL(kvm_release_pfn_dirty); +static bool kvm_is_ad_tracked_pfn(kvm_pfn_t pfn) +{ + if (!pfn_valid(pfn)) + return false; + + /* + * Per page-flags.h, pages tagged PG_reserved "should in general not be + * touched (e.g. set dirty) except by its owner". + */ + return !PageReserved(pfn_to_page(pfn)); +} + void kvm_set_pfn_dirty(kvm_pfn_t pfn) { - if (!kvm_is_reserved_pfn(pfn) && !kvm_is_zone_device_pfn(pfn)) + if (kvm_is_ad_tracked_pfn(pfn)) SetPageDirty(pfn_to_page(pfn)); } EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty); void kvm_set_pfn_accessed(kvm_pfn_t pfn) { - if (!kvm_is_reserved_pfn(pfn) && !kvm_is_zone_device_pfn(pfn)) + if (kvm_is_ad_tracked_pfn(pfn)) mark_page_accessed(pfn_to_page(pfn)); } EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed); -- 2.36.0.464.gb9c8b46e94-goog