Re: LinuxPPS low-level IRQs timestamps & ldisc

From: Alan Cox
Date: Mon Jun 02 2008 - 10:18:23 EST


> It could be a bit better... I did as above since I supposed that you
> wished all PPS code should be removed from serial port code.

Ideally. But if it is genuinely the case that the serial port IRQ handler
in some cases needs to do

my_interrupt() {
get_timestamp()
frob_with_hardware()
ld->dcd_change(blah, timestamp)
}

then that is still fairly clean and more importantly actually appears to
work. I'd avoid all the ifdefs with this in the serial drivers that need
more accuracy:

{
struct timespec ts;
if (ld->dcd_change)
getnstimeofday(&ts);
existing tty stuff
if (ld->dcd_change)
ld->dcd_change(tty, status, &ts);
}

And in ld->dcd_change do

struct timespec myts;
/* Caller passed NULL meaning 'do your own timestamp' */
if (ts == NULL) {
ts = &myts;
getnstimeofday(&myts);
}

so for uart that would

uart_dcd_change(struct uart_port *port, unsigned int status,
struct timespec *ts) {
{
...
}

passing the timestamp from the ttys own IRQ handler

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/