Commit 6b11d1d6 authored by Lv Zheng's avatar Lv Zheng Committed by Rafael J. Wysocki

ACPI / osl: Remove acpi_get_table_with_size()/early_acpi_os_unmap_memory() users

This patch removes the users of the deprectated APIs:
 acpi_get_table_with_size()
 early_acpi_os_unmap_memory()
The following APIs should be used instead of:
 acpi_get_table()
 acpi_put_table()

The deprecated APIs are invented to be a replacement of acpi_get_table()
during the early stage so that the early mapped pointer will not be stored
in ACPICA core and thus the late stage acpi_get_table() won't return a
wrong pointer. The mapping size is returned just because it is required by
early_acpi_os_unmap_memory() to unmap the pointer during early stage.

But as the mapping size equals to the acpi_table_header.length
(see acpi_tb_init_table_descriptor() and acpi_tb_validate_table()), when
such a convenient result is returned, driver code will start to use it
instead of accessing acpi_table_header to obtain the length.

Thus this patch cleans up the drivers by replacing returned table size with
acpi_table_header.length, and should be a no-op.
Reported-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 66360faa
...@@ -132,14 +132,13 @@ static int __init acpi_fadt_sanity_check(void) ...@@ -132,14 +132,13 @@ static int __init acpi_fadt_sanity_check(void)
struct acpi_table_header *table; struct acpi_table_header *table;
struct acpi_table_fadt *fadt; struct acpi_table_fadt *fadt;
acpi_status status; acpi_status status;
acpi_size tbl_size;
int ret = 0; int ret = 0;
/* /*
* FADT is required on arm64; retrieve it to check its presence * FADT is required on arm64; retrieve it to check its presence
* and carry out revision and ACPI HW reduced compliancy tests * and carry out revision and ACPI HW reduced compliancy tests
*/ */
status = acpi_get_table_with_size(ACPI_SIG_FADT, 0, &table, &tbl_size); status = acpi_get_table(ACPI_SIG_FADT, 0, &table);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
const char *msg = acpi_format_exception(status); const char *msg = acpi_format_exception(status);
...@@ -170,10 +169,10 @@ static int __init acpi_fadt_sanity_check(void) ...@@ -170,10 +169,10 @@ static int __init acpi_fadt_sanity_check(void)
out: out:
/* /*
* acpi_get_table_with_size() creates FADT table mapping that * acpi_get_table() creates FADT table mapping that
* should be released after parsing and before resuming boot * should be released after parsing and before resuming boot
*/ */
early_acpi_os_unmap_memory(table, tbl_size); acpi_put_table(table);
return ret; return ret;
} }
......
...@@ -2781,12 +2781,13 @@ static int acpi_nfit_add(struct acpi_device *adev) ...@@ -2781,12 +2781,13 @@ static int acpi_nfit_add(struct acpi_device *adev)
acpi_size sz; acpi_size sz;
int rc = 0; int rc = 0;
status = acpi_get_table_with_size(ACPI_SIG_NFIT, 0, &tbl, &sz); status = acpi_get_table(ACPI_SIG_NFIT, 0, &tbl);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
/* This is ok, we could have an nvdimm hotplugged later */ /* This is ok, we could have an nvdimm hotplugged later */
dev_dbg(dev, "failed to find NFIT at startup\n"); dev_dbg(dev, "failed to find NFIT at startup\n");
return 0; return 0;
} }
sz = tbl->length;
acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL); acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL);
if (!acpi_desc) if (!acpi_desc)
......
...@@ -154,18 +154,16 @@ static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt, ...@@ -154,18 +154,16 @@ static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt,
phys_cpuid_t __init acpi_map_madt_entry(u32 acpi_id) phys_cpuid_t __init acpi_map_madt_entry(u32 acpi_id)
{ {
struct acpi_table_madt *madt = NULL; struct acpi_table_madt *madt = NULL;
acpi_size tbl_size;
phys_cpuid_t rv; phys_cpuid_t rv;
acpi_get_table_with_size(ACPI_SIG_MADT, 0, acpi_get_table(ACPI_SIG_MADT, 0,
(struct acpi_table_header **)&madt, (struct acpi_table_header **)&madt);
&tbl_size);
if (!madt) if (!madt)
return PHYS_CPUID_INVALID; return PHYS_CPUID_INVALID;
rv = map_madt_entry(madt, 1, acpi_id, true); rv = map_madt_entry(madt, 1, acpi_id, true);
early_acpi_os_unmap_memory(madt, tbl_size); acpi_put_table((struct acpi_table_header *)madt);
return rv; return rv;
} }
......
...@@ -33,7 +33,6 @@ int __init parse_spcr(bool earlycon) ...@@ -33,7 +33,6 @@ int __init parse_spcr(bool earlycon)
{ {
static char opts[64]; static char opts[64];
struct acpi_table_spcr *table; struct acpi_table_spcr *table;
acpi_size table_size;
acpi_status status; acpi_status status;
char *uart; char *uart;
char *iotype; char *iotype;
...@@ -43,9 +42,8 @@ int __init parse_spcr(bool earlycon) ...@@ -43,9 +42,8 @@ int __init parse_spcr(bool earlycon)
if (acpi_disabled) if (acpi_disabled)
return -ENODEV; return -ENODEV;
status = acpi_get_table_with_size(ACPI_SIG_SPCR, 0, status = acpi_get_table(ACPI_SIG_SPCR, 0,
(struct acpi_table_header **)&table, (struct acpi_table_header **)&table);
&table_size);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -ENOENT; return -ENOENT;
...@@ -106,6 +104,6 @@ int __init parse_spcr(bool earlycon) ...@@ -106,6 +104,6 @@ int __init parse_spcr(bool earlycon)
err = add_preferred_console(uart, 0, opts + strlen(uart) + 1); err = add_preferred_console(uart, 0, opts + strlen(uart) + 1);
done: done:
early_acpi_os_unmap_memory((void __iomem *)table, table_size); acpi_put_table((struct acpi_table_header *)table);
return err; return err;
} }
...@@ -333,7 +333,6 @@ acpi_table_parse_entries_array(char *id, ...@@ -333,7 +333,6 @@ acpi_table_parse_entries_array(char *id,
unsigned int max_entries) unsigned int max_entries)
{ {
struct acpi_table_header *table_header = NULL; struct acpi_table_header *table_header = NULL;
acpi_size tbl_size;
int count; int count;
u32 instance = 0; u32 instance = 0;
...@@ -346,7 +345,7 @@ acpi_table_parse_entries_array(char *id, ...@@ -346,7 +345,7 @@ acpi_table_parse_entries_array(char *id,
if (!strncmp(id, ACPI_SIG_MADT, 4)) if (!strncmp(id, ACPI_SIG_MADT, 4))
instance = acpi_apic_instance; instance = acpi_apic_instance;
acpi_get_table_with_size(id, instance, &table_header, &tbl_size); acpi_get_table(id, instance, &table_header);
if (!table_header) { if (!table_header) {
pr_warn("%4.4s not present\n", id); pr_warn("%4.4s not present\n", id);
return -ENODEV; return -ENODEV;
...@@ -355,7 +354,7 @@ acpi_table_parse_entries_array(char *id, ...@@ -355,7 +354,7 @@ acpi_table_parse_entries_array(char *id,
count = acpi_parse_entries_array(id, table_size, table_header, count = acpi_parse_entries_array(id, table_size, table_header,
proc, proc_num, max_entries); proc, proc_num, max_entries);
early_acpi_os_unmap_memory((char *)table_header, tbl_size); acpi_put_table(table_header);
return count; return count;
} }
...@@ -397,7 +396,6 @@ acpi_table_parse_madt(enum acpi_madt_type id, ...@@ -397,7 +396,6 @@ acpi_table_parse_madt(enum acpi_madt_type id,
int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler) int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler)
{ {
struct acpi_table_header *table = NULL; struct acpi_table_header *table = NULL;
acpi_size tbl_size;
if (acpi_disabled) if (acpi_disabled)
return -ENODEV; return -ENODEV;
...@@ -406,13 +404,13 @@ int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler) ...@@ -406,13 +404,13 @@ int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler)
return -EINVAL; return -EINVAL;
if (strncmp(id, ACPI_SIG_MADT, 4) == 0) if (strncmp(id, ACPI_SIG_MADT, 4) == 0)
acpi_get_table_with_size(id, acpi_apic_instance, &table, &tbl_size); acpi_get_table(id, acpi_apic_instance, &table);
else else
acpi_get_table_with_size(id, 0, &table, &tbl_size); acpi_get_table(id, 0, &table);
if (table) { if (table) {
handler(table); handler(table);
early_acpi_os_unmap_memory(table, tbl_size); acpi_put_table(table);
return 0; return 0;
} else } else
return -ENODEV; return -ENODEV;
...@@ -426,16 +424,15 @@ int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler) ...@@ -426,16 +424,15 @@ int __init acpi_table_parse(char *id, acpi_tbl_table_handler handler)
static void __init check_multiple_madt(void) static void __init check_multiple_madt(void)
{ {
struct acpi_table_header *table = NULL; struct acpi_table_header *table = NULL;
acpi_size tbl_size;
acpi_get_table_with_size(ACPI_SIG_MADT, 2, &table, &tbl_size); acpi_get_table(ACPI_SIG_MADT, 2, &table);
if (table) { if (table) {
pr_warn("BIOS bug: multiple APIC/MADT found, using %d\n", pr_warn("BIOS bug: multiple APIC/MADT found, using %d\n",
acpi_apic_instance); acpi_apic_instance);
pr_warn("If \"acpi_apic_instance=%d\" works better, " pr_warn("If \"acpi_apic_instance=%d\" works better, "
"notify linux-acpi@vger.kernel.org\n", "notify linux-acpi@vger.kernel.org\n",
acpi_apic_instance ? 0 : 2); acpi_apic_instance ? 0 : 2);
early_acpi_os_unmap_memory(table, tbl_size); acpi_put_table(table);
} else } else
acpi_apic_instance = 0; acpi_apic_instance = 0;
......
...@@ -300,8 +300,9 @@ static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev) ...@@ -300,8 +300,9 @@ static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev)
GOP_VBIOS_CONTENT *vbios; GOP_VBIOS_CONTENT *vbios;
VFCT_IMAGE_HEADER *vhdr; VFCT_IMAGE_HEADER *vhdr;
if (!ACPI_SUCCESS(acpi_get_table_with_size("VFCT", 1, &hdr, &tbl_size))) if (!ACPI_SUCCESS(acpi_get_table("VFCT", 1, &hdr)))
return false; return false;
tbl_size = hdr->length;
if (tbl_size < sizeof(UEFI_ACPI_VFCT)) { if (tbl_size < sizeof(UEFI_ACPI_VFCT)) {
DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n"); DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n");
goto out_unmap; goto out_unmap;
......
...@@ -603,8 +603,9 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) ...@@ -603,8 +603,9 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
GOP_VBIOS_CONTENT *vbios; GOP_VBIOS_CONTENT *vbios;
VFCT_IMAGE_HEADER *vhdr; VFCT_IMAGE_HEADER *vhdr;
if (!ACPI_SUCCESS(acpi_get_table_with_size("VFCT", 1, &hdr, &tbl_size))) if (!ACPI_SUCCESS(acpi_get_table("VFCT", 1, &hdr)))
return false; return false;
tbl_size = hdr->length;
if (tbl_size < sizeof(UEFI_ACPI_VFCT)) { if (tbl_size < sizeof(UEFI_ACPI_VFCT)) {
DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n"); DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n");
goto out_unmap; goto out_unmap;
......
...@@ -2207,14 +2207,13 @@ static void __init free_dma_resources(void) ...@@ -2207,14 +2207,13 @@ static void __init free_dma_resources(void)
static int __init early_amd_iommu_init(void) static int __init early_amd_iommu_init(void)
{ {
struct acpi_table_header *ivrs_base; struct acpi_table_header *ivrs_base;
acpi_size ivrs_size;
acpi_status status; acpi_status status;
int i, remap_cache_sz, ret = 0; int i, remap_cache_sz, ret = 0;
if (!amd_iommu_detected) if (!amd_iommu_detected)
return -ENODEV; return -ENODEV;
status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size); status = acpi_get_table("IVRS", 0, &ivrs_base);
if (status == AE_NOT_FOUND) if (status == AE_NOT_FOUND)
return -ENODEV; return -ENODEV;
else if (ACPI_FAILURE(status)) { else if (ACPI_FAILURE(status)) {
...@@ -2334,7 +2333,7 @@ static int __init early_amd_iommu_init(void) ...@@ -2334,7 +2333,7 @@ static int __init early_amd_iommu_init(void)
out: out:
/* Don't leak any ACPI memory */ /* Don't leak any ACPI memory */
early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size); acpi_put_table(ivrs_base);
ivrs_base = NULL; ivrs_base = NULL;
return ret; return ret;
...@@ -2358,10 +2357,9 @@ static int amd_iommu_enable_interrupts(void) ...@@ -2358,10 +2357,9 @@ static int amd_iommu_enable_interrupts(void)
static bool detect_ivrs(void) static bool detect_ivrs(void)
{ {
struct acpi_table_header *ivrs_base; struct acpi_table_header *ivrs_base;
acpi_size ivrs_size;
acpi_status status; acpi_status status;
status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size); status = acpi_get_table("IVRS", 0, &ivrs_base);
if (status == AE_NOT_FOUND) if (status == AE_NOT_FOUND)
return false; return false;
else if (ACPI_FAILURE(status)) { else if (ACPI_FAILURE(status)) {
...@@ -2370,7 +2368,7 @@ static bool detect_ivrs(void) ...@@ -2370,7 +2368,7 @@ static bool detect_ivrs(void)
return false; return false;
} }
early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size); acpi_put_table(ivrs_base);
/* Make sure ACS will be enabled during PCI probe */ /* Make sure ACS will be enabled during PCI probe */
pci_request_acs(); pci_request_acs();
......
...@@ -68,7 +68,6 @@ DECLARE_RWSEM(dmar_global_lock); ...@@ -68,7 +68,6 @@ DECLARE_RWSEM(dmar_global_lock);
LIST_HEAD(dmar_drhd_units); LIST_HEAD(dmar_drhd_units);
struct acpi_table_header * __initdata dmar_tbl; struct acpi_table_header * __initdata dmar_tbl;
static acpi_size dmar_tbl_size;
static int dmar_dev_scope_status = 1; static int dmar_dev_scope_status = 1;
static unsigned long dmar_seq_ids[BITS_TO_LONGS(DMAR_UNITS_SUPPORTED)]; static unsigned long dmar_seq_ids[BITS_TO_LONGS(DMAR_UNITS_SUPPORTED)];
...@@ -541,9 +540,7 @@ static int __init dmar_table_detect(void) ...@@ -541,9 +540,7 @@ static int __init dmar_table_detect(void)
acpi_status status = AE_OK; acpi_status status = AE_OK;
/* if we could find DMAR table, then there are DMAR devices */ /* if we could find DMAR table, then there are DMAR devices */
status = acpi_get_table_with_size(ACPI_SIG_DMAR, 0, status = acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_tbl);
(struct acpi_table_header **)&dmar_tbl,
&dmar_tbl_size);
if (ACPI_SUCCESS(status) && !dmar_tbl) { if (ACPI_SUCCESS(status) && !dmar_tbl) {
pr_warn("Unable to map DMAR\n"); pr_warn("Unable to map DMAR\n");
...@@ -904,7 +901,7 @@ int __init detect_intel_iommu(void) ...@@ -904,7 +901,7 @@ int __init detect_intel_iommu(void)
x86_init.iommu.iommu_init = intel_iommu_init; x86_init.iommu.iommu_init = intel_iommu_init;
#endif #endif
early_acpi_os_unmap_memory((void __iomem *)dmar_tbl, dmar_tbl_size); acpi_put_table(dmar_tbl);
dmar_tbl = NULL; dmar_tbl = NULL;
up_write(&dmar_global_lock); up_write(&dmar_global_lock);
......
...@@ -446,7 +446,6 @@ static int pcc_parse_subspace_irq(int id, ...@@ -446,7 +446,6 @@ static int pcc_parse_subspace_irq(int id,
*/ */
static int __init acpi_pcc_probe(void) static int __init acpi_pcc_probe(void)
{ {
acpi_size pcct_tbl_header_size;
struct acpi_table_header *pcct_tbl; struct acpi_table_header *pcct_tbl;
struct acpi_subtable_header *pcct_entry; struct acpi_subtable_header *pcct_entry;
struct acpi_table_pcct *acpi_pcct_tbl; struct acpi_table_pcct *acpi_pcct_tbl;
...@@ -455,9 +454,7 @@ static int __init acpi_pcc_probe(void) ...@@ -455,9 +454,7 @@ static int __init acpi_pcc_probe(void)
acpi_status status = AE_OK; acpi_status status = AE_OK;
/* Search for PCCT */ /* Search for PCCT */
status = acpi_get_table_with_size(ACPI_SIG_PCCT, 0, status = acpi_get_table(ACPI_SIG_PCCT, 0, &pcct_tbl);
&pcct_tbl,
&pcct_tbl_header_size);
if (ACPI_FAILURE(status) || !pcct_tbl) { if (ACPI_FAILURE(status) || !pcct_tbl) {
pr_warn("PCCT header not found.\n"); pr_warn("PCCT header not found.\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment