Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Oct 2010 20:12:00 +0000 (UTC)
From:      Pyun YongHyeon <yongari@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r213608 - stable/7/sys/dev/sis
Message-ID:  <201010082012.o98KC0VT011844@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }
 



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