platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array
commit 33297cef3101d950cec0033a0dce0a2d2bd59999 upstream.
Some DSDT-s have an off-by-one bug where the SINF package count is
one higher than the SQTY reported value, allocate 1 entry extra.
Also make the SQTY <-> SINF package count mismatch error more verbose
to help debugging similar issues in the future.
This fixes the panasonic-laptop driver failing to probe() on some
devices with the following errors:
[ 3.958887] SQTY reports bad SINF length SQTY: 37 SINF-pkg-count: 38
[ 3.958892] Couldn't retrieve BIOS data
[ 3.983685] Panasonic Laptop Support - With Macros: probe of MAT0019:00 failed with error -5
Fixes: 709ee531c1
("panasonic-laptop: add Panasonic Let's Note laptop extras driver v0.94")
Cc: stable@vger.kernel.org
Tested-by: James Harmison <jharmison@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20240909113227.254470-2-hdegoede@redhat.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6821a82616
commit
c54fc405a0
|
@ -337,7 +337,8 @@ static int acpi_pcc_retrieve_biosdata(struct pcc_acpi *pcc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcc->num_sifr < hkey->package.count) {
|
if (pcc->num_sifr < hkey->package.count) {
|
||||||
pr_err("SQTY reports bad SINF length\n");
|
pr_err("SQTY reports bad SINF length SQTY: %lu SINF-pkg-count: %u\n",
|
||||||
|
pcc->num_sifr, hkey->package.count);
|
||||||
status = AE_ERROR;
|
status = AE_ERROR;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -994,6 +995,12 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some DSDT-s have an off-by-one bug where the SINF package count is
|
||||||
|
* one higher than the SQTY reported value, allocate 1 entry extra.
|
||||||
|
*/
|
||||||
|
num_sifr++;
|
||||||
|
|
||||||
pcc = kzalloc(sizeof(struct pcc_acpi), GFP_KERNEL);
|
pcc = kzalloc(sizeof(struct pcc_acpi), GFP_KERNEL);
|
||||||
if (!pcc) {
|
if (!pcc) {
|
||||||
pr_err("Couldn't allocate mem for pcc");
|
pr_err("Couldn't allocate mem for pcc");
|
||||||
|
|
Loading…
Reference in New Issue