From patchwork Tue Sep 26 18:19:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Donnefort X-Patchwork-Id: 13399517 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 43B6CE7E654 for ; Tue, 26 Sep 2023 18:20:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=z/pTrRQGytWuWP2KftYKx71nDAk+tupSotglOAPS6Lw=; b=IXtNvosUGTYN+Rozasw1UePc4Y ZPSAQ9wU9Lg6B4TEm20kF8TzVKh1VJ0RNS/bKKvWLlySbXKcXJIlJc9gJ+33M5o1/09xqIOjew7HD u45u5MtkyPsY7Ku9hnovjdZDUq1MhPgG95iKwVqiT3O49AbzX8g1TUxVld0fwMxGRFmsTnvqVkZOI eyElpNEj6RlprKDFT8sllgLDWQIprPFps6b+jYIemWRlDYOWPV0ehEs4MQy+aXNmlxBFH8gXbCuXx tOe3MyxkkLSTXsVrUXAAJ9LVFcmd7OW8IJ1xukfh7lL4YAXPstsZrgLajdS6eoP+mmc7KC5JYKGRd LIeRLMmg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qlCf1-00Gpgt-2E; Tue, 26 Sep 2023 18:19:51 +0000 Received: from mail-wr1-x449.google.com ([2a00:1450:4864:20::449]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qlCez-00GpfT-1F for linux-arm-kernel@lists.infradead.org; Tue, 26 Sep 2023 18:19:50 +0000 Received: by mail-wr1-x449.google.com with SMTP id ffacd0b85a97d-31fe49c6bb1so7119990f8f.0 for ; Tue, 26 Sep 2023 11:19:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695752386; x=1696357186; darn=lists.infradead.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=DGKOexKeYx3KIrtoFBMpiZrvvlVOfn3NLusWWIToTBE=; b=Sdz8qTX0/83Mt7gODR2aR0otgyb0tBtkkw20by82VRsKQj3a3s+wYTaWn89A2b5PoR TxtLsWs7bRLTeeIJkaBVDFe4hjpuydSgjIwZuv13wo/wTPpNhERX60TdPwQO/JEfR7h7 +zItl0IYzRvQm4qOerKKWWdoA7YRw3ffa6CC2srrCDyJOI61RTI0FBkzdofx4V+JLRDI b4sH0RsKUemXdqCahzYvxqzSgFfDynkssdo8mvEnBDPElMEfpXUory5j6SmFLXIW2yEl d+O7bAd0wPrKgS6YD2i+k1keaH1u+3U6Wpl0crBKD2N9Yk0ZJfsPPs871DpkoDH0oZ4+ QEhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695752386; x=1696357186; 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=DGKOexKeYx3KIrtoFBMpiZrvvlVOfn3NLusWWIToTBE=; b=MCqKr8z58legxtCAZEadp6YB0ogWxObTs3HKmGFk3dEw+DAASzAE2XxMMCt3Ivfo5Y P2lv78xX41thk2V0uH+oB2B5i+8gwm47R/dLXiOXX8UVS3HnbAhyNURbHPQXkHSku6h+ NwvIMyXMmjkrWdDZSnZkkBCyKMBct8SP3cLVojBA+LETi5wk70QmjPvyHr2fOFfcNq9s qkIE9V6j4VyHi7wwF2BbBOfSwgNg+Q2+cUl2i6V8+3QgVs374+E3ce+l/7eGpqDWC1Kr YW/sP+ePHz4oiAVL5Ws01pRJfL/K4Bc9vNPgjEogdhN1FzufF7jgKzjPml/GBRLE2jnx ze3Q== X-Gm-Message-State: AOJu0Ywo0pjM5VfwIVPrr8iL4DYegnSL2OT3mhGu8hFmrQGd3VhTiduB kLA8hPU6oKLy85LlAZNVUVcya4OQ1d3Z1CsI X-Google-Smtp-Source: AGHT+IEqc0pyzkMuy8FapsV9SHMmWLYEASvTHx0NsjF40Te7/goAR7lbuc+BSqE3nTWIs3RuYvucpCcOwRI5yu9u X-Received: from vdonnefort.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:2eea]) (user=vdonnefort job=sendgmr) by 2002:a5d:6446:0:b0:31f:b4a3:db12 with SMTP id d6-20020a5d6446000000b0031fb4a3db12mr55390wrw.6.1695752385720; Tue, 26 Sep 2023 11:19:45 -0700 (PDT) Date: Tue, 26 Sep 2023 19:19:31 +0100 In-Reply-To: <20230926181932.1650692-1-vdonnefort@google.com> Mime-Version: 1.0 References: <20230926181932.1650692-1-vdonnefort@google.com> X-Mailer: git-send-email 2.42.0.515.g380fc7ccd1-goog Message-ID: <20230926181932.1650692-2-vdonnefort@google.com> Subject: [PATCH v1 1/2] KVM: arm64: Do not transfer page refcount for THP adjustment From: Vincent Donnefort To: maz@kernel.org, oliver.upton@linux.dev Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kernel-team@android.com, will@kernel.org, willy@infradead.org, Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230926_111949_428570_ED292F42 X-CRM114-Status: GOOD ( 11.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org With folios, GUP affects a refcount common to all pages forming the THP. There is therefore no need to move the refcount from the tail to the head page. Under the hood it decrements and increments the same counter. Signed-off-by: Vincent Donnefort diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 587a104f66c3..de5e5148ef5d 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1295,28 +1295,8 @@ transparent_hugepage_adjust(struct kvm *kvm, struct kvm_memory_slot *memslot, if (sz < PMD_SIZE) return PAGE_SIZE; - /* - * The address we faulted on is backed by a transparent huge - * page. However, because we map the compound huge page and - * not the individual tail page, we need to transfer the - * refcount to the head page. We have to be careful that the - * THP doesn't start to split while we are adjusting the - * refcounts. - * - * We are sure this doesn't happen, because mmu_invalidate_retry - * was successful and we are holding the mmu_lock, so if this - * THP is trying to split, it will be blocked in the mmu - * notifier before touching any of the pages, specifically - * before being able to call __split_huge_page_refcount(). - * - * We can therefore safely transfer the refcount from PG_tail - * to PG_head and switch the pfn from a tail page to the head - * page accordingly. - */ *ipap &= PMD_MASK; - kvm_release_pfn_clean(pfn); pfn &= ~(PTRS_PER_PMD - 1); - get_page(pfn_to_page(pfn)); *pfnp = pfn; return PMD_SIZE;