ipmi: Add graceful shutdown handling to the external BMC
I misunderstood the workings of the power settings, the power off is a force off operation and there needs to be a separate graceful shutdown operation. So replace the force off operation with a graceful shutdown. Signed-off-by: Corey Minyard <cminyard@mvista.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
4059fa63b7
commit
f53b9f3625
@ -54,7 +54,8 @@
|
||||
#define VM_CAPABILITIES_IRQ 0x04
|
||||
#define VM_CAPABILITIES_NMI 0x08
|
||||
#define VM_CAPABILITIES_ATTN 0x10
|
||||
#define VM_CMD_FORCEOFF 0x09
|
||||
#define VM_CAPABILITIES_GRACEFUL_SHUTDOWN 0x20
|
||||
#define VM_CMD_GRACEFUL_SHUTDOWN 0x09
|
||||
|
||||
#define TYPE_IPMI_BMC_EXTERN "ipmi-bmc-extern"
|
||||
#define IPMI_BMC_EXTERN(obj) OBJECT_CHECK(IPMIBmcExtern, (obj), \
|
||||
@ -276,8 +277,8 @@ static void handle_hw_op(IPMIBmcExtern *ibe, unsigned char hw_op)
|
||||
k->do_hw_op(s, IPMI_SEND_NMI, 0);
|
||||
break;
|
||||
|
||||
case VM_CMD_FORCEOFF:
|
||||
qemu_system_shutdown_request();
|
||||
case VM_CMD_GRACEFUL_SHUTDOWN:
|
||||
k->do_hw_op(s, IPMI_SHUTDOWN_VIA_ACPI_OVERTEMP, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -401,6 +402,10 @@ static void chr_event(void *opaque, int event)
|
||||
if (k->do_hw_op(ibe->parent.intf, IPMI_POWEROFF_CHASSIS, 1) == 0) {
|
||||
v |= VM_CAPABILITIES_POWER;
|
||||
}
|
||||
if (k->do_hw_op(ibe->parent.intf, IPMI_SHUTDOWN_VIA_ACPI_OVERTEMP, 1)
|
||||
== 0) {
|
||||
v |= VM_CAPABILITIES_GRACEFUL_SHUTDOWN;
|
||||
}
|
||||
if (k->do_hw_op(ibe->parent.intf, IPMI_RESET_CHASSIS, 1) == 0) {
|
||||
v |= VM_CAPABILITIES_RESET;
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ static void test_connect(void)
|
||||
uint8_t msg[100];
|
||||
unsigned int msglen;
|
||||
static uint8_t exp1[] = { 0xff, 0x01, 0xa1 }; /* A protocol version */
|
||||
static uint8_t exp2[] = { 0x08, 0x1f, 0xa1 }; /* A capabilities cmd */
|
||||
static uint8_t exp2[] = { 0x08, 0x3f, 0xa1 }; /* A capabilities cmd */
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(emu_lfd, &readfds);
|
||||
|
Loading…
Reference in New Issue
Block a user