* [kvm-ppc-devel] guest panic fixed
@ 2008-03-19 23:25 Hollis Blanchard
2008-03-20 8:32 ` Christian Ehrhardt
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Hollis Blanchard @ 2008-03-19 23:25 UTC (permalink / raw)
To: kvm-ppc
Thanks to some excellent debugging by Christian, we found the cause of
our annoying guest panics. We had not implemented exception priorities
(my bad), so a userspace ITLB miss was being delivered immediately after
entry to the decrementer interrupt vector. Patch follows,
http://penguinppc.org/~hollisb/kvm/ updated.
NFS root with virtio-net still doesn't work for me, but it doesn't
crash. :)
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
@@ -68,6 +68,44 @@ static const u32 interrupt_msr_mask[16]
[BOOKE_INTERRUPT_DEBUG] = MSR_ME,
};
+const unsigned char exception_priority[] = {
+ [BOOKE_INTERRUPT_DATA_STORAGE] = 0,
+ [BOOKE_INTERRUPT_INST_STORAGE] = 1,
+ [BOOKE_INTERRUPT_ALIGNMENT] = 2,
+ [BOOKE_INTERRUPT_PROGRAM] = 3,
+ [BOOKE_INTERRUPT_FP_UNAVAIL] = 4,
+ [BOOKE_INTERRUPT_SYSCALL] = 5,
+ [BOOKE_INTERRUPT_AP_UNAVAIL] = 6,
+ [BOOKE_INTERRUPT_DTLB_MISS] = 7,
+ [BOOKE_INTERRUPT_ITLB_MISS] = 8,
+ [BOOKE_INTERRUPT_MACHINE_CHECK] = 9,
+ [BOOKE_INTERRUPT_DEBUG] = 10,
+ [BOOKE_INTERRUPT_CRITICAL] = 11,
+ [BOOKE_INTERRUPT_WATCHDOG] = 12,
+ [BOOKE_INTERRUPT_EXTERNAL] = 13,
+ [BOOKE_INTERRUPT_FIT] = 14,
+ [BOOKE_INTERRUPT_DECREMENTER] = 15,
+};
+
+const unsigned char priority_exception[] = {
+ BOOKE_INTERRUPT_DATA_STORAGE,
+ BOOKE_INTERRUPT_INST_STORAGE,
+ BOOKE_INTERRUPT_ALIGNMENT,
+ BOOKE_INTERRUPT_PROGRAM,
+ BOOKE_INTERRUPT_FP_UNAVAIL,
+ BOOKE_INTERRUPT_SYSCALL,
+ BOOKE_INTERRUPT_AP_UNAVAIL,
+ BOOKE_INTERRUPT_DTLB_MISS,
+ BOOKE_INTERRUPT_ITLB_MISS,
+ BOOKE_INTERRUPT_MACHINE_CHECK,
+ BOOKE_INTERRUPT_DEBUG,
+ BOOKE_INTERRUPT_CRITICAL,
+ BOOKE_INTERRUPT_WATCHDOG,
+ BOOKE_INTERRUPT_EXTERNAL,
+ BOOKE_INTERRUPT_FIT,
+ BOOKE_INTERRUPT_DECREMENTER,
+};
+
gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn)
{
@@ -183,19 +221,21 @@ static void kvmppc_check_and_deliver_int
static void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu)
{
unsigned long *pending = &vcpu->arch.pending_exceptions;
- int exception;
-
- exception = find_first_bit(pending, BITS_PER_BYTE * sizeof(*pending));
- while (exception < BOOKE_MAX_INTERRUPT) {
+ unsigned int exception;
+ unsigned int priority;
+
+ priority = find_first_bit(pending, BITS_PER_BYTE * sizeof(*pending));
+ while (priority <= BOOKE_MAX_INTERRUPT) {
+ exception = priority_exception[priority];
if (kvmppc_can_deliver_interrupt(vcpu, exception)) {
kvmppc_clear_exception(vcpu, exception);
kvmppc_deliver_interrupt(vcpu, exception);
break;
}
- exception = find_next_bit(pending,
- BITS_PER_BYTE * sizeof(*pending),
- exception + 1);
+ priority = find_next_bit(pending,
+ BITS_PER_BYTE * sizeof(*pending),
+ priority + 1);
}
}
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
@@ -41,6 +41,9 @@ enum emulation_result {
EMULATE_FAIL, /* can't emulate this instruction */
};
+extern const unsigned char exception_priority[];
+extern const unsigned char priority_exception[];
+
extern int __kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu);
extern char kvmppc_handlers_start[];
extern unsigned long kvmppc_handler_len;
@@ -65,12 +68,14 @@ extern void kvmppc_44x_tlb_trace(int act
static inline void kvmppc_queue_exception(struct kvm_vcpu *vcpu, int exception)
{
- set_bit(exception, &vcpu->arch.pending_exceptions);
+ unsigned int priority = exception_priority[exception];
+ set_bit(priority, &vcpu->arch.pending_exceptions);
}
static inline void kvmppc_clear_exception(struct kvm_vcpu *vcpu, int exception)
{
- clear_bit(exception, &vcpu->arch.pending_exceptions);
+ unsigned int priority = exception_priority[exception];
+ clear_bit(priority, &vcpu->arch.pending_exceptions);
}
static inline void kvmppc_set_msr(struct kvm_vcpu *vcpu, u32 new_msr)
--
Hollis Blanchard
IBM Linux Technology Center
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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] 5+ messages in thread* Re: [kvm-ppc-devel] guest panic fixed
2008-03-19 23:25 [kvm-ppc-devel] guest panic fixed Hollis Blanchard
@ 2008-03-20 8:32 ` Christian Ehrhardt
2008-03-20 11:08 ` Christian Ehrhardt
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Christian Ehrhardt @ 2008-03-20 8:32 UTC (permalink / raw)
To: kvm-ppc
Hollis Blanchard wrote:
> Thanks to some excellent debugging by Christian, we found the cause of
> our annoying guest panics. We had not implemented exception priorities
> (my bad), so a userspace ITLB miss was being delivered immediately after
> entry to the decrementer interrupt vector. Patch follows,
> http://penguinppc.org/~hollisb/kvm/ updated.
>
> NFS root with virtio-net still doesn't work for me, but it doesn't
> crash. :)
>
> @@ -65,12 +68,14 @@ extern void kvmppc_44x_tlb_trace(int act
>
> static inline void kvmppc_queue_exception(struct kvm_vcpu *vcpu, int exception)
> {
> - set_bit(exception, &vcpu->arch.pending_exceptions);
> + unsigned int priority = exception_priority[exception];
> + set_bit(priority, &vcpu->arch.pending_exceptions);
saves a line and a local var on irq path (well the compiler might optimize that anyway)
set_bit(exception_priority[exception], &vcpu->arch.pending_exceptions);
> }
>
> static inline void kvmppc_clear_exception(struct kvm_vcpu *vcpu, int exception)
> {
> - clear_bit(exception, &vcpu->arch.pending_exceptions);
> + unsigned int priority = exception_priority[exception];
> + clear_bit(priority, &vcpu->arch.pending_exceptions);
same as above
> }
>
> static inline void kvmppc_set_msr(struct kvm_vcpu *vcpu, u32 new_msr)
--
Grüsse / regards,
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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] 5+ messages in thread* Re: [kvm-ppc-devel] guest panic fixed
2008-03-19 23:25 [kvm-ppc-devel] guest panic fixed Hollis Blanchard
2008-03-20 8:32 ` Christian Ehrhardt
@ 2008-03-20 11:08 ` Christian Ehrhardt
2008-03-20 14:58 ` Hollis Blanchard
2008-03-20 16:12 ` Hollis Blanchard
3 siblings, 0 replies; 5+ messages in thread
From: Christian Ehrhardt @ 2008-03-20 11:08 UTC (permalink / raw)
To: kvm-ppc
Hollis Blanchard wrote:
> Thanks to some excellent debugging by Christian, we found the cause of
> our annoying guest panics. We had not implemented exception priorities
> (my bad), so a userspace ITLB miss was being delivered immediately after
> entry to the decrementer interrupt vector. Patch follows,
> http://penguinppc.org/~hollisb/kvm/ updated.
>
> NFS root with virtio-net still doesn't work for me, but it doesn't
> crash. :)
>
my network works fine (at least initially) see the attached log:
Sending DHCP requests .., OK
IP-Config: Got DHCP answer from 192.168.1.2, my address is 192.168.1.10
IP-Config: Complete:
device=eth0, addr\x192.168.1.10, mask%5.255.255.0, gw\x192.168.1.2,
host\x192.168.1.10, domain=local-devnet, nis-domain=(none),
bootserver\x192.168.1.2, rootserver\x192.168.1.2, rootpathLooking up port of RPC 100003/2 on 192.168.1.2
Looking up port of RPC 100005/1 on 192.168.1.2
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 116k init
modprobe: FATAL: Could not load /lib/modules/2.6.25-rc3-dirty/modules.dep: No such file or directory
modprobe: FATAL: Could not load /lib/modules/2.6.25-rc3-dirty/modules.dep: No such file or directory
INIT: version 2.85 booting
nfs: server 192.168.1.2 not responding, still trying
nfs: server 192.168.1.2 not responding, still trying
nfs: server 192.168.1.2 not responding, still trying
INFO: task rc.sysinit:679 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
After that I run into those lockup's for init:1 and rc.sysinit:679.
The network is working fine for a while and then that I get these nfs timeouts you see above.
I think thats the track I will continue - find out whats wrong there e.g. virtio mangles the packets, too high latency, lost virtio interrupts, ... whatever.
@Hollis let me know if I can help you with your nfs root setup somehow?
--
Grüsse / regards,
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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] 5+ messages in thread* Re: [kvm-ppc-devel] guest panic fixed
2008-03-19 23:25 [kvm-ppc-devel] guest panic fixed Hollis Blanchard
2008-03-20 8:32 ` Christian Ehrhardt
2008-03-20 11:08 ` Christian Ehrhardt
@ 2008-03-20 14:58 ` Hollis Blanchard
2008-03-20 16:12 ` Hollis Blanchard
3 siblings, 0 replies; 5+ messages in thread
From: Hollis Blanchard @ 2008-03-20 14:58 UTC (permalink / raw)
To: kvm-ppc
On Thu, 2008-03-20 at 12:08 +0100, Christian Ehrhardt wrote:
> Hollis Blanchard wrote:
> > Thanks to some excellent debugging by Christian, we found the cause of
> > our annoying guest panics. We had not implemented exception priorities
> > (my bad), so a userspace ITLB miss was being delivered immediately after
> > entry to the decrementer interrupt vector. Patch follows,
> > http://penguinppc.org/~hollisb/kvm/ updated.
> >
> > NFS root with virtio-net still doesn't work for me, but it doesn't
> > crash. :)
> >
>
> my network works fine (at least initially) see the attached log:
>
> Sending DHCP requests .., OK
> IP-Config: Got DHCP answer from 192.168.1.2, my address is 192.168.1.10
> IP-Config: Complete:
> device=eth0, addr\x192.168.1.10, mask%5.255.255.0, gw\x192.168.1.2,
> host\x192.168.1.10, domain=local-devnet, nis-domain=(none),
> bootserver\x192.168.1.2, rootserver\x192.168.1.2, rootpath> Looking up port of RPC 100003/2 on 192.168.1.2
> Looking up port of RPC 100005/1 on 192.168.1.2
> VFS: Mounted root (nfs filesystem).
> Freeing unused kernel memory: 116k init
> modprobe: FATAL: Could not load /lib/modules/2.6.25-rc3-dirty/modules.dep: No such file or directory
> modprobe: FATAL: Could not load /lib/modules/2.6.25-rc3-dirty/modules.dep: No such file or directory
> INIT: version 2.85 booting
> nfs: server 192.168.1.2 not responding, still trying
> nfs: server 192.168.1.2 not responding, still trying
> nfs: server 192.168.1.2 not responding, still trying
> INFO: task rc.sysinit:679 blocked for more than 120 seconds.
> "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
>
>
> After that I run into those lockup's for init:1 and rc.sysinit:679.
> The network is working fine for a while and then that I get these nfs
> timeouts you see above.
> I think thats the track I will continue - find out whats wrong there
> e.g. virtio mangles the packets, too high latency, lost virtio
> interrupts, ... whatever.
>
> @Hollis let me know if I can help you with your nfs root setup somehow?
No, that's pretty much exactly what I see, but my timeouts appear before
modprobe and the INIT message.
--
Hollis Blanchard
IBM Linux Technology Center
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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] 5+ messages in thread
* Re: [kvm-ppc-devel] guest panic fixed
2008-03-19 23:25 [kvm-ppc-devel] guest panic fixed Hollis Blanchard
` (2 preceding siblings ...)
2008-03-20 14:58 ` Hollis Blanchard
@ 2008-03-20 16:12 ` Hollis Blanchard
3 siblings, 0 replies; 5+ messages in thread
From: Hollis Blanchard @ 2008-03-20 16:12 UTC (permalink / raw)
To: kvm-ppc
On Thu, 2008-03-20 at 09:32 +0100, Christian Ehrhardt wrote:
> Hollis Blanchard wrote:
> > Thanks to some excellent debugging by Christian, we found the cause of
> > our annoying guest panics. We had not implemented exception priorities
> > (my bad), so a userspace ITLB miss was being delivered immediately after
> > entry to the decrementer interrupt vector. Patch follows,
> > http://penguinppc.org/~hollisb/kvm/ updated.
> >
> > NFS root with virtio-net still doesn't work for me, but it doesn't
> > crash. :)
> >
> > @@ -65,12 +68,14 @@ extern void kvmppc_44x_tlb_trace(int act
> >
> > static inline void kvmppc_queue_exception(struct kvm_vcpu *vcpu, int exception)
> > {
> > - set_bit(exception, &vcpu->arch.pending_exceptions);
> > + unsigned int priority = exception_priority[exception];
> > + set_bit(priority, &vcpu->arch.pending_exceptions);
>
> saves a line and a local var on irq path (well the compiler might optimize that anyway)
> set_bit(exception_priority[exception], &vcpu->arch.pending_exceptions);
The compiler should handle it; you can examine the disassembly if you're
worried.
--
Hollis Blanchard
IBM Linux Technology Center
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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] 5+ messages in thread
end of thread, other threads:[~2008-03-20 16:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-19 23:25 [kvm-ppc-devel] guest panic fixed Hollis Blanchard
2008-03-20 8:32 ` Christian Ehrhardt
2008-03-20 11:08 ` Christian Ehrhardt
2008-03-20 14:58 ` Hollis Blanchard
2008-03-20 16:12 ` Hollis Blanchard
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.