discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Bug in volk on armv6


From: Tom Rondeau
Subject: Re: [Discuss-gnuradio] Bug in volk on armv6
Date: Tue, 16 Jul 2013 10:40:35 -0400

On Thu, Jul 4, 2013 at 4:13 AM, Alexey Bazhin <address@hidden> wrote:
> Confirming that this fix works.
>
> But now volk test fails in another place.
>
> (gdb) run
> Starting program: /root/gnuradio-3.6.5.1/build/volk/lib/test_all
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library
> "/lib/arm-linux-gnueabihf/libthread_db.so.1". Running 92 test cases...
> Using Volk machine: generic_orc
> RUN_VOLK_TESTS: volk_16ic_s32f_deinterleave_real_32f_a
> no architectures to test
> RUN_VOLK_TESTS: volk_16ic_deinterleave_real_8i_a
> generic completed in 0s
> orc completed in 0.01s
> Best arch: generic
> RUN_VOLK_TESTS: volk_16ic_deinterleave_16i_x2_a
> generic completed in 0s
> orc completed in 0s
> Best arch: generic
> RUN_VOLK_TESTS: volk_16ic_s32f_deinterleave_32f_x2_a
> generic completed in 0.01s
>
> Program received signal SIGSEGV, Segmentation fault.
> 0xb6f96428 in ?? () from /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0
> (gdb) bt
> #0  0xb6f96428 in ?? ()
> #from /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0
> Cannot access memory at address 0x0
> #1  0xb6db3da0 in pthread_mutex_unlock ()
> #from /lib/arm-linux-gnueabihf/libc.so.6 2  0x00000020 in ?? ()
> #3  0x00000020 in ?? ()
> Backtrace stopped: previous frame identical to this frame (corrupt
> stack?)
>
> P.S. I'm trying to compile gnuradio on raspbian on Raspberry Pi board.
> All other tests passed ok, so some broken volk function shouldn't be a
> problem for me since I only want to use network sink on it.

Hi Alexey,

Yeah, you shouldn't care too much about Volk on the Raspberry Pi since
there's nothing optimized for that platform. You just need to make
sure all call to Volk work using the 'generic' proto-kernels (in other
words, you need Volk because we use functions from the library in GNU
Radio, but you won't access any of the SIMD-optimized versions of the
code).

To learn more about the QA failure above, it'd be better to build with
debug symbols on (-DCMAKE_BUILD_TYPE="Debug") to get more information
out of that back trace.

Tom



> On Wed, 3 Jul 2013 10:55:06 -0400
> Tom Rondeau <address@hidden> wrote:
>
>> On Mon, Jul 1, 2013 at 4:08 AM, Alexey Bazhin <address@hidden> wrote:
>> > Hi!
>> >
>> > I would like to report a bug in volk on armv6.
>> >
>> > There is infinite "while" cycle in volk/tmpl/volk_cpu.tmpl.c
>> > function "has_neon" (line 111).
>> >
>> > Code "while(!found_neon && auxvec_f) {" will loop infinitely if
>> > there is no neon in platform. found_neon will never be true and file
>> > descriptor auxvec_f will always be true.
>> >
>> > --
>> > Alexey Bazhin <address@hidden>
>>
>> Ok, I see your point. Looks like we should be testing the return value
>> from fread, instead of auxvec_f. Can you confirm if this patch works?
>>
>> diff --git a/volk/tmpl/volk_cpu.tmpl.c b/volk/tmpl/volk_cpu.tmpl.c
>> index 81fc679..b1a0a4a 100644
>> --- a/volk/tmpl/volk_cpu.tmpl.c
>> +++ b/volk/tmpl/volk_cpu.tmpl.c
>> @@ -116,10 +116,11 @@ static int has_neon(void){
>>      auxvec_f = fopen("/proc/self/auxv", "rb");
>>      if(!auxvec_f) return 0;
>>
>> +    size_t r = 1;
>>      //so auxv is basically 32b of ID and 32b of value
>>      //so it goes like this
>> -    while(!found_neon && auxvec_f) {
>> -      fread(auxvec, sizeof(unsigned long), 2, auxvec_f);
>> +    while(!found_neon && r) {
>> +      r = fread(auxvec, sizeof(unsigned long), 2, auxvec_f);
>>        if((auxvec[0] == AT_HWCAP) && (auxvec[1] & HWCAP_NEON))
>>          found_neon = 1;
>>      }
>>
>> Or might be better to test 'if(r < 2)' after the fread line and break
>> in case an error occurs and we only get 1 character out and not try to
>> read from it again. Probably not a bit deal since we're only reading
>> in two chars at a time.
>>
>> Tom
>
>
> --
> Alexey Bazhin <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]