From b6d91f7fc453d20a83de4f2590130eb93da6d2f5 Mon Sep 17 00:00:00 2001 From: maxim Date: Fri, 7 Mar 2008 16:01:07 +0000 Subject: [PATCH] b=14956 i=isaac i=liang Sleep on gmni_rx_mutex in interruptible way. Otherwise 'uptime' reports high load while rx thread is sleeping on mutex. --- lnet/klnds/gmlnd/gmlnd_comm.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lnet/klnds/gmlnd/gmlnd_comm.c b/lnet/klnds/gmlnd/gmlnd_comm.c index 0ef2436..5f48cf0 100644 --- a/lnet/klnds/gmlnd/gmlnd_comm.c +++ b/lnet/klnds/gmlnd/gmlnd_comm.c @@ -433,9 +433,11 @@ gmnal_rx_thread(void *arg) cfs_daemonize("gmnal_rxd"); - down(&gmni->gmni_rx_mutex); - while (!gmni->gmni_shutdown) { + rc = down_interruptible(&gmni->gmni_rx_mutex); + LASSERT (rc == 0 || rc == -EINTR); + if (rc != 0) + continue; spin_lock(&gmni->gmni_gm_lock); rxevent = gm_blocking_receive_no_spin(gmni->gmni_port); @@ -444,6 +446,7 @@ gmnal_rx_thread(void *arg) switch (GM_RECV_EVENT_TYPE(rxevent)) { default: gm_unknown(gmni->gmni_port, rxevent); + up(&gmni->gmni_rx_mutex); continue; case GM_FAST_RECV_EVENT: @@ -503,12 +506,8 @@ gmnal_rx_thread(void *arg) if (rc < 0) /* parse failure */ gmnal_post_rx(gmni, rx); - - down(&gmni->gmni_rx_mutex); } - up(&gmni->gmni_rx_mutex); - CDEBUG(D_NET, "exiting\n"); atomic_dec(&gmni->gmni_nthreads); return 0; -- 1.8.3.1