[GSOC] bhyve port on ARM - weekly status report

Mihai Carabas mihai.carabas at gmail.com
Mon Aug 10 17:39:43 UTC 2015

Hi everyone,

> In the past week I managed to boot the guest all the way down to Interrupt
> Controller initialization [1]. There were minor bugs in the emulation code
> I had to fix. After that I've start reading the GIC ARM manual and tried to
> look at other vGIC implementations (virtualization of the Generic Interrupt
> Controller). I didn't get to write any code yet, I'm still trying to get
> the whole picture. This would be the last step before being able to run a
> guest (without timer virtualization - we can use an auxiliary timer mapped
> to the guest).
 In the last week I've started coding on ARM VGIC infrastructure:
- I've created a new header file gic.h to export current registers to be
used by the VGIC
- I've exported the arm_gic_softc which is used to probe the VGIC specific
registers (I know it's unclean, but until I find a cleaner method, I will
go this way -> it's not so clear yet how much of the gic.c internals I will
need in the vgic.c)
- I've created in sys/arm/vmm/vgic.c the vgic_hyp_init function which is
probing the VGIC specific addresses from the DTS file, I've mapped the
virtual cpu control interface into hyp-mode (to be able to save/restore
these at each context switch) and saved the virtual cpu interface base for
later use
- I've created a new userspace ioctl VMM_ATTACH_VGIC which is sending the
physical address for the distributor that needs to be emulated and for the
cpu interface that will be mapped on top of the virtual cpu interface
- I've created a new function vgic_attach in sys/arm/vmm/vgic.c which is
called by the previous ioctl which is saving the userspace data, it's
initializing some structures and maps the cpu control interface
- We need to do an in-kernel emulation for the VGIC distributor. Further
I've created a new function called vgic_emulate_distributor which is called
in the vmm.c code (I know it's unclean, but I wanted to ressemble with x86
in-kernel emulation and here I didn't have any defines for the emulated
addresses, I needed the struct hyp). The vgic_emulate_distributor is
calling vmm_emulate_instruction which specific handlers for read/write

I will push the code tomorrow. Right now I'm adding some printfs to check
that the flow for vgic distributor is working ok.

Thank you,

More information about the soc-status mailing list