All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] eal: add macros to align value to multiple
@ 2018-03-14  9:40 Pavan Nikhilesh
  2018-03-14  9:41 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-03-14  9:40 UTC (permalink / raw)
  To: jerin.jacob, thomas; +Cc: dev, Pavan Nikhilesh

Add macros to align given value to the multiple of the supplied
integer.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---

 Common code needed for OcteonTx event timer device.

 lib/librte_eal/common/include/rte_common.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
index c7803e41c..2052b5300 100644
--- a/lib/librte_eal/common/include/rte_common.h
+++ b/lib/librte_eal/common/include/rte_common.h
@@ -190,6 +190,22 @@ static void __attribute__((constructor(prio), used)) func(void)
  */
 #define RTE_ALIGN(val, align) RTE_ALIGN_CEIL(val, align)

+/**
+ * Macro to align a value to the multiple of given value. The resultant
+ * value will be of the same type as the first parameter and will be no lower
+ * than the first parameter.
+ */
+#define RTE_ALIGN_MUL_CEIL(v, mul) \
+	(((v + (typeof(v)) mul - 1) / ((typeof(v)) mul)) * (typeof(v))mul)
+
+/**
+ * Macro to align a value to the multiple of given value. The resultant
+ * value will be of the same type as the first parameter and will be no higher
+ * than the first parameter.
+ */
+#define RTE_ALIGN_MUL_FLOOR(v, mul) \
+	((v / ((typeof(v)) mul)) * (typeof(v))mul)
+
 /**
  * Checks if a pointer is aligned to a given power-of-two value
  *
--
2.16.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] test: update common auto test
  2018-03-14  9:40 [PATCH 1/2] eal: add macros to align value to multiple Pavan Nikhilesh
@ 2018-03-14  9:41 ` Pavan Nikhilesh
  2018-03-15 23:53   ` Thomas Monjalon
  2018-03-14 10:42 ` [PATCH 1/2] eal: add macros to align value to multiple Ananyev, Konstantin
  2018-03-20 13:24 ` [PATCH v2] " Pavan Nikhilesh
  2 siblings, 1 reply; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-03-14  9:41 UTC (permalink / raw)
  To: jerin.jacob, thomas; +Cc: dev, Pavan Nikhilesh

Update common auto test to include test for aligning values to multiples
of given integer.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 test/test/test_common.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/test/test/test_common.c b/test/test/test_common.c
index d0342430f..e43cba49b 100644
--- a/test/test/test_common.c
+++ b/test/test/test_common.c
@@ -128,6 +128,18 @@ test_align(void)
 				FAIL("rte_is_aligned");
 		}
 	}
+
+	for (p = 1; p <= MAX_NUM / 2; p++) {
+		for (i = 1; i <= MAX_NUM / 2; i++) {
+			val = RTE_ALIGN_MUL_CEIL(i, p);
+			if (val % p != 0 || val < i)
+				FAIL_ALIGN("RTE_ALIGN_MUL_CEIL", i, p);
+			val = RTE_ALIGN_MUL_FLOOR(i, p);
+			if (val % p != 0 || val > i)
+				FAIL_ALIGN("RTE_ALIGN_MUL_FLOOR", i, p);
+		}
+	}
+
 	return 0;
 }
 
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] eal: add macros to align value to multiple
  2018-03-14  9:40 [PATCH 1/2] eal: add macros to align value to multiple Pavan Nikhilesh
  2018-03-14  9:41 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh
@ 2018-03-14 10:42 ` Ananyev, Konstantin
  2018-03-16  8:41   ` Pavan Nikhilesh
  2018-03-20 13:24 ` [PATCH v2] " Pavan Nikhilesh
  2 siblings, 1 reply; 9+ messages in thread
From: Ananyev, Konstantin @ 2018-03-14 10:42 UTC (permalink / raw)
  To: Pavan Nikhilesh, jerin.jacob, thomas; +Cc: dev

Hi Pavan,

> 
> Add macros to align given value to the multiple of the supplied
> integer.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---
> 
>  Common code needed for OcteonTx event timer device.
> 
>  lib/librte_eal/common/include/rte_common.h | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
> index c7803e41c..2052b5300 100644
> --- a/lib/librte_eal/common/include/rte_common.h
> +++ b/lib/librte_eal/common/include/rte_common.h
> @@ -190,6 +190,22 @@ static void __attribute__((constructor(prio), used)) func(void)
>   */
>  #define RTE_ALIGN(val, align) RTE_ALIGN_CEIL(val, align)
> 
> +/**
> + * Macro to align a value to the multiple of given value. The resultant
> + * value will be of the same type as the first parameter and will be no lower
> + * than the first parameter.
> + */
> +#define RTE_ALIGN_MUL_CEIL(v, mul) \
> +	(((v + (typeof(v)) mul - 1) / ((typeof(v)) mul)) * (typeof(v))mul)

