We seem to cast adb_cuda_tickle() to a void pointer to bypass
timeout_set(9)'s type checking

The actual function takes no parameters, but the timeout layer doesn't
know that.  Eek.  This is no good.

The fix is trivial.  Add an unused void pointer parameter to
adb_cuda_tickle().

ok?

Index: adb.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/dev/adb.c,v
retrieving revision 1.43
diff -u -p -r1.43 adb.c
--- adb.c       11 Mar 2021 11:16:58 -0000      1.43
+++ adb.c       22 Jun 2021 19:26:07 -0000
@@ -228,7 +228,7 @@ void        print_single(u_char *);
 void   adb_intr_cuda(void);
 void   adb_soft_intr(void);
 int    send_adb_cuda(u_char *, u_char *, void *, void *, int);
-void   adb_cuda_tickle(void);
+void   adb_cuda_tickle(void *);
 void   adb_pass_up(struct adbCommand *);
 void   adb_op_comprout(caddr_t, caddr_t, int);
 void   adb_reinit(struct adb_softc *);
@@ -276,7 +276,7 @@ print_single(u_char *str)
 #endif
 
 void
-adb_cuda_tickle(void)
+adb_cuda_tickle(void *unused)
 {
        volatile int s;
 
@@ -1160,7 +1160,7 @@ adb_reinit(struct adb_softc *sc)
 #endif
 
        if (adbHardware == ADB_HW_CUDA) {
-               timeout_set(&adb_cuda_timeout, (void *)adb_cuda_tickle, NULL);
+               timeout_set(&adb_cuda_timeout, adb_cuda_tickle, NULL);
                timeout_add(&adb_cuda_timeout, ADB_TICKLE_TICKS);
        }
 

Reply via email to