Re: [kvm-devel] [PATCH][UPDATE] kvm-userspace: simplify mmio callback

2007-12-19 Thread Avi Kivity
Christian Ehrhardt wrote:
 Subject: [PATCH][UPDATE] kvm-userspace: simplify mmio callback
 From: Christian Ehrhardt [EMAIL PROTECTED]

 Merging the read[bwlq]/write[bwlq] callback callback pointers to 
 mmio_read/write functions simplifies the callback interface.
 On the qemu side it now uses the cpu_physical_memory_rw function.
 Additonally this patch merges the RedHat 7.1 mmio workaround that
 was spread to two code locations.
   

Applied (after much mulling), thanks.

-- 
error compiling committee.c: too many arguments to function


-
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services
for just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
___
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel


[kvm-devel] [PATCH][UPDATE] kvm-userspace: simplify mmio callback

2007-12-18 Thread Christian Ehrhardt
Subject: [PATCH][UPDATE] kvm-userspace: simplify mmio callback
From: Christian Ehrhardt [EMAIL PROTECTED]

Merging the read[bwlq]/write[bwlq] callback callback pointers to 
mmio_read/write functions simplifies the callback interface.
On the qemu side it now uses the cpu_physical_memory_rw function.
Additonally this patch merges the RedHat 7.1 mmio workaround that
was spread to two code locations.

Signed-off-by: Christian Ehrhardt [EMAIL PROTECTED]

diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 93d7b6b..fd93f44 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -826,44 +826,17 @@ static int handle_mmio(kvm_context_t kvm, struct kvm_run 
*kvm_run)
 {
unsigned long addr = kvm_run-mmio.phys_addr;
void *data = kvm_run-mmio.data;
-   int r = -1;
 
-   /* hack: Red Hat 7.1 generates these wierd accesses. */
-   if (addr == 0xa  kvm_run-mmio.len == 3)
+   /* hack: Red Hat 7.1 generates these weird accesses. */
+   if ((addr  0xa-4  addr = 0xa)  kvm_run-mmio.len == 3)
return 0;
 
-   if (kvm_run-mmio.is_write) {
-   switch (kvm_run-mmio.len) {
-   case 1:
-   r = kvm-callbacks-writeb(kvm-opaque, addr, *(uint8_t 
*)data);
-   break;
-   case 2:
-   r = kvm-callbacks-writew(kvm-opaque, addr, 
*(uint16_t *)data);
-   break;
-   case 4:
-   r = kvm-callbacks-writel(kvm-opaque, addr, 
*(uint32_t *)data);
-   break;
-   case 8:
-   r = kvm-callbacks-writeq(kvm-opaque, addr, 
*(uint64_t *)data);
-   break;
-   }
-   } else {
-   switch (kvm_run-mmio.len) {
-   case 1:
-   r = kvm-callbacks-readb(kvm-opaque, addr, (uint8_t 
*)data);
-   break;
-   case 2:
-   r = kvm-callbacks-readw(kvm-opaque, addr, (uint16_t 
*)data);
-   break;
-   case 4:
-   r = kvm-callbacks-readl(kvm-opaque, addr, (uint32_t 
*)data);
-   break;
-   case 8:
-   r = kvm-callbacks-readq(kvm-opaque, addr, (uint64_t 
*)data);
-   break;
-   }
-   }
-   return r;
+   if (kvm_run-mmio.is_write)
+   return kvm-callbacks-mmio_write(kvm-opaque, addr, data,
+   kvm_run-mmio.len);
+   else
+   return kvm-callbacks-mmio_read(kvm-opaque, addr, data,
+   kvm_run-mmio.len);
 }
 
 int handle_io_window(kvm_context_t kvm)
diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h
index 110912a..62407f5 100644
--- a/libkvm/libkvm.h
+++ b/libkvm/libkvm.h
@@ -45,22 +45,12 @@ struct kvm_callbacks {
 int (*outw)(void *opaque, uint16_t addr, uint16_t data);
/// For 32bit IO writes from the guest (Usually when executing 'outl')
 int (*outl)(void *opaque, uint16_t addr, uint32_t data);
-   /// For 8bit memory reads from unmapped memory (For MMIO devices)
-int (*readb)(void *opaque, uint64_t addr, uint8_t *data);
-   /// For 16bit memory reads from unmapped memory (For MMIO devices)
-int (*readw)(void *opaque, uint64_t addr, uint16_t *data);
-   /// For 32bit memory reads from unmapped memory (For MMIO devices)
-int (*readl)(void *opaque, uint64_t addr, uint32_t *data);
-   /// For 64bit memory reads from unmapped memory (For MMIO devices)
-int (*readq)(void *opaque, uint64_t addr, uint64_t *data);
-   /// For 8bit memory writes to unmapped memory (For MMIO devices)
-int (*writeb)(void *opaque, uint64_t addr, uint8_t data);
-   /// For 16bit memory writes to unmapped memory (For MMIO devices)
-int (*writew)(void *opaque, uint64_t addr, uint16_t data);
-   /// For 32bit memory writes to unmapped memory (For MMIO devices)
-int (*writel)(void *opaque, uint64_t addr, uint32_t data);
-   /// For 64bit memory writes to unmapped memory (For MMIO devices)
-int (*writeq)(void *opaque, uint64_t addr, uint64_t data);
+   /// generic memory reads to unmapped memory (For MMIO devices)
+int (*mmio_read)(void *opaque, uint64_t addr, uint8_t *data,
+   int len);
+   /// generic memory writes to unmapped memory (For MMIO devices)
+int (*mmio_write)(void *opaque, uint64_t addr, uint8_t *data,
+   int len);
 int (*debug)(void *opaque, int vcpu);
/*!
 * \brief Called when the VCPU issues an 'hlt' instruction.
diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index cc47ca2..8027ed1 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -477,58 +477,18 @@ static int kvm_outl(void *opaque, uint16_t addr, uint32_t 
data)
 return 0;
 }
 
-static int kvm_readb(void *opaque, uint64_t