• Lv Zheng's avatar
    ACPI / EC: Refine command storm prevention support · e1d4d90f
    Lv Zheng authored
    This patch refines EC command storm prevention support.
    
    Current command storming code is wrong, when the storming condition is
    detected, it only flags the condition without doing anything for the
    current command but performing storming prevention for the follow-up
    commands. So:
    1. The first command which suffers from the storming still suffers from
       storming.
    2. The follow-up commands which may not suffer from the storming are
       unconditionally forced into the storming prevention mode.
    Ideally, we should only enable storm prevention immediately after detection
    for the current command so that the next command can try the
    power/performance efficient interrupt mode again.
    
    This patch improves the command storm prevention by disabling GPE right
    after the detection and re-enabling it right before completing the command
    transaction using the GPE storming prevention APIs. This thus deploys the
    following GPE handling model:
    1. acpi_enable_gpe()/acpi_disable_gpe() for reference count changes:
       This set of APIs are used for EC usage reference counting.
    2. acpi_set_gpe(ACPI_GPE_ENABLE)/acpi_set_gpe(ACPI_GPE_DISABLE):
       This set of APIs are used for preventing GPE storm. They must be invoked
       when the reference count > 0.
       Note that as the storming prevention should always happen when there is
       an outstanding request, or GPE enabling value will be messed up by the
       races. This patch also adds BUG_ON() to enforces this rule to prevent
       future bugs.
    
    The msleep(1) used after completing a transaction is useless now as this
    sounds like a guard time only useful for platforms that need the
    EC_FLAGS_MSI quirks while we have fixed GPE race issues using the previous
    raw handler mode enabling. It is kept to avoid regressions. A seperate
    patch which deletes EC_FLAGS_MSI quirks should take care of deleting it.
    Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    e1d4d90f
ec.c 37.1 KB