I think you need to add braces around mul:
(((v + (typeof(v))(mul) - 1) / ((typeof(v))(mul))) * (typeof(v))(mul))
Same above.
Konstantin

> +
> +/**
> + * Macro to align a value to the multiple of given value. The resultant
> + * value will be of the same type as the first parameter and will be no higher
> + * than the first parameter.
> + */
> +#define RTE_ALIGN_MUL_FLOOR(v, mul) \
> +	((v / ((typeof(v)) mul)) * (typeof(v))mul)
> +
>  /**
>   * Checks if a pointer is aligned to a given power-of-two value
>   *
> --
> 2.16.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test: update common auto test
  2018-03-14  9:41 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh
@ 2018-03-15 23:53   ` Thomas Monjalon
  2018-03-16  8:56     ` Pavan Nikhilesh
  0 siblings, 1 reply; 9+ messages in thread
From: Thomas Monjalon @ 2018-03-15 23:53 UTC (permalink / raw)
  To: Pavan Nikhilesh; +Cc: jerin.jacob, dev

14/03/2018 10:41, Pavan Nikhilesh:
> Update common auto test to include test for aligning values to multiples
> of given integer.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---
>  test/test/test_common.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)

The unit test can be in the same patch as the code.
A single patch is fine here.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] eal: add macros to align value to multiple
  2018-03-14 10:42 ` [PATCH 1/2] eal: add macros to align value to multiple Ananyev, Konstantin
@ 2018-03-16  8:41   ` Pavan Nikhilesh
  0 siblings, 0 replies; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-03-16  8:41 UTC (permalink / raw)
  To: Ananyev, Konstantin, jerin.jacob, thomas; +Cc: dev

Hi Konstantin,

On Wed, Mar 14, 2018 at 10:42:54AM +0000, Ananyev, Konstantin wrote:
> Hi Pavan,
>
> >
> > Add macros to align given value to the multiple of the supplied
> > integer.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > ---
> >
> >  Common code needed for OcteonTx event timer device.
> >
> >  lib/librte_eal/common/include/rte_common.h | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> >
> > diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
> > index c7803e41c..2052b5300 100644
> > --- a/lib/librte_eal/common/include/rte_common.h
> > +++ b/lib/librte_eal/common/include/rte_common.h
> > @@ -190,6 +190,22 @@ static void __attribute__((constructor(prio), used)) func(void)
> >   */
> >  #define RTE_ALIGN(val, align) RTE_ALIGN_CEIL(val, align)
> >
> > +/**
> > + * Macro to align a value to the multiple of given value. The resultant
> > + * value will be of the same type as the first parameter and will be no lower
> > + * than the first parameter.
> > + */
> > +#define RTE_ALIGN_MUL_CEIL(v, mul) \
> > +	(((v + (typeof(v)) mul - 1) / ((typeof(v)) mul)) * (typeof(v))mul)
>
> I think you need to add braces around mul:
> (((v + (typeof(v))(mul) - 1) / ((typeof(v))(mul))) * (typeof(v))(mul))
> Same above.

Agreed, will roll up a v2.

> Konstantin

Thanks for reviewing,
Pavan.

