struct i2o_message __iomem *msg = i2o_msg_out_to_virt(c, m); u32 context; 
struct i2o_message *msg = i2o_msg_out_to_virt(c, m); u32 context = le32_to_cpu(msg->u.s.icntxt); 
int i2o_driver_dispatch(struct i2o_controller *c, u32 m){	struct i2o_driver *drv;	struct i2o_message __iomem *msg = i2o_msg_out_to_virt(c, m);	u32 context;	unsigned long flags;	if(unlikely(!msg))		return -EIO;	context = readl(&msg->u.s.icntxt);	if (unlikely(context >= i2o_max_drivers)) {		osm_warn("%s: Spurious reply to unknown driver %d\n", c->name,			 context);		return -EIO;	}	spin_lock_irqsave(&i2o_drivers_lock, flags);	drv = i2o_drivers[context];	spin_unlock_irqrestore(&i2o_drivers_lock, flags);	if (unlikely(!drv)) {		osm_warn("%s: Spurious reply to unknown driver %d\n", c->name,			 context);		return -EIO;	}	if ((readl(&msg->u.head[1]) >> 24) == I2O_CMD_UTIL_EVT_REGISTER) {		struct i2o_device *dev, *tmp;		struct i2o_event *evt;		u16 size;		u16 tid = readl(&msg->u.head[1]) & 0xfff;		osm_debug("event received from device %d\n", tid);		if (!drv->event)			return -EIO;		/* cut of header from message size (in 32-bit words) */		size = (readl(&msg->u.head[0]) >> 16) - 5;		evt = kmalloc(size * 4 + sizeof(*evt), GFP_ATOMIC | __GFP_ZERO);		if (!evt)			return -ENOMEM;		evt->size = size;		evt->tcntxt = readl(&msg->u.s.tcntxt);		evt->event_indicator = readl(&msg->body[0]);		memcpy_fromio(&evt->tcntxt, &msg->u.s.tcntxt, size * 4);		list_for_each_entry_safe(dev, tmp, &c->devices, list)		    if (dev->lct_data.tid == tid) {			evt->i2o_dev = dev;			break;		}		INIT_WORK(&evt->work, (void (*)(void *))drv->event, evt);		queue_work(drv->event_queue, &evt->work);		return 1;	}	if (unlikely(!drv->reply)) {		osm_debug("%s: Reply to driver %s, but no reply function"			  " defined!\n", c->name, drv->name);		return -EIO;	}	return drv->reply(c, m, msg);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9e87545f06930c1d294423a8091d1077e7444a47/driver.c/clean/drivers/message/i2o/driver.c