>From 9cf3b4c270c12f1ba966a033f3d207aed898a52a Mon Sep 17 00:00:00 2001 From: Weidong Han <[EMAIL PROTECTED]> Date: Fri, 14 Nov 2008 16:35:16 +0800 Subject: [PATCH] Add interface to remove ioperm data
When hot remove assigned device, need to remove its ioperm data
Signed-off-by: Weidong Han <[EMAIL PROTECTED]>
---
qemu/qemu-kvm.c | 16 ++++++++++++++--
qemu/qemu-kvm.h | 2 ++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index 4100bc8..06bcba0 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -1059,9 +1059,21 @@ int
qemu_kvm_unregister_coalesced_mmio(target_phys_addr_t addr,
#include <sys/io.h>
#ifdef USE_KVM_DEVICE_ASSIGNMENT
-void kvm_add_ioperm_data(struct ioperm_data *data)
+void kvm_add_ioperm_data(void *data)
{
- LIST_INSERT_HEAD(&ioperm_head, data, entries);
+ LIST_INSERT_HEAD(&ioperm_head, (struct ioperm_data *)data, entries);
+}
+
+void kvm_remove_ioperm_data(unsigned long start_port, unsigned long num)
+{
+ struct ioperm_data *data;
+
+ LIST_FOREACH(data, &ioperm_head, entries) {
+ if (data->start_port == start_port &&
+ data->num == num)
+ LIST_REMOVE(data, entries);
+ qemu_free(data);
+ }
}
void kvm_ioperm(CPUState *env, void *data)
diff --git a/qemu/qemu-kvm.h b/qemu/qemu-kvm.h
index 56bc0e7..e5a8b06 100644
--- a/qemu/qemu-kvm.h
+++ b/qemu/qemu-kvm.h
@@ -95,6 +95,8 @@ void qemu_kvm_system_reset_request(void);
#ifdef USE_KVM_DEVICE_ASSIGNMENT
void kvm_ioperm(CPUState *env, void *data);
+void kvm_add_ioperm_data(void *data);
+void kvm_remove_ioperm_data(unsigned long start_port, unsigned long num);
void kvm_arch_do_ioperm(void *_data);
#endif
--
1.5.1
0003-Add-interface-to-remove-ioperm-data.patch
Description: 0003-Add-interface-to-remove-ioperm-data.patch
