CVS commit: [netbsd-7] src/sys/dev/sysmon
Module Name:src Committed By: martin Date: Sun Jun 7 16:43:40 UTC 2020 Modified Files: src/sys/dev/sysmon [netbsd-7]: sysmon_envsys.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #1733): sys/dev/sysmon/sysmon_envsys.c: revision 1.145 Don't queue sysmon refresh until the rndsource is attached. Using the rndsource, as refreshing the sensors will do, is not allowed until _after_ rnd_source_attach. XXX pullup-7 XXX pullup-8 XXX pullup-9 To generate a diff of this commit: cvs rdiff -u -r1.127.2.3 -r1.127.2.4 src/sys/dev/sysmon/sysmon_envsys.c 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.127.2.3 src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.4 --- src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.3 Tue Oct 24 09:25:26 2017 +++ src/sys/dev/sysmon/sysmon_envsys.c Sun Jun 7 16:43:40 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.127.2.3 2017/10/24 09:25:26 snj Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.127.2.4 2020/06/07 16:43:40 martin Exp $ */ /*- * Copyright (c) 2007, 2008 Juan Romero Pardines. @@ -64,7 +64,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.3 2017/10/24 09:25:26 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.4 2020/06/07 16:43:40 martin Exp $"); #include #include @@ -765,16 +765,6 @@ out: nevent = 0; sysmon_task_queue_init(); - if (sme->sme_flags & SME_INIT_REFRESH) { - sysmon_task_queue_sched(0, sme_initial_refresh, sme); - DPRINTF(("%s: scheduled initial refresh for '%s'\n", -__func__, sme->sme_name)); - } - SLIST_FOREACH(evdv, _evdrv_list, evdrv_head) { - sysmon_task_queue_sched(0, - sme_event_drvadd, evdv->evdrv); - nevent++; - } /* * Hook the sensor into rnd(4) entropy pool if requested */ @@ -830,6 +820,17 @@ out: rnd_type, rnd_flag); } } + + if (sme->sme_flags & SME_INIT_REFRESH) { + sysmon_task_queue_sched(0, sme_initial_refresh, sme); + DPRINTF(("%s: scheduled initial refresh for '%s'\n", +__func__, sme->sme_name)); + } + SLIST_FOREACH(evdv, _evdrv_list, evdrv_head) { + sysmon_task_queue_sched(0, + sme_event_drvadd, evdv->evdrv); + nevent++; + } DPRINTF(("%s: driver '%s' registered (nsens=%d nevent=%d)\n", __func__, sme->sme_name, sme->sme_nsensors, nevent)); }
CVS commit: [netbsd-7] src/sys/dev/sysmon
Module Name:src Committed By: snj Date: Tue Oct 24 09:25:26 UTC 2017 Modified Files: src/sys/dev/sysmon [netbsd-7]: sysmon_envsys.c Log Message: Fix fallout from ticket #1511: It's rnd_detach_source, not rnd_detach_sources. To generate a diff of this commit: cvs rdiff -u -r1.127.2.2 -r1.127.2.3 src/sys/dev/sysmon/sysmon_envsys.c 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.127.2.2 src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.3 --- src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.2 Mon Oct 23 18:57:12 2017 +++ src/sys/dev/sysmon/sysmon_envsys.c Tue Oct 24 09:25:26 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.127.2.2 2017/10/23 18:57:12 snj Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.127.2.3 2017/10/24 09:25:26 snj Exp $ */ /*- * Copyright (c) 2007, 2008 Juan Romero Pardines. @@ -64,7 +64,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.2 2017/10/23 18:57:12 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.3 2017/10/24 09:25:26 snj Exp $"); #include #include @@ -1210,7 +1210,7 @@ sme_remove_userprops(void) * Detach from entropy collection */ if (edata->flags & ENVSYS_FHAS_ENTROPY) -rnd_detach_sources(>rnd_src); +rnd_detach_source(>rnd_src); /* * Finally, remove any old limits event, then
CVS commit: [netbsd-7] src/sys/dev/sysmon
Module Name:src Committed By: snj Date: Mon Oct 23 18:57:12 UTC 2017 Modified Files: src/sys/dev/sysmon [netbsd-7]: sysmon_envsys.c Log Message: Apply patch (requested by pgoyette in ticket #1511): Detach the rndsrc before re-attaching it. To generate a diff of this commit: cvs rdiff -u -r1.127.2.1 -r1.127.2.2 src/sys/dev/sysmon/sysmon_envsys.c 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.127.2.1 src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.2 --- src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.1 Mon Apr 6 18:45:30 2015 +++ src/sys/dev/sysmon/sysmon_envsys.c Mon Oct 23 18:57:12 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.127.2.1 2015/04/06 18:45:30 snj Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.127.2.2 2017/10/23 18:57:12 snj Exp $ */ /*- * Copyright (c) 2007, 2008 Juan Romero Pardines. @@ -64,7 +64,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.1 2015/04/06 18:45:30 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_envsys.c,v 1.127.2.2 2017/10/23 18:57:12 snj Exp $"); #include #include @@ -1207,6 +1207,12 @@ sme_remove_userprops(void) } /* + * Detach from entropy collection + */ + if (edata->flags & ENVSYS_FHAS_ENTROPY) +rnd_detach_sources(>rnd_src); + + /* * Finally, remove any old limits event, then * install a new event (which will update the * dictionary)
CVS commit: [netbsd-7] src/sys/dev/sysmon
Module Name:src Committed By: snj Date: Mon Apr 6 18:45:31 UTC 2015 Modified Files: src/sys/dev/sysmon [netbsd-7]: sysmon_envsys.c sysmon_envsys_events.c sysmonvar.h Log Message: Pull up following revision(s) (requested by hannken in ticket #666): sys/dev/sysmon/sysmon_envsys.c: revision 1.129 sys/dev/sysmon/sysmon_envsys_events.c: revision 1.114 sys/dev/sysmon/sysmonvar.h: revision 1.46 Add a counter of busy events and stop enqueueing more work if a device = is busy. Protect this counter with a new short time lock sme_work_mtx and keep sme_mtx as long time lock. Removes a deadlock where an active event holds sme_mtx, the callout sme_events_check blocks on sme_mtx and callout processing stops. To generate a diff of this commit: cvs rdiff -u -r1.127 -r1.127.2.1 src/sys/dev/sysmon/sysmon_envsys.c cvs rdiff -u -r1.110.4.1 -r1.110.4.2 \ src/sys/dev/sysmon/sysmon_envsys_events.c cvs rdiff -u -r1.44.12.1 -r1.44.12.2 src/sys/dev/sysmon/sysmonvar.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.127 src/sys/dev/sysmon/sysmon_envsys.c:1.127.2.1 --- src/sys/dev/sysmon/sysmon_envsys.c:1.127 Sun Aug 10 16:44:36 2014 +++ src/sys/dev/sysmon/sysmon_envsys.c Mon Apr 6 18:45:30 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys.c,v 1.127 2014/08/10 16:44:36 tls Exp $ */ +/* $NetBSD: sysmon_envsys.c,v 1.127.2.1 2015/04/06 18:45:30 snj 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.127 2014/08/10 16:44:36 tls Exp $); +__KERNEL_RCSID(0, $NetBSD: sysmon_envsys.c,v 1.127.2.1 2015/04/06 18:45:30 snj Exp $); #include sys/param.h #include sys/types.h @@ -485,6 +485,7 @@ sysmon_envsys_create(void) TAILQ_INIT(sme-sme_sensors_list); LIST_INIT(sme-sme_events_list); mutex_init(sme-sme_mtx, MUTEX_DEFAULT, IPL_NONE); + mutex_init(sme-sme_work_mtx, MUTEX_DEFAULT, IPL_NONE); cv_init(sme-sme_condvar, sme_wait); return sme; @@ -508,6 +509,7 @@ sysmon_envsys_destroy(struct sysmon_envs TAILQ_REMOVE(sme-sme_sensors_list, edata, sensors_head); } mutex_destroy(sme-sme_mtx); + mutex_destroy(sme-sme_work_mtx); cv_destroy(sme-sme_condvar); kmem_free(sme, sizeof(*sme)); } Index: src/sys/dev/sysmon/sysmon_envsys_events.c diff -u src/sys/dev/sysmon/sysmon_envsys_events.c:1.110.4.1 src/sys/dev/sysmon/sysmon_envsys_events.c:1.110.4.2 --- src/sys/dev/sysmon/sysmon_envsys_events.c:1.110.4.1 Mon Dec 1 11:38:42 2014 +++ src/sys/dev/sysmon/sysmon_envsys_events.c Mon Apr 6 18:45:30 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_envsys_events.c,v 1.110.4.1 2014/12/01 11:38:42 martin Exp $ */ +/* $NetBSD: sysmon_envsys_events.c,v 1.110.4.2 2015/04/06 18:45:30 snj 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.110.4.1 2014/12/01 11:38:42 martin Exp $); +__KERNEL_RCSID(0, $NetBSD: sysmon_envsys_events.c,v 1.110.4.2 2015/04/06 18:45:30 snj Exp $); #include sys/param.h #include sys/types.h @@ -42,6 +42,7 @@ __KERNEL_RCSID(0, $NetBSD: sysmon_envsy #include sys/mutex.h #include sys/kmem.h #include sys/callout.h +#include sys/syslog.h #include dev/sysmon/sysmonvar.h #include dev/sysmon/sysmon_envsysvar.h @@ -712,11 +713,23 @@ sme_events_check(void *arg) KASSERT(sme != NULL); + mutex_enter(sme-sme_work_mtx); + if (sme-sme_busy 0) { + log(LOG_WARNING, %s: workqueue busy: updates stopped\n, + sme-sme_name); + mutex_exit(sme-sme_work_mtx); + return; + } + mutex_exit(sme-sme_work_mtx); + mutex_enter(sme-sme_mtx); + mutex_enter(sme-sme_work_mtx); LIST_FOREACH(see, sme-sme_events_list, see_list) { workqueue_enqueue(sme-sme_wq, see-see_wk, NULL); see-see_edata-flags |= ENVSYS_FNEED_REFRESH; + sme-sme_busy++; } + mutex_exit(sme-sme_work_mtx); if (!sysmon_low_power) sme_schedule_callout(sme); mutex_exit(sme-sme_mtx); @@ -796,6 +809,10 @@ sme_events_worker(struct work *wk, void out: see-see_flags = ~SEE_EVENT_WORKING; cv_broadcast(sme-sme_condvar); + mutex_enter(sme-sme_work_mtx); + KASSERT(sme-sme_busy 0); + sme-sme_busy--; + mutex_exit(sme-sme_work_mtx); mutex_exit(sme-sme_mtx); } Index: src/sys/dev/sysmon/sysmonvar.h diff -u src/sys/dev/sysmon/sysmonvar.h:1.44.12.1 src/sys/dev/sysmon/sysmonvar.h:1.44.12.2 --- src/sys/dev/sysmon/sysmonvar.h:1.44.12.1 Mon Dec 1 11:38:42 2014 +++ src/sys/dev/sysmon/sysmonvar.h Mon Apr 6 18:45:30 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmonvar.h,v 1.44.12.1 2014/12/01 11:38:42 martin Exp $ */ +/* $NetBSD: sysmonvar.h,v 1.44.12.2 2015/04/06 18:45:30 snj Exp $ */ /*- * Copyright (c) 2000 Zembu Labs, Inc. @@ -207,7 +207,11 @@ struct sysmon_envsys { /* * Locking/synchronization. */ + int