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;

Reply via email to