if (likely(context < i2o_max_drivers)) { spin_lock(&i2o_drivers_lock); drv = i2o_drivers[context]; spin_unlock(&i2o_drivers_lock); 
if (unlikely(context >= i2o_max_drivers)) { printk(KERN_WARNING "%s: Spurious reply to unknown driver " "%d\n", c->name, readl(&msg->u.s.icntxt)); return -EIO; } 
int i2o_driver_dispatch(struct i2o_controller *c, u32 m,			struct i2o_message __iomem *msg){	struct i2o_driver *drv;	u32 context = readl(&msg->u.s.icntxt);	if (likely(context < i2o_max_drivers)) {		spin_lock(&i2o_drivers_lock);		drv = i2o_drivers[context];		spin_unlock(&i2o_drivers_lock);		if (unlikely(!drv)) {			printk(KERN_WARNING "%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;			tid = readl(&msg->u.head[1]) & 0x1fff;			pr_debug("%s: event received from device %d\n", c->name,				 tid);			/* 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);			if (!evt)				return -ENOMEM;			memset(evt, 0, size * 4 + sizeof(*evt));			evt->size = size;			memcpy_fromio(&evt->tcntxt, &msg->u.s.tcntxt,				      (size + 2) * 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 (likely(drv->reply))			return drv->reply(c, m, msg);		else			pr_debug("%s: Reply to driver %s, but no reply function"				 " defined!\n", c->name, drv->name);		return -EIO;	} else		printk(KERN_WARNING "%s: Spurious reply to unknown driver "		       "%d\n", c->name, readl(&msg->u.s.icntxt));	return -EIO;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/61fbfa8129c1771061a0e9f47747854293081c5b/driver.c/buggy/drivers/message/i2o/driver.c