Hallo Liste, ich möchte an eine domU ein PCI-Gerät durchreichen, bekomme es aber nicht hin. https://wiki.xenproject.org/wiki/Xen_PCI_Passthrough habe ich gefunden, kann es aber nicht so umsetzen, das es auch funktioniert. Hardware: Asrock j5040-ITX mit Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz ~# lspci 00:00.0 Host bridge: Intel Corporation Gemini Lake Host Bridge (rev 06) 00:00.1 Signal processing controller: Intel Corporation Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant (rev 06) 00:02.0 VGA compatible controller: Intel Corporation GeminiLake [UHD Graphics 605] (rev 06) 00:0f.0 Communication controller: Intel Corporation Celeron/Pentium Silver Processor Trusted Execution Engine Interface (rev 06) 00:12.0 SATA controller: Intel Corporation Celeron/Pentium Silver Processor SATA Controller (rev 06) 00:13.0 PCI bridge: Intel Corporation Gemini Lake PCI Express Root Port (rev f6) 00:13.1 PCI bridge: Intel Corporation Gemini Lake PCI Express Root Port (rev f6) 00:13.2 PCI bridge: Intel Corporation Gemini Lake PCI Express Root Port (rev f6) 00:13.3 PCI bridge: Intel Corporation Gemini Lake PCI Express Root Port (rev f6) 00:15.0 USB controller: Intel Corporation Celeron/Pentium Silver Processor USB 3.0 xHCI Controller (rev 06) 00:1f.0 ISA bridge: Intel Corporation Celeron/Pentium Silver Processor LPC Controller (rev 06) 00:1f.1 SMBus: Intel Corporation Celeron/Pentium Silver Processor Gaussian Mixture Model (rev 06) 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15) 04:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 02) Den ASMedia SATA controller will ich an die domU durchreichen. ~# cat /etc/apt/sources.list # # bookworm (12.x) stable since 10.06.2023 # deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free ~# cat /etc/default/grub ... GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="console=tty0 console=hvc0 console=ttyS0,19200 ipv6.disable=1" ... ~# cat /etc/default/grub.d/xen.cfg ... GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=4G cpuidle dom0_max_vcpus=2" GRUB_CMDLINE_XEN="com1=19200,8n1 console=com1,vga" ... ~# cat /proc/cmdline placeholder root=/dev/mapper/server-root ro console=tty0 console=hvc0 console=ttyS0,19200 ipv6.disable=1 quiet ~# uname -a Linux j5040 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux ~# cat /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. xen_pciback Dann habe ich mir noch einen eigenen systemd service gebastelt. ~# cat /etc/systemd/system/xenpciback.service [Unit] Description=make a device assignable to Xen PCI Passthrough After=xen.service Before=xendomains.service [Service] Type=oneshot ExecStart=/usr/sbin/xl pci-assignable-add 04:00.0 [Install] WantedBy=multi-user.target Wenn ich dann prüfe, ob das device bereit für passthrough ist ~# xl pci-assignable-list 0000:04:00.0 scheint alles vorbereitet zu sein. ~# cat /etc/xen/omv.cfg # # Configuration file for the Xen instance omv, created # by xen-tools 4.9.2 on Mon Apr 22 18:41:22 2024. # # # Kernel + memory size # bootloader = 'pygrub' vcpus = '2' memory = '4096' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'phy:/dev/server/omv-disk,xvda2,w', 'phy:/dev/server/omv-swap,xvda1,w', ] # # Physical volumes # # # Hostname # name = 'omv' # # Networking # dhcp = 'dhcp' vif = [ 'mac=00:16:3E:55:CD:2D' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'destroy' # # PCI Passthrough # pci = [ '04:00.0' ] Dann starte ich die domU ~# xl -v create /etc/xen/omv.cfg Parsing config from /etc/xen/omv.cfg libxl: detail: libxl_create.c:662:libxl__domain_make: passthrough: sync_pt domainbuilder: detail: xc_dom_allocate: cmdline="root=/dev/xvda2 ro elevator=noop iommu=soft root=/dev/xvda2 ro", features="" domainbuilder: detail: xc_dom_kernel_mem: called domainbuilder: detail: xc_dom_module_mem: called domainbuilder: detail: xc_dom_boot_xen_init: ver 4.17, caps xen-3.0-x86_64 hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 domainbuilder: detail: xc_dom_parse_image: called domainbuilder: detail: xc_dom_find_loader: trying multiboot-binary loader ... domainbuilder: detail: loader probe failed domainbuilder: detail: xc_dom_find_loader: trying HVM-generic loader ... domainbuilder: detail: loader probe failed domainbuilder: detail: xc_dom_find_loader: trying Linux bzImage loader ... domainbuilder: detail: XZ: Saw data stream end domainbuilder: detail: _xc_try_lzma_decode: XZ decompress OK, 0x7ad1e0 -> 0x3ed8e54 domainbuilder: detail: loader probe OK xc: detail: ELF: phdr: paddr=0x1000000 memsz=0x18d7068 xc: detail: ELF: phdr: paddr=0x2a00000 memsz=0x63b000 xc: detail: ELF: phdr: paddr=0x303b000 memsz=0x34000 xc: detail: ELF: phdr: paddr=0x306f000 memsz=0x1991000 xc: detail: ELF: memory: 0x1000000 -> 0x4a00000 xc: detail: ELF: note: GUEST_OS = "linux" xc: detail: ELF: note: GUEST_VERSION = "2.6" xc: detail: ELF: note: XEN_VERSION = "xen-3.0" xc: detail: ELF: note: VIRT_BASE = 0xffffffff80000000 xc: detail: ELF: note: INIT_P2M = 0x8000000000 xc: detail: ELF: note: ENTRY = 0xffffffff8306f1c0 xc: detail: ELF: note: HYPERCALL_PAGE = 0xffffffff81a28000 xc: detail: ELF: note: FEATURES = "!writable_page_tables|pae_pgdir_above_4gb" xc: detail: ELF: note: SUPPORTED_FEATURES = 0x8801 xc: detail: ELF: note: PAE_MODE = "yes" xc: detail: ELF: note: LOADER = "generic" xc: detail: ELF: note: unknown (0xd) xc: detail: ELF: note: SUSPEND_CANCEL = 0x1 xc: detail: ELF: note: MOD_START_PFN = 0x1 xc: detail: ELF: note: HV_START_LOW = 0xffff800000000000 xc: detail: ELF: note: PADDR_OFFSET = 0 xc: detail: ELF: note: PHYS32_ENTRY = 0x1000860 xc: detail: ELF: addresses: xc: detail: virt_base = 0xffffffff80000000 xc: detail: elf_paddr_offset = 0x0 xc: detail: virt_offset = 0xffffffff80000000 xc: detail: virt_kstart = 0xffffffff81000000 xc: detail: virt_kend = 0xffffffff84a00000 xc: detail: virt_entry = 0xffffffff8306f1c0 xc: detail: p2m_base = 0x8000000000 domainbuilder: detail: xc_dom_parse_elf_kernel: xen-3.0-x86_64: 0xffffffff81000000 -> 0xffffffff84a00000 domainbuilder: detail: xc_dom_compat_check: supported guest type: xen-3.0-x86_64 <= matches domainbuilder: detail: xc_dom_compat_check: supported guest type: hvm-3.0-x86_32 domainbuilder: detail: xc_dom_compat_check: supported guest type: hvm-3.0-x86_32p domainbuilder: detail: xc_dom_compat_check: supported guest type: hvm-3.0-x86_64 domainbuilder: detail: xc_dom_mem_init: mem 4096 MB, pages 0x100000 pages, 4k each domainbuilder: detail: xc_dom_mem_init: 0x100000 pages domainbuilder: detail: xc_dom_boot_mem_init: called domainbuilder: detail: x86_compat: guest xen-3.0-x86_64, address size 64 domainbuilder: detail: xc_dom_malloc : 8192 kB domainbuilder: detail: xc_dom_build_image: called domainbuilder: detail: xc_dom_malloc : 348 kB domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x1000+0x3a00 at 0x7f68e2327000 domainbuilder: detail: xc_dom_alloc_segment: kernel : 0xffffffff81000000 -> 0xffffffff84a00000 (pfn 0x1000 + 0x3a00 pages) xc: detail: ELF: phdr 0 at 0x7f68e2327000 -> 0x7f68e3bfe068 xc: detail: ELF: phdr 1 at 0x7f68e3d27000 -> 0x7f68e4362000 xc: detail: ELF: phdr 2 at 0x7f68e4362000 -> 0x7f68e4396000 xc: detail: ELF: phdr 3 at 0x7f68e4396000 -> 0x7f68e5d27000 domainbuilder: detail: xc_dom_alloc_page : start info : 0xffffffff84a00000 (pfn 0x4a00) domainbuilder: detail: xc_dom_alloc_page : xenstore : 0xffffffff84a01000 (pfn 0x4a01) domainbuilder: detail: xc_dom_alloc_page : console : 0xffffffff84a02000 (pfn 0x4a02) domainbuilder: detail: count_pgtables: 0x0000007fffffffff/39: 0x0000ff8000000000 -> 0x0000ffffffffffff, 1 table(s) domainbuilder: detail: count_pgtables: 0x000000003fffffff/30: 0x0000ffff80000000 -> 0x0000ffffbfffffff, 1 table(s) domainbuilder: detail: count_pgtables: 0x00000000001fffff/21: 0x0000ffff80000000 -> 0x0000ffff84bfffff, 38 table(s) domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x4a03+0x29 at 0x7f68f2283000 domainbuilder: detail: xc_dom_alloc_segment: page tables : 0xffffffff84a03000 -> 0xffffffff84a2c000 (pfn 0x4a03 + 0x29 pages) domainbuilder: detail: xc_dom_alloc_page : boot stack : 0xffffffff84a2c000 (pfn 0x4a2c) domainbuilder: detail: xc_dom_build_image : virt_alloc_end : 0xffffffff84a2d000 domainbuilder: detail: xc_dom_build_image : virt_pgtab_end : 0xffffffff84c00000 domainbuilder: detail: xc_dom_malloc : 742 kB domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x4c00+0x7bc6 at 0x7f68da761000 domainbuilder: detail: xc_dom_alloc_segment: module0 : 0xffffffff84c00000 -> 0xffffffff8c7c6000 (pfn 0x4c00 + 0x7bc6 pages) domainbuilder: detail: xc_dom_do_gunzip: unzip ok, 0x225e1f6 -> 0x7bc5210 domainbuilder: detail: count_pgtables: 0x0000007fffffffff/39: 0x0000008000000000 -> 0x000000ffffffffff, 1 table(s) domainbuilder: detail: count_pgtables: 0x000000003fffffff/30: 0x0000008000000000 -> 0x000000803fffffff, 1 table(s) domainbuilder: detail: count_pgtables: 0x00000000001fffff/21: 0x0000008000000000 -> 0x00000080007fffff, 4 table(s) domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0xc7c6+0x806 at 0x7f68f093f000 domainbuilder: detail: xc_dom_alloc_segment: phys2mach : 0xffffffff8c7c6000 -> 0xffffffff8cfcc000 (pfn 0xc7c6 + 0x806 pages) domainbuilder: detail: xc_dom_boot_image: called domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x4a00+0x1 at 0x7f68f27aa000 domainbuilder: detail: start_info_x86_64: called domainbuilder: detail: setup_hypercall_page: vaddr=0xffffffff81a28000 pfn=0x1a28 domainbuilder: detail: domain builder memory footprint domainbuilder: detail: allocated domainbuilder: detail: malloc : 9335 kB domainbuilder: detail: anon mmap : 62 MB domainbuilder: detail: mapped domainbuilder: detail: file mmap : 0 bytes domainbuilder: detail: domU mmap : 189 MB domainbuilder: detail: bootlate_pv: shared_info: pfn 0x0, mfn 0x61bc7 domainbuilder: detail: shared_info_x86_64: called domainbuilder: detail: vcpu_x86_64: called domainbuilder: detail: vcpu_x86_64: cr3: pfn 0x4a03 mfn 0x468403 domainbuilder: detail: xc_dom_set_gnttab_entry: d1 gnt[0] -> d0 0x468402 domainbuilder: detail: xc_dom_set_gnttab_entry: d1 gnt[1] -> d0 0x468401 domainbuilder: detail: xc_dom_release: called Die domU stürzt gleich nach dem starten ab, und im log steht nur ~# cat /var/log/xen/xl-omv.log Waiting for domain omv (domid 1) to die [pid 1385] Domain 1 has shut down, reason code 3 0x3 Action for shutdown reason code 3 is destroy Domain 1 needs to be cleaned up: destroying the domain libxl: error: libxl_device.c:1452:libxl__wait_for_backend: Backend /local/domain/0/backend/pci/1/0 not ready Done. Exiting now Ohne PCI Passthrough startet die domU normal und ich kann auf sie zugreifen. Meine Frage lautet nun: Was mache ich falsch? Frohe Pfingsten
Attachment:
signature.asc
Description: PGP signature