svn commit: r330901 - stable/11/sys/dev/ofw
Kyle Evans
kevans at FreeBSD.org
Wed Mar 14 03:39:32 UTC 2018
Author: kevans
Date: Wed Mar 14 03:39:31 2018
New Revision: 330901
URL: https://svnweb.freebsd.org/changeset/base/330901
Log:
MFC r322289: Enable uing ofw_bus_find_compatible in early platform code
Before this patch function ofw_bus_find_compatible was using
memory allocations in order to find compatible node and the property's
length. This way there was always a suited buffer for property,
however this approach had also disadvantages - ofw_bus_find_compatible
couldn't be used when malloc is not available, e.g. during fdt fixup stage.
In order to remove the usage limitation of ofw_bus_find_compatible(),
this patch modifies the function to use ofw_bus_node_is_compatible()
(instead of the one without _int suffix), which uses a fixed
buffer on stack instead of dynamic allocations.
Modified:
stable/11/sys/dev/ofw/ofw_bus_subr.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/ofw/ofw_bus_subr.c
==============================================================================
--- stable/11/sys/dev/ofw/ofw_bus_subr.c Wed Mar 14 03:37:37 2018 (r330900)
+++ stable/11/sys/dev/ofw/ofw_bus_subr.c Wed Mar 14 03:39:31 2018 (r330901)
@@ -703,22 +703,14 @@ phandle_t
ofw_bus_find_compatible(phandle_t node, const char *onecompat)
{
phandle_t child, ret;
- void *compat;
- int len;
/*
* Traverse all children of 'start' node, and find first with
* matching 'compatible' property.
*/
for (child = OF_child(node); child != 0; child = OF_peer(child)) {
- len = OF_getprop_alloc(child, "compatible", 1, &compat);
- if (len >= 0) {
- ret = ofw_bus_node_is_compatible_int(compat, len,
- onecompat);
- free(compat, M_OFWPROP);
- if (ret != 0)
- return (child);
- }
+ if (ofw_bus_node_is_compatible(child, onecompat) != 0)
+ return (child);
ret = ofw_bus_find_compatible(child, onecompat);
if (ret != 0)
More information about the svn-src-stable-11
mailing list