Kernel KVM-PPC virtualization development
 help / color / mirror / Atom feed
* [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest part
@ 2008-04-07 12:37 ehrhardt
  2008-04-07 12:37 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - host part ehrhardt
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: ehrhardt @ 2008-04-07 12:37 UTC (permalink / raw)
  To: kvm-ppc

From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>

This is the guest portion of this patch, it submits a trap with the special
immediate value where the native code would enter a infinite loop with irq's
disabled (no native shutdown available).
This is only a interim solution until the hypercall abi/api is fully
defined. Then we will recode it in according to that specification. 
I would wait for these final hypercall variant before we go to
linuxppc-dev@ozlabs.org with these patch, but for now this patch could stay in
our patch queues because it easens daily usage e.g. scripted testing.
Note - since qemu defaults to reboot the guest on shutdown you might need to
the -no-reboot command line option to qemu to get what is expected.

Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>

[diffstat]
 kernel/setup-common.c |    4 ++++
 kvm/Kconfig           |   11 ++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)
---

diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -146,6 +146,10 @@ void machine_halt(void)
 #endif
 	printk(KERN_EMERG "System Halted, OK to turn off power\n");
 	local_irq_disable();
+#ifdef CONFIG_KVM_PPC_GUEST
+	/* FIXME port to the proper hypercall API/ABI when defined */
+	__asm__ __volatile__("twi 31,0,1");
+#endif
 	while (1) ;
 }
 
diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
--- a/arch/powerpc/kvm/Kconfig
+++ b/arch/powerpc/kvm/Kconfig
@@ -35,7 +35,7 @@ config KVM_POWERPC
 	bool
 
 config KVM_POWERPC_440
-	tristate "KVM guest support for PowerPC 440"
+	tristate "KVM host support for PowerPC 440 guests"
 	depends on KVM && 44x
 	select KVM_POWERPC
 	---help---
@@ -52,5 +52,14 @@ config KVM_PPC_VIRTIO
 # the virtualization menu.
 source drivers/virtio/Kconfig
 
+
+config KVM_PPC_GUEST
+	bool "Paravirt guest extensions for KVM on POWERPC"
+	depends on 44x
+	---help---
+	  This add support of paravirt features for KVM on POWERPC
+
+
+
 endif # VIRTUALIZATION
 

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - host part
  2008-04-07 12:37 [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest part ehrhardt
@ 2008-04-07 12:37 ` ehrhardt
  2008-04-07 14:13 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest Jimi Xenidis
  2008-04-07 15:23 ` Christian Ehrhardt
  2 siblings, 0 replies; 4+ messages in thread
From: ehrhardt @ 2008-04-07 12:37 UTC (permalink / raw)
  To: kvm-ppc

From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>

This is the host portion of this patch, it detects a trap with the special
immediate value and then exits with the kvm exit_reason for shutdown.
This is only a interim solution until the hypercall abi/api is fully
defined. Then we will recode it in according to that specification.
I would wait for these final hypercall variant before we go to
linuxppc-dev@ozlabs.org with these patch, but for now this patch could stay in
our patch queues because it easens daily usage e.g. scripted testing.

Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>

[diffstat]
 arch/powerpc/kvm/emulate.c    |    5 +++++
 arch/powerpc/kvm/powerpc.c    |    4 ++++
 include/asm-powerpc/kvm_ppc.h |    1 +
 3 files changed, 10 insertions(+)
---

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
@@ -229,6 +229,11 @@ int kvmppc_emulate_instruction(struct kv
 
 	switch (get_op(inst)) {
 	case 3:                                                 /* trap */
+		if (get_d(inst) = 1) {
+			/* FIXME port to final hypercall API when defined */
+			printk(KERN_INFO"Guest requested shutdown\n");
+			return EMULATE_SHUTDOWN;
+		}
 		printk("trap!\n");
 		kvmppc_queue_exception(vcpu, BOOKE_INTERRUPT_PROGRAM);
 		advance = 0;
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
@@ -354,6 +354,10 @@ int kvmppc_handle_exit(struct kvm_run *r
 			 * report it to userspace. */
 			run->hw.hardware_exit_reason = ~0ULL << 32;
 			run->hw.hardware_exit_reason |= vcpu->arch.last_inst;
+			r = RESUME_HOST;
+			break;
+		case EMULATE_SHUTDOWN:
+			run->exit_reason = KVM_EXIT_SHUTDOWN;
 			r = RESUME_HOST;
 			break;
 		default:
diff --git a/include/asm-powerpc/kvm_ppc.h b/include/asm-powerpc/kvm_ppc.h
--- a/include/asm-powerpc/kvm_ppc.h
+++ b/include/asm-powerpc/kvm_ppc.h
@@ -39,6 +39,7 @@ enum emulation_result {
 	EMULATE_DO_MMIO,      /* kvm_run filled with MMIO request */
 	EMULATE_DO_DCR,       /* kvm_run filled with DCR request */
 	EMULATE_FAIL,         /* can't emulate this instruction */
+	EMULATE_SHUTDOWN,     /* shutdown guest requested (no kvm_run data) */
 };
 
 extern const unsigned char exception_priority[];

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest
  2008-04-07 12:37 [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest part ehrhardt
  2008-04-07 12:37 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - host part ehrhardt
@ 2008-04-07 14:13 ` Jimi Xenidis
  2008-04-07 15:23 ` Christian Ehrhardt
  2 siblings, 0 replies; 4+ messages in thread
From: Jimi Xenidis @ 2008-04-07 14:13 UTC (permalink / raw)
  To: kvm-ppc


On Apr 7, 2008, at 8:37 AM, ehrhardt@linux.vnet.ibm.com wrote:
> From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
>
> This is the guest portion of this patch, it submits a trap with the  
> special
> immediate value where the native code would enter a infinite loop  
> with irq's
> disabled (no native shutdown available).
> This is only a interim solution until the hypercall abi/api is fully
> defined. Then we will recode it in according to that specification.
> I would wait for these final hypercall variant before we go to
> linuxppc-dev@ozlabs.org with these patch, but for now this patch  
> could stay in
> our patch queues because it easens daily usage e.g. scripted testing.
> Note - since qemu defaults to reboot the guest on shutdown you  
> might need to
> the -no-reboot command line option to qemu to get what is expected.
>
> Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
>
> [diffstat]
>  kernel/setup-common.c |    4 ++++
>  kvm/Kconfig           |   11 ++++++++++-
>  2 files changed, 14 insertions(+), 1 deletion(-)
> ---
>
> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/ 
> kernel/setup-common.c
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -146,6 +146,10 @@ void machine_halt(void)
>  #endif
>  	printk(KERN_EMERG "System Halted, OK to turn off power\n");
>  	local_irq_disable();

hmm.. shouldn't you just be defining ppc_md.halt in your setup so it  
can be called in this function above this line?

Functionally I would assume this "zombies" the guest rather then  
completely destroys it?
This is important if I want to externally debug said state.

You may also want to consider defining ppc_md.power_off as well which  
would automatically and completely destroy the guest.

> +#ifdef CONFIG_KVM_PPC_GUEST
> +	/* FIXME port to the proper hypercall API/ABI when defined */
> +	__asm__ __volatile__("twi 31,0,1");
> +#endif

Have you considered using mtmsr(MSR_WE) which puts you in wait with  
no hope of coming back, unless forced by probe.

>  	while (1) ;
>  }
>
> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> --- a/arch/powerpc/kvm/Kconfig
> +++ b/arch/powerpc/kvm/Kconfig
> @@ -35,7 +35,7 @@ config KVM_POWERPC
>  	bool
>
>  config KVM_POWERPC_440
> -	tristate "KVM guest support for PowerPC 440"
> +	tristate "KVM host support for PowerPC 440 guests"
>  	depends on KVM && 44x
>  	select KVM_POWERPC
>  	---help---
> @@ -52,5 +52,14 @@ config KVM_PPC_VIRTIO
>  # the virtualization menu.
>  source drivers/virtio/Kconfig
>
> +
> +config KVM_PPC_GUEST
> +	bool "Paravirt guest extensions for KVM on POWERPC"
> +	depends on 44x
> +	---help---
> +	  This add support of paravirt features for KVM on POWERPC
> +
> +
> +
>  endif # VIRTUALIZATION
>
>
> ---------------------------------------------------------------------- 
> ---
> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
> Register now and save $200. Hurry, offer ends at 11:59 p.m.,
> Monday, April 7! Use priority code J8TLD2.
> http://ad.doubleclick.net/clk;198757673;13503038;p?http:// 
> java.sun.com/javaone
> _______________________________________________
> kvm-ppc-devel mailing list
> kvm-ppc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest
  2008-04-07 12:37 [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest part ehrhardt
  2008-04-07 12:37 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - host part ehrhardt
  2008-04-07 14:13 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest Jimi Xenidis
@ 2008-04-07 15:23 ` Christian Ehrhardt
  2 siblings, 0 replies; 4+ messages in thread
From: Christian Ehrhardt @ 2008-04-07 15:23 UTC (permalink / raw)
  To: kvm-ppc

Jimi Xenidis wrote:
> 
> On Apr 7, 2008, at 8:37 AM, ehrhardt@linux.vnet.ibm.com wrote:
>> From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
>>
>> This is the guest portion of this patch, it submits a trap with the 
>> special
>> immediate value where the native code would enter a infinite loop with 
>> irq's
>> disabled (no native shutdown available).
>> This is only a interim solution until the hypercall abi/api is fully
>> defined. Then we will recode it in according to that specification.
>> I would wait for these final hypercall variant before we go to
>> linuxppc-dev@ozlabs.org with these patch, but for now this patch could 
>> stay in
>> our patch queues because it easens daily usage e.g. scripted testing.
>> Note - since qemu defaults to reboot the guest on shutdown you might 
>> need to
>> the -no-reboot command line option to qemu to get what is expected.
>>
>> Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
>>
>> [diffstat]
>>  kernel/setup-common.c |    4 ++++
>>  kvm/Kconfig           |   11 ++++++++++-
>>  2 files changed, 14 insertions(+), 1 deletion(-)
>> ---
>>
>> diff --git a/arch/powerpc/kernel/setup-common.c 
>> b/arch/powerpc/kernel/setup-common.c
>> --- a/arch/powerpc/kernel/setup-common.c
>> +++ b/arch/powerpc/kernel/setup-common.c
>> @@ -146,6 +146,10 @@ void machine_halt(void)
>>  #endif
>>      printk(KERN_EMERG "System Halted, OK to turn off power\n");
>>      local_irq_disable();
> 
> hmm.. shouldn't you just be defining ppc_md.halt in your setup so it can 
> be called in this function above this line?

I'll look into that - thx Jimi

> Functionally I would assume this "zombies" the guest rather then 
> completely destroys it?
> This is important if I want to externally debug said state.

hmmm ... I started with the demand to get it destroyed on halt.

> You may also want to consider defining ppc_md.power_off as well which 
> would automatically and completely destroy the guest.
>
>> +#ifdef CONFIG_KVM_PPC_GUEST
>> +    /* FIXME port to the proper hypercall API/ABI when defined */
>> +    __asm__ __volatile__("twi 31,0,1");
>> +#endif
> 
> Have you considered using mtmsr(MSR_WE) which puts you in wait with no 
> hope of coming back, unless forced by probe.

atm I want it dead ;-).
But you'r right - eventually we should implement the differences between halt, poweroff, ... in the final version

>>      while (1) ;
>>  }
>>
>> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
>> --- a/arch/powerpc/kvm/Kconfig
>> +++ b/arch/powerpc/kvm/Kconfig
>> @@ -35,7 +35,7 @@ config KVM_POWERPC
>>      bool
>>
>>  config KVM_POWERPC_440
>> -    tristate "KVM guest support for PowerPC 440"
>> +    tristate "KVM host support for PowerPC 440 guests"
>>      depends on KVM && 44x
>>      select KVM_POWERPC
>>      ---help---
>> @@ -52,5 +52,14 @@ config KVM_PPC_VIRTIO
>>  # the virtualization menu.
>>  source drivers/virtio/Kconfig
>>
>> +
>> +config KVM_PPC_GUEST
>> +    bool "Paravirt guest extensions for KVM on POWERPC"
>> +    depends on 44x
>> +    ---help---
>> +      This add support of paravirt features for KVM on POWERPC
>> +
>> +
>> +
>>  endif # VIRTUALIZATION
>>
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
>> Register now and save $200. Hurry, offer ends at 11:59 p.m.,
>> Monday, April 7! Use priority code J8TLD2.
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone 
>>
>> _______________________________________________
>> kvm-ppc-devel mailing list
>> kvm-ppc-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
> 


-- 

Grüsse / regards, 
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-04-07 15:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-07 12:37 [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest part ehrhardt
2008-04-07 12:37 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - host part ehrhardt
2008-04-07 14:13 ` [kvm-ppc-devel] [PATCH] kvmppc: support guest shutdown - guest Jimi Xenidis
2008-04-07 15:23 ` Christian Ehrhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox