Module Name: src
Committed By: pgoyette
Date: Wed Dec 8 00:09:14 UTC 2010
Modified Files:
src/sys/dev/sysmon: sysmon_envsys.c sysmon_envsys_events.c
Log Message:
When removing properties (as in envstat -S), clear the flags that track
whether the properties actually exist.
When setting new limit values, don't complain/ignore about duplicate
values if the associated flag bits (indicating that the limit is valid)
are not set.
These two fixes together should fix a problem reported in private Email
by njoly@ a couple months ago. Issue replicated and solution tested
using my recent swsensor pseudo-device running inside qemu world!
To generate a diff of this commit:
cvs rdiff -u -r1.107 -r1.108 src/sys/dev/sysmon/sysmon_envsys.c
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/sysmon/sysmon_envsys_events.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/dev/sysmon/sysmon_envsys.c
diff -u src/sys/dev/sysmon/sysmon_envsys.c:1.107 src/sys/dev/sysmon/sysmon_envsys.c:1.108
--- src/sys/dev/sysmon/sysmon_envsys.c:1.107 Sun Apr 11 01:12:28 2010
+++ src/sys/dev/sysmon/sysmon_envsys.c Wed Dec 8 00:09:14 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys.c,v 1.107 2010/04/11 01:12:28 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys.c,v 1.108 2010/12/08 00:09:14 pgoyette Exp $ */
/*-
* Copyright (c) 2007, 2008 Juan Romero Pardines.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.107 2010/04/11 01:12:28 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.108 2010/12/08 00:09:14 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -1143,8 +1143,10 @@
lims = edata->limits;
(*sme->sme_get_limits)(sme, edata, &lims,
&edata->upropset);
- }
- if (edata->upropset) {
+ } else
+ edata->upropset &= ~PROP_LIMITS;
+
+ if (edata->upropset & PROP_LIMITS) {
DPRINTF(("%s: install limits for %s %s\n",
__func__, sme->sme_name, edata->desc));
sme_update_limits(sme, edata);
Index: src/sys/dev/sysmon/sysmon_envsys_events.c
diff -u src/sys/dev/sysmon/sysmon_envsys_events.c:1.94 src/sys/dev/sysmon/sysmon_envsys_events.c:1.95
--- src/sys/dev/sysmon/sysmon_envsys_events.c:1.94 Mon Dec 6 23:26:44 2010
+++ src/sys/dev/sysmon/sysmon_envsys_events.c Wed Dec 8 00:09:14 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_events.c,v 1.94 2010/12/06 23:26:44 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys_events.c,v 1.95 2010/12/08 00:09:14 pgoyette Exp $ */
/*-
* Copyright (c) 2007, 2008 Juan Romero Pardines.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.94 2010/12/06 23:26:44 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.95 2010/12/08 00:09:14 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -151,29 +151,28 @@
__func__, sme->sme_name, edata->desc, crittype));
see = osee;
- if (props & (PROP_CRITMAX | PROP_BATTMAX)) {
+ if (props & edata->upropset & (PROP_CRITMAX | PROP_BATTMAX)) {
if (lims->sel_critmax == edata->limits.sel_critmax) {
- DPRINTF(("%s: type=%d (critmax exists)\n",
- __func__, crittype));
+ DPRINTF(("%s: critmax exists\n", __func__));
error = EEXIST;
props &= ~(PROP_CRITMAX | PROP_BATTMAX);
}
}
- if (props & (PROP_WARNMAX | PROP_BATTHIGH)) {
+ if (props & edata->upropset & (PROP_WARNMAX | PROP_BATTHIGH)) {
if (lims->sel_warnmax == edata->limits.sel_warnmax) {
DPRINTF(("%s: warnmax exists\n", __func__));
error = EEXIST;
props &= ~(PROP_WARNMAX | PROP_BATTHIGH);
}
}
- if (props & (PROP_WARNMIN | PROP_BATTWARN)) {
+ if (props & edata->upropset & (PROP_WARNMIN | PROP_BATTWARN)) {
if (lims->sel_warnmin == edata->limits.sel_warnmin) {
DPRINTF(("%s: warnmin exists\n", __func__));
error = EEXIST;
props &= ~(PROP_WARNMIN | PROP_BATTWARN);
}
}
- if (props & (PROP_CRITMIN | PROP_BATTCAP)) {
+ if (props & edata->upropset & (PROP_CRITMIN | PROP_BATTCAP)) {
if (lims->sel_critmin == edata->limits.sel_critmin) {
DPRINTF(("%s: critmin exists\n", __func__));
error = EEXIST;