• Al Stone's avatar
    ACPI / tables: fix acpi_parse_entries_array() so it traverses all subtables · 8726d4f4
    Al Stone authored
    The acpi_parse_entries_array() function currently returns the very first
    time there is any error found by one of the callback functions, or if one
    of the callbacks returns a non-zero value.  However, the ACPI subtables
    being traversed could still have valid entries that could be used by one
    of the callback functions.  And, if the comments are correct, that is
    what should happen -- always traverse all of the subtables, calling as
    many of the callbacks as possible.
    
    This patch makes the function consistent with its description so that it
    will properly invoke all callbacks for all matching entries, for all
    subtables, instead of stopping abruptly as it does today.
    
    This does change the semantics of using acpi_parse_entries_array().  In
    examining all users of the function, none of them rely on the current
    behavior; that is, there appears to be no assumption that either all
    subtables are traversed and all callbacks invoked, or that the function
    will return immediately on any error from a callback.  Each callback
    operates independently.  Hence, there should be no functional change
    due to this change in semantics.
    
    Future patches being prepared will rely on this new behavior; indeed,
    they were written assuming the acpi_parse_entries_array() function
    operated as its comments describe.  For example, a callback that
    counts the number of subtables of a specific type can now be assured
    that as many subtables as possible have been enumerated.
    Signed-off-by: default avatarAl Stone <ahs3@redhat.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    8726d4f4
tables.c 21.4 KB