svn commit: r250097 - head/sys/dev/hwpmc

Davide Italiano davide at FreeBSD.org
Tue Apr 30 08:33:38 UTC 2013


Author: davide
Date: Tue Apr 30 08:33:38 2013
New Revision: 250097
URL: http://svnweb.freebsd.org/changeset/base/250097

Log:
  When hwpmc(4) module is unloaded it reports a double leakage. This happens
  at least if FreeBSD is ran under VirtualBox. In order to avoid the leakage,
  properly deallocate structures in case CPU claims that hw performance
  monitoring counters are not supported.
  
  Reported by:	hiren

Modified:
  head/sys/dev/hwpmc/hwpmc_intel.c

Modified: head/sys/dev/hwpmc/hwpmc_intel.c
==============================================================================
--- head/sys/dev/hwpmc/hwpmc_intel.c	Tue Apr 30 08:18:08 2013	(r250096)
+++ head/sys/dev/hwpmc/hwpmc_intel.c	Tue Apr 30 08:33:38 2013	(r250097)
@@ -87,7 +87,7 @@ pmc_intel_initialize(void)
 
 	cputype = -1;
 	nclasses = 2;
-
+	error = 0;
 	model = ((cpu_id & 0xF0000) >> 12) | ((cpu_id & 0xF0) >> 4);
 
 	switch (cpu_id & 0xF00) {
@@ -192,10 +192,6 @@ pmc_intel_initialize(void)
 
 	ncpus = pmc_cpu_max();
 
-	error = pmc_tsc_initialize(pmc_mdep, ncpus);
-	if (error)
-		goto error;
-
 	switch (cputype) {
 #if	defined(__i386__) || defined(__amd64__)
 		/*
@@ -271,10 +267,10 @@ pmc_intel_initialize(void)
 		break;
 	}
 #endif
-
+	error = pmc_tsc_initialize(pmc_mdep, ncpus);
   error:
 	if (error) {
-		free(pmc_mdep, M_PMC);
+		pmc_mdep_free(pmc_mdep);
 		pmc_mdep = NULL;
 	}
 


More information about the svn-src-head mailing list