[PATCH v7 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier
Hanjun Guo
guohanjun at huawei.com
Tue Apr 23 04:53:34 PDT 2024
> @@ -232,6 +263,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
> acpi_status status = AE_OK;
> static int cpu0_initialized;
> unsigned long long value;
> + int ret;
>
> acpi_processor_errata();
>
> @@ -316,10 +348,12 @@ static int acpi_processor_get_info(struct acpi_device *device)
> * because cpuid <-> apicid mapping is persistent now.
> */
> if (invalid_logical_cpuid(pr->id) || !cpu_present(pr->id)) {
> - int ret = acpi_processor_hotadd_init(pr);
> + ret = acpi_processor_hotadd_init(pr, device);
>
> if (ret)
> - return ret;
> + goto err;
> + } else {
> + acpi_processor_set_per_cpu(pr, device);
> }
>
> /*
> @@ -357,6 +391,10 @@ static int acpi_processor_get_info(struct acpi_device *device)
> arch_fix_phys_package_id(pr->id, value);
>
> return 0;
> +
> +err:
> + per_cpu(processors, pr->id) = NULL;
...
> + return ret;
> }
>
> /*
> @@ -365,8 +403,6 @@ static int acpi_processor_get_info(struct acpi_device *device)
> * (cpu_data(cpu)) values, like CPU feature flags, family, model, etc.
> * Such things have to be put in and set up by the processor driver's .probe().
> */
> -static DEFINE_PER_CPU(void *, processor_device_array);
> -
> static int acpi_processor_add(struct acpi_device *device,
> const struct acpi_device_id *id)
> {
> @@ -395,28 +431,6 @@ static int acpi_processor_add(struct acpi_device *device,
> if (result) /* Processor is not physically present or unavailable */
> return 0;
>
> - BUG_ON(pr->id >= nr_cpu_ids);
> -
> - /*
> - * Buggy BIOS check.
> - * ACPI id of processors can be reported wrongly by the BIOS.
> - * Don't trust it blindly
> - */
> - if (per_cpu(processor_device_array, pr->id) != NULL &&
> - per_cpu(processor_device_array, pr->id) != device) {
> - dev_warn(&device->dev,
> - "BIOS reported wrong ACPI id %d for the processor\n",
> - pr->id);
> - /* Give up, but do not abort the namespace scan. */
> - goto err;
> - }
> - /*
> - * processor_device_array is not cleared on errors to allow buggy BIOS
> - * checks.
> - */
> - per_cpu(processor_device_array, pr->id) = device;
> - per_cpu(processors, pr->id) = pr;
Nit: seems we need to remove the duplicated
per_cpu(processors, pr->id) = NULL; in acpi_processor_add():
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -446,7 +446,6 @@ static int acpi_processor_add(struct acpi_device
*device,
err:
free_cpumask_var(pr->throttling.shared_cpu_map);
device->driver_data = NULL;
- per_cpu(processors, pr->id) = NULL;
err_free_pr:
kfree(pr);
return result;
Thanks
Hanjun
More information about the linux-arm-kernel
mailing list