On Mon, 21 Jan 2013 13:46:53 -0500 Paul Dufresne (PD) wrote:
PD> Well, this old Pentium 4 computer does seems to have an IOAPIC [...] PD> Although "[ 0.031997] ..MP-BIOS bug: 8254 timer not connected to PD> IO-APIC" suggest some problem with it.
Interesting. Let's see...
PD> // Create root task PD> if (Cpu::bsp) { PD> Hip::add_check(); PD> Ec *root_ec = new Ec (&Pd::root, NUM_EXC + 1, &Pd::root, Ec::root_invoke, Cpu::id, 0, USER_ADDR - 2 * PAGE_SIZE, 0); PD> Sc *root_sc = new Sc (&Pd::root, NUM_EXC + 2, root_ec, Cpu::id, Sc::default_prio, Sc::default_quantum); PD> root_sc->remote_enqueue(); PD> } PD> Console::print("Scheduling"); PD> Sc::schedule(); PD> } PD> PD> I do see my "Scheduling" when booting. But I don't understand which PD> code is executed next.
Sc::schedule() invokes the scheduler and selects the next thread to run. In this case, execution should continue in Ec::root_invoke(), and if you hit ret_user_sysexit() at the bottom of that function, then you're entering user mode, indicating the hypervisor has successfully booted.
PD> Ok... I understand it is not a interesting computer to use Nova on.
It could be that after returning to user mode, we're never getting an interrupt that takes us back into the hypervisor. You can verify that, by booting just the hypervisor without any other modules. You should see one message saying the bootstrap EC died ("No ELF").
Furthermore, if you enabled "spinner" on the hypervisor command line, you should see blue spinner activity once every second. If the blue spinner doesn't increment, you have an interrupt problem.
Cheers, Udo