From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: ACPI Devel Maling List <linux-acpi@vger.kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
LKML <linux-kernel@vger.kernel.org>,
Linux PCI <linux-pci@vger.kernel.org>,
Yinghai Lu <yinghai@kernel.org>, Jiang Liu <liuj97@gmail.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Subject: [PATCH 20/30] ACPI / hotplug / PCI: Consolidate slot disabling and ejecting
Date: Thu, 18 Jul 2013 01:28:30 +0200 [thread overview]
Message-ID: <2675342.96SJAC4hmM@vostro.rjw.lan> (raw)
In-Reply-To: <2366394.4EoP1MXmG2@vostro.rjw.lan>
From: Mika Westerberg <mika.westerberg@linux.intel.com>
Both acpiphp_disable_slot() and acpiphp_eject_slot() are always
called together so instead of calling each separately we can
consolidate them into one function acpiphp_disable_and_eject_slot()
that does both (but it will return success on _EJ0 failures that
were ignored in the majority of call sites anyway).
[rjw: Rebased plus minor tweaks]
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
drivers/pci/hotplug/acpiphp.h | 3 --
drivers/pci/hotplug/acpiphp_core.c | 6 ----
drivers/pci/hotplug/acpiphp_glue.c | 50 +++++++++++++------------------------
3 files changed, 20 insertions(+), 39 deletions(-)
Index: linux-pm/drivers/pci/hotplug/acpiphp.h
===================================================================
--- linux-pm.orig/drivers/pci/hotplug/acpiphp.h
+++ linux-pm/drivers/pci/hotplug/acpiphp.h
@@ -188,8 +188,7 @@ void acpiphp_unregister_hotplug_slot(str
typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
int acpiphp_enable_slot(struct acpiphp_slot *slot);
-int acpiphp_disable_slot(struct acpiphp_slot *slot);
-int acpiphp_eject_slot(struct acpiphp_slot *slot);
+int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot);
u8 acpiphp_get_power_status(struct acpiphp_slot *slot);
u8 acpiphp_get_attention_status(struct acpiphp_slot *slot);
u8 acpiphp_get_latch_status(struct acpiphp_slot *slot);
Index: linux-pm/drivers/pci/hotplug/acpiphp_core.c
===================================================================
--- linux-pm.orig/drivers/pci/hotplug/acpiphp_core.c
+++ linux-pm/drivers/pci/hotplug/acpiphp_core.c
@@ -155,15 +155,11 @@ static int enable_slot(struct hotplug_sl
static int disable_slot(struct hotplug_slot *hotplug_slot)
{
struct slot *slot = hotplug_slot->private;
- int retval;
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
/* disable the specified slot */
- retval = acpiphp_disable_slot(slot->acpi_slot);
- if (!retval)
- retval = acpiphp_eject_slot(slot->acpi_slot);
- return retval;
+ return acpiphp_disable_and_eject_slot(slot->acpi_slot);
}
Index: linux-pm/drivers/pci/hotplug/acpiphp_glue.c
===================================================================
--- linux-pm.orig/drivers/pci/hotplug/acpiphp_glue.c
+++ linux-pm/drivers/pci/hotplug/acpiphp_glue.c
@@ -765,27 +765,6 @@ static unsigned int get_slot_status(stru
}
/**
- * acpiphp_eject_slot - physically eject the slot
- * @slot: ACPI PHP slot
- */
-int acpiphp_eject_slot(struct acpiphp_slot *slot)
-{
- struct acpiphp_func *func;
-
- list_for_each_entry(func, &slot->funcs, sibling) {
- /* We don't want to call _EJ0 on non-existing functions. */
- if (!(func->flags & FUNC_HAS_EJ0))
- continue;
-
- if (ACPI_FAILURE(acpi_evaluate_ej0(func_to_handle(func))))
- return -1;
- else
- break;
- }
- return 0;
-}
-
-/**
* acpiphp_check_bridge - re-enumerate devices
* @bridge: where to begin re-enumeration
*
@@ -805,13 +784,11 @@ static int acpiphp_check_bridge(struct a
if (slot->flags & SLOT_ENABLED) {
if (status == ACPI_STA_ALL)
continue;
- retval = acpiphp_disable_slot(slot);
- if (retval) {
- err("Error occurred in disabling\n");
+
+ retval = acpiphp_disable_and_eject_slot(slot);
+ if (retval)
goto err_exit;
- } else {
- acpiphp_eject_slot(slot);
- }
+
disabled++;
} else {
if (status != ACPI_STA_ALL)
@@ -951,9 +928,7 @@ static void hotplug_event(acpi_handle ha
case ACPI_NOTIFY_EJECT_REQUEST:
/* request device eject */
dbg("%s: Device eject notify on %s\n", __func__, objname);
- if (!(acpiphp_disable_slot(func->slot)))
- acpiphp_eject_slot(func->slot);
-
+ acpiphp_disable_and_eject_slot(func->slot);
break;
case ACPI_NOTIFY_FREQUENCY_MISMATCH:
@@ -1148,11 +1123,12 @@ int acpiphp_enable_slot(struct acpiphp_s
}
/**
- * acpiphp_disable_slot - power off slot
+ * acpiphp_disable_and_eject_slot - power off and eject slot
* @slot: ACPI PHP slot
*/
-int acpiphp_disable_slot(struct acpiphp_slot *slot)
+int acpiphp_disable_and_eject_slot(struct acpiphp_slot *slot)
{
+ struct acpiphp_func *func;
int retval = 0;
mutex_lock(&slot->crit_sect);
@@ -1167,6 +1143,16 @@ int acpiphp_disable_slot(struct acpiphp_
if (retval)
goto err_exit;
+ list_for_each_entry(func, &slot->funcs, sibling)
+ if (func->flags & FUNC_HAS_EJ0) {
+ acpi_handle handle = func_to_handle(func);
+
+ if (ACPI_FAILURE(acpi_evaluate_ej0(handle)))
+ acpi_handle_err(handle, "_EJ0 failed\n");
+
+ break;
+ }
+
err_exit:
mutex_unlock(&slot->crit_sect);
return retval;
next prev parent reply other threads:[~2013-07-17 23:34 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-09 0:01 [RFC][PATCH 0/8] ACPI / hotplug / PCI: Consolidation of handling notifications (in progress) Rafael J. Wysocki
2013-07-09 0:14 ` [RFC][PATCH 1/8] ACPI / PCI: Make bus registration and unregistration symmetric Rafael J. Wysocki
2013-07-09 0:16 ` [RFC][PATCH 2/8] ACPI / hotplug / PCI: Consolidate acpiphp_enumerate_slots() Rafael J. Wysocki
2013-07-09 0:17 ` [RFC][PATCH 3/8] ACPI / hotplug / PCI: Always return success after adding a function Rafael J. Wysocki
2013-07-09 0:18 ` [RFC][PATCH 4/8] ACPI / hotplug / PCI: Hotplug context objects for bridges and functions Rafael J. Wysocki
2013-07-09 9:23 ` Mika Westerberg
2013-07-09 23:54 ` [Update][RFC][PATCH " Rafael J. Wysocki
2013-07-09 0:19 ` [RFC][PATCH 5/8] ACPI / hotplug / PCI: Unified notify handler for hotplug events Rafael J. Wysocki
2013-07-09 9:30 ` Mika Westerberg
2013-07-09 23:49 ` Rafael J. Wysocki
2013-07-09 0:20 ` [RFC][PATCH 6/8] ACPI / hotplug / PCI: Drop acpiphp_handle_to_bridge() Rafael J. Wysocki
2013-07-09 9:37 ` Mika Westerberg
2013-07-09 23:46 ` Rafael J. Wysocki
2013-07-09 0:21 ` [RFC][PATCH 7/8] ACPI / hotplug / PCI: Pass hotplug context object to event handlers Rafael J. Wysocki
2013-07-09 0:22 ` [RFC][PATCH 8/8] ACPI / hotplug / PCI: Merge hotplug event handling functions Rafael J. Wysocki
2013-07-11 23:34 ` [RFC][PATCH 0/30] ACPI / hotplug / PCI: Major rework + Thunderbolt workarounds Rafael J. Wysocki
2013-07-11 23:36 ` [RFC][PATCH 1/30] ACPI / PCI: Make bus registration and unregistration symmetric Rafael J. Wysocki
2013-07-11 23:37 ` [RFC][PATCH 2/30] ACPI / hotplug / PCI: Consolidate acpiphp_enumerate_slots() Rafael J. Wysocki
2013-07-11 23:38 ` [RFC][PATCH 3/30] ACPI / hotplug / PCI: Always return success after adding a function Rafael J. Wysocki
2013-07-11 23:39 ` [RFC][PATCH 4/30] ACPI / hotplug / PCI: Hotplug context objects for bridges and functions Rafael J. Wysocki
2013-07-11 23:40 ` [RFC][PATCH 5/30] ACPI / hotplug / PCI: Unified notify handler for hotplug events Rafael J. Wysocki
2013-07-11 23:44 ` [RFC][PATCH 6/30] ACPI / hotplug / PCI: Rework acpiphp_handle_to_bridge() Rafael J. Wysocki
2013-07-11 23:45 ` [RFC][PATCH 7/30] ACPI / hotplug / PCI: Pass hotplug context objects to event handlers Rafael J. Wysocki
2013-07-11 23:47 ` [RFC][PATCH 8/30] ACPI / hotplug / PCI: Merge hotplug event handling functions Rafael J. Wysocki
2013-07-11 23:48 ` [RFC][PATCH 9/30] ACPI / hotplug / PCI: Drop func field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-11 23:49 ` [RFC][PATCH 10/30] ACPI / hotplug / PCI: Refactor slot allocation code in register_slot() Rafael J. Wysocki
2013-07-11 23:50 ` [RFC][PATCH 11/30] ACPI / hotplug / PCI: Register all devices under the given bridge Rafael J. Wysocki
2013-07-12 11:54 ` Mika Westerberg
2013-07-12 13:01 ` Mika Westerberg
2013-07-11 23:51 ` [RFC][PATCH 12/30] ACPI / hotplug / PCI: Drop sun field from struct acpiphp_slot Rafael J. Wysocki
2013-07-11 23:52 ` [RFC][PATCH 13/30] ACPI / hotplug / PCI: Use common slot count variable in register_slot() Rafael J. Wysocki
2013-07-11 23:54 ` [RFC][PATCH 14/30] ACPI / hotplug / PCI: Drop flags field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-11 23:54 ` [RFC][PATCH 15/30] ACPI / hotplug / PCI: Embed function struct into struct acpiphp_context Rafael J. Wysocki
2013-07-11 23:55 ` [RFC][PATCH 16/30] ACPI / hotplug / PCI: Drop handle field from struct acpiphp_func Rafael J. Wysocki
2013-07-11 23:56 ` [RFC][PATCH 17/30] ACPI / hotplug / PCI: Drop handle field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-11 23:56 ` [RFC][PATCH 18/30] ACPI / hotplug / PCI: Store parent in functions and bus in slots Rafael J. Wysocki
2013-07-11 23:57 ` [RFC][PATCH 19/30] ACPI / hotplug / PCI: Rework namespace scanning and trimming routines Rafael J. Wysocki
2013-07-11 23:58 ` [RFC][PATCH 20/30] ACPI / hotplug / PCI: Drop redundant checks from check_hotplug_bridge() Rafael J. Wysocki
2013-07-11 23:59 ` [RFC][PATCH 21/30] ACPI / hotplug / PCI: Consolidate slot disabling and ejecting Rafael J. Wysocki
2013-07-12 0:00 ` [RFC][PATCH 22/30] ACPI / hotplug / PCI: Do not queue up event handling work items in vain Rafael J. Wysocki
2013-07-12 0:01 ` [RFC][PATCH 23/30] ACPI / hotplug / PCI: Do not exectute _PS0 and _PS3 directly Rafael J. Wysocki
2013-07-12 13:05 ` Mika Westerberg
2013-07-12 21:09 ` Rafael J. Wysocki
2013-07-12 0:02 ` [RFC][PATCH 24/30] ACPI / hotplug / PCI: Do not check SLOT_ENABLED in enable_device() Rafael J. Wysocki
2013-07-12 0:03 ` [RFC][PATCH 25/30] ACPI / hotplug / PCI: Allow slots without new devices to be rescanned Rafael J. Wysocki
2013-07-12 0:04 ` [RFC][PATCH 26/30] ACPI / hotplug / PCI: Check for new devices on enabled slots Rafael J. Wysocki
2013-07-12 0:05 ` [RFC][PATCH 27/30] ACPI / hotplug / PCI: Get rid of unused constants in acpiphp.h Rafael J. Wysocki
2013-07-12 0:06 ` [RFC][PATCH 28/30] ACPI / hotplug / PCI: Sanitize acpiphp_get_(latch)|(adapter)_status() Rafael J. Wysocki
2013-07-12 0:07 ` [RFC][PATCH 29/30] ACPI / hotplug / PCI: Redefine enable_device() and disable_device() Rafael J. Wysocki
2013-07-12 0:07 ` [RFC][PATCH 30/30] ACPI / hotplug / PCI: Clean up bridge_mutex usage Rafael J. Wysocki
2013-07-12 13:18 ` [RFC][PATCH 0/30] ACPI / hotplug / PCI: Major rework + Thunderbolt workarounds Mika Westerberg
2013-07-12 21:04 ` Rafael J. Wysocki
2013-07-17 23:05 ` [PATCH " Rafael J. Wysocki
2013-07-17 23:15 ` [PATCH 1/30] ACPI / PCI: Make bus registration and unregistration symmetric Rafael J. Wysocki
2013-07-18 1:00 ` Yinghai Lu
2013-07-17 23:16 ` [PATCH 2/30] ACPI / hotplug / PCI: Consolidate acpiphp_enumerate_slots() Rafael J. Wysocki
2013-07-18 1:40 ` Yinghai Lu
2013-07-18 19:09 ` Rafael J. Wysocki
2013-07-17 23:17 ` [PATCH 3/30] ACPI / hotplug / PCI: Always return success after adding a function Rafael J. Wysocki
2013-07-17 23:17 ` [PATCH 4/30] ACPI / hotplug / PCI: Hotplug context objects for bridges and functions Rafael J. Wysocki
2013-07-18 2:00 ` Yinghai Lu
2013-07-18 19:04 ` Rafael J. Wysocki
2013-07-18 20:06 ` Rafael J. Wysocki
2013-07-17 23:18 ` [PATCH 5/30] ACPI / hotplug / PCI: Unified notify handler for hotplug events Rafael J. Wysocki
2013-07-18 2:07 ` Yinghai Lu
2013-07-18 18:59 ` Rafael J. Wysocki
2013-07-17 23:19 ` [PATCH 6/30] ACPI / hotplug / PCI: Rework acpiphp_handle_to_bridge() Rafael J. Wysocki
2013-07-17 23:19 ` [PATCH 7/30] ACPI / hotplug / PCI: Pass hotplug context objects to event handlers Rafael J. Wysocki
2013-07-17 23:20 ` [PATCH 8/30] ACPI / hotplug / PCI: Merge hotplug event handling functions Rafael J. Wysocki
2013-07-17 23:21 ` [PATCH 9/30] ACPI / hotplug / PCI: Drop func field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-17 23:22 ` [PATCH 10/30] ACPI / hotplug / PCI: Refactor slot allocation code in register_slot() Rafael J. Wysocki
2013-07-17 23:22 ` [PATCH 11/30] ACPI / hotplug / PCI: Register all devices under the given bridge Rafael J. Wysocki
2013-07-17 23:23 ` [PATCH 12/30] ACPI / hotplug / PCI: Drop sun field from struct acpiphp_slot Rafael J. Wysocki
2013-07-17 23:24 ` [PATCH 13/30] ACPI / hotplug / PCI: Drop flags field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-17 23:24 ` [PATCH 14/30] ACPI / hotplug / PCI: Embed function struct into struct acpiphp_context Rafael J. Wysocki
2013-07-17 23:25 ` [PATCH 15/30] ACPI / hotplug / PCI: Drop handle field from struct acpiphp_func Rafael J. Wysocki
2013-07-17 23:26 ` [PATCH 16/30] ACPI / hotplug / PCI: Drop handle field from struct acpiphp_bridge Rafael J. Wysocki
2013-07-17 23:26 ` [PATCH 17/30] ACPI / hotplug / PCI: Store parent in functions and bus in slots Rafael J. Wysocki
2013-07-17 23:27 ` [PATCH 18/30] ACPI / hotplug / PCI: Rework namespace scanning and trimming routines Rafael J. Wysocki
2013-07-17 23:27 ` [PATCH 19/30] ACPI / hotplug / PCI: Drop redundant checks from check_hotplug_bridge() Rafael J. Wysocki
2013-07-17 23:28 ` Rafael J. Wysocki [this message]
2013-07-17 23:29 ` [PATCH 21/30] ACPI / hotplug / PCI: Do not queue up event handling work items in vain Rafael J. Wysocki
2013-07-17 23:30 ` [PATCH 22/30] ACPI / hotplug / PCI: Do not exectute _PS0 and _PS3 directly Rafael J. Wysocki
2013-07-17 23:31 ` [PATCH 23/30] ACPI / hotplug / PCI: Do not check SLOT_ENABLED in enable_device() Rafael J. Wysocki
2013-07-17 23:31 ` [PATCH 24/30] ACPI / hotplug / PCI: Allow slots without new devices to be rescanned Rafael J. Wysocki
2013-07-17 23:32 ` [PATCH 25/30] ACPI / hotplug / PCI: Check for new devices on enabled slots Rafael J. Wysocki
2013-09-04 20:36 ` Alex Williamson
2013-09-04 22:54 ` Rafael J. Wysocki
2013-09-04 23:12 ` Alex Williamson
2013-09-04 23:35 ` Rafael J. Wysocki
2013-09-05 3:37 ` Alex Williamson
2013-09-05 4:06 ` Alex Williamson
2013-09-05 11:54 ` Rafael J. Wysocki
2013-09-05 13:19 ` Alex Williamson
2013-09-05 14:21 ` Alex Williamson
2013-09-05 19:44 ` Excess dmesg output from ACPIPHP on boot (was: Re: [PATCH 25/30] ACPI / hotplug / PCI: Check for new devices on enabled slots) Rafael J. Wysocki
2013-09-05 21:39 ` Rafael J. Wysocki
2013-09-05 21:45 ` Rafael J. Wysocki
2013-09-05 22:17 ` Alex Williamson
2013-09-05 22:40 ` Rafael J. Wysocki
2013-09-05 23:08 ` Alex Williamson
2013-09-05 23:36 ` Rafael J. Wysocki
2013-09-05 23:31 ` Alex Williamson
2013-09-05 23:48 ` Rafael J. Wysocki
2013-09-06 12:19 ` Bjorn Helgaas
2013-09-06 12:40 ` Rafael J. Wysocki
2013-09-06 15:34 ` Alex Williamson
2013-09-07 22:16 ` [PATCH] ACPI / hotplug / PCI: Avoid parent bus rescans on spurious device checks Rafael J. Wysocki
2013-09-09 16:32 ` Alex Williamson
2013-09-09 20:02 ` Rafael J. Wysocki
2013-09-06 13:42 ` [PATCH 0/2] Re: Excess dmesg output from ACPIPHP on boot Rafael J. Wysocki
2013-09-06 13:43 ` [PATCH 1/2] ACPI / hotplug / PCI: Avoid doing too much for spurious notifies Rafael J. Wysocki
2013-09-06 15:46 ` Yinghai Lu
2013-09-06 23:45 ` Rafael J. Wysocki
2013-09-06 13:46 ` [PATCH 2/2] ACPI / hotplug / PCI: Use _OST to notify firmware about notify status Rafael J. Wysocki
2013-09-06 15:36 ` [PATCH 0/2] Re: Excess dmesg output from ACPIPHP on boot Alex Williamson
2013-09-06 23:46 ` Rafael J. Wysocki
2013-09-05 6:17 ` [PATCH 25/30] ACPI / hotplug / PCI: Check for new devices on enabled slots Lan Tianyu
2013-09-05 11:57 ` Rafael J. Wysocki
2013-09-05 13:11 ` Lan Tianyu
2013-09-05 21:43 ` Rafael J. Wysocki
2013-07-17 23:33 ` [PATCH 26/30] ACPI / hotplug / PCI: Get rid of unused constants in acpiphp.h Rafael J. Wysocki
2013-07-17 23:34 ` [PATCH 27/30] ACPI / hotplug / PCI: Sanitize acpiphp_get_(latch)|(adapter)_status() Rafael J. Wysocki
2013-07-17 23:35 ` [PATCH 28/30] ACPI / hotplug / PCI: Redefine enable_device() and disable_device() Rafael J. Wysocki
2013-07-17 23:35 ` [PATCH 29/30] ACPI / hotplug / PCI: Clean up bridge_mutex usage Rafael J. Wysocki
2013-07-17 23:36 ` [PATCH 30/30] ACPI / hotplug / PCI: Get rid of check_sub_bridges() Rafael J. Wysocki
2013-07-23 6:49 ` [PATCH 0/30] ACPI / hotplug / PCI: Major rework + Thunderbolt workarounds Yinghai Lu
2013-07-23 21:39 ` Rafael J. Wysocki
2013-07-24 2:20 ` Yinghai Lu
2013-07-24 12:22 ` Rafael J. Wysocki
2013-07-24 12:58 ` Rafael J. Wysocki
2013-07-24 16:06 ` Bjorn Helgaas
2013-07-24 20:02 ` Rafael J. Wysocki
2013-07-25 13:25 ` Yinghai Lu
2013-07-25 19:57 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2675342.96SJAC4hmM@vostro.rjw.lan \
--to=rjw@sisk.pl \
--cc=bhelgaas@google.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=mika.westerberg@linux.intel.com \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome