netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
To: davem@davemloft.net
Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com>,
	netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com,
	jogreene@redhat.com, Jacob Keller <jacob.e.keller@intel.com>
Subject: [net-next 15/25] fm10k: use separate workqueue for fm10k driver
Date: Tue, 14 Apr 2015 16:51:01 -0700	[thread overview]
Message-ID: <1429055471-401-16-git-send-email-jeffrey.t.kirsher@intel.com> (raw)
In-Reply-To: <1429055471-401-1-git-send-email-jeffrey.t.kirsher@intel.com>

Since we run the watchdog periodically, which might take a while and
potentially monopolize the system default workqueue, create our own
separate work queue. This also helps reduce and stabilize latency
between scheduling the work in our interrupt and actually performing
the work. Still use a timer for the regular scheduled interval but
queue the work onto its own work queue.

It seemed overkill to create a single workqueue per interface, so we
just spawn a single work queue for all interfaces upon driver load. For
this reason, use a multi-threaded workqueue with one thread per
processor, rather than single threaded queue.

Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Acked-by: Matthew Vick <matthew.vick@intel.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
---
 drivers/net/ethernet/intel/fm10k/fm10k.h      |  3 +++
 drivers/net/ethernet/intel/fm10k/fm10k_main.c | 12 ++++++++++++
 drivers/net/ethernet/intel/fm10k/fm10k_pci.c  |  2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index b45f797..c8c8c5b 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -235,6 +235,9 @@ struct fm10k_vxlan_port {
 	__be16			port;
 };
 
+/* one work queue for entire driver */
+extern struct workqueue_struct *fm10k_workqueue;
+
 struct fm10k_intfc {
 	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 	struct net_device *netdev;
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
index 5022a45..1e08832 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
@@ -41,6 +41,9 @@ MODULE_DESCRIPTION("Intel(R) Ethernet Switch Host Interface Driver");
 MODULE_LICENSE("GPL");
 MODULE_VERSION(DRV_VERSION);
 
+/* single workqueue for entire fm10k driver */
+struct workqueue_struct *fm10k_workqueue = NULL;
+
 /**
  * fm10k_init_module - Driver Registration Routine
  *
@@ -52,6 +55,10 @@ static int __init fm10k_init_module(void)
 	pr_info("%s - version %s\n", fm10k_driver_string, fm10k_driver_version);
 	pr_info("%s\n", fm10k_copyright);
 
+	/* create driver workqueue */
+	if (!fm10k_workqueue)
+		fm10k_workqueue = create_workqueue("fm10k");
+
 	fm10k_dbg_init();
 
 	return fm10k_register_pci_driver();
@@ -69,6 +76,11 @@ static void __exit fm10k_exit_module(void)
 	fm10k_unregister_pci_driver();
 
 	fm10k_dbg_exit();
+
+	/* destroy driver workqueue */
+	flush_workqueue(fm10k_workqueue);
+	destroy_workqueue(fm10k_workqueue);
+	fm10k_workqueue = NULL;
 }
 module_exit(fm10k_exit_module);
 
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
index 64ea734..514f35c 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
@@ -94,7 +94,7 @@ void fm10k_service_event_schedule(struct fm10k_intfc *interface)
 {
 	if (!test_bit(__FM10K_SERVICE_DISABLE, &interface->state) &&
 	    !test_and_set_bit(__FM10K_SERVICE_SCHED, &interface->state))
-		schedule_work(&interface->service_task);
+		queue_work(fm10k_workqueue, &interface->service_task);
 }
 
 static void fm10k_service_event_complete(struct fm10k_intfc *interface)
-- 
1.9.3

  parent reply	other threads:[~2015-04-14 23:51 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-14 23:50 [net-next 00/25][pull request] Intel Wired LAN Driver Updates 2015-04-14 Jeff Kirsher
2015-04-14 23:50 ` [net-next 01/25] fm10k: Corrected an error in Tx statistics Jeff Kirsher
2015-04-14 23:50 ` [net-next 02/25] fm10k: Remove redundant rx_errors in ethtool Jeff Kirsher
2015-04-14 23:50 ` [net-next 03/25] fm10k: Correct spelling mistake Jeff Kirsher
2015-04-14 23:50 ` [net-next 04/25] fm10k: Have the VF get the default VLAN during init Jeff Kirsher
2015-04-14 23:50 ` [net-next 05/25] fm10k: Add netconsole support Jeff Kirsher
2015-04-14 23:50 ` [net-next 06/25] fm10k: fix unused warnings Jeff Kirsher
2015-04-14 23:50 ` [net-next 07/25] fm10k: allow creation of VLAN on default vid Jeff Kirsher
2015-04-14 23:50 ` [net-next 08/25] fm10k: only show actual queues, not the maximum in hardware Jeff Kirsher
2015-04-14 23:50 ` [net-next 09/25] fm10k: use hw->mac.max_queues for stats Jeff Kirsher
2015-04-14 23:50 ` [net-next 10/25] fm10k: separate PF only stats so that VF does not display them Jeff Kirsher
2015-04-14 23:50 ` [net-next 11/25] fm10k: remove extraneous "Reset interface" message Jeff Kirsher
2015-04-14 23:50 ` [net-next 12/25] fm10k: only increment tx_timeout_count in Tx hang path Jeff Kirsher
2015-04-14 23:50 ` [net-next 13/25] fm10k: expose tx_timeout_count as an ethtool stat Jeff Kirsher
2015-04-14 23:51 ` [net-next 14/25] fm10k: Set PF queues to unlimited bandwidth during virtualization Jeff Kirsher
2015-04-14 23:51 ` Jeff Kirsher [this message]
2015-04-14 23:51 ` [net-next 16/25] fm10k: don't handle mailbox events in iov_event path and always process mailbox Jeff Kirsher
2015-04-14 23:51 ` [net-next 17/25] fm10k: comment next_vf_mbx flow Jeff Kirsher
2015-04-14 23:51 ` [net-next 18/25] fm10k: fix function header comment Jeff Kirsher
2015-04-14 23:51 ` [net-next 19/25] fm10k: start service timer on probe Jeff Kirsher
2015-04-14 23:51 ` [net-next 20/25] fm10k: update xcast mode before synchronizing multicast addresses Jeff Kirsher
2015-04-14 23:51 ` [net-next 21/25] fm10k: renamed mbx_tx_dropped to mbx_tx_oversized Jeff Kirsher
2015-04-14 23:51 ` [net-next 22/25] fm10k: reset head instead of calling update_max_size Jeff Kirsher
2015-04-14 23:51 ` [net-next 23/25] fm10k: mbx_update_max_size does not drop all oversized messages Jeff Kirsher
2015-04-14 23:51 ` [net-next 24/25] fm10k: corrected VF multicast update Jeff Kirsher
2015-04-14 23:51 ` [net-next 25/25] fm10k: Bump driver version to 0.15.2 Jeff Kirsher
2015-04-15  2:38 ` [net-next 00/25][pull request] Intel Wired LAN Driver Updates 2015-04-14 David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1429055471-401-16-git-send-email-jeffrey.t.kirsher@intel.com \
    --to=jeffrey.t.kirsher@intel.com \
    --cc=davem@davemloft.net \
    --cc=jacob.e.keller@intel.com \
    --cc=jogreene@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=nhorman@redhat.com \
    --cc=sassmann@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).