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:
Родитель
0e47c969c6
Коммит
dbb0dd021d
|
@ -359,14 +359,12 @@ static inline int multicast_outbound(struct qdio_q *q)
|
|||
#define need_siga_sync_out_after_pci(q) \
|
||||
(unlikely(q->irq_ptr->siga_flag.sync_out_after_pci))
|
||||
|
||||
#define for_each_input_queue(irq_ptr, q, i) \
|
||||
for (i = 0, q = irq_ptr->input_qs[0]; \
|
||||
i < irq_ptr->nr_input_qs; \
|
||||
q = irq_ptr->input_qs[++i])
|
||||
#define for_each_output_queue(irq_ptr, q, i) \
|
||||
for (i = 0, q = irq_ptr->output_qs[0]; \
|
||||
i < irq_ptr->nr_output_qs; \
|
||||
q = irq_ptr->output_qs[++i])
|
||||
#define for_each_input_queue(irq_ptr, q, i) \
|
||||
for (i = 0; i < irq_ptr->nr_input_qs && \
|
||||
({ q = irq_ptr->input_qs[i]; 1; }); i++)
|
||||
#define for_each_output_queue(irq_ptr, q, i) \
|
||||
for (i = 0; i < irq_ptr->nr_output_qs && \
|
||||
({ q = irq_ptr->output_qs[i]; 1; }); i++)
|
||||
|
||||
#define prev_buf(bufnr) \
|
||||
((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK)
|
||||
|
|
Загрузка…
Ссылка в новой задаче