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)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to