Related to my work writing a driver for the Ziatech ZT5503 SBC watchdogs, I've come up with a question. Obviously the watchdog needs to be `strobed' at some interval to keep it from resetting the machine (after it has been enabled). I'm having troubles figuring out how to do this. Taking a look at the driver for the Ziatech 5512 watchdog that Eric Van Hensbergen write for Inferno, I see that he's making use of addclock0link(), which makes sense. This seems to be overkill for my needs though. I'm not sure the resolution of the timer on the ZT5512 blades, but mine have a minimum resolution of 250ms, which means that they'd be strobed twice in their timeout period. That's not so bad, but some of the other resolutions (the timer supports 250ms, 500ms, 1s, 8s, 32s, 64s, 128s and 256s intervals), this can get to be an issue. I personally have no use for the 256s resolution, and I'm sure I'm the only person on the planet running Plan 9 on these blades, but I'd really like to have a driver that's not overkill. So, I thought a nifty solution would be to make use of the rendezvous stuff and call tsleep. But I don't understand how this should work. When the watchdog is enabled, I need to start some procedure that never returns. This would be easy in userland, where I could simply start another thread, but how do I do this in-kernel. If I've read in /dev/watchdog enable resolution 500ms and I've parsed that, how do I then call the procedure to do the timer? My procedure looked like (until I realized that it'd never work if I understand the behavior correctly, which I'm fairly certain I do): void watchdog_strobe(void) { for(;;) { if (!enabled) break; tsleep(wd_timer, return0, nil, wd_resolution); inb(IOP_Watchdog); /* Reading the IO port strobes the WD */ } } So I'm stuck with the problem: how do I enable a separate timer? Hope the question is clear. Thanks, Devon