lkml.org 
[lkml]   [2020]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.4 16/16] ACPICA: Do not increment operation_region reference counts for field units
    Date
    From: Erik Kaneda <erik.kaneda@intel.com>

    [ Upstream commit 6a54ebae6d047c988a31f5ac5a64ab5cf83797a2 ]

    ACPICA commit e17b28cfcc31918d0db9547b6b274b09c413eb70

    Object reference counts are used as a part of ACPICA's garbage
    collection mechanism. This mechanism keeps track of references to
    heap-allocated structures such as the ACPI operand objects.

    Recent server firmware has revealed that this reference count can
    overflow on large servers that declare many field units under the
    same operation_region. This occurs because each field unit declaration
    will add a reference count to the source operation_region.

    This change solves the reference count overflow for operation_regions
    objects by preventing fieldunits from incrementing their
    operation_region's reference count. Each operation_region's reference
    count will not be changed by named objects declared under the Field
    operator. During namespace deletion, the operation_region namespace
    node will be deleted and each fieldunit will be deleted without
    touching the deleted operation_region object.

    Link: https://github.com/acpica/acpica/commit/e17b28cf
    Signed-off-by: Erik Kaneda <erik.kaneda@intel.com>
    Signed-off-by: Bob Moore <robert.moore@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/acpi/acpica/exprep.c | 4 ----
    drivers/acpi/acpica/utdelete.c | 6 +-----
    2 files changed, 1 insertion(+), 9 deletions(-)

    diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c
    index 4c2836dc825be..47d8a85c90ff5 100644
    --- a/drivers/acpi/acpica/exprep.c
    +++ b/drivers/acpi/acpica/exprep.c
    @@ -502,10 +502,6 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
    (u8)access_byte_width;
    }
    }
    - /* An additional reference for the container */
    -
    - acpi_ut_add_reference(obj_desc->field.region_obj);
    -
    ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
    "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
    obj_desc->field.start_field_bit_offset,
    diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c
    index 1638312e3d8f9..9f8b088e21d7e 100644
    --- a/drivers/acpi/acpica/utdelete.c
    +++ b/drivers/acpi/acpica/utdelete.c
    @@ -590,11 +590,6 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
    next_object = object->buffer_field.buffer_obj;
    break;

    - case ACPI_TYPE_LOCAL_REGION_FIELD:
    -
    - next_object = object->field.region_obj;
    - break;
    -
    case ACPI_TYPE_LOCAL_BANK_FIELD:

    next_object = object->bank_field.bank_obj;
    @@ -635,6 +630,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
    }
    break;

    + case ACPI_TYPE_LOCAL_REGION_FIELD:
    case ACPI_TYPE_REGION:
    default:

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-08-10 21:16    [W:3.160 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site