diff -Nar -U4 linux-2.4.21/drivers/xen/xenbus/xenbus_comms.c linux-2.4.21/drivers/xen/xenbus/xenbus_comms.c --- linux-2.4.21/drivers/xen/xenbus/xenbus_comms.c 2007-02-23 14:46:17.000000000 -0600 +++ linux-2.4.21/drivers/xen/xenbus/xenbus_comms.c 2007-02-23 14:54:55.000000000 -0600 @@ -149,9 +149,9 @@ while (len != 0) { unsigned int avail; const char *src; - wait_event/*_interruptible*/(xb_waitq, + wait_event_interruptible(xb_waitq, intf->rsp_cons != intf->rsp_prod); /* Read indexes, then verify. */ cons = intf->rsp_cons; diff -Nar -U4 linux-2.4.21/drivers/xen/xenbus/xenbus_xs.c linux-2.4.21/drivers/xen/xenbus/xenbus_xs.c --- linux-2.4.21/drivers/xen/xenbus/xenbus_xs.c 2007-02-23 14:46:17.000000000 -0600 +++ linux-2.4.21/drivers/xen/xenbus/xenbus_xs.c 2007-02-23 14:53:53.000000000 -0600 @@ -45,8 +45,21 @@ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) #include #include #define kvec iovec + +static void block_signals(void) +{ + sigset_t blocked; + + sigfillset(&blocked); + spin_lock_irq(¤t->sighand->siglock); + current->blocked = blocked; + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + flush_signals(current); +} + #endif /* xenbus_probe.c */ extern char *kasprintf(const char *fmt, ...); @@ -712,8 +722,9 @@ struct xs_stored_msg *msg; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) daemonize(); + block_signals(); memcpy(current->comm, "xenwatch", 10); #endif @@ -724,11 +735,10 @@ schedule(); #endif for (;;) { - /* XXXAP _interruptable spins here after killall */ - wait_event(watch_events_waitq, - !list_empty(&watch_events)); + wait_event_interruptible(watch_events_waitq, + !list_empty(&watch_events)); #if 0 /* XXXAP 2.4 */ if (kthread_should_stop()) break; @@ -827,8 +837,9 @@ int err; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) daemonize(); + block_signals(); memcpy(current->comm, "xenbus", 8); #endif #ifdef CONFIG_HOTPLUG_CPU