s390/qdio: for_each macro correctness

I observed that there are for_each macros that do an extra memory access
beyond the defined area.
Normally this does not cause problems.
But, this can cause exceptions. For example: if the area is allocated at
the end of a page and the next page is not accessible.

For correctness, I suggest changing the arguments of the 'for loop' like
others 'for_each' do in the kernel.

Signed-off-by: Jose Alonso <joalonsof@gmail.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Jose Alonso
2014-01-26 08:54:18 -02:00
committed by Martin Schwidefsky
parent 0e47c969c6
commit dbb0dd021d

View File

@@ -360,13 +360,11 @@ static inline int multicast_outbound(struct qdio_q *q)
(unlikely(q->irq_ptr->siga_flag.sync_out_after_pci)) (unlikely(q->irq_ptr->siga_flag.sync_out_after_pci))
#define for_each_input_queue(irq_ptr, q, i) \ #define for_each_input_queue(irq_ptr, q, i) \
for (i = 0, q = irq_ptr->input_qs[0]; \ for (i = 0; i < irq_ptr->nr_input_qs && \
i < irq_ptr->nr_input_qs; \ ({ q = irq_ptr->input_qs[i]; 1; }); i++)
q = irq_ptr->input_qs[++i])
#define for_each_output_queue(irq_ptr, q, i) \ #define for_each_output_queue(irq_ptr, q, i) \
for (i = 0, q = irq_ptr->output_qs[0]; \ for (i = 0; i < irq_ptr->nr_output_qs && \
i < irq_ptr->nr_output_qs; \ ({ q = irq_ptr->output_qs[i]; 1; }); i++)
q = irq_ptr->output_qs[++i])
#define prev_buf(bufnr) \ #define prev_buf(bufnr) \
((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK) ((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK)