All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Clean up and enable MSI support for assigned device(v2)
@ 2008-10-08  8:38 Sheng Yang
  2008-10-08  8:38 ` [PATCH 1/4] Separate update irq to a single function Sheng Yang
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Sheng Yang @ 2008-10-08  8:38 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

Hi, Avi

Here is the update of MSI support. The main change is to move
kvm_register_irq_ack_notifier() to common code rather than keep it in
update_irq(), for it's the basic request of assigned device.

Thanks!
--
regards
Yang, Sheng

^ permalink raw reply	[flat|nested] 10+ messages in thread
* [PATCH 1/4] Separate update irq to a single function
@ 2008-09-26  5:17 Sheng Yang
  0 siblings, 0 replies; 10+ messages in thread
From: Sheng Yang @ 2008-09-26  5:17 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm, Weidong", Allen M", Sheng Yang


Signed-off-by: Sheng Yang <sheng.yang@intel.com>
---
 arch/x86/kvm/x86.c |   78 ++++++++++++++++++++++++++++------------------------
 1 files changed, 42 insertions(+), 36 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index b9d15f7..43fb049 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -205,6 +205,42 @@ static void kvm_free_all_assigned_devices(struct kvm *kvm)
 	}
 }
 
+static int assigned_device_update_irq(struct kvm *kvm,
+			struct kvm_assigned_dev_kernel *assigned_dev,
+			struct kvm_assigned_irq *assigned_irq)
+{
+	if (assigned_dev->irq_requested) {
+		assigned_dev->guest_irq = assigned_irq->guest_irq;
+		assigned_dev->ack_notifier.gsi = assigned_irq->guest_irq;
+		return 0;
+	}
+	if (irqchip_in_kernel(kvm)) {
+		if (!capable(CAP_SYS_RAWIO))
+			return -EPERM;
+
+		if (assigned_irq->host_irq)
+			assigned_dev->host_irq = assigned_irq->host_irq;
+		else
+			assigned_dev->host_irq = assigned_dev->dev->irq;
+		assigned_dev->guest_irq = assigned_irq->guest_irq;
+		assigned_dev->ack_notifier.gsi = assigned_irq->guest_irq;
+		assigned_dev->ack_notifier.irq_acked = kvm_assigned_dev_ack_irq;
+		kvm_register_irq_ack_notifier(kvm, &assigned_dev->ack_notifier);
+
+		/* Even though this is PCI, we don't want to use shared
+		 * interrupts. Sharing host devices with guest-assigned devices
+		 * on the same interrupt line is not a happy situation: there
+		 * are going to be long delays in accepting, acking, etc.
+		 */
+		if (request_irq(assigned_dev->host_irq, kvm_assigned_dev_intr,
+				0, "kvm_assigned_device", (void *)assigned_dev))
+			return -EIO;
+	}
+	assigned_dev->irq_requested = true;
+
+	return 0;
+}
+
 static int kvm_vm_ioctl_assign_irq(struct kvm *kvm,
 				   struct kvm_assigned_irq
 				   *assigned_irq)
@@ -221,44 +257,14 @@ static int kvm_vm_ioctl_assign_irq(struct kvm *kvm,
 		return -EINVAL;
 	}
 
-	if (match->irq_requested) {
-		match->guest_irq = assigned_irq->guest_irq;
-		match->ack_notifier.gsi = assigned_irq->guest_irq;
-		mutex_unlock(&kvm->lock);
-		return 0;
-	}
-
-	INIT_WORK(&match->interrupt_work,
-		  kvm_assigned_dev_interrupt_work_handler);
-
-	if (irqchip_in_kernel(kvm)) {
-		if (!capable(CAP_SYS_RAWIO)) {
-			r = -EPERM;
-			goto out_release;
-		}
-
-		if (assigned_irq->host_irq)
-			match->host_irq = assigned_irq->host_irq;
-		else
-			match->host_irq = match->dev->irq;
-		match->guest_irq = assigned_irq->guest_irq;
-		match->ack_notifier.gsi = assigned_irq->guest_irq;
-		match->ack_notifier.irq_acked = kvm_assigned_dev_ack_irq;
-		kvm_register_irq_ack_notifier(kvm, &match->ack_notifier);
+	if (!match->irq_requested)
+		INIT_WORK(&match->interrupt_work,
+				kvm_assigned_dev_interrupt_work_handler);
 
-		/* Even though this is PCI, we don't want to use shared
-		 * interrupts. Sharing host devices with guest-assigned devices
-		 * on the same interrupt line is not a happy situation: there
-		 * are going to be long delays in accepting, acking, etc.
-		 */
-		if (request_irq(match->host_irq, kvm_assigned_dev_intr, 0,
-				"kvm_assigned_device", (void *)match)) {
-			r = -EIO;
-			goto out_release;
-		}
-	}
+	r = assigned_device_update_irq(kvm, match, assigned_irq);
+	if (r)
+		goto out_release;
 
-	match->irq_requested = true;
 	mutex_unlock(&kvm->lock);
 	return r;
 out_release:
-- 
1.5.4.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-10-08 10:28 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-08  8:38 [PATCH 0/4] Clean up and enable MSI support for assigned device(v2) Sheng Yang
2008-10-08  8:38 ` [PATCH 1/4] Separate update irq to a single function Sheng Yang
2008-10-08 10:27   ` Sheng Yang
2008-10-08  8:38 ` [PATCH 2/4] KVM: x86: Replace irq_requested with guest_intr_type Sheng Yang
2008-10-08  8:38 ` [PATCH 3/4] x86: Add MSI delivery mode mask Sheng Yang
2008-10-08  8:48   ` Zhang, Xiantao
2008-10-08  8:52     ` Sheng Yang
2008-10-08  9:06       ` Zhang, Xiantao
2008-10-08  8:38 ` [PATCH 4/4] KVM: Enable MSI for device assignment Sheng Yang
  -- strict thread matches above, loose matches on Subject: below --
2008-09-26  5:17 [PATCH 1/4] Separate update irq to a single function Sheng Yang

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.