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 BBECDC5B549 for ; Fri, 30 May 2025 09:34:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B9526B00BD; Fri, 30 May 2025 05:34:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 56A096B00BE; Fri, 30 May 2025 05:34:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 431916B00BF; Fri, 30 May 2025 05:34:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 220256B00BD for ; Fri, 30 May 2025 05:34:08 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B5F1382946 for ; Fri, 30 May 2025 09:34:07 +0000 (UTC) X-FDA: 83499062934.17.7AE583F Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by imf01.hostedemail.com (Postfix) with ESMTP id D1A0640007 for ; Fri, 30 May 2025 09:34:05 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ELvLfn5F; spf=pass (imf01.hostedemail.com: domain of libo.gcs85@bytedance.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=libo.gcs85@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1748597645; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=JJCF21JaAHh50QQNMzAFoSnSXgccx/2injFNIwjbQFo=; b=zQa+DOtmPIsjo8VDc6sjK1wH8H88wj2za4s3kgvmY53Qn89fXXYivyD1JQ0mL/tAEHnWV4 LFwcrbvZKULbvu399QXoDCRcouI933PWo18gBQfjjZOBxi2uoYlW6a2jjqpn6h3wCJmEuh Olpttl5+/FaDw6HOLhbWXrQJ7TBhxqU= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ELvLfn5F; spf=pass (imf01.hostedemail.com: domain of libo.gcs85@bytedance.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=libo.gcs85@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748597645; a=rsa-sha256; cv=none; b=n7EqVwN6TBMCN/bW1U0XwcFxsaJ+L3/D2au9xi6DJ4N7oqUDqbna8pItoaTwcxoKM0pG1I EuvgOkme80BE7ht/hvhvIti7OkJLdu7vmnY/l37DNQdLrUqmH3xqQcacyKHwzkhhfLlh9f tSX5zRbtY3dfF8+ZeGuGiqpKsAEyv6w= Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-3081fe5987eso1483928a91.3 for ; Fri, 30 May 2025 02:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1748597645; x=1749202445; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JJCF21JaAHh50QQNMzAFoSnSXgccx/2injFNIwjbQFo=; b=ELvLfn5FjkUYPj7w70gFmzCytWDauVmlxeko3I0cMx/+/ss0hzIP9FYxlMVWpylozm l6mPu85eriST3vUT3whcXAP9xBALhTWBtZ5C3qdR5MjeEx4fDvamt3xwFItolOAwjxX8 yznufGqGvkUygUiLhCmSK5dJhJZIsJOF2OrebQwEmX5GHuum8Q9oiX0DT0UCOXSxTnru FVfmzSSSFiINJkvQQr/eRQES3HKwWJZa0WacBjiHbQJY5kV6QYVVu6n3zV5bSS9FvAVg z6TnVcVHJ+INFXHMGYztD997AFqvtC2wSQdOoEzTDcxvQVNnjGHzLkLlYN5NU88sZ/Ma 80qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748597645; x=1749202445; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JJCF21JaAHh50QQNMzAFoSnSXgccx/2injFNIwjbQFo=; b=QlCVPYcbWZCzHh1WzpnamPrj6YG4+6yxq3iwj1ibKiejcZgGxUDwKhe4uR1a2iQrEs dkGUi90XguLyV4zNyRKPKZBk9QH8MvnVHw/4KxhJ83MrmCcJzdJPILZ2BBux7/FGcW8d GzU0QR/uWHYX9lUBINiS1teAXWR1vcEgZTNSIPJ6ojxSz/mHpXjObChgyqAxnTkhUmaU vZzgN78G8cz2+r9d3eRXyiY6Z5yTXnaAwDYPu31UJvbaXI5e17rgKundmhj1UT9yrcID Rk69JPBG9bLwHwM/+O6BLnOxGzMxvYJltaCwsODgjKRcGaMYriSKECP+RnvFh5qpiUfS rB3A== X-Forwarded-Encrypted: i=1; AJvYcCW6M1tGmf21dsdJl+EUG3WFuVbOykMLGDnxDx/Vfi81UR5zm6zG5utntSTw/YEMh3VDsfof9QqFvw==@kvack.org X-Gm-Message-State: AOJu0Yx1O63yN+SX8Q//s7JVbUNzqqGwPMXRio14tyxVoz7CPCNU1Bxk bI5Tg0r6SGRMFQQugg1IU1l+nMsFe3z2lQgtMcpbjqH6mJ8oZY4umcQQCZRNEoQowsY= X-Gm-Gg: ASbGnctwC0aH6vCHiYR+ttfBC5QYAXLDZgPT1C6f5RFpE1sI0bo0wXuvEkvcfKghcf/ UIhUQf4/GVnquT1IYkD3zTo+wXctFUzewOTVRT/F7MSJkHzcZ7sxGi1C+p0Mb9GsfjsMLZZsnn6 EKsZpeymp2MSCb46SSOFDVodta9As6bj5+h6biaSILomPgpZINiyW3wOGIf6vrbGhT4YO0o+ykw hdgazhudTHKUhLrwPGFiM1fb50xUJ0+m7s3tu5QR6dO96hywxYwK33PYeJh7YyPN3x7H88XKIG6 WsgGmU8rOukTuMX9PcCzFy+OYbeLrWCjAb9WkuXnh8eWluoSkyhHmc0IPngIyyZw8TDtM2qdJNY 9mFHhaouOtA== X-Google-Smtp-Source: AGHT+IHRhTQBcA7s5JBEKqc7+0a9k8cenFZsoQhX8jbpv2vo1Ygv4WOD6zUURQ2dI64sy1qmxMzdzQ== X-Received: by 2002:a17:90a:e7cb:b0:311:b3e7:fb2c with SMTP id 98e67ed59e1d1-312503643c0mr2125489a91.13.1748597644660; Fri, 30 May 2025 02:34:04 -0700 (PDT) Received: from FQ627FTG20.bytedance.net ([63.216.146.178]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3124e29f7b8sm838724a91.2.2025.05.30.02.33.49 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 30 May 2025 02:34:04 -0700 (PDT) From: Bo Li To: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, luto@kernel.org, kees@kernel.org, akpm@linux-foundation.org, david@redhat.com, juri.lelli@redhat.com, vincent.guittot@linaro.org, peterz@infradead.org Cc: dietmar.eggemann@arm.com, hpa@zytor.com, acme@kernel.org, namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, jannh@google.com, pfalcato@suse.de, riel@surriel.com, harry.yoo@oracle.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, duanxiongchun@bytedance.com, yinhongbo@bytedance.com, dengliang.1214@bytedance.com, xieyongji@bytedance.com, chaiwen.cc@bytedance.com, songmuchun@bytedance.com, yuanzhu@bytedance.com, chengguozhu@bytedance.com, sunjiadong.lff@bytedance.com, Bo Li Subject: [RFC v2 22/35] RPAL: rebuild receiver state Date: Fri, 30 May 2025 17:27:50 +0800 Message-Id: X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: D1A0640007 X-Stat-Signature: zijfxw4zhxx4mos1xwg5f9h787u81t1m X-Rspam-User: X-HE-Tag: 1748597645-399178 X-HE-Meta: U2FsdGVkX19FSFndTCoY0eYti/hYoEK8hI3ZMz7cIhRouSSMLtlMP52M9N5QJx/f2FgoLEwv74CNx3Zl5yF0EzX2SRiDtJV1k230hDZn5SuA2vYEb83fhHfN9VVaKeIBSG3dbG9gcXhiJJbNzlTWEALIR2vuBVGjBipwhRkE8K4IAm8wp3RyJTRXEY4bylcwuw3eGegKGfQTzsjGyaII02w0FDD8wlcLhp0tg3PE0QNDB3QJ9Ykscyo9Es36bm6/t8I9qLne6J81hn4xfSd+O1qQhsjSLC96DC/3xLoAbkIw4gcJf+90XBOLKUvYkHwd9PhwR/rSClEh1uAuz4SphoRFAf93DaHZHvVR0k6a6gXx/pYmp2jYKfIGBZHJAyTbJxCj9R3+MOXXSL565La74vrJ0thBRKpQ5zHs0iRsviwbNuDHJurFw3YT8z+8Q2ard0C/tv6m4sshfUkjh1VCO0fo8155elV+LtGJ58jlCRfXQnfA3jt7I8Q4AjAa4S/KKlEe64fQYULDIgU+jMGh1aHrICf6/p+CL2u9L0lKyFbzb9coRhsf4H43sxFfkfl5w6cn6e4PDXLVhMmFvjOKvcF4n2FPezPWZJ51KI8Nje9yEvlosoMvgSDvdlj4GYz2ZKXO0fD+RxiVTRMPCt784VuN/7CemtURjqGPMBQu/M4zvG9s4KibEZJstZXGAfFI5bcccEN/t573XtHVXLl6C6QcZKSQ0vyecDt8obpdq0Vmhpx52AN6AD9EvmH0YBd+U5WyPBNE7S/5ZOgBo52LOWau9tqQwHZO91hay87iNT+EjI74v+v2mmQrUZSQzpwHlqLEbLmxj20+RLFbi8CXW+kegks7QIqyZrOZW60lBQb34zzcP7JoiY8Xc/gSWV5Q3isa6Um2OHkJAvKWKBiuHu+Khb7C8RdZWnU5jnYM1gLXLBAjfWj7MDj48Jivs/ThiRXePovnr0rEOcRZqLx qX2/ccwK LlGUErchihOBtqRycTCAgMTpstaROAw5r6CAyFYPFscHuwN3Sv4A4V/pVswLWv/ddrFqUMX40xDxxGxLcAcDnFhWgm4/dKyXdQ1V7A0M2rJefX+L85J4hmMAsaQeM0e5AXZeDKtqAe2ye8XaVifSiiTXZVsc2CHbyR1SUtGHS2Fn3I50K8cl3hgyitKS7okZc+WvedoQFQXCbJU1l4o7Fpn/S1dL8WSCNrocygB576oTqGlWM+YzDqDM7gGaaeeTs4YQQXz/zSjRy8KT1bWRFW6XCEGC643/eKpFhzBimCMFFsvghHzwt1taRdw== 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 an RPAL call occurs, the sender modifies the receiver's state. If the sender exits abnormally after modifying the state or encounters an unhandled page fault and returns to a recovery point, the receiver's state will remain as modified by the sender (e.g., in the CALL state). Since the sender may have exited, the lazy switch will not occur, leaving the receiver unrecoverable (unable to be woken up via try_to_wake_up()). Therefore, the kernel must ensure the receiver's state remains valid in these cases. This patch addresses this by rebuild receiver's state during unhandled page faults or sender exits. The kernel detect the fsbase value recorded by the sender and use the fsbase value to locate the corresponding receiver. Then kernel checking if the receiver is in the CALL state set by the sender (using sender_id and service_id carried in the CALL state). If true, transitioning the receiver from CALL to WAIT state and notifying the receiver via sender_state that the RPAL call has completed. This ensures that even if the sender fails, the receiver can recover and resume normal operation by resetting its state and avoiding permanent blocking. Signed-off-by: Bo Li --- arch/x86/rpal/thread.c | 44 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/arch/x86/rpal/thread.c b/arch/x86/rpal/thread.c index db3b13ff82be..02c1a9c22dd7 100644 --- a/arch/x86/rpal/thread.c +++ b/arch/x86/rpal/thread.c @@ -224,6 +224,45 @@ int rpal_unregister_receiver(void) return ret; } +/* sender may corrupt receiver's state if unexpectedly exited, rebuild it */ +static void rpal_rebuild_receiver_context_on_exit(void) +{ + struct task_struct *receiver = NULL; + struct rpal_sender_data *rsd = current->rpal_sd; + struct rpal_sender_call_context *scc = rsd->scc; + struct rpal_receiver_data *rrd; + struct rpal_receiver_call_context *rcc; + unsigned long fsbase; + int state = rpal_build_call_state(rsd); + + if (scc->ec.magic != RPAL_ERROR_MAGIC) + goto out; + + fsbase = scc->ec.fsbase; + if (rpal_is_correct_address(rpal_current_service(), fsbase)) + goto out; + + receiver = rpal_find_next_task(fsbase); + if (!receiver) + goto out; + + rrd = receiver->rpal_rd; + if (!rrd) + goto out; + + rcc = rrd->rcc; + + if (atomic_read(&rcc->receiver_state) == state) { + atomic_cmpxchg(&rcc->sender_state, RPAL_SENDER_STATE_CALL, + RPAL_SENDER_STATE_KERNEL_RET); + atomic_cmpxchg(&rcc->receiver_state, state, + RPAL_RECEIVER_STATE_WAIT); + } + +out: + return; +} + int rpal_rebuild_sender_context_on_fault(struct pt_regs *regs, unsigned long addr, int error_code) { @@ -232,6 +271,7 @@ int rpal_rebuild_sender_context_on_fault(struct pt_regs *regs, unsigned long erip, ersp; int magic; + rpal_rebuild_receiver_context_on_exit(); erip = scc->ec.erip; ersp = scc->ec.ersp; magic = scc->ec.magic; @@ -249,8 +289,10 @@ int rpal_rebuild_sender_context_on_fault(struct pt_regs *regs, void exit_rpal_thread(void) { - if (rpal_test_current_thread_flag(RPAL_SENDER_BIT)) + if (rpal_test_current_thread_flag(RPAL_SENDER_BIT)) { + rpal_rebuild_receiver_context_on_exit(); rpal_unregister_sender(); + } if (rpal_test_current_thread_flag(RPAL_RECEIVER_BIT)) rpal_unregister_receiver(); -- 2.20.1