net/ixgbe: avoid multpile definitions of 'bool'

Message ID 20191003224419.23968-1-dharmik.thakkar@arm.com (mailing list archive)
State Superseded, archived
Delegated to: xiaolong ye
Headers
Series net/ixgbe: avoid multpile definitions of 'bool' |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-compilation success Compile Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS

Commit Message

Dharmik Thakkar Oct. 3, 2019, 10:44 p.m. UTC
  Compilation issue arises due to multiple definitions of 'bool'
in 'ixgbe_ethdev.h'.

Error:
'/dpdk/drivers/net/ixgbe/ixgbe_ethdev.c: In function
‘ixgbe_dev_setup_link_alarm_handler’:
/dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:4075:43:
error: passing argument 3 of ‘ixgbe_get_link_capabilities’ from
incompatible pointer type [-Werror=incompatible-pointer-types]
   ixgbe_get_link_capabilities(hw, &speed, &autoneg);
                                           ^
In file included from /dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:41:0:
/dpdk/drivers/net/ixgbe/base/ixgbe_api.h:63:5: note: expected
‘bool * {aka int *}’ but argument is of type ‘_Bool *’'

Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
---
 drivers/net/ixgbe/base/ixgbe_osdep.h | 4 +---
 drivers/net/ixgbe/ixgbe_ethdev.c     | 7 ++++---
 2 files changed, 5 insertions(+), 6 deletions(-)
  

Comments

Xiaolong Ye Oct. 16, 2019, 6:23 a.m. UTC | #1
Hi,

On 10/03, Dharmik Thakkar wrote:
>Compilation issue arises due to multiple definitions of 'bool'
>in 'ixgbe_ethdev.h'.

Which compiler would trigger this compilation issue?
And we have several "typedef int bool" in multiple drivers,

drivers/net/bnx2x/bnx2x_ethdev.h:50:typedef int bool;
drivers/net/cxgbe/cxgbe_compat.h:89:typedef int       bool;
drivers/net/e1000/base/e1000_osdep.h:61:typedef int             bool;
drivers/net/fm10k/base/fm10k_osdep.h:50:typedef int        bool;
drivers/net/ixgbe/base/ixgbe_osdep.h:86:typedef int             bool;
drivers/net/qede/base/bcm_osal.h:74:typedef int bool;
drivers/net/vmxnet3/base/vmxnet3_osdep.h:12:typedef int         bool;

Do you need to change them all?

Thanks,
Xiaolong

>
>Error:
>'/dpdk/drivers/net/ixgbe/ixgbe_ethdev.c: In function
>‘ixgbe_dev_setup_link_alarm_handler’:
>/dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:4075:43:
>error: passing argument 3 of ‘ixgbe_get_link_capabilities’ from
>incompatible pointer type [-Werror=incompatible-pointer-types]
>   ixgbe_get_link_capabilities(hw, &speed, &autoneg);
>                                           ^
>In file included from /dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:41:0:
>/dpdk/drivers/net/ixgbe/base/ixgbe_api.h:63:5: note: expected
>‘bool * {aka int *}’ but argument is of type ‘_Bool *’'
>
>Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
>Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
>---
> drivers/net/ixgbe/base/ixgbe_osdep.h | 4 +---
> drivers/net/ixgbe/ixgbe_ethdev.c     | 7 ++++---
> 2 files changed, 5 insertions(+), 6 deletions(-)
>
>diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h
>index ea8dc1cbe570..844d1701f595 100644
>--- a/drivers/net/ixgbe/base/ixgbe_osdep.h
>+++ b/drivers/net/ixgbe/base/ixgbe_osdep.h
>@@ -9,6 +9,7 @@
> #include <stdint.h>
> #include <stdio.h>
> #include <stdarg.h>
>+#include <stdbool.h>
> #include <rte_common.h>
> #include <rte_debug.h>
> #include <rte_cycles.h>
>@@ -82,9 +83,6 @@ typedef int16_t		s16;
> typedef uint32_t	u32;
> typedef int32_t		s32;
> typedef uint64_t	u64;
>-#ifndef __cplusplus
>-typedef int		bool;
>-#endif
> 
> #define mb()	rte_mb()
> #define wmb()	rte_wmb()
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>index 7eb3d0567b58..2c5d2e5f9295 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -2589,7 +2589,8 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
> 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
> 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
> 	uint32_t intr_vector = 0;
>-	int err, link_up = 0, negotiate = 0;
>+	int err;
>+	bool link_up = 0, negotiate = 0;
> 	uint32_t speed = 0;
> 	uint32_t allowed_speeds = 0;
> 	int mask = 0;
>@@ -3958,7 +3959,7 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
> 
> static int
> ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
>-		   int *link_up, int wait_to_complete)
>+		   bool *link_up, int wait_to_complete)
> {
> 	struct ixgbe_adapter *adapter = container_of(hw,
> 						     struct ixgbe_adapter, hw);
>@@ -4089,7 +4090,7 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
> 	ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
> 	struct ixgbe_interrupt *intr =
> 		IXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private);
>-	int link_up;
>+	bool link_up;
> 	int diag;
> 	int wait = 1;
> 
>-- 
>2.17.1
>
  
