* [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy
@ 2015-09-04 10:14 Ralf Hoffmann
2015-09-08 12:45 ` Gonzalez Monroy, Sergio
0 siblings, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2015-09-04 10:14 UTC (permalink / raw)
To: dev
with only one hugepage or already sorted hugepage addresses, the sort
function called memcpy with same src and dst pointer. Debugging with
valgrind will issue a warning about overlapping area. This patch changes
the bubble sort to avoid this behavior. Also, the function cannot fail
any longer.
Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
---
lib/librte_eal/linuxapp/eal/eal_memory.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index ac2745e..6d01f61 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -699,25 +699,25 @@ error:
* higher address first on powerpc). We use a slow algorithm, but we won't
* have millions of pages, and this is only done at init time.
*/
-static int
+static void
sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
{
unsigned i, j;
- int compare_idx;
+ unsigned compare_idx;
uint64_t compare_addr;
struct hugepage_file tmp;
for (i = 0; i < hpi->num_pages[0]; i++) {
- compare_addr = 0;
- compare_idx = -1;
+ compare_addr = hugepg_tbl[i].physaddr;
+ compare_idx = i;
/*
- * browse all entries starting at 'i', and find the
+ * browse all entries starting at 'i+1', and find the
* entry with the smallest addr
*/
- for (j=i; j< hpi->num_pages[0]; j++) {
+ for (j=i + 1; j < hpi->num_pages[0]; j++) {
- if (compare_addr == 0 ||
+ if (
#ifdef RTE_ARCH_PPC_64
hugepg_tbl[j].physaddr > compare_addr) {
#else
@@ -728,10 +728,9 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
}
}
- /* should not happen */
- if (compare_idx == -1) {
- RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
- return -1;
+ if (compare_idx == i) {
+ /* no smaller page found */
+ continue;
}
/* swap the 2 entries in the table */
@@ -741,7 +740,8 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
sizeof(struct hugepage_file));
memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
}
- return 0;
+
+ return;
}
/*
@@ -1164,8 +1164,7 @@ rte_eal_hugepage_init(void)
goto fail;
}
- if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
- goto fail;
+ sort_by_physaddr(&tmp_hp[hp_offset], hpi);
#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
/* remap all hugepages into single file segments */
--
2.1.4
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy
2015-09-04 10:14 [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy Ralf Hoffmann
@ 2015-09-08 12:45 ` Gonzalez Monroy, Sergio
2015-09-08 13:29 ` Jay Rolette
2015-09-09 8:41 ` [dpdk-dev] [PATCH v1] " Ralf Hoffmann
0 siblings, 2 replies; 17+ messages in thread
From: Gonzalez Monroy, Sergio @ 2015-09-08 12:45 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
Hi Ralf,
Just a few comments/suggestions:
Add 'eal/linux:' to the commit title, ie:
"eal/linux: change hugepage sorting to avoid overlapping memcpy"
On 04/09/2015 11:14, Ralf Hoffmann wrote:
> with only one hugepage or already sorted hugepage addresses, the sort
> function called memcpy with same src and dst pointer. Debugging with
> valgrind will issue a warning about overlapping area. This patch changes
> the bubble sort to avoid this behavior. Also, the function cannot fail
> any longer.
>
> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
> ---
> lib/librte_eal/linuxapp/eal/eal_memory.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
> index ac2745e..6d01f61 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
> @@ -699,25 +699,25 @@ error:
> * higher address first on powerpc). We use a slow algorithm, but we won't
> * have millions of pages, and this is only done at init time.
> */
> -static int
> +static void
> sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
> {
> unsigned i, j;
> - int compare_idx;
> + unsigned compare_idx;
> uint64_t compare_addr;
> struct hugepage_file tmp;
>
> for (i = 0; i < hpi->num_pages[0]; i++) {
> - compare_addr = 0;
> - compare_idx = -1;
> + compare_addr = hugepg_tbl[i].physaddr;
> + compare_idx = i;
>
> /*
> - * browse all entries starting at 'i', and find the
> + * browse all entries starting at 'i+1', and find the
> * entry with the smallest addr
> */
> - for (j=i; j< hpi->num_pages[0]; j++) {
> + for (j=i + 1; j < hpi->num_pages[0]; j++) {
Although there are many style/checkpatch issues in current code, we try
to fix them
in new patches.
In that regard, checkpatch complains about above line with:
ERROR:SPACING: spaces required around that '='
>
> - if (compare_addr == 0 ||
> + if (
> #ifdef RTE_ARCH_PPC_64
> hugepg_tbl[j].physaddr > compare_addr) {
> #else
> @@ -728,10 +728,9 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
> }
> }
>
> - /* should not happen */
> - if (compare_idx == -1) {
> - RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
> - return -1;
> + if (compare_idx == i) {
> + /* no smaller page found */
> + continue;
> }
>
> /* swap the 2 entries in the table */
> @@ -741,7 +740,8 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
> sizeof(struct hugepage_file));
> memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
> }
> - return 0;
> +
> + return;
> }
I reckon checkpatch is not picking this one because the end-of-function
is not part of the patch,
but it is a warning:
WARNING:RETURN_VOID: void function return statements are not generally
useful
>
> /*
> @@ -1164,8 +1164,7 @@ rte_eal_hugepage_init(void)
> goto fail;
> }
>
> - if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
> - goto fail;
> + sort_by_physaddr(&tmp_hp[hp_offset], hpi);
>
> #ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
> /* remap all hugepages into single file segments */
>
>
Thanks,
Sergio
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy
2015-09-08 12:45 ` Gonzalez Monroy, Sergio
@ 2015-09-08 13:29 ` Jay Rolette
2015-09-08 14:24 ` Gonzalez Monroy, Sergio
2015-09-09 8:41 ` [dpdk-dev] [PATCH v1] " Ralf Hoffmann
1 sibling, 1 reply; 17+ messages in thread
From: Jay Rolette @ 2015-09-08 13:29 UTC (permalink / raw)
To: Gonzalez Monroy, Sergio; +Cc: DPDK
Most of the code in sort_by_physaddr() should be replaced by a call to
qsort() instead. Less code and gets rid of an O(n^2) sort. It's only init
code, but given how long EAL init takes, every bit helps.
I submitted a patch for this close to a year ago:
http://dpdk.org/dev/patchwork/patch/2061/
Jay
On Tue, Sep 8, 2015 at 7:45 AM, Gonzalez Monroy, Sergio <
sergio.gonzalez.monroy@intel.com> wrote:
> Hi Ralf,
>
> Just a few comments/suggestions:
>
> Add 'eal/linux:' to the commit title, ie:
> "eal/linux: change hugepage sorting to avoid overlapping memcpy"
>
> On 04/09/2015 11:14, Ralf Hoffmann wrote:
>
>> with only one hugepage or already sorted hugepage addresses, the sort
>> function called memcpy with same src and dst pointer. Debugging with
>> valgrind will issue a warning about overlapping area. This patch changes
>> the bubble sort to avoid this behavior. Also, the function cannot fail
>> any longer.
>>
>> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
>> ---
>> lib/librte_eal/linuxapp/eal/eal_memory.c | 27
>> +++++++++++++--------------
>> 1 file changed, 13 insertions(+), 14 deletions(-)
>>
>> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c
>> b/lib/librte_eal/linuxapp/eal/eal_memory.c
>> index ac2745e..6d01f61 100644
>> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
>> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
>> @@ -699,25 +699,25 @@ error:
>> * higher address first on powerpc). We use a slow algorithm, but we
>> won't
>> * have millions of pages, and this is only done at init time.
>> */
>> -static int
>> +static void
>> sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info
>> *hpi)
>> {
>> unsigned i, j;
>> - int compare_idx;
>> + unsigned compare_idx;
>> uint64_t compare_addr;
>> struct hugepage_file tmp;
>> for (i = 0; i < hpi->num_pages[0]; i++) {
>> - compare_addr = 0;
>> - compare_idx = -1;
>> + compare_addr = hugepg_tbl[i].physaddr;
>> + compare_idx = i;
>> /*
>> - * browse all entries starting at 'i', and find the
>> + * browse all entries starting at 'i+1', and find the
>> * entry with the smallest addr
>> */
>> - for (j=i; j< hpi->num_pages[0]; j++) {
>> + for (j=i + 1; j < hpi->num_pages[0]; j++) {
>>
> Although there are many style/checkpatch issues in current code, we try to
> fix them
> in new patches.
> In that regard, checkpatch complains about above line with:
> ERROR:SPACING: spaces required around that '='
>
> - if (compare_addr == 0 ||
>> + if (
>> #ifdef RTE_ARCH_PPC_64
>> hugepg_tbl[j].physaddr > compare_addr) {
>> #else
>> @@ -728,10 +728,9 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl,
>> struct hugepage_info *hpi)
>> }
>> }
>> - /* should not happen */
>> - if (compare_idx == -1) {
>> - RTE_LOG(ERR, EAL, "%s(): error in physaddr
>> sorting\n", __func__);
>> - return -1;
>> + if (compare_idx == i) {
>> + /* no smaller page found */
>> + continue;
>> }
>> /* swap the 2 entries in the table */
>> @@ -741,7 +740,8 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl,
>> struct hugepage_info *hpi)
>> sizeof(struct hugepage_file));
>> memcpy(&hugepg_tbl[i], &tmp, sizeof(struct
>> hugepage_file));
>> }
>> - return 0;
>> +
>> + return;
>> }
>>
> I reckon checkpatch is not picking this one because the end-of-function is
> not part of the patch,
> but it is a warning:
> WARNING:RETURN_VOID: void function return statements are not generally
> useful
>
> /*
>> @@ -1164,8 +1164,7 @@ rte_eal_hugepage_init(void)
>> goto fail;
>> }
>> - if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
>> - goto fail;
>> + sort_by_physaddr(&tmp_hp[hp_offset], hpi);
>> #ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
>> /* remap all hugepages into single file segments */
>>
>>
>>
> Thanks,
> Sergio
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy
2015-09-08 13:29 ` Jay Rolette
@ 2015-09-08 14:24 ` Gonzalez Monroy, Sergio
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 0/1] " Ralf Hoffmann
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 0/1] eal/linux: " Ralf Hoffmann
0 siblings, 2 replies; 17+ messages in thread
From: Gonzalez Monroy, Sergio @ 2015-09-08 14:24 UTC (permalink / raw)
To: Jay Rolette; +Cc: DPDK
On 08/09/2015 14:29, Jay Rolette wrote:
> Most of the code in sort_by_physaddr() should be replaced by a call to
> qsort() instead. Less code and gets rid of an O(n^2) sort. It's only
> init code, but given how long EAL init takes, every bit helps.
>
Fair enough.
Actually, we already use qsort in
lib/librte_eal/linuxapp/eal/eal_hugeapge_info.c
> I submitted a patch for this close to a year ago:
> http://dpdk.org/dev/patchwork/patch/2061/
>
I just had a quick look at it and seems to be archived with 'Changes
Requested' status.
I will comment on it.
Sergio
> Jay
>
> On Tue, Sep 8, 2015 at 7:45 AM, Gonzalez Monroy, Sergio
> <sergio.gonzalez.monroy@intel.com
> <mailto:sergio.gonzalez.monroy@intel.com>> wrote:
>
> Hi Ralf,
>
> Just a few comments/suggestions:
>
> Add 'eal/linux:' to the commit title, ie:
> "eal/linux: change hugepage sorting to avoid overlapping memcpy"
>
> On 04/09/2015 11:14, Ralf Hoffmann wrote:
>
> with only one hugepage or already sorted hugepage addresses,
> the sort
> function called memcpy with same src and dst pointer.
> Debugging with
> valgrind will issue a warning about overlapping area. This
> patch changes
> the bubble sort to avoid this behavior. Also, the function
> cannot fail
> any longer.
>
> Signed-off-by: Ralf Hoffmann
> <ralf.hoffmann@allegro-packets.com
> <mailto:ralf.hoffmann@allegro-packets.com>>
> ---
> lib/librte_eal/linuxapp/eal/eal_memory.c | 27
> +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c
> b/lib/librte_eal/linuxapp/eal/eal_memory.c
> index ac2745e..6d01f61 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
> @@ -699,25 +699,25 @@ error:
> * higher address first on powerpc). We use a slow
> algorithm, but we won't
> * have millions of pages, and this is only done at init time.
> */
> -static int
> +static void
> sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct
> hugepage_info *hpi)
> {
> unsigned i, j;
> - int compare_idx;
> + unsigned compare_idx;
> uint64_t compare_addr;
> struct hugepage_file tmp;
> for (i = 0; i < hpi->num_pages[0]; i++) {
> - compare_addr = 0;
> - compare_idx = -1;
> + compare_addr = hugepg_tbl[i].physaddr;
> + compare_idx = i;
> /*
> - * browse all entries starting at 'i', and
> find the
> + * browse all entries starting at 'i+1', and
> find the
> * entry with the smallest addr
> */
> - for (j=i; j< hpi->num_pages[0]; j++) {
> + for (j=i + 1; j < hpi->num_pages[0]; j++) {
>
> Although there are many style/checkpatch issues in current code,
> we try to fix them
> in new patches.
> In that regard, checkpatch complains about above line with:
> ERROR:SPACING: spaces required around that '='
>
> - if (compare_addr == 0 ||
> + if (
> #ifdef RTE_ARCH_PPC_64
> hugepg_tbl[j].physaddr >
> compare_addr) {
> #else
> @@ -728,10 +728,9 @@ sort_by_physaddr(struct hugepage_file
> *hugepg_tbl, struct hugepage_info *hpi)
> }
> }
> - /* should not happen */
> - if (compare_idx == -1) {
> - RTE_LOG(ERR, EAL, "%s(): error in
> physaddr sorting\n", __func__);
> - return -1;
> + if (compare_idx == i) {
> + /* no smaller page found */
> + continue;
> }
> /* swap the 2 entries in the table */
> @@ -741,7 +740,8 @@ sort_by_physaddr(struct hugepage_file
> *hugepg_tbl, struct hugepage_info *hpi)
> sizeof(struct hugepage_file));
> memcpy(&hugepg_tbl[i], &tmp, sizeof(struct
> hugepage_file));
> }
> - return 0;
> +
> + return;
> }
>
> I reckon checkpatch is not picking this one because the
> end-of-function is not part of the patch,
> but it is a warning:
> WARNING:RETURN_VOID: void function return statements are not
> generally useful
>
> /*
> @@ -1164,8 +1164,7 @@ rte_eal_hugepage_init(void)
> goto fail;
> }
> - if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
> - goto fail;
> + sort_by_physaddr(&tmp_hp[hp_offset], hpi);
> #ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
> /* remap all hugepages into single file
> segments */
>
>
>
> Thanks,
> Sergio
>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy
2015-09-08 12:45 ` Gonzalez Monroy, Sergio
2015-09-08 13:29 ` Jay Rolette
@ 2015-09-09 8:41 ` Ralf Hoffmann
1 sibling, 0 replies; 17+ messages in thread
From: Ralf Hoffmann @ 2015-09-09 8:41 UTC (permalink / raw)
To: Gonzalez Monroy, Sergio; +Cc: dev
Hi Sergio,
On 08.09.2015 14:45, Gonzalez Monroy, Sergio wrote:
> Just a few comments/suggestions:
>
> Add 'eal/linux:' to the commit title, ie:
> "eal/linux: change hugepage sorting to avoid overlapping memcpy"
>
I would modify the patch according to your notes if needed, but if you
consider the other patch from Jay, then I would vote for that instead.
Actually, I thought about using qsort too, but decided against it to
keep the number of changes low and the sorting speed is not a problem
for me. Changing the return value of that function to void might still
be a good idea.
Best Regards,
Ralf
--
Ralf Hoffmann
Allegro Packets GmbH
Käthe-Kollwitz-Str. 54
04109 Leipzig
HRB 30535, Amtsgericht Leipzig
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v2 0/1] change hugepage sorting to avoid overlapping memcpy
2015-09-08 14:24 ` Gonzalez Monroy, Sergio
@ 2016-01-05 9:25 ` Ralf Hoffmann
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 1/1] " Ralf Hoffmann
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 0/1] eal/linux: " Ralf Hoffmann
1 sibling, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-05 9:25 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
Hi,
I want to catch up with the patch about the overlapping memory
areas/hugepage sorting. I have incorporated the qsort patch from Jay
and made the suggested changes. So this fixes both the valgrind
warning about the overlapping memcpy and possible performance problems
due to the bubblesort.
Best Regards,
Ralf
---
Ralf Hoffmann (1):
change hugepage sorting to avoid overlapping memcpy
lib/librte_eal/linuxapp/eal/eal_memory.c | 60 ++++++++------------------------
1 file changed, 14 insertions(+), 46 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v2 1/1] change hugepage sorting to avoid overlapping memcpy
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 0/1] " Ralf Hoffmann
@ 2016-01-05 9:25 ` Ralf Hoffmann
0 siblings, 0 replies; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-05 9:25 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
with only one hugepage or already sorted hugepage addresses, the sort
function called memcpy with same src and dst pointer. Debugging with
valgrind will issue a warning about overlapping area. This patch
changes the sort method to qsort to avoid this behavior, according to
original patch from Jay Rolette <rolette@infiniteio.com>. The separate
sort function is no longer necessary.
Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
---
v2:
* incorporate patch from http://dpdk.org/dev/patchwork/patch/2061/
to use qsort instead of bubble sort,
original patch by Jay Rolette <rolette@infiniteio.com>
lib/librte_eal/linuxapp/eal/eal_memory.c | 60 ++++++++------------------------
1 file changed, 14 insertions(+), 46 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index 846fd31..a96d10a 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -701,54 +701,23 @@ error:
return -1;
}
-/*
- * Sort the hugepg_tbl by physical address (lower addresses first on x86,
- * higher address first on powerpc). We use a slow algorithm, but we won't
- * have millions of pages, and this is only done at init time.
- */
static int
-sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
+cmp_physaddr(const void *a, const void *b)
{
- unsigned i, j;
- int compare_idx;
- uint64_t compare_addr;
- struct hugepage_file tmp;
-
- for (i = 0; i < hpi->num_pages[0]; i++) {
- compare_addr = 0;
- compare_idx = -1;
-
- /*
- * browse all entries starting at 'i', and find the
- * entry with the smallest addr
- */
- for (j=i; j< hpi->num_pages[0]; j++) {
-
- if (compare_addr == 0 ||
-#ifdef RTE_ARCH_PPC_64
- hugepg_tbl[j].physaddr > compare_addr) {
+#ifndef RTE_ARCH_PPC_64
+ const struct hugepage_file *p1 = (const struct hugepage_file *)a;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)b;
#else
- hugepg_tbl[j].physaddr < compare_addr) {
+ /* PowerPC needs memory sorted in reverse order from x86 */
+ const struct hugepage_file *p1 = (const struct hugepage_file *)b;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)a;
#endif
- compare_addr = hugepg_tbl[j].physaddr;
- compare_idx = j;
- }
- }
-
- /* should not happen */
- if (compare_idx == -1) {
- RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
- return -1;
- }
-
- /* swap the 2 entries in the table */
- memcpy(&tmp, &hugepg_tbl[compare_idx],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[compare_idx], &hugepg_tbl[i],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
- }
- return 0;
+ if (p1->physaddr < p2->physaddr)
+ return -1;
+ else if (p1->physaddr > p2->physaddr)
+ return 1;
+ else
+ return 0;
}
/*
@@ -1195,8 +1164,7 @@ rte_eal_hugepage_init(void)
goto fail;
}
- if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
- goto fail;
+ qsort(&tmp_hp[hp_offset], hpi->num_pages[0], sizeof(struct hugepage_file), cmp_physaddr);
#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
/* remap all hugepages into single file segments */
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v3 0/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2015-09-08 14:24 ` Gonzalez Monroy, Sergio
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 0/1] " Ralf Hoffmann
@ 2016-01-05 9:37 ` Ralf Hoffmann
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 1/1] " Ralf Hoffmann
1 sibling, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-05 9:37 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
Hi again,
I forgot to correctly set the commit title, so this is v3.
Best Regards,
Ralf
---
Ralf Hoffmann (1):
change hugepage sorting to avoid overlapping memcpy
lib/librte_eal/linuxapp/eal/eal_memory.c | 60 ++++++++------------------------
1 file changed, 14 insertions(+), 46 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v3 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 0/1] eal/linux: " Ralf Hoffmann
@ 2016-01-05 9:37 ` Ralf Hoffmann
2016-01-07 9:33 ` Sergio Gonzalez Monroy
0 siblings, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-05 9:37 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
with only one hugepage or already sorted hugepage addresses, the sort
function called memcpy with same src and dst pointer. Debugging with
valgrind will issue a warning about overlapping area. This patch
changes the sort method to qsort to avoid this behavior, according to
original patch from Jay Rolette <rolette@infiniteio.com>. The separate
sort function is no longer necessary.
Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
---
v3:
* set commit title to eal/linux
v2:
* incorporate patch from http://dpdk.org/dev/patchwork/patch/2061/
to use qsort instead of bubble sort,
original patch by Jay Rolette <rolette@infiniteio.com>
lib/librte_eal/linuxapp/eal/eal_memory.c | 60 ++++++++------------------------
1 file changed, 14 insertions(+), 46 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index 846fd31..a96d10a 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -701,54 +701,23 @@ error:
return -1;
}
-/*
- * Sort the hugepg_tbl by physical address (lower addresses first on x86,
- * higher address first on powerpc). We use a slow algorithm, but we won't
- * have millions of pages, and this is only done at init time.
- */
static int
-sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
+cmp_physaddr(const void *a, const void *b)
{
- unsigned i, j;
- int compare_idx;
- uint64_t compare_addr;
- struct hugepage_file tmp;
-
- for (i = 0; i < hpi->num_pages[0]; i++) {
- compare_addr = 0;
- compare_idx = -1;
-
- /*
- * browse all entries starting at 'i', and find the
- * entry with the smallest addr
- */
- for (j=i; j< hpi->num_pages[0]; j++) {
-
- if (compare_addr == 0 ||
-#ifdef RTE_ARCH_PPC_64
- hugepg_tbl[j].physaddr > compare_addr) {
+#ifndef RTE_ARCH_PPC_64
+ const struct hugepage_file *p1 = (const struct hugepage_file *)a;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)b;
#else
- hugepg_tbl[j].physaddr < compare_addr) {
+ /* PowerPC needs memory sorted in reverse order from x86 */
+ const struct hugepage_file *p1 = (const struct hugepage_file *)b;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)a;
#endif
- compare_addr = hugepg_tbl[j].physaddr;
- compare_idx = j;
- }
- }
-
- /* should not happen */
- if (compare_idx == -1) {
- RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
- return -1;
- }
-
- /* swap the 2 entries in the table */
- memcpy(&tmp, &hugepg_tbl[compare_idx],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[compare_idx], &hugepg_tbl[i],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
- }
- return 0;
+ if (p1->physaddr < p2->physaddr)
+ return -1;
+ else if (p1->physaddr > p2->physaddr)
+ return 1;
+ else
+ return 0;
}
/*
@@ -1195,8 +1164,7 @@ rte_eal_hugepage_init(void)
goto fail;
}
- if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
- goto fail;
+ qsort(&tmp_hp[hp_offset], hpi->num_pages[0], sizeof(struct hugepage_file), cmp_physaddr);
#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
/* remap all hugepages into single file segments */
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 1/1] " Ralf Hoffmann
@ 2016-01-07 9:33 ` Sergio Gonzalez Monroy
2016-01-07 9:51 ` Sergio Gonzalez Monroy
0 siblings, 1 reply; 17+ messages in thread
From: Sergio Gonzalez Monroy @ 2016-01-07 9:33 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
On 05/01/2016 09:37, Ralf Hoffmann wrote:
> with only one hugepage or already sorted hugepage addresses, the sort
> function called memcpy with same src and dst pointer. Debugging with
> valgrind will issue a warning about overlapping area. This patch
> changes the sort method to qsort to avoid this behavior, according to
> original patch from Jay Rolette <rolette@infiniteio.com>. The separate
> sort function is no longer necessary.
>
> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
> ---
>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-07 9:33 ` Sergio Gonzalez Monroy
@ 2016-01-07 9:51 ` Sergio Gonzalez Monroy
2016-01-07 10:38 ` Sergio Gonzalez Monroy
2016-01-07 13:59 ` [dpdk-dev] [PATCH v4 1/1] " Ralf Hoffmann
0 siblings, 2 replies; 17+ messages in thread
From: Sergio Gonzalez Monroy @ 2016-01-07 9:51 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
On 07/01/2016 09:33, Sergio Gonzalez Monroy wrote:
> On 05/01/2016 09:37, Ralf Hoffmann wrote:
>> with only one hugepage or already sorted hugepage addresses, the sort
>> function called memcpy with same src and dst pointer. Debugging with
>> valgrind will issue a warning about overlapping area. This patch
>> changes the sort method to qsort to avoid this behavior, according to
>> original patch from Jay Rolette <rolette@infiniteio.com>. The separate
>> sort function is no longer necessary.
>>
>> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
>> ---
>>
> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Forgot to mention that there is a checkpatch warning:
WARNING:LONG_LINE: line over 90 characters
#113: FILE: lib/librte_eal/linuxapp/eal/eal_memory.c:1167:
+ qsort(&tmp_hp[hp_offset], hpi->num_pages[0],
sizeof(struct hugepage_file), cmp_physaddr);
Could you fix that Ralf?
Thanks,
Sergio
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-07 9:51 ` Sergio Gonzalez Monroy
@ 2016-01-07 10:38 ` Sergio Gonzalez Monroy
2016-01-07 13:58 ` Ralf Hoffmann
2016-01-07 13:59 ` [dpdk-dev] [PATCH v4 1/1] " Ralf Hoffmann
1 sibling, 1 reply; 17+ messages in thread
From: Sergio Gonzalez Monroy @ 2016-01-07 10:38 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
On 07/01/2016 09:51, Sergio Gonzalez Monroy wrote:
> On 07/01/2016 09:33, Sergio Gonzalez Monroy wrote:
>> On 05/01/2016 09:37, Ralf Hoffmann wrote:
>>> with only one hugepage or already sorted hugepage addresses, the sort
>>> function called memcpy with same src and dst pointer. Debugging with
>>> valgrind will issue a warning about overlapping area. This patch
>>> changes the sort method to qsort to avoid this behavior, according to
>>> original patch from Jay Rolette <rolette@infiniteio.com>. The separate
>>> sort function is no longer necessary.
>>>
>>> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
>>> ---
>>>
>> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
> Forgot to mention that there is a checkpatch warning:
> WARNING:LONG_LINE: line over 90 characters
> #113: FILE: lib/librte_eal/linuxapp/eal/eal_memory.c:1167:
> + qsort(&tmp_hp[hp_offset], hpi->num_pages[0],
> sizeof(struct hugepage_file), cmp_physaddr);
>
> Could you fix that Ralf?
>
> Thanks,
> Sergio
Just FYI, there is a new DPDK Contributors guide:
http://dpdk.org/doc/guides/contributing/patches.html
Regards,
Sergio
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-07 10:38 ` Sergio Gonzalez Monroy
@ 2016-01-07 13:58 ` Ralf Hoffmann
0 siblings, 0 replies; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-07 13:58 UTC (permalink / raw)
To: Sergio Gonzalez Monroy; +Cc: dev
Hi Sergio,
On 07.01.2016 11:38, Sergio Gonzalez Monroy wrote:
>> Forgot to mention that there is a checkpatch warning:
>> WARNING:LONG_LINE: line over 90 characters
>> #113: FILE: lib/librte_eal/linuxapp/eal/eal_memory.c:1167:
>> + qsort(&tmp_hp[hp_offset], hpi->num_pages[0],
>> sizeof(struct hugepage_file), cmp_physaddr);
>>
>> Could you fix that Ralf?
>>
>> Thanks,
>> Sergio
>
> Just FYI, there is a new DPDK Contributors guide:
> http://dpdk.org/doc/guides/contributing/patches.html
I will send an updated patch right away, fixing that warning.
I was aware of that guide, it's really good. Interestingly I have
already used the checkpatches.sh script as described on that page, but
it just said
"1/1 valid patch"
so I assumed it was ok. But indeed, running the checkpath.pl manually
showed that line size warning, thanks for the hint. The checkpatches.sh
only checks the return code, so it does not see the warning.
Best Regards,
Ralf
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v4 1/1] change hugepage sorting to avoid overlapping memcpy
2016-01-07 9:51 ` Sergio Gonzalez Monroy
2016-01-07 10:38 ` Sergio Gonzalez Monroy
@ 2016-01-07 13:59 ` Ralf Hoffmann
2016-01-07 14:36 ` Sergio Gonzalez Monroy
1 sibling, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-07 13:59 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
with only one hugepage or already sorted hugepage addresses, the sort
function called memcpy with same src and dst pointer. Debugging with
valgrind will issue a warning about overlapping area. This patch changes
the sort method to qsort to avoid this behavior. The separate sort
function is no longer necessary.
Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
---
v4:
* add linebreak to qsort statement
v3:
* set commit title to eal/linux
v2:
* incorporate patch from http://dpdk.org/dev/patchwork/patch/2061/
to use qsort instead of bubble sort,
original patch by Jay Rolette <rolette@infiniteio.com>
lib/librte_eal/linuxapp/eal/eal_memory.c | 61 ++++++++------------------------
1 file changed, 15 insertions(+), 46 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index 846fd31..c0e510b 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -701,54 +701,23 @@ error:
return -1;
}
-/*
- * Sort the hugepg_tbl by physical address (lower addresses first on x86,
- * higher address first on powerpc). We use a slow algorithm, but we won't
- * have millions of pages, and this is only done at init time.
- */
static int
-sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
+cmp_physaddr(const void *a, const void *b)
{
- unsigned i, j;
- int compare_idx;
- uint64_t compare_addr;
- struct hugepage_file tmp;
-
- for (i = 0; i < hpi->num_pages[0]; i++) {
- compare_addr = 0;
- compare_idx = -1;
-
- /*
- * browse all entries starting at 'i', and find the
- * entry with the smallest addr
- */
- for (j=i; j< hpi->num_pages[0]; j++) {
-
- if (compare_addr == 0 ||
-#ifdef RTE_ARCH_PPC_64
- hugepg_tbl[j].physaddr > compare_addr) {
+#ifndef RTE_ARCH_PPC_64
+ const struct hugepage_file *p1 = (const struct hugepage_file *)a;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)b;
#else
- hugepg_tbl[j].physaddr < compare_addr) {
+ /* PowerPC needs memory sorted in reverse order from x86 */
+ const struct hugepage_file *p1 = (const struct hugepage_file *)b;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)a;
#endif
- compare_addr = hugepg_tbl[j].physaddr;
- compare_idx = j;
- }
- }
-
- /* should not happen */
- if (compare_idx == -1) {
- RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
- return -1;
- }
-
- /* swap the 2 entries in the table */
- memcpy(&tmp, &hugepg_tbl[compare_idx],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[compare_idx], &hugepg_tbl[i],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
- }
- return 0;
+ if (p1->physaddr < p2->physaddr)
+ return -1;
+ else if (p1->physaddr > p2->physaddr)
+ return 1;
+ else
+ return 0;
}
/*
@@ -1195,8 +1164,8 @@ rte_eal_hugepage_init(void)
goto fail;
}
- if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
- goto fail;
+ qsort(&tmp_hp[hp_offset], hpi->num_pages[0],
+ sizeof(struct hugepage_file), cmp_physaddr);
#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
/* remap all hugepages into single file segments */
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v4 1/1] change hugepage sorting to avoid overlapping memcpy
2016-01-07 13:59 ` [dpdk-dev] [PATCH v4 1/1] " Ralf Hoffmann
@ 2016-01-07 14:36 ` Sergio Gonzalez Monroy
2016-01-07 14:54 ` [dpdk-dev] [PATCH v5 1/1] eal/linux: " Ralf Hoffmann
0 siblings, 1 reply; 17+ messages in thread
From: Sergio Gonzalez Monroy @ 2016-01-07 14:36 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
Hi Ralf,
It seems like the title update you did for v3 is missing in this patch.
On 07/01/2016 13:59, Ralf Hoffmann wrote:
> with only one hugepage or already sorted hugepage addresses, the sort
> function called memcpy with same src and dst pointer. Debugging with
> valgrind will issue a warning about overlapping area. This patch changes
> the sort method to qsort to avoid this behavior. The separate sort
> function is no longer necessary.
>
> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
> ---
>
Once you fix that you can add my Acked-by to your commit message.
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
By the way, just a reminder to update the status of previous patches in
patchwork as 'superseded'.
Regards,
Sergio
^ permalink raw reply [flat|nested] 17+ messages in thread
* [dpdk-dev] [PATCH v5 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-07 14:36 ` Sergio Gonzalez Monroy
@ 2016-01-07 14:54 ` Ralf Hoffmann
2016-03-02 16:13 ` Thomas Monjalon
0 siblings, 1 reply; 17+ messages in thread
From: Ralf Hoffmann @ 2016-01-07 14:54 UTC (permalink / raw)
To: sergio.gonzalez.monroy; +Cc: dev
with only one hugepage or already sorted hugepage addresses, the sort
function called memcpy with same src and dst pointer. Debugging with
valgrind will issue a warning about overlapping area. This patch changes
the sort method to qsort to avoid this behavior. The separate sort
function is no longer necessary.
Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
---
v5:
* set commit title to eal/linux
v4:
* add linebreak to qsort statement
v3:
* set commit title to eal/linux
v2:
* incorporate patch from http://dpdk.org/dev/patchwork/patch/2061/
to use qsort instead of bubble sort,
original patch by Jay Rolette <rolette@infiniteio.com>
lib/librte_eal/linuxapp/eal/eal_memory.c | 61 ++++++++------------------------
1 file changed, 15 insertions(+), 46 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index 846fd31..c0e510b 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -701,54 +701,23 @@ error:
return -1;
}
-/*
- * Sort the hugepg_tbl by physical address (lower addresses first on x86,
- * higher address first on powerpc). We use a slow algorithm, but we won't
- * have millions of pages, and this is only done at init time.
- */
static int
-sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
+cmp_physaddr(const void *a, const void *b)
{
- unsigned i, j;
- int compare_idx;
- uint64_t compare_addr;
- struct hugepage_file tmp;
-
- for (i = 0; i < hpi->num_pages[0]; i++) {
- compare_addr = 0;
- compare_idx = -1;
-
- /*
- * browse all entries starting at 'i', and find the
- * entry with the smallest addr
- */
- for (j=i; j< hpi->num_pages[0]; j++) {
-
- if (compare_addr == 0 ||
-#ifdef RTE_ARCH_PPC_64
- hugepg_tbl[j].physaddr > compare_addr) {
+#ifndef RTE_ARCH_PPC_64
+ const struct hugepage_file *p1 = (const struct hugepage_file *)a;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)b;
#else
- hugepg_tbl[j].physaddr < compare_addr) {
+ /* PowerPC needs memory sorted in reverse order from x86 */
+ const struct hugepage_file *p1 = (const struct hugepage_file *)b;
+ const struct hugepage_file *p2 = (const struct hugepage_file *)a;
#endif
- compare_addr = hugepg_tbl[j].physaddr;
- compare_idx = j;
- }
- }
-
- /* should not happen */
- if (compare_idx == -1) {
- RTE_LOG(ERR, EAL, "%s(): error in physaddr sorting\n", __func__);
- return -1;
- }
-
- /* swap the 2 entries in the table */
- memcpy(&tmp, &hugepg_tbl[compare_idx],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[compare_idx], &hugepg_tbl[i],
- sizeof(struct hugepage_file));
- memcpy(&hugepg_tbl[i], &tmp, sizeof(struct hugepage_file));
- }
- return 0;
+ if (p1->physaddr < p2->physaddr)
+ return -1;
+ else if (p1->physaddr > p2->physaddr)
+ return 1;
+ else
+ return 0;
}
/*
@@ -1195,8 +1164,8 @@ rte_eal_hugepage_init(void)
goto fail;
}
- if (sort_by_physaddr(&tmp_hp[hp_offset], hpi) < 0)
- goto fail;
+ qsort(&tmp_hp[hp_offset], hpi->num_pages[0],
+ sizeof(struct hugepage_file), cmp_physaddr);
#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
/* remap all hugepages into single file segments */
--
2.5.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [dpdk-dev] [PATCH v5 1/1] eal/linux: change hugepage sorting to avoid overlapping memcpy
2016-01-07 14:54 ` [dpdk-dev] [PATCH v5 1/1] eal/linux: " Ralf Hoffmann
@ 2016-03-02 16:13 ` Thomas Monjalon
0 siblings, 0 replies; 17+ messages in thread
From: Thomas Monjalon @ 2016-03-02 16:13 UTC (permalink / raw)
To: Ralf Hoffmann; +Cc: dev
2016-01-07 15:54, Ralf Hoffmann:
> with only one hugepage or already sorted hugepage addresses, the sort
> function called memcpy with same src and dst pointer. Debugging with
> valgrind will issue a warning about overlapping area. This patch changes
> the sort method to qsort to avoid this behavior. The separate sort
> function is no longer necessary.
>
> Signed-off-by: Ralf Hoffmann <ralf.hoffmann@allegro-packets.com>
> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Added ref to Jay Rolette and
Applied, thanks
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2016-03-02 16:13 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-04 10:14 [dpdk-dev] [PATCH v1] change hugepage sorting to avoid overlapping memcpy Ralf Hoffmann
2015-09-08 12:45 ` Gonzalez Monroy, Sergio
2015-09-08 13:29 ` Jay Rolette
2015-09-08 14:24 ` Gonzalez Monroy, Sergio
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 0/1] " Ralf Hoffmann
2016-01-05 9:25 ` [dpdk-dev] [PATCH v2 1/1] " Ralf Hoffmann
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 0/1] eal/linux: " Ralf Hoffmann
2016-01-05 9:37 ` [dpdk-dev] [PATCH v3 1/1] " Ralf Hoffmann
2016-01-07 9:33 ` Sergio Gonzalez Monroy
2016-01-07 9:51 ` Sergio Gonzalez Monroy
2016-01-07 10:38 ` Sergio Gonzalez Monroy
2016-01-07 13:58 ` Ralf Hoffmann
2016-01-07 13:59 ` [dpdk-dev] [PATCH v4 1/1] " Ralf Hoffmann
2016-01-07 14:36 ` Sergio Gonzalez Monroy
2016-01-07 14:54 ` [dpdk-dev] [PATCH v5 1/1] eal/linux: " Ralf Hoffmann
2016-03-02 16:13 ` Thomas Monjalon
2015-09-09 8:41 ` [dpdk-dev] [PATCH v1] " Ralf Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).