Module Name: src
Committed By: pgoyette
Date: Sun Feb 14 23:06:02 UTC 2010
Modified Files:
src/sys/dev/sysmon: sysmon_envsys.c sysmon_envsys_events.c
sysmon_envsysvar.h sysmonvar.h
src/sys/sys: envsys.h
Log Message:
Remove the flags member of the limits structure. Its value was only
meaningful for a few limited function calls; all persitent storage
of limit-present flags is maintained in the edata->upropset member.
To generate a diff of this commit:
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/sysmon/sysmon_envsys.c
cvs rdiff -u -r1.81 -r1.82 src/sys/dev/sysmon/sysmon_envsys_events.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/sysmon/sysmon_envsysvar.h \
src/sys/dev/sysmon/sysmonvar.h
cvs rdiff -u -r1.28 -r1.29 src/sys/sys/envsys.h
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.94 src/sys/dev/sysmon/sysmon_envsys.c:1.95
--- src/sys/dev/sysmon/sysmon_envsys.c:1.94 Fri Feb 5 17:44:27 2010
+++ src/sys/dev/sysmon/sysmon_envsys.c Sun Feb 14 23:06:01 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys.c,v 1.94 2010/02/05 17:44:27 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys.c,v 1.95 2010/02/14 23:06:01 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.94 2010/02/05 17:44:27 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.95 2010/02/14 23:06:01 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -1720,6 +1720,7 @@
envsys_data_t *edata;
prop_dictionary_t dict, tdict = NULL;
prop_object_t obj, obj1, obj2, tobj = NULL;
+ uint32_t props;
uint64_t refresh_timo = 0;
sysmon_envsys_lim_t lims;
int i, error = 0;
@@ -1785,7 +1786,7 @@
if (!prop_string_equals(obj1, obj))
continue;
- lims.sel_flags = 0;
+ props = 0;
/*
* Check if a new description operation was
@@ -1860,7 +1861,7 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_critmin = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_BATTCAP;
+ props |= PROP_BATTCAP;
}
/*
@@ -1870,7 +1871,7 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_warnmin = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_BATTWARN;
+ props |= PROP_BATTWARN;
}
/*
@@ -1880,7 +1881,7 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_critmax = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_CRITMAX;
+ props |= PROP_CRITMAX;
}
/*
@@ -1890,7 +1891,7 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_warnmax = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_WARNMAX;
+ props |= PROP_WARNMAX;
}
/*
@@ -1900,7 +1901,7 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_critmin = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_CRITMIN;
+ props |= PROP_CRITMIN;
}
/*
@@ -1910,27 +1911,24 @@
if (obj2 && prop_object_type(obj2) == PROP_TYPE_NUMBER) {
targetfound = true;
lims.sel_warnmin = prop_number_integer_value(obj2);
- lims.sel_flags |= PROP_WARNMIN;
+ props |= PROP_WARNMIN;
}
- if (lims.sel_flags) {
+ if (props) {
if (edata->flags & ENVSYS_FMONNOTSUPP) {
error = ENOTSUP;
goto out;
}
error = sme_event_register(dict, edata, sme, &lims,
- (edata->flags & ENVSYS_FPERCENT)?
+ props,
+ (edata->flags & ENVSYS_FPERCENT)?
PENVSYS_EVENT_CAPACITY:
PENVSYS_EVENT_LIMITS,
- sdt[i].crittype);
+ sdt[i].crittype);
if (error == EEXIST)
error = 0;
if (error)
goto out;
-
- mutex_enter(&sme->sme_mtx);
- edata->upropset |= lims.sel_flags;
- mutex_exit(&sme->sme_mtx);
}
/*
Index: src/sys/dev/sysmon/sysmon_envsys_events.c
diff -u src/sys/dev/sysmon/sysmon_envsys_events.c:1.81 src/sys/dev/sysmon/sysmon_envsys_events.c:1.82
--- src/sys/dev/sysmon/sysmon_envsys_events.c:1.81 Sun Feb 14 16:22:09 2010
+++ src/sys/dev/sysmon/sysmon_envsys_events.c Sun Feb 14 23:06:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_events.c,v 1.81 2010/02/14 16:22:09 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys_events.c,v 1.82 2010/02/14 23:06:02 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.81 2010/02/14 16:22:09 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.82 2010/02/14 23:06:02 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -44,6 +44,7 @@
#include <sys/callout.h>
/* #define ENVSYS_DEBUG */
+/* #define ENVSYS_OBJECTS_DEBUG */
#include <dev/sysmon/sysmonvar.h>
#include <dev/sysmon/sysmon_envsysvar.h>
@@ -83,7 +84,7 @@
int
sme_event_register(prop_dictionary_t sdict, envsys_data_t *edata,
struct sysmon_envsys *sme, sysmon_envsys_lim_t *lims,
- int crittype, int powertype)
+ uint32_t props, int crittype, int powertype)
{
sme_event_t *see = NULL, *osee = NULL;
prop_object_t obj;
@@ -104,14 +105,14 @@
* flag is not set and the units is not ENVSYS_INDICATOR.
*/
- DPRINTF(("%s: units %d lim-flags 0x%04x edata-flags 0x%04x\n",
- __func__, edata->units, lims->sel_flags, edata->flags));
+ DPRINTF(("%s: units %d props 0x%04x edata-flags 0x%04x\n",
+ __func__, edata->units, props, edata->flags));
- if ((lims->sel_flags & PROP_VAL_LIMITS) &&
+ if ((props & PROP_VAL_LIMITS) &&
((edata->flags & ENVSYS_FPERCENT) ||
(edata->units == ENVSYS_INDICATOR)))
return ENOTSUP;
- if ((lims->sel_flags & PROP_CAP_LIMITS) &&
+ if ((props & PROP_CAP_LIMITS) &&
!(edata->flags & ENVSYS_FPERCENT))
return ENOTSUP;
@@ -136,35 +137,33 @@
__func__, sme->sme_name, edata->desc, crittype));
see = osee;
- if (lims->sel_flags & PROP_CRITMAX) {
+ if (props & PROP_CRITMAX) {
if (lims->sel_critmax == edata->limits.sel_critmax) {
DPRINTF(("%s: type=%d (critmax exists)\n",
__func__, crittype));
error = EEXIST;
- lims->sel_flags &= ~PROP_CRITMAX;
+ props &= ~PROP_CRITMAX;
}
}
- if (lims->sel_flags & PROP_WARNMAX) {
+ if (props & PROP_WARNMAX) {
if (lims->sel_warnmax == edata->limits.sel_warnmax) {
DPRINTF(("%s: warnmax exists\n", __func__));
error = EEXIST;
- lims->sel_flags &= ~PROP_WARNMAX;
+ props &= ~PROP_WARNMAX;
}
}
- if (lims->sel_flags & (PROP_WARNMIN | PROP_BATTWARN)) {
+ if (props & (PROP_WARNMIN | PROP_BATTWARN)) {
if (lims->sel_warnmin == edata->limits.sel_warnmin) {
DPRINTF(("%s: warnmin exists\n", __func__));
error = EEXIST;
- lims->sel_flags &=
- ~(PROP_WARNMIN | PROP_BATTWARN);
+ props &= ~(PROP_WARNMIN | PROP_BATTWARN);
}
}
- if (lims->sel_flags & (PROP_CRITMIN | PROP_BATTCAP)) {
+ if (props & (PROP_CRITMIN | PROP_BATTCAP)) {
if (lims->sel_critmin == edata->limits.sel_critmin) {
DPRINTF(("%s: critmin exists\n", __func__));
error = EEXIST;
- lims->sel_flags &=
- ~(PROP_CRITMIN | PROP_BATTCAP);
+ props &= ~(PROP_CRITMIN | PROP_BATTCAP);
}
}
break;
@@ -219,7 +218,7 @@
/*
* Limit operation requested.
*/
- if (lims->sel_flags & PROP_CRITMAX) {
+ if (props & PROP_CRITMAX) {
objkey = "critical-max";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -239,7 +238,7 @@
edata->upropset |= PROP_CRITMAX;
}
- if (lims->sel_flags & PROP_WARNMAX) {
+ if (props & PROP_WARNMAX) {
objkey = "warning-max";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -259,7 +258,7 @@
edata->upropset |= PROP_WARNMAX;
}
- if (lims->sel_flags & PROP_WARNMIN) {
+ if (props & PROP_WARNMIN) {
objkey = "warning-min";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -279,7 +278,7 @@
edata->upropset |= PROP_WARNMIN;
}
- if (lims->sel_flags & PROP_CRITMIN) {
+ if (props & PROP_CRITMIN) {
objkey = "critical-min";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -299,7 +298,7 @@
edata->upropset |= PROP_CRITMIN;
}
- if (lims->sel_flags & PROP_BATTWARN) {
+ if (props & PROP_BATTWARN) {
objkey = "warning-capacity";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -319,7 +318,7 @@
edata->upropset |= PROP_BATTWARN;
}
- if (lims->sel_flags & PROP_BATTCAP) {
+ if (props & PROP_BATTCAP) {
objkey = "critical-capacity";
obj = prop_dictionary_get(sdict, objkey);
if (obj && prop_object_type(obj) != PROP_TYPE_NUMBER) {
@@ -339,7 +338,7 @@
edata->upropset |= PROP_BATTCAP;
}
- if (lims->sel_flags & PROP_DRIVER_LIMITS)
+ if (props & PROP_DRIVER_LIMITS)
edata->upropset |= PROP_DRIVER_LIMITS;
else
edata->upropset &= ~PROP_DRIVER_LIMITS;
@@ -361,10 +360,9 @@
* If driver requested notification, advise it of new
* limit values
*/
- if (sme->sme_set_limits) {
- edata->limits.sel_flags = edata->upropset & PROP_LIMITS;
- (*sme->sme_set_limits)(sme, edata, &(edata->limits));
- }
+ if (sme->sme_set_limits)
+ (*sme->sme_set_limits)(sme, edata, &(edata->limits),
+ &(edata->upropset));
out:
if ((error == 0 || error == EEXIST) && osee == NULL)
@@ -483,6 +481,7 @@
{
sme_event_drv_t *sed_t = arg;
sysmon_envsys_lim_t lims;
+ uint32_t props;
int error = 0;
KASSERT(sed_t != NULL);
@@ -495,7 +494,7 @@
error = sme_event_register(sed_t->sed_sdict, \
sed_t->sed_edata, \
sed_t->sed_sme, \
- &lims, \
+ &lims, props, \
(b), \
sed_t->sed_powertype); \
if (error && error != EEXIST) \
@@ -517,18 +516,18 @@
* values, call it and use those returned values as initial
* limits for event monitoring.
*/
- lims.sel_flags = 0;
+ props = 0;
if (sed_t->sed_edata->flags & ENVSYS_FMONLIMITS)
if (sed_t->sed_sme->sme_get_limits)
(*sed_t->sed_sme->sme_get_limits)(sed_t->sed_sme,
sed_t->sed_edata,
- &lims);
+ &lims, &props);
/*
* If no values returned, don't create the event monitor at
* this time. We'll get another chance later when the user
* provides us with limits.
*/
- if (lims.sel_flags == 0)
+ if (props == 0)
sed_t->sed_edata->flags &= ~ENVSYS_FMONLIMITS;
/*
@@ -536,7 +535,7 @@
* limit values, we must monitor all limits ourselves
*/
else if (sed_t->sed_sme->sme_set_limits == NULL)
- lims.sel_flags &= ~PROP_DRIVER_LIMITS;
+ props &= ~PROP_DRIVER_LIMITS;
/* Register the events that were specified */
@@ -677,9 +676,9 @@
}
DPRINTFOBJ(("%s: (%s) desc=%s sensor=%d type=%d state=%d units=%d "
- "value_cur=%d\n", __func__, sme->sme_name, edata->desc,
+ "value_cur=%d upropset=%d\n", __func__, sme->sme_name, edata->desc,
edata->sensor, see->see_type, edata->state, edata->units,
- edata->value_cur));
+ edata->value_cur, edata->upropset));
/* skip the event if current sensor is in invalid state */
if (edata->state == ENVSYS_SINVALID)
Index: src/sys/dev/sysmon/sysmon_envsysvar.h
diff -u src/sys/dev/sysmon/sysmon_envsysvar.h:1.30 src/sys/dev/sysmon/sysmon_envsysvar.h:1.31
--- src/sys/dev/sysmon/sysmon_envsysvar.h:1.30 Sat Jun 13 16:08:25 2009
+++ src/sys/dev/sysmon/sysmon_envsysvar.h Sun Feb 14 23:06:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsysvar.h,v 1.30 2009/06/13 16:08:25 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsysvar.h,v 1.31 2010/02/14 23:06:02 pgoyette Exp $ */
/*-
* Copyright (c) 2007, 2008 Juan Romero Pardines.
@@ -126,7 +126,7 @@
*/
int sme_event_register(prop_dictionary_t, envsys_data_t *,
struct sysmon_envsys *, sysmon_envsys_lim_t *,
- int, int);
+ uint32_t, int, int);
int sme_event_unregister(struct sysmon_envsys *, const char *, int);
void sme_event_unregister_all(struct sysmon_envsys *);
void sme_event_drvadd(void *);
Index: src/sys/dev/sysmon/sysmonvar.h
diff -u src/sys/dev/sysmon/sysmonvar.h:1.30 src/sys/dev/sysmon/sysmonvar.h:1.31
--- src/sys/dev/sysmon/sysmonvar.h:1.30 Sun Jan 31 21:36:38 2010
+++ src/sys/dev/sysmon/sysmonvar.h Sun Feb 14 23:06:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmonvar.h,v 1.30 2010/01/31 21:36:38 martin Exp $ */
+/* $NetBSD: sysmonvar.h,v 1.31 2010/02/14 23:06:02 pgoyette Exp $ */
/*-
* Copyright (c) 2000 Zembu Labs, Inc.
@@ -90,9 +90,9 @@
* with device
*/
void (*sme_set_limits)(struct sysmon_envsys *, envsys_data_t *,
- sysmon_envsys_lim_t *);
+ sysmon_envsys_lim_t *, uint32_t *);
void (*sme_get_limits)(struct sysmon_envsys *, envsys_data_t *,
- sysmon_envsys_lim_t *);
+ sysmon_envsys_lim_t *, uint32_t *);
struct workqueue *sme_wq; /* the workqueue for the events */
struct callout sme_callout; /* for the events */
Index: src/sys/sys/envsys.h
diff -u src/sys/sys/envsys.h:1.28 src/sys/sys/envsys.h:1.29
--- src/sys/sys/envsys.h:1.28 Wed Jan 27 04:36:34 2010
+++ src/sys/sys/envsys.h Sun Feb 14 23:06:01 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: envsys.h,v 1.28 2010/01/27 04:36:34 pgoyette Exp $ */
+/* $NetBSD: envsys.h,v 1.29 2010/02/14 23:06:01 pgoyette Exp $ */
/*-
* Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -51,8 +51,6 @@
* Thresholds/limits that are being monitored
*/
struct sysmon_envsys_lim {
- int32_t sel_flags; /* Which limits are valid during
- * get_limits()/set_limits calls */
int32_t sel_critmax;
int32_t sel_warnmax;
int32_t sel_warnmin;