Hi, Heikki Krogerus <[email protected]> writes: > @@ -197,7 +196,7 @@ static int xhci_plat_probe(struct platform_device *pdev) > } > > xhci = hcd_to_xhci(hcd); > - match = of_match_node(usb_xhci_of_match, node); > + match = of_match_node(usb_xhci_of_match, pdev->dev.of_node);
Rob, it's weird that OF-based drivers have to redo the same matching
which was already done by drivers/base/platform.c::platform_match() just
to get match->data. If we know we matched, couldn't we just cache a
pointer to match->data in struct device_node.data ? Something like
below? (completely untested)
diff --git a/drivers/of/base.c b/drivers/of/base.c
index b299de2b3afa..9b44caa38f7c 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -981,6 +981,8 @@ const struct of_device_id *of_match_node(const struct
of_device_id *matches,
raw_spin_lock_irqsave(&devtree_lock, flags);
match = __of_match_node(matches, node);
+ if (match)
+ node->data = match->data;
raw_spin_unlock_irqrestore(&devtree_lock, flags);
return match;
}
I tried to find users of device_node.data but couldn't find any. If this
patch is acceptable, we can remove 160 occurences of of_match_node with
some variance of node->data.
--
balbi
signature.asc
Description: PGP signature
