lkml.org 
[lkml]   [2020]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 052/138] ionic: fix up filter locks and debug msgs
    Date
    From: Shannon Nelson <snelson@pensando.io>

    [ Upstream commit cbec2153a9a68d011454960ba84887e46e40b37d ]

    Add in a couple of forgotten spinlocks and fix up some of
    the debug messages around filter management.

    Fixes: c1e329ebec8d ("ionic: Add management of rx filters")
    Signed-off-by: Shannon Nelson <snelson@pensando.io>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/pensando/ionic/ionic_lif.c | 17 +++++++----------
    .../ethernet/pensando/ionic/ionic_rx_filter.c | 5 +++++
    2 files changed, 12 insertions(+), 10 deletions(-)

    diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    index d5b0bf54f9610..c00ec9a020973 100644
    --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
    @@ -809,8 +809,7 @@ static int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr)
    if (f)
    return 0;

    - netdev_dbg(lif->netdev, "rx_filter add ADDR %pM (id %d)\n", addr,
    - ctx.comp.rx_filter_add.filter_id);
    + netdev_dbg(lif->netdev, "rx_filter add ADDR %pM\n", addr);

    memcpy(ctx.cmd.rx_filter_add.mac.addr, addr, ETH_ALEN);
    err = ionic_adminq_post_wait(lif, &ctx);
    @@ -839,6 +838,9 @@ static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr)
    return -ENOENT;
    }

    + netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n",
    + addr, f->filter_id);
    +
    ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
    ionic_rx_filter_free(lif, f);
    spin_unlock_bh(&lif->rx_filters.lock);
    @@ -847,9 +849,6 @@ static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr)
    if (err)
    return err;

    - netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n", addr,
    - ctx.cmd.rx_filter_del.filter_id);
    -
    return 0;
    }

    @@ -1291,13 +1290,11 @@ static int ionic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
    };
    int err;

    + netdev_dbg(netdev, "rx_filter add VLAN %d\n", vid);
    err = ionic_adminq_post_wait(lif, &ctx);
    if (err)
    return err;

    - netdev_dbg(netdev, "rx_filter add VLAN %d (id %d)\n", vid,
    - ctx.comp.rx_filter_add.filter_id);
    -
    return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, 0, &ctx);
    }

    @@ -1322,8 +1319,8 @@ static int ionic_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
    return -ENOENT;
    }

    - netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n", vid,
    - le32_to_cpu(ctx.cmd.rx_filter_del.filter_id));
    + netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n",
    + vid, f->filter_id);

    ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
    ionic_rx_filter_free(lif, f);
    diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
    index 7a093f148ee58..60cb77e2bab4c 100644
    --- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
    +++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
    @@ -36,10 +36,12 @@ int ionic_rx_filters_init(struct ionic_lif *lif)

    spin_lock_init(&lif->rx_filters.lock);

    + spin_lock_bh(&lif->rx_filters.lock);
    for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
    INIT_HLIST_HEAD(&lif->rx_filters.by_hash[i]);
    INIT_HLIST_HEAD(&lif->rx_filters.by_id[i]);
    }
    + spin_unlock_bh(&lif->rx_filters.lock);

    return 0;
    }
    @@ -51,11 +53,13 @@ void ionic_rx_filters_deinit(struct ionic_lif *lif)
    struct hlist_node *tmp;
    unsigned int i;

    + spin_lock_bh(&lif->rx_filters.lock);
    for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
    head = &lif->rx_filters.by_id[i];
    hlist_for_each_entry_safe(f, tmp, head, by_id)
    ionic_rx_filter_free(lif, f);
    }
    + spin_unlock_bh(&lif->rx_filters.lock);
    }

    int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
    @@ -91,6 +95,7 @@ int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
    f->filter_id = le32_to_cpu(ctx->comp.rx_filter_add.filter_id);
    f->rxq_index = rxq_index;
    memcpy(&f->cmd, ac, sizeof(f->cmd));
    + netdev_dbg(lif->netdev, "rx_filter add filter_id %d\n", f->filter_id);

    INIT_HLIST_NODE(&f->by_hash);
    INIT_HLIST_NODE(&f->by_id);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-07-27 16:36    [W:4.034 / U:0.808 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site