Dharmik Thakkar Oct. 16, 2019, 4:22 p.m. UTC | #2
Hi Ye,
Thank you for the comments!

> On Oct 16, 2019, at 1:23 AM, Ye Xiaolong <xiaolong.ye@intel.com> wrote:
> 
> Hi,
> 
> On 10/03, Dharmik Thakkar wrote:
>> Compilation issue arises due to multiple definitions of 'bool'
>> in 'ixgbe_ethdev.h'.
> 
> Which compiler would trigger this compilation issue?
gcc version 7.4.0
Compilation issue arises when ’stdbool.h’ gets included along with one of the header files with 'typedef int bool;’,
thereby leading to multiple definitions of ‘bool’.
I faced this issue while working on 'https://patches.dpdk.org/patch/58333/‘ wherein I included
‘rte_rcu_qsbr.h’ (which includes ’stdbool.h’) in ‘rte_hash.h’.
Now, ‘ixgbe_ethdev.c’ includes ’stdbool.h’ (<- rte_rcu_qsbr.h <- rte_hash.h) along with
‘ixgbe_osdep.h’ (<- ixgbe_type.h <- ixgbe_api.h <- ixgbe_ethdev.h) which has 'typedef int bool;’
> And we have several "typedef int bool" in multiple drivers,
> 
> drivers/net/bnx2x/bnx2x_ethdev.h:50:typedef int bool;
> drivers/net/cxgbe/cxgbe_compat.h:89:typedef int       bool;
> drivers/net/e1000/base/e1000_osdep.h:61:typedef int             bool;
> drivers/net/fm10k/base/fm10k_osdep.h:50:typedef int        bool;
> drivers/net/ixgbe/base/ixgbe_osdep.h:86:typedef int             bool;
> drivers/net/qede/base/bcm_osal.h:74:typedef int bool;
> drivers/net/vmxnet3/base/vmxnet3_osdep.h:12:typedef int         bool;
> 
> Do you need to change them all?
Yes, I will fix these and submit a patch series.
> 
> Thanks,
> Xiaolong
> 
>> 
>> Error:
>> '/dpdk/drivers/net/ixgbe/ixgbe_ethdev.c: In function
>> ‘ixgbe_dev_setup_link_alarm_handler’:
>> /dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:4075:43:
>> error: passing argument 3 of ‘ixgbe_get_link_capabilities’ from
>> incompatible pointer type [-Werror=incompatible-pointer-types]
>>  ixgbe_get_link_capabilities(hw, &speed, &autoneg);
>>                                          ^
>> In file included from /dpdk/drivers/net/ixgbe/ixgbe_ethdev.c:41:0:
>> /dpdk/drivers/net/ixgbe/base/ixgbe_api.h:63:5: note: expected
>> ‘bool * {aka int *}’ but argument is of type ‘_Bool *’'
>> 
>> Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
>> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
>> ---
>> drivers/net/ixgbe/base/ixgbe_osdep.h | 4 +---
>> drivers/net/ixgbe/ixgbe_ethdev.c     | 7 ++++---
>> 2 files changed, 5 insertions(+), 6 deletions(-)
>> 
>> diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h
>> index ea8dc1cbe570..844d1701f595 100644
>> --- a/drivers/net/ixgbe/base/ixgbe_osdep.h
>> +++ b/drivers/net/ixgbe/base/ixgbe_osdep.h
>> @@ -9,6 +9,7 @@
>> #include <stdint.h>
>> #include <stdio.h>
>> #include <stdarg.h>
>> +#include <stdbool.h>
>> #include <rte_common.h>
>> #include <rte_debug.h>
>> #include <rte_cycles.h>
>> @@ -82,9 +83,6 @@ typedef int16_t		s16;
>> typedef uint32_t	u32;
>> typedef int32_t		s32;
>> typedef uint64_t	u64;
>> -#ifndef __cplusplus
>> -typedef int		bool;
>> -#endif
>> 
>> #define mb()	rte_mb()
>> #define wmb()	rte_wmb()
>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>> index 7eb3d0567b58..2c5d2e5f9295 100644
>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>> @@ -2589,7 +2589,8 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
>> 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
>> 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
>> 	uint32_t intr_vector = 0;
>> -	int err, link_up = 0, negotiate = 0;
>> +	int err;
>> +	bool link_up = 0, negotiate = 0;
>> 	uint32_t speed = 0;
>> 	uint32_t allowed_speeds = 0;
>> 	int mask = 0;
>> @@ -3958,7 +3959,7 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
>> 
>> static int
>> ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
>> -		   int *link_up, int wait_to_complete)
>> +		   bool *link_up, int wait_to_complete)
>> {
>> 	struct ixgbe_adapter *adapter = container_of(hw,
>> 						     struct ixgbe_adapter, hw);
>> @@ -4089,7 +4090,7 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
>> 	ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
>> 	struct ixgbe_interrupt *intr =
>> 		IXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private);
>> -	int link_up;
>> +	bool link_up;
>> 	int diag;
>> 	int wait = 1;
>> 
>> -- 
>> 2.17.1
>>
  

