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