Merge remote branch 'origin' into secretlab/next-devicetree
Merging in current state of Linus' tree to deal with merge conflicts and build failures in vio.c after merge. Conflicts: drivers/i2c/busses/i2c-cpm.c drivers/i2c/busses/i2c-mpc.c drivers/net/gianfar.c Also fixed up one line in arch/powerpc/kernel/vio.c to use the correct node pointer. Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
@@ -2245,7 +2245,7 @@ static int ibmvfc_wait_for_ops(struct ibmvfc_host *vhost, void *device,
|
||||
DECLARE_COMPLETION_ONSTACK(comp);
|
||||
int wait;
|
||||
unsigned long flags;
|
||||
signed long timeout = init_timeout * HZ;
|
||||
signed long timeout = IBMVFC_ABORT_WAIT_TIMEOUT * HZ;
|
||||
|
||||
ENTER;
|
||||
do {
|
||||
@@ -2919,6 +2919,7 @@ static DEVICE_ATTR(log_level, S_IRUGO | S_IWUSR,
|
||||
#ifdef CONFIG_SCSI_IBMVFC_TRACE
|
||||
/**
|
||||
* ibmvfc_read_trace - Dump the adapter trace
|
||||
* @filp: open sysfs file
|
||||
* @kobj: kobject struct
|
||||
* @bin_attr: bin_attribute struct
|
||||
* @buf: buffer
|
||||
@@ -2928,7 +2929,7 @@ static DEVICE_ATTR(log_level, S_IRUGO | S_IWUSR,
|
||||
* Return value:
|
||||
* number of bytes printed to buffer
|
||||
**/
|
||||
static ssize_t ibmvfc_read_trace(struct kobject *kobj,
|
||||
static ssize_t ibmvfc_read_trace(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *bin_attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
@@ -3013,6 +3014,7 @@ static struct ibmvfc_async_crq *ibmvfc_next_async_crq(struct ibmvfc_host *vhost)
|
||||
if (crq->valid & 0x80) {
|
||||
if (++async_crq->cur == async_crq->size)
|
||||
async_crq->cur = 0;
|
||||
rmb();
|
||||
} else
|
||||
crq = NULL;
|
||||
|
||||
@@ -3035,6 +3037,7 @@ static struct ibmvfc_crq *ibmvfc_next_crq(struct ibmvfc_host *vhost)
|
||||
if (crq->valid & 0x80) {
|
||||
if (++queue->cur == queue->size)
|
||||
queue->cur = 0;
|
||||
rmb();
|
||||
} else
|
||||
crq = NULL;
|
||||
|
||||
@@ -3083,12 +3086,14 @@ static void ibmvfc_tasklet(void *data)
|
||||
while ((async = ibmvfc_next_async_crq(vhost)) != NULL) {
|
||||
ibmvfc_handle_async(async, vhost);
|
||||
async->valid = 0;
|
||||
wmb();
|
||||
}
|
||||
|
||||
/* Pull all the valid messages off the CRQ */
|
||||
while ((crq = ibmvfc_next_crq(vhost)) != NULL) {
|
||||
ibmvfc_handle_crq(crq, vhost);
|
||||
crq->valid = 0;
|
||||
wmb();
|
||||
}
|
||||
|
||||
vio_enable_interrupts(vdev);
|
||||
@@ -3096,10 +3101,12 @@ static void ibmvfc_tasklet(void *data)
|
||||
vio_disable_interrupts(vdev);
|
||||
ibmvfc_handle_async(async, vhost);
|
||||
async->valid = 0;
|
||||
wmb();
|
||||
} else if ((crq = ibmvfc_next_crq(vhost)) != NULL) {
|
||||
vio_disable_interrupts(vdev);
|
||||
ibmvfc_handle_crq(crq, vhost);
|
||||
crq->valid = 0;
|
||||
wmb();
|
||||
} else
|
||||
done = 1;
|
||||
}
|
||||
|
@@ -38,6 +38,7 @@
|
||||
#define IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT \
|
||||
(IBMVFC_ADISC_TIMEOUT + IBMVFC_ADISC_CANCEL_TIMEOUT)
|
||||
#define IBMVFC_INIT_TIMEOUT 120
|
||||
#define IBMVFC_ABORT_WAIT_TIMEOUT 40
|
||||
#define IBMVFC_MAX_REQUESTS_DEFAULT 100
|
||||
|
||||
#define IBMVFC_DEBUG 0
|
||||
|
@@ -323,16 +323,6 @@ static void set_srp_direction(struct scsi_cmnd *cmd,
|
||||
srp_cmd->buf_fmt = fmt;
|
||||
}
|
||||
|
||||
static void unmap_sg_list(int num_entries,
|
||||
struct device *dev,
|
||||
struct srp_direct_buf *md)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_entries; ++i)
|
||||
dma_unmap_single(dev, md[i].va, md[i].len, DMA_BIDIRECTIONAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* unmap_cmd_data: - Unmap data pointed in srp_cmd based on the format
|
||||
* @cmd: srp_cmd whose additional_data member will be unmapped
|
||||
@@ -350,24 +340,9 @@ static void unmap_cmd_data(struct srp_cmd *cmd,
|
||||
|
||||
if (out_fmt == SRP_NO_DATA_DESC && in_fmt == SRP_NO_DATA_DESC)
|
||||
return;
|
||||
else if (out_fmt == SRP_DATA_DESC_DIRECT ||
|
||||
in_fmt == SRP_DATA_DESC_DIRECT) {
|
||||
struct srp_direct_buf *data =
|
||||
(struct srp_direct_buf *) cmd->add_data;
|
||||
dma_unmap_single(dev, data->va, data->len, DMA_BIDIRECTIONAL);
|
||||
} else {
|
||||
struct srp_indirect_buf *indirect =
|
||||
(struct srp_indirect_buf *) cmd->add_data;
|
||||
int num_mapped = indirect->table_desc.len /
|
||||
sizeof(struct srp_direct_buf);
|
||||
|
||||
if (num_mapped <= MAX_INDIRECT_BUFS) {
|
||||
unmap_sg_list(num_mapped, dev, &indirect->desc_list[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
unmap_sg_list(num_mapped, dev, evt_struct->ext_list);
|
||||
}
|
||||
if (evt_struct->cmnd)
|
||||
scsi_dma_unmap(evt_struct->cmnd);
|
||||
}
|
||||
|
||||
static int map_sg_list(struct scsi_cmnd *cmd, int nseg,
|
||||
|
Reference in New Issue
Block a user