From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Ott Subject: Re: [PATCH 7/9] PCI: hotplug: Drop hotplug_slot_info Date: Mon, 3 Sep 2018 19:52:51 +0200 (CEST) Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: Lukas Wunner Cc: Scott Murray , linux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Greg Kroah-Hartman , linux-pci@vger.kernel.org, Andy Shevchenko , acpi4asus-user@lists.sourceforge.net, "Rafael J. Wysocki" , Gavin Shan , platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, Bjorn Helgaas , Corentin Chary , Paul Mackerras , Sinan Kaya , Mika Westerberg , Darren Hart , Gerald Schaefer , Len Brown List-Id: linux-acpi@vger.kernel.org On Sun, 19 Aug 2018, Lukas Wunner wrote: > Ever since the PCI hotplug core was introduced in 2002, drivers had to > allocate and register a struct hotplug_slot_info for every slot: > https://git.kernel.org/tglx/history/c/a8a2069f432c > > Apparently the idea was that drivers furnish the hotplug core with an > up-to-date card presence status, power status, latch status and > attention indicator status as well as notify the hotplug core of changes > thereof. However only 4 out of 12 hotplug drivers bother to notify the > hotplug core with pci_hp_change_slot_info() and the hotplug core never > made any use of the information: There is just a single macro in > pci_hotplug_core.c, GET_STATUS(), which uses the hotplug_slot_info if > the driver lacks the corresponding callback in hotplug_slot_ops. The > macro is called when the user reads the attribute via sysfs. > > Now, if the callback isn't defined, the attribute isn't exposed in sysfs > in the first place (see e.g. has_power_file()). There are only two > situations when the hotplug_slot_info would actually be accessed: > > * If the driver defines ->enable_slot or ->disable_slot but not > ->get_power_status. > > * If the driver defines ->set_attention_status but not > ->get_attention_status. > > There is no driver doing the former and just a single driver doing the > latter, namely pnv_php.c. Amend it with a ->get_attention_status > callback. With that, the hotplug_slot_info becomes completely unused by > the PCI hotplug core. But a few drivers use it internally as a cache: > > cpcihp uses it to cache the latch_status and adapter_status. > cpqhp uses it to cache the adapter_status. > pnv_php and rpaphp use it to cache the attention_status. > shpchp uses it to cache all four values. > > Amend these drivers to cache the information in their private slot > struct. shpchp's slot struct already contains members to cache the > power_status and adapter_status, so additional members are only needed > for the other two values. In the case of cpqphp, the cached value is > only accessed in a single place, so instead of caching it, read the > current value from the hardware. > > Caution: acpiphp, cpci, cpqhp, shpchp, asus-wmi and eeepc-laptop > populate the hotplug_slot_info with initial values on probe. That code > is herewith removed. There is a theoretical chance that the code has > side effects without which the driver fails to function, e.g. if the > ACPI method to read the adapter status needs to be executed at least > once on probe. That seems unlikely to me, still maintainers should > review the changes carefully for this possibility. > > Signed-off-by: Lukas Wunner > Cc: Rafael J. Wysocki > Cc: Len Brown > Cc: Scott Murray > Cc: Benjamin Herrenschmidt > Cc: Paul Mackerras > Cc: Michael Ellerman > Cc: Gavin Shan > Cc: Sebastian Ott > Cc: Gerald Schaefer > Cc: Corentin Chary > Cc: Darren Hart > Cc: Andy Shevchenko for s390_pci_hpc.c: Acked-by: Sebastian Ott