piix4/ich9: do not raise SMI on ACPI enable/disable commands
These commands are handled entirely by QEMU. Do not raise an SMI when they happen, because Windows (at least 2008r2) expects these commands to work and (depending on the value of APMC_EN at startup) the firmware might not have installed an SMI handler. When this happens (e.g. the kernel supports SMIs, or you are using TCG, but you have used "-machine smm=off") RIP is moved to 0x38000 where there is no code to execute. Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									25b8b39b6d
								
							
						
					
					
						commit
						afd6895b45
					
				@ -112,6 +112,9 @@ static void apm_ctrl_changed(uint32_t val, void *arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* ACPI specs 3.0, 4.7.2.5 */
 | 
					    /* ACPI specs 3.0, 4.7.2.5 */
 | 
				
			||||||
    acpi_pm1_cnt_update(&s->ar, val == ACPI_ENABLE, val == ACPI_DISABLE);
 | 
					    acpi_pm1_cnt_update(&s->ar, val == ACPI_ENABLE, val == ACPI_DISABLE);
 | 
				
			||||||
 | 
					    if (val == ACPI_ENABLE || val == ACPI_DISABLE) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (d->config[0x5b] & (1 << 1)) {
 | 
					    if (d->config[0x5b] & (1 << 1)) {
 | 
				
			||||||
        if (s->smi_irq) {
 | 
					        if (s->smi_irq) {
 | 
				
			||||||
 | 
				
			|||||||
@ -375,6 +375,9 @@ static void ich9_apm_ctrl_changed(uint32_t val, void *arg)
 | 
				
			|||||||
    acpi_pm1_cnt_update(&lpc->pm.acpi_regs,
 | 
					    acpi_pm1_cnt_update(&lpc->pm.acpi_regs,
 | 
				
			||||||
                        val == ICH9_APM_ACPI_ENABLE,
 | 
					                        val == ICH9_APM_ACPI_ENABLE,
 | 
				
			||||||
                        val == ICH9_APM_ACPI_DISABLE);
 | 
					                        val == ICH9_APM_ACPI_DISABLE);
 | 
				
			||||||
 | 
					    if (val == ICH9_APM_ACPI_ENABLE || val == ICH9_APM_ACPI_DISABLE) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* SMI_EN = PMBASE + 30. SMI control and enable register */
 | 
					    /* SMI_EN = PMBASE + 30. SMI control and enable register */
 | 
				
			||||||
    if (lpc->pm.smi_en & ICH9_PMIO_SMI_EN_APMC_EN) {
 | 
					    if (lpc->pm.smi_en & ICH9_PMIO_SMI_EN_APMC_EN) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user