Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Jun 2015 04:48:53 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r284625 - head/sys/dev/gpio
Message-ID:  <201506200448.t5K4mrFT088605@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Sat Jun 20 04:48:53 2015
New Revision: 284625
URL: https://svnweb.freebsd.org/changeset/base/284625

Log:
  Use ofw_bus_find_child_device_by_phandle to see if the child we're
  adding already exists and if so just return that. The typical use case
  is from identify routines, which shouldn't be adding multiple copies
  of the same phandle_t to the gpiobus. Only one per phandle_t is needed
  (or expected by the current code).
  
  Differential Revision: https://reviews.freebsd.org/D2871

Modified:
  head/sys/dev/gpio/ofw_gpiobus.c

Modified: head/sys/dev/gpio/ofw_gpiobus.c
==============================================================================
--- head/sys/dev/gpio/ofw_gpiobus.c	Sat Jun 20 04:48:48 2015	(r284624)
+++ head/sys/dev/gpio/ofw_gpiobus.c	Sat Jun 20 04:48:53 2015	(r284625)
@@ -56,6 +56,14 @@ ofw_gpiobus_add_fdt_child(device_t bus, 
 	struct ofw_gpiobus_devinfo *dinfo;
 
 	/*
+	 * Check to see if we already have a child for @p child, and if so
+	 * return it.
+	 */
+	childdev = ofw_bus_find_child_device_by_phandle(bus, child);
+	if (childdev != NULL)
+		return (childdev);
+
+	/*
 	 * Set up the GPIO child and OFW bus layer devinfo and add it to bus.
 	 */
 	childdev = device_add_child(bus, drvname, -1);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506200448.t5K4mrFT088605>