From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 C7D5235F17F for ; Fri, 6 Mar 2026 11:47:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772797680; cv=none; b=akPx8w9GmqZ2KiDU5S0IkHD7bD5/E3usVGTnVHe+vNBd0u9J0f5KryPSJSJPfIadBGZVWm5ik7Czkmis7a3CTQu5lrFiutIas4EX3ULPv+b1hlgJpjDgugk1PncuN7L23OYk/YOY4u/sUGanyFU7bbdBAk7psyvAeLQqo8/WZ/o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772797680; c=relaxed/simple; bh=INBPLvBkaCyltOJlz3iVefeIYzzuvnE71dM4ZLLDyPw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=LuZXkFV+z6D7Ql0mRHJgXsVtsmdX0RgaoVeKzz8PTHFjtizoqRXMlBxqTBm0zc1r3MoHe043QSzWj6hBIUAc6x/tAiga6WPgs4U92tCKQEROwEP5EEKGEHzlbLWJJDeM5g3lsl46GL386tAr1dwPlXPOqojK8/XlPHdnc0LpUH8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=EoYBbDmK; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="EoYBbDmK" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Reply-To:Content-ID:Content-Description; bh=9Q1sENRTqUjIhGZLXP/WQo59Q+Ah+AXrTPRNuwNNsmU=; b=EoYBbDmKpVh+CjgoUIt8Rpho2l 4sGdjLo/aGg1MHTH6/SmjJhxkRewYGq3Dl3/cXpGpkNZD1YxLOCaYEIxHahM1P9urnzKFJf+exqkr bhBl2USUdXusi2Bd9XCwwskxouubnUxoNBPAJcsaNY9AEIXt4f5oYF83K0aSrabU5Yf1/7pP4wmCI I9L8YyrdxfCpJny4znGpkhhJtkMdAiuSN9gCQ+djogo/jEEp64NXyL7fpVj4Qs1BzE8PyELP1tvBy FDh3F6te+9zVOVPep/sP5jlrDusNYXT1U1PXh1nAuxVsktDssOLT0ZZw8kwhu7Uh+RWAZ+uWuQ0qX wO2OkXDA==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vyTen-00HTjc-2w; Fri, 06 Mar 2026 11:47:49 +0000 Date: Fri, 6 Mar 2026 03:47:43 -0800 From: Breno Leitao To: Pratyush Yadav Cc: Alexander Graf , Mike Rapoport , Pasha Tatashin , 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, SeongJae Park , kernel-team@meta.com Subject: Re: [PATCH v6 1/4] kho: add size parameter to kho_add_subtree() Message-ID: References: <20260127-kho-v6-0-56f9396681c2@debian.org> <20260127-kho-v6-1-56f9396681c2@debian.org> <2vxzjywszk9w.fsf@kernel.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=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <2vxzjywszk9w.fsf@kernel.org> X-Debian-User: leitao Hello Pratyush, Apologies for the delayed response — I was on vacation and just got back. On Wed, Feb 04, 2026 at 02:54:35PM +0100, Pratyush Yadav wrote: > Hi Breno, > > On Tue, Jan 27 2026, Breno Leitao wrote: > > > kho_add_subtree() assumes the fdt argument is always an FDT and calls > > fdt_totalsize() on it in the debugfs code path. This assumption will > > break if a caller passes arbitrary data instead of an FDT. > > > > When CONFIG_KEXEC_HANDOVER_DEBUGFS is enabled, kho_debugfs_fdt_add() > > calls __kho_debugfs_fdt_add(), which executes: > > > > f->wrapper.size = fdt_totalsize(fdt); > > > > Fix this by adding an explicit size parameter to kho_add_subtree() so > > callers specify the blob size. This allows subtrees to contain > > arbitrary data formats, not just FDTs. Update all callers: > > > > - memblock.c: use fdt_totalsize(fdt) > > - luo_core.c: use fdt_totalsize(fdt_out) > > - test_kho.c: use fdt_totalsize() > > - kexec_handover.c (root fdt): use fdt_totalsize(kho_out.fdt) > > > > Also update kho_in_debugfs_init() to compute sizes using fdt_totalsize() > > for the root and sub-FDTs it processes, since these are known to be > > actual FDT blobs. > > No, this doesn't seem right. The "fdt" field that kho_in_debugfs_init() > uses is the same "fdt" field where we put our non-FDT blobs. So I don't > see how these can be known to be actual FDTs. All this happened to work > because so far all users were FDT, but I bet it will break if you use > your blob here. Perhaps give it a try and see if I am understanding this > correctly? > > To be honest, I didn't think of this when I suggested you use the size > parameter. We have lost the size information, and it is hard for > kho_in_debugfs_init() to find out since it has no idea what the > underlying format is. > > One option is to have it in the KHO FDT, but I am not sure that is a > good idea. Adding to ABI for debug feature sounds odd (not that I am > completely against it, it just feels off). > > Another would be to give users a hook to populate the blobs when they > call kho_retrieve_subtree(), so they can figure out how large the blob > needs to be. This has another benefit: once we move away from FDT, it > makes little sense to dump the blob since userspace won't have a way to > parse it. Even with FDT, userspace still can't parse everything. For > example, say the FDT has a reference to a struct kho_vmalloc. You'd get > a pointer to the head of the list, but you would have no way of knowing > what is inside the vmalloc buffer. This has the downside of not being > able to show anything if the subsystem never calls > kho_retrieve_subtree(). > > Unfortunately I don't have much time this week to dive deeper into this. > These are only things off the top of my head and I haven't thought too > deeply, so please don't take them as strong suggestions. It would be > great if you can think a bit more about the problem and come up with a > recommendation? > > I will try to get back to this series in the next 1-2 weeks and > hopefully find some way to make progress. > > I skimmed the rest of the patches and they all LGTM at a high level. I went with storing the size in the KHO FDT. The addition is small — a "blob-size" u64 property per subnode — and I think it's warranted: this is intrinsic metadata about the blob rather than a purely debug-specific artifact. It also rounds out the API nicely. I extended kho_retrieve_subtree() with an optional size_t *size output parameter so callers can retrieve the blob size without needing to understand the underlying format. I'll send a new version soon. That said, the patchset has been growing considerably, so if necessary I can defer reworking this infrastructure to follow-up patches and get the kexec-metadata patches later. Thanks for the review, --breno