svn commit: r348844 - head/sys/powerpc/powernv
Justin Hibbits
jhibbits at FreeBSD.org
Mon Jun 10 03:16:56 UTC 2019
Author: jhibbits
Date: Mon Jun 10 03:16:55 2019
New Revision: 348844
URL: https://svnweb.freebsd.org/changeset/base/348844
Log:
powerpc/powernv: Reduce the scope of the sensor guarding mutex
vmem_xalloc() cannot be called while holding a nonblocking mutex, warned
by WITNESS. The lock may not be necessary in general, but it avoids
superfluous concurrent OPAL calls for the same sensor.
Reported by: pkubaj
Modified:
head/sys/powerpc/powernv/opal_sensor.c
Modified: head/sys/powerpc/powernv/opal_sensor.c
==============================================================================
--- head/sys/powerpc/powernv/opal_sensor.c Mon Jun 10 03:07:10 2019 (r348843)
+++ head/sys/powerpc/powernv/opal_sensor.c Mon Jun 10 03:16:55 2019 (r348844)
@@ -92,13 +92,14 @@ const char *opal_sensor_types[] = {
* Retrieve the raw value from OPAL. This will be cooked by the sysctl handler.
*/
static int
-opal_sensor_get_val(uint32_t key, uint64_t *val)
+opal_sensor_get_val(struct opal_sensor_softc *sc, uint32_t key, uint64_t *val)
{
struct opal_msg msg;
uint32_t val32;
int rv, token;
token = opal_alloc_async_token();
+ SENSOR_LOCK(sc);
rv = opal_call(OPAL_SENSOR_READ, key, token, vtophys(&val32));
if (rv == OPAL_ASYNC_COMPLETION) {
@@ -110,6 +111,7 @@ opal_sensor_get_val(uint32_t key, uint64_t *val)
if (rv == OPAL_SUCCESS)
val32 = msg.params[0];
}
+ SENSOR_UNLOCK(sc);
if (rv == OPAL_SUCCESS)
*val = val32;
@@ -131,9 +133,7 @@ opal_sensor_sysctl(SYSCTL_HANDLER_ARGS)
sc = arg1;
sensor = arg2;
- SENSOR_LOCK(sc);
- error = opal_sensor_get_val(sensor, &sensval);
- SENSOR_UNLOCK(sc);
+ error = opal_sensor_get_val(sc, sensor, &sensval);
if (error)
return (error);
More information about the svn-src-all
mailing list