rc = readl(&wait->msg->body[0]) >> 24; 
rc = le32_to_cpu(wait->msg->body[0]) >> 24; 
int i2o_msg_post_wait_mem(struct i2o_controller *c, u32 m, unsigned long			  timeout, struct i2o_dma *dma){	DECLARE_WAIT_QUEUE_HEAD(wq);	struct i2o_exec_wait *wait;	static u32 tcntxt = 0x80000000;	struct i2o_message __iomem *msg = i2o_msg_in_to_virt(c, m);	int rc = 0;	wait = i2o_exec_wait_alloc();	if (!wait)		return -ENOMEM;	if (tcntxt == 0xffffffff)		tcntxt = 0x80000000;	if (dma)		wait->dma = *dma;	/*	 * Fill in the message initiator context and transaction context.	 * We will only use transaction contexts >= 0x80000000 for POST WAIT,	 * so we could find a POST WAIT reply easier in the reply handler.	 */	writel(i2o_exec_driver.context, &msg->u.s.icntxt);	wait->tcntxt = tcntxt++;	writel(wait->tcntxt, &msg->u.s.tcntxt);	/*	 * Post the message to the controller. At some point later it will	 * return. If we time out before it returns then complete will be zero.	 */	i2o_msg_post(c, m);	if (!wait->complete) {		wait->wq = &wq;		/*		 * we add elements add the head, because if a entry in the list		 * will never be removed, we have to iterate over it every time		 */		list_add(&wait->list, &i2o_exec_wait_list);		wait_event_interruptible_timeout(wq, wait->complete,			timeout * HZ);		wait->wq = NULL;	}	barrier();	if (wait->complete) {		rc = readl(&wait->msg->body[0]) >> 24;		i2o_flush_reply(c, wait->m);		i2o_exec_wait_free(wait);	} else {		/*		 * We cannot remove it now. This is important. When it does		 * terminate (which it must do if the controller has not		 * died...) then it will otherwise scribble on stuff.		 *		 * FIXME: try abort message		 */		if (dma)			dma->virt = NULL;		rc = -ETIMEDOUT;	}	return rc;};
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9e87545f06930c1d294423a8091d1077e7444a47/exec-osm.c/buggy/drivers/message/i2o/exec-osm.c