[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] device-tree: optimize dt_device_for_passthrough()
On 11/02/2025 12:18, Grygorii Strashko wrote: > > > The dt_device_for_passthrough() is called many times during Xen > initialization and Dom0 creation. On every call it traverses struct > dt_device_node properties list and compares compares properties name with double "compares" > "xen,passthrough" which is runtime overhead. This can be optimized by Are you sure? Looking at the calls, it's almost only used at boot except for dt overlay. > marking dt_device_node as passthrough while unflattening DT. > > This patch introduced new struct dt_device_node property "is_passthrough" > which is filled if "xen,passthrough" property is present while unflattening > DT and dt_device_for_passthrough() just return it's value. In the past we were skeptical about adding new fields to the dt_device_node structure for use cases like this one. I would say this optimization is not worth it. Also, why would you optimize dt_device_for_passthrough but not e.g. dt_device_is_available. You can check with other Arm maintainers. ~Michal > > Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx> > --- > xen/common/device-tree/device-tree.c | 7 +++++-- > xen/include/xen/device_tree.h | 2 ++ > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/xen/common/device-tree/device-tree.c > b/xen/common/device-tree/device-tree.c > index d0528c582565..a329aaf576da 100644 > --- a/xen/common/device-tree/device-tree.c > +++ b/xen/common/device-tree/device-tree.c > @@ -1682,8 +1682,7 @@ bool dt_device_is_available(const struct dt_device_node > *device) > > bool dt_device_for_passthrough(const struct dt_device_node *device) > { > - return (dt_find_property(device, "xen,passthrough", NULL) != NULL); > - > + return device->is_passthrough; > } > > static int __dt_parse_phandle_with_args(const struct dt_device_node *np, > @@ -1913,6 +1912,7 @@ static unsigned long unflatten_dt_node(const void *fdt, > np->used_by = 0; > /* By default the device is not protected */ > np->is_protected = false; > + np->is_passthrough = false; > INIT_LIST_HEAD(&np->domain_list); > > if ( new_format ) > @@ -2001,6 +2001,9 @@ static unsigned long unflatten_dt_node(const void *fdt, > * stuff */ > if ( strcmp(pname, "ibm,phandle") == 0 ) > np->phandle = be32_to_cpup((__be32 *)*p); > + > + if ( strcmp(pname, "xen,passthrough") == 0 ) > + np->is_passthrough = true; > pp->name = pname; > pp->length = sz; > pp->value = (void *)*p; > diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h > index 5ff763bb80bb..96001d5b7843 100644 > --- a/xen/include/xen/device_tree.h > +++ b/xen/include/xen/device_tree.h > @@ -94,6 +94,8 @@ struct dt_device_node { > > /* IOMMU specific fields */ > bool is_protected; > + /* Indicates DT device is for passthrough */ > + bool is_passthrough; > > #ifdef CONFIG_STATIC_EVTCHN > /* HACK: Remove this if there is a need of space */ > -- > 2.34.1 >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |