ivshmem: fix overlap detection
authorAnatoly Burakov <anatoly.burakov@intel.com>
Tue, 24 May 2016 12:50:05 +0000 (13:50 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 7 Jun 2016 10:01:40 +0000 (12:01 +0200)
Partial revert of an earlier ill-conceived "fix".
Adjacent segments can never be considered overlapping because we
are not comparing ends to starts, but rather starts to starts.
Therefore the earlier fix was wrong (plus it also had a typo).

Fixes: d6cf31419e51 ("ivshmem: avoid infinite loop when concatenating segments")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
lib/librte_eal/linuxapp/eal/eal_ivshmem.c

index 07aec69..eea0314 100644 (file)
@@ -184,21 +184,21 @@ overlap(const struct rte_memzone * mz1, const struct rte_memzone * mz2)
        i_end2 = mz2->ioremap_addr + mz2->len;
 
        /* check for overlap in virtual addresses */
-       if (start1 > start2 && start1 < end2)
+       if (start1 >= start2 && start1 < end2)
                result |= VIRT;
        if (start2 >= start1 && start2 < end1)
                result |= VIRT;
 
        /* check for overlap in physical addresses */
-       if (p_start1 > p_start2 && p_start1 < p_end2)
+       if (p_start1 >= p_start2 && p_start1 < p_end2)
                result |= PHYS;
-       if (p_start2 > p_start1 && p_start2 < p_end1)
+       if (p_start2 >= p_start1 && p_start2 < p_end1)
                result |= PHYS;
 
        /* check for overlap in ioremap addresses */
-       if (i_start1 > i_start2 && i_start1 < i_end2)
+       if (i_start1 >= i_start2 && i_start1 < i_end2)
                result |= IOREMAP;
-       if (i_start2 > i_start1 && i_start2 < i_end1)
+       if (i_start2 >= i_start1 && i_start2 < i_end1)
                result |= IOREMAP;
 
        return result;