svn commit: r213608 - stable/7/sys/dev/sis

Pyun YongHyeon yongari at FreeBSD.org
Fri Oct 8 20:12:01 UTC 2010


Author: yongari
Date: Fri Oct  8 20:12:00 2010
New Revision: 213608
URL: http://svn.freebsd.org/changeset/base/213608

Log:
  MFC r182065:
    There actually were bugs in the original handling that I missed last
    night.
  
    Free the children after each pci bus that is searched.  Otherwise we
    leak them.  With free in the new place, we also have to free children
    before going to done when we find the device we're looking for.
  
    Also, if we can't get the children of a device, just ignore that bus.

Modified:
  stable/7/sys/dev/sis/if_sis.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/dev/sis/if_sis.c
==============================================================================
--- stable/7/sys/dev/sis/if_sis.c	Fri Oct  8 19:39:35 2010	(r213607)
+++ stable/7/sys/dev/sis/if_sis.c	Fri Oct  8 20:12:00 2010	(r213608)
@@ -347,21 +347,22 @@ sis_find_bridge(device_t dev)
 	devclass_get_devices(pci_devclass, &pci_devices, &pci_count);
 
 	for (i = 0, busp = pci_devices; i < pci_count; i++, busp++) {
-		pci_childcount = 0;
-		device_get_children(*busp, &pci_children, &pci_childcount);
+		if (device_get_children(*busp, &pci_children, &pci_childcount))
+			continue;
 		for (j = 0, childp = pci_children;
 		    j < pci_childcount; j++, childp++) {
 			if (pci_get_vendor(*childp) == SIS_VENDORID &&
 			    pci_get_device(*childp) == 0x0008) {
 				child = *childp;
+				free(pci_children, M_TEMP);
 				goto done;
 			}
 		}
+		free(pci_children, M_TEMP);
 	}
 
 done:
 	free(pci_devices, M_TEMP);
-	free(pci_children, M_TEMP);
 	return(child);
 }
 


More information about the svn-src-stable-7 mailing list