Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ioat3: fix uninitialized var warnings

drivers/dma/ioat/dma_v3.c: In function 'ioat3_prep_memset_lock':
drivers/dma/ioat/dma_v3.c:439: warning: 'fill' may be used uninitialized in this function
drivers/dma/ioat/dma_v3.c:437: warning: 'desc' may be used uninitialized in this function
drivers/dma/ioat/dma_v3.c: In function '__ioat3_prep_xor_lock':
drivers/dma/ioat/dma_v3.c:489: warning: 'xor' may be used uninitialized in this function
drivers/dma/ioat/dma_v3.c:486: warning: 'desc' may be used uninitialized in this function
drivers/dma/ioat/dma_v3.c: In function '__ioat3_prep_pq_lock':
drivers/dma/ioat/dma_v3.c:631: warning: 'pq' may be used uninitialized in this function
drivers/dma/ioat/dma_v3.c:628: warning: 'desc' may be used uninitialized in this function

gcc-4.0, unlike gcc-4.3, does not see that these variables are
initialized before use. Convert the descriptor loops to do-while make
this initialization apparent.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>

+9 -6
+9 -6
drivers/dma/ioat/dma_v3.c
··· 448 448 /* pass */; 449 449 else 450 450 return NULL; 451 - for (i = 0; i < num_descs; i++) { 451 + i = 0; 452 + do { 452 453 size_t xfer_size = min_t(size_t, len, 1 << ioat->xfercap_log); 453 454 454 455 desc = ioat2_get_ring_ent(ioat, idx + i); ··· 464 463 len -= xfer_size; 465 464 dest += xfer_size; 466 465 dump_desc_dbg(ioat, desc); 467 - } 466 + } while (++i < num_descs); 468 467 469 468 desc->txd.flags = flags; 470 469 desc->len = total_len; ··· 519 518 /* pass */; 520 519 else 521 520 return NULL; 522 - for (i = 0; i < num_descs; i += 1 + with_ext) { 521 + i = 0; 522 + do { 523 523 struct ioat_raw_descriptor *descs[2]; 524 524 size_t xfer_size = min_t(size_t, len, 1 << ioat->xfercap_log); 525 525 int s; ··· 548 546 len -= xfer_size; 549 547 offset += xfer_size; 550 548 dump_desc_dbg(ioat, desc); 551 - } 549 + } while ((i += 1 + with_ext) < num_descs); 552 550 553 551 /* last xor descriptor carries the unmap parameters and fence bit */ 554 552 desc->txd.flags = flags; ··· 666 664 /* pass */; 667 665 else 668 666 return NULL; 669 - for (i = 0; i < num_descs; i += 1 + with_ext) { 667 + i = 0; 668 + do { 670 669 struct ioat_raw_descriptor *descs[2]; 671 670 size_t xfer_size = min_t(size_t, len, 1 << ioat->xfercap_log); 672 671 ··· 706 703 707 704 len -= xfer_size; 708 705 offset += xfer_size; 709 - } 706 + } while ((i += 1 + with_ext) < num_descs); 710 707 711 708 /* last pq descriptor carries the unmap parameters and fence bit */ 712 709 desc->txd.flags = flags;