From nobody Mon Feb 9 15:09:05 2026 Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F19228F48 for ; Thu, 8 Jan 2026 16:41:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767890484; cv=none; b=hO3fMp3R6GXTzTUwrNpmfIRdyevLlkm41vYtlkpdZaeD836ej8uIimWbHJT/fPxf01gxw1RK+wB0leyJPTEHyPKs22wrNyLRhDpCY5PSP8qoRDl5Afvkb2Je3C5LDqFEP+UKmIzTcqdk+hQPscO8KHD6VKoH25bltLx+bCYNSDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767890484; c=relaxed/simple; bh=lVq1FcOCQMqfHOK5DcXTIKEzb9rwsZ/ITwXUKRT+mew=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NccYAP/aeo/pqiuR+jr2/TqWGVq8cXC6PMIu0pFGmQSVEv0FS6MthDWu6p8herWuRwdWxhipImFze+eBidU8wzvNAYA7jEY54nGImYzM1sm+ncnjZh+LkCKB9JxaH1J8CvfRVwgBRd9Aav6DWx37E/JIRHB/y4auRynt9vQWyl4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.167.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-455a461ab6eso1416700b6e.2 for ; Thu, 08 Jan 2026 08:41:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767890482; x=1768495282; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=eEKbCl6eHGkX3T8z34Ba8e5S/FDTyu14lC4qmzFFHFA=; b=bqTBrOzsD2dBQpsZFkkAsIOjJYXMSLrHpUCsEpWYSEYhK+GXuKvg7+lmZBwVoQtWm6 q9wCzr+HAIE8ocIy6vP1GHAsXGIojdkeEuL27zpt1Xn5FwH+5nKLuspPkSh/4mKxtOcF TdV1Gei9zvqI2mErTFK0D7f4/cLnlIjR7Toox0vdhUoXsR2IvnkDp2aGIeZRme5mKU9l zCLrAYwMg68AhSvglwB/fn8Jb3cDLyBarFDHzC/XLiWV9ApLRB1XV4OQK05gHAsorObY 9Bh7uLeKvHse1TV029x9Ouk/n7JG84JEHgh3bCB/3IEIItIVxoAaZusiaWxCmqGgFUtb Jqfw== X-Gm-Message-State: AOJu0YwpW3AlGTSpgLDMeLMSQDYrEazjQ7snUxeQNzI30jG9HyJUGZQY T8zatlCnOueZz69i8qY0hAnRiB1vuAaQKSvLnqKEDu9b42T3U+FXsFMKIYB+rg== X-Gm-Gg: AY/fxX61bl1Z3YchxppRfsTaq3n2jjF0LutrhnjmAg/uU5yomNkxQ3G3vDQzIoXUa0+ lUf8taHrgtFXlw1upNU1iAyAJryymSSZdsp4jH3+jtga/g6tUesIG4zFadWI13yhSBUn4S3ZvEy 2ptsM+cBBxnQiSlsD8QQpNnnWEb5uBbbT9krtXqfvuZcss5321eEvM9hMpPS6G0hHkrGhMoi3Lh pGvcgUWy4yUcbDV/QM8V2mIuTj6EF+EXGH7A8lsKSMK0zF0vZZluxtrLVRCf7XwXm6G5IlC9sQ9 VkbiJSpK6WsCC4sD1unHVaMy9MCq23bZfnle3b12DQoksgbk7vZXF2sb8Qwrd+RYaPjbYHw445s JKtrdJSJMcMmLBChlvH5p83tZLRHSlQ63ZVnbuNOuBRHX+/UboupuWZJ2UJtWZYm9Rrgf2AK3l4 kayQ== X-Google-Smtp-Source: AGHT+IHwg85rGQHbkPrcqt1aBeanOarcVUdF/YJuRLIGyTivBFmbrsvMl5+YqDe216QHSew4Eycetw== X-Received: by 2002:a05:6808:1188:b0:455:7da6:44d5 with SMTP id 5614622812f47-45a6bdaf691mr2406341b6e.27.1767890481759; Thu, 08 Jan 2026 08:41:21 -0800 (PST) Received: from localhost ([2a03:2880:10ff:71::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-3ffa5161468sm5298579fac.22.2026.01.08.08.41.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jan 2026 08:41:21 -0800 (PST) From: Breno Leitao Date: Thu, 08 Jan 2026 08:40:58 -0800 Subject: [PATCH v3 1/2] kho: history: track previous kernel version Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260108-kho-v3-1-b1d6b7a89342@debian.org> References: <20260108-kho-v3-0-b1d6b7a89342@debian.org> In-Reply-To: <20260108-kho-v3-0-b1d6b7a89342@debian.org> To: Alexander Graf , Mike Rapoport , Pasha Tatashin , Pratyush Yadav Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org, usamaarif642@gmail.com, rmikey@meta.com, clm@fb.com, riel@surriel.com, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=3243; i=leitao@debian.org; h=from:subject:message-id; bh=lVq1FcOCQMqfHOK5DcXTIKEzb9rwsZ/ITwXUKRT+mew=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpX94v0uvNnwH22s6hbp7/tiFmZZwZTGwvXKop4 GrcufIuHBmJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaV/eLwAKCRA1o5Of/Hh3 bYjfD/4q44IGNvMydiP1wiCUgQyjvqTCiWLge5E7NW/ndXZiqkKPAyOKxtqhbRpe3c4oYG93YXX hY1pBWYWitOmAEIXiasAf7f/hD7fCvP3WLdm+BV+gHCkPrEBOny3qIUyZg2srW6xhWOMsnGMXuY qG5+RTcUmpRnD6HISAobniQawTfwhu85aUGn8ip5IUZ0YNvAGX/bVHCIqnhPSmItE7H/F7uuenO xoXJhbw4VkkHdtk1ybE9RSKp3K0lOV3aqNgwUD3K/yLWx+jibQ2XyLRYDyCYMEaQjToqlSe+NMN aBaWk66cmepQT1SWPJqAxVe2DgTJ0bJvcFPCRvnJabEIIrCZCZ3uH0AFNaSJnNsDDjocfjxNwX4 Tq2CC+Dffe67p72GupDlMCgZBT/Dy4oK3gj2FEZkfgaF0ydlnL5m+E6b9akv0RLs1gaQlXWZ4j1 xeW6PoYuOwmnzxkN64Wa7WKVg+Uh0LRfqU+a/NJgpJwybc4apdsa3iCTRKx3vXqANCwwctaGjbi nK8CZoIV+z5kL8EpHAIKd7NnO7XLIvJOCCfaDyAlIS3gmHIMegwdKiWFlGCZUA5lel0kIgshnLS 34ZfVxSXBK7smuJX22xF2pphNI9HjIPTgiyH52WyWLw3Ov9QQuyvAj2xn8u4jB8MV8oEOAY2S3C wIxZp7CPi87gccw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Store and display the kernel version from the previous kexec boot. The current kernel's release string is saved to the "previous-release" property in the KHO FDT before kexec. On the next boot, if this property exists, the previous kernel version is retrieved and printed during early boot. This helps diagnose bugs that only manifest when kexecing from specific kernel versions, making it easier to correlate crashes with the kernel that initiated the kexec. Signed-off-by: Breno Leitao --- include/linux/kho/abi/kexec_handover.h | 3 +++ kernel/liveupdate/kexec_handover.c | 25 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/linux/kho/abi/kexec_handover.h b/include/linux/kho/abi= /kexec_handover.h index 285eda8a36e4..f4f31e8f575b 100644 --- a/include/linux/kho/abi/kexec_handover.h +++ b/include/linux/kho/abi/kexec_handover.h @@ -84,6 +84,9 @@ /* The FDT property for sub-FDTs. */ #define KHO_FDT_SUB_TREE_PROP_NAME "fdt" =20 +/* The FDT property to track previous kernel (kexec caller) */ +#define KHO_PROP_PREVIOUS_RELEASE "previous-release" + /** * DOC: Kexec Handover ABI for vmalloc Preservation * diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 3cf2dc6840c9..b2d57868d22f 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -22,6 +22,7 @@ #include #include #include +#include =20 #include =20 @@ -1246,6 +1247,7 @@ struct kho_in { phys_addr_t fdt_phys; phys_addr_t scratch_phys; phys_addr_t mem_map_phys; + char previous_release[__NEW_UTS_LEN + 1]; struct kho_debugfs dbg; }; =20 @@ -1325,6 +1327,8 @@ static __init int kho_out_fdt_setup(void) err |=3D fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); err |=3D fdt_property(root, KHO_FDT_MEMORY_MAP_PROP_NAME, &empty_mem_map, sizeof(empty_mem_map)); + err |=3D fdt_property_string(root, KHO_PROP_PREVIOUS_RELEASE, + init_uts_ns.name.release); err |=3D fdt_end_node(root); err |=3D fdt_finish(root); =20 @@ -1436,6 +1440,22 @@ void __init kho_memory_init(void) } } =20 +static int __init kho_print_previous_kernel(const void *fdt) +{ + const char *prev_release; + int len; + + prev_release =3D fdt_getprop(fdt, 0, KHO_PROP_PREVIOUS_RELEASE, &len); + if (!prev_release || len <=3D 0) + return -ENOENT; + + strscpy(kho_in.previous_release, prev_release, + sizeof(kho_in.previous_release)); + pr_info("exec from: %s\n", kho_in.previous_release); + + return 0; +} + void __init kho_populate(phys_addr_t fdt_phys, u64 fdt_len, phys_addr_t scratch_phys, u64 scratch_len) { @@ -1513,7 +1533,10 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 f= dt_len, kho_in.scratch_phys =3D scratch_phys; kho_in.mem_map_phys =3D mem_map_phys; kho_scratch_cnt =3D scratch_cnt; - pr_info("found kexec handover data.\n"); + + if (kho_print_previous_kernel(fdt)) + /* Fallback message when previous kernel info unavailable */ + pr_info("found kexec handover data.\n"); =20 out: if (fdt) --=20 2.47.3