[SeaBIOS] [PATCH] Replace level gpe event with edge gpe event for hot-plug handlers
Michael S. Tsirkin
mst at redhat.com
Wed Apr 4 08:26:11 CEST 2012
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 <imammedo at redhat.com>
Acked-by: Michael S. Tsirkin <mst at redhat.com>
> ---
> 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
More information about the SeaBIOS
mailing list