• shamir rabinovitch's avatar
    IB/mlx4: Fix unaligned access in send_reply_to_slave · 04ef0f1a
    shamir rabinovitch authored
    The problem is that the function 'send_reply_to_slave' gets the
    'req_sa_mad' as a pointer whose address is only aliged to 4 bytes
    but is 8 bytes in size.  This can result in unaligned access faults
    on certain architectures.
    
    Sowmini Varadhan pointed to this reply from Dave Miller that say
    that memcpy should not be used to solve alignment issues:
    https://lkml.org/lkml/2015/10/21/352
    
    Optimization of memcpy to 'ldx' instruction can only happen if the
    compiler knows that the size of the data we are copying is 8 bytes
    and it assumes it is aligned to 8 bytes. If the compiler know the
    type is not aligned to 8 it must not optimize the 8 byte copy.
    Defining the data type as aligned to 4 forces the compiler to treat
    all accesses as though they aren't aligned and avoids the 'ldx'
    optimization.
    
    Full credit for the idea goes to Jason Gunthorpe
    <jgunthorpe@obsidianresearch.com>.
    Signed-off-by: default avatarShamir Rabinovitch <shamir.rabinovitch@oracle.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    04ef0f1a
mcg.c 35.2 KB