Module Name: src Committed By: jdc Date: Thu Dec 10 17:02:51 UTC 2020
Modified Files: src/sys/dev/i2c: adm1021.c Log Message: Handle failing to acquire the iic bus. Better handle errors when attaching sysmon sensors. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/dev/i2c/adm1021.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/i2c/adm1021.c diff -u src/sys/dev/i2c/adm1021.c:1.20 src/sys/dev/i2c/adm1021.c:1.21 --- src/sys/dev/i2c/adm1021.c:1.20 Fri Aug 21 20:44:38 2020 +++ src/sys/dev/i2c/adm1021.c Thu Dec 10 17:02:51 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: adm1021.c,v 1.20 2020/08/21 20:44:38 macallan Exp $ */ +/* $NetBSD: adm1021.c,v 1.21 2020/12/10 17:02:51 jdc Exp $ */ /* $OpenBSD: adm1021.c,v 1.27 2007/06/24 05:34:35 dlg Exp $ */ /* @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.20 2020/08/21 20:44:38 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.21 2020/12/10 17:02:51 jdc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -396,6 +396,7 @@ admtemp_attach(device_t parent, device_t if (sysmon_envsys_sensor_attach( sc->sc_sme, &sc->sc_sensor[ADMTEMP_INT])) { sysmon_envsys_destroy(sc->sc_sme); + sc->sc_sme = NULL; aprint_error_dev(self, "unable to attach internal at sysmon\n"); return; @@ -404,6 +405,7 @@ admtemp_attach(device_t parent, device_t sysmon_envsys_sensor_attach( sc->sc_sme, &sc->sc_sensor[ADMTEMP_EXT])) { sysmon_envsys_destroy(sc->sc_sme); + sc->sc_sme = NULL; aprint_error_dev(self, "unable to attach external at sysmon\n"); return; @@ -425,6 +427,7 @@ admtemp_attach(device_t parent, device_t aprint_error_dev(self, "unable to register with sysmon\n"); sysmon_envsys_destroy(sc->sc_sme); + sc->sc_sme = NULL; return; } } @@ -437,7 +440,10 @@ admtemp_refresh(struct sysmon_envsys *sm uint8_t cmd, xdata; int8_t sdata; - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) { + edata->state = ENVSYS_SINVALID; + return; + } if (edata->sensor == ADMTEMP_INT) cmd = ADM1021_INT_TEMP; @@ -472,7 +478,8 @@ admtemp_getlim_1021(struct sysmon_envsys *props &= ~(PROP_CRITMAX | PROP_CRITMIN); - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (edata->sensor == ADMTEMP_INT) cmd = ADM1021_INT_HIGH_READ; @@ -521,7 +528,8 @@ admtemp_getlim_1023(struct sysmon_envsys *props &= ~(PROP_CRITMAX | PROP_CRITMIN); - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (edata->sensor == ADMTEMP_INT) cmd = ADM1021_INT_HIGH_READ; @@ -585,7 +593,8 @@ admtemp_getlim_1032(struct sysmon_envsys *props &= ~(PROP_WARNMAX | PROP_CRITMAX | PROP_WARNMIN); - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (edata->sensor == ADMTEMP_INT) cmd = ADM1032_INT_THERM; @@ -660,7 +669,8 @@ admtemp_setlim_1021(struct sysmon_envsys int tmp; int8_t sdata; - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (*props & PROP_CRITMAX) { if (edata->sensor == ADMTEMP_INT) @@ -746,7 +756,8 @@ admtemp_setlim_1023(struct sysmon_envsys else ext11 = 1; - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (*props & PROP_CRITMAX) { if (edata->sensor == ADMTEMP_INT) @@ -803,7 +814,8 @@ admtemp_setlim_1032(struct sysmon_envsys else ext11 = 1; - iic_acquire_bus(sc->sc_tag, 0); + if (iic_acquire_bus(sc->sc_tag, 0)) + return; if (*props & PROP_CRITMAX) { if (edata->sensor == ADMTEMP_INT)