From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964909AbWDMMht (ORCPT ); Thu, 13 Apr 2006 08:37:49 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964905AbWDMMht (ORCPT ); Thu, 13 Apr 2006 08:37:49 -0400 Received: from fgwmail6.fujitsu.co.jp ([192.51.44.36]:34702 "EHLO fgwmail6.fujitsu.co.jp") by vger.kernel.org with ESMTP id S964907AbWDMMhs (ORCPT ); Thu, 13 Apr 2006 08:37:48 -0400 Date: Thu, 13 Apr 2006 21:36:14 +0900 Message-ID: <87bqv51wld.wl%muneda.takahiro@jp.fujitsu.com> From: MUNEDA Takahiro To: Kristen Accardi Cc: len.brown@intel.com, greg@kroah.com, linux-acpi@vger.kernel.org, pcihpd-discuss@lists.sourceforge.net, linux-kernel@vger.kernel.org, mochel@linux.intel.com, arjan@linux.intel.com, muneda.takahiro@jp.fujitsu.com, pavel@ucw.cz, temnota@kmv.ru Subject: Re: [patch 3/3] acpiphp: prevent duplicate slot numbers when no _SUN In-Reply-To: <1144880327.11215.46.camel@whizzy> References: <20060412221027.472109000@intel.com> <1144880327.11215.46.camel@whizzy> User-Agent: Wanderlust/2.14.1 (Bad Medicine-pre) SEMI/1.14.6 (Maruoka) LIMIT/1.14.9 (Domyoji) APEL/10.6 Emacs/22.0.50 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI) X-Pollen: =?ISO-2022-JP?B?NC8xNBskQiROQEUyLDgpRWxJdCROP3kyVko0JE8kZCRkGyhC?= =?ISO-2022-JP?B?GyRCQj8kJCRHJDkbKEI=?= X-Weather: =?ISO-2022-JP?B?GyRCTEBGfCROQEUyLDgpJE8xKyRHJDkbKEI=?= MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org At Wed, 12 Apr 2006 15:18:47 -0700, Kristen Accardi wrote: > > Dock bridges generally do not implement _SUN, yet show up as ejectable slots. > If you have more than one ejectable slot that does not implement SUN, with the > current code you will get duplicate slot numbers. So, if there is no _SUN, > use the current count of the number of slots found instead. > > Signed-off-by: Kristen Carlson Accardi > > --- > drivers/pci/hotplug/acpiphp_glue.c | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > --- 2.6-git-kca2.orig/drivers/pci/hotplug/acpiphp_glue.c > +++ 2.6-git-kca2/drivers/pci/hotplug/acpiphp_glue.c > @@ -218,8 +218,13 @@ register_slot(acpi_handle handle, u32 lv > newfunc->flags |= FUNC_HAS_DCK; > > status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun); > - if (ACPI_FAILURE(status)) > - sun = -1; > + if (ACPI_FAILURE(status)) { > + /* > + * use the count of the number of slots we've found > + * for the number of the slot > + */ > + sun = bridge->nr_slots+1; > + } > > /* search for objects that share the same slot */ > for (slot = bridge->slots; slot; slot = slot->next) > > -- No, "sun = bridge->nr_slots+1" might have been defined for another device. Please consider the following case. Device (PCI0) { /* Root bridge */ Name (_HID, "PNP0A03") Device (P2PA) { /* PCI-to-PCI bridge */ Name (_ADR, ...) Device (S0F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, 0x01) Method (_EJ0, ...) { ... } } Device (S1F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, 0x02) Method (_EJ0, ...) { ... } } Device (GDCK) { /* Docking Station */ Method (_DCK, ...) { ... } Method (_EJ0, ...) { ... } } Device (P2PB) { /* PCI-to-PCI bridge */ Name (_ADR, ...) Device (S0F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, 0x03) Method (_EJ0, ...) { ... } } Device (S1F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, 0x04) Method (_EJ0, ...) { ... } } } } In this case, there are two hotplug slots under the P2PA. GDCK doesn't have SUN, so acpiphp sets SUN#3 for GDCK. But SUN#3 is for the PCI0.P2PB.S0F0. sun is not unique! But I have never seen the dsdt like above. Thanks, MUNE