• Maciej Fijalkowski's avatar
    ice: fix truesize operations for PAGE_SIZE >= 8192 · d53d4dcc
    Maciej Fijalkowski authored
    When working on multi-buffer packet on arch that has PAGE_SIZE >= 8192,
    truesize is calculated and stored in xdp_buff::frame_sz per each
    processed Rx buffer. This means that frame_sz will contain the truesize
    based on last received buffer, but commit 1dc1a7e7 ("ice:
    Centrallize Rx buffer recycling") assumed this value will be constant
    for each buffer, which breaks the page recycling scheme and mess up the
    way we update the page::page_offset.
    
    To fix this, let us work on constant truesize when PAGE_SIZE >= 8192
    instead of basing this on size of a packet read from Rx descriptor. This
    way we can simplify the code and avoid calculating truesize per each
    received frame and on top of that when using
    xdp_update_skb_shared_info(), current formula for truesize update will
    be valid.
    
    This means ice_rx_frame_truesize() can be removed altogether.
    Furthermore, first call to it within ice_clean_rx_irq() for 4k PAGE_SIZE
    was redundant as xdp_buff::frame_sz is initialized via xdp_init_buff()
    in ice_vsi_cfg_rxq(). This should have been removed at the point where
    xdp_buff struct started to be a member of ice_rx_ring and it was no
    longer a stack based variable.
    
    There are two fixes tags as my understanding is that the first one
    exposed us to broken truesize and page_offset handling and then second
    introduced broken skb_shared_info update in ice_{construct,build}_skb().
    Reported-and-tested-by: default avatarLuiz Capitulino <luizcap@redhat.com>
    Closes: https://lore.kernel.org/netdev/8f9e2a5c-fd30-4206-9311-946a06d031bb@redhat.com/
    Fixes: 1dc1a7e7 ("ice: Centrallize Rx buffer recycling")
    Fixes: 2fba7dc5 ("ice: Add support for XDP multi-buffer on Rx side")
    Signed-off-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    d53d4dcc
ice_base.c 31.8 KB