Hello,

I come to this problem when using PCI passthrough (AMD IOMMU), I need
to passthrough a single PCI device which is behind PCIe-to-PCI bridge.
PCI tree in this case;

# lspci -t -v
-[0000:00]-+-00.0  ATI Technologies Inc RD890 PCI to PCI bridge
(external gfx0 port A)
           +-00.2  ATI Technologies Inc RD990 I/O Memory Management Unit (IOMMU)
           +-09.0-[01]----00.0  Intel Corporation 82574L Gigabit
Network Connection
           +-0a.0-[02]----00.0  Intel Corporation 82574L Gigabit
Network Connection
           +-11.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA
Controller [AHCI mode]
           +-12.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-12.1  ATI Technologies Inc SB7x0 USB OHCI1 Controller
           +-12.2  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-13.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-13.1  ATI Technologies Inc SB7x0 USB OHCI1 Controller
           +-13.2  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-14.0  ATI Technologies Inc SBx00 SMBus Controller
           +-14.3  ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller
           +-14.4-[03]--+-03.0  Creative Labs SB Audigy
           |            +-03.1  Creative Labs SB Audigy Game Port
           |            +-03.2  Creative Labs SB Audigy FireWire Port
           |            \-04.0  Matrox Graphics, Inc. MGA G200eW WPCM450
           +-14.5  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
           +-18.0  Advanced Micro Devices [AMD] Family 10h Processor
HyperTransport Configuration
           +-18.1  Advanced Micro Devices [AMD] Family 10h Processor Address Map
           +-18.2  Advanced Micro Devices [AMD] Family 10h Processor
DRAM Controller
           +-18.3  Advanced Micro Devices [AMD] Family 10h Processor
Miscellaneous Control
           \-18.4  Advanced Micro Devices [AMD] Family 10h Processor
Link Control

I am passing-through only "03.0  Creative Labs SB Audigy" device which
is just enough for the case, but to be able to do so i need to unbind
all devices sharing the same bridge, as well as the bridge device
itself before starting KVM guest;

# echo 1002 4384 > /sys/bus/pci/drivers/pci-stub/new_id
# echo 0000:00:14.4 > /sys/bus/pci/drivers/pci-stub/unbind

The actual passthrough works very good at guest side, but there is a
problem when i shut the guest down;

