> It could be a bit better... I did as above since I supposed that you
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
--