[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] RHEL3 2.4 domU kernel has load average of 2
The backport of the xenbus code for the 2.4 kernel changed wait_event_interruptible() into wait_event() into a couple of places it looks to deal with the fact that signals weren't being blocked. This results in an idle domU showing a load-average of 2, which was messing up some work-management tools. The attached patch blocks all signals for the xenbus and xenwatch daemons, instead. Signed-off-by: John Byrne <john.l.byrne@xxxxxx> 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 <linux/module.h> #include <linux/uio.h> #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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |