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;