>
> > +
> > +/**
> > + * Macro to align a value to the multiple of given value. The resultant
> > + * value will be of the same type as the first parameter and will be no higher
> > + * than the first parameter.
> > + */
> > +#define RTE_ALIGN_MUL_FLOOR(v, mul) \
> > +	((v / ((typeof(v)) mul)) * (typeof(v))mul)
> > +
> >  /**
> >   * Checks if a pointer is aligned to a given power-of-two value
> >   *
> > --
> > 2.16.2
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test: update common auto test
  2018-03-15 23:53   ` Thomas Monjalon
@ 2018-03-16  8:56     ` Pavan Nikhilesh
  0 siblings, 0 replies; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-03-16  8:56 UTC (permalink / raw)
  To: Thomas Monjalon, jerin.jacob; +Cc: dev

On Fri, Mar 16, 2018 at 12:53:27AM +0100, Thomas Monjalon wrote:
> 14/03/2018 10:41, Pavan Nikhilesh:
> > Update common auto test to include test for aligning values to multiples
> > of given integer.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > ---
> >  test/test/test_common.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
>
> The unit test can be in the same patch as the code.
> A single patch is fine here.

Sure, will merge them in v2.
>
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2] eal: add macros to align value to multiple
  2018-03-14  9:40 [PATCH 1/2] eal: add macros to align value to multiple Pavan Nikhilesh
  2018-03-14  9:41 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh
  2018-03-14 10:42 ` [PATCH 1/2] eal: add macros to align value to multiple Ananyev, Konstantin
@ 2018-03-20 13:24 ` Pavan Nikhilesh
  2018-04-04  9:14   ` Thomas Monjalon
  2 siblings, 1 reply; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-03-20 13:24 UTC (permalink / raw)
  To: jerin.jacob, thomas, konstantin.ananyev; +Cc: dev, Pavan Nikhilesh

Add macros to align given value to the multiple of the supplied
integer.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 Common code needed for OcteonTx event timer device.

 v2 Changes:
 - Use paranthesis around mul (Konstantin).
 - Squash test_common patch.

 lib/librte_eal/common/include/rte_common.h | 16 ++++++++++++++++
 test/test/test_common.c                    | 12 ++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
index c7803e41c..4469affb9 100644
--- a/lib/librte_eal/common/include/rte_common.h
+++ b/lib/librte_eal/common/include/rte_common.h
@@ -190,6 +190,22 @@ static void __attribute__((constructor(prio), used)) func(void)
  */
 #define RTE_ALIGN(val, align) RTE_ALIGN_CEIL(val, align)

