The evolution of the hierarchical listing left warts like the following: if (p->memdevs && !p->ports && !p->endpoints) { jchilddevs = json_object_new_array();
...whereby it tried to avoid creating a container for child devices if another container deeper in the hierarchy might supersede the upper-level containers. I.e. if endpoints are included in the listing then there will be nothing to report at the bus level. The protection is unnnecessary because cond_add_put_array_suffix() already handles the case of dropping empty containers when a lower level container subsumes all the objects. Moreover, it's a broken check when adding objects at new levels of the topology. CXL devices attached to an RCH cause memdevs to appear directly beneath a bus object, and not an intervening port. So in preparation for that change, delete all the unnecessary special casing for "jchildobj" container creation. Reported-by: Vishal Verma <vishal.l.ve...@intel.com> Fixes: 41d6769393f4 ("cxl/list: Move enabled memdevs underneath their endpoint") Signed-off-by: Dan Williams <dan.j.willi...@intel.com> --- cxl/filter.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cxl/filter.c b/cxl/filter.c index 56c659965891..040e7deefb3e 100644 --- a/cxl/filter.c +++ b/cxl/filter.c @@ -971,7 +971,7 @@ walk_child_ports(struct cxl_port *parent_port, struct cxl_filter_params *p, continue; } - if (p->memdevs && !p->endpoints) { + if (p->memdevs) { jchilddevs = json_object_new_array(); if (!jchilddevs) { err(p, @@ -1151,7 +1151,7 @@ int cxl_filter_walk(struct cxl_ctx *ctx, struct cxl_filter_params *p) } } - if (p->memdevs && !p->ports && !p->endpoints) { + if (p->memdevs) { jchilddevs = json_object_new_array(); if (!jchilddevs) { err(p, @@ -1169,7 +1169,7 @@ int cxl_filter_walk(struct cxl_ctx *ctx, struct cxl_filter_params *p) continue; } } - if (p->regions && !p->decoders) { + if (p->regions) { jchildregions = json_object_new_array(); if (!jchildregions) { err(p,