From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Byrne Subject: [PATCH] RHEL3 2.4 domU kernel has load average of 2 Date: Fri, 23 Feb 2007 14:49:23 -0800 Message-ID: <45DF6F73.4040404@hp.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030606060302070708020301" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------030606060302070708020301 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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 --------------030606060302070708020301 Content-Type: text/x-patch; name="xenjlb.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xenjlb.patch" 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 --------------030606060302070708020301 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------030606060302070708020301--