+/**
+ * Macro to align a value to the multiple of given value. The resultant
+ * value will be of the same type as the first parameter and will be no lower
+ * than the first parameter.
+ */
+#define RTE_ALIGN_MUL_CEIL(v, mul) \
+	(((v + (typeof(v))(mul) - 1) / ((typeof(v))(mul))) * (typeof(v))(mul))
+
+/**
+ * Macro to align a value to the multiple of given value. The resultant
+ * value will be of the same type as the first parameter and will be no higher
+ * than the first parameter.
+ */
+#define RTE_ALIGN_MUL_FLOOR(v, mul) \
+	((v / ((typeof(v))(mul))) * (typeof(v))(mul))
+
 /**
  * Checks if a pointer is aligned to a given power-of-two value
  *
diff --git a/test/test/test_common.c b/test/test/test_common.c
index d0342430f..e43cba49b 100644
--- a/test/test/test_common.c
+++ b/test/test/test_common.c
@@ -128,6 +128,18 @@ test_align(void)
 				FAIL("rte_is_aligned");
 		}
 	}
+
+	for (p = 1; p <= MAX_NUM / 2; p++) {
+		for (i = 1; i <= MAX_NUM / 2; i++) {
+			val = RTE_ALIGN_MUL_CEIL(i, p);
+			if (val % p != 0 || val < i)
+				FAIL_ALIGN("RTE_ALIGN_MUL_CEIL", i, p);
+			val = RTE_ALIGN_MUL_FLOOR(i, p);
+			if (val % p != 0 || val > i)
+				FAIL_ALIGN("RTE_ALIGN_MUL_FLOOR", i, p);
+		}
+	}
+
 	return 0;
 }

--
2.16.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] eal: add macros to align value to multiple
  2018-03-20 13:24 ` [PATCH v2] " Pavan Nikhilesh
@ 2018-04-04  9:14   ` Thomas Monjalon
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Monjalon @ 2018-04-04  9:14 UTC (permalink / raw)
  To: Pavan Nikhilesh; +Cc: dev, jerin.jacob, konstantin.ananyev

20/03/2018 14:24, Pavan Nikhilesh:
> Add macros to align given value to the multiple of the supplied
> integer.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---
>  Common code needed for OcteonTx event timer device.
> 
>  v2 Changes:
>  - Use paranthesis around mul (Konstantin).
>  - Squash test_common patch.

Applied, thanks

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/2] test: update common auto test
  2018-02-17 10:49 [PATCH 1/2] eal: add API to align integer to previous power of 2 Pavan Nikhilesh
@ 2018-02-17 10:49 ` Pavan Nikhilesh
  0 siblings, 0 replies; 9+ messages in thread
From: Pavan Nikhilesh @ 2018-02-17 10:49 UTC (permalink / raw)
  To: jerin.jacob, thomas; +Cc: dev, Pavan Nikhilesh

Update common auto test to include test for previous power of 2 for both
32 and 64bit integers.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 test/test/test_common.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/test/test/test_common.c b/test/test/test_common.c
index d0342430f..16e6b585a 100644
--- a/test/test/test_common.c
+++ b/test/test/test_common.c
@@ -80,6 +80,7 @@ test_align(void)
 			val / pow != (i / pow) + 1)		/* if not aligned, hence +1 */
 
 	uint32_t i, p, val;
+	uint64_t j, q;
 
 	for (i = 1, p = 1; i <= MAX_NUM; i ++) {
 		if (rte_align32pow2(i) != p)
@@ -88,6 +89,29 @@ test_align(void)
 			p <<= 1;
 	}
 
+	for (i = 1, p = 0; i <= MAX_NUM; i++) {
+		if (rte_align32lowpow2(i) != p)
+			FAIL_ALIGN("rte_align32lowpow2", i, p);
+		if (rte_is_power_of_2(i))
+			p = p ? p << 1 : 1;
+	}
+
+	for (j = 1, q = 1; j <= MAX_NUM ; j++) {
+		if (rte_align64pow2(j) != q)
+			printf("rte_align64pow2() test failed: %lu %lu\n", j,
+					q);
+		if (j == q)
+			q <<= 1;
+	}
+
+	for (j = 1, q = 0; j <= MAX_NUM; j++) {
+		if (rte_align64lowpow2(j) != q)
+			printf("rte_align64lowpow2() test failed: %lu %lu\n", j,
+					q);
+		if (rte_is_power_of_2(j))
+			q = q ? q << 1 : 1;
+	}
+
 	for (p = 2; p <= MAX_NUM; p <<= 1) {
 
 		if (!rte_is_power_of_2(p))
-- 
2.16.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-04-04  9:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-14  9:40 [PATCH 1/2] eal: add macros to align value to multiple Pavan Nikhilesh
2018-03-14  9:41 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh
2018-03-15 23:53   ` Thomas Monjalon
2018-03-16  8:56     ` Pavan Nikhilesh
2018-03-14 10:42 ` [PATCH 1/2] eal: add macros to align value to multiple Ananyev, Konstantin
2018-03-16  8:41   ` Pavan Nikhilesh
2018-03-20 13:24 ` [PATCH v2] " Pavan Nikhilesh
2018-04-04  9:14   ` Thomas Monjalon
  -- strict thread matches above, loose matches on Subject: below --
2018-02-17 10:49 [PATCH 1/2] eal: add API to align integer to previous power of 2 Pavan Nikhilesh
2018-02-17 10:49 ` [PATCH 2/2] test: update common auto test Pavan Nikhilesh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.