On 03/21/2012 06:18 PM, Corey Minyard wrote:
Look at drivers/char/ipmi/ipmi_msghandler.c. It has code to send panic
event over IMPI. The code is pretty complex. Of course if we a going to
implement something more complex than simple hypercall for panic
notification we better do something more interesting with it than just
saying "panic happened", like sending stack traces on all cpus for
instance.
I doubt that's the best example, unfortunately. The IPMI event log
has limited space and it has to be send a little piece at a time since
each log entry is 14 bytes. It just prints the panic string, nothing
else. Not that it isn't useful, it has saved my butt before.
You have lots of interesting options with paravirtualization. You
could, for instance, create a console driver that delivered all
console output efficiently through a hypercall. That would be really
easy. Or, as you mention, a custom way to deliver panic information.
Collecting information like stack traces would be harder to
accomplish, as I don't think there is currently a way to get it except
by sending it to printk.
That already exists; virtio-console (or serial console emulation) can do
the job.
In fact the feature can be implemented 100% host side by searching for a
panic string signature in the console logs.