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

Commit d8191fa4 authored by Alex Chiang's avatar Alex Chiang Committed by Len Brown
Browse files

ACPI: processor: driver doesn't need to evaluate _PDC



Now that the early _PDC evaluation path knows how to correctly
evaluate _PDC on only physically present processors, there's no
need for the processor driver to evaluate it later when it loads.

To cover the hotplug case, push _PDC evaluation down into the
hotplug paths.

Cc: x86@kernel.org
Cc: Tony Luck <tony.luck@intel.com>
Acked-by: default avatarVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 3b1da4c5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <linux/efi.h>
#include <linux/mmzone.h>
#include <linux/nodemask.h>
#include <acpi/processor.h>
#include <asm/io.h>
#include <asm/iosapic.h>
#include <asm/machvec.h>
@@ -907,6 +908,8 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)
	cpu_set(cpu, cpu_present_map);
	ia64_cpu_to_sapicid[cpu] = physid;

	acpi_processor_set_pdc(handle);

	*pcpu = cpu;
	return (0);
}
+3 −0
Original line number Diff line number Diff line
@@ -490,6 +490,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
 *  ACPI based hotplug support for CPU
 */
#ifdef CONFIG_ACPI_HOTPLUG_CPU
#include <acpi/processor.h>

static void acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)
{
@@ -567,6 +568,8 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
		goto free_new_map;
	}

	acpi_processor_set_pdc(handle);

	cpu = cpumask_first(new_map);
	acpi_map_cpu2node(handle, cpu, physid);

+0 −7
Original line number Diff line number Diff line
@@ -317,8 +317,6 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
	return status;
}

static int early_pdc_done;

void acpi_processor_set_pdc(acpi_handle handle)
{
	struct acpi_object_list *obj_list;
@@ -326,9 +324,6 @@ void acpi_processor_set_pdc(acpi_handle handle)
	if (arch_has_acpi_pdc() == false)
		return;

	if (early_pdc_done)
		return;

	obj_list = acpi_processor_alloc_pdc();
	if (!obj_list)
		return;
@@ -369,6 +364,4 @@ void __init acpi_early_processor_set_pdc(void)
	acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
			    ACPI_UINT32_MAX,
			    early_init_pdc, NULL, NULL, NULL);

	early_pdc_done = 1;
}
+0 −3
Original line number Diff line number Diff line
@@ -608,9 +608,6 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device)
		goto err_remove_fs;
	}

	/* _PDC call should be done before doing anything else (if reqd.). */
	acpi_processor_set_pdc(pr->handle);

#ifdef CONFIG_CPU_FREQ
	acpi_processor_ppc_has_changed(pr, 0);
#endif