From 4b71bd9e25cbf932ff02b04b9db31458481b3209 Mon Sep 17 00:00:00 2001 From: Weidong Han <weidong.han@intel.com> Date: Thu, 21 May 2009 17:08:38 -0700 Subject: [PATCH 09/15] kvm: libkvm: add deassign ioctl Add this to support hot remove assigned device. Acked-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Weidong Han <weidong.han@intel.com> Signed-off-by: Avi Kivity <avi@redhat.com> (cherry picked from commit 0512290fa039bfb8254df33bd5e1a8407add4211) Signed-off-by: Chris Wright <chrisw@redhat.com> Bugzilla: 498084 Message-Id: <1242950924-30161-8-git-send-email-chrisw@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> RH-Upstream-status: applied Acked-by: Juan Quintela <quintela@redhat.com> Acked-by: Marcelo Tosatti <mtosatti@redhat.com> Acked-by: Don Dutile <ddutile@redhat.com> --- libkvm/libkvm.c | 14 ++++++++++++++ libkvm/libkvm.h | 13 +++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-) diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c index 9233207..5ffb01f 100644 --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -1154,6 +1154,20 @@ int kvm_assign_irq(kvm_context_t kvm, } #endif +#ifdef KVM_CAP_DEVICE_DEASSIGNMENT +int kvm_deassign_pci_device(kvm_context_t kvm, + struct kvm_assigned_pci_dev *assigned_dev) +{ + int ret; + + ret = ioctl(kvm->vm_fd, KVM_DEASSIGN_PCI_DEVICE, assigned_dev); + if (ret < 0) + return -errno; + + return ret; +} +#endif + int kvm_destroy_memory_region_works(kvm_context_t kvm) { int ret = 0; diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h index 40275d7..87dded7 100644 --- a/libkvm/libkvm.h +++ b/libkvm/libkvm.h @@ -721,6 +721,19 @@ int kvm_assign_irq(kvm_context_t kvm, int kvm_destroy_memory_region_works(kvm_context_t kvm); #endif +#ifdef KVM_CAP_DEVICE_DEASSIGNMENT +/*! + * \brief Notifies host kernel about a PCI device to be deassigned from a guest + * + * Used for hot remove PCI device, this function notifies the host + * kernel about the deassigning of the physical PCI device from a guest. + * + * \param kvm Pointer to the current kvm_context + * \param assigned_dev Parameters, like bus, devfn number, etc + */ +int kvm_deassign_pci_device(kvm_context_t kvm, + struct kvm_assigned_pci_dev *assigned_dev); +#endif /*! * \brief Checks whether the generic irq routing capability is present -- 1.6.3.rc4.29.g8146