Commit 5bf46fe2 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branches 'acpi-video', 'acpi-platform-profile' and 'acpi-misc'

Merge an ACPI backlight (video) driver fix, an ACPI platform-profile
driver optimization, and a miscellaneous ACPI-related cleanup for
6.15-rc1:

 - Make the ACPI backlight driver handle fetching EDID as
   ACPI_TYPE_PACKAGE which is not specification-compliant, but
   has been encountered in the field (Gergo Koteles).

 - Simplify the aggregation of choices in the ACPI platform-profile
   driver which has become possible after recent modifications of that
   driver (Kurt Borja).

 - Use str_enabled_disabled() instead of hardcoded strings in the ACPI
   code related to NUMA (Thorsten Blum).

* acpi-video:
  ACPI: video: Handle fetching EDID as ACPI_TYPE_PACKAGE

* acpi-platform-profile:
  ACPI: platform_profile: Optimize _aggregate_choices()

* acpi-misc:
  ACPI: NUMA: Use str_enabled_disabled() helper function
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -649,6 +649,13 @@ acpi_video_device_EDID(struct acpi_video_device *device, void **edid, int length

	obj = buffer.pointer;

	/*
	 * Some buggy implementations incorrectly return the EDID buffer in an ACPI package.
	 * In this case, extract the buffer from the package.
	 */
	if (obj && obj->type == ACPI_TYPE_PACKAGE && obj->package.count == 1)
		obj = &obj->package.elements[0];

	if (obj && obj->type == ACPI_TYPE_BUFFER) {
		*edid = kmemdup(obj->buffer.pointer, obj->buffer.length, GFP_KERNEL);
		ret = *edid ? obj->buffer.length : -ENOMEM;
@@ -658,7 +665,7 @@ acpi_video_device_EDID(struct acpi_video_device *device, void **edid, int length
		ret = -EFAULT;
	}

	kfree(obj);
	kfree(buffer.pointer);
	return ret;
}

+8 −14
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <linux/nodemask.h>
#include <linux/topology.h>
#include <linux/numa_memblks.h>
#include <linux/string_choices.h>

static nodemask_t nodes_found_map = NODE_MASK_NONE;

@@ -188,8 +189,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
			pr_debug("SRAT Processor (id[0x%02x] eid[0x%02x]) in proximity domain %d %s\n",
				 p->apic_id, p->local_sapic_eid,
				 p->proximity_domain_lo,
				 (p->flags & ACPI_SRAT_CPU_ENABLED) ?
				 "enabled" : "disabled");
				 str_enabled_disabled(p->flags & ACPI_SRAT_CPU_ENABLED));
		}
		break;

@@ -201,8 +201,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
				 (unsigned long long)p->base_address,
				 (unsigned long long)p->length,
				 p->proximity_domain,
				 (p->flags & ACPI_SRAT_MEM_ENABLED) ?
				 "enabled" : "disabled",
				 str_enabled_disabled(p->flags & ACPI_SRAT_MEM_ENABLED),
				 (p->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) ?
				 " hot-pluggable" : "",
				 (p->flags & ACPI_SRAT_MEM_NON_VOLATILE) ?
@@ -217,8 +216,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
			pr_debug("SRAT Processor (x2apicid[0x%08x]) in proximity domain %d %s\n",
				 p->apic_id,
				 p->proximity_domain,
				 (p->flags & ACPI_SRAT_CPU_ENABLED) ?
				 "enabled" : "disabled");
				 str_enabled_disabled(p->flags & ACPI_SRAT_CPU_ENABLED));
		}
		break;

@@ -229,8 +227,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
			pr_debug("SRAT Processor (acpi id[0x%04x]) in proximity domain %d %s\n",
				 p->acpi_processor_uid,
				 p->proximity_domain,
				 (p->flags & ACPI_SRAT_GICC_ENABLED) ?
				 "enabled" : "disabled");
				 str_enabled_disabled(p->flags & ACPI_SRAT_GICC_ENABLED));
		}
		break;

@@ -248,8 +245,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
				 *(u16 *)(&p->device_handle[0]),
				 *(u16 *)(&p->device_handle[2]),
				 p->proximity_domain,
				 (p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED) ?
				"enabled" : "disabled");
				 str_enabled_disabled(p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED));
		} else {
			/*
			 * In this case we can rely on the device having a
@@ -259,8 +255,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
				(char *)(&p->device_handle[0]),
				(char *)(&p->device_handle[8]),
				p->proximity_domain,
				(p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED) ?
				"enabled" : "disabled");
				str_enabled_disabled(p->flags & ACPI_SRAT_GENERIC_AFFINITY_ENABLED));
		}
	}
	break;
@@ -272,8 +267,7 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
			pr_debug("SRAT Processor (acpi id[0x%04x]) in proximity domain %d %s\n",
				 p->acpi_processor_uid,
				 p->proximity_domain,
				 (p->flags & ACPI_SRAT_RINTC_ENABLED) ?
				 "enabled" : "disabled");
				 str_enabled_disabled(p->flags & ACPI_SRAT_RINTC_ENABLED));
		}
		break;

+5 −8
Original line number Diff line number Diff line
@@ -245,7 +245,8 @@ static const struct class platform_profile_class = {
/**
 * _aggregate_choices - Aggregate the available profile choices
 * @dev: The device
 * @arg: struct aggregate_choices_data
 * @arg: struct aggregate_choices_data, with it's aggregate member bitmap
 *	 initially filled with ones
 *
 * Return: 0 on success, -errno on failure
 */
@@ -256,11 +257,9 @@ static int _aggregate_choices(struct device *dev, void *arg)
	struct platform_profile_handler *handler;

	lockdep_assert_held(&profile_lock);

	handler = to_pprof_handler(dev);
	bitmap_or(tmp, handler->choices, handler->hidden_choices, PLATFORM_PROFILE_LAST);
	if (test_bit(PLATFORM_PROFILE_LAST, data->aggregate))
		bitmap_copy(data->aggregate, tmp, PLATFORM_PROFILE_LAST);
	else
	bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
	data->count++;

@@ -305,7 +304,6 @@ static ssize_t platform_profile_choices_show(struct kobject *kobj,
	};
	int err;

	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
		err = class_for_each_device(&platform_profile_class, NULL,
					    &data, _aggregate_choices);
@@ -422,7 +420,7 @@ static ssize_t platform_profile_store(struct kobject *kobj,
	i = sysfs_match_string(profile_names, buf);
	if (i < 0 || i == PLATFORM_PROFILE_CUSTOM)
		return -EINVAL;
	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);

	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
		ret = class_for_each_device(&platform_profile_class, NULL,
					    &data, _aggregate_choices);
@@ -502,7 +500,6 @@ int platform_profile_cycle(void)
	enum platform_profile_option profile = PLATFORM_PROFILE_LAST;
	int err;

	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
		err = class_for_each_device(&platform_profile_class, NULL,
					    &profile, _aggregate_profiles);