lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130712115420.GH4898@intel.com>
Date:	Fri, 12 Jul 2013 14:54:20 +0300
From:	Mika Westerberg <mika.westerberg@...ux.intel.com>
To:	"Rafael J. Wysocki" <rjw@...k.pl>
Cc:	ACPI Devel Maling List <linux-acpi@...r.kernel.org>,
	Bjorn Helgaas <bhelgaas@...gle.com>,
	LKML <linux-kernel@...r.kernel.org>,
	Linux PCI <linux-pci@...r.kernel.org>,
	Yinghai Lu <yinghai@...nel.org>, Jiang Liu <liuj97@...il.com>
Subject: Re: [RFC][PATCH 11/30] ACPI / hotplug / PCI: Register all devices
 under the given bridge

On Fri, Jul 12, 2013 at 01:50:29AM +0200, Rafael J. Wysocki wrote:
> @@ -1210,6 +1125,35 @@ void acpiphp_enumerate_slots(struct pci_
>  	 */
>  	get_device(&bus->dev);
>  
> +	if (!pci_is_root_bus(bridge->pci_bus)) {
> +		struct acpiphp_context *context;
> +
> +		/*
> +		 * This bridge should have been registered as a hotplug function
> +		 * under its parent, so the context has to be there.  If not, we
> +		 * are in deep goo.
> +		 */
> +		mutex_lock(&acpiphp_context_lock);
> +		context = acpiphp_get_context(handle);
> +		if (WARN_ON(!context || !context->func)) {
> +			mutex_unlock(&acpiphp_context_lock);
> +			put_device(&bus->dev);
> +			kfree(bridge);
> +			return;
> +		}
> +		bridge->context = context;
> +		context->bridge = bridge;
> +		/* Get a reference to the parent bridge. */
> +		get_bridge(context->func->slot->bridge);
> +		mutex_unlock(&acpiphp_context_lock);
> +	}
> +
> +	status = acpi_get_handle(bridge->handle, "_EJ0", &handle);
> +	if (ACPI_SUCCESS(status)) {
> +		dbg("found ejectable p2p bridge\n");
> +		bridge->flags |= BRIDGE_HAS_EJ0;
> +	}
> +
>  	/* must be added to the list prior to calling register_slot */
>  	mutex_lock(&bridge_mutex);
>  	list_add(&bridge->list, &bridge_list);
> @@ -1220,34 +1164,9 @@ void acpiphp_enumerate_slots(struct pci_
>  				     register_slot, NULL, bridge, NULL);
>  	if (ACPI_FAILURE(status)) {
>  		acpi_handle_err(bridge->handle, "failed to register slots\n");
> -		goto err;
> -	}
> -
> -	if (pci_is_root_bus(bridge->pci_bus))
> -		return;
> -
> -	status = acpi_get_handle(bridge->handle, "_EJ0", &handle);
> -	if (ACPI_SUCCESS(status)) {
> -		dbg("found ejectable p2p bridge\n");
> -		bridge->flags |= BRIDGE_HAS_EJ0;
> -	}
> -	if (context->handler_for_func) {
> -		/* Notify handler already installed. */
> -		get_bridge(context->func->slot->bridge);
> -		return;
> +		cleanup_bridge(bridge);
> +		put_bridge(bridge);
>  	}
> -
> -	/* install notify handler for P2P bridges */
> -	status = acpi_install_notify_handler(bridge->handle, ACPI_SYSTEM_NOTIFY,
> -					     handle_hotplug_event, NULL);

With this removed we now install notify handlers for the slot objects under
this bridge but not for the bridge itself.

In case of Thunderbolt the BIOS will send the event for the root port ACPI
device \_SB_.PCI0.RP05 and with the above change we don't handle it
anymore.

> -	if (ACPI_SUCCESS(status))
> -		return;
> -
> -	acpi_handle_err(bridge->handle, "failed to register notify handler\n");
> -
> - err:
> -	cleanup_bridge(bridge);
> -	put_bridge(bridge);
>  }
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