lkml.org 
[lkml]   [2021]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 018/122] igb: handle vlan types with checker enabled
    Date
    From: Jesse Brandeburg <jesse.brandeburg@intel.com>

    [ Upstream commit c7cbfb028b95360403d579c47aaaeef1ff140964 ]

    The sparse build (C=2) finds some issues with how the driver
    dealt with the (very difficult) hardware that in some generations
    uses little-endian, and in others uses big endian, for the VLAN
    field. The code as written picks __le16 as a type and for some
    hardware revisions we override it to __be16 as done in this
    patch. This impacted the VF driver as well so fix it there too.

    Also change the vlan_tci assignment to override the sparse
    warning without changing functionality.

    Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
    Tested-by: Dave Switzer <david.switzer@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/intel/igb/igb_main.c | 5 +++--
    drivers/net/ethernet/intel/igbvf/netdev.c | 4 ++--
    2 files changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
    index 7a4e2b014dd6..c37f0590b3a4 100644
    --- a/drivers/net/ethernet/intel/igb/igb_main.c
    +++ b/drivers/net/ethernet/intel/igb/igb_main.c
    @@ -2651,7 +2651,8 @@ static int igb_parse_cls_flower(struct igb_adapter *adapter,
    }

    input->filter.match_flags |= IGB_FILTER_FLAG_VLAN_TCI;
    - input->filter.vlan_tci = match.key->vlan_priority;
    + input->filter.vlan_tci =
    + (__force __be16)match.key->vlan_priority;
    }
    }

    @@ -8255,7 +8256,7 @@ static void igb_process_skb_fields(struct igb_ring *rx_ring,

    if (igb_test_staterr(rx_desc, E1000_RXDEXT_STATERR_LB) &&
    test_bit(IGB_RING_FLAG_RX_LB_VLAN_BSWAP, &rx_ring->flags))
    - vid = be16_to_cpu(rx_desc->wb.upper.vlan);
    + vid = be16_to_cpu((__force __be16)rx_desc->wb.upper.vlan);
    else
    vid = le16_to_cpu(rx_desc->wb.upper.vlan);

    diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
    index 0f2b68f4bb0f..77cb2ab7dab4 100644
    --- a/drivers/net/ethernet/intel/igbvf/netdev.c
    +++ b/drivers/net/ethernet/intel/igbvf/netdev.c
    @@ -83,14 +83,14 @@ static int igbvf_desc_unused(struct igbvf_ring *ring)
    static void igbvf_receive_skb(struct igbvf_adapter *adapter,
    struct net_device *netdev,
    struct sk_buff *skb,
    - u32 status, u16 vlan)
    + u32 status, __le16 vlan)
    {
    u16 vid;

    if (status & E1000_RXD_STAT_VP) {
    if ((adapter->flags & IGBVF_FLAG_RX_LB_VLAN_BSWAP) &&
    (status & E1000_RXDEXT_STATERR_LB))
    - vid = be16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;
    + vid = be16_to_cpu((__force __be16)vlan) & E1000_RXD_SPC_VLAN_MASK;
    else
    vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;
    if (test_bit(vid, adapter->active_vlans))
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-15 20:42    [W:4.042 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site