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

Commit bb0fc085 authored by Alex Williamson's avatar Alex Williamson Committed by Tony Luck
Browse files

[IA64] use common pxm function



This patch simplifies a couple places where we search for _PXM
values in ACPI namespace.  Thanks,

Signed-off-by: default avatarAlex Williamson <alex.williamson@hp.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent c0b12422
Loading
Loading
Loading
Loading
+4 −30
Original line number Diff line number Diff line
@@ -1944,43 +1944,17 @@ sba_connect_bus(struct pci_bus *bus)
static void __init
sba_map_ioc_to_node(struct ioc *ioc, acpi_handle handle)
{
	struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
	union acpi_object *obj;
	acpi_handle phandle;
	unsigned int node;
	int pxm;

	ioc->node = MAX_NUMNODES;

	/*
	 * Check for a _PXM on this node first.  We don't typically see
	 * one here, so we'll end up getting it from the parent.
	 */
	if (ACPI_FAILURE(acpi_evaluate_object(handle, "_PXM", NULL, &buffer))) {
		if (ACPI_FAILURE(acpi_get_parent(handle, &phandle)))
			return;
	pxm = acpi_get_pxm(handle);

		/* Reset the acpi buffer */
		buffer.length = ACPI_ALLOCATE_BUFFER;
		buffer.pointer = NULL;

		if (ACPI_FAILURE(acpi_evaluate_object(phandle, "_PXM", NULL,
		                                      &buffer)))
	if (pxm < 0)
		return;
	}

	if (!buffer.length || !buffer.pointer)
		return;

	obj = buffer.pointer;

	if (obj->type != ACPI_TYPE_INTEGER ||
	    obj->integer.value >= MAX_PXM_DOMAINS) {
		acpi_os_free(buffer.pointer);
		return;
	}

	node = pxm_to_nid_map[obj->integer.value];
	acpi_os_free(buffer.pointer);
	node = pxm_to_nid_map[pxm];

	if (node >= MAX_NUMNODES || !node_online(node))
		return;
+5 −18
Original line number Diff line number Diff line
@@ -779,7 +779,7 @@ acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret)
	union acpi_object *obj;
	struct acpi_table_iosapic *iosapic;
	unsigned int gsi_base;
	int node;
	int pxm, node;

	/* Only care about objects w/ a method that returns the MADT */
	if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
@@ -805,29 +805,16 @@ acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret)
	gsi_base = iosapic->global_irq_base;

	acpi_os_free(buffer.pointer);
	buffer.length = ACPI_ALLOCATE_BUFFER;
	buffer.pointer = NULL;

	/*
	 * OK, it's an IOSAPIC MADT entry, look for a _PXM method to tell
	 * OK, it's an IOSAPIC MADT entry, look for a _PXM value to tell
	 * us which node to associate this with.
	 */
	if (ACPI_FAILURE(acpi_evaluate_object(handle, "_PXM", NULL, &buffer)))
		return AE_OK;

	if (!buffer.length || !buffer.pointer)
		return AE_OK;

	obj = buffer.pointer;

	if (obj->type != ACPI_TYPE_INTEGER ||
	    obj->integer.value >= MAX_PXM_DOMAINS) {
		acpi_os_free(buffer.pointer);
	pxm = acpi_get_pxm(handle);
	if (pxm < 0)
		return AE_OK;
	}

	node = pxm_to_nid_map[obj->integer.value];
	acpi_os_free(buffer.pointer);
	node = pxm_to_nid_map[pxm];

	if (node >= MAX_NUMNODES || !node_online(node) ||
	    cpus_empty(node_to_cpumask(node)))