{"id":2197313,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2197313/?format=json","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/1.0/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/"},"msgid":"<20260217163250.2326001-4-surenb@google.com>","date":"2026-02-17T16:32:50","name":"[v2,3/3] mm: use vma_start_write_killable() in process_vma_walk_lock()","commit_ref":null,"pull_url":null,"state":"handled-elsewhere","archived":false,"hash":"ce6486062af7ecb1ac1b18d5e7edb1a5b26f903d","submitter":{"id":74729,"url":"http://patchwork.ozlabs.org/api/1.0/people/74729/?format=json","name":"Suren Baghdasaryan","email":"surenb@google.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260217163250.2326001-4-surenb@google.com/mbox/","series":[{"id":492454,"url":"http://patchwork.ozlabs.org/api/1.0/series/492454/?format=json","date":"2026-02-17T16:32:47","name":"Use killable vma write locking in most places","version":2,"mbox":"http://patchwork.ozlabs.org/series/492454/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2197313/checks/","tags":{},"headers":{"Return-Path":"\n <linuxppc-dev+bounces-16909-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20230601 header.b=eMOiGPnv;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-16909-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2607:f8b0:4864:20::1249\"","lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=google.com","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20230601 header.b=eMOiGPnv;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=flex--surenb.bounces.google.com\n (client-ip=2607:f8b0:4864:20::1249; helo=mail-dl1-x1249.google.com;\n envelope-from=3pjiuaqykdbmbdax6uz77z4x.v75416dg88v-wxe41bcb.7i4tub.7az@flex--surenb.bounces.google.com;\n receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1 raw public key)\n server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFlZC1nTqz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 03:33:23 +1100 (AEDT)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fFlYq1bCcz3bq4;\n\tWed, 18 Feb 2026 03:33:03 +1100 (AEDT)","from mail-dl1-x1249.google.com (mail-dl1-x1249.google.com\n [IPv6:2607:f8b0:4864:20::1249])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fFlYp2s5Rz3bpL\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 18 Feb 2026 03:33:02 +1100 (AEDT)","by mail-dl1-x1249.google.com with SMTP id\n a92af1059eb24-12721cd1a2aso3728680c88.1\n        for <linuxppc-dev@lists.ozlabs.org>;\n Tue, 17 Feb 2026 08:33:02 -0800 (PST)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1771345983;\n\tcv=none;\n b=PVpTsppZCtAztwZQmN52WR0D0aZSoJKx5fM6FN/u8mzHLP1sxOeGYT36xOVvo9N3DLFebR6Jn/UWV2U+RXN7DMzb7sd8ImhCAojkzYRzncWVq0ynHp8iGR63BbpC5MqGpFk/Khq4dkgI4W22082Lm413QbKr1lfyWKQehD5cSj79uJ7+E3auq7RfnE6PSn54PvqQuqL+0YSuP1r71689RojumrZypRE76Q1DkiDbOOejZvMHk4LydFizfFWBkSuDdKGKQ0FcFA/WYDqY3/J3UtsW8G0VXFAvuwCt6kGyogCkGm/ADO0HilE+zqfElekb6Hkn68KQcPZMfLKifyDTVA==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1771345983; c=relaxed/relaxed;\n\tbh=Z9Ark9R30Qkzih8r6uy5tMYPv262iFz804WfSXpH0hs=;\n\th=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From:\n\t To:Cc:Content-Type;\n b=IG0y7sovsdv5ZG8yDGdqxWB96IC5RdLvvH2MOQevtecxjehe92mJhZPgN1PZCJmh0YAUG7N9Zg333pKxc5/cFoTX0zkmsjfnECbU7N4aGTnyhKvUsw4MJwGKGyCUy9VtDuW74ogRBtRcxtB1XVCubyjEpk5DdndT48AhMdGnWAWiT8GIL5EeE4UerolLuG+UMgDdYfkrGLcg0zpdXbrzc+7I27Sn9uQl6sozQP6CNK2VCXYAPGvMWql5ftsVVRvUNtr1zwC2aUioxxGAjKnuHKra8H2lF+zXURaMx9TrssHO0GHj6GZ0yD25j7P8eCCpVeWRJdQ9q0Je5/oDbLsfjQ==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=google.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20230601 header.b=eMOiGPnv; dkim-atps=neutral;\n spf=pass (client-ip=2607:f8b0:4864:20::1249; helo=mail-dl1-x1249.google.com;\n envelope-from=3pjiuaqykdbmbdax6uz77z4x.v75416dg88v-wxe41bcb.7i4tub.7az@flex--surenb.bounces.google.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=flex--surenb.bounces.google.com","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=google.com; s=20230601; t=1771345981; x=1771950781;\n darn=lists.ozlabs.org;\n        h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n         :date:from:to:cc:subject:date:message-id:reply-to;\n        bh=Z9Ark9R30Qkzih8r6uy5tMYPv262iFz804WfSXpH0hs=;\n        b=eMOiGPnvwEI5kNAABZ31NTJxv7/R4EeApRzCniB1/+RL++CeVL637ydPbqJvT69GUH\n         OMRYoAmslElcKS+rGm1xQpwu6DihNYphV6QJ1xkXnHANNs7Z52JmQQwpDlYzPnOLQZnF\n         Ftg3DIMzPcxaAmFumHr0yS9fdhh17fkAGEzEd665UYjYza+a5pXXbYnu7rl7uvmrsMRa\n         au7TdBb9gaiSV7M72p3N9+sABIC5gPNpSmZ12QwfL6Znx0x1IRt1LQuePumuqZLWjFnG\n         h6HBFUIDlSXoKUipUaUIulzCDNLfJ9OxsRr5M5Ax9zSIQ0J8+fkiF4HjBibXMwGEwlnl\n         PP1g==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20230601; t=1771345981; x=1771950781;\n        h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n         :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n        bh=Z9Ark9R30Qkzih8r6uy5tMYPv262iFz804WfSXpH0hs=;\n        b=KcrQI8lP9pqI0ayTZHeCLRon8aLhhDj4zV0LzYeN92sYybmb8qcwppWt/XnChb4gV8\n         5Ni1kQLYv2ynRuOHs4GFLZ1jSuZA15uIrRSfLCJuph/1OEuoPCUaIh1aGz/qS9TDl88e\n         pdLbqQ6dXP1eO4Af1zFwBPo21BTgolX7zCM0Qe7aN1Pp82eEe0BAHdqqGOfejZzUAVyv\n         BoeNZhpREItSssEl/FWuH6tZLx4loxAwbcvNMuCSmNBgq7LVyN3Q2JFQgFHvsOB8LPtx\n         SQek39rfFgK63ywpd5MLxepXRcPJUUvt81nN5BIKRmY26W0YjZtJCQEf9mrd//eU7Ial\n         habw==","X-Forwarded-Encrypted":"i=1;\n AJvYcCWYzcLs1fbx8kYGDySwrMg7PoEDLk5rY7I915V5QacY1c0lS5C9GBBwAVkXoX/xoMADUhImj5ZTQSBEw2c=@lists.ozlabs.org","X-Gm-Message-State":"AOJu0YysF3x4wzadX2xvJsvtZXuirz6yDC3XGvcJ+MuUUXc4Q3SEoBWG\n\twz4YWKVuyVRHBfNQZZlvJBaS/Llm5TGV6TeVKFgi3bJ+hyRoQKMIe1ycqo3BkktM3nHDlUpd4nh\n\tH++Oqug==","X-Received":"from dlbvt13.prod.google.com\n ([2002:a05:7022:3f8d:b0:119:49ca:6bae])\n (user=surenb job=prod-delivery.src-stubby-dispatcher) by\n 2002:a05:7022:250e:b0:11d:f440:b743\n with SMTP id a92af1059eb24-1273adf34c5mr6016405c88.7.1771345980160; Tue, 17\n Feb 2026 08:33:00 -0800 (PST)","Date":"Tue, 17 Feb 2026 08:32:50 -0800","In-Reply-To":"<20260217163250.2326001-1-surenb@google.com>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","Mime-Version":"1.0","References":"<20260217163250.2326001-1-surenb@google.com>","X-Mailer":"git-send-email 2.53.0.273.g2a3d683680-goog","Message-ID":"<20260217163250.2326001-4-surenb@google.com>","Subject":"[PATCH v2 3/3] mm: use vma_start_write_killable() in\n process_vma_walk_lock()","From":"Suren Baghdasaryan <surenb@google.com>","To":"akpm@linux-foundation.org","Cc":"willy@infradead.org, david@kernel.org, ziy@nvidia.com,\n\tmatthew.brost@intel.com, joshua.hahnjy@gmail.com, rakie.kim@sk.com,\n\tbyungchul@sk.com, gourry@gourry.net, ying.huang@linux.alibaba.com,\n\tapopple@nvidia.com, lorenzo.stoakes@oracle.com,\n baolin.wang@linux.alibaba.com,\n\tLiam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com,\n\tdev.jain@arm.com, baohua@kernel.org, lance.yang@linux.dev, vbabka@suse.cz,\n\tjannh@google.com, rppt@kernel.org, mhocko@suse.com, pfalcato@suse.de,\n\tkees@kernel.org, maddy@linux.ibm.com, npiggin@gmail.com, mpe@ellerman.id.au,\n\tchleroy@kernel.org, borntraeger@linux.ibm.com, frankja@linux.ibm.com,\n\timbrenda@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com,\n\tagordeev@linux.ibm.com, svens@linux.ibm.com, gerald.schaefer@linux.ibm.com,\n\tlinux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, surenb@google.com","Content-Type":"text/plain; charset=\"UTF-8\"","X-Spam-Status":"No, score=-7.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,\n\tUSER_IN_DEF_DKIM_WL autolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"},"content":"Replace vma_start_write() with vma_start_write_killable() when\nprocess_vma_walk_lock() is used with PGWALK_WRLOCK option.\nAdjust its direct and indirect users to check for a possible error\nand handle it.\n\nSigned-off-by: Suren Baghdasaryan <surenb@google.com>\n---\n arch/s390/kvm/kvm-s390.c |  5 +++--\n arch/s390/mm/gmap.c      | 13 ++++++++++---\n fs/proc/task_mmu.c       |  7 ++++++-\n mm/pagewalk.c            | 20 ++++++++++++++------\n 4 files changed, 33 insertions(+), 12 deletions(-)","diff":"diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c\nindex 56a50524b3ee..75aef9c66e03 100644\n--- a/arch/s390/kvm/kvm-s390.c\n+++ b/arch/s390/kvm/kvm-s390.c\n@@ -958,6 +958,7 @@ static int kvm_s390_get_mem_control(struct kvm *kvm, struct kvm_device_attr *att\n static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *attr)\n {\n \tint ret;\n+\tint err;\n \tunsigned int idx;\n \tswitch (attr->attr) {\n \tcase KVM_S390_VM_MEM_ENABLE_CMMA:\n@@ -990,10 +991,10 @@ static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *att\n \t\tVM_EVENT(kvm, 3, \"%s\", \"RESET: CMMA states\");\n \t\tmutex_lock(&kvm->lock);\n \t\tidx = srcu_read_lock(&kvm->srcu);\n-\t\ts390_reset_cmma(kvm->arch.gmap->mm);\n+\t\terr = s390_reset_cmma(kvm->arch.gmap->mm);\n \t\tsrcu_read_unlock(&kvm->srcu, idx);\n \t\tmutex_unlock(&kvm->lock);\n-\t\tret = 0;\n+\t\tret = (err < 0) ? err : 0;\n \t\tbreak;\n \tcase KVM_S390_VM_MEM_LIMIT_SIZE: {\n \t\tunsigned long new_limit;\ndiff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c\nindex dd85bcca817d..96054b124db5 100644\n--- a/arch/s390/mm/gmap.c\n+++ b/arch/s390/mm/gmap.c\n@@ -2271,6 +2271,7 @@ int s390_enable_skey(void)\n {\n \tstruct mm_struct *mm = current->mm;\n \tint rc = 0;\n+\tint err;\n \n \tmmap_write_lock(mm);\n \tif (mm_uses_skeys(mm))\n@@ -2282,7 +2283,9 @@ int s390_enable_skey(void)\n \t\tmm->context.uses_skeys = 0;\n \t\tgoto out_up;\n \t}\n-\twalk_page_range(mm, 0, TASK_SIZE, &enable_skey_walk_ops, NULL);\n+\terr = walk_page_range(mm, 0, TASK_SIZE, &enable_skey_walk_ops, NULL);\n+\tif (err < 0)\n+\t\trc = err;\n \n out_up:\n \tmmap_write_unlock(mm);\n@@ -2305,11 +2308,15 @@ static const struct mm_walk_ops reset_cmma_walk_ops = {\n \t.walk_lock\t\t= PGWALK_WRLOCK,\n };\n \n-void s390_reset_cmma(struct mm_struct *mm)\n+int s390_reset_cmma(struct mm_struct *mm)\n {\n+\tint err;\n+\n \tmmap_write_lock(mm);\n-\twalk_page_range(mm, 0, TASK_SIZE, &reset_cmma_walk_ops, NULL);\n+\terr = walk_page_range(mm, 0, TASK_SIZE, &reset_cmma_walk_ops, NULL);\n \tmmap_write_unlock(mm);\n+\n+\treturn (err < 0) ? err : 0;\n }\n EXPORT_SYMBOL_GPL(s390_reset_cmma);\n \ndiff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c\nindex d7d52e259055..91e806d65bd9 100644\n--- a/fs/proc/task_mmu.c\n+++ b/fs/proc/task_mmu.c\n@@ -1797,6 +1797,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,\n \t\tstruct clear_refs_private cp = {\n \t\t\t.type = type,\n \t\t};\n+\t\tint err;\n \n \t\tif (mmap_write_lock_killable(mm)) {\n \t\t\tcount = -EINTR;\n@@ -1824,7 +1825,11 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,\n \t\t\t\t\t\t0, mm, 0, -1UL);\n \t\t\tmmu_notifier_invalidate_range_start(&range);\n \t\t}\n-\t\twalk_page_range(mm, 0, -1, &clear_refs_walk_ops, &cp);\n+\t\terr = walk_page_range(mm, 0, -1, &clear_refs_walk_ops, &cp);\n+\t\tif (err < 0) {\n+\t\t\tcount = err;\n+\t\t\tgoto out_unlock;\n+\t\t}\n \t\tif (type == CLEAR_REFS_SOFT_DIRTY) {\n \t\t\tmmu_notifier_invalidate_range_end(&range);\n \t\t\tflush_tlb_mm(mm);\ndiff --git a/mm/pagewalk.c b/mm/pagewalk.c\nindex a94c401ab2cf..dc9f7a7709c6 100644\n--- a/mm/pagewalk.c\n+++ b/mm/pagewalk.c\n@@ -425,14 +425,13 @@ static inline void process_mm_walk_lock(struct mm_struct *mm,\n \t\tmmap_assert_write_locked(mm);\n }\n \n-static inline void process_vma_walk_lock(struct vm_area_struct *vma,\n+static inline int process_vma_walk_lock(struct vm_area_struct *vma,\n \t\t\t\t\t enum page_walk_lock walk_lock)\n {\n #ifdef CONFIG_PER_VMA_LOCK\n \tswitch (walk_lock) {\n \tcase PGWALK_WRLOCK:\n-\t\tvma_start_write(vma);\n-\t\tbreak;\n+\t\treturn vma_start_write_killable(vma);\n \tcase PGWALK_WRLOCK_VERIFY:\n \t\tvma_assert_write_locked(vma);\n \t\tbreak;\n@@ -444,6 +443,7 @@ static inline void process_vma_walk_lock(struct vm_area_struct *vma,\n \t\tbreak;\n \t}\n #endif\n+\treturn 0;\n }\n \n /*\n@@ -487,7 +487,9 @@ int walk_page_range_mm_unsafe(struct mm_struct *mm, unsigned long start,\n \t\t\tif (ops->pte_hole)\n \t\t\t\terr = ops->pte_hole(start, next, -1, &walk);\n \t\t} else { /* inside vma */\n-\t\t\tprocess_vma_walk_lock(vma, ops->walk_lock);\n+\t\t\terr = process_vma_walk_lock(vma, ops->walk_lock);\n+\t\t\tif (err)\n+\t\t\t\tbreak;\n \t\t\twalk.vma = vma;\n \t\t\tnext = min(end, vma->vm_end);\n \t\t\tvma = find_vma(mm, vma->vm_end);\n@@ -704,6 +706,7 @@ int walk_page_range_vma_unsafe(struct vm_area_struct *vma, unsigned long start,\n \t\t.vma\t\t= vma,\n \t\t.private\t= private,\n \t};\n+\tint err;\n \n \tif (start >= end || !walk.mm)\n \t\treturn -EINVAL;\n@@ -711,7 +714,9 @@ int walk_page_range_vma_unsafe(struct vm_area_struct *vma, unsigned long start,\n \t\treturn -EINVAL;\n \n \tprocess_mm_walk_lock(walk.mm, ops->walk_lock);\n-\tprocess_vma_walk_lock(vma, ops->walk_lock);\n+\terr = process_vma_walk_lock(vma, ops->walk_lock);\n+\tif (err)\n+\t\treturn err;\n \treturn __walk_page_range(start, end, &walk);\n }\n \n@@ -734,6 +739,7 @@ int walk_page_vma(struct vm_area_struct *vma, const struct mm_walk_ops *ops,\n \t\t.vma\t\t= vma,\n \t\t.private\t= private,\n \t};\n+\tint err;\n \n \tif (!walk.mm)\n \t\treturn -EINVAL;\n@@ -741,7 +747,9 @@ int walk_page_vma(struct vm_area_struct *vma, const struct mm_walk_ops *ops,\n \t\treturn -EINVAL;\n \n \tprocess_mm_walk_lock(walk.mm, ops->walk_lock);\n-\tprocess_vma_walk_lock(vma, ops->walk_lock);\n+\terr = process_vma_walk_lock(vma, ops->walk_lock);\n+\tif (err)\n+\t\treturn err;\n \treturn __walk_page_range(vma->vm_start, vma->vm_end, &walk);\n }\n \n","prefixes":["v2","3/3"]}