Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 227262
b: refs/heads/master
c: 3d6c76f
h: refs/heads/master
v: v3
  • Loading branch information
Jan Glauber authored and Martin Schwidefsky committed Jan 5, 2011
1 parent 5811e5e commit 0bcf3a7
Show file tree
Hide file tree
Showing 7 changed files with 16 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f325184f2d4c1f2258873b2a333005dc4dfcbc0
refs/heads/master: 3d6c76ff32bb9b2ebf6e859855d315eb42e3df50
1 change: 1 addition & 0 deletions trunk/arch/s390/include/asm/qdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ struct qdio_initialize {
qdio_handler_t *input_handler;
qdio_handler_t *output_handler;
void (*queue_start_poll) (struct ccw_device *, int, unsigned long);
int scan_threshold;
unsigned long int_parm;
void **input_sbal_addr_array;
void **output_sbal_addr_array;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/s390/cio/qdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,8 @@ struct qdio_output_q {
int use_enh_siga;
/* timer to check for more outbound work */
struct timer_list timer;
/* used SBALs before tasklet schedule */
int scan_threshold;
};

/*
Expand Down
8 changes: 7 additions & 1 deletion trunk/drivers/s390/cio/qdio_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,13 @@ static int handle_outbound(struct qdio_q *q, unsigned int callflags,
qperf_inc(q, fast_requeue);

out:
tasklet_schedule(&q->tasklet);
/* in case of SIGA errors we must process the error immediately */
if (used >= q->u.out.scan_threshold || rc)
tasklet_schedule(&q->tasklet);
else
/* free the SBALs in case of no further traffic */
if (!timer_pending(&q->u.out.timer))
mod_timer(&q->u.out.timer, jiffies + HZ);
return rc;
}

Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/s390/cio/qdio_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ static void setup_queues(struct qdio_irq *irq_ptr,
setup_queues_misc(q, irq_ptr, qdio_init->output_handler, i);

q->is_input_q = 0;
q->u.out.scan_threshold = qdio_init->scan_threshold;
setup_storage_lists(q, irq_ptr, output_sbal_array, i);
output_sbal_array += QDIO_MAX_BUFFERS_PER_Q;

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/s390/net/qeth_core_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3831,6 +3831,8 @@ static int qeth_qdio_establish(struct qeth_card *card)
init_data.int_parm = (unsigned long) card;
init_data.input_sbal_addr_array = (void **) in_sbal_ptrs;
init_data.output_sbal_addr_array = (void **) out_sbal_ptrs;
init_data.scan_threshold =
(card->info.type == QETH_CARD_TYPE_IQD) ? 8 : 32;

if (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_ALLOCATED,
QETH_QDIO_ESTABLISHED) == QETH_QDIO_ALLOCATED) {
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/s390/scsi/zfcp_qdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,8 @@ static void zfcp_qdio_setup_init_data(struct qdio_initialize *id,
id->int_parm = (unsigned long) qdio;
id->input_sbal_addr_array = (void **) (qdio->res_q);
id->output_sbal_addr_array = (void **) (qdio->req_q);
id->scan_threshold =
QDIO_MAX_BUFFERS_PER_Q - ZFCP_QDIO_MAX_SBALS_PER_REQ * 2;
}

/**
Expand Down

0 comments on commit 0bcf3a7

Please sign in to comment.