Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Sep 2017 21:00:33 +0000 (UTC)
From:      Conrad Meyer <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r323196 - head/sys/dev/amdsmn
Message-ID:  <201709052100.v85L0XCS058736@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Tue Sep  5 21:00:33 2017
New Revision: 323196
URL: https://svnweb.freebsd.org/changeset/base/323196

Log:
  amdsmn(4): Do not probe not matching hostbridges
  
  Similar to r323195, but for amdsmn(4) driver (which borrowed some design).
  
  Ignore hostbs that do not match our PCI device id criteria.
  
  Sponsored by:	Dell EMC Isilon

Modified:
  head/sys/dev/amdsmn/amdsmn.c

Modified: head/sys/dev/amdsmn/amdsmn.c
==============================================================================
--- head/sys/dev/amdsmn/amdsmn.c	Tue Sep  5 20:35:25 2017	(r323195)
+++ head/sys/dev/amdsmn/amdsmn.c	Tue Sep  5 21:00:33 2017	(r323196)
@@ -90,24 +90,29 @@ static devclass_t amdsmn_devclass;
 DRIVER_MODULE(amdsmn, hostb, amdsmn_driver, amdsmn_devclass, NULL, NULL);
 MODULE_VERSION(amdsmn, 1);
 
-static void
-amdsmn_identify(driver_t *driver, device_t parent)
+static bool
+amdsmn_match(device_t parent)
 {
-	device_t child;
 	uint32_t devid;
 	size_t i;
 
-	/* Make sure we're not being doubly invoked. */
-	if (device_find_child(parent, "amdsmn", -1) != NULL)
-		return;
-
 	devid = pci_get_devid(parent);
 	for (i = 0; i < nitems(amdsmn_ids); i++)
 		if (amdsmn_ids[i].device_id == devid)
-			break;
+			return (true);
+	return (false);
+}
 
-	if (i >= nitems(amdsmn_ids))
+static void
+amdsmn_identify(driver_t *driver, device_t parent)
+{
+	device_t child;
+
+	/* Make sure we're not being doubly invoked. */
+	if (device_find_child(parent, "amdsmn", -1) != NULL)
 		return;
+	if (!amdsmn_match(parent))
+		return;
 
 	child = device_add_child(parent, "amdsmn", -1);
 	if (child == NULL)
@@ -120,6 +125,8 @@ amdsmn_probe(device_t dev)
 	uint32_t family;
 
 	if (resource_disabled("amdsmn", 0))
+		return (ENXIO);
+	if (!amdsmn_match(device_get_parent(dev)))
 		return (ENXIO);
 
 	family = CPUID_TO_FAMILY(cpu_id);



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