On Wed, Sep 21, 2016 at 03:38:25PM -0500, Corey Minyard wrote: > On 09/21/2016 03:20 PM, Eduardo Habkost wrote: > > Hi, > > > > I was looking at the monitor code handling the "current CPU", and > > noticed that qmp_inject_nmi() looks suspicious: it is a QMP > > command, but uses monitor_get_cpu_index(). > > > > In addition to the "inject-nmi" QMP command, qmp_inject_nmi() is > > used at: > > * hmp_inject_nmi() > > * ipmi_do_hw_op() (IPMI_SEND_NMI operation) > > > > This confused me, so I would like to know: > > > > 1) What exactly "default CPU" is supposed to mean in the > > "inject-nmi" QMP command documentation? > > 2) To which CPU(s) are NMIs supposed to be sent when triggered by > > IPMI messages? I don't know how to test the IPMI code, but it > > looks like it will crash if QEMU runs without any monitor. > > > It doesn't matter which CPU it goes to.
OK, so in the case of IPMI we can make it send the NMI to the first CPU. > I haven't tested without a monitor, so I'm not sure. Does > another interface into the NMI code need to be added? There's another interface, already: nmi_monitor_handle() already gets a cpu_index argument and doesn't depend on the monitor code. We could change the IPMI code to call nmi_monitor_handle(first_cpu->cpu_index) directly. In the case of the inject-nmi QMP command, I need to understand what "default CPU" is supposed to mean in the inject-nmi documentation. Maybe it can be changed to use the first CPU, too (that's probably the existing behavior because there's no way to change cur_mon->mon_cpu in a QMP monitor). -- Eduardo