Received: by 2002:a05:7412:b130:b0:e2:908c:2ebd with SMTP id az48csp1757903rdb; Sun, 19 Nov 2023 09:01:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IF7j/jovM+EPjRHYluNRMXDUqCJMClEuKQZpZDQfZuLe8XJ31IZu5g0bmgX2A98Iy5qqTIN X-Received: by 2002:a05:6a20:4427:b0:188:290d:17dc with SMTP id ce39-20020a056a20442700b00188290d17dcmr4399544pzb.60.1700413303587; Sun, 19 Nov 2023 09:01:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700413303; cv=none; d=google.com; s=arc-20160816; b=fPY8RmDG6E+vQTdvnntiXProPwSRaAYvda1zX/pu7mPNGEX8lC6l2zh1t6gRU+z1qG h185MuQN3dSDFt5+c4tExcC2CtHiDIVhzA5aFimHzwRivFXxj5jUIUB/kFtngzybXRPn ZRDDUo2hn1OoFdsfszcSfoqZYQOTDv7st/Ej6i0D3Q46EUkaosvk5yXcywW4exKE1V/e fn3HiaEPcfOJp85ftNv6R4mhnh+dEDYkvj119zOpPmVm/hfaVFCl8hGMkBdMSLzWCQXh mdgI4nSZRpRfmXVj/tdoK+B6nMjnVylo+2oNLfy9zdiyRl7z2kF/VwWnKC/eQFbYWH+q 48dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=5VJSuOR5nwPM4kRlFje7nh/AMUnlivOQlbnl38/y3r0=; fh=ON0oQ90Z4xnjbNCGsyMgiRbLR29nyOKvbeaw6TmRihk=; b=Kv2pXfqWQdobIBUJgLaycqC8hC1PkYTca4KfYk7akI6w3AbHGP76Too9su4DWGaINR MM1xvDli8RUm4cjwyEmbJrsnsJEifiThMvmeLx2tAR17+E0ShBXfIqudwlfBclQvrHrK KalxxPVby8ounKwNgSo6mz+jVkvlqU1FGc18nMKQz+/nLOSodPkj4oxdn4QLhT77LPut RlzYQZ8IviZ2vPqcnHqU9QmvDOkYpzRXMDsRIoEBMKLb75rAhXE/1VpYoRoRqnULiF37 U4PBrsE+DAklnRs+FLOxSyWWxE5d/PMj/Vo4jiOi02npN77sfIyCel5OLRYfkKIs5M3R kavQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id dh4-20020a056a020b8400b005bdc949fee3si6934031pgb.880.2023.11.19.09.01.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 09:01:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 421598070E02; Sun, 19 Nov 2023 09:01:36 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231890AbjKSRBN (ORCPT + 99 others); Sun, 19 Nov 2023 12:01:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231844AbjKSRAl (ORCPT ); Sun, 19 Nov 2023 12:00:41 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 36D3A10CA; Sun, 19 Nov 2023 08:59:46 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2B3AD14BF; Sun, 19 Nov 2023 09:00:32 -0800 (PST) Received: from e121798.cable.virginm.net (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 00E483F6C4; Sun, 19 Nov 2023 08:59:40 -0800 (PST) From: Alexandru Elisei To: catalin.marinas@arm.com, will@kernel.org, oliver.upton@linux.dev, maz@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, arnd@arndb.de, akpm@linux-foundation.org, mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, mhiramat@kernel.org, rppt@kernel.org, hughd@google.com Cc: pcc@google.com, steven.price@arm.com, anshuman.khandual@arm.com, vincenzo.frascino@arm.com, david@redhat.com, eugenis@google.com, kcc@google.com, hyesoo.yu@samsung.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH RFC v2 24/27] arm64: mte: Handle fatal signal in reserve_tag_storage() Date: Sun, 19 Nov 2023 16:57:18 +0000 Message-Id: <20231119165721.9849-25-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231119165721.9849-1-alexandru.elisei@arm.com> References: <20231119165721.9849-1-alexandru.elisei@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Sun, 19 Nov 2023 09:01:36 -0800 (PST) As long as a fatal signal is pending, alloc_contig_range() will fail with -EINTR. This makes it impossible for tag storage allocation to succeed, and the page allocator will print an OOM splat. The process is going to be killed, so return 0 (success) from reserve_tag_storage() to allow the page allocator to make progress. set_pte_at() will map it with PAGE_FAULT_ON_ACCESS and subsequent accesses from different threads will cause a fault until the signal is delivered. Signed-off-by: Alexandru Elisei --- arch/arm64/kernel/mte_tag_storage.c | 17 +++++++++++++++++ arch/arm64/mm/fault.c | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/arch/arm64/kernel/mte_tag_storage.c b/arch/arm64/kernel/mte_tag_storage.c index 6b11bb408b51..602fdc70db1c 100644 --- a/arch/arm64/kernel/mte_tag_storage.c +++ b/arch/arm64/kernel/mte_tag_storage.c @@ -572,6 +572,23 @@ int reserve_tag_storage(struct page *page, int order, gfp_t gfp) break; } + /* + * alloc_contig_range() returns -EINTR from + * __alloc_contig_migrate_range() if a fatal signal is pending. + * As long as the signal hasn't been handled, it is impossible + * to reserve tag storage for any page. Stop trying to reserve + * tag storage, but return 0 so the page allocator can make + * forward progress, instead of printing an OOM splat. + * + * The tagged page with missing tag storage will be mapped with + * PAGE_FAULT_ON_ACCESS in set_pte_at(), which means accesses + * until the signal is delivered will cause a fault. + */ + if (ret == -EINTR) { + ret = 0; + goto out_error; + } + if (ret) goto out_error; diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 964c5ae161a3..fdc98c5828bf 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -950,6 +950,11 @@ gfp_t arch_calc_vma_gfp(struct vm_area_struct *vma, gfp_t gfp) void tag_clear_highpage(struct page *page) { + if (tag_storage_enabled() && unlikely(!page_tag_storage_reserved(page))) { + clear_page(page_address(page)); + return; + } + /* Newly allocated page, shouldn't have been tagged yet */ WARN_ON_ONCE(!try_page_mte_tagging(page)); mte_zero_clear_page_tags(page_address(page)); -- 2.42.1