mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
kho: fix kho_in_debugfs_init() to handle non-FDT blobs
kho_in_debugfs_init() calls fdt_totalsize() to determine blob sizes, which assumes all blobs are FDTs. This breaks for non-FDT blobs like struct kho_kexec_metadata. Fix this by reading the "blob-size" property from the FDT (persisted by kho_add_subtree()) instead of calling fdt_totalsize(). Also rename local variables from fdt_phys/sub_fdt to blob_phys/blob for consistency with the non-FDT-specific naming. Link: https://lore.kernel.org/20260316-kho-v9-4-ed6dcd951988@debian.org Signed-off-by: Breno Leitao <leitao@debian.org> Reviewed-by: Pratyush Yadav <pratyush@kernel.org> Cc: Alexander Graf <graf@amazon.com> Cc: David Hildenbrand <david@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport (Microsoft) <rppt@kernel.org> Cc: Pasha Tatashin <pasha.tatashin@soleen.com> Cc: SeongJae Park <sj@kernel.org> Cc: Shuah Khan <skhan@linuxfoundation.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
85e4139282
commit
062dd306d9
|
|
@ -122,24 +122,34 @@ __init void kho_in_debugfs_init(struct kho_debugfs *dbg, const void *fdt)
|
|||
fdt_for_each_subnode(child, fdt, 0) {
|
||||
int len = 0;
|
||||
const char *name = fdt_get_name(fdt, child, NULL);
|
||||
const u64 *fdt_phys;
|
||||
void *sub_fdt;
|
||||
const u64 *blob_phys;
|
||||
const u64 *blob_size;
|
||||
void *blob;
|
||||
|
||||
fdt_phys = fdt_getprop(fdt, child,
|
||||
blob_phys = fdt_getprop(fdt, child,
|
||||
KHO_SUB_TREE_PROP_NAME, &len);
|
||||
if (!fdt_phys)
|
||||
if (!blob_phys)
|
||||
continue;
|
||||
if (len != sizeof(*fdt_phys)) {
|
||||
pr_warn("node %s prop fdt has invalid length: %d\n",
|
||||
name, len);
|
||||
if (len != sizeof(*blob_phys)) {
|
||||
pr_warn("node %s prop %s has invalid length: %d\n",
|
||||
name, KHO_SUB_TREE_PROP_NAME, len);
|
||||
continue;
|
||||
}
|
||||
sub_fdt = phys_to_virt(*fdt_phys);
|
||||
|
||||
blob_size = fdt_getprop(fdt, child,
|
||||
KHO_SUB_TREE_SIZE_PROP_NAME, &len);
|
||||
if (!blob_size || len != sizeof(*blob_size)) {
|
||||
pr_warn("node %s missing or invalid %s property\n",
|
||||
name, KHO_SUB_TREE_SIZE_PROP_NAME);
|
||||
continue;
|
||||
}
|
||||
|
||||
blob = phys_to_virt(*blob_phys);
|
||||
err = __kho_debugfs_blob_add(&dbg->fdt_list, sub_fdt_dir, name,
|
||||
sub_fdt, fdt_totalsize(sub_fdt));
|
||||
blob, *blob_size);
|
||||
if (err) {
|
||||
pr_warn("failed to add fdt %s to debugfs: %pe\n", name,
|
||||
ERR_PTR(err));
|
||||
pr_warn("failed to add blob %s to debugfs: %pe\n",
|
||||
name, ERR_PTR(err));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user