}
}
+#define SERINTRPOKE "/var/run/serial-irq-priority-poke"
+
+static void serial_interrupt_priority(void) {
+ int fd= open(SERINTRPOKE, O_WRONLY|O_NONBLOCK);
+ if (fd<0) {
+ if (errno==ENOENT || errno==EAGAIN || errno==EACCES || errno==EWOULDBLOCK)
+ return;
+ diee("failed to open " SERINTRPOKE);
+ }
+ static char dummy;
+ int r= write(fd,&dummy,1);
+ if (r!=1) {
+ assert(r<0);
+ if (!(errno==EWOULDBLOCK))
+ diee("failed to write a byte to " SERINTRPOKE);
+ }
+ close(fd);
+}
+
/*---------- debugging ----------*/
unsigned long eventcounter;
if (nononblock_stdin) oop_fd_nonblock(0,0);
serial_open(device);
+ serial_interrupt_priority();
r= oop_fd_nonblock(serial_fd, 1); if (r) diee("nonblock(serial_fd,1)");
events->on_fd(events, serial_fd, OOP_READ, serial_readable, 0);
#!/bin/bash
set -ex
-exec 4</dev/railway
-ssd=`start-stop-daemon --stop -t -u root -n irq/4-serial`
-case "$ssd" in
-"Would send signal 15 to "*.) ;;
-*) echo >&2 "start-stop-daemon said $ssd ?"; exit 1;;
-esac
-pid="${ssd##* }"
-pid="${pid%.}"
+cd /var/run
+p=serial-irq-priority-poke
+rm -f $p
+mkfifo -m 622 $p
+exec 3<>$p
-echo chrt -p 55 $pid
+while read -n 1 <&3 dummy; do
-exec sleep 1000000000
+ ssd=`start-stop-daemon --stop -t -u root -n irq/4-serial`
+ case "$ssd" in
+ "Would send signal 15 to "*.)
+ pid="${ssd##* }"
+ pid="${pid%.}"
+ chrt -p 55 $pid ||:
+ ;;
+ *) echo >&2 "start-stop-daemon said $ssd ?"; continue;;
+ esac
+
+done