All of lore.kernel.org
 help / color / mirror / Atom feed
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com,
	jasowang@redhat.com
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Subject: [PATCH 23/28] Drivers: hv: Handle vmbus interrupts concurrently on all cpus
Date: Sat,  1 Dec 2012 06:46:54 -0800	[thread overview]
Message-ID: <1354373219-31374-23-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1354373219-31374-1-git-send-email-kys@microsoft.com>

Vmbus interrupts are unique in that while the interrupt is delivered on a
given vector, these can be handled concurrently on different CPUs. Handle the
vmbus interrupts concurrently on all the CPUs.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
---
 drivers/hv/hv.c        |    2 +-
 drivers/hv/vmbus_drv.c |   21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 363532a..03e6a1e 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -335,7 +335,7 @@ void hv_synic_init(void *irqarg)
 	shared_sint.as_uint64 = 0;
 	shared_sint.vector = irq_vector; /* HV_SHARED_SINT_IDT_VECTOR + 0x20; */
 	shared_sint.masked = false;
-	shared_sint.auto_eoi = false;
+	shared_sint.auto_eoi = true;
 
 	wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 6e4f857..e066d41 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -33,6 +33,7 @@
 #include <acpi/acpi_bus.h>
 #include <linux/completion.h>
 #include <linux/hyperv.h>
+#include <linux/kernel_stat.h>
 #include <asm/hyperv.h>
 #include <asm/hypervisor.h>
 #include "hyperv_vmbus.h"
@@ -501,6 +502,19 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
 }
 
 /*
+ * vmbus interrupt flow handler:
+ * vmbus interrupts can concurrently occur on multiple CPUs and
+ * can be handled concurrently.
+ */
+
+void vmbus_flow_handler(unsigned int irq, struct irq_desc *desc)
+{
+	kstat_incr_irqs_this_cpu(irq, desc);
+
+	desc->action->handler(irq, desc->action->dev_id);
+}
+
+/*
  * vmbus_bus_init -Main vmbus driver initialization routine.
  *
  * Here, we
@@ -535,6 +549,13 @@ static int vmbus_bus_init(int irq)
 		goto err_unregister;
 	}
 
+	/*
+	 * Vmbus interrupts can be handled concurrently on
+	 * different CPUs. Establish an appropriate interrupt flow
+	 * handler that can support this model.
+	 */
+	irq_set_handler(irq, vmbus_flow_handler);
+
 	vector = IRQ0_VECTOR + irq;
 
 	/*
-- 
1.7.4.1


  parent reply	other threads:[~2012-12-01 14:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-01 14:46 [PATCH 00/28] Drivers: hv: Update the Vmbus protocol K. Y. Srinivasan
2012-12-01 14:46 ` [PATCH 01/28] Drivers: hv: Implement routines for read side signaling optimization K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 02/28] Drivers: hv: Add state to manage batched reading K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 03/28] Drivers: hv: Turn off batched reading for util drivers K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 04/28] Drivers: hv: Optimize signaling in the read path K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 05/28] Drivers: hv: Optimize the signaling on the write path K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 06/28] Drivers: hv: Get rid of hv_get_ringbuffer_interrupt_mask() K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 07/28] Drivers: hv: Support handling multiple VMBUS versions K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 08/28] Drivers: hv: Update the ring buffer structure to match win8 functionality K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 09/28] Drivers: hv: Extend/modify vmbus_channel_offer_channel for win7 and beyond K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 10/28] Drivers: hv: Save and export negotiated vmbus version K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 11/28] Drivers: hv: Change the signature for hv_signal_event() K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 12/28] Drivers: hv: Change the signature of vmbus_set_event() K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 13/28] Drivers: hv: Move vmbus version definitions to hyperv.h K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 14/28] Drivers: hv: Manage signaling state on a per-connection basis K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 15/28] Drivers: hv: Cleanup vmbus_set_event() to support win7 and beyond K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 16/28] Drivers: hv: Setup a mapping for Hyper-V's notion cpu ID K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 17/28] Drivers: hv: Add state to manage incoming channel interrupt load K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 18/28] Drivers: hv: Modify the interrupt handling code to support win8 and beyond K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 19/28] Drivers: hv: Add code to distribute channel interrupt load K. Y. Srinivasan
2013-01-17 19:38     ` Greg KH
2013-01-17 21:28       ` KY Srinivasan
2012-12-01 14:46   ` [PATCH 20/28] Drivers: hv: Get rid of the unused global signaling state K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 21/28] Drivers: hv: Get rid of unnecessary request for offers K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 22/28] Drivers: hv: Manage event tasklets on per-cpu basis K. Y. Srinivasan
2012-12-01 14:46   ` K. Y. Srinivasan [this message]
2012-12-01 14:46   ` [PATCH 24/28] Drivers: hv: Add a check to deal with spurious interrupts K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 25/28] Drivers: hv: Enable protocol negotiation with win8 hosts K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 26/28] Drivers: hv: Implement flow management on the send side K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 27/28] Drivers: hv: Capture the host build information K. Y. Srinivasan
2012-12-01 14:46   ` [PATCH 28/28] Drivers: hv: Cleanup and consolidate reporting of build/version info K. Y. Srinivasan
2013-01-17 19:42 ` [PATCH 00/28] Drivers: hv: Update the Vmbus protocol Greg KH

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=1354373219-31374-23-git-send-email-kys@microsoft.com \
    --to=kys@microsoft.com \
    --cc=apw@canonical.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jasowang@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=olaf@aepfle.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.