From: Breno Leitao Date: Tue, 5 Oct 2010 13:16:23 +0000 (+0000) Subject: ehea: converting msleeps to waitqueue on check_sqs() function X-Git-Tag: v2.6.37-rc1~147^2~234 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=a8bb69f78194dc483f6c4a4bf8860c1ede35fa25;p=linux.git ehea: converting msleeps to waitqueue on check_sqs() function Removing the msleep() call in check_sqs() function, and replacing by a wait queue. Signed-off-by: Breno Leitao Signed-off-by: David S. Miller --- diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index 5bae7daf40fb..1321cb6401cf 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h @@ -492,6 +492,7 @@ struct ehea_port { u8 autoneg; u8 num_def_qps; wait_queue_head_t swqe_avail_wq; + wait_queue_head_t restart_wq; }; struct port_res_cfg { diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 7897bdf76e66..15401af30108 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c @@ -786,6 +786,7 @@ static void reset_sq_restart_flag(struct ehea_port *port) struct ehea_port_res *pr = &port->port_res[i]; pr->sq_restart_flag = 0; } + wake_up(&port->restart_wq); } static void check_sqs(struct ehea_port *port) @@ -796,6 +797,7 @@ static void check_sqs(struct ehea_port *port) for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) { struct ehea_port_res *pr = &port->port_res[i]; + int ret; k = 0; swqe = ehea_get_swqe(pr->qp, &swqe_index); memset(swqe, 0, SWQE_HEADER_SIZE); @@ -809,13 +811,14 @@ static void check_sqs(struct ehea_port *port) ehea_post_swqe(pr->qp, swqe); - while (pr->sq_restart_flag == 0) { - msleep(5); - if (++k == 100) { - ehea_error("HW/SW queues out of sync"); - ehea_schedule_port_reset(pr->port); - return; - } + ret = wait_event_timeout(port->restart_wq, + pr->sq_restart_flag == 0, + msecs_to_jiffies(100)); + + if (!ret) { + ehea_error("HW/SW queues out of sync"); + ehea_schedule_port_reset(pr->port); + return; } } } @@ -2654,6 +2657,7 @@ static int ehea_open(struct net_device *dev) } init_waitqueue_head(&port->swqe_avail_wq); + init_waitqueue_head(&port->restart_wq); mutex_unlock(&port->port_lock);