On Tue, 6 Dec 2016, Igor Mammedov wrote: > > First, to my knowledge, Xen does not use fw_cfg. The following call > > chains depend on (!xen_enabled()): > maybe not, it's just grep gave me: > xen_load_linux() -> fw_cfg_init_io() > maybe it's dead code now
[...] > > > > pc_init1() | pc_q35_init() > > if (!xen_enabled()): > > pc_memory_init() > > bochs_bios_init() > > fw_cfg_init_io_dma() We have a couple of idiosyncrasies with Xen support in QEMU; this is one of them. Xen doesn't use fw_cfg, because hvmloader [1][2] runs in guest context before SeaBios setting things up, including ACPI tables. So usually we don't need it. However direct kernel boot is done via xen_load_linux which is based on fw_cfg. So when kernel= and ramdisk= are specified in a Xen HVM config file (which is not common), they are passed to QEMU as -kernel and -initrd, then QEMU ends up using fw_cfg to load the kernel in the guest. That's the only use case we have for it at the moment. Direct kernel boot with Xen HVM guests is not tested by OSSTest (Xen Project CI loop), as a consequence it broke in the past without anybody noticing. [1]: http://xenbits.xenproject.org/gitweb/?p=xen.git;a=tree;f=tools/firmware/hvmloader;h=069e29fa3820364c69c95798d56ef097148fddd2;hb=HEAD [2]: https://wiki.xenproject.org/wiki/Hvmloader