[dpdk-dev,v3,02/12] hash: fix compilation on non-X86 platforms

Message ID D1C15941.A98C%rsanford@akamai.com (mailing list archive)
State Not Applicable, archived
Headers

Commit Message

Sanford, Robert July 7, 2015, 2:52 p.m. UTC
  Hi Zhigang,

Can you add this one-line X86 change (below)? When included by C++ code,
'key' needs an explicit type cast.

You may want to put the 'const' keyword in your non-X86 change, too.
--

Thanks,
Robert




 #else
 	const uint32_t *k = (uint32_t *)(uintptr_t)key & (uintptr_t)~3);
--






>The "hash: remove duplicated code" change unfortunately broke the
>build for non-X86 platforms.  This patch fixes this breakage.
>
>Change-Id: Ie109d67e681b75b45320fab1bf9de4eb9c9701bf
>Signed-off-by: Zhigang Lu <zlu@ezchip.com>
>---
> lib/librte_hash/rte_jhash.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/lib/librte_hash/rte_jhash.h b/lib/librte_hash/rte_jhash.h
>index e230449..d1b6cf3 100644
>--- a/lib/librte_hash/rte_jhash.h
>+++ b/lib/librte_hash/rte_jhash.h
>@@ -44,6 +44,7 @@
> extern "C" {
> #endif
> 
>+#include <limits.h>
> #include <stdint.h>
> #include <string.h>
> 
>@@ -122,7 +123,7 @@ __rte_jhash_2hashes(const void *key, uint32_t length,
>uint32_t *pc,
> 	const uint32_t *k = key;
> 	const uint32_t s = 0;
> #else
>-	const uint32_t *k = (uint32_t *)(uintptr_t)key & (uintptr_t)~3);
>+	const uint32_t *k = (uint32_t *)((uintptr_t)key & (uintptr_t)~3);
> 	const uint32_t s = ((uintptr_t)key & 3) * CHAR_BIT;
> #endif
> 	if (!check_align || s == 0) {
>-- 
>2.1.2
>
  

Comments

Zhigang Lu July 8, 2015, 8:21 a.m. UTC | #1
>-----Original Message-----
>From: Sanford, Robert [mailto:rsanford@akamai.com]
>Sent: Tuesday, July 07, 2015 10:52 PM
>To: Zhigang Lu; dev@dpdk.org
>Subject: Re: [dpdk-dev] [PATCH v3 02/12] hash: fix compilation on non-X86
>platforms
>
>Hi Zhigang,
>
>Can you add this one-line X86 change (below)? When included by C++ code,
'key'
>needs an explicit type cast.

OK, will add this in next version.

>You may want to put the 'const' keyword in your non-X86 change, too.
>--
>
>Thanks,
>Robert
>
>
>
>
>diff --git a/lib/librte_hash/rte_jhash.h b/lib/librte_hash/rte_jhash.h
index
>e230449..49b4ac0 100644
>--- a/lib/librte_hash/rte_jhash.h
>+++ b/lib/librte_hash/rte_jhash.h
>@@ -119,7 +119,7 @@ __rte_jhash_2hashes(const void *key, uint32_t length,
>uint32_t *pc,
> 	 * If check_align is not set, first case will be used
> 	 */
> #if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686) ||
>defined(RTE_ARCH_X86_X32)
>-	const uint32_t *k = key;
>+	const uint32_t *k = (const uint32_t *)key;
> 	const uint32_t s = 0;
> #else
> 	const uint32_t *k = (uint32_t *)(uintptr_t)key & (uintptr_t)~3);
>--
>
>
>
>
>
>
>>The "hash: remove duplicated code" change unfortunately broke the build
>>for non-X86 platforms.  This patch fixes this breakage.
>>
>>Change-Id: Ie109d67e681b75b45320fab1bf9de4eb9c9701bf
>>Signed-off-by: Zhigang Lu <zlu@ezchip.com>
>>---
>> lib/librte_hash/rte_jhash.h | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>>diff --git a/lib/librte_hash/rte_jhash.h b/lib/librte_hash/rte_jhash.h
>>index e230449..d1b6cf3 100644
>>--- a/lib/librte_hash/rte_jhash.h
>>+++ b/lib/librte_hash/rte_jhash.h
>>@@ -44,6 +44,7 @@
>> extern "C" {
>> #endif
>>
>>+#include <limits.h>
>> #include <stdint.h>
>> #include <string.h>
>>
>>@@ -122,7 +123,7 @@ __rte_jhash_2hashes(const void *key, uint32_t
>>length, uint32_t *pc,
>> 	const uint32_t *k = key;
>> 	const uint32_t s = 0;
>> #else
>>-	const uint32_t *k = (uint32_t *)(uintptr_t)key & (uintptr_t)~3);
>>+	const uint32_t *k = (uint32_t *)((uintptr_t)key & (uintptr_t)~3);
>> 	const uint32_t s = ((uintptr_t)key & 3) * CHAR_BIT;  #endif
>> 	if (!check_align || s == 0) {
>>--
>>2.1.2
>>
  

Patch

diff --git a/lib/librte_hash/rte_jhash.h b/lib/librte_hash/rte_jhash.h
index e230449..49b4ac0 100644
--- a/lib/librte_hash/rte_jhash.h
+++ b/lib/librte_hash/rte_jhash.h
@@ -119,7 +119,7 @@  __rte_jhash_2hashes(const void *key, uint32_t length,
uint32_t *pc,
 	 * If check_align is not set, first case will be used
 	 */
 #if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686) ||
defined(RTE_ARCH_X86_X32)
-	const uint32_t *k = key;
+	const uint32_t *k = (const uint32_t *)key;
 	const uint32_t s = 0;