On Tue, Apr 03, 2012 at 11:48:44PM +0200, Igor Mammedov wrote: > in current code, pci hot-plug gpe event handler is defined as > a level one "_L01" > > 1. hw adds device, sets GPE.1 bit and sends SCI > 2. OSPM gets SCI, reads GPE00.sts and masks GPE.1 bit in GPE00.en > 3. OSPM executes _L01 > 4. hw adds second device and sets GPE.1 bit but SCI is not asserted > since GPE00.en masks event > 5. OSPM resets GPE.1 bit in GPE00.sts and umasks it in GPE00.en > > as result event for step 4 is lost because step 5 clears it and OS > will not see added second device. > > ACPI 50 spec: 5.6.4 General-Purpose Event Handling > defines GPE event handling as following: > > 1. Disables the interrupt source (GPEx_BLK EN bit). > 2. If an edge event, clears the status bit. > 3. Performs one of the following: > * Dispatches to an ACPI-aware device driver. > * Queues the matching control method for execution. > * Manages a wake event using device _PRW objects. > 4. If a level event, clears the status bit. > 5. Enables the interrupt source. > > Switching from level to edge event handler reduces chances to > hit race window. > > Same applies to cpu-hotplug, so switch it to edge handler as well. > > Tested with RHEL6, 3.3.+ kernel, winxp, and w2008r2, and I wasn't > able to trigger race after using edge event handler. > > Signed-off-by: Igor Mammedov <[email protected]>
Acked-by: Michael S. Tsirkin <[email protected]> > --- > src/acpi-dsdt.dsl | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl > index 4e04c48..4bdc268 100644 > --- a/src/acpi-dsdt.dsl > +++ b/src/acpi-dsdt.dsl > @@ -723,11 +723,11 @@ DefinitionBlock ( > Method(_L00) { > Return(0x01) > } > - Method(_L01) { > + Method(_E01) { > // PCI hotplug event > Return(\_SB.PCI0.PCNF()) > } > - Method(_L02) { > + Method(_E02) { > // CPU hotplug event > Return(\_SB.PRSC()) > } > -- > 1.7.7.6 _______________________________________________ SeaBIOS mailing list [email protected] http://www.seabios.org/mailman/listinfo/seabios
