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