On Thu, 1 Jun 2023 15:12:28 -0700 Justin Chen wrote: > + ports_node = of_find_node_by_name(dev->of_node, "ethernet-ports"); > + if (!ports_node) { > + dev_warn(dev, "No ports found\n"); > + return 0; > + } > + > + for_each_available_child_of_node(ports_node, intf_node) { > + of_property_read_u32(intf_node, "reg", &port); > + if (!bcmasp_is_port_valid(priv, port)) { > + dev_warn(dev, "%pOF: %d is an invalid port\n", > + intf_node, port); > + continue; > + } > + > + priv->intf_count++; > + } I think that you're leaking ports_node, /** * of_find_node_by_name - Find a node by its "name" property * @from: The node to start searching from or NULL; the node * you pass will not be searched, only the next one * will. Typically, you pass what the previous call * returned. of_node_put() will be called on @from. * @name: The name string to match against * * Return: A node pointer with refcount incremented, use * of_node_put() on it when done. */ -- pw-bot: cr