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 F2FB7C2D0CD for ; Thu, 15 May 2025 18:23:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D3918D0003; Thu, 15 May 2025 14:23:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 34F2D8D0001; Thu, 15 May 2025 14:23:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 15B088D0003; Thu, 15 May 2025 14:23:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E1ABB8D0001 for ; Thu, 15 May 2025 14:23:38 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E66471A048E for ; Thu, 15 May 2025 18:23:39 +0000 (UTC) X-FDA: 83445965358.20.7F1E7FC Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) by imf06.hostedemail.com (Postfix) with ESMTP id 2060C18000A for ; Thu, 15 May 2025 18:23:37 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=soleen-com.20230601.gappssmtp.com header.s=20230601 header.b=LhisfoZ2; spf=pass (imf06.hostedemail.com: domain of pasha.tatashin@soleen.com designates 209.85.222.169 as permitted sender) smtp.mailfrom=pasha.tatashin@soleen.com; dmarc=pass (policy=none) header.from=soleen.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747333418; a=rsa-sha256; cv=none; b=5443ZsgnFt6gi4IaS+GLcqxMg1DXT8QaPX2eZheWtCN6NYC2K+zIuzIqVmmqdKa0Rlq8XX U6GwsLXrVLNKdlf7cjglE/6B9IrWa+04HtUbKkCvBFQ3BYlcHWksOG7eR7jTqHIMg3j4Yd lph4hoYQCgpnCy4tF+oDyjBwZZAwjxU= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=soleen-com.20230601.gappssmtp.com header.s=20230601 header.b=LhisfoZ2; spf=pass (imf06.hostedemail.com: domain of pasha.tatashin@soleen.com designates 209.85.222.169 as permitted sender) smtp.mailfrom=pasha.tatashin@soleen.com; dmarc=pass (policy=none) header.from=soleen.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747333418; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AvA/5mmwvlyXjjShgPRe3HUQDr1iF9RhOznOEeKkVGs=; b=qvkXEXGNZM17XSKpQkAx5nOiKZKFVRGN1BMqPBQxEYIOS68GLNpBBA58Kl4Yz7ZVQkOLMz ikCH4NeZub9JrVYUdVXBt/IzHgVb4x1Wxzy/B+qVYkHkHmKl/xJZfuQXhBR9oSAAXIeTer bXe52Z9NPnDxgnhwpOqGeEY3jrmJyBw= Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-7c9677cd6d7so128338085a.3 for ; Thu, 15 May 2025 11:23:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen-com.20230601.gappssmtp.com; s=20230601; t=1747333417; x=1747938217; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=AvA/5mmwvlyXjjShgPRe3HUQDr1iF9RhOznOEeKkVGs=; b=LhisfoZ2qVBFOLlPwXQ3ZO0+deE8QHeAO1zuXU9pa9ZF+r7eawBn8XO6GNgBh6mzfI knHin+wnU7P6nK3YjCo8K9WR89jD1LF/0hGVNxpNBs/+6IS4ljwL4bfHn/fFaysS0f9j uIuhd8WPdKlBsVNqXssjPk69aYMf+Xw9PgIwz2wY2CDbHJaQbiKaTiDxoVhYnX2doZ59 3BvxuJPBUgoX4zikaDDbBk6H11gWGJARqjTO+0XWBCdCE2JmVd5VidXByRmwt5IIog7X 5KUGVIIrskeEQp+BLxMoX4wBw+ALAf/ImNqYRt4Pgbw4RDpDuua2zO9CmHtG0v6761o/ KBhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747333417; x=1747938217; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AvA/5mmwvlyXjjShgPRe3HUQDr1iF9RhOznOEeKkVGs=; b=iZSZu/c53ZDrQLV0+zFOl7vLAWu9y8NrhtVlYG7zmESPS8uv7SmJvTIeugbMWyc6o4 F79NxfLhf6vowVV0GgS1xiZInPV8u32EmaloJL9T8ED4XeBpRxAIskRZSjSN+qpJrqA7 057Cw0IRCB6a66davaN784Eg1RDyrAAWemRbheu18kWectFZdLkcWYbWZLVRZ+FR3ZZb Uv3mqWEtHyzKSj61ITsX4Jjan7c9d6ADI7oe841Rdx99VnAE8zxEtpvVjsbZa2oJv7Yj lGcNxDoNYiE8/vewwVFEbPmLr0W2wlCiXohvPL8k9lSzk4Dy+2tGS3H97NV7eFatNr1U wErQ== X-Forwarded-Encrypted: i=1; AJvYcCXdj/Y6lxTcG7QEfqAXmNMKTmSSGhCNd5YUnIzkW89Ua8neCEG2ghbkVTObwgCMcurgAwTVTjfd/w==@kvack.org X-Gm-Message-State: AOJu0YyBhLKYCC0mHtNpq5qJM0kG2RjUhL2KirKeZAQr0bfn+hc/29eQ JPaxgeX67FyshQiKSh2UjCys5pvmoWD7lakeE5cOqjxXvH0pI5UXjor/xRMLoRPJw00= X-Gm-Gg: ASbGncvrOeDnv7ykJhOMd5W14TZ4Fvj2YFhvpOXxeTOFo2Dv11KmWXOR/ckoXJaZcdB 3ctY6WEDavCpgCnrXfTov9TV+BcSVAwFxoeZBsZH7/Yzv1DIa3ZUaMW8dJ2xwdPjfm9GmmYPflI uIInR4KVAk59W9k5Ww3BIyGiRt34Bxqx9z9x21dXTP7FjinvsUtshyoZAy711TfeOshtpWc9Ivx kybNzT1dH4OiaQIz21rIvjcOrEEPx4K5tnLmEOlhtZxzTWcCFQE78NiML3D3sqvnBLCU6EDXtsp Gncql/ed0+tyP8CqNTNrCYQ2nhc2m/iOvvo9XiagUw3eHB/O1WRVwK+vNIhriwgtH/Le00zXG7P Q/5kB9459dR1T3/Q4GaHAdvFLS2raKaaC/9xSfYQOPRcj X-Google-Smtp-Source: AGHT+IGwGfafVEqszpzHfVyT1n75QQOkLMjmW8/M2osA6KUoeC67c8MFcYHqA49j/QOV7cBeHjhLpQ== X-Received: by 2002:a05:622a:4113:b0:477:e7c:a4c with SMTP id d75a77b69052e-494ae47d27fmr6871581cf.39.1747333417029; Thu, 15 May 2025 11:23:37 -0700 (PDT) Received: from soleen.c.googlers.com.com (138.200.150.34.bc.googleusercontent.com. [34.150.200.138]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7cd466fc2afsm18218685a.0.2025.05.15.11.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 11:23:36 -0700 (PDT) From: Pasha Tatashin To: pratyush@kernel.org, jasonmiu@google.com, graf@amazon.com, changyuanl@google.com, pasha.tatashin@soleen.com, rppt@kernel.org, dmatlack@google.com, rientjes@google.com, corbet@lwn.net, rdunlap@infradead.org, ilpo.jarvinen@linux.intel.com, kanie@linux.alibaba.com, ojeda@kernel.org, aliceryhl@google.com, masahiroy@kernel.org, akpm@linux-foundation.org, tj@kernel.org, yoann.congal@smile.fr, mmaurer@google.com, roman.gushchin@linux.dev, chenridong@huawei.com, axboe@kernel.dk, mark.rutland@arm.com, jannh@google.com, vincent.guittot@linaro.org, hannes@cmpxchg.org, dan.j.williams@intel.com, david@redhat.com, joel.granados@kernel.org, rostedt@goodmis.org, anna.schumaker@oracle.com, song@kernel.org, zhangguopeng@kylinos.cn, linux@weissschuh.net, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, gregkh@linuxfoundation.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, rafael@kernel.org, dakr@kernel.org, bartosz.golaszewski@linaro.org, cw00.choi@samsung.com, myungjoo.ham@samsung.com, yesanishhere@gmail.com, Jonathan.Cameron@huawei.com, quic_zijuhu@quicinc.com, aleksander.lobakin@intel.com, ira.weiny@intel.com, andriy.shevchenko@linux.intel.com, leon@kernel.org, lukas@wunner.de, bhelgaas@google.com, wagi@kernel.org, djeffery@redhat.com, stuart.w.hayes@gmail.com, ptyadav@amazon.de Subject: [RFC v2 07/16] luo: luo_subsystems: implement subsystem callbacks Date: Thu, 15 May 2025 18:23:11 +0000 Message-ID: <20250515182322.117840-8-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog In-Reply-To: <20250515182322.117840-1-pasha.tatashin@soleen.com> References: <20250515182322.117840-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 2060C18000A X-Stat-Signature: 5f518krgooc8zrs1k67aexrxbhuyoomd X-HE-Tag: 1747333417-235188 X-HE-Meta: U2FsdGVkX19Sjf9jUpq4bAk/fL1E3xjQGB5UZ/0doaXf96nASbLdP5UoLoUswDg44W/KBF0yQqLc0ruypKJGkj9FAqcMzqLOpb6d0iVhu+NsJsMc+o45stIBNE0o/i7Z7a2l+BS74LLZRvRiLq2Ub49ZYRYx1Mzbr47e/EafTq9AV5QMU3k/E0VZP5qeMKeCaiDMxmfk4RKWnWzwWyPH9XkAqOwyYCJtmGgY1yDA7ThzqO89HnzGGLxAYkFmqM8hKSisJxB3DIWYgUly29H8ln0v25qHeyYaEHgFpQLCwM8/joBl2JJ2wEGbkeTvh3no4t3rZngnyseEnjcS8ijPpe1ND+mpL7VlPMEYFB2h3HFvhfrjoE+VtCwrXHTF5Ug+cxXfHYcVNFftOYxlA1vEQ7mX2TbLTlsglHTOZUJPzSHmjESkhnKAcC1gRajMxvMfF9pS4M8A/FEMh4Yhb6pR3uuoopcgRmTjIMvyEXiu+30JTU0w3F6k5yRB/036IFUNhkl9B/6z5eQlX9ohFinO4hGTk5/MHbBzxOvc4yYMMbHvjqjjWgCMzDmvn3r5MD+znuQswplrcV9mCgmi3Ksfq4x9V1gVJWVQkPG+73eYNr+oJ8Djwt+O07ZYQXQ2t2h+MzaU3eozW3kRi813TQ7tGwvfLTx0jH6D4ddNUCjHPtCUIKsIItAxUjijvCtnl4BZekKyUtnGA/WRklRNw4s666iuX0idxe51GOrSt/3dk5WiiuT5FEVX8F4ss3wlRhJMxkz76tc71H9Myvh7P8zrk3y/iYqeMINkLG+iWB+lIxpqFcftFWfrE/jWTCsTNzyiHjx+7YPXL76ckckXbcrhGrrNscq+YGRIQdTf6c8J1wn4F+ETcyAaYhpV5qrPVaddbwni5ZP0y2bZc4Q8+OIcgCei4gpYKLyGb1BGDeOwEn3Byy1gAZm/sINyVA9UrwWNpIbs++HtJhWcDPSaAx3 KD+Lcfy9 ArcRD52kRXe/yF3AgA2bHICrz7gbAxDJ96wi8PTYHhurtkU6OIAwpWZMAlhxW9pOq0A/SAvXMP1A5dRI7fyTVseUjYkpIk/r3dUxR/5yEXDgAgiHO4UJfzGpuGFZ1hqoHEqPTnzc+3F4j2iADULNUDQdsrHoT4BVe+VgPrE++jcpzHmf3PvexYYPaSFfNiyxo/w3+0/W9Xq/9xlEu/EdS81PMlMZuW3NDQPMaQNsF152L+61j03QTGnzUyzVDA4w2MoAkoOrbXBwXE5Cmyn+746ck/x6X11KP2l5Bymji3hasIIODAchjnGlYUnU8tmP1E0/s9rno6Hk/3XNA7Z/dvK8+uKHZSpSD3vzrZaC1GiLG59qNzq9m4crkvOgX+iwRIAUBMAVbm9ZJ2cvR29ZAdweeKEnBfTEDXWJARyd2jAQF34oR//jWWYmuQ+vK3JWK+FLb5/0j3WLaNjJ8DTpCaljYJcKyOLtCljnvmNTXFcTPvJdgTgz/NyPNkMYWTjcKahDsbRZ2yWHn8tPkdWpJDC4LUzqKtBcTC5jc 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: Implement the core logic within luo_subsystems.c to handle the invocation of registered subsystem callbacks and manage the persistence of their state via the LUO FDT. This replaces the stub implementations from the previous patch. This completes the core mechanism enabling subsystems to actively participate in the LUO state machine, execute phase-specific logic, and persist/restore a u64 state across the live update transition using the FDT. Signed-off-by: Pasha Tatashin --- drivers/misc/liveupdate/luo_subsystems.c | 133 ++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) diff --git a/drivers/misc/liveupdate/luo_subsystems.c b/drivers/misc/liveupdate/luo_subsystems.c index 436929a17de0..71f5f0468b0d 100644 --- a/drivers/misc/liveupdate/luo_subsystems.c +++ b/drivers/misc/liveupdate/luo_subsystems.c @@ -99,6 +99,66 @@ void __init luo_subsystems_startup(void *fdt) luo_fdt_in = fdt; } +static void __luo_do_subsystems_cancel_calls(struct liveupdate_subsystem *boundary_subsystem) +{ + struct liveupdate_subsystem *subsystem; + + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + if (subsystem == boundary_subsystem) + break; + + if (subsystem->cancel) { + subsystem->cancel(subsystem->arg, + subsystem->private_data); + } + subsystem->private_data = 0; + } +} + +static void luo_subsystems_retrieve_data_from_fdt(void) +{ + struct liveupdate_subsystem *subsystem; + int node_offset, prop_len; + const void *prop; + + if (!luo_fdt_in) + return; + + node_offset = fdt_subnode_offset(luo_fdt_in, 0, + LUO_SUBSYSTEMS_NODE_NAME); + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + prop = fdt_getprop(luo_fdt_in, node_offset, + subsystem->name, &prop_len); + + if (!prop || prop_len != sizeof(u64)) { + panic("In FDt node '/%s' can't find property '%s': %s\n", + LUO_SUBSYSTEMS_NODE_NAME, subsystem->name, + fdt_strerror(node_offset)); + } + memcpy(&subsystem->private_data, prop, sizeof(u64)); + } +} + +static int luo_subsystems_commit_data_to_fdt(void) +{ + struct liveupdate_subsystem *subsystem; + int ret, node_offset; + + node_offset = fdt_subnode_offset(luo_fdt_out, 0, + LUO_SUBSYSTEMS_NODE_NAME); + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + ret = fdt_setprop(luo_fdt_out, node_offset, subsystem->name, + &subsystem->private_data, sizeof(u64)); + if (ret < 0) { + pr_err("Failed to set FDT property for subsystem '%s' %s\n", + subsystem->name, fdt_strerror(ret)); + return -ENOENT; + } + } + + return 0; +} + /** * luo_do_subsystems_prepare_calls - Calls prepare callbacks and updates FDT * if all prepares succeed. Handles cancellation on failure. @@ -114,7 +174,29 @@ void __init luo_subsystems_startup(void *fdt) */ int luo_do_subsystems_prepare_calls(void) { - return 0; + struct liveupdate_subsystem *subsystem; + int ret; + + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + if (!subsystem->prepare) + continue; + + ret = subsystem->prepare(subsystem->arg, + &subsystem->private_data); + if (ret < 0) { + pr_err("Subsystem '%s' prepare callback failed [%d]\n", + subsystem->name, ret); + __luo_do_subsystems_cancel_calls(subsystem); + + return ret; + } + } + + ret = luo_subsystems_commit_data_to_fdt(); + if (ret) + __luo_do_subsystems_cancel_calls(NULL); + + return ret; } /** @@ -132,7 +214,29 @@ int luo_do_subsystems_prepare_calls(void) */ int luo_do_subsystems_freeze_calls(void) { - return 0; + struct liveupdate_subsystem *subsystem; + int ret; + + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + if (!subsystem->freeze) + continue; + + ret = subsystem->freeze(subsystem->arg, + &subsystem->private_data); + if (ret < 0) { + pr_err("Subsystem '%s' freeze callback failed [%d]\n", + subsystem->name, ret); + __luo_do_subsystems_cancel_calls(subsystem); + + return ret; + } + } + + ret = luo_subsystems_commit_data_to_fdt(); + if (ret) + __luo_do_subsystems_cancel_calls(NULL); + + return ret; } /** @@ -143,6 +247,16 @@ int luo_do_subsystems_freeze_calls(void) */ void luo_do_subsystems_finish_calls(void) { + struct liveupdate_subsystem *subsystem; + + luo_subsystems_retrieve_data_from_fdt(); + + list_for_each_entry(subsystem, &luo_subsystems_list, list) { + if (subsystem->finish) { + subsystem->finish(subsystem->arg, + subsystem->private_data); + } + } } /** @@ -156,6 +270,8 @@ void luo_do_subsystems_finish_calls(void) */ void luo_do_subsystems_cancel_calls(void) { + __luo_do_subsystems_cancel_calls(NULL); + luo_subsystems_commit_data_to_fdt(); } /** @@ -279,6 +395,19 @@ EXPORT_SYMBOL_GPL(liveupdate_unregister_subsystem); */ int liveupdate_get_subsystem_data(struct liveupdate_subsystem *h, u64 *data) { + int node_offset, prop_len; + const void *prop; + + if (!luo_fdt_in || !liveupdate_state_updated()) + return -ENOENT; + + node_offset = fdt_subnode_offset(luo_fdt_in, 0, + LUO_SUBSYSTEMS_NODE_NAME); + prop = fdt_getprop(luo_fdt_in, node_offset, h->name, &prop_len); + if (!prop || prop_len != sizeof(u64)) + return -ENOENT; + memcpy(data, prop, sizeof(u64)); + return 0; } EXPORT_SYMBOL_GPL(liveupdate_get_subsystem_data); -- 2.49.0.1101.gccaa498523-goog