Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a334cd0 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/bios: fix shadowing of ACPI ROMs larger than 64KiB



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent b9f10852
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -185,23 +185,22 @@ static void
nouveau_bios_shadow_acpi(struct nouveau_bios *bios)
{
	struct pci_dev *pdev = nv_device(bios)->pdev;
	int cnt = 65536 / 4096;
	int ret;
	int ret, cnt, i;
	u8  data[3];

	if (!nouveau_acpi_rom_supported(pdev))
		return;

	bios->data = kmalloc(65536, GFP_KERNEL);
	bios->size = 0;
	if (!bios->data)
		return;

	while (cnt--) {
		ret = nouveau_acpi_get_bios_chunk(bios->data, bios->size, 4096);
		if (ret != 4096)
			return;
	if (nouveau_acpi_get_bios_chunk(data, 0, 3) == 3)
		bios->size = data[2] * 512;

		bios->size += 4096;
	bios->data = kmalloc(bios->size, GFP_KERNEL);
	for (i = 0; bios->data && i < bios->size; i += cnt) {
		cnt = min((bios->size - i), (u32)4096);
		ret = nouveau_acpi_get_bios_chunk(bios->data, i, cnt);
		if (ret != cnt)
			break;
	}
}