chiark / gitweb /
hostside: do serial irq priority poking with a helper script and a pipe in /var/run...
authorIan Jackson <ian@davenant.greenend.org.uk>
Sun, 9 Jan 2011 19:07:40 +0000 (19:07 +0000)
committerIan Jackson <ian@davenant.greenend.org.uk>
Sun, 9 Jan 2011 19:07:40 +0000 (19:07 +0000)
hostside/realtime.c
hostside/serial-irq-priority

index 46f6c06ffe830c322c97a72b1f52770d17a23e68..44b01ed1dac187b2eee1926d391c841f0583d03e 100644 (file)
@@ -376,6 +376,25 @@ void check_rusage_check(int always_report) {
   }
 }
 
+#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;
@@ -565,6 +584,7 @@ int main(int argc, const char **argv) {
     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);
index aee45b40a153414c4858b07b5913382154d3d2b1..3b3350b4ef0f11a08fef20eb02266bf9edd69927 100755 (executable)
@@ -1,15 +1,22 @@
 #!/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