• Dean Jenkins's avatar
    asix: Tidy-up 32-bit header word synchronisation · 3bfc69ab
    Dean Jenkins authored
    Tidy-up the Data header 32-bit word synchronisation logic in
    asix_rx_fixup_internal() by removing redundant logic tests.
    
    The code is looking at the following cases of the Data header
    32-bit word that is present before each Ethernet frame:
    
    a) all 32 bits of the Data header word are in the URB socket buffer
    b) first 16 bits of the Data header word are at the end of the URB
       socket buffer
    c) last 16 bits of the Data header word are at the start of the URB
       socket buffer eg. split_head = true
    
    Note that the lifetime of rx->split_head exists outside of the
    function call and is accessed per processing of each URB. Therefore,
    split_head being true acts on the next URB to be processed.
    
    To check for b) the offset will be 16 bits (2 bytes) from the end of
    the buffer then indicate split_head is true.
    To check for c) split_head must be true because the first 16 bits
    have been found.
    To check for a) else c)
    
    Note that the || logic of the old code included the state
    (skb->len - offset == sizeof(u16) && rx->split_head) which is not
    possible because the split_head cannot be true whilst checking for b).
    This is because the split_head indicates that the first 16 bits have
    been found and that is not possible whilst checking for the first 16
    bits. Therefore simplify the logic.
    Signed-off-by: default avatarDean Jenkins <Dean_Jenkins@mentor.com>
    Signed-off-by: default avatarMark Craske <Mark_Craske@mentor.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3bfc69ab
asix_common.c 14.8 KB