Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/sysmon Extend previous changes so that even sensors ...
details: https://anonhg.NetBSD.org/src/rev/aa66a0b494ef
branches: trunk
changeset: 780226:aa66a0b494ef
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Mon Jul 16 13:55:01 2012 +0000
description:
Extend previous changes so that even sensors which don't use a refresh()
callback to update the value can be polled to provide rnd(4) entropy.
diffstat:
sys/dev/sysmon/sysmon_envsys.c | 64 +++++++++++++---------------------
sys/dev/sysmon/sysmon_envsys_events.c | 20 ++++------
sys/dev/sysmon/sysmonvar.h | 3 +-
3 files changed, 36 insertions(+), 51 deletions(-)
diffs (195 lines):
diff -r 343d5afdab03 -r aa66a0b494ef sys/dev/sysmon/sysmon_envsys.c
--- a/sys/dev/sysmon/sysmon_envsys.c Mon Jul 16 12:55:36 2012 +0000
+++ b/sys/dev/sysmon/sysmon_envsys.c Mon Jul 16 13:55:01 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys.c,v 1.120 2012/07/15 18:33:07 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys.c,v 1.121 2012/07/16 13:55: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.120 2012/07/15 18:33:07 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.121 2012/07/16 13:55:01 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -358,8 +358,7 @@
}
if (tred->sensor < sme->sme_nsensors) {
- if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0 &&
- (sme->sme_flags & SME_POLL_ONLY) == 0) {
+ if ((sme->sme_flags & SME_POLL_ONLY) == 0) {
mutex_enter(&sme->sme_mtx);
sysmon_envsys_refresh_sensor(sme, edata);
mutex_exit(&sme->sme_mtx);
@@ -1015,8 +1014,7 @@
mutex_enter(&sme->sme_mtx);
sysmon_envsys_acquire(sme, true);
TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head)
- if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0)
- sysmon_envsys_refresh_sensor(sme, edata);
+ sysmon_envsys_refresh_sensor(sme, edata);
sysmon_envsys_release(sme, true);
mutex_exit(&sme->sme_mtx);
}
@@ -1436,14 +1434,11 @@
continue;
/*
- * refresh sensor data via sme_refresh only if the
- * flag is not set.
+ * refresh sensor data
*/
- if (refresh && (sme->sme_flags & SME_DISABLE_REFRESH) == 0) {
- mutex_enter(&sme->sme_mtx);
- sysmon_envsys_refresh_sensor(sme, edata);
- mutex_exit(&sme->sme_mtx);
- }
+ mutex_enter(&sme->sme_mtx);
+ sysmon_envsys_refresh_sensor(sme, edata);
+ mutex_exit(&sme->sme_mtx);
v = edata->value_cur;
if (v > maxv)
@@ -1513,14 +1508,11 @@
*/
TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
/*
- * refresh sensor data via sme_refresh only if the
- * flag is not set.
+ * refresh sensor data via sme_envsys_refresh_sensor
*/
- if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0) {
- mutex_enter(&sme->sme_mtx);
- sysmon_envsys_refresh_sensor(sme, edata);
- mutex_exit(&sme->sme_mtx);
- }
+ mutex_enter(&sme->sme_mtx);
+ sysmon_envsys_refresh_sensor(sme, edata);
+ mutex_exit(&sme->sme_mtx);
/*
* retrieve sensor's dictionary.
@@ -1896,11 +1888,11 @@
props |= PROP_WARNMIN;
}
- if (props) {
- if (edata->flags & ENVSYS_FMONNOTSUPP) {
- error = ENOTSUP;
- goto out;
- }
+ if (props && (edata->flags & ENVSYS_FMONNOTSUPP) != 0) {
+ error = ENOTSUP;
+ goto out;
+ }
+ if (props || (edata->flags & ENVSYS_FHAS_ENTROPY) != 0) {
error = sme_event_register(dict, edata, sme, &lims,
props,
(edata->flags & ENVSYS_FPERCENT)?
@@ -1948,8 +1940,7 @@
sysmon_envsys_acquire(sme, false);
TAILQ_FOREACH(sensor, &sme->sme_sensors_list, sensors_head) {
- if (refresh &&
- (sme->sme_flags & SME_DISABLE_REFRESH) == 0) {
+ if (refresh) {
mutex_enter(&sme->sme_mtx);
sysmon_envsys_refresh_sensor(sme, sensor);
mutex_exit(&sme->sme_mtx);
@@ -1968,18 +1959,13 @@
void
sysmon_envsys_refresh_sensor(struct sysmon_envsys *sme, envsys_data_t *edata)
{
- int32_t old_state;
- int32_t old_value;
- if (edata->flags & ENVSYS_FHAS_ENTROPY) {
- old_state = edata->state;
- old_value = edata->value_cur;
+ if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0)
(*sme->sme_refresh)(sme, edata);
- if (old_state != ENVSYS_SINVALID &&
- edata->state != ENVSYS_SINVALID &&
- old_value != edata->value_cur)
- rnd_add_uint32(&edata->rnd_src, edata->value_cur);
- }
- else
- (*sme->sme_refresh)(sme, edata);
+
+ if (edata->flags & ENVSYS_FHAS_ENTROPY &&
+ edata->state != ENVSYS_SINVALID &&
+ edata->value_prev != edata->value_cur)
+ rnd_add_uint32(&edata->rnd_src, edata->value_cur);
+ edata->value_prev = edata->value_cur;
}
diff -r 343d5afdab03 -r aa66a0b494ef sys/dev/sysmon/sysmon_envsys_events.c
--- a/sys/dev/sysmon/sysmon_envsys_events.c Mon Jul 16 12:55:36 2012 +0000
+++ b/sys/dev/sysmon/sysmon_envsys_events.c Mon Jul 16 13:55:01 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmon_envsys_events.c,v 1.100 2012/07/15 18:33:07 pgoyette Exp $ */
+/* $NetBSD: sysmon_envsys_events.c,v 1.101 2012/07/16 13:55:01 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.100 2012/07/15 18:33:07 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys_events.c,v 1.101 2012/07/16 13:55:01 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -734,14 +734,13 @@
see->see_flags |= SEE_EVENT_WORKING;
/*
* sme_events_check marks the sensors to make us refresh them here.
- * Don't refresh if the driver uses its own method for refreshing.
+ * sme_envsys_refresh_sensor will not call the driver if the driver
+ * does its own setting of the sensor value.
*/
- if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0) {
- if ((edata->flags & ENVSYS_FNEED_REFRESH) != 0) {
- /* refresh sensor in device */
- sysmon_envsys_refresh_sensor(sme, edata);
- edata->flags &= ~ENVSYS_FNEED_REFRESH;
- }
+ if ((edata->flags & ENVSYS_FNEED_REFRESH) != 0) {
+ /* refresh sensor in device */
+ sysmon_envsys_refresh_sensor(sme, edata);
+ edata->flags &= ~ENVSYS_FNEED_REFRESH;
}
DPRINTFOBJ(("%s: (%s) desc=%s sensor=%d type=%d state=%d units=%d "
@@ -1010,8 +1009,7 @@
if (edata->units == ENVSYS_INDICATOR) {
sensor = true;
/* refresh current sensor */
- if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0)
- sysmon_envsys_refresh_sensor(sme, edata);
+ sysmon_envsys_refresh_sensor(sme, edata);
if (edata->value_cur)
return false;
}
diff -r 343d5afdab03 -r aa66a0b494ef sys/dev/sysmon/sysmonvar.h
--- a/sys/dev/sysmon/sysmonvar.h Mon Jul 16 12:55:36 2012 +0000
+++ b/sys/dev/sysmon/sysmonvar.h Mon Jul 16 13:55:01 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sysmonvar.h,v 1.42 2012/07/15 18:33:07 pgoyette Exp $ */
+/* $NetBSD: sysmonvar.h,v 1.43 2012/07/16 13:55:01 pgoyette Exp $ */
/*-
* Copyright (c) 2000 Zembu Labs, Inc.
@@ -82,6 +82,7 @@
uint32_t rpms; /* for fans, nominal RPMs */
int32_t rfact; /* for volts, factor x 10^4 */
int32_t value_cur; /* current value */
+ int32_t value_prev; /* previous value */
int32_t value_max; /* max value */
int32_t value_min; /* min value */
int32_t private; /* private data for drivers */
Home |
Main Index |
Thread Index |
Old Index