|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen-unstable 4.8: Host crash when shutting down guest with pci device passed through using MSI-X interrupts.
Monday, July 18, 2016, 7:48:20 PM, you wrote:
> On 18/07/16 11:21, linux@xxxxxxxxxxxxxx wrote:
>> Hi Jan,
>>
>> It seems that since your patch series starting with commit:
>> 2016-06-22 x86/vMSI-X: defer intercept handler registration
>> 74c6dc2d0ac4dcab0c6243cdf6ed550c1532b798
>>
>> The shutdown of a guest which has a PCI device passed through which
>> uses MSI-X interrupts causes
>> a host crash, see the splat below. Somehow it also doesn't reboot in 5
>> seconds as it is supposed to (i don't have no-reboot on the command
>> line).
>>
>> --
>> Sander
>>
>>
>> (XEN) [2016-07-16 16:03:17.069] ----[ Xen-4.8-unstable x86_64
>> debug=y Not tainted ]----
>> (XEN) [2016-07-16 16:03:17.069] CPU: 0
>> (XEN) [2016-07-16 16:03:17.069] RIP: e008:[<ffff82d0801e39de>]
>> msixtbl_pt_unregister+0x7b/0xd9
>> (XEN) [2016-07-16 16:03:17.069] RFLAGS: 0000000000010082 CONTEXT:
>> hypervisor (d0v0)
>> (XEN) [2016-07-16 16:03:17.069] rax: ffff83055c678e40 rbx:
>> ffff83055c685500 rcx: 0000000000000001
>> (XEN) [2016-07-16 16:03:17.069] rdx: 0000000000000000 rsi:
>> 0000000000001ab0 rdi: ffff8305313b85a0
>> (XEN) [2016-07-16 16:03:17.069] rbp: ffff83009fd07c78 rsp:
>> ffff83009fd07c68 r8: ffff8305356dfff0
>> (XEN) [2016-07-16 16:03:17.069] r9: ffff8305356df480 r10:
>> ffff830503420c50 r11: 0000000000000282
>> (XEN) [2016-07-16 16:03:17.069] r12: ffff8305313b8000 r13:
>> ffff83009fd07e48 r14: ffff8305313b8000
>> (XEN) [2016-07-16 16:03:17.069] r15: ffff8305356df4a8 cr0:
>> 0000000080050033 cr4: 00000000000006e0
>> (XEN) [2016-07-16 16:03:17.069] cr3: 000000053639f000 cr2:
>> 0000000000000000
>> (XEN) [2016-07-16 16:03:17.069] ds: 0000 es: 0000 fs: 0000 gs:
>> 0000 ss: e010 cs: e008
>> (XEN) [2016-07-16 16:03:17.069] Xen code around <ffff82d0801e39de>
>> (msixtbl_pt_unregister+0x7b/0xd9):
>> (XEN) [2016-07-16 16:03:17.069] 39 42 18 74 19 48 89 ca <48> 8b 0a 0f
>> 18 09 48 39 fa 75 ec 48 8d 7b 24 e8
>> (XEN) [2016-07-16 16:03:17.069] Xen stack trace from
>> rsp=ffff83009fd07c68:
>> (XEN) [2016-07-16 16:03:17.069] 0000000000000000 ffff8305356df480
>> ffff83009fd07ce8 ffff82d08014c394
>> (XEN) [2016-07-16 16:03:17.069] 0000000000000001 ffff8305356df480
>> 0000000000000293 ffff8305313b80cc
>> (XEN) [2016-07-16 16:03:17.069] 000000568012ffe5 ffff8305313b8000
>> ffff83009fd07cd8 ffff83009fd07e38
>> (XEN) [2016-07-16 16:03:17.070] 0000000000000000 ffff83054e5fc000
>> 00007fc25a33e004 ffff8305313b8000
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07da8 ffff82d0801629c8
>> 0000000000000000 ffff83053b1191f0
>> (XEN) [2016-07-16 16:03:17.070] 0000000000000246 ffff83009fd07d28
>> ffff82d0801300ae 000000000000000e
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07d78 ffff82d080171497
>> ffff83009fd07d78 000000020001d17b
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07d68 0000000000000000
>> ffff83009fd07d68 ffff82d080130280
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07d78 ffff82d08014d0aa
>> 0000000000000202 0000000000000000
>> (XEN) [2016-07-16 16:03:17.070] ffff8305313b8000 ffff88005716d320
>> 0000000000305000 00007fc25a33e004
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07ef8 ffff82d080104b2c
>> 0000000000000206 0000000000000002
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07df8 ffff82d08018c9db
>> 0000000000000cfe 0000000000000002
>> (XEN) [2016-07-16 16:03:17.070] 0000000000000002 ffff83054e5fc000
>> ffff83009fd07e48 ffff82d08019c119
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07e38 0000000080121177
>> ffff83009fd07e38 0000000000000cfe
>> (XEN) [2016-07-16 16:03:17.070] ffff83009fd07f18 0000000000000206
>> 0000000c00000030 000056082bb90013
>> (XEN) [2016-07-16 16:03:17.070] 0000000200000056 00007fc200000013
>> 0000305600000000 000056082b87465d
>> (XEN) [2016-07-16 16:03:17.070] 00007ffe268206e0 00007fc25606b31f
>> 0000000000000000 000056082b8746cf
>> (XEN) [2016-07-16 16:03:17.070] 0000000000001000 fee5600026820730
>> 00007ffe26820740 000056082b8797be
>> (XEN) [2016-07-16 16:03:17.070] 00000000fee56000 0000430026820772
>> 00007ffe26820740 0000000000003056
>> (XEN) [2016-07-16 16:03:17.070] 00007ffe268206e0 ffff83009ff8a000
>> 00007ffe26820580 ffff88005716d320
>> (XEN) [2016-07-16 16:03:17.070] Xen call trace:
>> (XEN) [2016-07-16 16:03:17.070] [<ffff82d0801e39de>]
>> msixtbl_pt_unregister+0x7b/0xd9
>> (XEN) [2016-07-16 16:03:17.070] [<ffff82d08014c394>]
>> pt_irq_destroy_bind+0x2be/0x3f0
>> (XEN) [2016-07-16 16:03:17.070] [<ffff82d0801629c8>]
>> arch_do_domctl+0xc77/0x2414
>> (XEN) [2016-07-16 16:03:17.070] [<ffff82d080104b2c>]
>> do_domctl+0x19db/0x1d26
>> (XEN) [2016-07-16 16:03:17.070] [<ffff82d0802426bd>]
>> lstar_enter+0xdd/0x137
>> (XEN) [2016-07-16 16:03:17.070]
>> (XEN) [2016-07-16 16:03:17.070] Pagetable walk from 0000000000000000:
>> (XEN) [2016-07-16 16:03:17.070] L4[0x000] = 0000000000000000
>> ffffffffffffffff
>> (XEN) [2016-07-16 16:03:18.147]
>> (XEN) [2016-07-16 16:03:18.155] ****************************************
>> (XEN) [2016-07-16 16:03:18.175] Panic on CPU 0:
>> (XEN) [2016-07-16 16:03:18.187] FATAL PAGE FAULT
>> (XEN) [2016-07-16 16:03:18.200] [error_code=0000]
>> (XEN) [2016-07-16 16:03:18.214] Faulting linear address: 0000000000000000
>> (XEN) [2016-07-16 16:03:18.233] ****************************************
>> (XEN) [2016-07-16 16:03:18.252]
>> (XEN) [2016-07-16 16:03:18.261] Reboot in five seconds...
>>
> Can you paste the disassembly of msixtbl_pt_unregister() please? That
> is a dereference of %rdx which is NULL at this point, but I need to
> figure out which pointer it is supposed to be.
Hi Andrew,
# addr2line -e xen-syms ffff82d0801e3e7e
/usr/src/new/xen-unstable/xen/arch/x86/hvm/vmsi.c:535 (discriminator 1)
So the RIP points to:
void msixtbl_pt_unregister(struct domain *d, struct pirq *pirq)
{
struct irq_desc *irq_desc;
struct msi_desc *msi_desc;
struct pci_dev *pdev;
struct msixtbl_entry *entry;
ASSERT(pcidevs_locked());
ASSERT(spin_is_locked(&d->event_lock));
if ( !has_vlapic(d) )
return;
irq_desc = pirq_spin_lock_irq_desc(pirq, NULL);
if ( !irq_desc )
return;
msi_desc = irq_desc->msi_desc;
if ( !msi_desc )
goto out;
pdev = msi_desc->dev;
list_for_each_entry( entry, &d->arch.hvm_domain.msixtbl_list, list ) <---
HERE
if ( pdev == entry->pdev )
goto found;
out:
spin_unlock_irq(&irq_desc->lock);
return;
found:
if ( !atomic_dec_and_test(&entry->refcnt) )
del_msixtbl_entry(entry);
spin_unlock_irq(&irq_desc->lock);
}
Disassembly:
(gdb) info line msixtbl_pt_unregister
Line 513 of "vmsi.c" starts at address 0xffff82d0801e3e03
<msixtbl_pt_unregister> and ends at 0xffff82d0801e3e10
<msixtbl_pt_unregister+13>.
(gdb) disas 0xffff82d0801e3e03
Dump of assembler code for function msixtbl_pt_unregister:
0xffff82d0801e3e03 <+0>: push %rbp
0xffff82d0801e3e04 <+1>: mov %rsp,%rbp
0xffff82d0801e3e07 <+4>: push %r12
0xffff82d0801e3e09 <+6>: push %rbx
0xffff82d0801e3e0a <+7>: mov %rdi,%r12
0xffff82d0801e3e0d <+10>: mov %rsi,%rbx
0xffff82d0801e3e10 <+13>: callq 0xffff82d08014d585 <pcidevs_locked>
0xffff82d0801e3e15 <+18>: test %al,%al
0xffff82d0801e3e17 <+20>: jne 0xffff82d0801e3e1b
<msixtbl_pt_unregister+24>
0xffff82d0801e3e19 <+22>: ud2
0xffff82d0801e3e1b <+24>: lea 0xcc(%r12),%rdi
0xffff82d0801e3e23 <+32>: callq 0xffff82d080130544 <_spin_is_locked>
0xffff82d0801e3e28 <+37>: test %eax,%eax
0xffff82d0801e3e2a <+39>: jne 0xffff82d0801e3e2e
<msixtbl_pt_unregister+43>
0xffff82d0801e3e2c <+41>: ud2
0xffff82d0801e3e2e <+43>: testb $0x1,0x9dc(%r12)
0xffff82d0801e3e37 <+52>: je 0xffff82d0801e3ed7
<msixtbl_pt_unregister+212>
0xffff82d0801e3e3d <+58>: mov $0x0,%esi
0xffff82d0801e3e42 <+63>: mov %rbx,%rdi
0xffff82d0801e3e45 <+66>: callq 0xffff82d0801743a4
<pirq_spin_lock_irq_desc>
0xffff82d0801e3e4a <+71>: mov %rax,%rbx
0xffff82d0801e3e4d <+74>: test %rax,%rax
0xffff82d0801e3e50 <+77>: je 0xffff82d0801e3ed7
<msixtbl_pt_unregister+212>
0xffff82d0801e3e56 <+83>: mov 0x10(%rax),%rax
0xffff82d0801e3e5a <+87>: test %rax,%rax
0xffff82d0801e3e5d <+90>: je 0xffff82d0801e3e89
<msixtbl_pt_unregister+134>
0xffff82d0801e3e5f <+92>: mov 0x20(%rax),%rax
0xffff82d0801e3e63 <+96>: mov 0x5a0(%r12),%rdx
0xffff82d0801e3e6b <+104>: lea 0x5a0(%r12),%rdi
0xffff82d0801e3e73 <+112>: jmp 0xffff82d0801e3e7e
<msixtbl_pt_unregister+123>
0xffff82d0801e3e75 <+114>: cmp %rax,0x18(%rdx)
0xffff82d0801e3e79 <+118>: je 0xffff82d0801e3e94
<msixtbl_pt_unregister+145>
0xffff82d0801e3e7b <+120>: mov %rcx,%rdx
0xffff82d0801e3e7e <+123>: mov (%rdx),%rcx
0xffff82d0801e3e81 <+126>: prefetcht0 (%rcx)
0xffff82d0801e3e84 <+129>: cmp %rdi,%rdx
0xffff82d0801e3e87 <+132>: jne 0xffff82d0801e3e75
<msixtbl_pt_unregister+114>
0xffff82d0801e3e89 <+134>: lea 0x24(%rbx),%rdi
0xffff82d0801e3e8d <+138>: callq 0xffff82d080130514 <_spin_unlock_irq>
0xffff82d0801e3e92 <+143>: jmp 0xffff82d0801e3ed7
<msixtbl_pt_unregister+212>
0xffff82d0801e3e94 <+145>: lock decl 0x10(%rdx)
0xffff82d0801e3e98 <+149>: sete %al
0xffff82d0801e3e9b <+152>: test %al,%al
0xffff82d0801e3e9d <+154>: jne 0xffff82d0801e3ece
<msixtbl_pt_unregister+203>
0xffff82d0801e3e9f <+156>: mov (%rdx),%rcx
0xffff82d0801e3ea2 <+159>: mov 0x8(%rdx),%rax
0xffff82d0801e3ea6 <+163>: mov %rax,0x8(%rcx)
0xffff82d0801e3eaa <+167>: mov %rcx,(%rax)
0xffff82d0801e3ead <+170>: movabs $0x200200200200200,%rax
0xffff82d0801e3eb7 <+180>: mov %rax,0x8(%rdx)
0xffff82d0801e3ebb <+184>: lea 0x158(%rdx),%rdi
0xffff82d0801e3ec2 <+191>: lea -0xac1(%rip),%rsi #
0xffff82d0801e3408 <free_msixtbl_entry>
0xffff82d0801e3ec9 <+198>: callq 0xffff82d080122be0 <call_rcu>
0xffff82d0801e3ece <+203>: lea 0x24(%rbx),%rdi
0xffff82d0801e3ed2 <+207>: callq 0xffff82d080130514 <_spin_unlock_irq>
0xffff82d0801e3ed7 <+212>: pop %rbx
0xffff82d0801e3ed8 <+213>: pop %r12
0xffff82d0801e3eda <+215>: pop %rbp
0xffff82d0801e3edb <+216>: retq
End of assembler dump.
--
Sander
> Thanks,
> ~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |