aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Blaschka <frank.blaschka@de.ibm.com>2007-10-05 10:45:45 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:54:40 -0400
commit6570ebc4f57ad0761104f769576ae5652d9b8d64 (patch)
tree47c933e7ac978754504a26cd82204fc5b31c8e96
parentbc4b2b497aa61c79e3f3444237a4003a254ea565 (diff)
qeth: EDDP does not work on large MTUs
Fix filling the qdio buffers in EDDP mode. Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> Signed-off-by: Ursula Braun <braunu@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/s390/net/qeth_eddp.c16
-rw-r--r--drivers/s390/net/qeth_main.c3
2 files changed, 11 insertions, 8 deletions
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c
index 70108fb16906..e3c268cfbffe 100644
--- a/drivers/s390/net/qeth_eddp.c
+++ b/drivers/s390/net/qeth_eddp.c
@@ -159,13 +159,15 @@ qeth_eddp_fill_buffer(struct qeth_qdio_out_q *queue,
159 buffer = buf->buffer; 159 buffer = buf->buffer;
160 /* fill one skb into buffer */ 160 /* fill one skb into buffer */
161 for (i = 0; i < ctx->elements_per_skb; ++i){ 161 for (i = 0; i < ctx->elements_per_skb; ++i){
162 buffer->element[buf->next_element_to_fill].addr = 162 if (ctx->elements[element].length != 0) {
163 ctx->elements[element].addr; 163 buffer->element[buf->next_element_to_fill].
164 buffer->element[buf->next_element_to_fill].length = 164 addr = ctx->elements[element].addr;
165 ctx->elements[element].length; 165 buffer->element[buf->next_element_to_fill].
166 buffer->element[buf->next_element_to_fill].flags = 166 length = ctx->elements[element].length;
167 ctx->elements[element].flags; 167 buffer->element[buf->next_element_to_fill].
168 buf->next_element_to_fill++; 168 flags = ctx->elements[element].flags;
169 buf->next_element_to_fill++;
170 }
169 element++; 171 element++;
170 elements--; 172 elements--;
171 } 173 }
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index b41a53816e92..fe6164795eda 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -4508,7 +4508,8 @@ qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
4508 /* check if we have enough elements (including following 4508 /* check if we have enough elements (including following
4509 * free buffers) to handle eddp context */ 4509 * free buffers) to handle eddp context */
4510 if (qeth_eddp_check_buffers_for_context(queue,ctx) < 0){ 4510 if (qeth_eddp_check_buffers_for_context(queue,ctx) < 0){
4511 printk("eddp tx_dropped 1\n"); 4511 if (net_ratelimit())
4512 PRINT_WARN("eddp tx_dropped 1\n");
4512 rc = -EBUSY; 4513 rc = -EBUSY;
4513 goto out; 4514 goto out;
4514 } 4515 }