Patch

diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h
index ea8dc1cbe570..844d1701f595 100644
--- a/drivers/net/ixgbe/base/ixgbe_osdep.h
+++ b/drivers/net/ixgbe/base/ixgbe_osdep.h
@@ -9,6 +9,7 @@ 
 #include <stdint.h>
 #include <stdio.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <rte_common.h>
 #include <rte_debug.h>
 #include <rte_cycles.h>
@@ -82,9 +83,6 @@  typedef int16_t		s16;
 typedef uint32_t	u32;
 typedef int32_t		s32;
 typedef uint64_t	u64;
-#ifndef __cplusplus
-typedef int		bool;
-#endif
 
 #define mb()	rte_mb()
 #define wmb()	rte_wmb()
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 7eb3d0567b58..2c5d2e5f9295 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -2589,7 +2589,8 @@  ixgbe_dev_start(struct rte_eth_dev *dev)
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
 	uint32_t intr_vector = 0;
-	int err, link_up = 0, negotiate = 0;
+	int err;
+	bool link_up = 0, negotiate = 0;
 	uint32_t speed = 0;
 	uint32_t allowed_speeds = 0;
 	int mask = 0;
@@ -3958,7 +3959,7 @@  ixgbevf_dev_info_get(struct rte_eth_dev *dev,
 
 static int
 ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
-		   int *link_up, int wait_to_complete)
+		   bool *link_up, int wait_to_complete)
 {
 	struct ixgbe_adapter *adapter = container_of(hw,
 						     struct ixgbe_adapter, hw);
@@ -4089,7 +4090,7 @@  ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
 	ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
 	struct ixgbe_interrupt *intr =
 		IXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private);
-	int link_up;
+	bool link_up;
 	int diag;
 	int wait = 1;