[dpdk-dev,1/3] eal/arm64: remove the braces {} for dmb(), dsb()

Message ID 1510121832-16439-1-git-send-email-hejianet@gmail.com
State Superseded, archived
Headers show

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/checkpatch warning coding style issues

Commit Message

Jia He Nov. 8, 2017, 6:17 a.m.
for the code as follows:
if (condition)
	rte_smp_rmb();
else
	rte_smp_wmb();
Without this patch, compiler will report this error:
error: 'else' without a previous 'if'

Signed-off-by: Jia He <hejianet@gmail.com>
Signed-off-by: jia.he@hxt-semitech.com
---
 lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Jerin Jacob Nov. 8, 2017, 7:17 a.m. | #1
-----Original Message-----
> Date: Wed,  8 Nov 2017 06:17:10 +0000
> From: Jia He <hejianet@gmail.com>
> To: jerin.jacob@caviumnetworks.com, dev@dpdk.org, olivier.matz@6wind.com
> Cc: konstantin.ananyev@intel.com, bruce.richardson@intel.com,
>  jianbo.liu@arm.com, hemant.agrawal@nxp.com, Jia He <hejianet@gmail.com>,
>  jia.he@hxt-semitech.com
> Subject: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()
> X-Mailer: git-send-email 2.7.4
> 
> for the code as follows:
> if (condition)
> 	rte_smp_rmb();
> else
> 	rte_smp_wmb();
> Without this patch, compiler will report this error:
> error: 'else' without a previous 'if'
> 
> Signed-off-by: Jia He <hejianet@gmail.com>
> Signed-off-by: jia.he@hxt-semitech.com

