OSDN Git Service

MIPS: dma-noncoherent: Remove bogus condition in dma_sync_phys()
authorPaul Burton <paul.burton@mips.com>
Fri, 15 Feb 2019 22:03:04 +0000 (22:03 +0000)
committerPaul Burton <paul.burton@mips.com>
Tue, 19 Feb 2019 20:17:43 +0000 (12:17 -0800)
Commit e36863a550da ("MIPS: HIGHMEM DMA on noncoherent MIPS32
processors") introduced code which:

  1) Calculates an offset within a page, by ANDing an address
     with ~PAGE_MASK.

  2) Checks whether that offset is >= PAGE_SIZE.

This check can never evaluate true, making the code it guards
unreachable. smatch spots bogus arithmetic resulting from the
impossible condition, resulting in the following warning:

  arch/mips/mm/dma-noncoherent.c:125
    dma_sync_phys() warn: mask and shift to zero

Fix this by removing the impossible to satisfy condition & the
unreachable code it guards.

Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: linux-mips@vger.kernel.org
Cc: Christoph Hellwig <hch@lst.de>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Robin Murphy <robin.murphy@arm.com>
arch/mips/mm/dma-noncoherent.c

index f7e0fd6..b574657 100644 (file)
@@ -120,13 +120,8 @@ static inline void dma_sync_phys(phys_addr_t paddr, size_t size,
                if (PageHighMem(page)) {
                        void *addr;
 
-                       if (offset + len > PAGE_SIZE) {
-                               if (offset >= PAGE_SIZE) {
-                                       page += offset >> PAGE_SHIFT;
-                                       offset &= ~PAGE_MASK;
-                               }
+                       if (offset + len > PAGE_SIZE)
                                len = PAGE_SIZE - offset;
-                       }
 
                        addr = kmap_atomic(page);
                        dma_sync_virt(addr + offset, len, dir);