ivshmem: fix overlap detection

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>
This commit is contained in:
Anatoly Burakov 2016-05-24 13:50:05 +01:00 committed by Thomas Monjalon
parent f2027fb2c1
commit a2113ebba5

View 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;