I've recently starting using VirtualBox instead of physical machines for some of my basic functional testing. When doing some types of kernel development it is often necessary to force the system into kmdb.
The F1-A keystroke does this on Solaris x86 systems by default, however that isn't going to work with VirtualBox because that keystore will be grabbed by some very low level kernel routines in the host an never reaches the guest.
So we need an alternate way of getting a break to the guest Solaris from the host one.
I was sure someone else must have worked this out before. I didn't get the full answer from a quick google search but I did find all the parts.
The CLI for VirtualBox can send an NMI (Non Maskable Interupt) to any running guest. Solaris can beconfigured to drop into kmdb or force a panic when receiving an NMI.
In the guest put this into /etc/system and reboot:
Or to set it interactively do:
# echo apic_kmdb_on_nmi/W1 | mdb -kw
# mdb -K
Then with the VirtualBox CLI we can send an NMI to our guest:
$ VBoxManage debugvm ZFS_Crypto_Test injectnmi
Nice easy solution. Though I do now wonder why we don't have some default action for when an NMI is received - but then not everyone cares about getting a dump or getting into kmdb!
Updated 2013-10-8: at somepoint this changed from controlvm to debugvm