From patchwork Thu Jan 18 02:50:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 862722 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="LGbTJsrD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMT5y42T1z9s83 for ; Thu, 18 Jan 2018 13:52:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753791AbeARCww (ORCPT ); Wed, 17 Jan 2018 21:52:52 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:34479 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753300AbeARCwQ (ORCPT ); Wed, 17 Jan 2018 21:52:16 -0500 Received: by mail-pf0-f195.google.com with SMTP id e76so13128296pfk.1 for ; Wed, 17 Jan 2018 18:52:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JJjJVIdgaK/4hYBuEdKH0v/WFv9gN6Hq7ekaoghouiI=; b=LGbTJsrDEP2Ebyhf3Vs2+QV7jpQDex+3I31s2K82GdF5u+txHuUOup7csIRgR+90Ts +sOoJF/STG39Rdx1cV5Drp0Lb+/+HBf+J474d+1cCvYdLJZ/OTL9SzQQ5/A03x1JMk4L yEVE8EKlj2HoeXBIWamZUtlN1oBoJVqDfEjII/1f09QUckYDKsRfIL90tOozYM+xgT6I MzL8ZnR8lWKryP88YR5qnWowlmNK9n6ZRh6HtH9Tjg4MmPb43K+zlqgdhum9uGl2rvLZ o4YxXM3danSw6XbtQRKgDpCzfgbitthFDP9fAtRcd5RNsIyHNqhgJ8OdXV4D8THCD51T 3SOg== 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=JJjJVIdgaK/4hYBuEdKH0v/WFv9gN6Hq7ekaoghouiI=; b=Poyz2/f8Jsdb294lbnAPEEU18EUb3azKTu5B8693wuVKzj9aH987F9RGPfFnk42z+X cjYvwgHuTxWU3siQiv6KEbDBV69xbg6RByGPYrTV2yvjRuyLoWSr+vekUWdlykzGjiwR Bta3z2xPPlRirojDW2zNK+jXCiMhTQ5A2MVuvKe2soXGIdwGhfcSbDzuQJoZBqhVCh2m oMf9ohvF9/UgSOwMolzXgJ9thWohO8qMIQtc/NXhax3sEjO1/FGMIEdMD98SgIzJMvek toQ1sYbAKVZ7bM4MALFEPdhc+shzLlv/6/BzT+IDxf5RzkuS4dSsjC6bow784ZX0udQl i3Kw== X-Gm-Message-State: AKwxyteIosLpAubhPcUFMlbtuyMCcwxwD9YhQTkU/hd0fz/iiRBXnS9f luSM2RFYyKiVfG2Scz9uZ6ONcw== X-Google-Smtp-Source: ACJfBouj6A57m/T83opDOHDQP3zN+uAcQxy+Eoqw9cELhH3dW40m1D/+BL+9/yoBkCCkD4bBoBbjTg== X-Received: by 10.159.235.141 with SMTP id f13mr16294390plr.215.1516243935692; Wed, 17 Jan 2018 18:52:15 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id q6sm9128026pgv.72.2018.01.17.18.52.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 17 Jan 2018 18:52:15 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 04/12] nfp: add nfp_reprs_get_locked() helper Date: Wed, 17 Jan 2018 18:50:58 -0800 Message-Id: <20180118025106.30427-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180118025106.30427-1-jakub.kicinski@netronome.com> References: <20180118025106.30427-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The write side of repr tables is always done under pf->lock. Add a helper to dereference repr table pointers under protection of that lock. Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe --- drivers/net/ethernet/netronome/nfp/nfp_app.c | 12 ++++++++++-- drivers/net/ethernet/netronome/nfp/nfp_app.h | 2 ++ drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 4 +--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.c b/drivers/net/ethernet/netronome/nfp/nfp_app.c index 955a9f44d244..8ce65d4276b1 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.c @@ -32,6 +32,8 @@ */ #include +#include +#include #include #include @@ -98,14 +100,20 @@ nfp_app_ctrl_msg_alloc(struct nfp_app *app, unsigned int size, gfp_t priority) return skb; } +struct nfp_reprs * +nfp_reprs_get_locked(struct nfp_app *app, enum nfp_repr_type type) +{ + return rcu_dereference_protected(app->reprs[type], + lockdep_is_held(&app->pf->lock)); +} + struct nfp_reprs * nfp_app_reprs_set(struct nfp_app *app, enum nfp_repr_type type, struct nfp_reprs *reprs) { struct nfp_reprs *old; - old = rcu_dereference_protected(app->reprs[type], - lockdep_is_held(&app->pf->lock)); + old = nfp_reprs_get_locked(app, type); rcu_assign_pointer(app->reprs[type], reprs); return old; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.h b/drivers/net/ethernet/netronome/nfp/nfp_app.h index 6a6eb02b516e..91d469a8e3e6 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.h @@ -384,6 +384,8 @@ static inline struct net_device *nfp_app_repr_get(struct nfp_app *app, u32 id) struct nfp_app *nfp_app_from_netdev(struct net_device *netdev); +struct nfp_reprs * +nfp_reprs_get_locked(struct nfp_app *app, enum nfp_repr_type type); struct nfp_reprs * nfp_app_reprs_set(struct nfp_app *app, enum nfp_repr_type type, struct nfp_reprs *reprs); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 317f87cc3cc6..e2452176fa23 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c @@ -424,9 +424,7 @@ int nfp_reprs_resync_phys_ports(struct nfp_app *app) struct nfp_repr *repr; int i; - old_reprs = - rcu_dereference_protected(app->reprs[NFP_REPR_TYPE_PHYS_PORT], - lockdep_is_held(&app->pf->lock)); + old_reprs = nfp_reprs_get_locked(app, NFP_REPR_TYPE_PHYS_PORT); if (!old_reprs) return 0;