# If both are same person then IMO, one sign-off is enough.
# Make sure the patches are ./devtools/checkpatches.sh and ./devtools/check-git-log.sh
clean
# Add Fixes: tag.
Example:
http://dpdk.org/ml/archives/dev/2017-November/081510.html
Bruce Richardson Nov. 8, 2017, 10:28 a.m. | #2
On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
> for the code as follows:
> if (condition)
> 	rte_smp_rmb();
> else
> 	rte_smp_wmb();
> Without this patch, compiler will report this error:
> error: 'else' without a previous 'if'
> 
> Signed-off-by: Jia He <hejianet@gmail.com>
> Signed-off-by: jia.he@hxt-semitech.com
> ---
>  lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> index 0b70d62..38c3393 100644
> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> @@ -43,8 +43,8 @@ extern "C" {
>  
>  #include "generic/rte_atomic.h"
>  
> -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
>  

Need to remove the trailing ";" I too I think.
Alternatively, to keep the braces, the standard practice is to use
do { ... } while(0)

	Regards,
	/Bruce
Jia He Nov. 9, 2017, 1:22 a.m. | #3
Hi Bruce


On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
> On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
>> for the code as follows:
>> if (condition)
>> 	rte_smp_rmb();
>> else
>> 	rte_smp_wmb();
>> Without this patch, compiler will report this error:
>> error: 'else' without a previous 'if'
>>
>> Signed-off-by: Jia He <hejianet@gmail.com>
>> Signed-off-by: jia.he@hxt-semitech.com
>> ---
>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>> index 0b70d62..38c3393 100644
>> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>> @@ -43,8 +43,8 @@ extern "C" {
>>   
>>   #include "generic/rte_atomic.h"
>>   
>> -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
>> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
>> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
>> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
>>   
> Need to remove the trailing ";" I too I think.
> Alternatively, to keep the braces, the standard practice is to use
> do { ... } while(0)
If trailing ";" is not removed
the code:
if (condition)
     rte_smp_rmb();
else
     anything();

will be like below after precompiling:
if (condition)
     asm volatile("dsb " "ld" : : : "memory");;
else
     anything();
Then, the same error - error: 'else' without a previous 'if'

If you choose do/while(0), yes, no errors from compiler.
But the checkpatch will report

WARNING: Single statement macros should not use a do {} while (0) loop
#11: FILE: lib/librte_eal/common/include/arch/arm/rte_atomic_64.h:46:
+#define dsb(opt) do { asm volatile("dsb " #opt : : : "memory"); } while (0)

I searched the kernel codes, the marco dsb() didn't use the do/while(0).
Which one do you think is better for dpdk?

Cheers,
Jia
Jia He Nov. 9, 2017, 3:14 a.m. | #4
On 11/9/2017 9:22 AM, Jia He Wrote:
> Hi Bruce
>
>
> On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
>> On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
>>> for the code as follows:
>>> if (condition)
>>>     rte_smp_rmb();
>>> else
>>>     rte_smp_wmb();
>>> Without this patch, compiler will report this error:
>>> error: 'else' without a previous 'if'
>>>
>>> Signed-off-by: Jia He <hejianet@gmail.com>
>>> Signed-off-by: jia.he@hxt-semitech.com
>>> ---
>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h 
>>> b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>> index 0b70d62..38c3393 100644
>>> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>> @@ -43,8 +43,8 @@ extern "C" {
>>>     #include "generic/rte_atomic.h"
>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
>>> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
>>> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
>>> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
>> Need to remove the trailing ";" I too I think.
>> Alternatively, to keep the braces, the standard practice is to use
>> do { ... } while(0)
> If trailing ";" is not removed
> the code:
> if (condition)
>     rte_smp_rmb();
> else
>     anything();
>
> will be like below after precompiling:
> if (condition)
>     asm volatile("dsb " "ld" : : : "memory");;
> else
>     anything();
> Then, the same error - error: 'else' without a previous 'if'
>
Ignore my words above,thanks
sorry for the inconvenience.
And I've sent out v4 in this mail thread. The ";" has been removed.
If no more comments, I will send out v5 (2 patch sets for 17 and 18)
Jianbo Liu Nov. 9, 2017, 3:21 a.m. | #5
The 11/09/2017 11:14, Jia He wrote:
>
>
> On 11/9/2017 9:22 AM, Jia He Wrote:
> >Hi Bruce
> >
> >
> >On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
> >>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
> >>>for the code as follows:
> >>>if (condition)
> >>>    rte_smp_rmb();
> >>>else
> >>>    rte_smp_wmb();
> >>>Without this patch, compiler will report this error:
> >>>error: 'else' without a previous 'if'
> >>>
> >>>Signed-off-by: Jia He <hejianet@gmail.com>
> >>>Signed-off-by: jia.he@hxt-semitech.com
> >>>---
> >>>  lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
> >>>  1 file changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>>diff --git
> >>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>index 0b70d62..38c3393 100644
> >>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>@@ -43,8 +43,8 @@ extern "C" {
> >>>    #include "generic/rte_atomic.h"
> >>>  -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
> >>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
> >>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
> >>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
> >>Need to remove the trailing ";" I too I think.
> >>Alternatively, to keep the braces, the standard practice is to use
> >>do { ... } while(0)
> >If trailing ";" is not removed
> >the code:
> >if (condition)
> >    rte_smp_rmb();
> >else
> >    anything();
> >

Sorry, why not use two different functions as your conditions passed in
are fixed in the calling functions.

> >will be like below after precompiling:
> >if (condition)
> >    asm volatile("dsb " "ld" : : : "memory");;
> >else
> >    anything();
> >Then, the same error - error: 'else' without a previous 'if'
> >
> Ignore my words above,thanks
> sorry for the inconvenience.
> And I've sent out v4 in this mail thread. The ";" has been removed.
> If no more comments, I will send out v5 (2 patch sets for 17 and 18)
>
> --
> Cheers,
> Jia
>
>
> --
> Cheers,
> Jia
>

--
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Jia He Nov. 9, 2017, 4:43 a.m. | #6
Hi Jianbo


On 11/9/2017 11:21 AM, Jianbo Liu Wrote:
> The 11/09/2017 11:14, Jia He wrote:
>>
>> On 11/9/2017 9:22 AM, Jia He Wrote:
>>> Hi Bruce
>>>
>>>
>>> On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
>>>> On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
>>>>> for the code as follows:
>>>>> if (condition)
>>>>>      rte_smp_rmb();
>>>>> else
>>>>>      rte_smp_wmb();
>>>>> Without this patch, compiler will report this error:
>>>>> error: 'else' without a previous 'if'
>>>>>
>>>>> Signed-off-by: Jia He <hejianet@gmail.com>
>>>>> Signed-off-by: jia.he@hxt-semitech.com
>>>>> ---
>>>>>    lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
>>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git
>>>>> a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>> b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>> index 0b70d62..38c3393 100644
>>>>> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>> @@ -43,8 +43,8 @@ extern "C" {
>>>>>      #include "generic/rte_atomic.h"
>>>>>    -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
>>>>> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
>>>>> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
>>>>> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
>>>> Need to remove the trailing ";" I too I think.
>>>> Alternatively, to keep the braces, the standard practice is to use
>>>> do { ... } while(0)
>>> If trailing ";" is not removed
>>> the code:
>>> if (condition)
>>>      rte_smp_rmb();
>>> else
>>>      anything();
>>>
> Sorry, why not use two different functions as your conditions passed in
> are fixed in the calling functions.
Do you mean to split update_tail() into update_tail_enqueue() and 
update_tail_dequeue()?
Cheers,
Jia
Jianbo Liu Nov. 9, 2017, 4:56 a.m. | #7
The 11/09/2017 12:43, Jia He wrote:
> Hi Jianbo
>
>
> On 11/9/2017 11:21 AM, Jianbo Liu Wrote:
> >The 11/09/2017 11:14, Jia He wrote:
> >>
> >>On 11/9/2017 9:22 AM, Jia He Wrote:
> >>>Hi Bruce
> >>>
> >>>
> >>>On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
> >>>>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
> >>>>>for the code as follows:
> >>>>>if (condition)
> >>>>>     rte_smp_rmb();
> >>>>>else
> >>>>>     rte_smp_wmb();
> >>>>>Without this patch, compiler will report this error:
> >>>>>error: 'else' without a previous 'if'
> >>>>>
> >>>>>Signed-off-by: Jia He <hejianet@gmail.com>
> >>>>>Signed-off-by: jia.he@hxt-semitech.com
> >>>>>---
> >>>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
> >>>>>   1 file changed, 2 insertions(+), 2 deletions(-)
> >>>>>
> >>>>>diff --git
> >>>>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>index 0b70d62..38c3393 100644
> >>>>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>@@ -43,8 +43,8 @@ extern "C" {
> >>>>>     #include "generic/rte_atomic.h"
> >>>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
> >>>>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
> >>>>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
> >>>>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
> >>>>Need to remove the trailing ";" I too I think.
> >>>>Alternatively, to keep the braces, the standard practice is to use
> >>>>do { ... } while(0)
> >>>If trailing ";" is not removed
> >>>the code:
> >>>if (condition)
> >>>     rte_smp_rmb();
> >>>else
> >>>     anything();
> >>>
> >Sorry, why not use two different functions as your conditions passed in
> >are fixed in the calling functions.
> Do you mean to split update_tail() into update_tail_enqueue() and
> update_tail_dequeue()?

Yes. So it's not need to change dsb/dmb.

Jianbo
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Ananyev, Konstantin Nov. 9, 2017, 9:38 a.m. | #8
> -----Original Message-----

> From: Jianbo Liu [mailto:jianbo.liu@arm.com]

> Sent: Thursday, November 9, 2017 4:56 AM

> To: Jia He <hejianet@gmail.com>

> Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;

> Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com

> Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()

> 

> The 11/09/2017 12:43, Jia He wrote:

> > Hi Jianbo

> >

> >

> > On 11/9/2017 11:21 AM, Jianbo Liu Wrote:

> > >The 11/09/2017 11:14, Jia He wrote:

> > >>

> > >>On 11/9/2017 9:22 AM, Jia He Wrote:

> > >>>Hi Bruce

> > >>>

> > >>>

> > >>>On 11/8/2017 6:28 PM, Bruce Richardson Wrote:

> > >>>>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:

> > >>>>>for the code as follows:

> > >>>>>if (condition)

> > >>>>>     rte_smp_rmb();

> > >>>>>else

> > >>>>>     rte_smp_wmb();

> > >>>>>Without this patch, compiler will report this error:

> > >>>>>error: 'else' without a previous 'if'

> > >>>>>

> > >>>>>Signed-off-by: Jia He <hejianet@gmail.com>

> > >>>>>Signed-off-by: jia.he@hxt-semitech.com

> > >>>>>---

> > >>>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--

> > >>>>>   1 file changed, 2 insertions(+), 2 deletions(-)

> > >>>>>

> > >>>>>diff --git

> > >>>>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > >>>>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > >>>>>index 0b70d62..38c3393 100644

> > >>>>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > >>>>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > >>>>>@@ -43,8 +43,8 @@ extern "C" {

> > >>>>>     #include "generic/rte_atomic.h"

> > >>>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }

> > >>>>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }

> > >>>>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");

> > >>>>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");

> > >>>>Need to remove the trailing ";" I too I think.

> > >>>>Alternatively, to keep the braces, the standard practice is to use

> > >>>>do { ... } while(0)

> > >>>If trailing ";" is not removed

> > >>>the code:

> > >>>if (condition)

> > >>>     rte_smp_rmb();

> > >>>else

> > >>>     anything();

> > >>>

> > >Sorry, why not use two different functions as your conditions passed in

> > >are fixed in the calling functions.

> > Do you mean to split update_tail() into update_tail_enqueue() and

> > update_tail_dequeue()?

> 

> Yes. So it's not need to change dsb/dmb.


That's a good idea - but you still might hit the same problem in 
Some different place in future...
Why not to convert these macros into 'always_inline' functions then?
Konstantin

> 

> Jianbo

> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the

> intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or

> store or copy the information in any medium. Thank you.
Jianbo Liu Nov. 9, 2017, 9:58 a.m. | #9
The 11/09/2017 09:38, Ananyev, Konstantin wrote:
>
>
> > -----Original Message-----
> > From: Jianbo Liu [mailto:jianbo.liu@arm.com]
> > Sent: Thursday, November 9, 2017 4:56 AM
> > To: Jia He <hejianet@gmail.com>
> > Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;
> > Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com
> > Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()
> >
> > The 11/09/2017 12:43, Jia He wrote:
> > > Hi Jianbo
> > >
> > >
> > > On 11/9/2017 11:21 AM, Jianbo Liu Wrote:
> > > >The 11/09/2017 11:14, Jia He wrote:
> > > >>
> > > >>On 11/9/2017 9:22 AM, Jia He Wrote:
> > > >>>Hi Bruce
> > > >>>
> > > >>>
> > > >>>On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
> > > >>>>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
> > > >>>>>for the code as follows:
> > > >>>>>if (condition)
> > > >>>>>     rte_smp_rmb();
> > > >>>>>else
> > > >>>>>     rte_smp_wmb();
> > > >>>>>Without this patch, compiler will report this error:
> > > >>>>>error: 'else' without a previous 'if'
> > > >>>>>
> > > >>>>>Signed-off-by: Jia He <hejianet@gmail.com>
> > > >>>>>Signed-off-by: jia.he@hxt-semitech.com
> > > >>>>>---
> > > >>>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
> > > >>>>>   1 file changed, 2 insertions(+), 2 deletions(-)
> > > >>>>>
> > > >>>>>diff --git
> > > >>>>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> > > >>>>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> > > >>>>>index 0b70d62..38c3393 100644
> > > >>>>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> > > >>>>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> > > >>>>>@@ -43,8 +43,8 @@ extern "C" {
> > > >>>>>     #include "generic/rte_atomic.h"
> > > >>>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
> > > >>>>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
> > > >>>>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
> > > >>>>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
> > > >>>>Need to remove the trailing ";" I too I think.
> > > >>>>Alternatively, to keep the braces, the standard practice is to use
> > > >>>>do { ... } while(0)
> > > >>>If trailing ";" is not removed
> > > >>>the code:
> > > >>>if (condition)
> > > >>>     rte_smp_rmb();
> > > >>>else
> > > >>>     anything();
> > > >>>
> > > >Sorry, why not use two different functions as your conditions passed in
> > > >are fixed in the calling functions.
> > > Do you mean to split update_tail() into update_tail_enqueue() and
> > > update_tail_dequeue()?
> >
> > Yes. So it's not need to change dsb/dmb.
>
> That's a good idea - but you still might hit the same problem in
> Some different place in future...

I think there is no any issue if we add {} for if/else sections.

-       if (enqueue)
+       if (enqueue) {
                rte_smp_wmb();
-       else
+       } else {
                rte_smp_rmb();
+       }

It's not a good way to ommit {}.

Jianbo

> Why not to convert these macros into 'always_inline' functions then?
> Konstantin
>
> >
> > Jianbo
> > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the
> > intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or
> > store or copy the information in any medium. Thank you.

--
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Ananyev, Konstantin Nov. 9, 2017, 10:08 a.m. | #10
> -----Original Message-----

> From: Jianbo Liu [mailto:jianbo.liu@arm.com]

> Sent: Thursday, November 9, 2017 9:58 AM

> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>

> Cc: Jia He <hejianet@gmail.com>; Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org;

> olivier.matz@6wind.com; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com

> Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()

> 

> The 11/09/2017 09:38, Ananyev, Konstantin wrote:

> >

> >

> > > -----Original Message-----

> > > From: Jianbo Liu [mailto:jianbo.liu@arm.com]

> > > Sent: Thursday, November 9, 2017 4:56 AM

> > > To: Jia He <hejianet@gmail.com>

> > > Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;

> > > Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com

> > > Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()

> > >

> > > The 11/09/2017 12:43, Jia He wrote:

> > > > Hi Jianbo

> > > >

> > > >

> > > > On 11/9/2017 11:21 AM, Jianbo Liu Wrote:

> > > > >The 11/09/2017 11:14, Jia He wrote:

> > > > >>

> > > > >>On 11/9/2017 9:22 AM, Jia He Wrote:

> > > > >>>Hi Bruce

> > > > >>>

> > > > >>>

> > > > >>>On 11/8/2017 6:28 PM, Bruce Richardson Wrote:

> > > > >>>>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:

> > > > >>>>>for the code as follows:

> > > > >>>>>if (condition)

> > > > >>>>>     rte_smp_rmb();

> > > > >>>>>else

> > > > >>>>>     rte_smp_wmb();

> > > > >>>>>Without this patch, compiler will report this error:

> > > > >>>>>error: 'else' without a previous 'if'

> > > > >>>>>

> > > > >>>>>Signed-off-by: Jia He <hejianet@gmail.com>

> > > > >>>>>Signed-off-by: jia.he@hxt-semitech.com

> > > > >>>>>---

> > > > >>>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--

> > > > >>>>>   1 file changed, 2 insertions(+), 2 deletions(-)

> > > > >>>>>

> > > > >>>>>diff --git

> > > > >>>>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > > > >>>>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > > > >>>>>index 0b70d62..38c3393 100644

> > > > >>>>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > > > >>>>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> > > > >>>>>@@ -43,8 +43,8 @@ extern "C" {

> > > > >>>>>     #include "generic/rte_atomic.h"

> > > > >>>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }

> > > > >>>>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }

> > > > >>>>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");

> > > > >>>>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");

> > > > >>>>Need to remove the trailing ";" I too I think.

> > > > >>>>Alternatively, to keep the braces, the standard practice is to use

> > > > >>>>do { ... } while(0)

> > > > >>>If trailing ";" is not removed

> > > > >>>the code:

> > > > >>>if (condition)

> > > > >>>     rte_smp_rmb();

> > > > >>>else

> > > > >>>     anything();

> > > > >>>

> > > > >Sorry, why not use two different functions as your conditions passed in

> > > > >are fixed in the calling functions.

> > > > Do you mean to split update_tail() into update_tail_enqueue() and

> > > > update_tail_dequeue()?

> > >

> > > Yes. So it's not need to change dsb/dmb.

> >

> > That's a good idea - but you still might hit the same problem in

> > Some different place in future...

> 

> I think there is no any issue if we add {} for if/else sections.

> 

> -       if (enqueue)

> +       if (enqueue) {

>                 rte_smp_wmb();

> -       else

> +       } else {

>                 rte_smp_rmb();

> +       }

> 

> It's not a good way to ommit {}.


That's the preferred DPDK coding style these days :)
http://dpdk.org/doc/guides-16.04/contributing/coding_style.html
1.6.2. Control Statements and Loops

Include a space after keywords (if, while, for, return, switch).
Do not use braces ({ and }) for control statements with zero or just a single statement, unless that statement is more than a single line in which case the braces are permitted.

Konstantin

> 

> Jianbo

> 

> > Why not to convert these macros into 'always_inline' functions then?

> > Konstantin

> >

> > >

> > > Jianbo

> > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the

> > > intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or

> > > store or copy the information in any medium. Thank you.

> 

> --

> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the

> intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or

> store or copy the information in any medium. Thank you.
Jia He Nov. 10, 2017, 2:06 a.m. | #11
On 11/9/2017 5:38 PM, Ananyev, Konstantin Wrote:
>
>> -----Original Message-----
>> From: Jianbo Liu [mailto:jianbo.liu@arm.com]
>> Sent: Thursday, November 9, 2017 4:56 AM
>> To: Jia He <hejianet@gmail.com>
>> Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;
>> Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com
>> Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()
>>
>> The 11/09/2017 12:43, Jia He wrote:
>>> Hi Jianbo
>>>
>>>
>>> On 11/9/2017 11:21 AM, Jianbo Liu Wrote:
>>>> The 11/09/2017 11:14, Jia He wrote:
>>>>> On 11/9/2017 9:22 AM, Jia He Wrote:
>>>>>> Hi Bruce
>>>>>>
>>>>>>
>>>>>> On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
>>>>>>> On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
>>>>>>>> for the code as follows:
>>>>>>>> if (condition)
>>>>>>>>      rte_smp_rmb();
>>>>>>>> else
>>>>>>>>      rte_smp_wmb();
>>>>>>>> Without this patch, compiler will report this error:
>>>>>>>> error: 'else' without a previous 'if'
>>>>>>>>
>>>>>>>> Signed-off-by: Jia He <hejianet@gmail.com>
>>>>>>>> Signed-off-by: jia.he@hxt-semitech.com
>>>>>>>> ---
>>>>>>>>    lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
>>>>>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>>>>
>>>>>>>> diff --git
>>>>>>>> a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>>>>> b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>>>>> index 0b70d62..38c3393 100644
>>>>>>>> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>>>>> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
>>>>>>>> @@ -43,8 +43,8 @@ extern "C" {
>>>>>>>>      #include "generic/rte_atomic.h"
>>>>>>>>    -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
>>>>>>>> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
>>>>>>>> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
>>>>>>>> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
>>>>>>> Need to remove the trailing ";" I too I think.
>>>>>>> Alternatively, to keep the braces, the standard practice is to use
>>>>>>> do { ... } while(0)
>>>>>> If trailing ";" is not removed
>>>>>> the code:
>>>>>> if (condition)
>>>>>>      rte_smp_rmb();
>>>>>> else
>>>>>>      anything();
>>>>>>
>>>> Sorry, why not use two different functions as your conditions passed in
>>>> are fixed in the calling functions.
>>> Do you mean to split update_tail() into update_tail_enqueue() and
>>> update_tail_dequeue()?
>> Yes. So it's not need to change dsb/dmb.
> That's a good idea - but you still might hit the same problem in
> Some different place in future...
> Why not to convert these macros into 'always_inline' functions then?
> Konstantin
>
It makes things more complex
opt needs to be redefined with types
such as : __attribute__((always_inline)) void dsb( char* opt)
and the input paramenter shoud be
#define sy "sy"
#define ld "ld"

And the "#" in asm codes needs to be considerred more.

IMO, the kernel way is simple and clean, isn't it?
#define dmb(opt) asm volatile("dmb " #opt : : : "memory")
Another choice is adding the do/while.

@Ananyev @Jianbo
Any thoughts?
Jianbo Liu Nov. 10, 2017, 3:09 a.m. | #12
The 11/10/2017 10:06, Jia He wrote:
>
>
> On 11/9/2017 5:38 PM, Ananyev, Konstantin Wrote:
> >
> >>-----Original Message-----
> >>From: Jianbo Liu [mailto:jianbo.liu@arm.com]
> >>Sent: Thursday, November 9, 2017 4:56 AM
> >>To: Jia He <hejianet@gmail.com>
> >>Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;
> >>Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com
> >>Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()
> >>
> >>The 11/09/2017 12:43, Jia He wrote:
> >>>Hi Jianbo
> >>>
> >>>
> >>>On 11/9/2017 11:21 AM, Jianbo Liu Wrote:
> >>>>The 11/09/2017 11:14, Jia He wrote:
> >>>>>On 11/9/2017 9:22 AM, Jia He Wrote:
> >>>>>>Hi Bruce
> >>>>>>
> >>>>>>
> >>>>>>On 11/8/2017 6:28 PM, Bruce Richardson Wrote:
> >>>>>>>On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:
> >>>>>>>>for the code as follows:
> >>>>>>>>if (condition)
> >>>>>>>>     rte_smp_rmb();
> >>>>>>>>else
> >>>>>>>>     rte_smp_wmb();
> >>>>>>>>Without this patch, compiler will report this error:
> >>>>>>>>error: 'else' without a previous 'if'
> >>>>>>>>
> >>>>>>>>Signed-off-by: Jia He <hejianet@gmail.com>
> >>>>>>>>Signed-off-by: jia.he@hxt-semitech.com
> >>>>>>>>---
> >>>>>>>>   lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--
> >>>>>>>>   1 file changed, 2 insertions(+), 2 deletions(-)
> >>>>>>>>
> >>>>>>>>diff --git
> >>>>>>>>a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>>>>b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>>>>index 0b70d62..38c3393 100644
> >>>>>>>>--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>>>>+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
> >>>>>>>>@@ -43,8 +43,8 @@ extern "C" {
> >>>>>>>>     #include "generic/rte_atomic.h"
> >>>>>>>>   -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
> >>>>>>>>-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
> >>>>>>>>+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
> >>>>>>>>+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
> >>>>>>>Need to remove the trailing ";" I too I think.
> >>>>>>>Alternatively, to keep the braces, the standard practice is to use
> >>>>>>>do { ... } while(0)
> >>>>>>If trailing ";" is not removed
> >>>>>>the code:
> >>>>>>if (condition)
> >>>>>>     rte_smp_rmb();
> >>>>>>else
> >>>>>>     anything();
> >>>>>>
> >>>>Sorry, why not use two different functions as your conditions passed in
> >>>>are fixed in the calling functions.
> >>>Do you mean to split update_tail() into update_tail_enqueue() and
> >>>update_tail_dequeue()?
> >>Yes. So it's not need to change dsb/dmb.
> >That's a good idea - but you still might hit the same problem in
> >Some different place in future...
> >Why not to convert these macros into 'always_inline' functions then?
> >Konstantin
> >
> It makes things more complex
> opt needs to be redefined with types
> such as : __attribute__((always_inline)) void dsb( char* opt)
> and the input paramenter shoud be
> #define sy "sy"
> #define ld "ld"
>
> And the "#" in asm codes needs to be considerred more.
>
> IMO, the kernel way is simple and clean, isn't it?
> #define dmb(opt) asm volatile("dmb " #opt : : : "memory")
> Another choice is adding the do/while.
>
> @Ananyev @Jianbo
> Any thoughts?
>

I think it's a good to keep your v4.

Jianbo
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Ananyev, Konstantin Nov. 10, 2017, 10:06 a.m. | #13
Hi Jia,

> -----Original Message-----

> From: Jia He [mailto:hejianet@gmail.com]

> Sent: Friday, November 10, 2017 2:06 AM

> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Jianbo Liu <jianbo.liu@arm.com>

> Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;

> hemant.agrawal@nxp.com; jia.he@hxt-semitech.com

> Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()

> 

> 

> 

> On 11/9/2017 5:38 PM, Ananyev, Konstantin Wrote:

> >

> >> -----Original Message-----

> >> From: Jianbo Liu [mailto:jianbo.liu@arm.com]

> >> Sent: Thursday, November 9, 2017 4:56 AM

> >> To: Jia He <hejianet@gmail.com>

> >> Cc: Richardson, Bruce <bruce.richardson@intel.com>; jerin.jacob@caviumnetworks.com; dev@dpdk.org; olivier.matz@6wind.com;

> >> Ananyev, Konstantin <konstantin.ananyev@intel.com>; hemant.agrawal@nxp.com; jia.he@hxt-semitech.com

> >> Subject: Re: [PATCH 1/3] eal/arm64: remove the braces {} for dmb(),dsb()

> >>

> >> The 11/09/2017 12:43, Jia He wrote:

> >>> Hi Jianbo

> >>>

> >>>

> >>> On 11/9/2017 11:21 AM, Jianbo Liu Wrote:

> >>>> The 11/09/2017 11:14, Jia He wrote:

> >>>>> On 11/9/2017 9:22 AM, Jia He Wrote:

> >>>>>> Hi Bruce

> >>>>>>

> >>>>>>

> >>>>>> On 11/8/2017 6:28 PM, Bruce Richardson Wrote:

> >>>>>>> On Wed, Nov 08, 2017 at 06:17:10AM +0000, Jia He wrote:

> >>>>>>>> for the code as follows:

> >>>>>>>> if (condition)

> >>>>>>>>      rte_smp_rmb();

> >>>>>>>> else

> >>>>>>>>      rte_smp_wmb();

> >>>>>>>> Without this patch, compiler will report this error:

> >>>>>>>> error: 'else' without a previous 'if'

> >>>>>>>>

> >>>>>>>> Signed-off-by: Jia He <hejianet@gmail.com>

> >>>>>>>> Signed-off-by: jia.he@hxt-semitech.com

> >>>>>>>> ---

> >>>>>>>>    lib/librte_eal/common/include/arch/arm/rte_atomic_64.h | 4 ++--

> >>>>>>>>    1 file changed, 2 insertions(+), 2 deletions(-)

> >>>>>>>>

> >>>>>>>> diff --git

> >>>>>>>> a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> >>>>>>>> b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> >>>>>>>> index 0b70d62..38c3393 100644

> >>>>>>>> --- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> >>>>>>>> +++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h

> >>>>>>>> @@ -43,8 +43,8 @@ extern "C" {

> >>>>>>>>      #include "generic/rte_atomic.h"

> >>>>>>>>    -#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }

> >>>>>>>> -#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }

> >>>>>>>> +#define dsb(opt) asm volatile("dsb " #opt : : : "memory");

> >>>>>>>> +#define dmb(opt) asm volatile("dmb " #opt : : : "memory");

> >>>>>>> Need to remove the trailing ";" I too I think.

> >>>>>>> Alternatively, to keep the braces, the standard practice is to use

> >>>>>>> do { ... } while(0)

> >>>>>> If trailing ";" is not removed

> >>>>>> the code:

> >>>>>> if (condition)

> >>>>>>      rte_smp_rmb();

> >>>>>> else

> >>>>>>      anything();

> >>>>>>

> >>>> Sorry, why not use two different functions as your conditions passed in

> >>>> are fixed in the calling functions.

> >>> Do you mean to split update_tail() into update_tail_enqueue() and

> >>> update_tail_dequeue()?

> >> Yes. So it's not need to change dsb/dmb.

> > That's a good idea - but you still might hit the same problem in

> > Some different place in future...

> > Why not to convert these macros into 'always_inline' functions then?

> > Konstantin

> >

> It makes things more complex

> opt needs to be redefined with types

> such as : __attribute__((always_inline)) void dsb( char* opt)

> and the input paramenter shoud be

> #define sy "sy"

> #define ld "ld"

> 

> And the "#" in asm codes needs to be considerred more.

> 

> IMO, the kernel way is simple and clean, isn't it?

> #define dmb(opt) asm volatile("dmb " #opt : : : "memory")


Fine by me.
Konstantin

> Another choice is adding the do/while.

> 

> @Ananyev @Jianbo

> Any thoughts?

> 

> --

> Cheers,

> Jia

Patch

diff --git a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
index 0b70d62..38c3393 100644
--- a/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
+++ b/lib/librte_eal/common/include/arch/arm/rte_atomic_64.h
@@ -43,8 +43,8 @@  extern "C" {
 
 #include "generic/rte_atomic.h"
 
-#define dsb(opt)  { asm volatile("dsb " #opt : : : "memory"); }
-#define dmb(opt)  { asm volatile("dmb " #opt : : : "memory"); }
+#define dsb(opt) asm volatile("dsb " #opt : : : "memory");
+#define dmb(opt) asm volatile("dmb " #opt : : : "memory");
 
 #define rte_mb() dsb(sy)