[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Commit moratorium to staging
On Tue, Oct 31, 2017 at 10:49:35AM +0000, Julien Grall wrote: > Hi all, > > Master lags 15 days behind staging due to tests failing reliably on some of > the hardware in osstest (see [1]). > > At the moment a force push is not feasible because the same tests passes on > different hardware (see [2]). I've been looking into this, and I'm afraid I don't yet have a cause for those issues. I'm going to post what I've found so far, maybe someone is able to spot something I'm missing. Since I assumed this was somehow related to the ACPI PM1A_STS/EN blocks (which is how the power button even gets notified to the OS), I've added the following instrumentation to the pmtimer.c code: diff --git a/xen/arch/x86/hvm/pmtimer.c b/xen/arch/x86/hvm/pmtimer.c index 435647ff1e..051fc46df8 100644 --- a/xen/arch/x86/hvm/pmtimer.c +++ b/xen/arch/x86/hvm/pmtimer.c @@ -61,9 +61,15 @@ static void pmt_update_sci(PMTState *s) ASSERT(spin_is_locked(&s->lock)); if ( acpi->pm1a_en & acpi->pm1a_sts & SCI_MASK ) + { + printk("asserting SCI IRQ\n"); hvm_isa_irq_assert(s->vcpu->domain, SCI_IRQ, NULL); + } else + { + printk("de-asserting SCI IRQ\n"); hvm_isa_irq_deassert(s->vcpu->domain, SCI_IRQ); + } } void hvm_acpi_power_button(struct domain *d) @@ -73,6 +79,7 @@ void hvm_acpi_power_button(struct domain *d) if ( !has_vpm(d) ) return; + printk("hvm_acpi_power_button for d%d\n", d->domain_id); spin_lock(&s->lock); d->arch.hvm_domain.acpi.pm1a_sts |= PWRBTN_STS; pmt_update_sci(s); @@ -86,6 +93,7 @@ void hvm_acpi_sleep_button(struct domain *d) if ( !has_vpm(d) ) return; + printk("hvm_acpi_sleep_button for d%d\n", d->domain_id); spin_lock(&s->lock); d->arch.hvm_domain.acpi.pm1a_sts |= PWRBTN_STS; pmt_update_sci(s); @@ -170,6 +178,7 @@ static int handle_evt_io( if ( dir == IOREQ_WRITE ) { + printk("write PM1a addr: %#x val: %#x\n", addr, *val); /* Handle this I/O one byte at a time */ for ( i = bytes, data = *val; i > 0; @@ -197,6 +206,8 @@ static int handle_evt_io( bytes, *val, port); } } + printk("result pm1a_sts: %#x pm1a_en: %#x\n", + acpi->pm1a_sts, acpi->pm1a_en); /* Fix up the SCI state to match the new register state */ pmt_update_sci(s); } I've then rerun the failing test, and this is what I got in the failure case (ie: windows ignoring the power event): (XEN) hvm_acpi_power_button for d14 (XEN) asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0x1 (XEN) result pm1a_sts: 0x100 pm1a_en: 0x320 (XEN) asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0x100 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ (XEN) write PM1a addr: 0x2 val: 0x320 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ Strangely enough, the second time I've tried the same command (xl shutdown -wF ...) on the same guest, it succeed and windows shut down without issues, this is the log in that case: (XEN) hvm_acpi_power_button for d14 (XEN) asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0x1 (XEN) result pm1a_sts: 0x100 pm1a_en: 0x320 (XEN) asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0x100 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ (XEN) write PM1a addr: 0x2 val: 0x320 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ (XEN) write PM1a addr: 0x2 val: 0x320 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ (XEN) write PM1a addr: 0 val: 0x8000 (XEN) result pm1a_sts: 0 pm1a_en: 0x320 (XEN) de-asserting SCI IRQ I have to admit I have no idea why Windows clears the STS power bit and then completely ignores it on certain occasions. I'm also afraid I have no idea how to debug Windows in order to know why this event is acknowledged but ignored. I've also tried to reproduce the same with a Debian guest, by doing the same amount of save/restores and migrations, and finally issuing a xl trigger <guest> power, but Debian has always worked fine and shut down. Any comments are welcome. Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |