diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/s390/net/qeth_core.h | 4 | ||||
| -rw-r--r-- | drivers/s390/net/qeth_core_main.c | 21 |
2 files changed, 17 insertions, 8 deletions
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h index a2088af51cc5..4f9a3180f663 100644 --- a/drivers/s390/net/qeth_core.h +++ b/drivers/s390/net/qeth_core.h | |||
| @@ -439,10 +439,10 @@ struct qeth_qdio_buffer { | |||
| 439 | }; | 439 | }; |
| 440 | 440 | ||
| 441 | struct qeth_qdio_q { | 441 | struct qeth_qdio_q { |
| 442 | struct qdio_buffer qdio_bufs[QDIO_MAX_BUFFERS_PER_Q]; | 442 | struct qdio_buffer *qdio_bufs[QDIO_MAX_BUFFERS_PER_Q]; |
| 443 | struct qeth_qdio_buffer bufs[QDIO_MAX_BUFFERS_PER_Q]; | 443 | struct qeth_qdio_buffer bufs[QDIO_MAX_BUFFERS_PER_Q]; |
| 444 | int next_buf_to_init; | 444 | int next_buf_to_init; |
| 445 | } __attribute__ ((aligned(256))); | 445 | }; |
| 446 | 446 | ||
| 447 | struct qeth_qdio_out_buffer { | 447 | struct qeth_qdio_out_buffer { |
| 448 | struct qdio_buffer *buffer; | 448 | struct qdio_buffer *buffer; |
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index a0a6ad7a1739..acedba8539e4 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
| @@ -294,6 +294,10 @@ EXPORT_SYMBOL_GPL(qeth_realloc_buffer_pool); | |||
| 294 | 294 | ||
| 295 | static void qeth_free_qdio_queue(struct qeth_qdio_q *q) | 295 | static void qeth_free_qdio_queue(struct qeth_qdio_q *q) |
| 296 | { | 296 | { |
| 297 | if (!q) | ||
| 298 | return; | ||
| 299 | |||
| 300 | qdio_free_buffers(q->qdio_bufs, QDIO_MAX_BUFFERS_PER_Q); | ||
| 297 | kfree(q); | 301 | kfree(q); |
| 298 | } | 302 | } |
| 299 | 303 | ||
| @@ -305,8 +309,13 @@ static struct qeth_qdio_q *qeth_alloc_qdio_queue(void) | |||
| 305 | if (!q) | 309 | if (!q) |
| 306 | return NULL; | 310 | return NULL; |
| 307 | 311 | ||
| 312 | if (qdio_alloc_buffers(q->qdio_bufs, QDIO_MAX_BUFFERS_PER_Q)) { | ||
| 313 | kfree(q); | ||
| 314 | return NULL; | ||
| 315 | } | ||
| 316 | |||
| 308 | for (i = 0; i < QDIO_MAX_BUFFERS_PER_Q; ++i) | 317 | for (i = 0; i < QDIO_MAX_BUFFERS_PER_Q; ++i) |
| 309 | q->bufs[i].buffer = &q->qdio_bufs[i]; | 318 | q->bufs[i].buffer = q->qdio_bufs[i]; |
| 310 | 319 | ||
| 311 | QETH_DBF_HEX(SETUP, 2, &q, sizeof(void *)); | 320 | QETH_DBF_HEX(SETUP, 2, &q, sizeof(void *)); |
| 312 | return q; | 321 | return q; |
| @@ -318,8 +327,8 @@ static inline int qeth_cq_init(struct qeth_card *card) | |||
| 318 | 327 | ||
| 319 | if (card->options.cq == QETH_CQ_ENABLED) { | 328 | if (card->options.cq == QETH_CQ_ENABLED) { |
| 320 | QETH_DBF_TEXT(SETUP, 2, "cqinit"); | 329 | QETH_DBF_TEXT(SETUP, 2, "cqinit"); |
| 321 | memset(card->qdio.c_q->qdio_bufs, 0, | 330 | qdio_reset_buffers(card->qdio.c_q->qdio_bufs, |
| 322 | QDIO_MAX_BUFFERS_PER_Q * sizeof(struct qdio_buffer)); | 331 | QDIO_MAX_BUFFERS_PER_Q); |
| 323 | card->qdio.c_q->next_buf_to_init = 127; | 332 | card->qdio.c_q->next_buf_to_init = 127; |
| 324 | rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, | 333 | rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, |
| 325 | card->qdio.no_in_queues - 1, 0, | 334 | card->qdio.no_in_queues - 1, 0, |
| @@ -2791,8 +2800,8 @@ int qeth_init_qdio_queues(struct qeth_card *card) | |||
| 2791 | QETH_DBF_TEXT(SETUP, 2, "initqdqs"); | 2800 | QETH_DBF_TEXT(SETUP, 2, "initqdqs"); |
| 2792 | 2801 | ||
| 2793 | /* inbound queue */ | 2802 | /* inbound queue */ |
| 2794 | memset(card->qdio.in_q->qdio_bufs, 0, | 2803 | qdio_reset_buffers(card->qdio.in_q->qdio_bufs, |
| 2795 | QDIO_MAX_BUFFERS_PER_Q * sizeof(struct qdio_buffer)); | 2804 | QDIO_MAX_BUFFERS_PER_Q); |
| 2796 | qeth_initialize_working_pool_list(card); | 2805 | qeth_initialize_working_pool_list(card); |
| 2797 | /*give only as many buffers to hardware as we have buffer pool entries*/ | 2806 | /*give only as many buffers to hardware as we have buffer pool entries*/ |
| 2798 | for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i) | 2807 | for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i) |
| @@ -3533,7 +3542,7 @@ static void qeth_qdio_cq_handler(struct qeth_card *card, | |||
| 3533 | 3542 | ||
| 3534 | for (i = first_element; i < first_element + count; ++i) { | 3543 | for (i = first_element; i < first_element + count; ++i) { |
| 3535 | int bidx = i % QDIO_MAX_BUFFERS_PER_Q; | 3544 | int bidx = i % QDIO_MAX_BUFFERS_PER_Q; |
| 3536 | struct qdio_buffer *buffer = &cq->qdio_bufs[bidx]; | 3545 | struct qdio_buffer *buffer = cq->qdio_bufs[bidx]; |
| 3537 | int e; | 3546 | int e; |
| 3538 | 3547 | ||
| 3539 | e = 0; | 3548 | e = 0; |
