KVM: x86: use smp_send_reschedule in kvm_vcpu_kick
KVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of smp_call_function_single in kvm_vcpu_kick.
Also change the "guest_mode" variable to a bit in vcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.
This allows kvm_vcpu_kick to called from interrupt context.
arch/x86/kvm/x86.c +11 -24
@@ -3133,6 +3133,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)local_irq_disable (); +clear_bit (KVM_REQ_KICK , &vcpu->requests); +smp_mb__after_clear_bit (); +if (vcpu->requests ||need_resched () ||signal_pending (current)) {local_irq_enable ();preempt_enable ();
@@ -3140,13 +3143,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) goto out; } - vcpu->guest_mode =1 ; -/* -* Make sure that guest_mode assignment won't happen after -* testing the pending IRQ vector bitmap. -*/ -smp_wmb (); -if (vcpu->arch.exception.pending)__queue_exception (vcpu);else if (irqchip_in_kernel (vcpu->kvm))
@@ -3188,7 +3184,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)set_debugreg (vcpu->arch.host_dr6,6 );set_debugreg (vcpu->arch.host_dr7,7 ); - vcpu->guest_mode =0 ; +set_bit (KVM_REQ_KICK , &vcpu->requests);local_irq_enable (); ++vcpu->stat.exits;
@@ -4429,28 +4425,19 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) || vcpu->arch.nmi_pending; } -static void vcpu_kick_intr (void *info) -{ -#ifdef DEBUG -struct kvm_vcpu *vcpu = (struct kvm_vcpu *)info; -printk (KERN_DEBUG "vcpu_kick_intr %p \n" , vcpu); -#endif -} -void kvm_vcpu_kick (struct kvm_vcpu *vcpu) { -int ipi_pcpu = vcpu->cpu; -int cpu =get_cpu (); +int me =get_cpu (); +int cpu = vcpu->cpu;if (waitqueue_active (&vcpu->wq)) {wake_up_interruptible (&vcpu->wq); ++vcpu->stat.halt_wakeup; } -/* -* We may be called synchronously with irqs disabled in guest mode, -* So need not to call smp_call_function_single() in that case. -*/ -if (vcpu->guest_mode && vcpu->cpu != cpu) -smp_call_function_single (ipi_pcpu, vcpu_kick_intr, vcpu,0 ); + +if (cpu != me && (unsigned )cpu < nr_cpu_ids &&cpu_online (cpu)) +if (!test_and_set_bit (KVM_REQ_KICK , &vcpu->requests)) +smp_send_reschedule (cpu); +put_cpu (); }
include/linux/kvm_host.h +1 -1
@@ -38,6 +38,7 @@#define KVM_REQ_UNHALT 6#define KVM_REQ_MMU_SYNC 7#define KVM_REQ_KVMCLOCK_UPDATE 8 +#define KVM_REQ_KICK 9#define KVM_USERSPACE_IRQ_SOURCE_ID 0
@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;
RE: x86: use smp_send_reschedule in kvm_vcpu_kick
include/linux/kvm_host.h struct kvm_vcpu { · line 78
Quoted 8 lines · Marcelo Tosatti
include/linux/kvm_host.h +0
-1@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;
The deletion will break other archs which depend on the filed.
Xiantao
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 11 lines · Xiantao
include/linux/kvm_host.h struct kvm_vcpu { · line 78
Quoted 8 lines · Marcelo Tosatti
include/linux/kvm_host.h +0
-1@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;The deletion will break other archs which depend on the filed.
Indeed. Will keep it, thanks.
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 13 lines · Marcelo Tosatti
Quoted 11 lines · Xiantao
include/linux/kvm_host.h struct kvm_vcpu { · line 78
Quoted 8 lines · Marcelo Tosatti
include/linux/kvm_host.h +0
-1@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;The deletion will break other archs which depend on the filed.
Quoted 1 line
Indeed. Will keep it, thanks.
The only other arch is ia64 and its kvm_vcpu_kick() should be fixed the same way. No?
--
Gleb.
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 14 lines · Gleb Natapov
Quoted 13 lines · Marcelo Tosatti
Quoted 11 lines · Xiantao
include/linux/kvm_host.h struct kvm_vcpu { · line 78
Quoted 8 lines · Marcelo Tosatti
include/linux/kvm_host.h +0
-1@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;The deletion will break other archs which depend on the filed.
Quoted 3 lines
Quoted 1 line
Indeed. Will keep it, thanks.
The only other arch is ia64 and its
kvm_vcpu_kick()should be fixed the same way. No?
Probably yes.
Quoted 8 lines · Marcelo Tosatti
KVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.
Quoted 6 lines
Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.This allows
kvm_vcpu_kickto called from interrupt context.
Looks good. The only worry I have is that we depend on smp_reschedule_interrupt() being a no-op. I guess that's a reasonable assumption though.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 13 lines · Avi Kivity
Quoted 12 lines · Marcelo Tosatti
KVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.
Quoted 6 lines
Quoted 2 lines
This allows
kvm_vcpu_kickto called from interrupt context.Looks good. The only worry I have is that we depend on
smp_reschedule_interrupt()being a no-op. I guess that's a reasonable assumption though.
It's a reasonable current assumption - but it might change in the future - so please also put it into the changelog that KVM will revert it or fix it differently if the scheduler grows some functionality there.
Ingo
Quoted 18 lines · Ingo Molnar
Quoted 16 lines · Avi Kivity
Quoted 14 lines · Marcelo Tosatti
KVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.This allows
kvm_vcpu_kickto called from interrupt context.
Quoted 8 lines
Quoted 3 lines
Looks good. The only worry I have is that we depend on
smp_reschedule_interrupt()being a no-op. I guess that's a reasonable assumption though.It's a reasonable current assumption - but it might change in the future - so please also put it into the changelog that KVM will revert it or fix it differently if the scheduler grows some functionality there.
Alternatively, do something like the below, then anybody poking at that code will know to prod the KVM folks when they change anything.
[ I suspect other kvm arches will need to a similar comment ]
--- arch/x86/kernel/smp.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
arch/x86/kernel/smp.c +3 -0
@@ -172,6 +172,9 @@ void smp_reschedule_interrupt(struct pt_regs *regs) {ack_APIC_irq ();inc_irq_stat (irq_resched_count); +/* +* KVM uses this interrupt to force a cpu out of guest mode +*/ }void smp_call_function_interrupt (struct pt_regs *regs)
Quoted 12 lines · Peter Zijlstra
Quoted 10 lines · Ingo Molnar
Quoted 3 lines · Avi Kivity
Looks good. The only worry I have is that we depend on
smp_reschedule_interrupt()being a no-op. I guess that's a reasonable assumption though.It's a reasonable current assumption - but it might change in the future - so please also put it into the changelog that KVM will revert it or fix it differently if the scheduler grows some functionality there.
Quoted 4 lines
Alternatively, do something like the below, then anybody poking at that code will know to prod the KVM folks when they change anything.
[ I suspect other kvm arches will need to a similar comment ]
OK, reworked patch:
- change ia64 in addition to x86
- add comment on smp send reschedule handlers about KVM's usage
Untested on IA64.
KVM: use smp_send_reschedule in kvm_vcpu_kick
KVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of smp_call_function_single in kvm_vcpu_kick.
Also change the "guest_mode" variable to a bit in vcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.
This allows kvm_vcpu_kick to called with interrupts disabled.
arch/ia64/kernel/irq_ia64.c +3 -0
@@ -607,6 +607,9 @@ static struct irqaction ipi_irqaction = { .name = "IPI" }; +/* +* KVM uses this interrupt to force a cpu out of guest mode +*/ static struct irqaction resched_irqaction = { .handler = dummy_handler, .flags =IRQF_DISABLED ,
arch/ia64/kvm/kvm-ia64.c +7 -14
@@ -633,7 +633,7 @@ again: goto out; } - vcpu->guest_mode =1 ; +clear_bit (KVM_REQ_KICK , &vcpu->requests);kvm_guest_enter ();down_read (&vcpu->kvm->slots_lock); r =vti_vcpu_run (vcpu, kvm_run);
@@ -645,7 +645,7 @@ again: } vcpu->arch.launched =1 ; - vcpu->guest_mode =0 ; +set_bit (KVM_REQ_KICK , &vcpu->requests);local_irq_enable ();/*
@@ -1802,24 +1802,17 @@ void kvm_arch_hardware_unsetup(void) { } -static void vcpu_kick_intr (void *info) -{ -#ifdef DEBUG -struct kvm_vcpu *vcpu = (struct kvm_vcpu *)info; -printk (KERN_DEBUG "vcpu_kick_intr %p \n" , vcpu); -#endif -} -void kvm_vcpu_kick (struct kvm_vcpu *vcpu) { -int ipi_pcpu = vcpu->cpu; -int cpu =get_cpu (); +int me =get_cpu (); +int cpu = vcpu->cpu;if (waitqueue_active (&vcpu->wq))wake_up_interruptible (&vcpu->wq); -if (vcpu->guest_mode && cpu != ipi_pcpu) -smp_call_function_single (ipi_pcpu, vcpu_kick_intr, vcpu,0 ); +if (cpu != me && (unsigned ) cpu < nr_cpu_ids &&cpu_online (cpu)) +if (!test_and_set_bit (KVM_REQ_KICK , &vcpu->requests)) +smp_send_reschedule (cpu);put_cpu (); }
arch/x86/kernel/smp.c +3 -0
@@ -173,6 +173,9 @@ void smp_reschedule_interrupt(struct pt_regs *regs) {ack_APIC_irq ();inc_irq_stat (irq_resched_count); +/* +* KVM uses this interrupt to force a cpu out of guest mode +*/ }void smp_call_function_interrupt (struct pt_regs *regs)
arch/x86/kvm/x86.c +11 -24
@@ -3133,6 +3133,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)local_irq_disable (); +clear_bit (KVM_REQ_KICK , &vcpu->requests); +smp_mb__after_clear_bit (); +if (vcpu->requests ||need_resched () ||signal_pending (current)) {local_irq_enable ();preempt_enable ();
@@ -3140,13 +3143,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) goto out; } - vcpu->guest_mode =1 ; -/* -* Make sure that guest_mode assignment won't happen after -* testing the pending IRQ vector bitmap. -*/ -smp_wmb (); -if (vcpu->arch.exception.pending)__queue_exception (vcpu);else if (irqchip_in_kernel (vcpu->kvm))
@@ -3188,7 +3184,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)set_debugreg (vcpu->arch.host_dr6,6 );set_debugreg (vcpu->arch.host_dr7,7 ); - vcpu->guest_mode =0 ; +set_bit (KVM_REQ_KICK , &vcpu->requests);local_irq_enable (); ++vcpu->stat.exits;
@@ -4429,28 +4425,19 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) || vcpu->arch.nmi_pending; } -static void vcpu_kick_intr (void *info) -{ -#ifdef DEBUG -struct kvm_vcpu *vcpu = (struct kvm_vcpu *)info; -printk (KERN_DEBUG "vcpu_kick_intr %p \n" , vcpu); -#endif -} -void kvm_vcpu_kick (struct kvm_vcpu *vcpu) { -int ipi_pcpu = vcpu->cpu; -int cpu =get_cpu (); +int me =get_cpu (); +int cpu = vcpu->cpu;if (waitqueue_active (&vcpu->wq)) {wake_up_interruptible (&vcpu->wq); ++vcpu->stat.halt_wakeup; } -/* -* We may be called synchronously with irqs disabled in guest mode, -* So need not to call smp_call_function_single() in that case. -*/ -if (vcpu->guest_mode && vcpu->cpu != cpu) -smp_call_function_single (ipi_pcpu, vcpu_kick_intr, vcpu,0 ); + +if (cpu != me && (unsigned )cpu < nr_cpu_ids &&cpu_online (cpu)) +if (!test_and_set_bit (KVM_REQ_KICK , &vcpu->requests)) +smp_send_reschedule (cpu); +put_cpu (); }
include/linux/kvm_host.h +1 -1
@@ -38,6 +38,7 @@#define KVM_REQ_UNHALT 6#define KVM_REQ_MMU_SYNC 7#define KVM_REQ_KVMCLOCK_UPDATE 8 +#define KVM_REQ_KICK 9#define KVM_USERSPACE_IRQ_SOURCE_ID 0
@@ -72,7 +73,6 @@ struct kvm_vcpu {struct mutex mutex;int cpu;struct kvm_run *run; -int guest_mode;unsigned long requests;unsigned long guest_debug;int fpu_active;
Quoted 16 lines · Marcelo Tosatti
OK, reworked patch:
- change ia64 in addition to x86
- add comment on smp send reschedule handlers about KVM's usageUntested on IA64.
KVM: use
smp_send_rescheduleinkvm_vcpu_kickKVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.
Quoted 6 lines
Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.This allows
kvm_vcpu_kickto called with interrupts disabled.
Looks good. Will wait for Xiantao's test-n-ack before applying.
Signature · 1 line
error compiling committee.c: too many arguments to function
RE: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 17 lines · Avi Kivity
Quoted 16 lines · Marcelo Tosatti
OK, reworked patch:
- change ia64 in addition to x86
- add comment on smp send reschedule handlers about KVM's usageUntested on IA64.
KVM: use
smp_send_rescheduleinkvm_vcpu_kickKVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.
Quoted 8 lines
Quoted 6 lines
Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.This allows
kvm_vcpu_kickto called with interrupts disabled.Looks good. Will wait for Xiantao's test-n-ack before applying.
kvm-ia64 is broken due to recent check-ins about irq-bits, and we are trying to fix it. For this patch, ia64 has to export the symbol smp_send_reschedule before applying the patch. Xiantao
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 5 lines · Xiantao
Quoted 3 lines
Looks good. Will wait for Xiantao's test-n-ack before applying.
kvm-ia64 is broken due to recent check-ins about irq-bits, and we are trying to fix it.
Sorry about that, see Gleb's patch as well.
Quoted 1 line
For this patch, ia64 has to export the symbol
smp_send_reschedulebefore applying the patch.
Please send a patch for that once you've tested it.
Signature · 1 line
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
In reply to Zhang, XiantaoQuoted 22 lines · Xiantao
Quoted 21 lines · Avi Kivity
Quoted 20 lines · Marcelo Tosatti
OK, reworked patch:
- change ia64 in addition to x86
- add comment on smp send reschedule handlers about KVM's usageUntested on IA64.
KVM: use
smp_send_rescheduleinkvm_vcpu_kickKVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
This allows
kvm_vcpu_kickto called with interrupts disabled.Looks good. Will wait for Xiantao's test-n-ack before applying.
kvm-ia64 is broken due to recent check-ins about irq-bits, and we are trying to fix it. For this patch, ia64 has to export the symbol
smp_send_reschedulebefore applying the patch.
Can you try this patch please: http://patchwork.kernel.org/patch/11103/
--
Gleb.
RE: x86: use smp_send_reschedule in kvm_vcpu_kick
We also hacked the source like the patch. But the issue is not caused by it. We are still trying to figure the reason out. Thanks! Xiantao
-----Original Message-----
From: Gleb Natapov [mailto:[email protected]]
Sent: Thursday, March 12, 2009 7:04 PM
To: Zhang, Xiantao
Cc: Avi Kivity; Marcelo Tosatti; Ingo Molnar; [email protected]; Peter Zijlstra
Subject: Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 22 lines · Xiantao
Quoted 21 lines · Avi Kivity
Quoted 20 lines · Marcelo Tosatti
OK, reworked patch:
- change ia64 in addition to x86
- add comment on smp send reschedule handlers about KVM's usageUntested on IA64.
KVM: use
smp_send_rescheduleinkvm_vcpu_kickKVM uses a function call IPI to cause the exit of a guest running on a physical cpu. For virtual interrupt notification there is no need to wait on IPI receival, or to execute any function.
This is exactly what the reschedule IPI does, without the overhead of function IPI. So use it instead of
smp_call_function_singleinkvm_vcpu_kick.Also change the "
guest_mode" variable to a bit invcpu->requests, and use that to collapse multiple IPI's that would be issued between the first one and zeroing of guest mode.
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
This allows
kvm_vcpu_kickto called with interrupts disabled.Looks good. Will wait for Xiantao's test-n-ack before applying.
kvm-ia64 is broken due to recent check-ins about irq-bits, and we are trying to fix it. For this patch, ia64 has to export the symbol
smp_send_reschedulebefore applying the patch.
Can you try this patch please: http://patchwork.kernel.org/patch/11103/
--
Gleb.
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 3 lines · Xiantao
We also hacked the source like the patch. But the issue is not caused by it. We are still trying to figure the reason out. Thanks! Xiantao
With the patch below I am able to compile kvm-userspace on IA64 and run linux guest. Network doesn't work since there is some kind of problem with PCI interrupts. They are not delivered to a guest.
qemu/hw/ipf.c +15 -1
@@ -700,7 +700,7 @@ void ioapic_set_irq(void *opaque, int irq_num, int level) ioapic_irq_count[vector] -=1 ;if (kvm_enabled ()) { -if (kvm_set_irq (vector, ioapic_irq_count[vector] ==0 )) +if (kvm_set_irq (vector, ioapic_irq_count[vector] ==0 ,NULL ))return ; } }
@@ -709,3 +709,17 @@ int ipf_map_irq(PCIDevice *pci_dev, int irq_num) {return ioapic_map_irq (pci_dev->devfn, irq_num); } + +static int apic_irq_delivered; +void apic_reset_irq_delivered (void ) +{ + apic_irq_delivered =0 ; +} +int apic_get_irq_delivered (void ) +{ +return apic_irq_delivered; +} +void apic_set_irq_delivered (void ) +{ + apic_irq_delivered =1 ; +}
qemu/target-ia64/cpu.h +3 -2
@@ -29,7 +29,7 @@#define TARGET_LONG_BITS 64 -#define TARGET_PAGE_BITS 16 +#define TARGET_PAGE_BITS 14#define ELF_MACHINE EM_IA_64
@@ -40,13 +40,14 @@#include "cpu-defs.h" #include "softfloat.h" +#define CPUState struct CPUIA64State +typedef struct CPUIA64State {CPU_COMMON ;uint32_t hflags;int mp_state; }CPUIA64State ; -#define CPUState CPUIA64State#define cpu_gen_code cpu_ia64_gen_code#define cpu_init cpu_ia64_init#define cpu_signal_handler cpu_ia64_signal_handler
--
Gleb.
RE: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 10 lines · Gleb Natapov
Quoted 4 lines · Xiantao
We also hacked the source like the patch. But the issue is not caused by it. We are still trying to figure the reason out. Thanks! Xiantao
With the patch below I am able to compile kvm-userspace on IA64 and run linux guest.
Network doesn't work since there is some kind of
problem with PCI interrupts. They are not delivered to a guest.
Network should work before kvm-82, and not sure latest irq-bits changes has some side-impact for ipf side. You can reference ioapic_map_irq in ipf.c, and the mapping should match the PRT of bios.
qemu/target-ia64/cpu.h line 32
Quoted 6 lines
qemu/target-ia64/cpu.h +1
-1@@ -29,7 +29,7 @@#define TARGET_LONG_BITS 64 -#define TARGET_PAGE_BITS 16 +#define TARGET_PAGE_BITS 14
If the host kernel's page size is 64k ,bits should be 16, and 16k with 14. We may reference kernel's page size here.
Quoted 18 lines
qemu/target-ia64/cpu.h +2
-1#define ELF_MACHINE EM_IA_64@@ -40,13 +40,14 @@#include "cpu-defs.h" #include "softfloat.h" +#define CPUState struct CPUIA64State +typedef struct CPUIA64State {CPU_COMMON ;uint32_t hflags;int mp_state; }CPUIA64State ; -#define CPUState CPUIA64State#define cpu_gen_code cpu_ia64_gen_code#define cpu_init cpu_ia64_init#define cpu_signal_handler cpu_ia64_signal_handler
Re: x86: use smp_send_reschedule in kvm_vcpu_kick
Quoted 7 lines · Xiantao
Quoted 6 lines · Gleb Natapov
Quoted 4 lines · Xiantao
We also hacked the source like the patch. But the issue is not caused by it. We are still trying to figure the reason out. Thanks! Xiantao
Quoted 8 lines
Quoted 4 lines
With the patch below I am able to compile kvm-userspace on IA64 and run linux guest.
Network doesn't work since there is some kind of
problem with PCI interrupts. They are not delivered to a guest.Network should work before kvm-82, and not sure latest irq-bits changes has some side-impact for ipf side. You can reference
ioapic_map_irqinipf.c, and the mapping should match the PRT of bios.
Can you send me your Flash.fd?
Quoted 8 lines
qemu/target-ia64/cpu.h line 32
Quoted 6 lines
qemu/target-ia64/cpu.h +1
-1@@ -29,7 +29,7 @@#define TARGET_LONG_BITS 64 -#define TARGET_PAGE_BITS 16 +#define TARGET_PAGE_BITS 14If the host kernel's page size is 64k ,bits should be 16, and 16k with 14. We may reference kernel's page size here.
It should be determined by configure script. I am not sure PAGE_SIZE define is exported to userspace.
--
Gleb.