From patchwork Thu Feb 27 13:32:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Geffon X-Patchwork-Id: 13994479 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 6D8D1C021BE for ; Thu, 27 Feb 2025 13:32:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D742D6B0082; Thu, 27 Feb 2025 08:32:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CFEC66B0088; Thu, 27 Feb 2025 08:32:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B9E116B0089; Thu, 27 Feb 2025 08:32:41 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 9B5ED6B0082 for ; Thu, 27 Feb 2025 08:32:41 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 52EB7A3B60 for ; Thu, 27 Feb 2025 13:32:41 +0000 (UTC) X-FDA: 83165814522.25.A8779A1 Received: from mail-qt1-f202.google.com (mail-qt1-f202.google.com [209.85.160.202]) by imf30.hostedemail.com (Postfix) with ESMTP id 89A5F8003E for ; Thu, 27 Feb 2025 13:32:39 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=eydumZtQ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf30.hostedemail.com: domain of 3dmnAZwcKCI8uzxyy76z77z4x.v75416DG-553Etv3.7Az@flex--bgeffon.bounces.google.com designates 209.85.160.202 as permitted sender) smtp.mailfrom=3dmnAZwcKCI8uzxyy76z77z4x.v75416DG-553Etv3.7Az@flex--bgeffon.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740663159; a=rsa-sha256; cv=none; b=cINXRX3hMWuUktjk7YxyA6q29ZBE91CQUZwIu8UGNRyK8g5R5ET0PBNSYc9zots4BZk4XZ 76051HtJ4KaPpuMiLpdTlXhTRRtRzJro9MJdN/ekjIY5Ajt/nR9qdeTVvaDF/RPVWlrYYz t2ZWMYHKGuoUGbKPGZaKPpraH9KAzl0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740663159; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HyfS+UvHxKI14QQn8t0ml/VJXb1kYrctFLX+Mu/t1JE=; b=3U/Y7O9kaQIQUKPDI/UJjFo/BDLjVnKOWQmQyf48M6ppLbnRSBLjZqC2cQyc2xXYyjFH8b AuN65FGwunNOBiy2ubFy/WbovpBE73I7hH7GqyWNPKCEtnT1epF/UPVI7rmmqsuN8KkcaE EaFbcCb2SpDwM2IkAoPr6oFRVSwJU5o= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=eydumZtQ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf30.hostedemail.com: domain of 3dmnAZwcKCI8uzxyy76z77z4x.v75416DG-553Etv3.7Az@flex--bgeffon.bounces.google.com designates 209.85.160.202 as permitted sender) smtp.mailfrom=3dmnAZwcKCI8uzxyy76z77z4x.v75416DG-553Etv3.7Az@flex--bgeffon.bounces.google.com Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-471f21160a9so30948171cf.2 for ; Thu, 27 Feb 2025 05:32:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740663158; x=1741267958; darn=kvack.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=HyfS+UvHxKI14QQn8t0ml/VJXb1kYrctFLX+Mu/t1JE=; b=eydumZtQYCZED9aK4bUryCtzovhQoS5bfvBjgraPySqRw//GXJ78YqW9J07MAanhaz 2MLVLUTh2/DW+zLtwBnra1wNdjAq59myovbsPFRicu6lekJ91I2okWHNFVwzfeeCBoE2 nXEikx34y3HrPyWLvYh9k5NMgLEOPisecN+hDvRV1GplZ6vfsdD9YlsuYOy08uD6f8lC U72fUgjkhzrJf76eudGPBdTTrllIoqOesWdCgSmKcOuZUSuTeKvtAVx1Uhn4TN54P55y I4spCbEjVO4w3RcxmsCH7A2c9NdpoF/oXZz78Nj2Tt+/oeR5qPcIR6umPNQDTt7xUgAE Wuug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740663158; x=1741267958; 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=HyfS+UvHxKI14QQn8t0ml/VJXb1kYrctFLX+Mu/t1JE=; b=wmBBORKG6a5HpG7Ma0uh1xORe+psEfkpLci9m4EcVHXDD/u7fVLSWHOz7sXQKVX+AY 8hQHFZNbCQQPu9rZ4zPITwo72rXi5m7EKj4snqGnLtfBnaGC0jc1F64KcJTICre1ZiAG pbhUSrLS3Lv1fwH9a7AJE7vszUNEGW0qQ1TjPYtRiSvlfDsHrrd7SGcVENpa5tS9rkhQ 1l1jx0DKvYvBsjcGG8lFpLoVxPwzicGc4T3AEpoppf04iPHsPMIbWdtdeRVFgEZI76JL VDjN4AG3NYKeT0SE2fVZkitkIvut6gZVwdnZ6Lpms674tZB/gidvugfFdOBynTF+bQMq BDyQ== X-Forwarded-Encrypted: i=1; AJvYcCXyDUT9kxbB9/KoiRFf7SWqY6xtOa/PX/jZQgUXuNnBQyFsODnvuQdFqQ1C6uvSkpXUBrMIP3Yq3w==@kvack.org X-Gm-Message-State: AOJu0YycQx7lwqtrRH5IhjP/ZLuxwBwvHKkmPu+wgEmb+hgXD2dt219A Lr1fa643pUyZaAPFBwc3LQ/deTnHljQb1XSPQhXqHlQVbREXroOjDAVAD5gEhcZrJ1foTFIW7j5 s3jd1Gw== X-Google-Smtp-Source: AGHT+IHvETM3+pn2QTpJ1tsLr3mG9ApdH9Fim1Cx8ibw/PLC8WURMDcwwL5DzLuRErYfJClH2Bb5qxGCi7L2 X-Received: from qtbcm27.prod.google.com ([2002:a05:622a:251b:b0:472:122b:3255]) (user=bgeffon job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:5d16:0:b0:472:1573:fa9c with SMTP id d75a77b69052e-47377118705mr141991131cf.6.1740663158655; Thu, 27 Feb 2025 05:32:38 -0800 (PST) Date: Thu, 27 Feb 2025 08:32:36 -0500 In-Reply-To: <20250226114815.758217-1-bgeffon@google.com> Mime-Version: 1.0 References: <20250226114815.758217-1-bgeffon@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250227133236.1296853-1-bgeffon@google.com> Subject: [PATCH v3] mm: fix finish_fault() handling for large folios From: Brian Geffon To: Andrew Morton Cc: Zi Yan , Kefeng Wang , Suren Baghdasaryan , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , David Hildenbrand , Brian Geffon , stable@vger.kernel.org, Hugh Dickins , Baolin Wang , Marek Maslanka X-Rspamd-Queue-Id: 89A5F8003E X-Rspamd-Server: rspam08 X-Rspam-User: X-Stat-Signature: pxioswqp5cjys78tnui1c8d56hj1y6yg X-HE-Tag: 1740663159-32156 X-HE-Meta: U2FsdGVkX1/YB8ZmPodULOeWN6qGEEO5X8l4ra5Z1utJvb4WXXXt5cJhp87FlFLFcx05knNRDEfeOSD31wJBhiCm2hq0b/6LgA3p7JlrRTFg/CM32QANK10SXNxi8Ef9reG++OhiHQTBmST+5LBMWkbVN5n49alUvddtDpbfvCpsiCE4tHifTlqpdplv5nBEYOQKPfFlfPaOh0mIU+0NcK+hNu9Mo4SXTiyMVW0+Wi8uTdccYIN+Xg0bSer1w6fxqxfTLUTRV11dFyr4z5AFl9zQ+XyiQvyrA6nH7txS57+6K4VLBVniatx+opENtpld1V/8JC1NPT3V2ZZwKAJzV2KLHJC4rKWW8pBHjo2DyldOItbN5xb7UCDcsFx3EyRMI859YfNLnA1kQt1qhx4GPAThVHRRd0jhNjjUpeWwTEbeRyNCZmSbeDaph8y4dJbYd5IQ/zML9K9X9EMFfp80DZoWAElopH9Q5goNMc52eC1NmkLybfE3dQdJzSo03Wleb/nnB+G88Jqx7kbWxZXkcL/rnYCDz7AQqWyYeevP982SuK4yvHxbNNJpJeBf1gNW18Pj8yIjbN7BwDMw5uKiLkYweVSewh1fp9zuFyMEKiGwq5h5YDqxCcPP6VjFIUcuGKkjRGbza2Hzq09GyRsacfZ1hB9RhpSglRRBepDln0rvFgTyfueHeqgKjHaxB+bnBwGYL2mPt4hMy6zEnSKeXrjVSjRexVR9yTAh+XNLVJiDfUQSaSoywVVT0JhRJ8c3+jY7hGiY7LMQ3/HgFK7MzkwY2h8GETWYh4oOp2m08Xsw4K+OOZ6ijL2/PFrZxstzhFOt/iHjYGcUp9vPRErgTVdpb/evHGNI9GiQznNPQldBxsPtbrI7P+GWKao13Oee4/aWB8LINaXlp8FaUJMrhTm/V9NVca30i9NyYfV1F66MCF37VeLfaFgEcF7DHcFnZ/wCZZRTZiz8bu5DltN LlN75RLY iTTTcDZYo6Gaqeri1nh8vqZYs7Io9Gf3DTQ9nUlmNyLjroMbHON6y+PsjAjsxRKGQtadpTYn1wS+kpktjhg3YztDwDb+26ammnipEjbrOIuHsIL7PvfGRTauP04cBM8+fR7uZeI4nPQY+DxWwi/X5Usy2jLjBb3Ich6RRkpofn5g0PChaeXk6ZVTHft7hCRR60rcpT4tnXQnqswwbHROd+pCc7aUwjSg0j+83Wc/mYP0VThGv8s8YppuNfzk4LP5lbNrpL4LSkh77BrNT0LDLcy2JOfY5Cloubo48e363t2s1J5yAQX7i7gfb94Z5elQozGf7kUZGhr4BbB4q8XuHQywMSnsqIVSNpzlhHhutIO/QYv/fJX0vH8oU5u08cQshkYE99pX0ZRphAzF1moFCMx2K6M0vLlPBhkLsPt0RrYQ0q82xM38mJBsYi0Eb7GkFOwZ3pA7Kp2OThhLov7crOqXB0zhDIisqKZMGWaNmM97IzCj7UU0GGwS1Tvhfe/I2opSs7lsOL+H3ta5X/PCx+ecaRoElwthU7r2GjyBv+aGCnBWJS2L/KR0i1h6SKCbrFcp96ME9nHlarLilIuIgZXAfeXluqhY0XLSPdSl01EmQvFmdeZfadpv0L7wIHVG6Bnpij+5rgIUNVDs= 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: When handling faults for anon shmem finish_fault() will attempt to install ptes for the entire folio. Unfortunately if it encounters a single non-pte_none entry in that range it will bail, even if the pte that triggered the fault is still pte_none. When this situation happens the fault will be retried endlessly never making forward progress. This patch fixes this behavior and if it detects that a pte in the range is not pte_none it will fall back to setting a single pte. Cc: stable@vger.kernel.org Cc: Hugh Dickins Fixes: 43e027e41423 ("mm: memory: extend finish_fault() to support large folio") Suggested-by: Baolin Wang Reported-by: Marek Maslanka Signed-off-by: Brian Geffon --- mm/memory.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index b4d3d4893267..f3054bbb3c1e 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5183,7 +5183,11 @@ vm_fault_t finish_fault(struct vm_fault *vmf) bool is_cow = (vmf->flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED); int type, nr_pages; - unsigned long addr = vmf->address; + unsigned long addr; + bool needs_fallback = false; + +fallback: + addr = vmf->address; /* Did we COW the page? */ if (is_cow) @@ -5222,7 +5226,8 @@ vm_fault_t finish_fault(struct vm_fault *vmf) * approach also applies to non-anonymous-shmem faults to avoid * inflating the RSS of the process. */ - if (!vma_is_anon_shmem(vma) || unlikely(userfaultfd_armed(vma))) { + if (!vma_is_anon_shmem(vma) || unlikely(userfaultfd_armed(vma)) || + unlikely(needs_fallback)) { nr_pages = 1; } else if (nr_pages > 1) { pgoff_t idx = folio_page_idx(folio, page); @@ -5258,9 +5263,9 @@ vm_fault_t finish_fault(struct vm_fault *vmf) ret = VM_FAULT_NOPAGE; goto unlock; } else if (nr_pages > 1 && !pte_range_none(vmf->pte, nr_pages)) { - update_mmu_tlb_range(vma, addr, vmf->pte, nr_pages); - ret = VM_FAULT_NOPAGE; - goto unlock; + needs_fallback = true; + pte_unmap_unlock(vmf->pte, vmf->ptl); + goto fallback; } folio_ref_add(folio, nr_pages - 1);