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

Commit 321ae379 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ACPI fixes from Rafael Wysocki:

 "These revert a recent ACPICA commit that turned out to be problematic
  and fix a device enumeration breakage from the 4.8 cycle.

  Specifics:

   - Revert a recent ACPICA commit targeted at catching firmware bugs
     which promptly did that and caused functional problems to appear
     (Rafael Wysocki).

   - Fix a device enumeration problem introduced in the 4.8 time frame
     which caused the ACPI docking station driver to report incorrect
     status via sysfs among other things (Rafael Wysocki)"

* tag 'acpi-4.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  Revert "ACPICA: Resources: Not a valid resource if buffer length too long"
  ACPI / scan: Set the visited flag for all enumerated devices
parents 1882e562 f83e13f9
Loading
Loading
Loading
Loading
+5 −12
Original line number Diff line number Diff line
@@ -421,10 +421,8 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,

	ACPI_FUNCTION_TRACE(ut_walk_aml_resources);

	/*
	 * The absolute minimum resource template is one end_tag descriptor.
	 * However, we will treat a lone end_tag as just a simple buffer.
	 */
	/* The absolute minimum resource template is one end_tag descriptor */

	if (aml_length < sizeof(struct aml_resource_end_tag)) {
		return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
	}
@@ -456,8 +454,9 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
		/* Invoke the user function */

		if (user_function) {
			status = user_function(aml, length, offset,
					       resource_index, context);
			status =
			    user_function(aml, length, offset, resource_index,
					  context);
			if (ACPI_FAILURE(status)) {
				return_ACPI_STATUS(status);
			}
@@ -481,12 +480,6 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
				*context = aml;
			}

			/* Check if buffer is defined to be longer than the resource length */

			if (aml_length > (offset + length)) {
				return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
			}

			/* Normal exit */

			return_ACPI_STATUS(AE_OK);
+12 −7
Original line number Diff line number Diff line
@@ -1857,14 +1857,19 @@ static void acpi_bus_attach(struct acpi_device *device)
		return;

	device->flags.match_driver = true;
	if (!ret) {
	if (ret > 0) {
		acpi_device_set_enumerated(device);
		goto ok;
	}

	ret = device_attach(&device->dev);
	if (ret < 0)
		return;

		if (!ret && device->pnp.type.platform_id)
	if (ret > 0 || !device->pnp.type.platform_id)
		acpi_device_set_enumerated(device);
	else
		acpi_default_enumeration(device);
	}

 ok:
	list_for_each_entry(child, &device->children, node)