Doing a diff of our serial outputs, it seems that around line 109 (mine), 120 (yours) that there is a difference in the TXT.ERRORCODE=. Mine has a value of
80000000
processor error 0
while yours is just 0
----- update -------
We also have different values for rdsp.checksum. I have 30 while you have 20 rdsp.rsdtaddress, rdsp.xsdtaddress, gp_s1_scaniommu len=, rsdt.length, rsdt.checksum, gp_s1_scaniommu: dmar table addr=, gp_s2_sdminitdevmap: numentries_sysdev_mmioregions=, bytesgp_s2_setupgdt: setup TSS CPU idx={1,3,5,7}
It seems that I experience an error somewhere around the gp_s5_setupcpustate[3]: Setup VMX state, as I never see these outputs:
As I look closer, it looks like this is a loop that goes through all of the processors.
It appears that my log succeeds for cpu=2 and then fails when attempting to run gp_s5_* for cpu=4.
I’m curious if this is because my CPU doesn’t support hyper-threading, and only has 4 cores (thus no CPU=4)?
Thanks! I tried this new PR. I am making additional progress. But it seems that my boot is stalling after setting up the VMX state on each CPU. Looking at your log, I don’t ever get an XC_INIT[5]: got control: ESP=0ae1cf28
Ok, I have pushed another changeset to the PR. This adds a configure option --with-debug-serial-maxcpus that allows you to specify the number of CPUs (cores) on your platform when debugging is turned on.
Please rebuild the micro-hypervisor using configure --enable-debug-serial=0x3f8 --with-debug-serial-maxcpus=4 and give it a whirl again.
@amitvasudevan, thanks for all of the help debugging to ensure the hypervisor was booting. I can boot the hypervisor and run the existing hypapps (e.g., syscalllog).
I did some initial steps to port uhcalltest from rpi3 to x86 git branch. However, I am halting when I attempt to boot my modified hypervisor. newhypapp_halting.log (20.6 KB)
Ok as a first step, I would recommend replacing an existing extension (starting with xh_ prefix) within UOBJLIST.in instead of adding a new one. This will help us get the shortest path towards getting your new extension in the mix.
So, perhaps replace xh_hyperdep with xh_uhcalltest
Well after you replace an existing app within UOBJLIST.in you will need to take the following steps:
replace XMHFGEEC_SLAB_XH_HYPERDEP with XMHFGEEC_SLAB_XH_UHCALLTEST within include/xmhf-config.h; keep the numbering as is (13 in this case)
replace XMHFGEEC_SLAB_XH_HYPERDEP with XMHFGEEC_SLAB_XH_UHCALLTEST in the static xc_hypapp_info_t _xcihub_hypapp_info_table[] definition within xmhf-uobjs/include/xc.h
add xh_uhcalltest.hwithin xmhf-uobjs/include/; use xmhf-uobjs/include/xh_hyperdep.h as a reference and adapt and change definitions to have the UHCALLTEST/uhcalltest prefix where appropriate. Ensure you use non-conflicting hypercall ids (e.g., 0xC0, 0xC1 should be changed to something else so that if we use hyperdep and uhcalltest they wont conflict)
use xmhf-uobjs/xh_hyperdep/* as a template for your uhcalltest extension. Ensure you edit the .gsm file and change uobj-name, uobj-callees and uobj-uapicallees based on whether your extension calls other uobjs or provides APIs for other uobjs.