* [PATCH] Reduce interface between kvm general and kvm arch.
@ 2009-07-09 12:33 Gleb Natapov
2009-07-12 11:03 ` Avi Kivity
0 siblings, 1 reply; 4+ messages in thread
From: Gleb Natapov @ 2009-07-09 12:33 UTC (permalink / raw)
To: avi; +Cc: kvm
Remove kvm_cpu_has_interrupt() and kvm_arch_interrupt_allowed() from
interface between general code and arch code. kvm_arch_vcpu_runnable()
checks for interrupts instead.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
arch/ia64/kvm/kvm-ia64.c | 16 ++--------------
arch/powerpc/kvm/powerpc.c | 13 +------------
arch/s390/kvm/interrupt.c | 8 +-------
arch/x86/include/asm/kvm_host.h | 2 ++
arch/x86/kvm/x86.c | 6 ++++--
include/linux/kvm_host.h | 2 --
virt/kvm/kvm_main.c | 4 +---
7 files changed, 11 insertions(+), 40 deletions(-)
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index 8054d7b..421c3a4 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -1935,19 +1935,6 @@ int kvm_highest_pending_irq(struct kvm_vcpu *vcpu)
return find_highest_bits((int *)&vpd->irr[0]);
}
-int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu)
-{
- if (kvm_highest_pending_irq(vcpu) != -1)
- return 1;
- return 0;
-}
-
-int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu)
-{
- /* do real check here */
- return 1;
-}
-
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
{
return vcpu->arch.timer_fired;
@@ -1960,7 +1947,8 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
{
- return vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE;
+ return (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE) ||
+ (kvm_highest_pending_irq(vcpu) != -1);
}
int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index 0341391..2a4551f 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -39,20 +39,9 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
return gfn;
}
-int kvm_cpu_has_interrupt(struct kvm_vcpu *v)
-{
- return !!(v->arch.pending_exceptions);
-}
-
-int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu)
-{
- /* do real check here */
- return 1;
-}
-
int kvm_arch_vcpu_runnable(struct kvm_vcpu *v)
{
- return !(v->arch.msr & MSR_WE);
+ return !(v->arch.msr & MSR_WE) || !!(v->arch.pending_exceptions);
}
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index f04f530..5f2e144 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -283,7 +283,7 @@ static int __try_deliver_ckc_interrupt(struct kvm_vcpu *vcpu)
return 1;
}
-int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu)
+static int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu)
{
struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
struct kvm_s390_float_interrupt *fi = vcpu->arch.local_int.float_int;
@@ -320,12 +320,6 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu)
return rc;
}
-int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu)
-{
- /* do real check here */
- return 1;
-}
-
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
{
return 0;
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 30b625d..bbc9727 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -797,5 +797,7 @@ asmlinkage void kvm_handle_fault_on_reboot(void);
int kvm_unmap_hva(struct kvm *kvm, unsigned long hva);
int kvm_age_hva(struct kvm *kvm, unsigned long hva);
int cpuid_maxphyaddr(struct kvm_vcpu *vcpu);
+int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu);
+int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu);
#endif /* _ASM_X86_KVM_HOST_H */
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index de73e7c..00844eb 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4829,8 +4829,10 @@ void kvm_arch_flush_shadow(struct kvm *kvm)
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
{
return vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE
- || vcpu->arch.mp_state == KVM_MP_STATE_SIPI_RECEIVED
- || vcpu->arch.nmi_pending;
+ || vcpu->arch.mp_state == KVM_MP_STATE_SIPI_RECEIVED
+ || vcpu->arch.nmi_pending ||
+ (kvm_arch_interrupt_allowed(vcpu) &&
+ kvm_cpu_has_interrupt(vcpu));
}
void kvm_vcpu_kick(struct kvm_vcpu *vcpu)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 8e04a34..3778081 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -326,7 +326,6 @@ int kvm_arch_hardware_setup(void);
void kvm_arch_hardware_unsetup(void);
void kvm_arch_check_processor_compat(void *rtn);
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);
-int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu);
void kvm_free_physmem(struct kvm *kvm);
@@ -336,7 +335,6 @@ void kvm_free_all_assigned_devices(struct kvm *kvm);
void kvm_arch_sync_events(struct kvm *kvm);
int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
-int kvm_cpu_has_interrupt(struct kvm_vcpu *v);
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu);
void kvm_vcpu_kick(struct kvm_vcpu *vcpu);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 05b6bc7..cf20dc1 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1666,9 +1666,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
for (;;) {
prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
- if ((kvm_arch_interrupt_allowed(vcpu) &&
- kvm_cpu_has_interrupt(vcpu)) ||
- kvm_arch_vcpu_runnable(vcpu)) {
+ if (kvm_arch_vcpu_runnable(vcpu)) {
set_bit(KVM_REQ_UNHALT, &vcpu->requests);
break;
}
--
1.6.2.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] Reduce interface between kvm general and kvm arch.
2009-07-12 11:03 ` Avi Kivity
@ 2009-07-12 11:02 ` Gleb Natapov
2009-07-12 11:09 ` Avi Kivity
0 siblings, 1 reply; 4+ messages in thread
From: Gleb Natapov @ 2009-07-12 11:02 UTC (permalink / raw)
To: Avi Kivity; +Cc: kvm
On Sun, Jul 12, 2009 at 02:03:17PM +0300, Avi Kivity wrote:
> On 07/09/2009 03:33 PM, Gleb Natapov wrote:
>>
>> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
>> index 05b6bc7..cf20dc1 100644
>> --- a/virt/kvm/kvm_main.c
>> +++ b/virt/kvm/kvm_main.c
>> @@ -1666,9 +1666,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
>> for (;;) {
>> prepare_to_wait(&vcpu->wq,&wait, TASK_INTERRUPTIBLE);
>>
>> - if ((kvm_arch_interrupt_allowed(vcpu)&&
>> - kvm_cpu_has_interrupt(vcpu)) ||
>> - kvm_arch_vcpu_runnable(vcpu)) {
>> + if (kvm_arch_vcpu_runnable(vcpu)) {
>> set_bit(KVM_REQ_UNHALT,&vcpu->requests);
>> break;
>> }
>>
>
> s390 has:
>
>
> int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
> {
> /* kvm common code refers to this, but never calls it */
> BUG();
> return 0;
> }
>
> So this needs to be updated. Please coordinate with the s390 folks.
>
s390 never calls kvm_vcpu_block(). They implement their own blocking.
--
Gleb.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Reduce interface between kvm general and kvm arch.
2009-07-09 12:33 [PATCH] Reduce interface between kvm general and kvm arch Gleb Natapov
@ 2009-07-12 11:03 ` Avi Kivity
2009-07-12 11:02 ` Gleb Natapov
0 siblings, 1 reply; 4+ messages in thread
From: Avi Kivity @ 2009-07-12 11:03 UTC (permalink / raw)
To: Gleb Natapov; +Cc: kvm
On 07/09/2009 03:33 PM, Gleb Natapov wrote:
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 05b6bc7..cf20dc1 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -1666,9 +1666,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
> for (;;) {
> prepare_to_wait(&vcpu->wq,&wait, TASK_INTERRUPTIBLE);
>
> - if ((kvm_arch_interrupt_allowed(vcpu)&&
> - kvm_cpu_has_interrupt(vcpu)) ||
> - kvm_arch_vcpu_runnable(vcpu)) {
> + if (kvm_arch_vcpu_runnable(vcpu)) {
> set_bit(KVM_REQ_UNHALT,&vcpu->requests);
> break;
> }
>
s390 has:
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
{
/* kvm common code refers to this, but never calls it */
BUG();
return 0;
}
So this needs to be updated. Please coordinate with the s390 folks.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Reduce interface between kvm general and kvm arch.
2009-07-12 11:02 ` Gleb Natapov
@ 2009-07-12 11:09 ` Avi Kivity
0 siblings, 0 replies; 4+ messages in thread
From: Avi Kivity @ 2009-07-12 11:09 UTC (permalink / raw)
To: Gleb Natapov; +Cc: kvm
On 07/12/2009 02:02 PM, Gleb Natapov wrote:
>>
>> s390 has:
>>
>>
>> int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
>> {
>> /* kvm common code refers to this, but never calls it */
>> BUG();
>> return 0;
>> }
>>
>> So this needs to be updated. Please coordinate with the s390 folks.
>>
>>
> s390 never calls kvm_vcpu_block(). They implement their own blocking.
>
>
Right; applied.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-07-12 11:06 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-09 12:33 [PATCH] Reduce interface between kvm general and kvm arch Gleb Natapov
2009-07-12 11:03 ` Avi Kivity
2009-07-12 11:02 ` Gleb Natapov
2009-07-12 11:09 ` Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox