diff options
author | Frank Blaschka <frank.blaschka@de.ibm.com> | 2007-10-05 10:45:45 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:54:40 -0400 |
commit | 6570ebc4f57ad0761104f769576ae5652d9b8d64 (patch) | |
tree | 47c933e7ac978754504a26cd82204fc5b31c8e96 | |
parent | bc4b2b497aa61c79e3f3444237a4003a254ea565 (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.c | 16 | ||||
-rw-r--r-- | drivers/s390/net/qeth_main.c | 3 |
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 | } |