From patchwork Mon Jul 20 23:00:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Nelson X-Patchwork-Id: 1332667 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=pensando.io Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=pensando.io header.i=@pensando.io header.a=rsa-sha256 header.s=google header.b=B9Im0OEj; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B9cdZ2hF7z9sTC for ; Tue, 21 Jul 2020 09:00:34 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727037AbgGTXAd (ORCPT ); Mon, 20 Jul 2020 19:00:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726030AbgGTXAa (ORCPT ); Mon, 20 Jul 2020 19:00:30 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B7A2C061794 for ; Mon, 20 Jul 2020 16:00:30 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id j20so9801624pfe.5 for ; Mon, 20 Jul 2020 16:00:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Aw1VCtLQwFy/bRNCot7lwpI/hG+gYM/cfiPxqIs0Atc=; b=B9Im0OEjzDhscP/5gmctJZFma7oDEw7nh8PX8A0zg3AoEe4w/udY2TmjuDNEJPA5XE c3rIjCs5Ril1WVsLtUG8yvy87XbPzIg/kx5kajfSORWZZHdpscfISQQjDOTzjIaav5AL AwAiiHgV/qX0/OZHUe0bnXMxi2jGBQNr3Xagorb7fbEmexDJqchj3MJXJlGSL+W+Ekl/ xJPmvClm6ZEDk7lalq0oZoorg9b+KdzFXdnFIIRHe8gu5EUmtWD21dKcgP6g89gJ3qWh 29HIaVoS2rRe3t6DqFqnvRYqg9axwTPrsiCn/1YOvUuu/vp+zn5nnDwCXx4KNkWjXa8d BVtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Aw1VCtLQwFy/bRNCot7lwpI/hG+gYM/cfiPxqIs0Atc=; b=dLLlETPovnCsAjqr8Sq5Rw9PyoWZflnarkzxD/CAkS4qNWSNoYtH2TmH4JxtoKZlw9 qaC4zOhB0rSwFdI6qTkmq2Z4hLzX3ha97MC0TNDaYQnnO5igGJaKv9oQo6XNOd6Mt2Ty ZIXlu6sA+XRMB2sWk9ooyTtxFuKRVhHMZZbUowdUjQ7EjV9A5RdsH8AzkKt6sMUmvpsD 5dnz3goqaXVD7/okVSCrEixuKWkYfJPve2QVowdnKLHlKp0sQb9PMTzTLv7nnkuTIwIW fEivc6OzeLNhMEB+qKvW2pLUFlH21KFKcCfkfEU+BvV6AiyfpAlivSNL8tFWdtn37dFq sd3w== X-Gm-Message-State: AOAM530NxwvGAbScQuO2r1VZfeoovVst19/XabmNd50nt1naiIsZTr0g bh/Pn2OFkDUNx/MJNCgg2fPQADXIZz0= X-Google-Smtp-Source: ABdhPJxICO5Io5w/LpoO6Vxw31OF3RUgprUaT//qiaw2V/oN8vqp9C6v2J9A4axhPA6eYY0iwuwxhQ== X-Received: by 2002:a63:4b1d:: with SMTP id y29mr20815187pga.264.1595286029435; Mon, 20 Jul 2020 16:00:29 -0700 (PDT) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id n9sm606738pjo.53.2020.07.20.16.00.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2020 16:00:28 -0700 (PDT) From: Shannon Nelson To: netdev@vger.kernel.org, davem@davemloft.net Cc: Shannon Nelson Subject: [PATCH net 1/5] ionic: use offset for ethtool regs data Date: Mon, 20 Jul 2020 16:00:13 -0700 Message-Id: <20200720230017.20419-2-snelson@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200720230017.20419-1-snelson@pensando.io> References: <20200720230017.20419-1-snelson@pensando.io> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Use an offset to write the second half of the regs data into the second half of the buffer instead of overwriting the first half. Fixes: 4d03e00a2140 ("ionic: Add initial ethtool support") Signed-off-by: Shannon Nelson --- drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c index e03ea9b18f95..095561924bdc 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c @@ -103,15 +103,18 @@ static void ionic_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) { struct ionic_lif *lif = netdev_priv(netdev); + unsigned int offset; unsigned int size; regs->version = IONIC_DEV_CMD_REG_VERSION; + offset = 0; size = IONIC_DEV_INFO_REG_COUNT * sizeof(u32); - memcpy_fromio(p, lif->ionic->idev.dev_info_regs->words, size); + memcpy_fromio(p + offset, lif->ionic->idev.dev_info_regs->words, size); + offset += size; size = IONIC_DEV_CMD_REG_COUNT * sizeof(u32); - memcpy_fromio(p, lif->ionic->idev.dev_cmd_regs->words, size); + memcpy_fromio(p + offset, lif->ionic->idev.dev_cmd_regs->words, size); } static int ionic_get_link_ksettings(struct net_device *netdev, From patchwork Mon Jul 20 23:00:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Nelson X-Patchwork-Id: 1332669 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=pensando.io Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=pensando.io header.i=@pensando.io header.a=rsa-sha256 header.s=google header.b=y2cya/SX; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B9cdf0jdqz9sRf for ; Tue, 21 Jul 2020 09:00:38 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727906AbgGTXAf (ORCPT ); Mon, 20 Jul 2020 19:00:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726943AbgGTXAb (ORCPT ); Mon, 20 Jul 2020 19:00:31 -0400 Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3F84C061794 for ; Mon, 20 Jul 2020 16:00:31 -0700 (PDT) Received: by mail-pg1-x543.google.com with SMTP id e8so11030164pgc.5 for ; Mon, 20 Jul 2020 16:00:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FJiUgln0zw/rCfHEe0RyLquX/AQ6TOr/ugaksSmKbDc=; b=y2cya/SX4AKV701Buf96Bx6YS+mQeTC+IUeooniSc4Tf9cG16uz4lwA72f3cEG3Yz+ MrAV1mpPPcdrNohH6kdQ1w+iET4pwhW+C0coRcLHDS7vS2fplJd+lbKpn0D3SL1fIezK WGc0i2R5yGfHgE/797WOOnR4T3PTQAHLY+q/ztIeXwqxqQI/dgZj7vwGhZoKzeWDBDNf JBOddZVgqRaAP91WJ23p85WOz5J335A3/q7GSHy+emAEFzFTj5ibMnczluN1awbr0lzw peB0dsX1wG20x2NcqWA3w6HfxMoL8hLWkxi/DA3JRArW0lq5vSO85aIUctP+l2BTsnhe 76ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FJiUgln0zw/rCfHEe0RyLquX/AQ6TOr/ugaksSmKbDc=; b=r5HgpWV8o2Z7E8KGBEGIZ6lVQodLWAzgnmtWiVXJagc+gLTP990mnE3ur6MjiC1UXY PVLedzSPaaytMGlvLXlaaULBjky7cXZ3U6XEhRsfOpO46Y4efzdunrxfKomUKPhKXzqL 3SpKmZTuQc8g/v7xSIWSIbHN7cyatIXJe1PyEBfZ2cD73sNTYeEGN67S/rlbmFjzi7wX sQPNutkb+sWXqm0f/ievspS8q9b3oH209Uikn9/VML2q2dLV1gX+JqTOXBj1apv+p6qn mRAjG1uJoVxHPoR6l5oYbdaUz/clK2FFuC03GX66XMszHqPFQW1zcPo4XK95B/cEF+EB NSlw== X-Gm-Message-State: AOAM530/QWhsJFHrTmP9r2OcuFmsiOuSH/9QvZMsM6++8yA9nsplIJ2U HddqPESTUTcPjOYRdgbNW9XDIawzfDU= X-Google-Smtp-Source: ABdhPJxCsIsG53yxtnzQuQeCNqSua5eT01JyGnzen4ATR5mSLSK/6gKyMiTVpLEDjJOGJz8/CG4EwQ== X-Received: by 2002:a62:ce88:: with SMTP id y130mr21905202pfg.37.1595286030384; Mon, 20 Jul 2020 16:00:30 -0700 (PDT) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id n9sm606738pjo.53.2020.07.20.16.00.29 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2020 16:00:29 -0700 (PDT) From: Shannon Nelson To: netdev@vger.kernel.org, davem@davemloft.net Cc: Shannon Nelson Subject: [PATCH net 2/5] ionic: fix up filter locks and debug msgs Date: Mon, 20 Jul 2020 16:00:14 -0700 Message-Id: <20200720230017.20419-3-snelson@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200720230017.20419-1-snelson@pensando.io> References: <20200720230017.20419-1-snelson@pensando.io> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- 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 f49486b6d04d..41e86d6b76b6 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c @@ -863,8 +863,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); @@ -893,6 +892,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); @@ -901,9 +903,6 @@ static int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr) if (err && err != -EEXIST) return err; - netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n", addr, - ctx.cmd.rx_filter_del.filter_id); - return 0; } @@ -1351,13 +1350,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); } @@ -1382,8 +1379,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 80eeb7696e01..fb9d828812bd 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c @@ -69,10 +69,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; } @@ -84,11 +86,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, @@ -124,6 +128,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); From patchwork Mon Jul 20 23:00:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Nelson X-Patchwork-Id: 1332668 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=pensando.io Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=pensando.io header.i=@pensando.io header.a=rsa-sha256 header.s=google header.b=dm2Socyc; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B9cdd4Wntz9sRR for ; Tue, 21 Jul 2020 09:00:37 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727951AbgGTXAg (ORCPT ); Mon, 20 Jul 2020 19:00:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726030AbgGTXAd (ORCPT ); Mon, 20 Jul 2020 19:00:33 -0400 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62B97C061794 for ; Mon, 20 Jul 2020 16:00:33 -0700 (PDT) Received: by mail-pg1-x544.google.com with SMTP id n5so11028720pgf.7 for ; Mon, 20 Jul 2020 16:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=E3X5T7MV/sNafEfdlB7eZ+UajG8Py7wFAjMLpUqo8ao=; b=dm2SocycdI5q91q2gQCwuplbKs1iLqbiU1MCOZ7yTxQdkcSCVJSKY9WSs3SroM5ocN s2aJaXSyZ9GNQjYTfox7wSGEEO6KoyZg50rjlRf9SByE4r2+iKqSx0qRJtIinAubzTUB U/gnzJSHQWRdCIeYB+WQQ98xB0I5Rbv0kl/O5aCVrPS2nRaU/pCTHZk5va0NWQhp1CqJ bI1iVOU0lSCsYGUW4Wr3wzw1qxCk/ENlUdQlRhQmZlaUdY/8LBL8Q5bhfLSW8Q3doN8c BteoNj/x4xd1PF026/SFfBd37dcRtVjTZLfu+1uEpVlFxM0OummNx11ns5FmGUx5Cu7n fsAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=E3X5T7MV/sNafEfdlB7eZ+UajG8Py7wFAjMLpUqo8ao=; b=sOK0o56DxZzoimzDlDX0LYhyydl1m/nrQfdmHNgu1CLLBrLhhMa87/Yqzuh7ky9bdi fYkQ7vhxrx6eFz6CyJ3S9zobxVo65O9c2spkChbgSng3PnAYV9KfMP0JbkCIJQSaG30i VoHQnMLfeejnjqV4pndH8fBwh50mfh4BBkmZ5q3HsC6TlXnDAocoP7NVlmG2dbWpuj8G DU+z0tFTRU3Qzg+A3InUho+xC1oISbFUgW9+GchFPhWgSjdievDmxymR042mG2q/JsYL eyU8mKLvpNt9OvD7x7g9xKx8ZE/2Qj5CNO9+2QPGNMpKPEPpQFmUgOwLzE2HAivPVHv4 /w4A== X-Gm-Message-State: AOAM531BRFUAs78FzfAXyJJxFOabUMGBd+UorFg3uMxFBH5KDWACEZ6S 8kZTPnFLa9I2YH3ReIdNlBDHABXlGZ0= X-Google-Smtp-Source: ABdhPJypgnSfn3vK6j3YF26B/SAFDkiQFYUHyB64hrecXnjs6S7adqlbxKCewer1FfFi5BnzgNLlyA== X-Received: by 2002:a62:2ad6:: with SMTP id q205mr21429984pfq.316.1595286031881; Mon, 20 Jul 2020 16:00:31 -0700 (PDT) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id n9sm606738pjo.53.2020.07.20.16.00.30 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2020 16:00:30 -0700 (PDT) From: Shannon Nelson To: netdev@vger.kernel.org, davem@davemloft.net Cc: Shannon Nelson Subject: [PATCH net 3/5] ionic: update filter id after replay Date: Mon, 20 Jul 2020 16:00:15 -0700 Message-Id: <20200720230017.20419-4-snelson@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200720230017.20419-1-snelson@pensando.io> References: <20200720230017.20419-1-snelson@pensando.io> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When we replay the rx filters after a fw-upgrade we get new filter_id values from the FW, which we need to save and update in our local filter list. This allows us to delete the filters with the correct filter_id when we're done. Fixes: 7e4d47596b68 ("ionic: replay filters after fw upgrade") Signed-off-by: Shannon Nelson --- .../ethernet/pensando/ionic/ionic_rx_filter.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c index fb9d828812bd..cd0076fc3044 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c @@ -21,13 +21,16 @@ void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f) void ionic_rx_filter_replay(struct ionic_lif *lif) { struct ionic_rx_filter_add_cmd *ac; + struct hlist_head new_id_list; struct ionic_admin_ctx ctx; struct ionic_rx_filter *f; struct hlist_head *head; struct hlist_node *tmp; + unsigned int key; unsigned int i; int err; + INIT_HLIST_HEAD(&new_id_list); ac = &ctx.cmd.rx_filter_add; for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) { @@ -58,9 +61,30 @@ void ionic_rx_filter_replay(struct ionic_lif *lif) ac->mac.addr); break; } + spin_lock_bh(&lif->rx_filters.lock); + ionic_rx_filter_free(lif, f); + spin_unlock_bh(&lif->rx_filters.lock); + + continue; } + + /* remove from old id list, save new id in tmp list */ + spin_lock_bh(&lif->rx_filters.lock); + hlist_del(&f->by_id); + spin_unlock_bh(&lif->rx_filters.lock); + f->filter_id = le32_to_cpu(ctx.comp.rx_filter_add.filter_id); + hlist_add_head(&f->by_id, &new_id_list); } } + + /* rebuild the by_id hash lists with the new filter ids */ + spin_lock_bh(&lif->rx_filters.lock); + hlist_for_each_entry_safe(f, tmp, &new_id_list, by_id) { + key = f->filter_id & IONIC_RX_FILTER_HLISTS_MASK; + head = &lif->rx_filters.by_id[key]; + hlist_add_head(&f->by_id, head); + } + spin_unlock_bh(&lif->rx_filters.lock); } int ionic_rx_filters_init(struct ionic_lif *lif) From patchwork Mon Jul 20 23:00:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Nelson X-Patchwork-Id: 1332671 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=pensando.io Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=pensando.io header.i=@pensando.io header.a=rsa-sha256 header.s=google header.b=pq+yiVK1; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B9cdk51VBz9sSy for ; Tue, 21 Jul 2020 09:00:42 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728002AbgGTXAl (ORCPT ); Mon, 20 Jul 2020 19:00:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50290 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727042AbgGTXAd (ORCPT ); Mon, 20 Jul 2020 19:00:33 -0400 Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AABF9C0619D2 for ; Mon, 20 Jul 2020 16:00:33 -0700 (PDT) Received: by mail-pf1-x441.google.com with SMTP id 1so9803774pfn.9 for ; Mon, 20 Jul 2020 16:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hgGJxNpxNWjIMuIZiMd01yWl7Sc2S5Kf3lt0Xgc4yUQ=; b=pq+yiVK1TX8pphNl+PYePvucprTa3zdzyMbWcTp0fSEvHySs/4ipydJs4PAXEw833G JV+o2dySitWZYLBvZYIS8bjnogpmV4Ld6lVTbVV6mJyn5F3Q6tWmNKmkUfX8CESXmS5s W6PuaxaH+LLty25xLLLuBrNDT+mDzhQcldWk6q1kHpYldTHROQbN2hCiJByxMDEn0zZl B8z6SF3Ucu/Aor3jwHHesdH+Kj3P5O/t/7J+AuTPUk+nCJS1JVqMSx0VquLq2I0rGq1J 7Zi1VeS73fY/5Mi4aIROq4zicUnRZ9QasSgca36D3yfSBirqLNMF70S1FO6/10WqPR9a l0ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hgGJxNpxNWjIMuIZiMd01yWl7Sc2S5Kf3lt0Xgc4yUQ=; b=DlywdGoz9kWj4HtSyuLES8p3Moq/+02ea4UPb8tEQKCl/y+jnkSAOdj67vbgFxXp/5 YLdZw4ELTnBJfq0B1ptPiN38htdLhB6rgVkO1eDBwDPb0loPViSJ6KSqhJX/fXB96mCS 9FvBcw8U2Qw+rzCb9fe+hlAsoWRGarJezrJavnVbmf1UP81W3f9FPk8I9D2w3so44jc2 4sEj9xDedTVeq5ATFfNCXyVsoiFLVMqywfOPTf+GQTNWKgQmcTQ33nkNP4m0d1+H2oz0 d/tDwmrAAMj/9fWl0yPQQsr0PKLVNjlIHS/ddvpcJvLDNSVL4MEsvf6IE1uMjLIIo8AU 0Fcg== X-Gm-Message-State: AOAM5304/uVJqb5jmqOp9frqFE/6BttrE+ZAuFz92wU8mUVnAAkWGzx3 +54Hl7x4THk2wuXe/70R9lGpL95hFmc= X-Google-Smtp-Source: ABdhPJz387FSd08CtI2X0IEQ3WC1dI1ONjkNsQ8abotSUWVElwRMdDL5HmOkaBANqRHF159R0Y03Kg== X-Received: by 2002:a63:d1f:: with SMTP id c31mr19510950pgl.27.1595286032952; Mon, 20 Jul 2020 16:00:32 -0700 (PDT) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id n9sm606738pjo.53.2020.07.20.16.00.32 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2020 16:00:32 -0700 (PDT) From: Shannon Nelson To: netdev@vger.kernel.org, davem@davemloft.net Cc: Shannon Nelson Subject: [PATCH net 4/5] ionic: keep rss hash after fw update Date: Mon, 20 Jul 2020 16:00:16 -0700 Message-Id: <20200720230017.20419-5-snelson@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200720230017.20419-1-snelson@pensando.io> References: <20200720230017.20419-1-snelson@pensando.io> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make sure the RSS hash key is kept across a fw update by not de-initing it when an update is happening. Fixes: c672412f6172 ("ionic: remove lifs on fw reset") Signed-off-by: Shannon Nelson --- drivers/net/ethernet/pensando/ionic/ionic_lif.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c index 41e86d6b76b6..ddb9ad5b294c 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c @@ -2277,11 +2277,10 @@ static void ionic_lif_deinit(struct ionic_lif *lif) cancel_work_sync(&lif->deferred.work); cancel_work_sync(&lif->tx_timeout_work); ionic_rx_filters_deinit(lif); + if (lif->netdev->features & NETIF_F_RXHASH) + ionic_lif_rss_deinit(lif); } - if (lif->netdev->features & NETIF_F_RXHASH) - ionic_lif_rss_deinit(lif); - napi_disable(&lif->adminqcq->napi); ionic_lif_qcq_deinit(lif, lif->notifyqcq); ionic_lif_qcq_deinit(lif, lif->adminqcq); From patchwork Mon Jul 20 23:00:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Nelson X-Patchwork-Id: 1332670 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=pensando.io Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=pensando.io header.i=@pensando.io header.a=rsa-sha256 header.s=google header.b=Qg4clEJf; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B9cdg2l5qz9sRR for ; Tue, 21 Jul 2020 09:00:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728000AbgGTXAi (ORCPT ); Mon, 20 Jul 2020 19:00:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727052AbgGTXAf (ORCPT ); Mon, 20 Jul 2020 19:00:35 -0400 Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0080CC061794 for ; Mon, 20 Jul 2020 16:00:34 -0700 (PDT) Received: by mail-pl1-x641.google.com with SMTP id q17so9375785pls.9 for ; Mon, 20 Jul 2020 16:00:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pensando.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mgf+Qy2LLyBQyvF7dW8j1WQ5+w2Idp48bbdEhTIkIJ4=; b=Qg4clEJfq2HrSGHZi3gd6dW3t1uT62M5UdUdezMbIUmgTLJEJtTwSkqZw7WBm6wrlw j4+weYFmPqGl1DsI9/T3utVFhAqVDTch3oDtKTPjEQXOKawVdJt1BKfmMP2dES9nt3xC Sy5rpKdFX748UtAFkR22LS7VY2Mee/fxf/xRvyO3gqGFA8rg+PfkyNYlbQuO4+iM8K39 ye4ZeQAR1foykotHpDO3HYPkKFskL0lr13NJDpHjqU7NrBhsLT43bYW1GqlbKcV/3pUS fGpvJGGsoQwd1e7CyqRwb4U5B5+eUwoTfkH1gOH6I1hWcLvpUgaZwvOEz0LTn6+blIC3 BTNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mgf+Qy2LLyBQyvF7dW8j1WQ5+w2Idp48bbdEhTIkIJ4=; b=IdoH0P2kLzyEMZRtD2XXg9D7+0nlMJWzYSt0WYV9M6xh0lJMXZ5LJIqffj8IjNnIt6 CGMzRiRiPOzL5KgqzQeL/aV8wgro5L5wd5tJE/tE1qML9KuTVos7/wHY51ascpT+HTDN 09GHl6rLxrl8b1MHvvjq6u/tTd7EZdUwEgQTGJt27mSrhgIGQLb7FbOoR9DXHhc3e7p0 YYvYeMoSG/t11Iz3njfNFn+NaVX5auqfSvdkZl8TaV4ooB3pT5/jzqQiLxvFszg506tr 1Vc4o5mRPjFlNMT9vLrpFBj9cgbXkqcCTh7PVFoVyKwtzyYhHOoWptm/AaqgiItNNjSu PmaA== X-Gm-Message-State: AOAM531YXauEMx1zoLzgtvuT5IeBQMMEkIoCSNQljusT3/AK7A7feBNf /NwJkXTYf4lWAw78ViiLOpKuagAUjUM= X-Google-Smtp-Source: ABdhPJwoak47SbNb2+biX+NUhC1lHIsdVzmo7bNxSc6b/Kg1Vc4ZjnRCt+tzZ2nIdGk4GUTtuOz/ug== X-Received: by 2002:a17:90b:1b4e:: with SMTP id nv14mr1708720pjb.30.1595286034096; Mon, 20 Jul 2020 16:00:34 -0700 (PDT) Received: from driver-dev1.pensando.io ([12.226.153.42]) by smtp.gmail.com with ESMTPSA id n9sm606738pjo.53.2020.07.20.16.00.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2020 16:00:33 -0700 (PDT) From: Shannon Nelson To: netdev@vger.kernel.org, davem@davemloft.net Cc: Shannon Nelson Subject: [PATCH net 5/5] ionic: use mutex to protect queue operations Date: Mon, 20 Jul 2020 16:00:17 -0700 Message-Id: <20200720230017.20419-6-snelson@pensando.io> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200720230017.20419-1-snelson@pensando.io> References: <20200720230017.20419-1-snelson@pensando.io> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The ionic_wait_on_bit_lock() was a open-coded mutex knock-off used only for protecting the queue reset operations, and there was no reason not to use the real thing. We can use the lock more correctly and to better protect the queue stop and start operations from cross threading. We can also remove a useless and expensive bit operation from the Rx path. This fixes a case found where the link_status_check from a link flap could run into an MTU change and cause a crash. Fixes: beead698b173 ("ionic: Add the basic NDO callbacks for netdev support") Signed-off-by: Shannon Nelson --- .../net/ethernet/pensando/ionic/ionic_lif.c | 28 +++++++++++-------- .../net/ethernet/pensando/ionic/ionic_lif.h | 8 +----- .../net/ethernet/pensando/ionic/ionic_txrx.c | 6 ---- 3 files changed, 17 insertions(+), 25 deletions(-) diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c index ddb9ad5b294c..5fd31ba56937 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c @@ -96,8 +96,7 @@ static void ionic_link_status_check(struct ionic_lif *lif) u16 link_status; bool link_up; - if (!test_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state) || - test_bit(IONIC_LIF_F_QUEUE_RESET, lif->state)) + if (!test_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state)) return; link_status = le16_to_cpu(lif->info->status.link_status); @@ -114,16 +113,22 @@ static void ionic_link_status_check(struct ionic_lif *lif) netif_carrier_on(netdev); } - if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev)) + if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev)) { + mutex_lock(&lif->queue_lock); ionic_start_queues(lif); + mutex_unlock(&lif->queue_lock); + } } else { if (netif_carrier_ok(netdev)) { netdev_info(netdev, "Link down\n"); netif_carrier_off(netdev); } - if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev)) + if (lif->netdev->flags & IFF_UP && netif_running(lif->netdev)) { + mutex_lock(&lif->queue_lock); ionic_stop_queues(lif); + mutex_unlock(&lif->queue_lock); + } } clear_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state); @@ -1990,16 +1995,13 @@ int ionic_reset_queues(struct ionic_lif *lif, ionic_reset_cb cb, void *arg) bool running; int err = 0; - err = ionic_wait_for_bit(lif, IONIC_LIF_F_QUEUE_RESET); - if (err) - return err; - + mutex_lock(&lif->queue_lock); running = netif_running(lif->netdev); if (running) { netif_device_detach(lif->netdev); err = ionic_stop(lif->netdev); if (err) - goto reset_out; + return err; } if (cb) @@ -2009,9 +2011,7 @@ int ionic_reset_queues(struct ionic_lif *lif, ionic_reset_cb cb, void *arg) err = ionic_open(lif->netdev); netif_device_attach(lif->netdev); } - -reset_out: - clear_bit(IONIC_LIF_F_QUEUE_RESET, lif->state); + mutex_unlock(&lif->queue_lock); return err; } @@ -2158,7 +2158,9 @@ static void ionic_lif_handle_fw_down(struct ionic_lif *lif) if (test_bit(IONIC_LIF_F_UP, lif->state)) { dev_info(ionic->dev, "Surprise FW stop, stopping queues\n"); + mutex_lock(&lif->queue_lock); ionic_stop_queues(lif); + mutex_unlock(&lif->queue_lock); } if (netif_running(lif->netdev)) { @@ -2285,6 +2287,7 @@ static void ionic_lif_deinit(struct ionic_lif *lif) ionic_lif_qcq_deinit(lif, lif->notifyqcq); ionic_lif_qcq_deinit(lif, lif->adminqcq); + mutex_destroy(&lif->queue_lock); ionic_lif_reset(lif); } @@ -2461,6 +2464,7 @@ static int ionic_lif_init(struct ionic_lif *lif) return err; lif->hw_index = le16_to_cpu(comp.hw_index); + mutex_init(&lif->queue_lock); /* now that we have the hw_index we can figure out our doorbell page */ lif->dbid_count = le32_to_cpu(lif->ionic->ident.dev.ndbpgs_per_lif); diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.h b/drivers/net/ethernet/pensando/ionic/ionic_lif.h index ed126dd74e01..8dc2c5d77424 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.h +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.h @@ -135,7 +135,6 @@ enum ionic_lif_state_flags { IONIC_LIF_F_SW_DEBUG_STATS, IONIC_LIF_F_UP, IONIC_LIF_F_LINK_CHECK_REQUESTED, - IONIC_LIF_F_QUEUE_RESET, IONIC_LIF_F_FW_RESET, /* leave this as last */ @@ -165,6 +164,7 @@ struct ionic_lif { unsigned int hw_index; unsigned int kern_pid; u64 __iomem *kern_dbpage; + struct mutex queue_lock; /* lock for queue structures */ spinlock_t adminq_lock; /* lock for AdminQ operations */ struct ionic_qcq *adminqcq; struct ionic_qcq *notifyqcq; @@ -213,12 +213,6 @@ struct ionic_lif { #define lif_to_txq(lif, i) (&lif_to_txqcq((lif), i)->q) #define lif_to_rxq(lif, i) (&lif_to_txqcq((lif), i)->q) -/* return 0 if successfully set the bit, else non-zero */ -static inline int ionic_wait_for_bit(struct ionic_lif *lif, int bitname) -{ - return wait_on_bit_lock(lif->state, bitname, TASK_INTERRUPTIBLE); -} - static inline u32 ionic_coal_usec_to_hw(struct ionic *ionic, u32 usecs) { u32 mult = le32_to_cpu(ionic->ident.dev.intr_coal_mult); diff --git a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c index b7f900c11834..85eb8f276a37 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c @@ -161,12 +161,6 @@ static void ionic_rx_clean(struct ionic_queue *q, return; } - /* no packet processing while resetting */ - if (unlikely(test_bit(IONIC_LIF_F_QUEUE_RESET, q->lif->state))) { - stats->dropped++; - return; - } - stats->pkts++; stats->bytes += le16_to_cpu(comp->len);