public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Zhao Yakui <yakui.zhao@intel.com>,
	Li Shaohua <shaohua.li@intel.com>,
	Zhang Rui <rui.zhang@intel.com>, Andi Kleen <ak@linux.intel.com>,
	Len Brown <len.brown@intel.com>, Holger Macht <hmacht@suse.de>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 27/46] ACPI : Load device driver according to the status of acpi device
Date: Sun, 16 Nov 2008 23:15:57 -0800	[thread overview]
Message-ID: <20081117071557.GB29522@kroah.com> (raw)
In-Reply-To: <20081117071333.GA29522@kroah.com>

[-- Attachment #1: acpi-load-device-driver-according-to-the-status-of-acpi-device.patch --]
[-- Type: text/plain, Size: 5235 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Zhao Yakui <yakui.zhao@intel.com>

commit 39a0ad871000d2a016a4fa113a6e53d22aabf25d upstream.

According to ACPI spec when the status of some device is not present
but functional, the device is valid and the children of this device
should be enumerated. It means that the device should be added to
linux acpi device tree. But the device driver for this device should not
be loaded.
    The detailed info can be found in the section 6.3.7 of ACPI 3.0b spec.
    _STA may return bit 0 clear (not present) with bit 3 set (device is
functional). This case is used to indicate a valid device for which no
device driver should be loaded (for example, a bridge device.).
Children of this device may be present and valid. OS should continue
enumeration below a device whose _STA returns this bit combination

http://bugzilla.kernel.org/show_bug.cgi?id=3358

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Li Shaohua <shaohua.li@intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Cc: Holger Macht <hmacht@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/acpi/bus.c         |   16 ++++++++--------
 drivers/acpi/scan.c        |   35 +++++++++++++++++++++++++----------
 drivers/pnp/pnpacpi/core.c |    6 +++++-
 3 files changed, 38 insertions(+), 19 deletions(-)

--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -95,21 +95,21 @@ int acpi_bus_get_status(struct acpi_devi
 	}
 
 	/*
-	 * Otherwise we assume the status of our parent (unless we don't
-	 * have one, in which case status is implied).
+	 * According to ACPI spec some device can be present and functional
+	 * even if the parent is not present but functional.
+	 * In such conditions the child device should not inherit the status
+	 * from the parent.
 	 */
-	else if (device->parent)
-		device->status = device->parent->status;
 	else
 		STRUCT_TO_INT(device->status) =
 		    ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
 		    ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
 
 	if (device->status.functional && !device->status.present) {
-		printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
-		       "functional but not present; setting present\n",
-		       device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status));
-		device->status.present = 1;
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: "
+		       "functional but not present;\n",
+			device->pnp.bus_id,
+			(u32) STRUCT_TO_INT(device->status)));
 	}
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -276,6 +276,13 @@ int acpi_match_device_ids(struct acpi_de
 {
 	const struct acpi_device_id *id;
 
+	/*
+	 * If the device is not present, it is unnecessary to load device
+	 * driver for it.
+	 */
+	if (!device->status.present)
+		return -ENODEV;
+
 	if (device->flags.hardware_id) {
 		for (id = ids; id->id[0]; id++) {
 			if (!strcmp((char*)id->id, device->pnp.hardware_id))
@@ -1221,15 +1228,18 @@ acpi_add_single_object(struct acpi_devic
 			result = -ENODEV;
 			goto end;
 		}
-		if (!device->status.present) {
-			/* Bay and dock should be handled even if absent */
-			if (!ACPI_SUCCESS(
-			     acpi_is_child_device(device, acpi_bay_match)) &&
-			    !ACPI_SUCCESS(
-			     acpi_is_child_device(device, acpi_dock_match))) {
-					result = -ENODEV;
-					goto end;
-			}
+		/*
+		 * When the device is neither present nor functional, the
+		 * device should not be added to Linux ACPI device tree.
+		 * When the status of the device is not present but functinal,
+		 * it should be added to Linux ACPI tree. For example : bay
+		 * device , dock device.
+		 * In such conditions it is unncessary to check whether it is
+		 * bay device or dock device.
+		 */
+		if (!device->status.present && !device->status.functional) {
+			result = -ENODEV;
+			goto end;
 		}
 		break;
 	default:
@@ -1402,7 +1412,12 @@ static int acpi_bus_scan(struct acpi_dev
 		 * TBD: Need notifications and other detection mechanisms
 		 *      in place before we can fully implement this.
 		 */
-		if (child->status.present) {
+		 /*
+		 * When the device is not present but functional, it is also
+		 * necessary to scan the children of this device.
+		 */
+		if (child->status.present || (!child->status.present &&
+					child->status.functional)) {
 			status = acpi_get_next_object(ACPI_TYPE_ANY, chandle,
 						      NULL, NULL);
 			if (ACPI_SUCCESS(status)) {
--- a/drivers/pnp/pnpacpi/core.c
+++ b/drivers/pnp/pnpacpi/core.c
@@ -148,9 +148,13 @@ static int __init pnpacpi_add_device(str
 	acpi_status status;
 	struct pnp_dev *dev;
 
+	/*
+	 * If a PnPacpi device is not present , the device
+	 * driver should not be loaded.
+	 */
 	status = acpi_get_handle(device->handle, "_CRS", &temp);
 	if (ACPI_FAILURE(status) || !ispnpidacpi(acpi_device_hid(device)) ||
-	    is_exclusive_device(device))
+	    is_exclusive_device(device) || (!device->status.present))
 		return 0;
 
 	dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device));

-- 

  parent reply	other threads:[~2008-11-17  7:30 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081117070621.430169021@blue.kroah.org>
2008-11-17  7:13 ` [patch 00/46] 2.6.27.7-stable review Greg KH
2008-11-17  7:14   ` [patch 01/46] touch_mnt_namespace when the mount flags change Greg KH
2008-11-17  7:14   ` [patch 02/46] iwlagn: avoid sleep in softirq context Greg KH
2008-11-17  7:14   ` [patch 03/46] ath5k: fix suspend-related oops on rmmod Greg KH
2008-11-17  7:14   ` [patch 04/46] ath5k: Fix reset sequence for AR5212 in general and RF5111 in particular Greg KH
2008-11-17  7:14   ` [patch 05/46] bnx2x: Removing the PMF indication when unloading Greg KH
2008-11-17  7:14   ` [patch 06/46] bnx2x: PCI configuration bug on big-endian Greg KH
2008-11-17  7:14   ` [patch 07/46] bnx2x: Calling netif_carrier_off at the end of the probe Greg KH
2008-11-17  7:14   ` [patch 08/46] ARM: 5329/1: Feroceon: fix feroceon_l2_inv_range Greg KH
2008-11-17  7:14   ` [patch 09/46] Fix platform drivers that crash on suspend/resume Greg KH
2008-11-17  7:14   ` [patch 10/46] hostap: pad the skb->cb usage in lieu of a proper fix Greg KH
2008-11-17  7:14   ` [patch 11/46] ACPI: avoid empty file name in sysfs Greg KH
2008-11-17  7:14   ` [patch 12/46] ACPI: EC: make kernel messages more useful when GPE storm is detected Greg KH
2008-11-17  7:15   ` [patch 13/46] hugetlb: make unmap_ref_private multi-size-aware Greg KH
2008-11-17  7:15   ` [patch 14/46] rtl8187: Add Abocom USB ID Greg KH
2008-11-17  7:15   ` [patch 15/46] rtl8187 : support for Sitecom WL-168 0001 v4 Greg KH
2008-11-17  7:15   ` [patch 16/46] kbuild: Fixup deb-pkg target to generate separate firmware deb Greg KH
2008-11-17  7:15   ` [patch 17/46] block: fix nr_phys_segments miscalculation bug Greg KH
2008-11-17  7:15   ` [patch 18/46] powerpc/mpic: Fix regression caused by change of default IRQ affinity Greg KH
2008-11-17  7:15   ` [patch 19/46] Input: ALPS - add signature for DualPoint found in Dell Latitude E6500 Greg KH
2008-11-17  7:15   ` [patch 20/46] memory hotplug: fix page_zone() calculation in test_pages_isolated() Greg KH
2008-11-17  7:15   ` [patch 21/46] r8169: select MII in Kconfig Greg KH
2008-11-17  7:15   ` [patch 22/46] sony-laptop: ignore missing _DIS method on pic device Greg KH
2008-11-17  7:15   ` [patch 23/46] net: fix /proc/net/snmp as memory corruptor Greg KH
2008-11-17  7:15   ` [patch 24/46] Fix broken ownership of /proc/sys/ files Greg KH
2008-11-17 20:09     ` Theodore Tso
2008-11-17 21:35       ` [stable] " Greg KH
2008-11-17 22:25         ` Rafael J. Wysocki
2008-11-17 23:45           ` Peter Palfrader
2008-11-17  7:15   ` [patch 25/46] V4L/DVB (9624): CVE-2008-5033: fix OOPS on tvaudio when controlling bass/treble Greg KH
2008-11-17 13:31     ` Mauro Carvalho Chehab
2008-11-17  7:15   ` [patch 26/46] S390: cpu topology: fix locking Greg KH
2008-11-17  7:15   ` Greg KH [this message]
2008-11-17  7:16   ` [patch 28/46] m68k: Fix off-by-one in m68k_setup_user_interrupt() Greg KH
2008-11-17  7:16   ` [patch 29/46] SCSI: qla2xxx: Return a FAILED status when abort mailbox-command fails Greg KH
2008-11-17  7:16   ` [patch 30/46] SCSI: qla2xxx: Do not honour max_vports from firmware for 2G ISPs and below Greg KH
2008-11-17  7:16   ` [patch 31/46] SCSI: qla2xxx: Correct Atmel flash-part handling Greg KH
2008-11-17  7:16   ` [patch 32/46] SCSI: dpt_i2o: fix transferred data length for scsi_set_resid() Greg KH
2008-11-17  7:16   ` [patch 33/46] dm raid1: flush workqueue before destruction Greg KH
2008-11-17  7:16   ` [patch 34/46] USB: remove optional bus bindings in isp1760, fixing runtime warning Greg KH
2008-11-17  7:16   ` [patch 35/46] USB: gadget: cdc-acm deadlock fix Greg KH
2008-11-17  7:16   ` [patch 36/46] USB: unusual_devs entry for Argosy USB mass-storage interface Greg KH
2008-11-17  7:16   ` [patch 37/46] USB: Fix PS3 USB shutdown problems Greg KH
2008-11-17  7:16   ` [patch 38/46] USB: cdc-acm.c: fix recursive lock in acm_start_wb error path Greg KH
2008-11-17  7:16   ` [patch 39/46] USB: EHCI: fix divide-by-zero bug Greg KH
2008-11-17  7:16   ` [patch 40/46] USB: EHCI: fix handling of dead controllers Greg KH
2008-11-17  7:17   ` [patch 41/46] USB: dont register endpoints for interfaces that are going away Greg KH
2008-11-17  7:17   ` [patch 42/46] ACPI: EC: revert msleep patch Greg KH
2008-11-17  7:17   ` [patch 43/46] ACPI: EC: wait for last write gpe Greg KH
2008-11-17  7:17   ` [patch 44/46] ACPI: EC: restart failed command Greg KH
2008-11-17  7:17   ` [patch 45/46] ACPI: EC: lower interrupt storm treshold Greg KH
2008-11-17  7:17   ` [patch 46/46] ACPI: EC: Dont do transaction from GPE handler in poll mode Greg KH

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=20081117071557.GB29522@kroah.com \
    --to=gregkh@suse.de \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=hmacht@suse.de \
    --cc=jake@lwn.net \
    --cc=jmforbes@linuxtx.org \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=rui.zhang@intel.com \
    --cc=shaohua.li@intel.com \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=yakui.zhao@intel.com \
    --cc=zwane@arm.linux.org.uk \
    /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