lkml.org 
[lkml]   [2011]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH 4/8] ACPI, APEI, Resolve false conflict between ACPI NVS and APEI
    On Mon, Sep 19, 2011 at 7:38 PM, Huang Ying <ying.huang@intel.com> wrote:
    > Some firmware will access memory in ACPI NVS region via APEI.  That
    > is, instructions in APEI ERST/EINJ table will read/write ACPI NVS
    > region.  The original resource conflict checking in APEI code will
    > check memory/ioport accessed by APEI via general resource management
    > mech.  But ACPI NVS region is marked as busy already, so that the
    > false resource conflict will prevent APEI ERST/EINJ to work.
    >
    > To fix this, this patch excludes ACPI NVS regions when APEI components
    > request resources.  So that they will not conflict with ACPI NVS
    > regions.

    I think this is much, much too complicated.

    Yinghai's three-line e820.c patch to leave ACPI NVS regions in the
    iomem_resource tree, but as not busy, is far better.

    Bjorn

    > Reported-and-tested-by: Pavel Ivanov <paivanof@gmail.com>
    > Signed-off-by: Huang Ying <ying.huang@intel.com>
    > ---
    >  drivers/acpi/apei/apei-base.c |   29 ++++++++++++++++++++++++++++-
    >  1 file changed, 28 insertions(+), 1 deletion(-)
    >
    > --- a/drivers/acpi/apei/apei-base.c
    > +++ b/drivers/acpi/apei/apei-base.c
    > @@ -438,8 +438,19 @@ int apei_resources_sub(struct apei_resou
    >  }
    >  EXPORT_SYMBOL_GPL(apei_resources_sub);
    >
    > +static int apei_get_nvs_callback(__u64 start, __u64 size, void *data)
    > +{
    > +       struct apei_resources *resources = data;
    > +       return apei_res_add(&resources->iomem, start, size);
    > +}
    > +
    > +static int apei_get_nvs_resources(struct apei_resources *resources)
    > +{
    > +       return acpi_nvs_for_each_region(apei_get_nvs_callback, resources);
    > +}
    > +
    >  /*
    > - * IO memory/port rersource management mechanism is used to check
    > + * IO memory/port resource management mechanism is used to check
    >  * whether memory/port area used by GARs conflicts with normal memory
    >  * or IO memory/port of devices.
    >  */
    > @@ -448,12 +459,26 @@ int apei_resources_request(struct apei_r
    >  {
    >        struct apei_res *res, *res_bak = NULL;
    >        struct resource *r;
    > +       struct apei_resources nvs_resources;
    >        int rc;
    >
    >        rc = apei_resources_sub(resources, &apei_resources_all);
    >        if (rc)
    >                return rc;
    >
    > +       /*
    > +        * Some firmware uses ACPI NVS region, that has been marked as
    > +        * busy, so exclude it from APEI resources to avoid false
    > +        * conflict.
    > +        */
    > +       apei_resources_init(&nvs_resources);
    > +       rc = apei_get_nvs_resources(&nvs_resources);
    > +       if (rc)
    > +               goto res_fini;
    > +       rc = apei_resources_sub(resources, &nvs_resources);
    > +       if (rc)
    > +               goto res_fini;
    > +
    >        rc = -EINVAL;
    >        list_for_each_entry(res, &resources->iomem, list) {
    >                r = request_mem_region(res->start, res->end - res->start,
    > @@ -500,6 +525,8 @@ err_unmap_iomem:
    >                        break;
    >                release_mem_region(res->start, res->end - res->start);
    >        }
    > +res_fini:
    > +       apei_resources_fini(&nvs_resources);
    >        return rc;
    >  }
    >  EXPORT_SYMBOL_GPL(apei_resources_request);
    > --
    > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at  http://vger.kernel.org/majordomo-info.html
    > Please read the FAQ at  http://www.tux.org/lkml/
    >
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-09-20 04:13    [W:0.036 / U:0.560 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site