[dpdk-dev] ivshmem: fix overlap detection code
Commit Message
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).
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/librte_eal/linuxapp/eal/eal_ivshmem.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
Comments
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov
> Sent: Tuesday, May 24, 2016 1:50 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] ivshmem: fix overlap detection code
>
> 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).
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
> lib/librte_eal/linuxapp/eal/eal_ivshmem.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
> b/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
> index 07aec69..eea0314 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
> @@ -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;
> --
> 2.5.5
Apologies, forgot to add:
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
Fixes: d6cf31419e51 ("ivshmem: avoid infinite loop when concatenating segments")
Thanks,
Anatoly
On 5/24/2016 1:52 PM, Burakov, Anatoly wrote:
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov
>> Sent: Tuesday, May 24, 2016 1:50 PM
>> To: dev@dpdk.org
>> Subject: [dpdk-dev] [PATCH] ivshmem: fix overlap detection code
>>
>> 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).
>>
>> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
>
> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Fixes: d6cf31419e51 ("ivshmem: avoid infinite loop when concatenating segments")
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
2016-05-24 19:31, Ferruh Yigit:
> On 5/24/2016 1:52 PM, Burakov, Anatoly wrote:
> >> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov
> >> Sent: Tuesday, May 24, 2016 1:50 PM
> >> To: dev@dpdk.org
> >> Subject: [dpdk-dev] [PATCH] ivshmem: fix overlap detection code
> >>
> >> 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).
> >>
> >> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
>
> > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > Fixes: d6cf31419e51 ("ivshmem: avoid infinite loop when concatenating segments")
>
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Applied, thanks
@@ -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;