Module Name: src Committed By: macallan Date: Wed Sep 6 08:14:42 UTC 2023
Modified Files: src/sys/arch/macppc/dev: cuda.c Log Message: yet another tsleep/wakeup -> cv_* To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/macppc/dev/cuda.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/arch/macppc/dev/cuda.c diff -u src/sys/arch/macppc/dev/cuda.c:1.29 src/sys/arch/macppc/dev/cuda.c:1.30 --- src/sys/arch/macppc/dev/cuda.c:1.29 Sat Aug 7 16:18:57 2021 +++ src/sys/arch/macppc/dev/cuda.c Wed Sep 6 08:14:42 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cuda.c,v 1.29 2021/08/07 16:18:57 thorpej Exp $ */ +/* $NetBSD: cuda.c,v 1.30 2023/09/06 08:14:42 macallan Exp $ */ /*- * Copyright (c) 2006 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.29 2021/08/07 16:18:57 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.30 2023/09/06 08:14:42 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -93,7 +93,8 @@ struct cuda_softc { /* time */ uint32_t sc_tod; uint32_t sc_autopoll; - uint32_t sc_todev; + kcondvar_t sc_todev; + kmutex_t sc_todevmtx; /* ADB */ void (*sc_adb_handler)(void *, int, uint8_t *); void *sc_adb_cookie; @@ -197,6 +198,9 @@ cuda_attach(device_t parent, device_t se sc->sc_error = 0; sc->sc_i2c_read_len = 0; + cv_init(&sc->sc_todev, "cuda_event"); + mutex_init(&sc->sc_todevmtx, MUTEX_DEFAULT, IPL_NONE); + if (bus_space_map(sc->sc_memt, ca->ca_reg[0] + ca->ca_baseaddr, ca->ca_reg[1], 0, &sc->sc_memh) != 0) { @@ -728,7 +732,8 @@ cuda_error_handler(void *cookie, int len * byte 3 seems to be the failed command */ sc->sc_error = 1; - wakeup(&sc->sc_todev); + DPRINTF("cuda error %02x %02x %02x %02x\n", data[0], data[1], data[2], data[3]); + cv_signal(&sc->sc_todev); return 0; } @@ -763,7 +768,7 @@ cuda_todr_handler(void *cookie, int len, sc->sc_iic_done = len; break; } - wakeup(&sc->sc_todev); + cv_signal(&sc->sc_todev); return 0; } @@ -781,7 +786,10 @@ cuda_todr_get(todr_chip_handle_t tch, st cuda_send(sc, 0, 2, cmd); while ((sc->sc_tod == 0) && (cnt < 10)) { - tsleep(&sc->sc_todev, 0, "todr", 10); + mutex_enter(&sc->sc_todevmtx); + cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz); + mutex_exit(&sc->sc_todevmtx); + cnt++; } @@ -817,7 +825,9 @@ cuda_todr_set(todr_chip_handle_t tch, st sc->sc_tod = 0; if (cuda_send(sc, 0, 6, cmd) == 0) { while (sc->sc_tod == 0) { - tsleep(&sc->sc_todev, 0, "todr", 10); + mutex_enter(&sc->sc_todevmtx); + cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz); + mutex_exit(&sc->sc_todevmtx); } return 0; } @@ -874,8 +884,11 @@ cuda_autopoll(void *cookie, int flag) while(sc->sc_autopoll == -1) { if (sc->sc_polling || cold) { cuda_poll(sc); - } else - tsleep(&sc->sc_todev, 0, "autopoll", 100); + } else { + mutex_enter(&sc->sc_todevmtx); + cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz); + mutex_exit(&sc->sc_todevmtx); + } } } @@ -962,8 +975,11 @@ cuda_i2c_exec(void *cookie, i2c_op_t op, while ((sc->sc_iic_done == 0) && (sc->sc_error == 0)) { if (sc->sc_polling || cold) { cuda_poll(sc); - } else - tsleep(&sc->sc_todev, 0, "i2c", 1000); + } else { + mutex_enter(&sc->sc_todevmtx); + cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz); + mutex_exit(&sc->sc_todevmtx); + } } if (sc->sc_error) { @@ -988,8 +1004,11 @@ cuda_i2c_exec(void *cookie, i2c_op_t op, while ((sc->sc_iic_done == 0) && (sc->sc_error == 0)) { if (sc->sc_polling || cold) { cuda_poll(sc); - } else - tsleep(&sc->sc_todev, 0, "i2c", 1000); + } else { + mutex_enter(&sc->sc_todevmtx); + cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz); + mutex_exit(&sc->sc_todevmtx); + } } if (sc->sc_error) {