On 21-Nov-19 1:15 PM, Burakov, Anatoly wrote:
On 21-Nov-19 12:55 PM, Xueming(Steven) Li wrote:
Hi Anatoly,
-----Original Message-----
From: Burakov, Anatoly <anatoly.bura...@intel.com>
Sent: Thursday, November 21, 2019 8:30 PM
To: David Marchand <david.march...@redhat.com>; Xueming(Steven) Li
<xuemi...@mellanox.com>
Cc: Asaf Penso <as...@mellanox.com>; dev <dev@dpdk.org>; dpdk stable
<sta...@dpdk.org>
Subject: Re: [dpdk-stable] [PATCH 2/2] malloc: fix realloc padded
element size
On 20-Nov-19 1:25 PM, David Marchand wrote:
On Wed, Nov 20, 2019 at 3:12 AM Xueming(Steven) Li
<xuemi...@mellanox.com> wrote:
-----Original Message-----
From: David Marchand <david.march...@redhat.com>
Sent: Wednesday, November 20, 2019 4:47 AM
To: Xueming(Steven) Li <xuemi...@mellanox.com>; Anatoly Burakov
<anatoly.bura...@intel.com>
Cc: Asaf Penso <as...@mellanox.com>; dev <dev@dpdk.org>; dpdk stable
<sta...@dpdk.org>
Subject: Re: [dpdk-stable] [PATCH 2/2] malloc: fix realloc padded
element size
On Tue, Nov 12, 2019 at 3:50 PM Xueming Li <xuemi...@mellanox.com>
wrote:
When resize a memory with next element, the original element size
grows.
If the orginal element has padding, the real inner element size
didn't grow as well and this causes trailer verification failure
when malloc debug enabled.
I did not see this when running the malloc_autotest with debug
enabled.
What is missing for me to catch it?
Yes, it happens rarely, depends on memory fragment. I only caught
this in
middle of a long test.
Just a bit chilly to apply this series.
The first patch seems an optimisation.
The second one seems more interesting if we fix the debug mode, but
I suppose we can live without them in 19.11.
Few people enable memory debug option, they are there for years.
Had a discussion offlist with Anatoly.
Those two issues are hard to catch but the fixes are relevant and
Anatoly is confident.
I will take this in rc3.
Series applied, thanks.
To test them, i had to modify malloc to always create padded elements :)
I fix another issue in element join, as I made some local enhancement
patch on memory, it's required, not sure whether it help on public code.
diff --git a/lib/librte_eal/common/malloc_elem.c
b/lib/librte_eal/common/malloc_elem.c
index afacb1813c..c3fa0d1039 100644
--- a/lib/librte_eal/common/malloc_elem.c
+++ b/lib/librte_eal/common/malloc_elem.c
@@ -487,6 +487,10 @@ join_elem(struct malloc_elem *elem1, struct
malloc_elem *elem2)
else
elem1->heap->last = elem1;
elem1->next = next;
+ if (elem1->pad) {
+ struct malloc_elem *inner = RTE_PTR_ADD(elem1,
elem1->pad);
+ inner->size += elem2->size;
+ }
}
This looks like a good change as well - while we /mostly/ join elements
when they're free, there is one case where we can join a free element
with one already occupied - and /that/ element could be padded, which we
currently don't update. So, this patch would help the public code as well.
(that said, the += should be replaced with explicit calculation of
correct size, as this joining may be run multiple times, and we don't
want incorrect size accumulating...)
--
Thanks,
Anatoly
--
Thanks,
Anatoly