From patchwork Thu Apr 14 16:19:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 610520 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3qm5Vf0gVmz9t3n for ; Fri, 15 Apr 2016 02:20:10 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b=kwRLMh/V; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932946AbcDNQT7 (ORCPT ); Thu, 14 Apr 2016 12:19:59 -0400 Received: from mail-wm0-f50.google.com ([74.125.82.50]:36673 "EHLO mail-wm0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964851AbcDNQTz (ORCPT ); Thu, 14 Apr 2016 12:19:55 -0400 Received: by mail-wm0-f50.google.com with SMTP id v188so227627844wme.1 for ; Thu, 14 Apr 2016 09:19:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ynZ1v9KgysxZ9OFH+z3hXrEFHiB9ICdoVr5kn3TX9VI=; b=kwRLMh/V97nYnRkUJJ+EiRmbOI+ueRUhD47COJUDeKDwq21mhvXys6kXR0iFiHltf2 TXO4/D7bpSrT1x/Qm/4xt7yTvKxfsDSVDIimj/oS74qff2OAuqgRWzWBZQmRW0HpeQM6 qxWlBgHvq5pwclQR39drKarG4WLkFUEAvHfY6oo8IzcG+5sxNTYIyPX2B/Y1rnizhNz3 KqJ/MU7Nm9fB5Neh9mFDzXsstMLm9BHtzrZwXbKq8kiDTQsYc8Kc8oLckc3bvwEkjRiI vFO4fhGKhjLW8/CD0VZhWxRf0ucZZS967EtHdDh4UtYchvFrGSSvEf+kydZAk/mjGZul /S0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ynZ1v9KgysxZ9OFH+z3hXrEFHiB9ICdoVr5kn3TX9VI=; b=S6xSG7xexQnvi0B/K1kCKu8+/of4tLn6oMrlYdYJFP7zD9ENl+Mv/BkepRNX/C0xOe lbO1Fu/z9Vmd8McXIRMFmcx8U2TCeW7lfWpaPK7+vqLKj7vWLSoah8MLU3f/g7KYBAVD nid9k9LWSGn9bsJxilBttgZqpzkOkZSf+G0QbffqL0zlMQQYpP1zWbFvWNafYhyp5BY4 2cVgD1s4x6JXeIPtLt0L0TGGF3/CWswwrmMRzPw3RlbufD4I7nTcYHXeuTQ2JWo6GUYR cX76v/eNDP2Q+il4mmBFwvSO2dcKP8ASwwk3EzovLkMMO2vXENXY9U0C3/3vyNvIdVHu t14w== X-Gm-Message-State: AD7BkJKZKGvpZizwvdClNLnNRECNouLdvzq3gP++WMbTGBrmc7BjhOPkx1Kvc0qCpKDFuw== X-Received: by 10.28.182.194 with SMTP id g185mr38992987wmf.41.1460650793887; Thu, 14 Apr 2016 09:19:53 -0700 (PDT) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id i206sm34072108wmf.1.2016.04.14.09.19.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Apr 2016 09:19:53 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, yotamg@mellanox.com, ogerlitz@mellanox.com, roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com, jhs@mojatatu.com, john.fastabend@gmail.com, rami.rosen@intel.com, gospo@cumulusnetworks.com, stephen@networkplumber.org, sfeldma@gmail.com Subject: [patch net-next 16/18] mlxsw: core: Add mlxsw specific workqueue and use it for FDB notif. processing Date: Thu, 14 Apr 2016 18:19:28 +0200 Message-Id: <1460650770-19382-17-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1460650770-19382-1-git-send-email-jiri@resnulli.us> References: <1460650770-19382-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Follow-up patch is going to need to use delayed work as well and frequently. The FDB notification processing is already using that and also quite frequently. It makes sense to create separate workqueue just for mlxsw driver in this case and do not pollute system_wq. Signed-off-by: Jiri Pirko Reviewed-by: Ido Schimmel --- drivers/net/ethernet/mellanox/mlxsw/core.c | 25 ++++++++++++++++++++-- drivers/net/ethernet/mellanox/mlxsw/core.h | 3 +++ .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 4 ++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c index 63a9777..a14e422 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -73,6 +74,8 @@ static const char mlxsw_core_driver_name[] = "mlxsw_core"; static struct dentry *mlxsw_core_dbg_root; +static struct workqueue_struct *mlxsw_wq; + struct mlxsw_core_pcpu_stats { u64 trap_rx_packets[MLXSW_TRAP_ID_MAX]; u64 trap_rx_bytes[MLXSW_TRAP_ID_MAX]; @@ -1575,17 +1578,35 @@ int mlxsw_cmd_exec(struct mlxsw_core *mlxsw_core, u16 opcode, u8 opcode_mod, } EXPORT_SYMBOL(mlxsw_cmd_exec); +int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay) +{ + return queue_delayed_work(mlxsw_wq, dwork, delay); +} +EXPORT_SYMBOL(mlxsw_core_schedule_dw); + static int __init mlxsw_core_module_init(void) { - mlxsw_core_dbg_root = debugfs_create_dir(mlxsw_core_driver_name, NULL); - if (!mlxsw_core_dbg_root) + int err; + + mlxsw_wq = create_workqueue(mlxsw_core_driver_name); + if (!mlxsw_wq) return -ENOMEM; + mlxsw_core_dbg_root = debugfs_create_dir(mlxsw_core_driver_name, NULL); + if (!mlxsw_core_dbg_root) { + err = -ENOMEM; + goto err_debugfs_create_dir; + } return 0; + +err_debugfs_create_dir: + destroy_workqueue(mlxsw_wq); + return err; } static void __exit mlxsw_core_module_exit(void) { debugfs_remove_recursive(mlxsw_core_dbg_root); + destroy_workqueue(mlxsw_wq); } module_init(mlxsw_core_module_init); diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h index 377dacc..b41ebf8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core.h +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h @@ -43,6 +43,7 @@ #include #include #include +#include #include #include "trap.h" @@ -151,6 +152,8 @@ int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, struct net_device *dev, bool split, u32 split_group); void mlxsw_core_port_fini(struct mlxsw_core_port *mlxsw_core_port); +int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay); + #define MLXSW_CONFIG_PROFILE_SWID_COUNT 8 struct mlxsw_swid_config { diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index e1c74ef..fb9efb8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -1430,8 +1430,8 @@ static void mlxsw_sp_fdb_notify_rec_process(struct mlxsw_sp *mlxsw_sp, static void mlxsw_sp_fdb_notify_work_schedule(struct mlxsw_sp *mlxsw_sp) { - schedule_delayed_work(&mlxsw_sp->fdb_notify.dw, - msecs_to_jiffies(mlxsw_sp->fdb_notify.interval)); + mlxsw_core_schedule_dw(&mlxsw_sp->fdb_notify.dw, + msecs_to_jiffies(mlxsw_sp->fdb_notify.interval)); } static void mlxsw_sp_fdb_notify_work(struct work_struct *work)