[PATCH 4/6] kvmppc: magic page hypercall - host part

2008-07-23 Thread ehrhardt
From: Christian Ehrhardt [EMAIL PROTECTED]

This adds the host part of the magic page registration. This is a memory
area of the guest granted to the host.
The patch just introduces the infrastruture to receive the guest paddr.
This is work in progress and it is intended to later on use this memory
as storage area a guest can read unprivileged (using binary rewriting to
change privileges instructions).

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

[diffstat]
 arch/powerpc/kvm/emulate.c |5 +
 arch/powerpc/kvm/powerpc.c |   18 +-
 include/asm-powerpc/kvm_para.h |2 ++
 include/linux/kvm.h|6 ++
 4 files changed, 30 insertions(+), 1 deletion(-)

[diff]
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c
--- a/arch/powerpc/kvm/emulate.c
+++ b/arch/powerpc/kvm/emulate.c
@@ -208,6 +208,11 @@
int ret = 0;
 
switch (vcpu-arch.gpr[0]) {
+   case KVM_HCALL_RESERVE_MAGICPAGE:
+   /* FIXME TODO implement the real fuctionality using that */
+   printk(KERN_ERR%s - receive magicpage address 0x%x\n,
+   __func__, vcpu-arch.gpr[3]);
+   break;
default:
printk(KERN_ERRunknown hypercall %d\n, vcpu-arch.gpr[0]);
kvmppc_dump_vcpu(vcpu);
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -148,6 +148,9 @@
case KVM_CAP_COALESCED_MMIO:
r = KVM_COALESCED_MMIO_PAGE_OFFSET;
break;
+   case KVM_CAP_PPCPV_MAGICPAGE:
+   r = 1;
+   break;
default:
r = 0;
break;
@@ -159,7 +162,20 @@
 long kvm_arch_dev_ioctl(struct file *filp,
 unsigned int ioctl, unsigned long arg)
 {
-   return -EINVAL;
+   long r = -EINVAL;
+
+   switch (ioctl) {
+   case KVM_GET_PPCPV_MAGICPAGE_SIZE:
+   r = -EINVAL;
+   if (arg)
+   goto out;
+   r = 1024;
+   break;
+   default:
+   r = -EINVAL;
+   }
+out:
+   return r;
 }
 
 int kvm_arch_set_memory_region(struct kvm *kvm,
diff --git a/include/asm-powerpc/kvm_para.h b/include/asm-powerpc/kvm_para.h
--- a/include/asm-powerpc/kvm_para.h
+++ b/include/asm-powerpc/kvm_para.h
@@ -24,6 +24,8 @@
 
 #define KVM_HYPERCALL_BIN 0x03ff
 
+#define KVM_HCALL_RESERVE_MAGICPAGE0
+
 static inline int kvm_para_available(void)
 {
return 0;
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -365,6 +365,11 @@
 #define KVM_TRACE_PAUSE   _IO(KVMIO,  0x07)
 #define KVM_TRACE_DISABLE _IO(KVMIO,  0x08)
 /*
+ * ioctls for powerpc paravirtualization extensions
+ */
+#define KVM_GET_PPCPV_MAGICPAGE_SIZE   _IO(KVMIO,   0x09)
+
+/*
  * Extension capability list.
  */
 #define KVM_CAP_IRQCHIP  0
@@ -382,6 +387,7 @@
 #define KVM_CAP_PV_MMU 13
 #define KVM_CAP_MP_STATE 14
 #define KVM_CAP_COALESCED_MMIO 15
+#define KVM_CAP_PPCPV_MAGICPAGE 16
 
 /*
  * ioctls for VM fds
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 4/6] kvmppc: magic page hypercall - host part

2008-07-23 Thread Tony Breeds
On Wed, Jul 23, 2008 at 10:36:45AM +0200, [EMAIL PROTECTED] wrote:

Hi Christian,

  long kvm_arch_dev_ioctl(struct file *filp,
  unsigned int ioctl, unsigned long arg)
  {
 - return -EINVAL;
 + long r = -EINVAL;
 +
 + switch (ioctl) {
 + case KVM_GET_PPCPV_MAGICPAGE_SIZE:
 + r = -EINVAL;

Not needed you set it on the declaration.

 + if (arg)
 + goto out;
 + r = 1024;

Ummm what does 1024 represent? can it me #defined? or at least add a
comment.

 + break;
 + default:
 + r = -EINVAL;

Not needed you set it on the declaration.

 + }
 +out:
 + return r;
  }

Yours Tony

  linux.conf.auhttp://www.marchsouth.org/
  Jan 19 - 24 2009 The Australian Linux Technical Conference!

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev