[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: arm (qemu -M virt) 64 bit xen running 32 bit guest problem
> > > Looking at the code, this seems like an issue when trying to > > > translate a guest virtual address to a machine address. > > > > > > A few questions: > > > - Which QEMU version are you using? > > > - What's your Linux configuration? Are you using LPAE or short page > tables? > > > > I am using default ubuntu package on bionic: > > > > $ qemu-system-aarch64 --version > > QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.29) Copyright > > (c) 2003-2017 Fabrice Bellard and the QEMU Project developers > > > > I just tried the stable-4.14 branch and this "Invalid MFN 0x..." doesn't > happen. It was on the master branch where I encountered this problem. > > However, I don't seem to get anything to call guest_printk() after making > hypervisor_console_io call even for 64-bit guest in this version (worked on > master). This is a separate question: could that be a XEN compile option > problem as I see "debug=n" from xen register dump: > > (XEN) ----[ Xen-4.14.1-pre arm64 debug=n Not tainted ]---- > > The call chain is: > > xen/drivers/char/console.c:do_console_io > xen/drivers/char/console.c:guest_console_write > xen/drivers/char/console.c:guest_printk > > You can enable debug through kconfig by doing "make menuconfig" under > xen/ Thank you for pointing this out! After I enabled the verbose debug messages, the hvc #0xea1 call is now taking effect. I'm seeing the previous problem of "invalid MFN" after that. It seems that the pointer 0x40000058 had been mapped to MFN 0x2be08. How do I debug or where locate the problem? I'm very new to XEN so it's no obvious yet to me from reading the source code how after guest_printk(), xen translate the addresses. This is the output of my guest boot up: / # xl -v create -c /share/misc/bm.cfg Parsing config from /share/misc/bm.cfg libxl: info: libxl_create.c:122:libxl__domain_build_info_setdefault: qemu-xen is unavailable, using qemu-xen-traditional instead: No such file or directory libxl: detail: libxl_create.c:623:libxl__domain_make: passthrough: disabled domainbuilder: detail: xc_dom_allocate: cmdline="", features="" domainbuilder: detail: xc_dom_kernel_file: filename="/share/misc/bm.img" domainbuilder: detail: xc_dom_boot_xen_init: ver 4.14, caps xen-3.0-aarch64 xen-3.0-armv7l domainbuilder: detail: xc_dom_rambase_init: RAM starts at 40000 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 Linux zImage (ARM64) loader ... domainbuilder: detail: xc_dom_probe_zimage64_kernel: kernel is not an arm64 Image domainbuilder: detail: loader probe failed domainbuilder: detail: xc_dom_find_loader: trying Linux zImage (ARM32) loader ... domainbuilder: detail: loader probe OK domainbuilder: detail: xc_dom_parse_zimage32_kernel: called domainbuilder: detail: xc_dom_parse_zimage32_kernel: xen-3.0-armv7l: 0x40008000 -> 0x4000807c domainbuilder: detail: xc_dom_devicetree_mem: called domainbuilder: detail: xc_dom_mem_init: mem 128 MB, pages 0x8000 pages, 4k each domainbuilder: detail: xc_dom_mem_init: 0x8000 pages domainbuilder: detail: xc_dom_boot_mem_init: called domainbuilder: detail: set_mode: guest xen-3.0-armv7l, address size 32 domainbuilder: detail: populate_guest_memory: populating RAM @ 0000000040000000-0000000048000000 (128MB) domainbuilder: detail: populate_one_size: populated 0x40/0x40 entries with shift 9 domainbuilder: detail: meminit: placing boot modules at 0x47fff000 domainbuilder: detail: meminit: devicetree: 0x47fff000 -> 0x48000000 domainbuilder: detail: xc_dom_build_image: called domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x40008+0x1 at 0xffff8c229000 domainbuilder: detail: xc_dom_alloc_segment: kernel : 0x40008000 -> 0x40009000 (pfn 0x40008 + 0x1 pages) domainbuilder: detail: xc_dom_load_zimage_kernel: called domainbuilder: detail: xc_dom_load_zimage_kernel: kernel seg 0x40008000-0x40009000 domainbuilder: detail: xc_dom_load_zimage_kernel: copy 124 bytes from blob 0xffff8c6c0000 to dst 0xffff8c229000 domainbuilder: detail: xc_dom_pfn_to_ptr_retcount: domU mapping: pfn 0x47fff+0x1 at 0xffff8c228000 domainbuilder: detail: xc_dom_alloc_segment: devicetree : 0x47fff000 -> 0x48000000 (pfn 0x47fff + 0x1 pages) domainbuilder: detail: alloc_magic_pages: called domainbuilder: detail: xc_dom_build_image : virt_alloc_end : 0x48000000 domainbuilder: detail: xc_dom_build_image : virt_pgtab_end : 0x0 domainbuilder: detail: xc_dom_boot_image: called domainbuilder: detail: bootearly: doing nothing domainbuilder: detail: xc_dom_compat_check: supported guest type: xen-3.0-aarch64 domainbuilder: detail: xc_dom_compat_check: supported guest type: xen-3.0-armv7l <= matches domainbuilder: detail: start_info_arm: called domainbuilder: detail: domain builder memory footprint domainbuilder: detail: allocated domainbuilder: detail: malloc : 2848 bytes domainbuilder: detail: anon mmap : 0 bytes domainbuilder: detail: mapped domainbuilder: detail: file mmap : 124 bytes domainbuilder: detail: domU mmap : 8192 bytes domainbuilder: detail: vcpu_arm32: called domainbuilder: detail: Initial state CPSR 0x1d3 PC 0x40008000 domainbuilder: detail: compat_gnttab_hvm_seed: d5: pfn=0x38000 domainbuilder: detail: xc_dom_set_gnttab_entry: d5 gnt[0] -> d0 0x39000 domainbuilder: detail: xc_dom_set_gnttab_entry: d5 gnt[1] -> d0 0x39001 domainbuilder: detail: xc_dom_release: called (XEN) p2m.c:1919: d5v0: Invalid MFN 0x2be08 The 32-bit guest is very simple, it calls hvc very early in and uses physical address: $ arm-none-eabi-objdump -d bm.elf bm.elf: file format elf32-littlearm Disassembly of section .text: 40008000 <_stext>: 40008000: 13100a4d tstne r0, #315392 ; 0x4d000 40008004: 13100a4d tstne r0, #315392 ; 0x4d000 40008008: 13100a4d tstne r0, #315392 ; 0x4d000 4000800c: 13100a4d tstne r0, #315392 ; 0x4d000 40008010: 13100a4d tstne r0, #315392 ; 0x4d000 40008014: 13100a4d tstne r0, #315392 ; 0x4d000 40008018: 13100a4d tstne r0, #315392 ; 0x4d000 4000801c: e320f000 nop {0} 40008020: ea000006 b 40008040 <reset> 40008024: 016f2818 .word 0x016f2818 40008028: 00000000 .word 0x00000000 4000802c: 0079c200 .word 0x0079c200 40008030: 04030201 .word 0x04030201 40008034: e320f000 nop {0} 40008038: e320f000 nop {0} 4000803c: e320f000 nop {0} 40008040 <reset>: 40008040: e3a00000 mov r0, #0 40008044: e3a01023 mov r1, #35 ; 0x23 40008048: e28f2008 add r2, pc, #8 4000804c: e3a0c012 mov ip, #18 40008050: e140ea71 hvc 3745 ; 0xea1 40008054: eafffffe b 40008054 <reset+0x14> 40008058 <banner>: 40008058: 65726854 .word 0x65726854 4000805c: 2f586461 .word 0x2f586461 40008060: 204e4558 .word 0x204e4558 40008064: 746e6f43 .word 0x746e6f43 40008068: 656e6961 .word 0x656e6961 4000806c: 6f422072 .word 0x6f422072 40008070: 6e69746f .word 0x6e69746f 40008074: 70752067 .word 0x70752067 40008078: 000a0d21 .word 0x000a0d21 Thank you! > > > I'm ignoring 32-bit Linux for now and trying to boot bare metal apps that > calls hypervisor_console_io() at the very beginning of the boot-up. As I'm > trying to port embedded RTOS apps (both 32 and 64 bits) to run as guests. > > Excellent. When doing that kind of work, I find the debug hypercalls very > useful, see: > > xen/arch/arm/traps.c:do_debug_trap > > Once you enable DEBUG in the build, you can do > > hvc 0xfffd > > In the guest for instance to print the program counter. NOTE: This email (including attachments) contain Ambarella Proprietary and/or Confidential Information and is intended solely for the use of the individual(s) to whom it is addressed. Any unauthorized review, use, disclosure, distribute, copy, or print is prohibited. If you are not an intended recipient, please contact the sender by reply email and destroy all copies of the original message. Thank you.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |