Hi,

If elements of the vector are 54 bytes and first is aligned, accessing the 
second one should not generate instructions that assume it is aligned as well. 
So based on that and your description, this is a gcc bug, right? The issue does 
not occur on gcc 6.3, 6.4 but occurs on 7.2.0 and 7.3.1 (and I’ve seen it a 
while ago on 5.x).

Regards,
Radu
From: vpp-dev@lists.fd.io [mailto:vpp-dev@lists.fd.io] On Behalf Of Florin Coras
Sent: Thursday, April 26, 2018 4:13 PM
To: Nicolau, Radu <radu.nico...@intel.com>
Cc: vpp-dev@lists.fd.io
Subject: Re: [vpp-dev] segfault due to movaps unaligned access

Hi Radu,

The problem was that the vector was expected to have cacheline size aligned 
data, but the elements in the vector were not a multiple of a cache line (size 
was 54). As a result, the first element was aligned and the rest were not. The 
vector infra just allocates an aligned chunk of memory, it does not guarantee 
anything with respect to individual element placement.

Hope it helps!

Cheers,
Florin


On Apr 26, 2018, at 1:53 AM, Nicolau, Radu 
<radu.nico...@intel.com<mailto:radu.nico...@intel.com>> wrote:

Hi Florin,

Thanks! The patch fixes the issue.
Any idea why is it happening?

Regards,
Radu

From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> 
[mailto:vpp-dev@lists.fd.io] On Behalf Of Florin Coras
Sent: Tuesday, April 24, 2018 11:25 PM
To: Nicolau, Radu <radu.nico...@intel.com<mailto:radu.nico...@intel.com>>
Cc: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>
Subject: Re: [vpp-dev] segfault due to movaps unaligned access

Hi Radu,

Making the crypto_worker_main_t a full cache line in size (see patch [1]) seems 
to solve the issue. Could you confirm?

Florin

[1] https://gerrit.fd.io/r/#/c/12086/



On Apr 24, 2018, at 9:23 AM, Radu Nicolau 
<radu.nico...@intel.com<mailto:radu.nico...@intel.com>> wrote:

Hello all,

We’re seeing a weird issue, that is a segfault that looks to be caused by a 
movaps instruction that is trying to access an address that is not 16 byte 
aligned.
The call originates from a vec_validate_init_empty_aligned that has the 
argument aligned to 16 bytes.
I have seen something like this in the past, we couldn’t find a root cause and 
considered it a GCC bug (version 5 then), but now it pops up again on version 
7, so probably it isn’t.
Any idea? A snapshot of the gdb screen below.

gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0
https://postimg.cc/image/9jy4p38at/

thanks and I will appreciate any help,
Radu



Reply via email to