diff options
| author | dyoung <dyoung@NetBSD.org> | 2008-01-02 10:15:53 +0000 |
|---|---|---|
| committer | dyoung <dyoung@NetBSD.org> | 2008-01-02 10:15:53 +0000 |
| commit | 09767a906c0e3daea5d898bd1115e4c8a8d3d7c4 (patch) | |
| tree | 5c3a6c2eeaf5321c4f2e71778ec6bb11a367ff9b /sys/dev | |
| parent | 9e7635573ecd0edc37f8ddba8debbabfa92810e9 (diff) | |
In sysmon_envsys_create(), initialize the callout structure. Stops
panics with a DIAGNOSTIC kernel.
In sysmon_envsys_find_40(), wait until an envsys is not busy before
settings its busy flag, in the pattern of sysmon_envsys_find().
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/sysmon/sysmon_envsys.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/sysmon/sysmon_envsys.c b/sys/dev/sysmon/sysmon_envsys.c index f91931b6c20..a40e9a32d34 100644 --- a/sys/dev/sysmon/sysmon_envsys.c +++ b/sys/dev/sysmon/sysmon_envsys.c @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.77 2008/01/02 03:06:02 dyoung Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.78 2008/01/02 10:15:53 dyoung Exp $ */ /*- * Copyright (c) 2007 Juan Romero Pardines. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.77 2008/01/02 03:06:02 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.78 2008/01/02 10:15:53 dyoung Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -520,6 +520,7 @@ sysmon_envsys_create(void) sme = kmem_zalloc(sizeof(*sme), KM_SLEEP); TAILQ_INIT(&sme->sme_sensors_list); LIST_INIT(&sme->sme_events_list); + callout_init(&sme->sme_callout, 0); return sme; } @@ -976,9 +977,14 @@ sysmon_envsys_find_40(u_int idx) KASSERT(mutex_owned(&sme_mtx)); +again: LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) { if (idx >= sme->sme_fsensor && idx < (sme->sme_fsensor + sme->sme_nsensors)) { + if (sme->sme_flags & SME_FLAG_BUSY) { + cv_wait(&sme_cv, &sme_mtx); + goto again; + } sme->sme_flags |= SME_FLAG_BUSY; break; } |
