On Wed, Feb 10, 2021 at 12:51 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > We allow to read the single value as a first element in the array. > Unfortunately the counting doesn't work in this case and we can't > call fwnode_property_count_*() API without getting an error. It would be good to mention what the symptom of the issue is here. > Modify acpi_data_prop_read() to always try the single value read > and thus allow counting the single value as an array of 1 element. > > Reported-by: Calvin Johnson <calvin.johnson@xxxxxxxxxxx> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> This is a bug fix, so it should go in before the cleanups in this series IMO. Also it looks like stable@vger material. > --- > drivers/acpi/property.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c > index 236316ee0e25..d6100585fceb 100644 > --- a/drivers/acpi/property.c > +++ b/drivers/acpi/property.c > @@ -913,12 +913,14 @@ static int acpi_data_prop_read(const struct acpi_device_data *data, > const union acpi_object *items; > int ret; > > - if (val && nval == 1) { > + /* Try to read as a single value first */ > + if (!val || nval == 1) { > ret = acpi_data_prop_read_single(data, propname, proptype, val); This returns -EINVAL if val is NULL. > if (ret >= 0) > - return ret; > + return val ? ret : 1; So val cannot be NULL here. > } > > + /* It's not the single value, get an array instead */ > ret = acpi_data_get_property_array(data, propname, ACPI_TYPE_ANY, &obj); > if (ret) > return ret; > -- To me, acpi_fwnode_property_read_string_array() needs to special-case val == NULL and nval == 0.