Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 110818
b: refs/heads/master
c: 7a0f475
h: refs/heads/master
v: v3
  • Loading branch information
Klaus-Dieter Wacker authored and Martin Schwidefsky committed Oct 10, 2008
1 parent fac72ec commit f942ccf
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 7 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: b1e766137fe2462fd110e2930f74ef5636adb436
refs/heads/master: 7a0f475513fa573bc8e072021960313da32f0ee3
8 changes: 7 additions & 1 deletion trunk/arch/s390/include/asm/qdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,13 @@ struct qdio_ssqd_desc {
u8 mbccnt;
u16 qdioac2;
u64 sch_token;
u64:64;
u8 mro;
u8 mri;
u8:8;
u8 sbalic;
u16:16;
u8:8;
u8 mmwc;
} __attribute__ ((packed));

/* params are: ccw_device, qdio_error, queue_number,
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/s390/cio/qdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ struct qdio_output_q {
/* PCIs are enabled for the queue */
int pci_out_enabled;

/* IQDIO: output multiple buffers (enhanced SIGA) */
int use_enh_siga;

/* timer to check for more outbound work */
struct timer_list timer;
};
Expand Down
24 changes: 19 additions & 5 deletions trunk/drivers/s390/cio/qdio_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,9 @@ static inline int qdio_do_siga_output(struct qdio_q *q, unsigned int *busy_bit)
unsigned int fc = 0;
unsigned long schid;

if (q->u.out.use_enh_siga) {
fc = 3;
}
if (!is_qebsm(q))
schid = *((u32 *)&q->irq_ptr->schid);
else {
Expand Down Expand Up @@ -1449,6 +1452,8 @@ int qdio_establish(struct qdio_initialize *init_data)
}

qdio_setup_ssqd_info(irq_ptr);
sprintf(dbf_text, "qDmmwc%2x", irq_ptr->ssqd_desc.mmwc);
QDIO_DBF_TEXT2(0, setup, dbf_text);
sprintf(dbf_text, "qib ac%2x", irq_ptr->qib.ac);
QDIO_DBF_TEXT2(0, setup, dbf_text);

Expand Down Expand Up @@ -1621,12 +1626,21 @@ static void handle_outbound(struct qdio_q *q, unsigned int callflags,
if (multicast_outbound(q))
qdio_kick_outbound_q(q);
else
/*
* One siga-w per buffer required for unicast
* HiperSockets.
*/
while (count--)
if ((q->irq_ptr->ssqd_desc.mmwc > 1) &&
(count > 1) &&
(count <= q->irq_ptr->ssqd_desc.mmwc)) {
/* exploit enhanced SIGA */
q->u.out.use_enh_siga = 1;
qdio_kick_outbound_q(q);
} else {
/*
* One siga-w per buffer required for unicast
* HiperSockets.
*/
q->u.out.use_enh_siga = 0;
while (count--)
qdio_kick_outbound_q(q);
}
goto out;
}

Expand Down

0 comments on commit f942ccf

Please sign in to comment.