>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

Attachment: 0003-Add-interface-to-remove-ioperm-data.patch
Description: 0003-Add-interface-to-remove-ioperm-data.patch

Reply via email to