return_fault: 
return_fault: 
static int i2o_cfg_swul(unsigned long arg){	struct i2o_sw_xfer kxfer;	struct i2o_sw_xfer __user *pxfer = (struct i2o_sw_xfer __user *)arg;	unsigned char maxfrag = 0, curfrag = 1;	struct i2o_dma buffer;	struct i2o_message __iomem *msg;	u32 m;	unsigned int status = 0, swlen = 0, fragsize = 8192;	struct i2o_controller *c;	int ret = 0;	if (copy_from_user(&kxfer, pxfer, sizeof(struct i2o_sw_xfer)))		goto return_fault;	if (get_user(swlen, kxfer.swlen) < 0)		goto return_fault;	if (get_user(maxfrag, kxfer.maxfrag) < 0)		goto return_fault;	if (get_user(curfrag, kxfer.curfrag) < 0)		goto return_fault;	if (curfrag == maxfrag)		fragsize = swlen - (maxfrag - 1) * 8192;	if (!kxfer.buf)		goto return_fault;	c = i2o_find_iop(kxfer.iop);	if (!c)		return -ENXIO;	m = i2o_msg_get_wait(c, &msg, I2O_TIMEOUT_MESSAGE_GET);	if (m == I2O_QUEUE_EMPTY)		return -EBUSY;	if (i2o_dma_alloc(&c->pdev->dev, &buffer, fragsize, GFP_KERNEL)) {		i2o_msg_nop(c, m);		return -ENOMEM;	}	writel(NINE_WORD_MSG_SIZE | SGL_OFFSET_7, &msg->u.head[0]);	writel(I2O_CMD_SW_UPLOAD << 24 | HOST_TID << 12 | ADAPTER_TID,	       &msg->u.head[1]);	writel(i2o_config_driver.context, &msg->u.head[2]);	writel(0, &msg->u.head[3]);	writel((u32) kxfer.flags << 24 | (u32) kxfer.	       sw_type << 16 | (u32) maxfrag << 8 | (u32) curfrag,	       &msg->body[0]);	writel(swlen, &msg->body[1]);	writel(kxfer.sw_id, &msg->body[2]);	writel(0xD0000000 | fragsize, &msg->body[3]);	writel(buffer.phys, &msg->body[4]);	osm_debug("swul frag %d/%d (size %d)\n", curfrag, maxfrag, fragsize);	status = i2o_msg_post_wait_mem(c, m, 60, &buffer);	if (status != I2O_POST_WAIT_OK) {		if (status != -ETIMEDOUT)			i2o_dma_free(&c->pdev->dev, &buffer);		osm_info("swul failed, DetailedStatus = %d\n", status);		return status;	}	if (copy_to_user(kxfer.buf, buffer.virt, fragsize))		ret = -EFAULT;	i2o_dma_free(&c->pdev->dev, &buffer);return_ret:	return ret;return_fault:	ret = -EFAULT;	goto return_ret;};
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f33213ecf49c98da4e85121b592c3bea8057c2e6/i2o_config.c/clean/drivers/message/i2o/i2o_config.c