Jan  14 03:29:33 H8SCM kernel: [ 1413.439703] ------------[ cut here
]------------
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] kernel BUG at
/build/buildd/linux-3.2.0/drivers/iommu/amd_iommu.c:1740!
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] invalid opcode: 0000 [#1] SMP
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] CPU 0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Modules linked in:
pci_stub ip6table_filter ip6_tables ebtable_nat ebtables
ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4
xt_state nf_conntrack ipt_REJECT xt_CHECKSUM iptable_mangle xt_tcpudp
iptable_filter ip_tables x_tables kvm_amd kvm vesafb w83795 jc42
snd_emu10k1_synth snd_emux_synth snd_seq_virmidi snd_seq_midi_emul
bridge stp snd_emu10k1 snd_ac97_codec ac97_bus snd_pcm snd_page_alloc
snd_util_mem snd_hwdep snd_seq_midi snd_rawmidi snd_seq_midi_event
psmouse snd_seq joydev snd_timer snd_seq_device usbhid serio_raw snd
emu10k1_gp amd64_edac_mod gameport soundcore edac_core k10temp
edac_mce_amd hid sp5100_tco i2c_piix4 ipmi_si ipmi_msghandler lp
parport firewire_ohci firewire_core crc_itu_t e1000e
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Pid: 1550, comm: kvm Not
tainted 3.2.0-7-generic #13-Ubuntu Supermicro H8SCM/H8SCM
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RIP:
0010:[<ffffffff81512896>]  [<ffffffff81512896>]
__detach_device+0xc6/0xd0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RSP:
0018:ffff88020ea57ac8  EFLAGS: 00010046
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RAX: dead000000100100
RBX: ffff8802103dd640 RCX: 00000000fffffff0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RDX: ffff88020ea57a68
RSI: 0000000000000082 RDI: ffff8802103dd640
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RBP: ffff88020ea57ae8
R08: 0000000000002000 R09: dead000000100100
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] R10: dead000000200200
R11: 0000000000000000 R12: 0000000000000000
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] R13: dead000000100100
R14: ffff8802103dd640 R15: ffff88020d634410
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] FS:
00007fb8d2b9b700(0000) GS:ffff88021fc00000(0000)
knlGS:0000000000000000
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] CS:  0010 DS: 0000 ES:
0000 CR0: 000000008005003b
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] CR2: 0000000000d03000
CR3: 000000020fe51000 CR4: 00000000000006f0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] DR0: 0000000000000000
DR1: 0000000000000000 DR2: 0000000000000000
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] DR3: 0000000000000000
DR6: 00000000ffff0ff0 DR7: 0000000000000400
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Process kvm (pid: 1550,
threadinfo ffff88020ea56000, task ffff88020d5d0000)
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Stack:
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  ffff88020d634400
ffff8802110ffbe0 dead000000100100 ffff8802103dd640
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  ffff88020ea57b38
ffffffff8151371e ffff88020f170038 0000000000000206
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  ffff88020fa88000
ffff8802110ffbe0 ffff880211edad80 0000000000000003
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Call Trace:
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8151371e>]
amd_iommu_domain_destroy+0x9e/0xd0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff815110cf>]
iommu_domain_free+0x1f/0x30
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffffa0246117>]
kvm_iommu_unmap_guest+0x27/0x30 [kvm]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffffa02586e8>]
kvm_arch_destroy_vm+0x18/0x150 [kvm]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffffa02408cd>]
kvm_destroy_vm+0xed/0x140 [kvm]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffffa0240945>]
kvm_put_kvm+0x25/0x30 [kvm]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffffa0240c88>]
kvm_vcpu_release+0x18/0x20 [kvm]
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8117776e>]
__fput+0xbe/0x210
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff811778e5>]
fput+0x25/0x30
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81174366>]
filp_close+0x66/0x90
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81067aaa>]
put_files_struct.part.10+0x7a/0xe0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff810694f8>]
put_files_struct+0x18/0x20
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff810695c4>]
exit_files+0x54/0x70
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81069aa5>]
do_exit+0x195/0x420
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8107820a>] ?
__dequeue_signal+0x6a/0xb0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81069ed4>]
do_group_exit+0x44/0xa0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8107ad8c>]
get_signal_to_deliver+0x21c/0x420
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81013815>]
do_signal+0x45/0x130
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8109e88c>] ?
do_futex+0xbc/0x1d0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8109eaaa>] ?
sys_futex+0x10a/0x1a0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81176400>] ?
vfs_write+0x110/0x180
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff81013ac5>]
do_notify_resume+0x65/0x80
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  [<ffffffff8165a890>]
int_signal+0x12/0x17
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Code: 0f 1f 44 00 00 e8
9b fe ff ff eb aa 66 0f 1f 84 00 00 00 00 00 48 8b 35 01 9f a0 00 49
39 f4 74 be 48 89 df e8 2c fd ff ff eb b4 <0f> 0b 0f 1f 84 00 00 00 00
00 55 48 89 e5 48 83 ec 20 48 89 5d
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] RIP
[<ffffffff81512896>] __detach_device+0xc6/0xd0
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001]  RSP <ffff88020ea57ac8>
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] ---[ end trace
a18be2ece9e040e5 ]---
Jan  14 03:29:33 H8SCM kernel: [ 1413.440001] Fixing recursive fault
but reboot is needed!

Well, something similar was reported almost a year ago, ("PCI
Passthrough, error: The driver 'pci-stub' is occupying your device
0000:08:06.2", http://www.spinics.net/lists/kvm/msg50687.html) but the
problems seems to manifest itself in detach_device() in my case
instead of amd_iommu_domain_destroy() as was reported. Please share if
there are any news about possible fix or workaround. I am willing to
invest some time in trying to investigate this if someone would kindly
point me to a proper place in amd_iommu.c.

Cheers,
Samir
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to