diff mbox

openpgm: Blacklist Blackfin ADI 2014R1 toolchain

Message ID 1425754315-524-1-git-send-email-romain.naour@openwide.fr
State Accepted
Headers show

Commit Message

Romain Naour March 7, 2015, 6:51 p.m. UTC
Openpgm requires compiler intrinsics not available with Blackfin ADI toolchains.

Fixes:
http://autobuild.buildroot.net/results/394/394cf96cc0ab9029e5baa84b19e2b4d7a553f077/

Signed-off-by: Romain Naour <romain.naour@openwide.fr>
---
 package/openpgm/Config.in | 1 +
 1 file changed, 1 insertion(+)

Comments

Thomas Petazzoni March 8, 2015, 7:53 a.m. UTC | #1
Dear Romain Naour,

On Sat,  7 Mar 2015 19:51:55 +0100, Romain Naour wrote:
> Openpgm requires compiler intrinsics not available with Blackfin ADI toolchains.
> 
> Fixes:
> http://autobuild.buildroot.net/results/394/394cf96cc0ab9029e5baa84b19e2b4d7a553f077/
> 
> Signed-off-by: Romain Naour <romain.naour@openwide.fr>
> ---
>  package/openpgm/Config.in | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/package/openpgm/Config.in b/package/openpgm/Config.in
> index 3a26212..8d03c84 100644
> --- a/package/openpgm/Config.in
> +++ b/package/openpgm/Config.in
> @@ -1,6 +1,7 @@
>  config BR2_PACKAGE_OPENPGM
>  	bool "openpgm"
>  	# The following toolchains lack required compiler intrinsics
> +	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
>  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
>  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
>  	depends on BR2_TOOLCHAIN_HAS_THREADS

When you add a new dependency to a symbol, you need to propagate this
dependency to the other symbols select that one. In this specific case,
zeromq PGM support was selecting openpgm, so you need to replicate this
dependency. I've applied after fixing that.

Also, at some point, we will need to really on the ARCH_HAS_ATOMICS
stuff for this.

Best regards,

Thomas
Romain Naour March 8, 2015, 4:43 p.m. UTC | #2
Hi Thomas,

Le 08/03/2015 08:53, Thomas Petazzoni a écrit :
> Dear Romain Naour,
> 
> On Sat,  7 Mar 2015 19:51:55 +0100, Romain Naour wrote:
>> Openpgm requires compiler intrinsics not available with Blackfin ADI toolchains.
>>
>> Fixes:
>> http://autobuild.buildroot.net/results/394/394cf96cc0ab9029e5baa84b19e2b4d7a553f077/
>>
>> Signed-off-by: Romain Naour <romain.naour@openwide.fr>
>> ---
>>  package/openpgm/Config.in | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/package/openpgm/Config.in b/package/openpgm/Config.in
>> index 3a26212..8d03c84 100644
>> --- a/package/openpgm/Config.in
>> +++ b/package/openpgm/Config.in
>> @@ -1,6 +1,7 @@
>>  config BR2_PACKAGE_OPENPGM
>>  	bool "openpgm"
>>  	# The following toolchains lack required compiler intrinsics
>> +	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
>>  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
>>  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
>>  	depends on BR2_TOOLCHAIN_HAS_THREADS
> 
> When you add a new dependency to a symbol, you need to propagate this
> dependency to the other symbols select that one. In this specific case,
> zeromq PGM support was selecting openpgm, so you need to replicate this
> dependency. I've applied after fixing that.

Ah yes, thanks.
I completely forgot to check that :/

> 
> Also, at some point, we will need to really on the ARCH_HAS_ATOMICS
> stuff for this.
really -> rely

You mean BR2_ARCH_HAS_ATOMICS ?
But it's set by default for bfin configs.

If I understand correctly, you want to move those "denpends on" to Config.in.bfin:

config BR2_ARCH_HAS_ATOMICS
  	# The following toolchains lack required compiler intrinsics
	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
  	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
	default y

I can cook a patch to do that.

Best regards,
Romain

> 
> Best regards,
> 
> Thomas
>
Thomas Petazzoni March 8, 2015, 5:30 p.m. UTC | #3
Dear Romain Naour,

On Sun, 08 Mar 2015 17:43:48 +0100, Romain Naour wrote:

> > Also, at some point, we will need to really on the ARCH_HAS_ATOMICS
> > stuff for this.
> really -> rely

Right. But it's not a commit log, so do we care about typos ? :-)

> You mean BR2_ARCH_HAS_ATOMICS ?
> But it's set by default for bfin configs.

Yes. Back when we introduced BR2_ARCH_HAS_ATOMICS, but wondered whether
it should be BR2_ARCH_HAS_ATOMICS or BR2_TOOLCHAIN_HAS_ATOMICS, i.e
whether we would have the case of an architecture that does support
atomic intrinsics, but has certain toolchain versions for this
architecture that do not.

I don't remember if we carefully check whether Blackfin has atomic
intrinsics or not.

> config BR2_ARCH_HAS_ATOMICS
>   	# The following toolchains lack required compiler intrinsics
> 	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
> 	default y

Nope. We first need to find out whether the Blackfin architecture has
what's needed to provide atomic intrinsics. Depending on that, we'll
now if it's a toolchain limitation or not.

Best regards,

Thomas
Romain Naour March 12, 2015, 9:47 p.m. UTC | #4
Hello Thomas,

Le 08/03/2015 18:30, Thomas Petazzoni a écrit :
> Dear Romain Naour,
> 
> On Sun, 08 Mar 2015 17:43:48 +0100, Romain Naour wrote:
> 
>>> Also, at some point, we will need to really on the ARCH_HAS_ATOMICS
>>> stuff for this.
>> really -> rely
> 
> Right. But it's not a commit log, so do we care about typos ? :-)

:)

> 
>> You mean BR2_ARCH_HAS_ATOMICS ?
>> But it's set by default for bfin configs.
> 
> Yes. Back when we introduced BR2_ARCH_HAS_ATOMICS, but wondered whether
> it should be BR2_ARCH_HAS_ATOMICS or BR2_TOOLCHAIN_HAS_ATOMICS, i.e
> whether we would have the case of an architecture that does support
> atomic intrinsics, but has certain toolchain versions for this
> architecture that do not.

I remember to have read something about that on the ml.

Yann said in the commit log:
"The fact that atomic operations are available is not really a
specificity of the toolchain, but rather of the architecture."

> 
> I don't remember if we carefully check whether Blackfin has atomic
> intrinsics or not.

I don't know, the commit enabling BR2_ARCH_HAS_ATOMICS on bfin said nothing
about that. Yann do you remember ?

> 
>> config BR2_ARCH_HAS_ATOMICS
>>   	# The following toolchains lack required compiler intrinsics
>> 	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
>>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
>>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
>> 	default y
> 
> Nope. We first need to find out whether the Blackfin architecture has
> what's needed to provide atomic intrinsics. Depending on that, we'll
> now if it's a toolchain limitation or not.

I'm not sure but blackfin seems to have some (one?) atomic instruction(s):

http://www.analog.com/media/en/dsp-documentation/processor-manuals/ADSP-BF539_HRM_rev03.pdf
"The processor provides a single atomic operation: TESTSET"

http://blackfin.uclinux.org/doku.php?id=toolchain:application_binary_interface
"The Blackfin does not have an atomic 64 bit load/store instruction"

Best regards,
Romain
> 
> Best regards,
> 
> Thomas
>
Thomas Petazzoni March 13, 2015, 6:25 a.m. UTC | #5
Dear Romain Naour,

On Thu, 12 Mar 2015 22:47:54 +0100, Romain Naour wrote:

> Yann said in the commit log:
> "The fact that atomic operations are available is not really a
> specificity of the toolchain, but rather of the architecture."

That is correct, but you could imagine, on an architecture that does
have atomic operations, a compiler version that does not implement the
corresponding compiler intrinsics.

Back then, we decided to not support such situations, because it was
making the handling of this atomic operation support too complicated.

> >> config BR2_ARCH_HAS_ATOMICS
> >>   	# The following toolchains lack required compiler intrinsics
> >> 	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
> >>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
> >>   	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
> >> 	default y
> > 
> > Nope. We first need to find out whether the Blackfin architecture has
> > what's needed to provide atomic intrinsics. Depending on that, we'll
> > now if it's a toolchain limitation or not.
> 
> I'm not sure but blackfin seems to have some (one?) atomic instruction(s):
> 
> http://www.analog.com/media/en/dsp-documentation/processor-manuals/ADSP-BF539_HRM_rev03.pdf
> "The processor provides a single atomic operation: TESTSET"
> 
> http://blackfin.uclinux.org/doku.php?id=toolchain:application_binary_interface
> "The Blackfin does not have an atomic 64 bit load/store instruction"

What we need to check is if more recent versions of gcc on Blackfin do
have the atomic intrinsics available. If not, when we can simply decide
to set BR2_ARCH_HAS_ATOMICS to false on Blackfin. If however some more
recent gcc versions for Blackfin do have those instructions, then we
will have to handle a toolchain-level criteria to decide whether atomic
operations are available or not.

Best regards,

Thomas
diff mbox

Patch

diff --git a/package/openpgm/Config.in b/package/openpgm/Config.in
index 3a26212..8d03c84 100644
--- a/package/openpgm/Config.in
+++ b/package/openpgm/Config.in
@@ -1,6 +1,7 @@ 
 config BR2_PACKAGE_OPENPGM
 	bool "openpgm"
 	# The following toolchains lack required compiler intrinsics
+	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2014R1
 	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1
 	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2
 	depends on BR2_TOOLCHAIN_HAS_THREADS