From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64AEC1D88B4 for ; Sun, 25 Jan 2026 11:32:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769340756; cv=none; b=YxD69OFmPVXwg4y2lChVc4g21CEl6XKiyINyUaczLUj7AbrDagjVN0v1e/EXNIjJ96TM0cVo1LKvUg46/DKkEwMZ1th0kF6ZgPr+28/hjReVrxlIkWJzLzVZW4VVeRqYZ47zliR9P1r01Rt8XGHW7SijWzeJIZGZfTso+04n0rQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769340756; c=relaxed/simple; bh=DALCkrQPWtk9H7+d/aGiJ42oNVLwpdqVy+SfoWTK9Q4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ct67tlnbqgJ5vWN6hfTFioNOoYKvooxorLcesU3f7bBpDqtsEhgCyJdeLds/TS/z3saCnJrQxfbdEHoqTYOp6MQIARjlsOKSwsgH9lX5ppmowWB4rdww5Z4s3kgmami5hql+J/Fpb//UsUWPMVYY0OA3TVlmBqgPbzvxsbDlQG0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=msLpPpb3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="msLpPpb3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E4098C4CEF1; Sun, 25 Jan 2026 11:32:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1769340756; bh=DALCkrQPWtk9H7+d/aGiJ42oNVLwpdqVy+SfoWTK9Q4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=msLpPpb3AN7Nz6lgCEhTvDNv/wrAShMlG+UIDVdsOhpcdvF74+u6CfBG4Alz7jxOq 6GGi/65QVo6nZ3ItWks6RPBBrbPZinQD/2QRGVN2uq+BqQrSv0c7kOb7USX3EgsH3q RNxLYVhwS5hoEL8qsYz1fQVil40SPdL01h1+hNbXAV3IvYhZkGJee5UcMfnM4bZy39 amJJc4dbvXNA5DK/U/HzvdBdwP0mjN/GIo+rmApMtxOQjixkFXgQxXFLmtcrAydotc kLX9L21y29tNDLCT5b4FyGT7UyEleZzk0XFK09d635WSoVe56bXmhRXAam5GhWkqGL YIfzVqZMI9LYA== Date: Sun, 25 Jan 2026 13:32:27 +0200 From: Mike Rapoport To: Breno Leitao Cc: Alexander Graf , Pasha Tatashin , Pratyush Yadav , 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, kernel-team@meta.com, SeongJae Park Subject: Re: [PATCH v4] kho: kexec-metadata: track previous kernel chain Message-ID: References: <20260121-kho-v4-1-5c8fe77b6804@debian.org> 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=us-ascii Content-Disposition: inline In-Reply-To: On Thu, Jan 22, 2026 at 04:04:55AM -0800, Breno Leitao wrote: > Hello Mike, > > On Thu, Jan 22, 2026 at 12:57:50PM +0200, Mike Rapoport wrote: > > > +/** > > > + * DOC: Kexec Metadata ABI > > > + * > > > > It would be nice to link it from Documentation/ as well ;-) > > Ack! I am planning something as: > > commit 90e098ca0d611b44594f08e50ba1cff3c932dd2b > Author: Breno Leitao > Date: Thu Jan 22 03:47:23 2026 -0800 > > kho: document kexec-metadata tracking feature > > Add documentation for the kexec-metadata feature that tracks the > previous kernel version and kexec boot count across kexec reboots. > This helps diagnose bugs that only reproduce when kexecing from > specific kernel versions. > > Suggested-by: Mike Rapoport > Signed-off-by: Breno Leitao > > diff --git a/Documentation/admin-guide/mm/kho.rst b/Documentation/admin-guide/mm/kho.rst > index 6dc18ed4b8861..1faf2c3ba4620 100644 > --- a/Documentation/admin-guide/mm/kho.rst > +++ b/Documentation/admin-guide/mm/kho.rst > @@ -113,3 +113,42 @@ stabilized. > ``/sys/kernel/debug/kho/in/sub_fdts/`` > Similar to ``kho/out/sub_fdts/``, but contains sub FDT blobs > of KHO producers passed from the old kernel. > + > +Kexec Metadata > +============== I'd move this section before "debugfs Interfaces", other than that LGTM. > + > +KHO automatically tracks metadata about the kexec chain, passing information > +about the previous kernel to the next kernel. This feature helps diagnose > +bugs that only reproduce when kexecing from specific kernel versions. ... > > > static __init int kho_init(void) > > > { > > > const void *fdt = kho_get_fdt(); > > > @@ -1357,6 +1413,15 @@ static __init int kho_init(void) > > > if (err) > > > goto err_free_fdt; > > > > > > + if (fdt) > > > + kho_process_kexec_metadata(); > > > > Can't we move it into the existing if (fdt) below? > > Unfortunately, that won't work due to a data dependency between the two > functions. > > kho_process_kexec_metadata() reads from the FDT subtree and populates kho_in: > > Basically: > > kho_in.kexec_count = metadata->kexec_count; > > While kho_populate_kexec_metadata() increments metadata->kexec_count: > > /* kho_in.kexec_count is set to 0 on cold boot */ > metadata->kexec_count = kho_in.kexec_count + 1; > > If kho_process_kexec_metadata() is moved after kho_populate_kexec_metadata(), > the count would always increment from 0 to 1, ignoring whatever was passed in > the FDT. > > Restructuring to call kho_in_debugfs_init() earlier also doesn't work: > > > if (fdt) { > kho_in_debugfs_init(&kho_in.dbg, fdt); > kho_process_kexec_metadata(); > return 0; > } > > /* Populate kexec metadata for the possible next kexec */ > err = kho_populate_kexec_metadata(); > if (err) > pr_warn("failed to initialize kexec-metadata subtree: %d\n", > err); > > This would return early without populating the kexec metadata for the next > kexec, breaking the chain on KHO boots. How about we rename kho_process_kexec_metadata() to kho_retreive_kexec_metadata() and add kho_process_kexec_metadata() that will first call _retrieve and then _populate? Something like static int __init kho_process_kexec_metadata(const void *fdt) { int err; if (fdt) kho_retrieve_kexec_metadata(); /* Populate kexec metadata for the possible next kexec */ err = kho_populate_kexec_metadata(); if (err) pr_warn("failed to initialize kexec-metadata subtree: %d\n", err); return err; } > --breno -- Sincerely yours, Mike.