Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 May 2010 18:21:42 +0000 (UTC)
From:      Ryan Stone <rstone@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r208517 - stable/8/sys/dev/hwpmc
Message-ID:  <201005241821.o4OILgYp078316@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rstone
Date: Mon May 24 18:21:42 2010
New Revision: 208517
URL: http://svn.freebsd.org/changeset/base/208517

Log:
  MFC r207484:
  
   When configuring a system-wide couting PMC, hwpmc was incorrectly logging
   process mappings for that PMC.  Nothing ever reads pmc logs out of a
   counting PMC, so the log buffers were leaked when the PMC was
   deconfigured.  The process mappings are only useful for sampling PMCs
   anyway, so only log the mappings if the PMC is a sampling PMC.
  
   This bug would cause allocating sample-mode PMCs to fail with ENOMEM
   after allocating several counting-mode PMCs.
  
  Approved by:	emaste (mentor)

Modified:
  stable/8/sys/dev/hwpmc/hwpmc_mod.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/geom/sched/   (props changed)

Modified: stable/8/sys/dev/hwpmc/hwpmc_mod.c
==============================================================================
--- stable/8/sys/dev/hwpmc/hwpmc_mod.c	Mon May 24 18:00:28 2010	(r208516)
+++ stable/8/sys/dev/hwpmc/hwpmc_mod.c	Mon May 24 18:21:42 2010	(r208517)
@@ -2675,16 +2675,16 @@ pmc_start(struct pmc *pm)
 			PMCDBG(PMC,OPS,1, "po=%p in global list", po);
 		}
 		po->po_sscount++;
-	}
 
-	/*
-	 * Log mapping information for all existing processes in the
-	 * system.  Subsequent mappings are logged as they happen;
-	 * see pmc_process_mmap().
-	 */
-	if (po->po_logprocmaps == 0) {
-		pmc_log_all_process_mappings(po);
-		po->po_logprocmaps = 1;
+		/*
+		 * Log mapping information for all existing processes in the
+		 * system.  Subsequent mappings are logged as they happen;
+		 * see pmc_process_mmap().
+		 */
+		if (po->po_logprocmaps == 0) {
+			pmc_log_all_process_mappings(po);
+			po->po_logprocmaps = 1;
+		}
 	}
 
 	/*



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