From 46cd48ee9b0a3863e8c57c6682a404fe23c4a823 Mon Sep 17 00:00:00 2001 From: Alex Hornung Date: Mon, 30 Aug 2010 07:47:34 +0100 Subject: [PATCH] coretemp, sensors - Adjust spinlocks * In kern_sensors, adjust the spinlocks to not be held across the sysctl interface management. * In coretemp, adjust illegal spinlock across calls to kern_sensors. Reported-by: Matt Dillon (dillon@) --- sys/dev/powermng/coretemp/coretemp.c | 10 ---------- sys/kern/kern_sensors.c | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/sys/dev/powermng/coretemp/coretemp.c b/sys/dev/powermng/coretemp/coretemp.c index 58564bd8d3..7e02dc42e6 100644 --- a/sys/dev/powermng/coretemp/coretemp.c +++ b/sys/dev/powermng/coretemp/coretemp.c @@ -39,8 +39,6 @@ #include #include #include -#include -#include #include /* for curthread */ #include @@ -48,8 +46,6 @@ #include #include -static struct spinlock coretemp_lock; - struct coretemp_softc { struct ksensordev sc_sensordev; struct ksensor sc_sensor; @@ -186,7 +182,6 @@ coretemp_attach(device_t dev) return (ENXIO); } sensordev_install(&sc->sc_sensordev); - spin_init(&coretemp_lock); return (0); } @@ -196,11 +191,8 @@ coretemp_detach(device_t dev) { struct coretemp_softc *sc = device_get_softc(dev); - spin_lock_wr(&coretemp_lock); sensordev_deinstall(&sc->sc_sensordev); sensor_task_unregister(sc); - spin_unlock_wr(&coretemp_lock); - spin_uninit(&coretemp_lock); return (0); } @@ -225,9 +217,7 @@ coretemp_get_temp(device_t dev) origcpu = mycpuid; lwkt_migratecpu(cpu); - spin_lock_wr(&coretemp_lock); msr = rdmsr(MSR_THERM_STATUS); - spin_unlock_wr(&coretemp_lock); lwkt_migratecpu(origcpu); } else if (cpu != 0) diff --git a/sys/kern/kern_sensors.c b/sys/kern/kern_sensors.c index 7070ece7b2..d266ebe911 100644 --- a/sys/kern/kern_sensors.c +++ b/sys/kern/kern_sensors.c @@ -86,11 +86,11 @@ sensordev_install(struct ksensordev *sensdev) } sensordev_count++; /* mtx_unlock(&Giant); */ + spin_unlock_wr(&sensor_dev_lock); #ifndef NOSYSCTL8HACK sensor_sysctl8magic_install(sensdev); #endif - spin_unlock_wr(&sensor_dev_lock); } void @@ -139,11 +139,11 @@ sensordev_deinstall(struct ksensordev *sensdev) sensordev_count--; SLIST_REMOVE(&sensordev_list, sensdev, ksensordev, list); /* mtx_unlock(&Giant); */ + spin_unlock_wr(&sensor_dev_lock); #ifndef NOSYSCTL8HACK sensor_sysctl8magic_deinstall(sensdev); #endif - spin_unlock_wr(&sensor_dev_lock); } void -- 2.41.0