diff mbox

[01/16] kvm: ioctl for KVM_ASSIGN_DEV_IRQ and KVM_DEASSIGN_DEV_IRQ

Message ID 1236865019-30321-2-git-send-email-sheng@linux.intel.com (mailing list archive)
State Superseded
Headers show

Commit Message

Sheng Yang March 12, 2009, 1:36 p.m. UTC
From: Marcelo Tosatti <mtosatti@redhat.com>


Signed-off-by: Sheng Yang <sheng@linux.intel.com>
---
 libkvm/libkvm.c |   38 +++++++++++++++++++++++++++++++++++++-
 libkvm/libkvm.h |   21 +++++++++++++++++----
 2 files changed, 54 insertions(+), 5 deletions(-)

Comments

Sheng Yang March 12, 2009, 1:40 p.m. UTC | #1
On Thursday 12 March 2009 21:36:44 Sheng Yang wrote:
> From: Marcelo Tosatti <mtosatti@redhat.com>
>
> Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Oops.. Should be Marcelo's signed-off here...
Avi Kivity March 16, 2009, 9:04 a.m. UTC | #2
Sheng Yang wrote:
> On Thursday 12 March 2009 21:36:44 Sheng Yang wrote:
>   
>> From: Marcelo Tosatti <mtosatti@redhat.com>
>>
>> Signed-off-by: Sheng Yang <sheng@linux.intel.com>
>>     
> Oops.. Should be Marcelo's signed-off here...
>   

Should be both.  If you are forwarding someone else's patch, even with 
no changes, you still need to add your signoff.
Sheng Yang March 16, 2009, 9:11 a.m. UTC | #3
On Monday 16 March 2009 17:04:19 Avi Kivity wrote:
> Sheng Yang wrote:
> > On Thursday 12 March 2009 21:36:44 Sheng Yang wrote:
> >> From: Marcelo Tosatti <mtosatti@redhat.com>
> >>
> >> Signed-off-by: Sheng Yang <sheng@linux.intel.com>
> >
> > Oops.. Should be Marcelo's signed-off here...
>
> Should be both.  If you are forwarding someone else's patch, even with
> no changes, you still need to add your signoff.

Thanks, I would update it again...
diff mbox

Patch

diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 0ac1c28..80a0481 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -1141,7 +1141,7 @@  int kvm_assign_pci_device(kvm_context_t kvm,
 	return ret;
 }
 
-int kvm_assign_irq(kvm_context_t kvm,
+static int kvm_old_assign_irq(kvm_context_t kvm,
 		   struct kvm_assigned_irq *assigned_irq)
 {
 	int ret;
@@ -1152,6 +1152,42 @@  int kvm_assign_irq(kvm_context_t kvm,
 
 	return ret;
 }
+
+#ifdef KVM_CAP_ASSIGN_DEV_IRQ
+int kvm_assign_irq(kvm_context_t kvm,
+		   struct kvm_assigned_irq *assigned_irq)
+{
+	int ret;
+
+	ret = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ);
+	if (ret > 0) {
+		ret = ioctl(kvm->vm_fd, KVM_ASSIGN_DEV_IRQ, assigned_irq);
+		if (ret < 0)
+			return -errno;
+		return ret;
+	}
+
+	return kvm_old_assign_irq(kvm, assigned_irq);
+}
+
+int kvm_deassign_irq(kvm_context_t kvm,
+		     struct kvm_assigned_irq *assigned_irq)
+{
+	int ret;
+
+	ret = ioctl(kvm->vm_fd, KVM_DEASSIGN_DEV_IRQ, assigned_irq);
+	if (ret < 0)
+            return -errno;
+
+	return ret;
+}
+#else
+int kvm_assign_irq(kvm_context_t kvm,
+		   struct kvm_assigned_irq *assigned_irq)
+{
+	return kvm_old_assign_irq(kvm, assigned_irq);
+}
+#endif
 #endif
 
 #ifdef KVM_CAP_DEVICE_DEASSIGNMENT
diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h
index 0239cb6..3e5efe0 100644
--- a/libkvm/libkvm.h
+++ b/libkvm/libkvm.h
@@ -715,11 +715,10 @@  int kvm_assign_pci_device(kvm_context_t kvm,
 			  struct kvm_assigned_pci_dev *assigned_dev);
 
 /*!
- * \brief Notifies host kernel about changes to IRQ for an assigned device
+ * \brief Assign IRQ for an assigned device
  *
- * Used for PCI device assignment, this function notifies the host
- * kernel about the changes in IRQ number for an assigned physical
- * PCI device.
+ * Used for PCI device assignment, this function assigns IRQ numbers for
+ * an physical device and guest IRQ handling.
  *
  * \param kvm Pointer to the current kvm_context
  * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc
@@ -727,6 +726,20 @@  int kvm_assign_pci_device(kvm_context_t kvm,
 int kvm_assign_irq(kvm_context_t kvm,
 		   struct kvm_assigned_irq *assigned_irq);
 
+#ifdef KVM_CAP_ASSIGN_DEV_IRQ
+/*!
+ * \brief Deassign IRQ for an assigned device
+ *
+ * Used for PCI device assignment, this function deassigns IRQ numbers
+ * for an assigned device.
+ *
+ * \param kvm Pointer to the current kvm_context
+ * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc
+ */
+int kvm_deassign_irq(kvm_context_t kvm,
+                   struct kvm_assigned_irq *assigned_irq);
+#endif
+
 /*!
  * \brief Determines whether destroying memory regions is allowed
  *