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 32AE1C43334 for ; Thu, 23 Jun 2022 10:25:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 737ED8E0143; Thu, 23 Jun 2022 06:24:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E8868E0115; Thu, 23 Jun 2022 06:24:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5AED78E0143; Thu, 23 Jun 2022 06:24:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 48C9D8E0115 for ; Thu, 23 Jun 2022 06:24:59 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 110D9215C8 for ; Thu, 23 Jun 2022 10:24:59 +0000 (UTC) X-FDA: 79609117518.06.9BA05F1 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by imf16.hostedemail.com (Postfix) with ESMTP id 21B09180033 for ; Thu, 23 Jun 2022 10:24:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655979896; x=1687515896; h=message-id:date:mime-version:subject:to:references:from: in-reply-to:content-transfer-encoding; bh=SfMNjDTXpdpTEG8SwqU5sfdcfOKk5la9f1bmwwHuL3w=; b=ZIbcFOU6Xogk1ZJt0S4VgEueiJ6QZNdn0WkajoyWA9jrJWOy2aNqZT6u cxw8l/9F8u8LgxVI0Pae3I+p+RbttrzKtOtCzozgwlAlydYY/4/l8I/+d XMMPTP0awjrEzVQ/agKyzbPAQgncvntPFlY2a+pwdTPiKYEyQrMATMHcB s06gNRJ43iWZMvMKUVjpFIncAUSwITFS+0gaVkMou3hUBpwUXGmOim8mK 1xKjkm9X3jqg1hWl5YSheLONoE6JVB0KafFQ57Cy32kKPk/8LYhmmy9Jq bVUUIBGH2kgHZT67JVCqDbF35Mq5ME3gWaY7sVagqXSNv/5CIKgEGQkc1 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="281759918" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="281759918" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 03:24:52 -0700 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="644671879" Received: from wterliko-mobl.ger.corp.intel.com (HELO [10.249.254.158]) ([10.249.254.158]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 03:24:50 -0700 Message-ID: Date: Thu, 23 Jun 2022 12:24:48 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH] mm: Split huge PUD on wp_huge_pud fallback Content-Language: en-US To: "Gowans, James" , "linux-mm@kvack.org" , "christian.koenig@amd.com" , "linux-kernel@vger.kernel.org" , =?UTF-8?B?U2Now7ZuaGVyciwgSmFuIEgu?= , "akpm@linux-foundation.org" References: <6f48d622eb8bce1ae5dd75327b0b73894a2ec407.camel@amazon.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= In-Reply-To: <6f48d622eb8bce1ae5dd75327b0b73894a2ec407.camel@amazon.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655979898; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=P0aK/UsbcvW5Vk3gc0SQQjw9HdRR2URIvgiqqvzwvAI=; b=CaqTV9HQmDBZbnCZVJgyEvEWZGD1QJhR5FMDDy3VipoplQePM//5Yr52rdD1+bAKAduMwF Kl+vbjXVSzxnbpS4iB5yU0GwXI8OrLo8cjjasixVYPG0wDOepLpb4phuyTtjENZhuH1crC INnjjtFmyUgr9deOAu/FxHAN8ZAWzjE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655979898; a=rsa-sha256; cv=none; b=6mrYo3Z+2tv8WmO/HxFOi805rPxEiSsY7KLQc4Lk4XSGA0/jvhGQJWq+DRBJRImufajpJW wNy8Ik+W6yJM1zbylZgapRN+RL8qNA6CsQen6akGwzlRV2R/x1EQ9e8qm9VC5qwpno3QoK fCbST+1Sa0t9NhoayzatgmT7+4llvTo= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ZIbcFOU6; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf16.hostedemail.com: domain of thomas.hellstrom@linux.intel.com has no SPF policy when checking 134.134.136.65) smtp.mailfrom=thomas.hellstrom@linux.intel.com X-Stat-Signature: q8gsffct6egtypy6c7sf734zrfun7jii X-Rspamd-Queue-Id: 21B09180033 Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ZIbcFOU6; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf16.hostedemail.com: domain of thomas.hellstrom@linux.intel.com has no SPF policy when checking 134.134.136.65) smtp.mailfrom=thomas.hellstrom@linux.intel.com X-Rspamd-Server: rspam02 X-Rspam-User: X-HE-Tag: 1655979895-633384 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 6/23/22 07:24, Gowans, James wrote: > Currently the implementation will split the PUD when a fallback is taken > inside the create_huge_pud function. This isn't where it should be done: > the splitting should be done in wp_huge_pud, just like it's done for > PMDs. Reason being that if a callback is taken during create, there is > no PUD yet so nothing to split, whereas if a fallback is taken when > encountering a write protection fault there is something to split. > > It looks like this was the original intention with the commit where the > splitting was introduced, but somehow it got moved to the wrong place > between v1 and v2 of the patch series. Rebase mistake perhaps. > > Fixes: 327e9fd48972 ("mm: Split huge pages on write-notify or COW") Some time since I looked into this, but looks correct to me. Reviewed-by: Thomas Hellström > > Cc: Thomas Hellström > Cc: Andrew Morton > Cc: Christian König > Cc: Jan H. Schönherr > Signed-off-by: James Gowans > --- > mm/memory.c | 31 ++++++++++++++++--------------- > 1 file changed, 16 insertions(+), 15 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 7a089145cad4..4cf7d4b6c950 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -4802,29 +4802,30 @@ static vm_fault_t create_huge_pud(struct vm_fault *vmf) > defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) > /* No support for anonymous transparent PUD pages yet */ > if (vma_is_anonymous(vmf->vma)) > - goto split; > - if (vmf->vma->vm_ops->huge_fault) { > - vm_fault_t ret = vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); > - > - if (!(ret & VM_FAULT_FALLBACK)) > - return ret; > - } > -split: > - /* COW or write-notify not handled on PUD level: split pud.*/ > - __split_huge_pud(vmf->vma, vmf->pud, vmf->address); > + return VM_FAULT_FALLBACK; > + if (vmf->vma->vm_ops->huge_fault) > + return vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > return VM_FAULT_FALLBACK; > } > > static vm_fault_t wp_huge_pud(struct vm_fault *vmf, pud_t orig_pud) > { > -#ifdef CONFIG_TRANSPARENT_HUGEPAGE > +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ > + defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) > /* No support for anonymous transparent PUD pages yet */ > if (vma_is_anonymous(vmf->vma)) > - return VM_FAULT_FALLBACK; > - if (vmf->vma->vm_ops->huge_fault) > - return vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); > -#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > + goto split; > + if (vmf->vma->vm_ops->huge_fault) { > + vm_fault_t ret = vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); > + > + if (!(ret & VM_FAULT_FALLBACK)) > + return ret; > + } > +split: > + /* COW or write-notify not handled on PUD level: split pud.*/ > + __split_huge_pud(vmf->vma, vmf->pud, vmf->address); > +#endif /* CONFIG_TRANSPARENT_HUGEPAGE && CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ > return VM_FAULT_FALLBACK; > } >