Module Name:    src
Committed By:   maxv
Date:           Sat Feb 18 15:56:03 UTC 2017

Modified Files:
        src/sys/arch/i386/i386: pmc.c

Log Message:
Fix a bug I introduced yesterday. The arguments are 8-bit ints, so the unit
gets truncated. By luck, the counters I was testing could accept a null
unit.


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/i386/i386/pmc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/i386/i386/pmc.c
diff -u src/sys/arch/i386/i386/pmc.c:1.22 src/sys/arch/i386/i386/pmc.c:1.23
--- src/sys/arch/i386/i386/pmc.c:1.22	Fri Feb 17 12:10:40 2017
+++ src/sys/arch/i386/i386/pmc.c	Sat Feb 18 15:56:03 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmc.c,v 1.22 2017/02/17 12:10:40 maxv Exp $	*/
+/*	$NetBSD: pmc.c,v 1.23 2017/02/18 15:56:03 maxv Exp $	*/
 
 /*
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmc.c,v 1.22 2017/02/17 12:10:40 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmc.c,v 1.23 2017/02/18 15:56:03 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -156,6 +156,8 @@ pmc_apply(pmc_state_t *pmc)
 static void
 pmc_start(pmc_state_t *pmc, struct x86_pmc_startstop_args *args)
 {
+	uint64_t event, unit;
+
 	pmc->running = true;
 
 	/*
@@ -185,10 +187,10 @@ pmc_start(pmc_state_t *pmc, struct x86_p
 		break;
 
 	case PMC_TYPE_K7:
-		args->event &= K7_EVTSEL_EVENT;
-		args->unit = (args->unit << K7_EVTSEL_UNIT_SHIFT) &
+		event = (args->event & K7_EVTSEL_EVENT);
+		unit = (args->unit << K7_EVTSEL_UNIT_SHIFT) &
 		    K7_EVTSEL_UNIT;
-		pmc->evtval = args->event | args->unit | K7_EVTSEL_EN |
+		pmc->evtval = event | unit | K7_EVTSEL_EN |
 		    ((args->flags & PMC_SETUP_KERNEL) ? K7_EVTSEL_OS : 0) |
 		    ((args->flags & PMC_SETUP_USER) ? K7_EVTSEL_USR : 0) |
 		    ((args->flags & PMC_SETUP_EDGE) ? K7_EVTSEL_E : 0) |

Reply via email to