diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-24 11:12:05 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-24 11:12:05 -0800 |
commit | 7313bb31d2bebdbc92a4164bbc92c9b34d39d9ab (patch) | |
tree | b8984665f738eae25c573f295ed1175b61ccdc85 /pci | |
parent | 095f2a2fd796279dd6bee34dc148ebb93fe94d8a (diff) | |
download | patches-7313bb31d2bebdbc92a4164bbc92c9b34d39d9ab.tar.gz |
removed pci patches that went into 2.6.16-git8 (and refresh devfs)
Diffstat (limited to 'pci')
49 files changed, 0 insertions, 11831 deletions
diff --git a/pci/acpi-export-acpi_bus_trim.patch b/pci/acpi-export-acpi_bus_trim.patch deleted file mode 100644 index babff977b1732..0000000000000 --- a/pci/acpi-export-acpi_bus_trim.patch +++ /dev/null @@ -1,58 +0,0 @@ -From kristen.c.accardi@intel.com Thu Feb 23 17:58:20 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: greg@kroah.com -Subject: [patch 2/5] acpi: export acpi_bus_trim -Date: Thu, 23 Feb 2006 17:56:01 -0800 -Message-Id: <1140746161.11750.76.camel@whizzy> - -From: Kristen Accardi <kristen.c.accardi@intel.com> - -Export the acpi_bus_trim function so that the pci hotplug driver can -use it. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/acpi/scan.c | 5 +++-- - include/acpi/acpi_bus.h | 1 + - 2 files changed, 4 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/acpi/scan.c -+++ gregkh-2.6/drivers/acpi/scan.c -@@ -23,7 +23,6 @@ static LIST_HEAD(acpi_device_list); - DEFINE_SPINLOCK(acpi_device_lock); - LIST_HEAD(acpi_wakeup_device_list); - --static int acpi_bus_trim(struct acpi_device *start, int rmdevice); - - static void acpi_device_release(struct kobject *kobj) - { -@@ -1284,7 +1283,7 @@ int acpi_bus_start(struct acpi_device *d - - EXPORT_SYMBOL(acpi_bus_start); - --static int acpi_bus_trim(struct acpi_device *start, int rmdevice) -+int acpi_bus_trim(struct acpi_device *start, int rmdevice) - { - acpi_status status; - struct acpi_device *parent, *child; -@@ -1337,6 +1336,8 @@ static int acpi_bus_trim(struct acpi_dev - } - return err; - } -+EXPORT_SYMBOL_GPL(acpi_bus_trim); -+ - - static int acpi_bus_scan_fixed(struct acpi_device *root) - { ---- gregkh-2.6.orig/include/acpi/acpi_bus.h -+++ gregkh-2.6/include/acpi/acpi_bus.h -@@ -330,6 +330,7 @@ int acpi_bus_register_driver(struct acpi - int acpi_bus_unregister_driver(struct acpi_driver *driver); - int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent, - acpi_handle handle, int type); -+int acpi_bus_trim(struct acpi_device *start, int rmdevice); - int acpi_bus_start(struct acpi_device *device); - - int acpi_match_ids(struct acpi_device *device, char *ids); diff --git a/pci/acpi-remove-dock-event-handling-from-ibm_acpi.patch b/pci/acpi-remove-dock-event-handling-from-ibm_acpi.patch deleted file mode 100644 index 1015de1e73052..0000000000000 --- a/pci/acpi-remove-dock-event-handling-from-ibm_acpi.patch +++ /dev/null @@ -1,114 +0,0 @@ -From kristen.c.accardi@intel.com Thu Feb 23 17:59:27 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: [patch 4/5] acpi: remove dock event handling from ibm_acpi -To: greg@kroah.com -Date: Thu, 23 Feb 2006 17:56:06 -0800 -Message-Id: <1140746166.11750.78.camel@whizzy> - -From: Kristen Accardi <kristen.c.accardi@intel.com> - -Remove dock station support from ibm_acpi by default. This support has -been put into acpiphp instead. Allow ibm_acpi to continue to provide -docking station support via config option for laptops/docking stations -that are not supported by acpiphp. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/acpi/Kconfig | 12 ++++++++++++ - drivers/acpi/ibm_acpi.c | 13 ++++++++++--- - 2 files changed, 22 insertions(+), 3 deletions(-) - ---- gregkh-2.6.orig/drivers/acpi/Kconfig -+++ gregkh-2.6/drivers/acpi/Kconfig -@@ -205,6 +205,18 @@ config ACPI_IBM - - If you have an IBM ThinkPad laptop, say Y or M here. - -+config ACPI_IBM_DOCK -+ bool "Legacy Docking Station Support" -+ depends on ACPI_IBM -+ default n -+ ---help--- -+ Allows the ibm_acpi driver to handle docking station events. -+ This support is obsoleted by CONFIG_HOTPLUG_PCI_ACPI. It will -+ allow locking and removing the laptop from the docking station, -+ but will not properly connect PCI devices. -+ -+ If you are not sure, say N here. -+ - config ACPI_TOSHIBA - tristate "Toshiba Laptop Extras" - depends on X86 ---- gregkh-2.6.orig/drivers/acpi/ibm_acpi.c -+++ gregkh-2.6/drivers/acpi/ibm_acpi.c -@@ -160,13 +160,13 @@ IBM_HANDLE(cmos, root, "\\UCMS", /* R50, - "\\CMOS", /* A3x, G4x, R32, T23, T30, X22-24, X30 */ - "\\CMS", /* R40, R40e */ - ); /* all others */ -- -+#ifdef CONFIG_ACPI_IBM_DOCK - IBM_HANDLE(dock, root, "\\_SB.GDCK", /* X30, X31, X40 */ - "\\_SB.PCI0.DOCK", /* 600e/x,770e,770x,A2xm/p,T20-22,X20-21 */ - "\\_SB.PCI0.PCI1.DOCK", /* all others */ - "\\_SB.PCI.ISA.SLCE", /* 570 */ - ); /* A21e,G4x,R30,R31,R32,R40,R40e,R50e */ -- -+#endif - IBM_HANDLE(bay, root, "\\_SB.PCI.IDE.SECN.MAST", /* 570 */ - "\\_SB.PCI0.IDE0.IDES.IDSM", /* 600e/x, 770e, 770x */ - "\\_SB.PCI0.IDE0.SCND.MSTR", /* all others */ -@@ -844,7 +844,7 @@ static int _sta(acpi_handle handle) - - return status; - } -- -+#ifdef CONFIG_ACPI_IBM_DOCK - #define dock_docked() (_sta(dock_handle) & 1) - - static int dock_read(char *p) -@@ -907,6 +907,7 @@ static void dock_notify(struct ibm_struc - acpi_bus_generate_event(ibm->device, event, 0); /* unknown */ - } - } -+#endif - - static int bay_status_supported; - static int bay_status2_supported; -@@ -1574,6 +1575,7 @@ static struct ibm_struct ibms[] = { - .read = light_read, - .write = light_write, - }, -+#ifdef CONFIG_ACPI_IBM_DOCK - { - .name = "dock", - .read = dock_read, -@@ -1589,6 +1591,7 @@ static struct ibm_struct ibms[] = { - .handle = &pci_handle, - .type = ACPI_SYSTEM_NOTIFY, - }, -+#endif - { - .name = "bay", - .init = bay_init, -@@ -1880,7 +1883,9 @@ IBM_PARAM(hotkey); - IBM_PARAM(bluetooth); - IBM_PARAM(video); - IBM_PARAM(light); -+#ifdef CONFIG_ACPI_IBM_DOCK - IBM_PARAM(dock); -+#endif - IBM_PARAM(bay); - IBM_PARAM(cmos); - IBM_PARAM(led); -@@ -1927,7 +1932,9 @@ static int __init acpi_ibm_init(void) - IBM_HANDLE_INIT(hkey); - IBM_HANDLE_INIT(lght); - IBM_HANDLE_INIT(cmos); -+#ifdef CONFIG_ACPI_IBM_DOCK - IBM_HANDLE_INIT(dock); -+#endif - IBM_HANDLE_INIT(pci); - IBM_HANDLE_INIT(bay); - if (bay_handle) diff --git a/pci/acpiphp-add-dock-event-handling.patch b/pci/acpiphp-add-dock-event-handling.patch deleted file mode 100644 index 1cbbeccd6ead0..0000000000000 --- a/pci/acpiphp-add-dock-event-handling.patch +++ /dev/null @@ -1,749 +0,0 @@ -From kristen.c.accardi@intel.com Thu Feb 23 17:58:57 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: [patch 3/5] acpiphp: add dock event handling -To: greg@kroah.com -Date: Thu, 23 Feb 2006 17:56:03 -0800 -Message-Id: <1140746163.11750.77.camel@whizzy> - -From: Kristen Accardi <kristen.c.accardi@intel.com> - -These patches add generic dock event handling to acpiphp. If there are -pci devices that need to be inserted/removed after the dock event, the -event notification will be handed down to the normal pci hotplug event -handler in acpiphp so that new bridges/devices can be enumerated. - -Because some dock stations do not have pci bridges or pci devices that -need to be inserted after a dock, acpiphp will remain loaded to handle -dock events even if no hotpluggable pci slots are discovered. - -You probably need to have the pci=assign-busses kernel parameter enabled -to use these patches, and you may not allow ibm_acpi to handle docking -notifications and use this patch. - -This patch incorporates feedback provided by many. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/Makefile | 3 - drivers/pci/hotplug/acpiphp.h | 36 +++ - drivers/pci/hotplug/acpiphp_core.c | 7 - drivers/pci/hotplug/acpiphp_dock.c | 438 +++++++++++++++++++++++++++++++++++++ - drivers/pci/hotplug/acpiphp_glue.c | 85 +++++-- - 5 files changed, 545 insertions(+), 24 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/Makefile -+++ gregkh-2.6/drivers/pci/hotplug/Makefile -@@ -37,7 +37,8 @@ ibmphp-objs := ibmphp_core.o \ - ibmphp_hpc.o - - acpiphp-objs := acpiphp_core.o \ -- acpiphp_glue.o -+ acpiphp_glue.o \ -+ acpiphp_dock.o - - rpaphp-objs := rpaphp_core.o \ - rpaphp_pci.o \ ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp.h -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp.h -@@ -161,6 +161,25 @@ struct acpiphp_attention_info - struct module *owner; - }; - -+ -+struct dependent_device { -+ struct list_head device_list; -+ struct list_head pci_list; -+ acpi_handle handle; -+ struct acpiphp_func *func; -+}; -+ -+ -+struct acpiphp_dock_station { -+ acpi_handle handle; -+ u32 last_dock_time; -+ u32 flags; -+ struct acpiphp_func *dock_bridge; -+ struct list_head dependent_devices; -+ struct list_head pci_dependent_devices; -+}; -+ -+ - /* PCI bus bridge HID */ - #define ACPI_PCI_HOST_HID "PNP0A03" - -@@ -198,6 +217,12 @@ struct acpiphp_attention_info - #define FUNC_HAS_PS1 (0x00000020) - #define FUNC_HAS_PS2 (0x00000040) - #define FUNC_HAS_PS3 (0x00000080) -+#define FUNC_HAS_DCK (0x00000100) -+#define FUNC_IS_DD (0x00000200) -+ -+/* dock station flags */ -+#define DOCK_DOCKING (0x00000001) -+#define DOCK_HAS_BRIDGE (0x00000002) - - /* function prototypes */ - -@@ -211,6 +236,7 @@ extern void acpiphp_glue_exit (void); - extern int acpiphp_get_num_slots (void); - extern struct acpiphp_slot *get_slot_from_id (int id); - typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); -+void handle_hotplug_event_func(acpi_handle, u32, void*); - - extern int acpiphp_enable_slot (struct acpiphp_slot *slot); - extern int acpiphp_disable_slot (struct acpiphp_slot *slot); -@@ -220,6 +246,16 @@ extern u8 acpiphp_get_latch_status (stru - extern u8 acpiphp_get_adapter_status (struct acpiphp_slot *slot); - extern u32 acpiphp_get_address (struct acpiphp_slot *slot); - -+/* acpiphp_dock.c */ -+extern int find_dock_station(void); -+extern void remove_dock_station(void); -+extern void add_dependent_device(struct dependent_device *new_dd); -+extern void add_pci_dependent_device(struct dependent_device *new_dd); -+extern struct dependent_device *get_dependent_device(acpi_handle handle); -+extern int is_dependent_device(acpi_handle handle); -+extern int detect_dependent_devices(acpi_handle *bridge_handle); -+extern struct dependent_device *alloc_dependent_device(acpi_handle handle); -+ - /* variables */ - extern int acpiphp_debug; - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_core.c -@@ -429,14 +429,17 @@ static void __exit cleanup_slots (void) - static int __init acpiphp_init(void) - { - int retval; -+ int docking_station; - - info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); - - acpiphp_debug = debug; - -+ docking_station = find_dock_station(); -+ - /* read all the ACPI info from the system */ - retval = init_acpi(); -- if (retval) -+ if (retval && !(docking_station)) - return retval; - - return init_slots(); -@@ -448,6 +451,8 @@ static void __exit acpiphp_exit(void) - cleanup_slots(); - /* deallocate internal data structures etc. */ - acpiphp_glue_exit(); -+ -+ remove_dock_station(); - } - - module_init(acpiphp_init); ---- /dev/null -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_dock.c -@@ -0,0 +1,438 @@ -+/* -+ * ACPI PCI HotPlug dock functions to ACPI CA subsystem -+ * -+ * Copyright (C) 2006 Kristen Carlson Accardi (kristen.c.accardi@intel.com) -+ * Copyright (C) 2006 Intel Corporation -+ * -+ * All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or (at -+ * your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT. See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ * Send feedback to <kristen.c.accardi@intel.com> -+ * -+ */ -+#include <linux/init.h> -+#include <linux/module.h> -+ -+#include <linux/kernel.h> -+#include <linux/pci.h> -+#include <linux/smp_lock.h> -+#include <linux/mutex.h> -+ -+#include "../pci.h" -+#include "pci_hotplug.h" -+#include "acpiphp.h" -+ -+static struct acpiphp_dock_station *ds; -+#define MY_NAME "acpiphp_dock" -+ -+ -+int is_dependent_device(acpi_handle handle) -+{ -+ return (get_dependent_device(handle) ? 1 : 0); -+} -+ -+ -+static acpi_status -+find_dependent_device(acpi_handle handle, u32 lvl, void *context, void **rv) -+{ -+ int *count = (int *)context; -+ -+ if (is_dependent_device(handle)) { -+ (*count)++; -+ return AE_CTRL_TERMINATE; -+ } else { -+ return AE_OK; -+ } -+} -+ -+ -+ -+ -+void add_dependent_device(struct dependent_device *new_dd) -+{ -+ list_add_tail(&new_dd->device_list, &ds->dependent_devices); -+} -+ -+ -+void add_pci_dependent_device(struct dependent_device *new_dd) -+{ -+ list_add_tail(&new_dd->pci_list, &ds->pci_dependent_devices); -+} -+ -+ -+ -+struct dependent_device * get_dependent_device(acpi_handle handle) -+{ -+ struct dependent_device *dd; -+ -+ if (!ds) -+ return NULL; -+ -+ list_for_each_entry(dd, &ds->dependent_devices, device_list) { -+ if (handle == dd->handle) -+ return dd; -+ } -+ return NULL; -+} -+ -+ -+ -+struct dependent_device *alloc_dependent_device(acpi_handle handle) -+{ -+ struct dependent_device *dd; -+ -+ dd = kzalloc(sizeof(*dd), GFP_KERNEL); -+ if (dd) { -+ INIT_LIST_HEAD(&dd->pci_list); -+ INIT_LIST_HEAD(&dd->device_list); -+ dd->handle = handle; -+ } -+ return dd; -+} -+ -+ -+ -+static int is_dock(acpi_handle handle) -+{ -+ acpi_status status; -+ acpi_handle tmp; -+ -+ status = acpi_get_handle(handle, "_DCK", &tmp); -+ if (ACPI_FAILURE(status)) { -+ return 0; -+ } -+ return 1; -+} -+ -+ -+ -+static int dock_present(void) -+{ -+ unsigned long sta; -+ acpi_status status; -+ -+ if (ds) { -+ status = acpi_evaluate_integer(ds->handle, "_STA", NULL, &sta); -+ if (ACPI_SUCCESS(status) && sta) -+ return 1; -+ } -+ return 0; -+} -+ -+ -+ -+static void eject_dock(void) -+{ -+ struct acpi_object_list arg_list; -+ union acpi_object arg; -+ -+ arg_list.count = 1; -+ arg_list.pointer = &arg; -+ arg.type = ACPI_TYPE_INTEGER; -+ arg.integer.value = 1; -+ -+ if (ACPI_FAILURE(acpi_evaluate_object(ds->handle, "_EJ0", -+ &arg_list, NULL)) || dock_present()) -+ warn("%s: failed to eject dock!\n", __FUNCTION__); -+ -+ return; -+} -+ -+ -+ -+ -+static acpi_status handle_dock(int dock) -+{ -+ acpi_status status; -+ struct acpi_object_list arg_list; -+ union acpi_object arg; -+ struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; -+ -+ dbg("%s: %s\n", __FUNCTION__, dock ? "docking" : "undocking"); -+ -+ /* _DCK method has one argument */ -+ arg_list.count = 1; -+ arg_list.pointer = &arg; -+ arg.type = ACPI_TYPE_INTEGER; -+ arg.integer.value = dock; -+ status = acpi_evaluate_object(ds->handle, "_DCK", -+ &arg_list, &buffer); -+ if (ACPI_FAILURE(status)) -+ err("%s: failed to execute _DCK\n", __FUNCTION__); -+ acpi_os_free(buffer.pointer); -+ -+ return status; -+} -+ -+ -+ -+static inline void dock(void) -+{ -+ handle_dock(1); -+} -+ -+ -+ -+static inline void undock(void) -+{ -+ handle_dock(0); -+} -+ -+ -+ -+/* -+ * the _DCK method can do funny things... and sometimes not -+ * hah-hah funny. -+ * -+ * TBD - figure out a way to only call fixups for -+ * systems that require them. -+ */ -+static void post_dock_fixups(void) -+{ -+ struct pci_bus *bus; -+ u32 buses; -+ struct dependent_device *dd; -+ -+ list_for_each_entry(dd, &ds->pci_dependent_devices, pci_list) { -+ bus = dd->func->slot->bridge->pci_bus; -+ -+ /* fixup bad _DCK function that rewrites -+ * secondary bridge on slot -+ */ -+ pci_read_config_dword(bus->self, -+ PCI_PRIMARY_BUS, -+ &buses); -+ -+ if (((buses >> 8) & 0xff) != bus->secondary) { -+ buses = (buses & 0xff000000) -+ | ((unsigned int)(bus->primary) << 0) -+ | ((unsigned int)(bus->secondary) << 8) -+ | ((unsigned int)(bus->subordinate) << 16); -+ pci_write_config_dword(bus->self, -+ PCI_PRIMARY_BUS, -+ buses); -+ } -+ } -+} -+ -+ -+ -+static void hotplug_pci(u32 type) -+{ -+ struct dependent_device *dd; -+ -+ list_for_each_entry(dd, &ds->pci_dependent_devices, pci_list) -+ handle_hotplug_event_func(dd->handle, type, dd->func); -+} -+ -+ -+ -+static inline void begin_dock(void) -+{ -+ ds->flags |= DOCK_DOCKING; -+} -+ -+ -+static inline void complete_dock(void) -+{ -+ ds->flags &= ~(DOCK_DOCKING); -+ ds->last_dock_time = jiffies; -+} -+ -+ -+static int dock_in_progress(void) -+{ -+ if (ds->flags & DOCK_DOCKING || -+ ds->last_dock_time == jiffies) { -+ dbg("dock in progress\n"); -+ return 1; -+ } -+ return 0; -+} -+ -+ -+ -+static void -+handle_hotplug_event_dock(acpi_handle handle, u32 type, void *context) -+{ -+ dbg("%s: enter\n", __FUNCTION__); -+ -+ switch (type) { -+ case ACPI_NOTIFY_BUS_CHECK: -+ dbg("BUS Check\n"); -+ if (!dock_in_progress() && dock_present()) { -+ begin_dock(); -+ dock(); -+ if (!dock_present()) { -+ err("Unable to dock!\n"); -+ break; -+ } -+ post_dock_fixups(); -+ hotplug_pci(type); -+ complete_dock(); -+ } -+ break; -+ case ACPI_NOTIFY_EJECT_REQUEST: -+ dbg("EJECT request\n"); -+ if (!dock_in_progress() && dock_present()) { -+ hotplug_pci(type); -+ undock(); -+ eject_dock(); -+ if (dock_present()) -+ err("Unable to undock!\n"); -+ } -+ break; -+ } -+} -+ -+ -+ -+ -+static acpi_status -+find_dock_ejd(acpi_handle handle, u32 lvl, void *context, void **rv) -+{ -+ acpi_status status; -+ acpi_handle tmp; -+ acpi_handle dck_handle = (acpi_handle) context; -+ char objname[64]; -+ struct acpi_buffer buffer = { .length = sizeof(objname), -+ .pointer = objname }; -+ struct acpi_buffer ejd_buffer = {ACPI_ALLOCATE_BUFFER, NULL}; -+ union acpi_object *ejd_obj; -+ -+ status = acpi_get_handle(handle, "_EJD", &tmp); -+ if (ACPI_FAILURE(status)) -+ return AE_OK; -+ -+ /* make sure we are dependent on the dock device, -+ * by executing the _EJD method, then getting a handle -+ * to the device referenced by that name. If that -+ * device handle is the same handle as the dock station -+ * handle, then we are a device dependent on the dock station -+ */ -+ acpi_get_name(dck_handle, ACPI_FULL_PATHNAME, &buffer); -+ status = acpi_evaluate_object(handle, "_EJD", NULL, &ejd_buffer); -+ if (ACPI_FAILURE(status)) { -+ err("Unable to execute _EJD!\n"); -+ goto find_ejd_out; -+ } -+ ejd_obj = ejd_buffer.pointer; -+ status = acpi_get_handle(NULL, ejd_obj->string.pointer, &tmp); -+ if (ACPI_FAILURE(status)) -+ goto find_ejd_out; -+ -+ if (tmp == dck_handle) { -+ struct dependent_device *dd; -+ dbg("%s: found device dependent on dock\n", __FUNCTION__); -+ dd = alloc_dependent_device(handle); -+ if (!dd) { -+ err("Can't allocate memory for dependent device!\n"); -+ goto find_ejd_out; -+ } -+ add_dependent_device(dd); -+ } -+ -+find_ejd_out: -+ acpi_os_free(ejd_buffer.pointer); -+ return AE_OK; -+} -+ -+ -+ -+int detect_dependent_devices(acpi_handle *bridge_handle) -+{ -+ acpi_status status; -+ int count; -+ -+ count = 0; -+ -+ status = acpi_walk_namespace(ACPI_TYPE_DEVICE, bridge_handle, -+ (u32)1, find_dependent_device, -+ (void *)&count, NULL); -+ -+ return count; -+} -+ -+ -+ -+ -+ -+static acpi_status -+find_dock(acpi_handle handle, u32 lvl, void *context, void **rv) -+{ -+ int *count = (int *)context; -+ -+ if (is_dock(handle)) { -+ dbg("%s: found dock\n", __FUNCTION__); -+ ds = kzalloc(sizeof(*ds), GFP_KERNEL); -+ ds->handle = handle; -+ INIT_LIST_HEAD(&ds->dependent_devices); -+ INIT_LIST_HEAD(&ds->pci_dependent_devices); -+ -+ /* look for devices dependent on dock station */ -+ acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, -+ ACPI_UINT32_MAX, find_dock_ejd, handle, NULL); -+ -+ acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, -+ handle_hotplug_event_dock, ds); -+ (*count)++; -+ } -+ -+ return AE_OK; -+} -+ -+ -+ -+ -+int find_dock_station(void) -+{ -+ int num = 0; -+ -+ ds = NULL; -+ -+ /* start from the root object, because some laptops define -+ * _DCK methods outside the scope of PCI (IBM x-series laptop) -+ */ -+ acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, -+ ACPI_UINT32_MAX, find_dock, &num, NULL); -+ -+ return num; -+} -+ -+ -+ -+void remove_dock_station(void) -+{ -+ struct dependent_device *dd, *tmp; -+ if (ds) { -+ if (ACPI_FAILURE(acpi_remove_notify_handler(ds->handle, -+ ACPI_SYSTEM_NOTIFY, handle_hotplug_event_dock))) -+ err("failed to remove dock notify handler\n"); -+ -+ /* free all dependent devices */ -+ list_for_each_entry_safe(dd, tmp, &ds->dependent_devices, -+ device_list) -+ kfree(dd); -+ -+ /* no need to touch the pci_dependent_device list, -+ * cause all memory was freed above -+ */ -+ kfree(ds); -+ } -+} -+ -+ ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -57,7 +57,6 @@ static LIST_HEAD(bridge_list); - #define MY_NAME "acpiphp_glue" - - static void handle_hotplug_event_bridge (acpi_handle, u32, void *); --static void handle_hotplug_event_func (acpi_handle, u32, void *); - static void acpiphp_sanitize_bus(struct pci_bus *bus); - static void acpiphp_set_hpp_values(acpi_handle handle, struct pci_bus *bus); - -@@ -125,6 +124,7 @@ register_slot(acpi_handle handle, u32 lv - struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context; - struct acpiphp_slot *slot; - struct acpiphp_func *newfunc; -+ struct dependent_device *dd; - acpi_handle tmp; - acpi_status status = AE_OK; - unsigned long adr, sun; -@@ -138,7 +138,7 @@ register_slot(acpi_handle handle, u32 lv - - status = acpi_get_handle(handle, "_EJ0", &tmp); - -- if (ACPI_FAILURE(status)) -+ if (ACPI_FAILURE(status) && !(is_dependent_device(handle))) - return AE_OK; - - device = (adr >> 16) & 0xffff; -@@ -152,7 +152,8 @@ register_slot(acpi_handle handle, u32 lv - INIT_LIST_HEAD(&newfunc->sibling); - newfunc->handle = handle; - newfunc->function = function; -- newfunc->flags = FUNC_HAS_EJ0; -+ if (ACPI_SUCCESS(status)) -+ newfunc->flags = FUNC_HAS_EJ0; - - if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp))) - newfunc->flags |= FUNC_HAS_STA; -@@ -163,6 +164,19 @@ register_slot(acpi_handle handle, u32 lv - if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS3", &tmp))) - newfunc->flags |= FUNC_HAS_PS3; - -+ if (ACPI_SUCCESS(acpi_get_handle(handle, "_DCK", &tmp))) { -+ newfunc->flags |= FUNC_HAS_DCK; -+ /* add to devices dependent on dock station, -+ * because this may actually be the dock bridge -+ */ -+ dd = alloc_dependent_device(handle); -+ if (!dd) -+ err("Can't allocate memory for " -+ "new dependent device!\n"); -+ else -+ add_dependent_device(dd); -+ } -+ - status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun); - if (ACPI_FAILURE(status)) - sun = -1; -@@ -210,18 +224,35 @@ register_slot(acpi_handle handle, u32 lv - slot->flags |= (SLOT_ENABLED | SLOT_POWEREDON); - } - -+ /* if this is a device dependent on a dock station, -+ * associate the acpiphp_func to the dependent_device -+ * struct. -+ */ -+ if ((dd = get_dependent_device(handle))) { -+ newfunc->flags |= FUNC_IS_DD; -+ /* -+ * we don't want any devices which is dependent -+ * on the dock to have it's _EJ0 method executed. -+ * because we need to run _DCK first. -+ */ -+ newfunc->flags &= ~FUNC_HAS_EJ0; -+ dd->func = newfunc; -+ add_pci_dependent_device(dd); -+ } -+ - /* install notify handler */ -- status = acpi_install_notify_handler(handle, -+ if (!(newfunc->flags & FUNC_HAS_DCK)) { -+ status = acpi_install_notify_handler(handle, - ACPI_SYSTEM_NOTIFY, - handle_hotplug_event_func, - newfunc); - -- if (ACPI_FAILURE(status)) { -- err("failed to register interrupt notify handler\n"); -- return status; -- } -+ if (ACPI_FAILURE(status)) -+ err("failed to register interrupt notify handler\n"); -+ } else -+ status = AE_OK; - -- return AE_OK; -+ return status; - } - - -@@ -410,7 +441,8 @@ find_p2p_bridge(acpi_handle handle, u32 - goto out; - - /* check if this bridge has ejectable slots */ -- if (detect_ejectable_slots(handle) > 0) { -+ if ((detect_ejectable_slots(handle) > 0) || -+ (detect_dependent_devices(handle) > 0)) { - dbg("found PCI-to-PCI bridge at PCI %s\n", pci_name(dev)); - add_p2p_bridge(handle, dev); - } -@@ -512,11 +544,13 @@ static void cleanup_bridge(struct acpiph - list_for_each_safe (list, tmp, &slot->funcs) { - struct acpiphp_func *func; - func = list_entry(list, struct acpiphp_func, sibling); -- status = acpi_remove_notify_handler(func->handle, -+ if (!(func->flags & FUNC_HAS_DCK)) { -+ status = acpi_remove_notify_handler(func->handle, - ACPI_SYSTEM_NOTIFY, - handle_hotplug_event_func); -- if (ACPI_FAILURE(status)) -- err("failed to remove notify handler\n"); -+ if (ACPI_FAILURE(status)) -+ err("failed to remove notify handler\n"); -+ } - pci_dev_put(func->pci_dev); - list_del(list); - kfree(func); -@@ -828,14 +862,21 @@ static int acpiphp_bus_add(struct acpiph - dbg("no parent device, assuming NULL\n"); - pdevice = NULL; - } -- if (acpi_bus_get_device(func->handle, &device)) { -- ret_val = acpi_bus_add(&device, pdevice, func->handle, -- ACPI_BUS_TYPE_DEVICE); -- if (ret_val) { -- dbg("error adding bus, %x\n", -- -ret_val); -- goto acpiphp_bus_add_out; -- } -+ if (!acpi_bus_get_device(func->handle, &device)) { -+ dbg("bus exists... trim\n"); -+ /* this shouldn't be in here, so remove -+ * the bus then re-add it... -+ */ -+ ret_val = acpi_bus_trim(device, 1); -+ dbg("acpi_bus_trim return %x\n", ret_val); -+ } -+ -+ ret_val = acpi_bus_add(&device, pdevice, func->handle, -+ ACPI_BUS_TYPE_DEVICE); -+ if (ret_val) { -+ dbg("error adding bus, %x\n", -+ -ret_val); -+ goto acpiphp_bus_add_out; - } - /* - * try to start anyway. We could have failed to add -@@ -1307,7 +1348,7 @@ static void handle_hotplug_event_bridge( - * handles ACPI event notification on slots - * - */ --static void handle_hotplug_event_func(acpi_handle handle, u32 type, void *context) -+void handle_hotplug_event_func(acpi_handle handle, u32 type, void *context) - { - struct acpiphp_func *func; - char objname[64]; diff --git a/pci/acpiphp-add-new-bus-to-acpi.patch b/pci/acpiphp-add-new-bus-to-acpi.patch deleted file mode 100644 index 7d437fd58365c..0000000000000 --- a/pci/acpiphp-add-new-bus-to-acpi.patch +++ /dev/null @@ -1,157 +0,0 @@ -From kristen.c.accardi@intel.com Thu Feb 23 17:56:35 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: greg@kroah.com -Subject: [patch 1/5] acpiphp: add new bus to acpi -Date: Thu, 23 Feb 2006 17:55:58 -0800 -Message-Id: <1140746158.11750.75.camel@whizzy> - -From: Kristen Accardi <kristen.c.accardi@intel.com> - -If we add a new bridge with subordinate busses, we should call make sure -that acpi is notified so that the PRT (if present) can be read and drivers -who have registered on this bus will be notified when it is started. -Also make sure to use the max reserved bus number for the starting the bus -scan. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/acpiphp_glue.c | 111 ++++++++++++++++++++++++++++++++++++- - 1 file changed, 109 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -751,6 +751,106 @@ static int power_off_slot(struct acpiphp - } - - -+ -+/** -+ * acpiphp_max_busnr - return the highest reserved bus number under -+ * the given bus. -+ * @bus: bus to start search with -+ * -+ */ -+static unsigned char acpiphp_max_busnr(struct pci_bus *bus) -+{ -+ struct list_head *tmp; -+ unsigned char max, n; -+ -+ /* -+ * pci_bus_max_busnr will return the highest -+ * reserved busnr for all these children. -+ * that is equivalent to the bus->subordinate -+ * value. We don't want to use the parent's -+ * bus->subordinate value because it could have -+ * padding in it. -+ */ -+ max = bus->secondary; -+ -+ list_for_each(tmp, &bus->children) { -+ n = pci_bus_max_busnr(pci_bus_b(tmp)); -+ if (n > max) -+ max = n; -+ } -+ return max; -+} -+ -+ -+ -+/** -+ * get_func - get a pointer to acpiphp_func given a slot, device -+ * @slot: slot to search -+ * @dev: pci_dev struct to match. -+ * -+ * This function will increase the reference count of pci_dev, -+ * so callers should call pci_dev_put when complete. -+ * -+ */ -+static struct acpiphp_func * -+get_func(struct acpiphp_slot *slot, struct pci_dev *dev) -+{ -+ struct acpiphp_func *func = NULL; -+ struct pci_bus *bus = slot->bridge->pci_bus; -+ struct pci_dev *pdev; -+ -+ list_for_each_entry(func, &slot->funcs, sibling) { -+ pdev = pci_get_slot(bus, PCI_DEVFN(slot->device, -+ func->function)); -+ if (pdev) { -+ if (pdev == dev) -+ break; -+ pci_dev_put(pdev); -+ } -+ } -+ return func; -+} -+ -+ -+/** -+ * acpiphp_bus_add - add a new bus to acpi subsystem -+ * @func: acpiphp_func of the bridge -+ * -+ */ -+static int acpiphp_bus_add(struct acpiphp_func *func) -+{ -+ acpi_handle phandle; -+ struct acpi_device *device, *pdevice; -+ int ret_val; -+ -+ acpi_get_parent(func->handle, &phandle); -+ if (acpi_bus_get_device(phandle, &pdevice)) { -+ dbg("no parent device, assuming NULL\n"); -+ pdevice = NULL; -+ } -+ if (acpi_bus_get_device(func->handle, &device)) { -+ ret_val = acpi_bus_add(&device, pdevice, func->handle, -+ ACPI_BUS_TYPE_DEVICE); -+ if (ret_val) { -+ dbg("error adding bus, %x\n", -+ -ret_val); -+ goto acpiphp_bus_add_out; -+ } -+ } -+ /* -+ * try to start anyway. We could have failed to add -+ * simply because this bus had previously been added -+ * on another add. Don't bother with the return value -+ * we just keep going. -+ */ -+ ret_val = acpi_bus_start(device); -+ -+acpiphp_bus_add_out: -+ return ret_val; -+} -+ -+ -+ - /** - * enable_device - enable, configure a slot - * @slot: slot to be enabled -@@ -788,7 +888,7 @@ static int enable_device(struct acpiphp_ - goto err_exit; - } - -- max = bus->secondary; -+ max = acpiphp_max_busnr(bus); - for (pass = 0; pass < 2; pass++) { - list_for_each_entry(dev, &bus->devices, bus_list) { - if (PCI_SLOT(dev->devfn) != slot->device) -@@ -796,8 +896,15 @@ static int enable_device(struct acpiphp_ - if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || - dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) { - max = pci_scan_bridge(bus, dev, max, pass); -- if (pass && dev->subordinate) -+ if (pass && dev->subordinate) { - pci_bus_size_bridges(dev->subordinate); -+ func = get_func(slot, dev); -+ if (func) { -+ acpiphp_bus_add(func); -+ /* side effect of get_func */ -+ pci_dev_put(dev); -+ } -+ } - } - } - } diff --git a/pci/acpiphp-fix-acpi_path_name.patch b/pci/acpiphp-fix-acpi_path_name.patch deleted file mode 100644 index adf956c49e5f7..0000000000000 --- a/pci/acpiphp-fix-acpi_path_name.patch +++ /dev/null @@ -1,198 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Thu Mar 16 16:20:02 2006 -Message-ID: <87k6atc49s.wl%muneda.takahiro@jp.fujitsu.com> -From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -To: Prarit Bhargava <prarit@sgi.com>, Greg KH <greg@kroah.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Cc: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>, pcihpd-discuss@lists.sourceforge.net -Subject: acpiphp: fix acpi_path_name -Date: Fri, 17 Mar 2006 09:18:39 +0900 - -I encountered the problem that the insmod of the acpiphp -fails because of the mis-freeing of the memory. - -I tested this patch on my tiger4 box. - -Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- ---- - drivers/pci/hotplug/acpi_pcihp.c | 54 +++++++++++++------------------------- - drivers/pci/hotplug/pci_hotplug.h | 1 - drivers/pci/hotplug/pciehp_hpc.c | 15 +++++----- - 3 files changed, 27 insertions(+), 43 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpi_pcihp.c -+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c -@@ -37,28 +37,6 @@ - #define METHOD_NAME__HPP "_HPP" - #define METHOD_NAME_OSHP "OSHP" - --/* acpi_path_name -- * -- * @handle - the acpi_handle of the object who's name you want. -- * -- * Caller must free buffer. -- */ --u8 * acpi_path_name(acpi_handle handle) --{ -- acpi_status status; -- struct acpi_buffer ret_buf = {ACPI_ALLOCATE_BUFFER, NULL}; -- union acpi_object *obj; -- -- status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &ret_buf); -- if (ACPI_FAILURE(status)) { -- return NULL; -- } -- obj = ret_buf.pointer; -- return obj->string.pointer; --} --EXPORT_SYMBOL_GPL(acpi_path_name); -- -- - - static acpi_status - acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp) -@@ -66,10 +44,12 @@ acpi_run_hpp(acpi_handle handle, struct - acpi_status status; - u8 nui[4]; - struct acpi_buffer ret_buf = { 0, NULL}; -+ struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *ext_obj, *package; -- u8 *path_name = acpi_path_name(handle); - int i, len = 0; - -+ acpi_get_name(handle, ACPI_FULL_PATHNAME, &string); -+ - /* get _hpp */ - status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf); - switch (status) { -@@ -77,8 +57,8 @@ acpi_run_hpp(acpi_handle handle, struct - ret_buf.pointer = kmalloc (ret_buf.length, GFP_KERNEL); - if (!ret_buf.pointer) { - printk(KERN_ERR "%s:%s alloc for _HPP fail\n", -- __FUNCTION__, path_name); -- acpi_os_free(path_name); -+ __FUNCTION__, (char *)string.pointer); -+ acpi_os_free(string.pointer); - return AE_NO_MEMORY; - } - status = acpi_evaluate_object(handle, METHOD_NAME__HPP, -@@ -88,8 +68,8 @@ acpi_run_hpp(acpi_handle handle, struct - default: - if (ACPI_FAILURE(status)) { - pr_debug("%s:%s _HPP fail=0x%x\n", __FUNCTION__, -- path_name, status); -- acpi_os_free(path_name); -+ (char *)string.pointer, status); -+ acpi_os_free(string.pointer); - return status; - } - } -@@ -97,7 +77,7 @@ acpi_run_hpp(acpi_handle handle, struct - ext_obj = (union acpi_object *) ret_buf.pointer; - if (ext_obj->type != ACPI_TYPE_PACKAGE) { - printk(KERN_ERR "%s:%s _HPP obj not a package\n", __FUNCTION__, -- path_name); -+ (char *)string.pointer); - status = AE_ERROR; - goto free_and_return; - } -@@ -112,7 +92,7 @@ acpi_run_hpp(acpi_handle handle, struct - break; - default: - printk(KERN_ERR "%s:%s _HPP obj type incorrect\n", -- __FUNCTION__, path_name); -+ __FUNCTION__, (char *)string.pointer); - status = AE_ERROR; - goto free_and_return; - } -@@ -129,8 +109,8 @@ acpi_run_hpp(acpi_handle handle, struct - pr_debug(" _HPP: enable PERR =0x%x\n", hpp->enable_perr); - - free_and_return: -- acpi_os_free(path_name); -- kfree(ret_buf.pointer); -+ acpi_os_free(string.pointer); -+ acpi_os_free(ret_buf.pointer); - return status; - } - -@@ -143,16 +123,20 @@ free_and_return: - acpi_status acpi_run_oshp(acpi_handle handle) - { - acpi_status status; -- u8 *path_name = acpi_path_name(handle); -+ struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL }; -+ -+ acpi_get_name(handle, ACPI_FULL_PATHNAME, &string); - - /* run OSHP */ - status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL); - if (ACPI_FAILURE(status)) - printk(KERN_ERR "%s:%s OSHP fails=0x%x\n", __FUNCTION__, -- path_name, status); -+ (char *)string.pointer, status); - else -- pr_debug("%s:%s OSHP passes\n", __FUNCTION__, path_name); -- acpi_os_free(path_name); -+ pr_debug("%s:%s OSHP passes\n", __FUNCTION__, -+ (char *)string.pointer); -+ -+ acpi_os_free(string.pointer); - return status; - } - EXPORT_SYMBOL_GPL(acpi_run_oshp); ---- gregkh-2.6.orig/drivers/pci/hotplug/pci_hotplug.h -+++ gregkh-2.6/drivers/pci/hotplug/pci_hotplug.h -@@ -190,7 +190,6 @@ struct hotplug_params { - extern acpi_status acpi_run_oshp(acpi_handle handle); - extern acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev, - struct hotplug_params *hpp); --extern u8 * acpi_path_name(acpi_handle handle); - int acpi_root_bridge(acpi_handle handle); - #endif - #endif ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c -@@ -1246,7 +1246,7 @@ int pciehp_acpi_get_hp_hw_control_from_f - acpi_handle chandle, handle = DEVICE_ACPI_HANDLE(&(dev->dev)); - struct pci_dev *pdev = dev; - struct pci_bus *parent; -- u8 *path_name = NULL; -+ struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL }; - - /* - * Per PCI firmware specification, we should run the ACPI _OSC -@@ -1278,16 +1278,17 @@ int pciehp_acpi_get_hp_hw_control_from_f - } - - while (handle) { -- path_name = acpi_path_name(handle); -- dbg("Trying to get hotplug control for %s \n", path_name); -+ acpi_get_name(handle, ACPI_FULL_PATHNAME, &string); -+ dbg("Trying to get hotplug control for %s \n", -+ (char *)string.pointer); - status = pci_osc_control_set(handle, - OSC_PCI_EXPRESS_NATIVE_HP_CONTROL); - if (status == AE_NOT_FOUND) - status = acpi_run_oshp(handle); - if (ACPI_SUCCESS(status)) { - dbg("Gained control for hotplug HW for pci %s (%s)\n", -- pci_name(dev), path_name); -- acpi_os_free(path_name); -+ pci_name(dev), (char *)string.pointer); -+ acpi_os_free(string.pointer); - return 0; - } - if (acpi_root_bridge(handle)) -@@ -1300,8 +1301,8 @@ int pciehp_acpi_get_hp_hw_control_from_f - - err("Cannot get control of hotplug hardware for pci %s\n", - pci_name(dev)); -- if (path_name) -- acpi_os_free(path_name); -+ -+ acpi_os_free(string.pointer); - return -1; - } - #endif diff --git a/pci/acpiphp-fix-bridge-handle.patch b/pci/acpiphp-fix-bridge-handle.patch deleted file mode 100644 index 53df0624b1064..0000000000000 --- a/pci/acpiphp-fix-bridge-handle.patch +++ /dev/null @@ -1,35 +0,0 @@ -From muneda.takahiro@jp.fujitsu.com Fri Feb 24 09:08:13 2006 -Date: Fri, 24 Feb 2006 17:46:04 +0900 -Message-ID: <878xs1ywj7.wl%muneda.takahiro@jp.fujitsu.com> -From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -To: <greg@kroah.com>, <kristen.c.accardi@intel.com> -Subject: acpiphp: fix bridge handle -Cc: <muneda.takahiro@jp.fujitsu.com>, <len.brown@intel.com> - -When hotplug slot is under the host bridge, -DEVICE_ACPI_HANDLE(&bus->self->dev) fails since '&bus->self' was not set. -This patch fixes it. - -This patch is based on kristen's latest patches. -I tested this patch on my Tiger4. - -Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/acpiphp_glue.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -972,8 +972,8 @@ static int enable_device(struct acpiphp_ - acpiphp_sanitize_bus(bus); - pci_enable_bridges(bus); - pci_bus_add_devices(bus); -- acpiphp_set_hpp_values(DEVICE_ACPI_HANDLE(&bus->self->dev), bus); -- acpiphp_configure_ioapics(DEVICE_ACPI_HANDLE(&bus->self->dev)); -+ acpiphp_set_hpp_values(slot->bridge->handle, bus); -+ acpiphp_configure_ioapics(slot->bridge->handle); - - /* associate pci_dev to our representation */ - list_for_each (l, &slot->funcs) { diff --git a/pci/acpiphp-scan-slots-under-the-nested-p2p-bridge.patch b/pci/acpiphp-scan-slots-under-the-nested-p2p-bridge.patch deleted file mode 100644 index 0a4559e00b827..0000000000000 --- a/pci/acpiphp-scan-slots-under-the-nested-p2p-bridge.patch +++ /dev/null @@ -1,74 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Mon Feb 27 05:17:54 2006 -Message-ID: <4402FB85.2010608@jp.fujitsu.com> -Date: Mon, 27 Feb 2006 22:15:49 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: pcihpd-discuss@lists.sourceforge.net, Greg KH <greg@kroah.com> -Subject: acpiphp: Scan slots under the nested P2P bridge - - -Current ACPIPHP driver scans only slots under the top level PCI-to-PCI -bridge. So hotplug PCI slots under the nested PCI-to-PCI bridge would -not be detected. For example, if the system has the ACPI namespace -like below, hotplug slots woule not be detected. - -Device (PCI0) { /* Root bridge */ - Name (_HID, "PNP0A03") - Device (P2PA) { /* PCI-to-PCI bridge */ - Name (_ADR, ...) - Device (P2PB) { /* PCI-to-PCI bridge */ - Name (_ADR, ...) - Device (S0F0) { /* hotplug slot */ - Name (_ADR, ...) - Name (_SUN, ...) - Method (_EJ0, ...) { ... } - } - ... - Device (S0F7) { /* hotplug slot */ - Name (_ADR, ...) - Name (_SUN, ...) - Method (_EJ0, ...) { ... } - } - Device (S1F0) { /* hotplug slot */ - Name (_ADR, ...) - Name (_SUN, ...) - Method (_EJ0, ...) { ... } - } - ... - } - } -} - -This patch fixes this issue. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/acpiphp_glue.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -463,6 +463,12 @@ find_p2p_bridge(acpi_handle handle, u32 - add_p2p_bridge(handle, dev); - } - -+ /* search P2P bridges under this p2p bridge */ -+ status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, -+ find_p2p_bridge, dev->subordinate, NULL); -+ if (ACPI_FAILURE(status)) -+ warn("find_p2p_bridge faied (error code = 0x%x)\n", status); -+ - out: - pci_dev_put(dev); - return AE_OK; -@@ -603,7 +609,8 @@ static void remove_bridge(acpi_handle ha - } else { - /* clean-up p2p bridges under this host bridge */ - acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, -- (u32)1, cleanup_p2p_bridge, NULL, NULL); -+ ACPI_UINT32_MAX, cleanup_p2p_bridge, -+ NULL, NULL); - } - } - diff --git a/pci/acpiphp-slot-management-fix-v4.patch b/pci/acpiphp-slot-management-fix-v4.patch deleted file mode 100644 index f21d89bbb10c6..0000000000000 --- a/pci/acpiphp-slot-management-fix-v4.patch +++ /dev/null @@ -1,343 +0,0 @@ -From kristen.c.accardi@intel.com Thu Feb 23 17:59:56 2006 -From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -Subject: [patch 5/5] acpiphp - slot management fix - V4 -To: greg@kroah.com -Date: Thu, 23 Feb 2006 17:56:08 -0800 -Message-Id: <1140746168.11750.79.camel@whizzy> - -From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> - -o This patch removes IDs (for slots management). -o This patch removes the slot register/unregister processes - from the init/exit phases. Instead, adds these processes - in the bridge add/cleanup phases. -o Currently, this change doesn't have any meanings. But - these changes are needed to support p2p bridge(with - hotplug slot) - -Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - drivers/pci/hotplug/acpiphp.h | 8 -- - drivers/pci/hotplug/acpiphp_core.c | 127 +++++++++++++++++-------------------- - drivers/pci/hotplug/acpiphp_glue.c | 48 ++++++------- - 3 files changed, 86 insertions(+), 97 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp.h -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp.h -@@ -60,10 +60,7 @@ struct acpiphp_slot; - * struct slot - slot information for each *physical* slot - */ - struct slot { -- u8 number; - struct hotplug_slot *hotplug_slot; -- struct list_head slot_list; -- - struct acpiphp_slot *acpi_slot; - }; - -@@ -119,9 +116,9 @@ struct acpiphp_slot { - struct acpiphp_bridge *bridge; /* parent */ - struct list_head funcs; /* one slot may have different - objects (i.e. for each function) */ -+ struct slot *slot; - struct mutex crit_sect; - -- u32 id; /* slot id (serial #) for hotplug core */ - u8 device; /* pci device# */ - - u32 sun; /* ACPI _SUN (slot unique number) */ -@@ -229,12 +226,13 @@ struct acpiphp_dock_station { - /* acpiphp_core.c */ - extern int acpiphp_register_attention(struct acpiphp_attention_info*info); - extern int acpiphp_unregister_attention(struct acpiphp_attention_info *info); -+extern int acpiphp_register_hotplug_slot(struct acpiphp_slot *slot); -+extern void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot); - - /* acpiphp_glue.c */ - extern int acpiphp_glue_init (void); - extern void acpiphp_glue_exit (void); - extern int acpiphp_get_num_slots (void); --extern struct acpiphp_slot *get_slot_from_id (int id); - typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); - void handle_hotplug_event_func(acpi_handle, u32, void*); - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_core.c -@@ -44,8 +44,6 @@ - #include "pci_hotplug.h" - #include "acpiphp.h" - --static LIST_HEAD(slot_list); -- - #define MY_NAME "acpiphp" - - static int debug; -@@ -341,62 +339,53 @@ static void release_slot(struct hotplug_ - kfree(slot); - } - --/** -- * init_slots - initialize 'struct slot' structures for each slot -- * -- */ --static int __init init_slots(void) -+/* callback routine to initialize 'struct slot' for each slot */ -+int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot) - { - struct slot *slot; -+ struct hotplug_slot *hotplug_slot; -+ struct hotplug_slot_info *hotplug_slot_info; - int retval = -ENOMEM; -- int i; - -- for (i = 0; i < num_slots; ++i) { -- slot = kmalloc(sizeof(struct slot), GFP_KERNEL); -- if (!slot) -- goto error; -- memset(slot, 0, sizeof(struct slot)); -- -- slot->hotplug_slot = kmalloc(sizeof(struct hotplug_slot), GFP_KERNEL); -- if (!slot->hotplug_slot) -- goto error_slot; -- memset(slot->hotplug_slot, 0, sizeof(struct hotplug_slot)); -- -- slot->hotplug_slot->info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); -- if (!slot->hotplug_slot->info) -- goto error_hpslot; -- memset(slot->hotplug_slot->info, 0, sizeof(struct hotplug_slot_info)); -- -- slot->hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); -- if (!slot->hotplug_slot->name) -- goto error_info; -- -- slot->number = i; -- -- slot->hotplug_slot->private = slot; -- slot->hotplug_slot->release = &release_slot; -- slot->hotplug_slot->ops = &acpi_hotplug_slot_ops; -- -- slot->acpi_slot = get_slot_from_id(i); -- slot->hotplug_slot->info->power_status = acpiphp_get_power_status(slot->acpi_slot); -- slot->hotplug_slot->info->attention_status = 0; -- slot->hotplug_slot->info->latch_status = acpiphp_get_latch_status(slot->acpi_slot); -- slot->hotplug_slot->info->adapter_status = acpiphp_get_adapter_status(slot->acpi_slot); -- slot->hotplug_slot->info->max_bus_speed = PCI_SPEED_UNKNOWN; -- slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; -- -- make_slot_name(slot); -- -- retval = pci_hp_register(slot->hotplug_slot); -- if (retval) { -- err("pci_hp_register failed with error %d\n", retval); -- goto error_name; -- } -- -- /* add slot to our internal list */ -- list_add(&slot->slot_list, &slot_list); -- info("Slot [%s] registered\n", slot->hotplug_slot->name); -- } -+ slot = kzalloc(sizeof(*slot), GFP_KERNEL); -+ if (!slot) -+ goto error; -+ -+ slot->hotplug_slot = kzalloc(sizeof(*hotplug_slot), GFP_KERNEL); -+ if (!slot->hotplug_slot) -+ goto error_slot; -+ -+ slot->hotplug_slot->info = kzalloc(sizeof(*hotplug_slot_info), -+ GFP_KERNEL); -+ if (!slot->hotplug_slot->info) -+ goto error_hpslot; -+ -+ slot->hotplug_slot->name = kzalloc(SLOT_NAME_SIZE, GFP_KERNEL); -+ if (!slot->hotplug_slot->name) -+ goto error_info; -+ -+ slot->hotplug_slot->private = slot; -+ slot->hotplug_slot->release = &release_slot; -+ slot->hotplug_slot->ops = &acpi_hotplug_slot_ops; -+ -+ slot->acpi_slot = acpiphp_slot; -+ slot->hotplug_slot->info->power_status = acpiphp_get_power_status(slot->acpi_slot); -+ slot->hotplug_slot->info->attention_status = 0; -+ slot->hotplug_slot->info->latch_status = acpiphp_get_latch_status(slot->acpi_slot); -+ slot->hotplug_slot->info->adapter_status = acpiphp_get_adapter_status(slot->acpi_slot); -+ slot->hotplug_slot->info->max_bus_speed = PCI_SPEED_UNKNOWN; -+ slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; -+ -+ acpiphp_slot->slot = slot; -+ make_slot_name(slot); -+ -+ retval = pci_hp_register(slot->hotplug_slot); -+ if (retval) { -+ err("pci_hp_register failed with error %d\n", retval); -+ goto error_name; -+ } -+ -+ info("Slot [%s] registered\n", slot->hotplug_slot->name); - - return 0; - error_name: -@@ -412,17 +401,16 @@ error: - } - - --static void __exit cleanup_slots (void) -+void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *acpiphp_slot) - { -- struct list_head *tmp, *n; -- struct slot *slot; -+ struct slot *slot = acpiphp_slot->slot; -+ int retval = 0; - -- list_for_each_safe (tmp, n, &slot_list) { -- /* memory will be freed in release_slot callback */ -- slot = list_entry(tmp, struct slot, slot_list); -- list_del(&slot->slot_list); -- pci_hp_deregister(slot->hotplug_slot); -- } -+ info ("Slot [%s] unregistered\n", slot->hotplug_slot->name); -+ -+ retval = pci_hp_deregister(slot->hotplug_slot); -+ if (retval) -+ err("pci_hp_deregister failed with error %d\n", retval); - } - - -@@ -439,16 +427,21 @@ static int __init acpiphp_init(void) - - /* read all the ACPI info from the system */ - retval = init_acpi(); -- if (retval && !(docking_station)) -- return retval; - -- return init_slots(); -+ /* if we have found a docking station, we should -+ * go ahead and load even if init_acpi has found -+ * no slots. This handles the case when the _DCK -+ * method not defined under the actual dock bridge -+ */ -+ if (docking_station) -+ return 0; -+ else -+ return retval; - } - - - static void __exit acpiphp_exit(void) - { -- cleanup_slots(); - /* deallocate internal data structures etc. */ - acpiphp_glue_exit(); - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -128,8 +128,7 @@ register_slot(acpi_handle handle, u32 lv - acpi_handle tmp; - acpi_status status = AE_OK; - unsigned long adr, sun; -- int device, function; -- static int num_slots = 0; /* XXX if we support I/O node hotplug... */ -+ int device, function, retval; - - status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr); - -@@ -198,7 +197,6 @@ register_slot(acpi_handle handle, u32 lv - - memset(slot, 0, sizeof(struct acpiphp_slot)); - slot->bridge = bridge; -- slot->id = num_slots++; - slot->device = device; - slot->sun = sun; - INIT_LIST_HEAD(&slot->funcs); -@@ -212,6 +210,11 @@ register_slot(acpi_handle handle, u32 lv - dbg("found ACPI PCI Hotplug slot %d at PCI %04x:%02x:%02x\n", - slot->sun, pci_domain_nr(bridge->pci_bus), - bridge->pci_bus->number, slot->device); -+ retval = acpiphp_register_hotplug_slot(slot); -+ if (retval) { -+ warn("acpiphp_register_hotplug_slot failed(err code = 0x%x)\n", retval); -+ goto err_exit; -+ } - } - - newfunc->slot = slot; -@@ -253,6 +256,14 @@ register_slot(acpi_handle handle, u32 lv - status = AE_OK; - - return status; -+ -+ err_exit: -+ bridge->nr_slots--; -+ bridge->slots = slot->next; -+ kfree(slot); -+ kfree(newfunc); -+ -+ return AE_OK; - } - - -@@ -335,9 +346,16 @@ static void init_bridge_misc(struct acpi - /* decode ACPI 2.0 _HPP (hot plug parameters) */ - decode_hpp(bridge); - -+ /* must be added to the list prior to calling register_slot */ -+ list_add(&bridge->list, &bridge_list); -+ - /* register all slot objects under this bridge */ - status = acpi_walk_namespace(ACPI_TYPE_DEVICE, bridge->handle, (u32)1, - register_slot, bridge, NULL); -+ if (ACPI_FAILURE(status)) { -+ list_del(&bridge->list); -+ return; -+ } - - /* install notify handler */ - if (bridge->type != BRIDGE_TYPE_HOST) { -@@ -350,8 +368,6 @@ static void init_bridge_misc(struct acpi - err("failed to register interrupt notify handler\n"); - } - } -- -- list_add(&bridge->list, &bridge_list); - } - - -@@ -555,6 +571,8 @@ static void cleanup_bridge(struct acpiph - list_del(list); - kfree(func); - } -+ acpiphp_unregister_hotplug_slot(slot); -+ list_del(&slot->funcs); - kfree(slot); - slot = next; - } -@@ -1521,26 +1539,6 @@ static int acpiphp_for_each_slot(acpiphp - } - #endif - --/* search matching slot from id */ --struct acpiphp_slot *get_slot_from_id(int id) --{ -- struct list_head *node; -- struct acpiphp_bridge *bridge; -- struct acpiphp_slot *slot; -- -- list_for_each (node, &bridge_list) { -- bridge = (struct acpiphp_bridge *)node; -- for (slot = bridge->slots; slot; slot = slot->next) -- if (slot->id == id) -- return slot; -- } -- -- /* should never happen! */ -- err("%s: no object for id %d\n", __FUNCTION__, id); -- WARN_ON(1); -- return NULL; --} -- - - /** - * acpiphp_enable_slot - power on slot diff --git a/pci/i386-pci-ordering.patch b/pci/i386-pci-ordering.patch deleted file mode 100644 index ffdaaeff55355..0000000000000 --- a/pci/i386-pci-ordering.patch +++ /dev/null @@ -1,186 +0,0 @@ -From ak@suse.de Fri Feb 10 02:47:08 2006 -From: Andi Kleen <ak@suse.de> -To: Greg KH <greg@kroah.com> -Subject: PCI: Give PCI config access initialization a defined ordering - -I moved it to a separate function which is safer. - -This avoids problems with the linker reordering them and the -less useful PCI config space access methods taking priority -over the better ones. - -Fixes some problems with broken MMCONFIG - -Cc: Dave Hansen <haveblue@us.ibm.com> -Signed-off-by: Andi Kleen <ak@suse.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - arch/i386/pci/Makefile | 2 +- - arch/i386/pci/direct.c | 15 +++++---------- - arch/i386/pci/init.c | 25 +++++++++++++++++++++++++ - arch/i386/pci/mmconfig.c | 11 +++-------- - arch/i386/pci/pcbios.c | 4 +--- - arch/i386/pci/pci.h | 3 +++ - arch/x86_64/pci/Makefile | 3 ++- - 7 files changed, 40 insertions(+), 23 deletions(-) - ---- gregkh-2.6.orig/arch/i386/pci/Makefile -+++ gregkh-2.6/arch/i386/pci/Makefile -@@ -1,4 +1,4 @@ --obj-y := i386.o -+obj-y := i386.o init.o - - obj-$(CONFIG_PCI_BIOS) += pcbios.o - obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o ---- gregkh-2.6.orig/arch/i386/pci/direct.c -+++ gregkh-2.6/arch/i386/pci/direct.c -@@ -245,7 +245,7 @@ static int __init pci_check_type2(void) - return works; - } - --static int __init pci_direct_init(void) -+void __init pci_direct_init(void) - { - struct resource *region, *region2; - -@@ -258,16 +258,16 @@ static int __init pci_direct_init(void) - if (pci_check_type1()) { - printk(KERN_INFO "PCI: Using configuration type 1\n"); - raw_pci_ops = &pci_direct_conf1; -- return 0; -+ return; - } - release_resource(region); - - type2: - if ((pci_probe & PCI_PROBE_CONF2) == 0) -- goto out; -+ return; - region = request_region(0xCF8, 4, "PCI conf2"); - if (!region) -- goto out; -+ return; - region2 = request_region(0xC000, 0x1000, "PCI conf2"); - if (!region2) - goto fail2; -@@ -275,15 +275,10 @@ static int __init pci_direct_init(void) - if (pci_check_type2()) { - printk(KERN_INFO "PCI: Using configuration type 2\n"); - raw_pci_ops = &pci_direct_conf2; -- return 0; -+ return; - } - - release_resource(region2); - fail2: - release_resource(region); -- -- out: -- return 0; - } -- --arch_initcall(pci_direct_init); ---- /dev/null -+++ gregkh-2.6/arch/i386/pci/init.c -@@ -0,0 +1,25 @@ -+#include <linux/config.h> -+#include <linux/pci.h> -+#include <linux/init.h> -+#include "pci.h" -+ -+/* arch_initcall has too random ordering, so call the initializers -+ in the right sequence from here. */ -+static __init int pci_access_init(void) -+{ -+#ifdef CONFIG_PCI_MMCONFIG -+ pci_mmcfg_init(); -+#endif -+ if (raw_pci_ops) -+ return 0; -+#ifdef CONFIG_PCI_BIOS -+ pci_pcbios_init(); -+#endif -+ if (raw_pci_ops) -+ return 0; -+#ifdef CONFIG_PCI_DIRECT -+ pci_direct_init(); -+#endif -+ return 0; -+} -+arch_initcall(pci_access_init); ---- gregkh-2.6.orig/arch/i386/pci/mmconfig.c -+++ gregkh-2.6/arch/i386/pci/mmconfig.c -@@ -172,25 +172,20 @@ static __init void unreachable_devices(v - } - } - --static int __init pci_mmcfg_init(void) -+void __init pci_mmcfg_init(void) - { - if ((pci_probe & PCI_PROBE_MMCONF) == 0) -- goto out; -+ return; - - acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg); - if ((pci_mmcfg_config_num == 0) || - (pci_mmcfg_config == NULL) || - (pci_mmcfg_config[0].base_address == 0)) -- goto out; -+ return; - - printk(KERN_INFO "PCI: Using MMCONFIG\n"); - raw_pci_ops = &pci_mmcfg; - pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; - - unreachable_devices(); -- -- out: -- return 0; - } -- --arch_initcall(pci_mmcfg_init); ---- gregkh-2.6.orig/arch/i386/pci/pcbios.c -+++ gregkh-2.6/arch/i386/pci/pcbios.c -@@ -476,14 +476,12 @@ int pcibios_set_irq_routing(struct pci_d - } - EXPORT_SYMBOL(pcibios_set_irq_routing); - --static int __init pci_pcbios_init(void) -+void __init pci_pcbios_init(void) - { - if ((pci_probe & PCI_PROBE_BIOS) - && ((raw_pci_ops = pci_find_bios()))) { - pci_probe |= PCI_BIOS_SORT; - pci_bios_present = 1; - } -- return 0; - } - --arch_initcall(pci_pcbios_init); ---- gregkh-2.6.orig/arch/i386/pci/pci.h -+++ gregkh-2.6/arch/i386/pci/pci.h -@@ -80,4 +80,7 @@ extern int pci_conf1_write(unsigned int - extern int pci_conf1_read(unsigned int seg, unsigned int bus, - unsigned int devfn, int reg, int len, u32 *value); - -+extern void pci_direct_init(void); -+extern void pci_pcbios_init(void); -+extern void pci_mmcfg_init(void); - ---- gregkh-2.6.orig/arch/x86_64/pci/Makefile -+++ gregkh-2.6/arch/x86_64/pci/Makefile -@@ -7,7 +7,7 @@ CFLAGS += -Iarch/i386/pci - - obj-y := i386.o - obj-$(CONFIG_PCI_DIRECT)+= direct.o --obj-y += fixup.o -+obj-y += fixup.o init.o - obj-$(CONFIG_ACPI) += acpi.o - obj-y += legacy.o irq.o common.o - # mmconfig has a 64bit special -@@ -22,3 +22,4 @@ irq-y += ../../i386/pci/irq.o - common-y += ../../i386/pci/common.o - fixup-y += ../../i386/pci/fixup.o - i386-y += ../../i386/pci/i386.o -+init-y += ../../i386/pci/init.o diff --git a/pci/ibmphp-remove-true-and-false.patch b/pci/ibmphp-remove-true-and-false.patch deleted file mode 100644 index 983270801d8b9..0000000000000 --- a/pci/ibmphp-remove-true-and-false.patch +++ /dev/null @@ -1,642 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Thu Mar 16 09:09:17 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: pcihpd-discuss@lists.sourceforge.net -Message-Id: <1142382287.28684.25.camel@whizzy> -Subject: ibmphp: remove TRUE and FALSE -Date: Tue, 14 Mar 2006 16:24:47 -0800 - -This patch removes the defines TRUE and FALSE and just uses 0 or 1. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - ---- - drivers/pci/hotplug/ibmphp.h | 2 - - drivers/pci/hotplug/ibmphp_core.c | 4 +- - drivers/pci/hotplug/ibmphp_ebda.c | 2 - - drivers/pci/hotplug/ibmphp_hpc.c | 54 +++++++++++++++++------------------ - drivers/pci/hotplug/ibmphp_pci.c | 58 +++++++++++++++++++------------------- - drivers/pci/hotplug/ibmphp_res.c | 48 +++++++++++++++---------------- - 6 files changed, 83 insertions(+), 85 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp.h -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp.h -@@ -406,8 +406,6 @@ extern void ibmphp_hpc_stop_poll_thread - //---------------------------------------------------------------------------- - // HPC return codes - //---------------------------------------------------------------------------- --#define FALSE 0x00 --#define TRUE 0x01 - #define HPC_ERROR 0xFF - - //----------------------------------------------------------------------------- ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_core.c -@@ -1239,9 +1239,9 @@ int ibmphp_do_disable_slot(struct slot * - } - - flag = slot_cur->flag; -- slot_cur->flag = TRUE; -+ slot_cur->flag = 1; - -- if (flag == TRUE) { -+ if (flag == 1) { - rc = validate(slot_cur, DISABLE); - /* checking if powered off already & valid slot # */ - if (rc) ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_ebda.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_ebda.c -@@ -944,7 +944,7 @@ static int __init ebda_rsrc_controller ( - goto error_no_slot; - } - -- tmp_slot->flag = TRUE; -+ tmp_slot->flag = 1; - - tmp_slot->capabilities = hpc_ptr->slots[index].slot_cap; - if ((hpc_ptr->slots[index].slot_cap & EBDA_SLOT_133_MAX) == EBDA_SLOT_133_MAX) ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_hpc.c -@@ -38,7 +38,7 @@ - - #include "ibmphp.h" - --static int to_debug = FALSE; -+static int to_debug = 0; - #define debug_polling(fmt, arg...) do { if (to_debug) debug (fmt, arg); } while (0) - - //---------------------------------------------------------------------------- -@@ -95,8 +95,8 @@ static int to_debug = FALSE; - //---------------------------------------------------------------------------- - // macro utilities - //---------------------------------------------------------------------------- --// if bits 20,22,25,26,27,29,30 are OFF return TRUE --#define HPC_I2CSTATUS_CHECK(s) ((u8)((s & 0x00000A76) ? FALSE : TRUE)) -+// if bits 20,22,25,26,27,29,30 are OFF return 1 -+#define HPC_I2CSTATUS_CHECK(s) ((u8)((s & 0x00000A76) ? 0 : 1)) - - //---------------------------------------------------------------------------- - // global variables -@@ -136,8 +136,8 @@ void __init ibmphp_hpc_initvars (void) - mutex_init(&sem_hpcaccess); - init_MUTEX (&semOperations); - init_MUTEX_LOCKED (&sem_exit); -- to_debug = FALSE; -- ibmphp_shutdown = FALSE; -+ to_debug = 0; -+ ibmphp_shutdown = 0; - tid_poll = 0; - - debug ("%s - Exit\n", __FUNCTION__); -@@ -739,21 +739,21 @@ int ibmphp_hpc_writeslot (struct slot * - // check controller is still not working on the command - //-------------------------------------------------------------------- - timeout = CMD_COMPLETE_TOUT_SEC; -- done = FALSE; -+ done = 0; - while (!done) { - rc = hpc_wait_ctlr_notworking (HPC_CTLR_WORKING_TOUT, ctlr_ptr, wpg_bbar, - &status); - if (!rc) { - if (NEEDTOCHECK_CMDSTATUS (cmd)) { - if (CTLR_FINISHED (status) == HPC_CTLR_FINISHED_YES) -- done = TRUE; -+ done = 1; - } else -- done = TRUE; -+ done = 1; - } - if (!done) { - msleep(1000); - if (timeout < 1) { -- done = TRUE; -+ done = 1; - err ("%s - Error command complete timeout\n", __FUNCTION__); - rc = -EFAULT; - } else -@@ -799,7 +799,7 @@ void free_hpc_access (void) - void ibmphp_lock_operations (void) - { - down (&semOperations); -- to_debug = TRUE; -+ to_debug = 1; - } - - /*---------------------------------------------------------------------- -@@ -809,7 +809,7 @@ void ibmphp_unlock_operations (void) - { - debug ("%s - Entry\n", __FUNCTION__); - up (&semOperations); -- to_debug = FALSE; -+ to_debug = 0; - debug ("%s - Exit\n", __FUNCTION__); - } - -@@ -937,40 +937,40 @@ static int process_changeinstatus (struc - { - u8 status; - int rc = 0; -- u8 disable = FALSE; -- u8 update = FALSE; -+ u8 disable = 0; -+ u8 update = 0; - - debug ("process_changeinstatus - Entry pslot[%p], poldslot[%p]\n", pslot, poldslot); - - // bit 0 - HPC_SLOT_POWER - if ((pslot->status & 0x01) != (poldslot->status & 0x01)) -- update = TRUE; -+ update = 1; - - // bit 1 - HPC_SLOT_CONNECT - // ignore - - // bit 2 - HPC_SLOT_ATTN - if ((pslot->status & 0x04) != (poldslot->status & 0x04)) -- update = TRUE; -+ update = 1; - - // bit 3 - HPC_SLOT_PRSNT2 - // bit 4 - HPC_SLOT_PRSNT1 - if (((pslot->status & 0x08) != (poldslot->status & 0x08)) - || ((pslot->status & 0x10) != (poldslot->status & 0x10))) -- update = TRUE; -+ update = 1; - - // bit 5 - HPC_SLOT_PWRGD - if ((pslot->status & 0x20) != (poldslot->status & 0x20)) - // OFF -> ON: ignore, ON -> OFF: disable slot - if ((poldslot->status & 0x20) && (SLOT_CONNECT (poldslot->status) == HPC_SLOT_CONNECTED) && (SLOT_PRESENT (poldslot->status))) -- disable = TRUE; -+ disable = 1; - - // bit 6 - HPC_SLOT_BUS_SPEED - // ignore - - // bit 7 - HPC_SLOT_LATCH - if ((pslot->status & 0x80) != (poldslot->status & 0x80)) { -- update = TRUE; -+ update = 1; - // OPEN -> CLOSE - if (pslot->status & 0x80) { - if (SLOT_PWRGD (pslot->status)) { -@@ -979,7 +979,7 @@ static int process_changeinstatus (struc - msleep(1000); - rc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &status); - if (SLOT_PWRGD (status)) -- update = TRUE; -+ update = 1; - else // overwrite power in pslot to OFF - pslot->status &= ~HPC_SLOT_POWER; - } -@@ -987,17 +987,17 @@ static int process_changeinstatus (struc - // CLOSE -> OPEN - else if ((SLOT_PWRGD (poldslot->status) == HPC_SLOT_PWRGD_GOOD) - && (SLOT_CONNECT (poldslot->status) == HPC_SLOT_CONNECTED) && (SLOT_PRESENT (poldslot->status))) { -- disable = TRUE; -+ disable = 1; - } - // else - ignore - } - // bit 4 - HPC_SLOT_BLINK_ATTN - if ((pslot->ext_status & 0x08) != (poldslot->ext_status & 0x08)) -- update = TRUE; -+ update = 1; - - if (disable) { - debug ("process_changeinstatus - disable slot\n"); -- pslot->flag = FALSE; -+ pslot->flag = 0; - rc = ibmphp_do_disable_slot (pslot); - } - -@@ -1102,7 +1102,7 @@ void __exit ibmphp_hpc_stop_poll_thread - { - debug ("%s - Entry\n", __FUNCTION__); - -- ibmphp_shutdown = TRUE; -+ ibmphp_shutdown = 1; - debug ("before locking operations \n"); - ibmphp_lock_operations (); - debug ("after locking operations \n"); -@@ -1136,7 +1136,7 @@ static int hpc_wait_ctlr_notworking (int - u8 * pstatus) - { - int rc = 0; -- u8 done = FALSE; -+ u8 done = 0; - - debug_polling ("hpc_wait_ctlr_notworking - Entry timeout[%d]\n", timeout); - -@@ -1144,14 +1144,14 @@ static int hpc_wait_ctlr_notworking (int - *pstatus = ctrl_read (ctlr_ptr, wpg_bbar, WPG_CTLR_INDEX); - if (*pstatus == HPC_ERROR) { - rc = HPC_ERROR; -- done = TRUE; -+ done = 1; - } - if (CTLR_WORKING (*pstatus) == HPC_CTLR_WORKING_NO) -- done = TRUE; -+ done = 1; - if (!done) { - msleep(1000); - if (timeout < 1) { -- done = TRUE; -+ done = 1; - err ("HPCreadslot - Error ctlr timeout\n"); - rc = HPC_ERROR; - } else ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_pci.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_pci.c -@@ -199,7 +199,7 @@ int ibmphp_configure_card (struct pci_fu - } - - pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_SECONDARY_BUS, &sec_number); -- flag = FALSE; -+ flag = 0; - for (i = 0; i < 32; i++) { - if (func->devices[i]) { - newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL); -@@ -226,7 +226,7 @@ int ibmphp_configure_card (struct pci_fu - cleanup_count = 2; - goto error; - } -- flag = TRUE; -+ flag = 1; - } - } - -@@ -272,7 +272,7 @@ int ibmphp_configure_card (struct pci_fu - cur_func->busno, device, function); - pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_SECONDARY_BUS, &sec_number); - debug ("after configuring bridge..., sec_number = %x\n", sec_number); -- flag = FALSE; -+ flag = 0; - for (i = 0; i < 32; i++) { - if (func->devices[i]) { - debug ("inside for loop, device is %x\n", i); -@@ -301,7 +301,7 @@ int ibmphp_configure_card (struct pci_fu - cleanup_count = 2; - goto error; - } -- flag = TRUE; -+ flag = 1; - } - } - -@@ -449,7 +449,7 @@ static int configure_device (struct pci_ - pfmem[count]->devfunc = PCI_DEVFN(func->device, - func->function); - pfmem[count]->len = len[count]; -- pfmem[count]->fromMem = FALSE; -+ pfmem[count]->fromMem = 0; - if (ibmphp_check_resource (pfmem[count], 0) == 0) { - ibmphp_add_resource (pfmem[count]); - func->pfmem[count] = pfmem[count]; -@@ -467,7 +467,7 @@ static int configure_device (struct pci_ - debug ("there's no pfmem... going into mem.\n"); - if (ibmphp_check_resource (mem_tmp, 0) == 0) { - ibmphp_add_resource (mem_tmp); -- pfmem[count]->fromMem = TRUE; -+ pfmem[count]->fromMem = 1; - pfmem[count]->rangeno = mem_tmp->rangeno; - pfmem[count]->start = mem_tmp->start; - pfmem[count]->end = mem_tmp->end; -@@ -571,11 +571,11 @@ static int configure_bridge (struct pci_ - u16 pfmem_base; - u32 bar[2]; - u32 len[2]; -- u8 flag_io = FALSE; -- u8 flag_mem = FALSE; -- u8 flag_pfmem = FALSE; -- u8 need_io_upper = FALSE; -- u8 need_pfmem_upper = FALSE; -+ u8 flag_io = 0; -+ u8 flag_mem = 0; -+ u8 flag_pfmem = 0; -+ u8 need_io_upper = 0; -+ u8 need_pfmem_upper = 0; - struct res_needed *amount_needed = NULL; - struct resource_node *io = NULL; - struct resource_node *bus_io[2] = {NULL, NULL}; -@@ -713,7 +713,7 @@ static int configure_bridge (struct pci_ - bus_pfmem[count]->devfunc = PCI_DEVFN(func->device, - func->function); - bus_pfmem[count]->len = len[count]; -- bus_pfmem[count]->fromMem = FALSE; -+ bus_pfmem[count]->fromMem = 0; - if (ibmphp_check_resource (bus_pfmem[count], 0) == 0) { - ibmphp_add_resource (bus_pfmem[count]); - func->pfmem[count] = bus_pfmem[count]; -@@ -730,7 +730,7 @@ static int configure_bridge (struct pci_ - mem_tmp->len = bus_pfmem[count]->len; - if (ibmphp_check_resource (mem_tmp, 0) == 0) { - ibmphp_add_resource (mem_tmp); -- bus_pfmem[count]->fromMem = TRUE; -+ bus_pfmem[count]->fromMem = 1; - bus_pfmem[count]->rangeno = mem_tmp->rangeno; - ibmphp_add_pfmem_from_mem (bus_pfmem[count]); - func->pfmem[count] = bus_pfmem[count]; -@@ -826,7 +826,7 @@ static int configure_bridge (struct pci_ - - if (!amount_needed->io) { - debug ("it doesn't want IO?\n"); -- flag_io = TRUE; -+ flag_io = 1; - } else { - debug ("it wants %x IO behind the bridge\n", amount_needed->io); - io = kzalloc(sizeof(*io), GFP_KERNEL); -@@ -843,13 +843,13 @@ static int configure_bridge (struct pci_ - if (ibmphp_check_resource (io, 1) == 0) { - debug ("were we able to add io\n"); - ibmphp_add_resource (io); -- flag_io = TRUE; -+ flag_io = 1; - } - } - - if (!amount_needed->mem) { - debug ("it doesn't want n.e.memory?\n"); -- flag_mem = TRUE; -+ flag_mem = 1; - } else { - debug ("it wants %x memory behind the bridge\n", amount_needed->mem); - mem = kzalloc(sizeof(*mem), GFP_KERNEL); -@@ -864,14 +864,14 @@ static int configure_bridge (struct pci_ - mem->len = amount_needed->mem; - if (ibmphp_check_resource (mem, 1) == 0) { - ibmphp_add_resource (mem); -- flag_mem = TRUE; -+ flag_mem = 1; - debug ("were we able to add mem\n"); - } - } - - if (!amount_needed->pfmem) { - debug ("it doesn't want n.e.pfmem mem?\n"); -- flag_pfmem = TRUE; -+ flag_pfmem = 1; - } else { - debug ("it wants %x pfmemory behind the bridge\n", amount_needed->pfmem); - pfmem = kzalloc(sizeof(*pfmem), GFP_KERNEL); -@@ -884,10 +884,10 @@ static int configure_bridge (struct pci_ - pfmem->busno = func->busno; - pfmem->devfunc = PCI_DEVFN(func->device, func->function); - pfmem->len = amount_needed->pfmem; -- pfmem->fromMem = FALSE; -+ pfmem->fromMem = 0; - if (ibmphp_check_resource (pfmem, 1) == 0) { - ibmphp_add_resource (pfmem); -- flag_pfmem = TRUE; -+ flag_pfmem = 1; - } else { - mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL); - if (!mem_tmp) { -@@ -901,10 +901,10 @@ static int configure_bridge (struct pci_ - mem_tmp->len = pfmem->len; - if (ibmphp_check_resource (mem_tmp, 1) == 0) { - ibmphp_add_resource (mem_tmp); -- pfmem->fromMem = TRUE; -+ pfmem->fromMem = 1; - pfmem->rangeno = mem_tmp->rangeno; - ibmphp_add_pfmem_from_mem (pfmem); -- flag_pfmem = TRUE; -+ flag_pfmem = 1; - } - } - } -@@ -950,11 +950,11 @@ static int configure_bridge (struct pci_ - - if ((io_base & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) { - debug ("io 32\n"); -- need_io_upper = TRUE; -+ need_io_upper = 1; - } - if ((pfmem_base & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) { - debug ("pfmem 64\n"); -- need_pfmem_upper = TRUE; -+ need_pfmem_upper = 1; - } - - if (bus->noIORanges) { -@@ -1119,7 +1119,7 @@ static struct res_needed *scan_behind_br - debug ("hdr_type behind the bridge is %x\n", hdr_type); - if (hdr_type & PCI_HEADER_TYPE_BRIDGE) { - err ("embedded bridges not supported for hot-plugging.\n"); -- amount->not_correct = TRUE; -+ amount->not_correct = 1; - return amount; - } - -@@ -1127,12 +1127,12 @@ static struct res_needed *scan_behind_br - if (class == PCI_CLASS_NOT_DEFINED_VGA) { - err ("The device %x is VGA compatible and as is not supported for hot plugging. " - "Please choose another device.\n", device); -- amount->not_correct = TRUE; -+ amount->not_correct = 1; - return amount; - } else if (class == PCI_CLASS_DISPLAY_VGA) { - err ("The device %x is not supported for hot plugging. " - "Please choose another device.\n", device); -- amount->not_correct = TRUE; -+ amount->not_correct = 1; - return amount; - } - -@@ -1192,9 +1192,9 @@ static struct res_needed *scan_behind_br - } /* end for */ - - if (!howmany) -- amount->not_correct = TRUE; -+ amount->not_correct = 1; - else -- amount->not_correct = FALSE; -+ amount->not_correct = 0; - if ((amount->io) && (amount->io < IOBRIDGE)) - amount->io = IOBRIDGE; - if ((amount->mem) && (amount->mem < MEMBRIDGE)) ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_res.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_res.c -@@ -325,7 +325,7 @@ int __init ibmphp_rsrc_init (void) - if (!new_pfmem) - return -ENOMEM; - new_pfmem->type = PFMEM; -- new_pfmem->fromMem = FALSE; -+ new_pfmem->fromMem = 0; - if (ibmphp_add_resource (new_pfmem) < 0) { - newbus = alloc_error_bus (curr, 0, 0); - if (!newbus) -@@ -462,7 +462,7 @@ static int add_range (int type, struct r - static void update_resources (struct bus_node *bus_cur, int type, int rangeno) - { - struct resource_node *res = NULL; -- u8 eol = FALSE; /* end of list indicator */ -+ u8 eol = 0; /* end of list indicator */ - - switch (type) { - case MEM: -@@ -488,7 +488,7 @@ static void update_resources (struct bus - else if (res->nextRange) - res = res->nextRange; - else { -- eol = TRUE; -+ eol = 1; - break; - } - } -@@ -979,7 +979,7 @@ int ibmphp_check_resource (struct resour - int noranges = 0; - u32 tmp_start; /* this is to make sure start address is divisible by the length needed */ - u32 tmp_divide; -- u8 flag = FALSE; -+ u8 flag = 0; - - if (!res) - return -EINVAL; -@@ -1046,17 +1046,17 @@ int ibmphp_check_resource (struct resour - - if ((range->start % tmp_divide) == 0) { - /* just perfect, starting address is divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = range->start; - } else { - /* Needs adjusting */ - tmp_start = range->start; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = res_cur->start - 1 - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1085,17 +1085,17 @@ int ibmphp_check_resource (struct resour - - if (((res_cur->end + 1) % tmp_divide) == 0) { - /* just perfect, starting address is divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = res_cur->end + 1; - } else { - /* Needs adjusting */ - tmp_start = res_cur->end + 1; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = range->end - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1123,17 +1123,17 @@ int ibmphp_check_resource (struct resour - if ((len_tmp < len_cur) || (len_cur == 0)) { - if ((range->start % tmp_divide) == 0) { - /* just perfect, starting address is divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = range->start; - } else { - /* Needs adjusting */ - tmp_start = range->start; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = res_cur->start - 1 - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1158,17 +1158,17 @@ int ibmphp_check_resource (struct resour - if ((len_tmp < len_cur) || (len_cur == 0)) { - if (((res_prev->end + 1) % tmp_divide) == 0) { - /* just perfect, starting address's divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = res_prev->end + 1; - } else { - /* Needs adjusting */ - tmp_start = res_prev->end + 1; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = res_cur->start - 1 - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1217,17 +1217,17 @@ int ibmphp_check_resource (struct resour - if ((len_tmp < len_cur) || (len_cur == 0)) { - if ((range->start % tmp_divide) == 0) { - /* just perfect, starting address's divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = range->start; - } else { - /* Needs adjusting */ - tmp_start = range->start; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = range->end - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1281,17 +1281,17 @@ int ibmphp_check_resource (struct resour - if ((len_tmp < len_cur) || (len_cur == 0)) { - if ((range->start % tmp_divide) == 0) { - /* just perfect, starting address's divisible by length */ -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = range->start; - } else { - /* Needs adjusting */ - tmp_start = range->start; -- flag = FALSE; -+ flag = 0; - - while ((len_tmp = range->end - tmp_start) >= res->len) { - if ((tmp_start % tmp_divide) == 0) { -- flag = TRUE; -+ flag = 1; - len_cur = len_tmp; - start_cur = tmp_start; - break; -@@ -1684,7 +1684,7 @@ static int __init once_over (void) - bus_cur = list_entry (tmp, struct bus_node, bus_list); - if ((!bus_cur->rangePFMem) && (bus_cur->firstPFMem)) { - for (pfmem_cur = bus_cur->firstPFMem, pfmem_prev = NULL; pfmem_cur; pfmem_prev = pfmem_cur, pfmem_cur = pfmem_cur->next) { -- pfmem_cur->fromMem = TRUE; -+ pfmem_cur->fromMem = 1; - if (pfmem_prev) - pfmem_prev->next = pfmem_cur->next; - else -@@ -2129,7 +2129,7 @@ static int __init update_bridge_ranges ( - pfmem->start = start_address; - pfmem->end = end_address + 0xfffff; - pfmem->len = pfmem->end - pfmem->start + 1; -- pfmem->fromMem = FALSE; -+ pfmem->fromMem = 0; - - ibmphp_add_resource (pfmem); - } diff --git a/pci/pci-add-pci_device_shutdown-to-pci_bus_type.patch b/pci/pci-add-pci_device_shutdown-to-pci_bus_type.patch deleted file mode 100644 index 300373569faf8..0000000000000 --- a/pci/pci-add-pci_device_shutdown-to-pci_bus_type.patch +++ /dev/null @@ -1,44 +0,0 @@ -From bgerst@didntduck.org Sun Feb 19 13:05:20 2006 -Message-ID: <43F8DDB0.6030700@didntduck.org> -Date: Sun, 19 Feb 2006 16:05:52 -0500 -From: Brian Gerst <bgerst@didntduck.org> -To: Greg KH <greg@kroah.com> -CC: <rmk+lkml@arm.linux.org.uk> -Subject: PCI: Add pci_device_shutdown to pci_bus_type - -The extra compatability code is not necessary. Any code still using -the old shutdown method will trigger the warning in driver_register() -instead. - -Signed-off-by: Brian Gerst <bgerst@didntduck.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/pci-driver.c | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/pci-driver.c -+++ gregkh-2.6/drivers/pci/pci-driver.c -@@ -380,14 +380,6 @@ int __pci_register_driver(struct pci_dri - /* initialize common driver fields */ - drv->driver.name = drv->name; - drv->driver.bus = &pci_bus_type; -- /* FIXME, once all of the existing PCI drivers have been fixed to set -- * the pci shutdown function, this test can go away. */ -- if (!drv->driver.shutdown) -- drv->driver.shutdown = pci_device_shutdown; -- else -- printk(KERN_WARNING "Warning: PCI driver %s has a struct " -- "device_driver shutdown method, please update!\n", -- drv->name); - drv->driver.owner = owner; - drv->driver.kobj.ktype = &pci_driver_kobj_type; - -@@ -514,6 +506,7 @@ struct bus_type pci_bus_type = { - .probe = pci_device_probe, - .remove = pci_device_remove, - .suspend = pci_device_suspend, -+ .shutdown = pci_device_shutdown, - .resume = pci_device_resume, - .dev_attrs = pci_dev_attrs, - }; diff --git a/pci/pci-avoid-leaving-master_abort-disabled-permanently-when-returning-from-pci_scan_bridge.patch b/pci/pci-avoid-leaving-master_abort-disabled-permanently-when-returning-from-pci_scan_bridge.patch deleted file mode 100644 index 479b365afc807..0000000000000 --- a/pci/pci-avoid-leaving-master_abort-disabled-permanently-when-returning-from-pci_scan_bridge.patch +++ /dev/null @@ -1,126 +0,0 @@ -From ralf@linux-mips.org Tue Feb 14 08:28:09 2006 -Date: Tue, 14 Feb 2006 16:23:57 +0000 -From: Ralf Baechle <ralf@linux-mips.org> -To: Greg KH <gregkh@suse.de> -Cc: "David S. Miller" <davem@davemloft.net>, Mark E Mason <mark.e.mason@broadcom.com> -Subject: PCI: Avoid leaving MASTER_ABORT disabled permanently when returning from pci_scan_bridge. -Message-ID: <20060214162357.GB21016@linux-mips.org> -Content-Disposition: inline - -> On Mon, Feb 13, 2006 at 05:13:21PM -0800, David S. Miller wrote: -> > -> > In drivers/pci/probe.c:pci_scan_bridge(), if this is not the first -> > pass (pass != 0) we don't restore the PCI_BRIDGE_CONTROL_REGISTER and -> > thus leave PCI_BRIDGE_CTL_MASTER_ABORT off: -> > -> > int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass) -> > { -> > ... -> > /* Disable MasterAbortMode during probing to avoid reporting -> > of bus errors (in some architectures) */ -> > pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl); -> > pci_write_config_word(dev, PCI_BRIDGE_CONTROL, -> > bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT); -> > ... -> > if ((buses & 0xffff00) && !pcibios_assign_all_busses() && !is_cardbus) { -> > unsigned int cmax, busnr; -> > /* -> > * Bus already configured by firmware, process it in the first -> > * pass and just note the configuration. -> > */ -> > if (pass) -> > return max; -> > ... -> > } -> > -> > pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl); -> > ... -> > -> > This doesn't seem intentional. - -Agreed, looks like an accident. The patch [1] originally came from Kip -Walker (Broadcom back then) between 2.6.0-test3 and 2.6.0-test4. As I -recall it was supposed to fix an issue with with PCI aborts being -signalled by the PCI bridge of the Broadcom BCM1250 family of SOCs when -probing behind pci_scan_bridge. It is undeseriable to disable -PCI_BRIDGE_CTL_MASTER_ABORT in pci_{read,write)_config_* and the -behaviour wasn't considered a bug in need of a workaround, so this was -put in probe.c. - -I don't have an affected system at hand, so can't really test but I -propose something like the below patch. - -[1] http://www.linux-mips.org/git?p=linux.git;a=commit;h=599457e0cb702a31a3247ea6a5d9c6c99c4cf195 - -[PCI] Avoid leaving MASTER_ABORT disabled permanently when returning from pci_scan_bridge. - -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/probe.c | 15 ++++++++------- - 1 file changed, 8 insertions(+), 7 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/probe.c -+++ gregkh-2.6/drivers/pci/probe.c -@@ -456,7 +456,7 @@ int __devinit pci_scan_bridge(struct pci - * pass and just note the configuration. - */ - if (pass) -- return max; -+ goto out; - busnr = (buses >> 8) & 0xFF; - - /* -@@ -466,12 +466,12 @@ int __devinit pci_scan_bridge(struct pci - if (pci_find_bus(pci_domain_nr(bus), busnr)) { - printk(KERN_INFO "PCI: Bus %04x:%02x already known\n", - pci_domain_nr(bus), busnr); -- return max; -+ goto out; - } - - child = pci_add_new_bus(bus, dev, busnr); - if (!child) -- return max; -+ goto out; - child->primary = buses & 0xFF; - child->subordinate = (buses >> 16) & 0xFF; - child->bridge_ctl = bctl; -@@ -496,7 +496,7 @@ int __devinit pci_scan_bridge(struct pci - bus ranges. */ - pci_write_config_dword(dev, PCI_PRIMARY_BUS, - buses & ~0xffffff); -- return max; -+ goto out; - } - - /* Clear errors */ -@@ -505,7 +505,7 @@ int __devinit pci_scan_bridge(struct pci - /* Prevent assigning a bus number that already exists. - * This can happen when a bridge is hot-plugged */ - if (pci_find_bus(pci_domain_nr(bus), max+1)) -- return max; -+ goto out; - child = pci_add_new_bus(bus, dev, ++max); - buses = (buses & 0xff000000) - | ((unsigned int)(child->primary) << 0) -@@ -581,8 +581,6 @@ int __devinit pci_scan_bridge(struct pci - pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max); - } - -- pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl); -- - sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); - - while (bus->parent) { -@@ -601,6 +599,9 @@ int __devinit pci_scan_bridge(struct pci - bus = bus->parent; - } - -+out: -+ pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl); -+ - return max; - } - diff --git a/pci/pci-clean-up-msi.c-a-bit.patch b/pci/pci-clean-up-msi.c-a-bit.patch deleted file mode 100644 index 8628e0fe8df26..0000000000000 --- a/pci/pci-clean-up-msi.c-a-bit.patch +++ /dev/null @@ -1,190 +0,0 @@ -From grundler@lackof.org Tue Jan 17 16:40:56 2006 -Date: Sat, 14 Jan 2006 00:34:53 -0700 -From: Grant Grundler <grundler@parisc-linux.org> -To: Greg KH <gregkh@suse.de> -Cc: Joe Perches <joe@perches.com>, Grant Grundler <grundler@parisc-linux.org>, Paul Mackerras <paulus@samba.org>, Mark Maule <maule@sgi.com>, Tony Luck <tony.luck@intel.com>, linux-ia64@vger.kernel.org -Subject: PCI: clean up msi.c a bit -Message-ID: <20060114073453.GA24259@colo.lackof.org> -Content-Disposition: inline - -Clean up: move assignments outside of if() statements. -AFAICT, no functional change. Easier to read/understand. - -Depends on "[PATCH 1/3] msi vector targeting abstractions" -by Mark Maule <maule@sgi.com>. -I expect one hunk to fail if applied against 2.6.15. - -This is essentially Joe Perches' patch. -I've cleaned up the one instance added by Mark's patch. - -Signed-off-by: Grant Grundler <grundler@parisc-linux.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/msi.c | 55 ++++++++++++++++++++++++++++++++++-------------------- - drivers/pci/pci.c | 5 +--- - 2 files changed, 37 insertions(+), 23 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/msi.c -+++ gregkh-2.6/drivers/pci/msi.c -@@ -103,9 +103,9 @@ static void set_msi_affinity(unsigned in - switch (entry->msi_attrib.type) { - case PCI_CAP_ID_MSI: - { -- int pos; -+ int pos = pci_find_capability(entry->dev, PCI_CAP_ID_MSI); - -- if (!(pos = pci_find_capability(entry->dev, PCI_CAP_ID_MSI))) -+ if (!pos) - return; - - pci_read_config_dword(entry->dev, msi_lower_address_reg(pos), -@@ -347,9 +347,9 @@ static int assign_msi_vector(void) - - static int get_new_vector(void) - { -- int vector; -+ int vector = assign_msi_vector(); - -- if ((vector = assign_msi_vector()) > 0) -+ if (vector > 0) - set_intr_gate(vector, interrupt[vector]); - - return vector; -@@ -369,7 +369,8 @@ static int msi_init(void) - return status; - } - -- if ((status = msi_cache_init()) < 0) { -+ status = msi_cache_init(); -+ if (status < 0) { - pci_msi_enable = 0; - printk(KERN_WARNING "PCI: MSI cache init failed\n"); - return status; -@@ -523,10 +524,12 @@ static int msi_capability_init(struct pc - pos = pci_find_capability(dev, PCI_CAP_ID_MSI); - pci_read_config_word(dev, msi_control_reg(pos), &control); - /* MSI Entry Initialization */ -- if (!(entry = alloc_msi_entry())) -+ entry = alloc_msi_entry(); -+ if (!entry) - return -ENOMEM; - -- if ((vector = get_msi_vector(dev)) < 0) { -+ vector = get_msi_vector(dev); -+ if (vector < 0) { - kmem_cache_free(msi_cachep, entry); - return -EBUSY; - } -@@ -620,7 +623,8 @@ static int msix_capability_init(struct p - entry = alloc_msi_entry(); - if (!entry) - break; -- if ((vector = get_msi_vector(dev)) < 0) -+ vector = get_msi_vector(dev); -+ if (vector < 0) - break; - - j = entries[i].entry; -@@ -701,10 +705,12 @@ int pci_enable_msi(struct pci_dev* dev) - - temp = dev->irq; - -- if ((status = msi_init()) < 0) -+ status = msi_init(); -+ if (status < 0) - return status; - -- if (!(pos = pci_find_capability(dev, PCI_CAP_ID_MSI))) -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSI); -+ if (!pos) - return -EINVAL; - - pci_read_config_word(dev, msi_control_reg(pos), &control); -@@ -728,8 +734,8 @@ int pci_enable_msi(struct pci_dev* dev) - dev->irq = temp; - } - /* Check whether driver already requested for MSI-X vectors */ -- if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSIX)) > 0 && -- !msi_lookup_vector(dev, PCI_CAP_ID_MSIX)) { -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); -+ if (pos > 0 && !msi_lookup_vector(dev, PCI_CAP_ID_MSIX)) { - printk(KERN_INFO "PCI: %s: Can't enable MSI. " - "Device already has MSI-X vectors assigned\n", - pci_name(dev)); -@@ -755,7 +761,10 @@ void pci_disable_msi(struct pci_dev* dev - u16 control; - unsigned long flags; - -- if (!dev || !(pos = pci_find_capability(dev, PCI_CAP_ID_MSI))) -+ if (!dev) -+ return; -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSI); -+ if (!pos) - return; - - pci_read_config_word(dev, msi_control_reg(pos), &control); -@@ -924,10 +933,12 @@ int pci_enable_msix(struct pci_dev* dev, - if (!pci_msi_enable || !dev || !entries) - return -EINVAL; - -- if ((status = msi_init()) < 0) -+ status = msi_init(); -+ if (status < 0) - return status; - -- if (!(pos = pci_find_capability(dev, PCI_CAP_ID_MSIX))) -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); -+ if (!pos) - return -EINVAL; - - pci_read_config_word(dev, msi_control_reg(pos), &control); -@@ -1006,7 +1017,11 @@ void pci_disable_msix(struct pci_dev* de - int pos, temp; - u16 control; - -- if (!dev || !(pos = pci_find_capability(dev, PCI_CAP_ID_MSIX))) -+ if (!dev) -+ return; -+ -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); -+ if (!pos) - return; - - pci_read_config_word(dev, msi_control_reg(pos), &control); -@@ -1066,8 +1081,8 @@ void msi_remove_pci_irq_vectors(struct p - return; - - temp = dev->irq; /* Save IOAPIC IRQ */ -- if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSI)) > 0 && -- !msi_lookup_vector(dev, PCI_CAP_ID_MSI)) { -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSI); -+ if (pos > 0 && !msi_lookup_vector(dev, PCI_CAP_ID_MSI)) { - spin_lock_irqsave(&msi_lock, flags); - state = msi_desc[dev->irq]->msi_attrib.state; - spin_unlock_irqrestore(&msi_lock, flags); -@@ -1080,8 +1095,8 @@ void msi_remove_pci_irq_vectors(struct p - msi_free_vector(dev, dev->irq, 0); - dev->irq = temp; /* Restore IOAPIC IRQ */ - } -- if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSIX)) > 0 && -- !msi_lookup_vector(dev, PCI_CAP_ID_MSIX)) { -+ pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); -+ if (pos > 0 && !msi_lookup_vector(dev, PCI_CAP_ID_MSIX)) { - int vector, head, tail = 0, warning = 0; - void __iomem *base = NULL; - ---- gregkh-2.6.orig/drivers/pci/pci.c -+++ gregkh-2.6/drivers/pci/pci.c -@@ -495,9 +495,8 @@ pci_enable_device_bars(struct pci_dev *d - int - pci_enable_device(struct pci_dev *dev) - { -- int err; -- -- if ((err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1))) -+ int err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1); -+ if (err) - return err; - pci_fixup_device(pci_fixup_enable, dev); - dev->is_enabled = 1; diff --git a/pci/pci-cpqphp_ctrl.c-board_replaced-remove-dead-code.patch b/pci/pci-cpqphp_ctrl.c-board_replaced-remove-dead-code.patch deleted file mode 100644 index d385fa73089cd..0000000000000 --- a/pci/pci-cpqphp_ctrl.c-board_replaced-remove-dead-code.patch +++ /dev/null @@ -1,140 +0,0 @@ -From owner-linux-pci@atrey.karlin.mff.cuni.cz Sun Feb 26 13:16:54 2006 -Date: Sun, 26 Feb 2006 22:16:51 +0100 -From: Adrian Bunk <bunk@stusta.de> -To: greg@kroah.com -Cc: linux-pci@atrey.karlin.mff.cuni.cz, linux-kernel@vger.kernel.org -Subject: PCI: cpqphp_ctrl.c: board_replaced(): remove dead code -Message-ID: <20060226211651.GN3674@stusta.de> -Content-Disposition: inline - -The Coverity checker correctly noted, that in function board_replaced in -drivers/pci/hotplug/cpqphp_ctrl.c, the variable src always has the -value 8, and therefore much code after the - -... - if (rc || src) { -... - if (rc) - return rc; - else - return 1; - } -... - - -can never be called. - -This patch removes the unreachable code in this function fixing kernel -Bugzilla #6073. - - -Signed-off-by: Adrian Bunk <bunk@stusta.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/cpqphp_ctrl.c | 76 +++++++------------------------------- - 1 file changed, 14 insertions(+), 62 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/cpqphp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/cpqphp_ctrl.c -@@ -1282,9 +1282,7 @@ static u32 board_replaced(struct pci_fun - u8 hp_slot; - u8 temp_byte; - u8 adapter_speed; -- u32 index; - u32 rc = 0; -- u32 src = 8; - - hp_slot = func->device - ctrl->slot_device_offset; - -@@ -1368,68 +1366,17 @@ static u32 board_replaced(struct pci_fun - - rc = cpqhp_configure_board(ctrl, func); - -- if (rc || src) { -- /* If configuration fails, turn it off -- * Get slot won't work for devices behind -- * bridges, but in this case it will always be -- * called for the "base" bus/dev/func of an -- * adapter. */ -- -- mutex_lock(&ctrl->crit_sect); -- -- amber_LED_on (ctrl, hp_slot); -- green_LED_off (ctrl, hp_slot); -- slot_disable (ctrl, hp_slot); -- -- set_SOGO(ctrl); -- -- /* Wait for SOBS to be unset */ -- wait_for_ctrl_irq (ctrl); -- -- mutex_unlock(&ctrl->crit_sect); -- -- if (rc) -- return rc; -- else -- return 1; -- } -- -- func->status = 0; -- func->switch_save = 0x10; -- -- index = 1; -- while (((func = cpqhp_slot_find(func->bus, func->device, index)) != NULL) && !rc) { -- rc |= cpqhp_configure_board(ctrl, func); -- index++; -- } -- -- if (rc) { -- /* If configuration fails, turn it off -- * Get slot won't work for devices behind -- * bridges, but in this case it will always be -- * called for the "base" bus/dev/func of an -- * adapter. */ -- -- mutex_lock(&ctrl->crit_sect); -- -- amber_LED_on (ctrl, hp_slot); -- green_LED_off (ctrl, hp_slot); -- slot_disable (ctrl, hp_slot); -- -- set_SOGO(ctrl); -- -- /* Wait for SOBS to be unset */ -- wait_for_ctrl_irq (ctrl); -- -- mutex_unlock(&ctrl->crit_sect); -- -- return rc; -- } -- /* Done configuring so turn LED on full time */ -+ /* If configuration fails, turn it off -+ * Get slot won't work for devices behind -+ * bridges, but in this case it will always be -+ * called for the "base" bus/dev/func of an -+ * adapter. */ - - mutex_lock(&ctrl->crit_sect); - -- green_LED_on (ctrl, hp_slot); -+ amber_LED_on (ctrl, hp_slot); -+ green_LED_off (ctrl, hp_slot); -+ slot_disable (ctrl, hp_slot); - - set_SOGO(ctrl); - -@@ -1437,7 +1384,12 @@ static u32 board_replaced(struct pci_fun - wait_for_ctrl_irq (ctrl); - - mutex_unlock(&ctrl->crit_sect); -- rc = 0; -+ -+ if (rc) -+ return rc; -+ else -+ return 1; -+ - } else { - /* Something is wrong - diff --git a/pci/pci-fix-pci_request_region-arg.patch b/pci/pci-fix-pci_request_region-arg.patch deleted file mode 100644 index 68cdd1f805a0d..0000000000000 --- a/pci/pci-fix-pci_request_region-arg.patch +++ /dev/null @@ -1,56 +0,0 @@ -From garzik@havoc.gtf.org Sat Mar 4 18:52:56 2006 -Date: Sat, 4 Mar 2006 21:52:42 -0500 -From: Jeff Garzik <jeff@garzik.org> -To: linux-kernel@vger.kernel.org -Cc: Greg KH <gregkh@suse.de>, akpm@osdl.org, torvalds@osdl.org -Subject: PCI: fix pci_request_region[s] arg -Message-ID: <20060305025242.GA11373@havoc.gtf.org> -Content-Disposition: inline - -From: Jeff Garzik <jeff@garzik.org> - - Add missing 'const' to pci_request_region[s] 'res_name' arg, - since we pass it directly to __request_region(), whose 'name' arg - is also const. - -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/pci.c | 4 ++-- - include/linux/pci.h | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/pci.c -+++ gregkh-2.6/drivers/pci/pci.c -@@ -639,7 +639,7 @@ void pci_release_region(struct pci_dev * - * Returns 0 on success, or %EBUSY on error. A warning - * message is also printed on failure. - */ --int pci_request_region(struct pci_dev *pdev, int bar, char *res_name) -+int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name) - { - if (pci_resource_len(pdev, bar) == 0) - return 0; -@@ -697,7 +697,7 @@ void pci_release_regions(struct pci_dev - * Returns 0 on success, or %EBUSY on error. A warning - * message is also printed on failure. - */ --int pci_request_regions(struct pci_dev *pdev, char *res_name) -+int pci_request_regions(struct pci_dev *pdev, const char *res_name) - { - int i; - ---- gregkh-2.6.orig/include/linux/pci.h -+++ gregkh-2.6/include/linux/pci.h -@@ -490,9 +490,9 @@ void pdev_sort_resources(struct pci_dev - void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), - int (*)(struct pci_dev *, u8, u8)); - #define HAVE_PCI_REQ_REGIONS 2 --int pci_request_regions(struct pci_dev *, char *); -+int pci_request_regions(struct pci_dev *, const char *); - void pci_release_regions(struct pci_dev *); --int pci_request_region(struct pci_dev *, int, char *); -+int pci_request_region(struct pci_dev *, int, const char *); - void pci_release_region(struct pci_dev *, int); - - /* drivers/pci/bus.c */ diff --git a/pci/pci-fix-problems-with-msi-x-on-ia64.patch b/pci/pci-fix-problems-with-msi-x-on-ia64.patch deleted file mode 100644 index be800511c194b..0000000000000 --- a/pci/pci-fix-problems-with-msi-x-on-ia64.patch +++ /dev/null @@ -1,115 +0,0 @@ -From grundler@cup.hp.com Thu Feb 16 23:58:22 2006 -Date: Thu, 16 Feb 2006 23:58:29 -0800 -From: Grant Grundler <iod00d@hp.com> -To: Greg KH <gregkh@suse.de> -Cc: "Miller, Mike (OS Dev)" <Mike.Miller@hp.com> -Subject: PCI: fix problems with MSI-X on ia64 -Message-ID: <20060217075829.GB22451@esmail.cup.hp.com> -Content-Disposition: inline - -Use "unsigned long" when dealing with PCI resources. -The BAR Indicator Register (BIR) can be a 64-bit value -or the resource could be a 64-bit host physical address. - -Enables ib_mthca and cciss drivers to use MSI-X on ia64 HW. -Problem showed up now because of new system firmware on one platform. -Symptom will either be memory corruption or MCA. - -Second part of this patch deals with "useless" code. -We walk through the steps to find the phys_addr and then -don't use the result. I suspect the intent was to zero -out the respective MSI-X entry but I'm not sure at the moment. -Delete the code inside the #if 0/#endif if it's really -not needed. - -Signed-off-by: Grant Grundler <iod00d@hp.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/msi.c | 37 ++++++++++++++++++++++++------------- - 1 file changed, 24 insertions(+), 13 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/msi.c -+++ gregkh-2.6/drivers/pci/msi.c -@@ -600,7 +600,8 @@ static int msix_capability_init(struct p - struct msg_address address; - struct msg_data data; - int vector, pos, i, j, nr_entries, temp = 0; -- u32 phys_addr, table_offset; -+ unsigned long phys_addr; -+ u32 table_offset; - u16 control; - u8 bir; - void __iomem *base; -@@ -609,11 +610,11 @@ static int msix_capability_init(struct p - /* Request & Map MSI-X table region */ - pci_read_config_word(dev, msi_control_reg(pos), &control); - nr_entries = multi_msix_capable(control); -- pci_read_config_dword(dev, msix_table_offset_reg(pos), -- &table_offset); -+ -+ pci_read_config_dword(dev, msix_table_offset_reg(pos), &table_offset); - bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK); -- phys_addr = pci_resource_start (dev, bir); -- phys_addr += (u32)(table_offset & ~PCI_MSIX_FLAGS_BIRMASK); -+ table_offset &= ~PCI_MSIX_FLAGS_BIRMASK; -+ phys_addr = pci_resource_start (dev, bir) + table_offset; - base = ioremap_nocache(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE); - if (base == NULL) - return -ENOMEM; -@@ -838,8 +839,10 @@ static int msi_free_vector(struct pci_de - * Detect last MSI-X vector to be released. - * Release the MSI-X memory-mapped table. - */ -+#if 0 - int pos, nr_entries; -- u32 phys_addr, table_offset; -+ unsigned long phys_addr; -+ u32 table_offset; - u16 control; - u8 bir; - -@@ -850,9 +853,12 @@ static int msi_free_vector(struct pci_de - pci_read_config_dword(dev, msix_table_offset_reg(pos), - &table_offset); - bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK); -- phys_addr = pci_resource_start (dev, bir); -- phys_addr += (u32)(table_offset & -- ~PCI_MSIX_FLAGS_BIRMASK); -+ table_offset &= ~PCI_MSIX_FLAGS_BIRMASK; -+ phys_addr = pci_resource_start(dev, bir) + table_offset; -+/* -+ * FIXME! and what did you want to do with phys_addr? -+ */ -+#endif - iounmap(base); - } - } -@@ -1119,7 +1125,9 @@ void msi_remove_pci_irq_vectors(struct p - msi_free_vector(dev, vector, 0); - if (warning) { - /* Force to release the MSI-X memory-mapped table */ -- u32 phys_addr, table_offset; -+#if 0 -+ unsigned long phys_addr; -+ u32 table_offset; - u16 control; - u8 bir; - -@@ -1128,9 +1136,12 @@ void msi_remove_pci_irq_vectors(struct p - pci_read_config_dword(dev, msix_table_offset_reg(pos), - &table_offset); - bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK); -- phys_addr = pci_resource_start (dev, bir); -- phys_addr += (u32)(table_offset & -- ~PCI_MSIX_FLAGS_BIRMASK); -+ table_offset &= ~PCI_MSIX_FLAGS_BIRMASK; -+ phys_addr = pci_resource_start(dev, bir) + table_offset; -+/* -+ * FIXME! and what did you want to do with phys_addr? -+ */ -+#endif - iounmap(base); - printk(KERN_WARNING "PCI: %s: msi_remove_pci_irq_vectors() " - "called without free_irq() on all MSI-X vectors\n", diff --git a/pci/pci-hotplug-add-common-acpi-functions-to-core.patch b/pci/pci-hotplug-add-common-acpi-functions-to-core.patch deleted file mode 100644 index 1f7a47a2382a4..0000000000000 --- a/pci/pci-hotplug-add-common-acpi-functions-to-core.patch +++ /dev/null @@ -1,1360 +0,0 @@ -From kristen.c.accardi@intel.com Fri Mar 3 10:10:22 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: PCI Hotplug: add common acpi functions to core -Date: Fri, 03 Mar 2006 10:16:05 -0800 -Message-Id: <1141409765.5649.6.camel@whizzy> - -shpchprm_acpi.c and pciehprm_acpi.c are nearly identical. In addition, -there are functions in both these files that are also in acpiphp_glue.c. -This patch will remove duplicate functions from shpchp, pciehp, and -acpiphp and move this functionality to pci_hotplug, as it is not -hardware specific. Get rid of shpchprm* and pciehprm* files since they -are no longer needed. shpchprm_nonacpi.c and pciehprm_nonacpi.c are -identical, as well as shpchprm_legacy.c and can be replaced with a -macro. - -This patch also changes acpiphp to use the common hpp code. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - ---- - drivers/pci/hotplug/Makefile | 17 -- - drivers/pci/hotplug/acpi_pcihp.c | 227 +++++++++++++++++++++++++++++ - drivers/pci/hotplug/acpiphp.h | 15 - - drivers/pci/hotplug/acpiphp_glue.c | 91 +---------- - drivers/pci/hotplug/pci_hotplug.h | 17 ++ - drivers/pci/hotplug/pciehp.h | 24 +-- - drivers/pci/hotplug/pciehp_hpc.c | 74 +++++++++ - drivers/pci/hotplug/pciehprm_acpi.c | 257 --------------------------------- - drivers/pci/hotplug/pciehprm_nonacpi.c | 47 ------ - drivers/pci/hotplug/shpchp.h | 30 ++- - drivers/pci/hotplug/shpchp_core.c | 17 ++ - drivers/pci/hotplug/shpchp_pci.c | 10 + - drivers/pci/hotplug/shpchprm_acpi.c | 186 ----------------------- - drivers/pci/hotplug/shpchprm_legacy.c | 54 ------ - drivers/pci/hotplug/shpchprm_nonacpi.c | 57 ------- - 15 files changed, 393 insertions(+), 730 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/Makefile -+++ gregkh-2.6/drivers/pci/hotplug/Makefile -@@ -22,6 +22,9 @@ ifdef CONFIG_HOTPLUG_PCI_CPCI - pci_hotplug-objs += cpci_hotplug_core.o \ - cpci_hotplug_pci.o - endif -+ifdef CONFIG_ACPI -+pci_hotplug-objs += acpi_pcihp.o -+endif - - cpqphp-objs := cpqphp_core.o \ - cpqphp_ctrl.o \ -@@ -51,23 +54,9 @@ pciehp-objs := pciehp_core.o \ - pciehp_ctrl.o \ - pciehp_pci.o \ - pciehp_hpc.o --ifdef CONFIG_ACPI -- pciehp-objs += pciehprm_acpi.o --else -- pciehp-objs += pciehprm_nonacpi.o --endif - - shpchp-objs := shpchp_core.o \ - shpchp_ctrl.o \ - shpchp_pci.o \ - shpchp_sysfs.o \ - shpchp_hpc.o --ifdef CONFIG_ACPI -- shpchp-objs += shpchprm_acpi.o --else -- ifdef CONFIG_HOTPLUG_PCI_SHPC_PHPRM_LEGACY -- shpchp-objs += shpchprm_legacy.o -- else -- shpchp-objs += shpchprm_nonacpi.o -- endif --endif ---- /dev/null -+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c -@@ -0,0 +1,227 @@ -+/* -+ * Common ACPI functions for hot plug platforms -+ * -+ * Copyright (C) 2006 Intel Corporation -+ * -+ * All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or (at -+ * your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT. See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ * Send feedback to <kristen.c.accardi@intel.com> -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/types.h> -+#include <linux/pci.h> -+#include <acpi/acpi.h> -+#include <acpi/acpi_bus.h> -+#include <acpi/actypes.h> -+#include "pci_hotplug.h" -+ -+#define METHOD_NAME__SUN "_SUN" -+#define METHOD_NAME__HPP "_HPP" -+#define METHOD_NAME_OSHP "OSHP" -+ -+/* acpi_path_name -+ * -+ * @handle - the acpi_handle of the object who's name you want. -+ * -+ * Caller must free buffer. -+ */ -+u8 * acpi_path_name(acpi_handle handle) -+{ -+ acpi_status status; -+ struct acpi_buffer ret_buf = {ACPI_ALLOCATE_BUFFER, NULL}; -+ union acpi_object *obj; -+ -+ status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &ret_buf); -+ if (ACPI_FAILURE(status)) { -+ return NULL; -+ } -+ obj = ret_buf.pointer; -+ return obj->string.pointer; -+} -+EXPORT_SYMBOL_GPL(acpi_path_name); -+ -+ -+ -+static acpi_status -+acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp) -+{ -+ acpi_status status; -+ u8 nui[4]; -+ struct acpi_buffer ret_buf = { 0, NULL}; -+ union acpi_object *ext_obj, *package; -+ u8 *path_name = acpi_path_name(handle); -+ int i, len = 0; -+ -+ /* get _hpp */ -+ status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf); -+ switch (status) { -+ case AE_BUFFER_OVERFLOW: -+ ret_buf.pointer = kmalloc (ret_buf.length, GFP_KERNEL); -+ if (!ret_buf.pointer) { -+ printk(KERN_ERR "%s:%s alloc for _HPP fail\n", -+ __FUNCTION__, path_name); -+ acpi_os_free(path_name); -+ return AE_NO_MEMORY; -+ } -+ status = acpi_evaluate_object(handle, METHOD_NAME__HPP, -+ NULL, &ret_buf); -+ if (ACPI_SUCCESS(status)) -+ break; -+ default: -+ if (ACPI_FAILURE(status)) { -+ pr_debug("%s:%s _HPP fail=0x%x\n", __FUNCTION__, -+ path_name, status); -+ acpi_os_free(path_name); -+ return status; -+ } -+ } -+ -+ ext_obj = (union acpi_object *) ret_buf.pointer; -+ if (ext_obj->type != ACPI_TYPE_PACKAGE) { -+ printk(KERN_ERR "%s:%s _HPP obj not a package\n", __FUNCTION__, -+ path_name); -+ status = AE_ERROR; -+ goto free_and_return; -+ } -+ -+ len = ext_obj->package.count; -+ package = (union acpi_object *) ret_buf.pointer; -+ for ( i = 0; (i < len) || (i < 4); i++) { -+ ext_obj = (union acpi_object *) &package->package.elements[i]; -+ switch (ext_obj->type) { -+ case ACPI_TYPE_INTEGER: -+ nui[i] = (u8)ext_obj->integer.value; -+ break; -+ default: -+ printk(KERN_ERR "%s:%s _HPP obj type incorrect\n", -+ __FUNCTION__, path_name); -+ status = AE_ERROR; -+ goto free_and_return; -+ } -+ } -+ -+ hpp->cache_line_size = nui[0]; -+ hpp->latency_timer = nui[1]; -+ hpp->enable_serr = nui[2]; -+ hpp->enable_perr = nui[3]; -+ -+ pr_debug(" _HPP: cache_line_size=0x%x\n", hpp->cache_line_size); -+ pr_debug(" _HPP: latency timer =0x%x\n", hpp->latency_timer); -+ pr_debug(" _HPP: enable SERR =0x%x\n", hpp->enable_serr); -+ pr_debug(" _HPP: enable PERR =0x%x\n", hpp->enable_perr); -+ -+free_and_return: -+ acpi_os_free(path_name); -+ kfree(ret_buf.pointer); -+ return status; -+} -+ -+ -+ -+/* acpi_run_oshp - get control of hotplug from the firmware -+ * -+ * @handle - the handle of the hotplug controller. -+ */ -+acpi_status acpi_run_oshp(acpi_handle handle) -+{ -+ acpi_status status; -+ u8 *path_name = acpi_path_name(handle); -+ -+ /* run OSHP */ -+ status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL); -+ if (ACPI_FAILURE(status)) -+ printk(KERN_ERR "%s:%s OSHP fails=0x%x\n", __FUNCTION__, -+ path_name, status); -+ else -+ pr_debug("%s:%s OSHP passes\n", __FUNCTION__, path_name); -+ acpi_os_free(path_name); -+ return status; -+} -+EXPORT_SYMBOL_GPL(acpi_run_oshp); -+ -+ -+ -+/* acpi_get_hp_params_from_firmware -+ * -+ * @dev - the pci_dev of the newly added device -+ * @hpp - allocated by the caller -+ */ -+acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev, -+ struct hotplug_params *hpp) -+{ -+ acpi_status status = AE_NOT_FOUND; -+ struct pci_dev *pdev = dev; -+ -+ /* -+ * _HPP settings apply to all child buses, until another _HPP is -+ * encountered. If we don't find an _HPP for the input pci dev, -+ * look for it in the parent device scope since that would apply to -+ * this pci dev. If we don't find any _HPP, use hardcoded defaults -+ */ -+ while (pdev && (ACPI_FAILURE(status))) { -+ acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev)); -+ if (!handle) -+ break; -+ status = acpi_run_hpp(handle, hpp); -+ if (!(pdev->bus->parent)) -+ break; -+ /* Check if a parent object supports _HPP */ -+ pdev = pdev->bus->parent->self; -+ } -+ return status; -+} -+EXPORT_SYMBOL_GPL(acpi_get_hp_params_from_firmware); -+ -+ -+/* acpi_root_bridge - check to see if this acpi object is a root bridge -+ * -+ * @handle - the acpi object in question. -+ */ -+int acpi_root_bridge(acpi_handle handle) -+{ -+ acpi_status status; -+ struct acpi_device_info *info; -+ struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; -+ int i; -+ -+ status = acpi_get_object_info(handle, &buffer); -+ if (ACPI_SUCCESS(status)) { -+ info = buffer.pointer; -+ if ((info->valid & ACPI_VALID_HID) && -+ !strcmp(PCI_ROOT_HID_STRING, -+ info->hardware_id.value)) { -+ acpi_os_free(buffer.pointer); -+ return 1; -+ } -+ if (info->valid & ACPI_VALID_CID) { -+ for (i=0; i < info->compatibility_id.count; i++) { -+ if (!strcmp(PCI_ROOT_HID_STRING, -+ info->compatibility_id.id[i].value)) { -+ acpi_os_free(buffer.pointer); -+ return 1; -+ } -+ } -+ } -+ acpi_os_free(buffer.pointer); -+ } -+ return 0; -+} -+EXPORT_SYMBOL_GPL(acpi_root_bridge); ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp.h -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp.h -@@ -64,19 +64,6 @@ struct slot { - struct acpiphp_slot *acpi_slot; - }; - --/** -- * struct hpp_param - ACPI 2.0 _HPP Hot Plug Parameters -- * @cache_line_size in DWORD -- * @latency_timer in PCI clock -- * @enable_SERR 0 or 1 -- * @enable_PERR 0 or 1 -- */ --struct hpp_param { -- u8 cache_line_size; -- u8 latency_timer; -- u8 enable_SERR; -- u8 enable_PERR; --}; - - - /** -@@ -100,7 +87,7 @@ struct acpiphp_bridge { - struct pci_dev *pci_dev; - - /* ACPI 2.0 _HPP parameters */ -- struct hpp_param hpp; -+ struct hotplug_params hpp; - - spinlock_t res_lock; - }; ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -285,57 +285,19 @@ static int detect_ejectable_slots(acpi_h - static void decode_hpp(struct acpiphp_bridge *bridge) - { - acpi_status status; -- struct acpi_buffer buffer = { .length = ACPI_ALLOCATE_BUFFER, -- .pointer = NULL}; -- union acpi_object *package; -- int i; -- -- /* default numbers */ -- bridge->hpp.cache_line_size = 0x10; -- bridge->hpp.latency_timer = 0x40; -- bridge->hpp.enable_SERR = 0; -- bridge->hpp.enable_PERR = 0; -- -- status = acpi_evaluate_object(bridge->handle, "_HPP", NULL, &buffer); - -+ status = acpi_get_hp_params_from_firmware(bridge->pci_dev, &bridge->hpp); - if (ACPI_FAILURE(status)) { -- dbg("_HPP evaluation failed\n"); -- return; -- } -- -- package = (union acpi_object *) buffer.pointer; -- -- if (!package || package->type != ACPI_TYPE_PACKAGE || -- package->package.count != 4 || !package->package.elements) { -- err("invalid _HPP object; ignoring\n"); -- goto err_exit; -+ /* use default numbers */ -+ bridge->hpp.cache_line_size = 0x10; -+ bridge->hpp.latency_timer = 0x40; -+ bridge->hpp.enable_serr = 0; -+ bridge->hpp.enable_perr = 0; - } -- -- for (i = 0; i < 4; i++) { -- if (package->package.elements[i].type != ACPI_TYPE_INTEGER) { -- err("invalid _HPP parameter type; ignoring\n"); -- goto err_exit; -- } -- } -- -- bridge->hpp.cache_line_size = package->package.elements[0].integer.value; -- bridge->hpp.latency_timer = package->package.elements[1].integer.value; -- bridge->hpp.enable_SERR = package->package.elements[2].integer.value; -- bridge->hpp.enable_PERR = package->package.elements[3].integer.value; -- -- dbg("_HPP parameter = (%02x, %02x, %02x, %02x)\n", -- bridge->hpp.cache_line_size, -- bridge->hpp.latency_timer, -- bridge->hpp.enable_SERR, -- bridge->hpp.enable_PERR); -- -- bridge->flags |= BRIDGE_HAS_HPP; -- -- err_exit: -- kfree(buffer.pointer); - } - - -+ - /* initialize miscellaneous stuff for both root and PCI-to-PCI bridge */ - static void init_bridge_misc(struct acpiphp_bridge *bridge) - { -@@ -1154,11 +1116,11 @@ static void program_hpp(struct pci_dev * - pci_write_config_byte(dev, PCI_LATENCY_TIMER, - bridge->hpp.latency_timer); - pci_read_config_word(dev, PCI_COMMAND, &pci_cmd); -- if (bridge->hpp.enable_SERR) -+ if (bridge->hpp.enable_serr) - pci_cmd |= PCI_COMMAND_SERR; - else - pci_cmd &= ~PCI_COMMAND_SERR; -- if (bridge->hpp.enable_PERR) -+ if (bridge->hpp.enable_perr) - pci_cmd |= PCI_COMMAND_PARITY; - else - pci_cmd &= ~PCI_COMMAND_PARITY; -@@ -1169,11 +1131,11 @@ static void program_hpp(struct pci_dev * - pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, - bridge->hpp.latency_timer); - pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl); -- if (bridge->hpp.enable_SERR) -+ if (bridge->hpp.enable_serr) - pci_bctl |= PCI_BRIDGE_CTL_SERR; - else - pci_bctl &= ~PCI_BRIDGE_CTL_SERR; -- if (bridge->hpp.enable_PERR) -+ if (bridge->hpp.enable_perr) - pci_bctl |= PCI_BRIDGE_CTL_PARITY; - else - pci_bctl &= ~PCI_BRIDGE_CTL_PARITY; -@@ -1193,6 +1155,7 @@ static void acpiphp_set_hpp_values(acpi_ - - memset(&bridge, 0, sizeof(bridge)); - bridge.handle = handle; -+ bridge.pci_dev = bus->self; - decode_hpp(&bridge); - list_for_each_entry(dev, &bus->devices, bus_list) - program_hpp(dev, &bridge); -@@ -1409,41 +1372,13 @@ void handle_hotplug_event_func(acpi_hand - } - } - --static int is_root_bridge(acpi_handle handle) --{ -- acpi_status status; -- struct acpi_device_info *info; -- struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; -- int i; -- -- status = acpi_get_object_info(handle, &buffer); -- if (ACPI_SUCCESS(status)) { -- info = buffer.pointer; -- if ((info->valid & ACPI_VALID_HID) && -- !strcmp(PCI_ROOT_HID_STRING, -- info->hardware_id.value)) { -- acpi_os_free(buffer.pointer); -- return 1; -- } -- if (info->valid & ACPI_VALID_CID) { -- for (i=0; i < info->compatibility_id.count; i++) { -- if (!strcmp(PCI_ROOT_HID_STRING, -- info->compatibility_id.id[i].value)) { -- acpi_os_free(buffer.pointer); -- return 1; -- } -- } -- } -- } -- return 0; --} - - static acpi_status - find_root_bridges(acpi_handle handle, u32 lvl, void *context, void **rv) - { - int *count = (int *)context; - -- if (is_root_bridge(handle)) { -+ if (acpi_root_bridge(handle)) { - acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, - handle_hotplug_event_bridge, NULL); - (*count)++; ---- gregkh-2.6.orig/drivers/pci/hotplug/pci_hotplug.h -+++ gregkh-2.6/drivers/pci/hotplug/pci_hotplug.h -@@ -176,5 +176,22 @@ extern int pci_hp_change_slot_info (stru - struct hotplug_slot_info *info); - extern struct subsystem pci_hotplug_slots_subsys; - -+struct hotplug_params { -+ u8 cache_line_size; -+ u8 latency_timer; -+ u8 enable_serr; -+ u8 enable_perr; -+}; -+ -+#ifdef CONFIG_ACPI -+#include <acpi/acpi.h> -+#include <acpi/acpi_bus.h> -+#include <acpi/actypes.h> -+extern acpi_status acpi_run_oshp(acpi_handle handle); -+extern acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev, -+ struct hotplug_params *hpp); -+extern u8 * acpi_path_name(acpi_handle handle); -+int acpi_root_bridge(acpi_handle handle); -+#endif - #endif - ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp.h -+++ gregkh-2.6/drivers/pci/hotplug/pciehp.h -@@ -50,12 +50,6 @@ extern int pciehp_force; - #define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg) - #define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg) - --struct hotplug_params { -- u8 cache_line_size; -- u8 latency_timer; -- u8 enable_serr; -- u8 enable_perr; --}; - - struct slot { - struct slot *next; -@@ -192,9 +186,6 @@ extern u8 pciehp_handle_power_fault (u8 - /* pci functions */ - extern int pciehp_configure_device (struct slot *p_slot); - extern int pciehp_unconfigure_device (struct slot *p_slot); --extern int pciehp_get_hp_hw_control_from_firmware(struct pci_dev *dev); --extern void pciehp_get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp); - - - -@@ -286,4 +277,19 @@ struct hpc_ops { - int (*check_lnk_status) (struct controller *ctrl); - }; - -+ -+#ifdef CONFIG_ACPI -+#define pciehp_get_hp_hw_control_from_firmware(dev) \ -+ pciehp_acpi_get_hp_hw_control_from_firmware(dev) -+static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev, -+ struct hotplug_params *hpp) -+{ -+ if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp))) -+ return -ENODEV; -+ return 0; -+} -+#else -+#define pciehp_get_hp_hw_control_from_firmware(dev) 0 -+#define pciehp_get_hp_params_from_firmware(dev, hpp) (-ENODEV) -+#endif /* CONFIG_ACPI */ - #endif /* _PCIEHP_H */ ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c -@@ -38,7 +38,10 @@ - - #include "../pci.h" - #include "pciehp.h" -- -+#include <acpi/acpi.h> -+#include <acpi/acpi_bus.h> -+#include <acpi/actypes.h> -+#include <linux/pci-acpi.h> - #ifdef DEBUG - #define DBG_K_TRACE_ENTRY ((unsigned int)0x00000001) /* On function entry */ - #define DBG_K_TRACE_EXIT ((unsigned int)0x00000002) /* On function exit */ -@@ -1236,6 +1239,75 @@ static struct hpc_ops pciehp_hpc_ops = { - .check_lnk_status = hpc_check_lnk_status, - }; - -+#ifdef CONFIG_ACPI -+int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev) -+{ -+ acpi_status status; -+ acpi_handle chandle, handle = DEVICE_ACPI_HANDLE(&(dev->dev)); -+ struct pci_dev *pdev = dev; -+ struct pci_bus *parent; -+ u8 *path_name = NULL; -+ -+ /* -+ * Per PCI firmware specification, we should run the ACPI _OSC -+ * method to get control of hotplug hardware before using it. -+ * If an _OSC is missing, we look for an OSHP to do the same thing. -+ * To handle different BIOS behavior, we look for _OSC and OSHP -+ * within the scope of the hotplug controller and its parents, upto -+ * the host bridge under which this controller exists. -+ */ -+ while (!handle) { -+ /* -+ * This hotplug controller was not listed in the ACPI name -+ * space at all. Try to get acpi handle of parent pci bus. -+ */ -+ if (!pdev || !pdev->bus->parent) -+ break; -+ parent = pdev->bus->parent; -+ dbg("Could not find %s in acpi namespace, trying parent\n", -+ pci_name(pdev)); -+ if (!parent->self) -+ /* Parent must be a host bridge */ -+ handle = acpi_get_pci_rootbridge_handle( -+ pci_domain_nr(parent), -+ parent->number); -+ else -+ handle = DEVICE_ACPI_HANDLE( -+ &(parent->self->dev)); -+ pdev = parent->self; -+ } -+ -+ while (handle) { -+ path_name = acpi_path_name(handle); -+ dbg("Trying to get hotplug control for %s \n", path_name); -+ status = pci_osc_control_set(handle, -+ OSC_PCI_EXPRESS_NATIVE_HP_CONTROL); -+ if (status == AE_NOT_FOUND) -+ status = acpi_run_oshp(handle); -+ if (ACPI_SUCCESS(status)) { -+ dbg("Gained control for hotplug HW for pci %s (%s)\n", -+ pci_name(dev), path_name); -+ acpi_os_free(path_name); -+ return 0; -+ } -+ if (acpi_root_bridge(handle)) -+ break; -+ chandle = handle; -+ status = acpi_get_parent(chandle, &handle); -+ if (ACPI_FAILURE(status)) -+ break; -+ } -+ -+ err("Cannot get control of hotplug hardware for pci %s\n", -+ pci_name(dev)); -+ if (path_name) -+ acpi_os_free(path_name); -+ return -1; -+} -+#endif -+ -+ -+ - int pcie_init(struct controller * ctrl, struct pcie_device *dev) - { - struct php_ctlr_state_s *php_ctlr, *p; ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehprm_acpi.c -+++ /dev/null -@@ -1,257 +0,0 @@ --/* -- * PCIEHPRM ACPI: PHP Resource Manager for ACPI platform -- * -- * Copyright (C) 2003-2004 Intel Corporation -- * -- * All rights reserved. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or (at -- * your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -- * NON INFRINGEMENT. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- * -- * Send feedback to <kristen.c.accardi@intel.com> -- * -- */ -- --#include <linux/module.h> --#include <linux/kernel.h> --#include <linux/types.h> --#include <linux/pci.h> --#include <linux/acpi.h> --#include <linux/pci-acpi.h> --#include <acpi/acpi_bus.h> --#include <acpi/actypes.h> --#include "pciehp.h" -- --#define METHOD_NAME__SUN "_SUN" --#define METHOD_NAME__HPP "_HPP" --#define METHOD_NAME_OSHP "OSHP" -- --static u8 * acpi_path_name( acpi_handle handle) --{ -- acpi_status status; -- static u8 path_name[ACPI_PATHNAME_MAX]; -- struct acpi_buffer ret_buf = { ACPI_PATHNAME_MAX, path_name }; -- -- memset(path_name, 0, sizeof (path_name)); -- status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &ret_buf); -- -- if (ACPI_FAILURE(status)) -- return NULL; -- else -- return path_name; --} -- --static acpi_status --acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp) --{ -- acpi_status status; -- u8 nui[4]; -- struct acpi_buffer ret_buf = { 0, NULL}; -- union acpi_object *ext_obj, *package; -- u8 *path_name = acpi_path_name(handle); -- int i, len = 0; -- -- /* get _hpp */ -- status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf); -- switch (status) { -- case AE_BUFFER_OVERFLOW: -- ret_buf.pointer = kmalloc (ret_buf.length, GFP_KERNEL); -- if (!ret_buf.pointer) { -- err ("%s:%s alloc for _HPP fail\n", __FUNCTION__, -- path_name); -- return AE_NO_MEMORY; -- } -- status = acpi_evaluate_object(handle, METHOD_NAME__HPP, -- NULL, &ret_buf); -- if (ACPI_SUCCESS(status)) -- break; -- default: -- if (ACPI_FAILURE(status)) { -- dbg("%s:%s _HPP fail=0x%x\n", __FUNCTION__, -- path_name, status); -- return status; -- } -- } -- -- ext_obj = (union acpi_object *) ret_buf.pointer; -- if (ext_obj->type != ACPI_TYPE_PACKAGE) { -- err ("%s:%s _HPP obj not a package\n", __FUNCTION__, -- path_name); -- status = AE_ERROR; -- goto free_and_return; -- } -- -- len = ext_obj->package.count; -- package = (union acpi_object *) ret_buf.pointer; -- for ( i = 0; (i < len) || (i < 4); i++) { -- ext_obj = (union acpi_object *) &package->package.elements[i]; -- switch (ext_obj->type) { -- case ACPI_TYPE_INTEGER: -- nui[i] = (u8)ext_obj->integer.value; -- break; -- default: -- err ("%s:%s _HPP obj type incorrect\n", __FUNCTION__, -- path_name); -- status = AE_ERROR; -- goto free_and_return; -- } -- } -- -- hpp->cache_line_size = nui[0]; -- hpp->latency_timer = nui[1]; -- hpp->enable_serr = nui[2]; -- hpp->enable_perr = nui[3]; -- -- dbg(" _HPP: cache_line_size=0x%x\n", hpp->cache_line_size); -- dbg(" _HPP: latency timer =0x%x\n", hpp->latency_timer); -- dbg(" _HPP: enable SERR =0x%x\n", hpp->enable_serr); -- dbg(" _HPP: enable PERR =0x%x\n", hpp->enable_perr); -- --free_and_return: -- kfree(ret_buf.pointer); -- return status; --} -- --static acpi_status acpi_run_oshp(acpi_handle handle) --{ -- acpi_status status; -- u8 *path_name = acpi_path_name(handle); -- -- /* run OSHP */ -- status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL); -- if (ACPI_FAILURE(status)) { -- dbg("%s:%s OSHP fails=0x%x\n", __FUNCTION__, path_name, -- status); -- } else { -- dbg("%s:%s OSHP passes\n", __FUNCTION__, path_name); -- } -- return status; --} -- --static int is_root_bridge(acpi_handle handle) --{ -- acpi_status status; -- struct acpi_device_info *info; -- struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; -- int i; -- -- status = acpi_get_object_info(handle, &buffer); -- if (ACPI_SUCCESS(status)) { -- info = buffer.pointer; -- if ((info->valid & ACPI_VALID_HID) && -- !strcmp(PCI_ROOT_HID_STRING, -- info->hardware_id.value)) { -- acpi_os_free(buffer.pointer); -- return 1; -- } -- if (info->valid & ACPI_VALID_CID) { -- for (i=0; i < info->compatibility_id.count; i++) { -- if (!strcmp(PCI_ROOT_HID_STRING, -- info->compatibility_id.id[i].value)) { -- acpi_os_free(buffer.pointer); -- return 1; -- } -- } -- } -- } -- return 0; --} -- --int pciehp_get_hp_hw_control_from_firmware(struct pci_dev *dev) --{ -- acpi_status status; -- acpi_handle chandle, handle = DEVICE_ACPI_HANDLE(&(dev->dev)); -- struct pci_dev *pdev = dev; -- struct pci_bus *parent; -- u8 *path_name; -- -- /* -- * Per PCI firmware specification, we should run the ACPI _OSC -- * method to get control of hotplug hardware before using it. -- * If an _OSC is missing, we look for an OSHP to do the same thing. -- * To handle different BIOS behavior, we look for _OSC and OSHP -- * within the scope of the hotplug controller and its parents, upto -- * the host bridge under which this controller exists. -- */ -- while (!handle) { -- /* -- * This hotplug controller was not listed in the ACPI name -- * space at all. Try to get acpi handle of parent pci bus. -- */ -- if (!pdev || !pdev->bus->parent) -- break; -- parent = pdev->bus->parent; -- dbg("Could not find %s in acpi namespace, trying parent\n", -- pci_name(pdev)); -- if (!parent->self) -- /* Parent must be a host bridge */ -- handle = acpi_get_pci_rootbridge_handle( -- pci_domain_nr(parent), -- parent->number); -- else -- handle = DEVICE_ACPI_HANDLE( -- &(parent->self->dev)); -- pdev = parent->self; -- } -- -- while (handle) { -- path_name = acpi_path_name(handle); -- dbg("Trying to get hotplug control for %s \n", path_name); -- status = pci_osc_control_set(handle, -- OSC_PCI_EXPRESS_NATIVE_HP_CONTROL); -- if (status == AE_NOT_FOUND) -- status = acpi_run_oshp(handle); -- if (ACPI_SUCCESS(status)) { -- dbg("Gained control for hotplug HW for pci %s (%s)\n", -- pci_name(dev), path_name); -- return 0; -- } -- if (is_root_bridge(handle)) -- break; -- chandle = handle; -- status = acpi_get_parent(chandle, &handle); -- if (ACPI_FAILURE(status)) -- break; -- } -- -- err("Cannot get control of hotplug hardware for pci %s\n", -- pci_name(dev)); -- return -1; --} -- --void pciehp_get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp) --{ -- acpi_status status = AE_NOT_FOUND; -- struct pci_dev *pdev = dev; -- -- /* -- * _HPP settings apply to all child buses, until another _HPP is -- * encountered. If we don't find an _HPP for the input pci dev, -- * look for it in the parent device scope since that would apply to -- * this pci dev. If we don't find any _HPP, use hardcoded defaults -- */ -- while (pdev && (ACPI_FAILURE(status))) { -- acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev)); -- if (!handle) -- break; -- status = acpi_run_hpp(handle, hpp); -- if (!(pdev->bus->parent)) -- break; -- /* Check if a parent object supports _HPP */ -- pdev = pdev->bus->parent->self; -- } --} -- ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehprm_nonacpi.c -+++ /dev/null -@@ -1,47 +0,0 @@ --/* -- * PCIEHPRM NONACPI: PHP Resource Manager for Non-ACPI/Legacy platform -- * -- * Copyright (C) 1995,2001 Compaq Computer Corporation -- * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) -- * Copyright (C) 2001 IBM Corp. -- * Copyright (C) 2003-2004 Intel Corporation -- * -- * All rights reserved. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or (at -- * your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -- * NON INFRINGEMENT. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- * -- * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> -- * -- */ -- --#include <linux/module.h> --#include <linux/kernel.h> --#include <linux/types.h> --#include <linux/sched.h> --#include <linux/pci.h> --#include <linux/slab.h> --#include "pciehp.h" -- --void pciehp_get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp) --{ -- return; --} -- --int pciehp_get_hp_hw_control_from_firmware(struct pci_dev *dev) --{ -- return 0; --} ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -106,12 +106,6 @@ struct controller { - volatile int cmd_busy; - }; - --struct hotplug_params { -- u8 cache_line_size; -- u8 latency_timer; -- u8 enable_serr; -- u8 enable_perr; --}; - - /* Define AMD SHPC ID */ - #define PCI_DEVICE_ID_AMD_GOLAM_7450 0x7450 -@@ -193,15 +187,29 @@ extern u8 shpchp_handle_power_fault(u8 h - extern int shpchp_save_config(struct controller *ctrl, int busnumber, int num_ctlr_slots, int first_device_num); - extern int shpchp_configure_device(struct slot *p_slot); - extern int shpchp_unconfigure_device(struct slot *p_slot); --extern void get_hp_hw_control_from_firmware(struct pci_dev *dev); --extern void get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp); --extern int shpchprm_get_physical_slot_number(struct controller *ctrl, -- u32 *sun, u8 busnum, u8 devnum); - extern void shpchp_remove_ctrl_files(struct controller *ctrl); - extern void cleanup_slots(struct controller *ctrl); - extern void queue_pushbutton_work(void *data); - -+ -+#ifdef CONFIG_ACPI -+static inline int get_hp_params_from_firmware(struct pci_dev *dev, -+ struct hotplug_params *hpp) -+{ -+ if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp))) -+ return -ENODEV; -+ return 0; -+} -+#define get_hp_hw_control_from_firmware(pdev) \ -+ do { \ -+ if (DEVICE_ACPI_HANDLE(&(pdev->dev))) \ -+ acpi_run_oshp(DEVICE_ACPI_HANDLE(&(pdev->dev))); \ -+ } while (0) -+#else -+#define get_hp_params_from_firmware(dev, hpp) (-ENODEV) -+#define get_hp_hw_control_from_firmware(dev) do { } while (0) -+#endif -+ - struct ctrl_reg { - volatile u32 base_offset; - volatile u32 slot_avail1; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -104,6 +104,23 @@ static void make_slot_name(struct slot * - slot->bus, slot->number); - } - -+ -+ -+ -+static int -+shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, -+ u8 busnum, u8 devnum) -+{ -+ int offset = devnum - ctrl->slot_device_offset; -+ -+ dbg("%s: ctrl->slot_num_inc %d, offset %d\n", __FUNCTION__, -+ ctrl->slot_num_inc, offset); -+ *sun = (u8) (ctrl->first_slot + ctrl->slot_num_inc *offset); -+ return 0; -+} -+ -+ -+ - static int init_slots(struct controller *ctrl) - { - struct slot *slot; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_pci.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_pci.c -@@ -38,7 +38,7 @@ static void program_fw_provided_values(s - { - u16 pci_cmd, pci_bctl; - struct pci_dev *cdev; -- struct hotplug_params hpp = {0x8, 0x40, 0, 0}; /* defaults */ -+ struct hotplug_params hpp; - - /* Program hpp values for this device */ - if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL || -@@ -46,7 +46,13 @@ static void program_fw_provided_values(s - (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI))) - return; - -- get_hp_params_from_firmware(dev, &hpp); -+ /* use default values if we can't get them from firmware */ -+ if (get_hp_params_from_firmware(dev, &hpp)) { -+ hpp.cache_line_size = 8; -+ hpp.latency_timer = 0x40; -+ hpp.enable_serr = 0; -+ hpp.enable_perr = 0; -+ } - - pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp.cache_line_size); - pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp.latency_timer); ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchprm_acpi.c -+++ /dev/null -@@ -1,186 +0,0 @@ --/* -- * SHPCHPRM ACPI: PHP Resource Manager for ACPI platform -- * -- * Copyright (C) 2003-2004 Intel Corporation -- * -- * All rights reserved. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or (at -- * your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -- * NON INFRINGEMENT. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- * -- * Send feedback to <kristen.c.accardi@intel.com> -- * -- */ -- --#include <linux/module.h> --#include <linux/kernel.h> --#include <linux/types.h> --#include <linux/pci.h> --#include <acpi/acpi.h> --#include <acpi/acpi_bus.h> --#include <acpi/actypes.h> --#include "shpchp.h" -- --#define METHOD_NAME__SUN "_SUN" --#define METHOD_NAME__HPP "_HPP" --#define METHOD_NAME_OSHP "OSHP" -- --static u8 * acpi_path_name( acpi_handle handle) --{ -- acpi_status status; -- static u8 path_name[ACPI_PATHNAME_MAX]; -- struct acpi_buffer ret_buf = { ACPI_PATHNAME_MAX, path_name }; -- -- memset(path_name, 0, sizeof (path_name)); -- status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &ret_buf); -- -- if (ACPI_FAILURE(status)) -- return NULL; -- else -- return path_name; --} -- --static acpi_status --acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp) --{ -- acpi_status status; -- u8 nui[4]; -- struct acpi_buffer ret_buf = { 0, NULL}; -- union acpi_object *ext_obj, *package; -- u8 *path_name = acpi_path_name(handle); -- int i, len = 0; -- -- /* get _hpp */ -- status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf); -- switch (status) { -- case AE_BUFFER_OVERFLOW: -- ret_buf.pointer = kmalloc (ret_buf.length, GFP_KERNEL); -- if (!ret_buf.pointer) { -- err ("%s:%s alloc for _HPP fail\n", __FUNCTION__, -- path_name); -- return AE_NO_MEMORY; -- } -- status = acpi_evaluate_object(handle, METHOD_NAME__HPP, -- NULL, &ret_buf); -- if (ACPI_SUCCESS(status)) -- break; -- default: -- if (ACPI_FAILURE(status)) { -- dbg("%s:%s _HPP fail=0x%x\n", __FUNCTION__, -- path_name, status); -- return status; -- } -- } -- -- ext_obj = (union acpi_object *) ret_buf.pointer; -- if (ext_obj->type != ACPI_TYPE_PACKAGE) { -- err ("%s:%s _HPP obj not a package\n", __FUNCTION__, -- path_name); -- status = AE_ERROR; -- goto free_and_return; -- } -- -- len = ext_obj->package.count; -- package = (union acpi_object *) ret_buf.pointer; -- for ( i = 0; (i < len) || (i < 4); i++) { -- ext_obj = (union acpi_object *) &package->package.elements[i]; -- switch (ext_obj->type) { -- case ACPI_TYPE_INTEGER: -- nui[i] = (u8)ext_obj->integer.value; -- break; -- default: -- err ("%s:%s _HPP obj type incorrect\n", __FUNCTION__, -- path_name); -- status = AE_ERROR; -- goto free_and_return; -- } -- } -- -- hpp->cache_line_size = nui[0]; -- hpp->latency_timer = nui[1]; -- hpp->enable_serr = nui[2]; -- hpp->enable_perr = nui[3]; -- -- dbg(" _HPP: cache_line_size=0x%x\n", hpp->cache_line_size); -- dbg(" _HPP: latency timer =0x%x\n", hpp->latency_timer); -- dbg(" _HPP: enable SERR =0x%x\n", hpp->enable_serr); -- dbg(" _HPP: enable PERR =0x%x\n", hpp->enable_perr); -- --free_and_return: -- kfree(ret_buf.pointer); -- return status; --} -- --static void acpi_run_oshp(acpi_handle handle) --{ -- acpi_status status; -- u8 *path_name = acpi_path_name(handle); -- -- /* run OSHP */ -- status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL); -- if (ACPI_FAILURE(status)) { -- err("%s:%s OSHP fails=0x%x\n", __FUNCTION__, path_name, -- status); -- } else { -- dbg("%s:%s OSHP passes\n", __FUNCTION__, path_name); -- } --} -- --int shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) --{ -- int offset = devnum - ctrl->slot_device_offset; -- -- dbg("%s: ctrl->slot_num_inc %d, offset %d\n", __FUNCTION__, ctrl->slot_num_inc, offset); -- *sun = (u8) (ctrl->first_slot + ctrl->slot_num_inc *offset); -- return 0; --} -- --void get_hp_hw_control_from_firmware(struct pci_dev *dev) --{ -- /* -- * OSHP is an optional ACPI firmware control method. If present, -- * we need to run it to inform BIOS that we will control SHPC -- * hardware from now on. -- */ -- acpi_handle handle = DEVICE_ACPI_HANDLE(&(dev->dev)); -- if (!handle) -- return; -- acpi_run_oshp(handle); --} -- --void get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp) --{ -- acpi_status status = AE_NOT_FOUND; -- struct pci_dev *pdev = dev; -- -- /* -- * _HPP settings apply to all child buses, until another _HPP is -- * encountered. If we don't find an _HPP for the input pci dev, -- * look for it in the parent device scope since that would apply to -- * this pci dev. If we don't find any _HPP, use hardcoded defaults -- */ -- while (pdev && (ACPI_FAILURE(status))) { -- acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev)); -- if (!handle) -- break; -- status = acpi_run_hpp(handle, hpp); -- if (!(pdev->bus->parent)) -- break; -- /* Check if a parent object supports _HPP */ -- pdev = pdev->bus->parent->self; -- } --} -- ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchprm_legacy.c -+++ /dev/null -@@ -1,54 +0,0 @@ --/* -- * SHPCHPRM Legacy: PHP Resource Manager for Non-ACPI/Legacy platform -- * -- * Copyright (C) 1995,2001 Compaq Computer Corporation -- * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) -- * Copyright (C) 2001 IBM Corp. -- * Copyright (C) 2003-2004 Intel Corporation -- * -- * All rights reserved. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or (at -- * your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -- * NON INFRINGEMENT. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- * -- * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> -- * -- */ -- --#include <linux/module.h> --#include <linux/kernel.h> --#include <linux/types.h> --#include <linux/pci.h> --#include "shpchp.h" -- --int shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) --{ -- int offset = devnum - ctrl->slot_device_offset; -- -- *sun = (u8) (ctrl->first_slot + ctrl->slot_num_inc * offset); -- return 0; --} -- --void get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp) --{ -- return; --} -- --void get_hp_hw_control_from_firmware(struct pci_dev *dev) --{ -- return; --} -- ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchprm_nonacpi.c -+++ /dev/null -@@ -1,57 +0,0 @@ --/* -- * SHPCHPRM NONACPI: PHP Resource Manager for Non-ACPI/Legacy platform -- * -- * Copyright (C) 1995,2001 Compaq Computer Corporation -- * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) -- * Copyright (C) 2001 IBM Corp. -- * Copyright (C) 2003-2004 Intel Corporation -- * -- * All rights reserved. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or (at -- * your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -- * NON INFRINGEMENT. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- * -- * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> -- * -- */ -- --#include <linux/config.h> --#include <linux/module.h> --#include <linux/kernel.h> --#include <linux/types.h> --#include <linux/pci.h> --#include <linux/slab.h> -- --#include "shpchp.h" -- --int shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) --{ -- int offset = devnum - ctrl->slot_device_offset; -- -- dbg("%s: ctrl->slot_num_inc %d, offset %d\n", __FUNCTION__, ctrl->slot_num_inc, offset); -- *sun = (u8) (ctrl->first_slot + ctrl->slot_num_inc * offset); -- return 0; --} -- --void get_hp_params_from_firmware(struct pci_dev *dev, -- struct hotplug_params *hpp) --{ -- return; --} -- --void get_hp_hw_control_from_firmware(struct pci_dev *dev) --{ -- return; --} diff --git a/pci/pci-hotplug-convert-semaphores-to-mutex.patch b/pci/pci-hotplug-convert-semaphores-to-mutex.patch deleted file mode 100644 index 39f22e9e491a6..0000000000000 --- a/pci/pci-hotplug-convert-semaphores-to-mutex.patch +++ /dev/null @@ -1,1228 +0,0 @@ -From mingo@elte.hu Tue Jan 17 16:42:33 2006 -Date: Fri, 13 Jan 2006 16:02:15 +0100 -From: Ingo Molnar <mingo@elte.hu> -To: Andrew Morton <akpm@osdl.org>, gregkh@suse.de -Cc: Arjan van de Ven <arjan@infradead.org>, Jes Sorensen <jes@trained-monkey.org> -Subject: PCI hotplug: convert semaphores to mutex -Message-ID: <20060113150215.GA25327@elte.hu> -Content-Disposition: inline - -From: Ingo Molnar <mingo@elte.hu> - -semaphore to mutex conversion. - -the conversion was generated via scripts, and the result was validated -automatically via a script as well. - -build tested with allyesconfig. - -Signed-off-by: Ingo Molnar <mingo@elte.hu> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ----- - ---- - drivers/pci/hotplug/acpiphp.h | 3 - - drivers/pci/hotplug/acpiphp_glue.c | 12 ++-- - drivers/pci/hotplug/cpqphp.h | 3 - - drivers/pci/hotplug/cpqphp_core.c | 14 ++--- - drivers/pci/hotplug/cpqphp_ctrl.c | 56 ++++++++++----------- - drivers/pci/hotplug/ibmphp_hpc.c | 10 ++- - drivers/pci/hotplug/pciehp.h | 3 - - drivers/pci/hotplug/pciehp_core.c | 6 +- - drivers/pci/hotplug/pciehp_ctrl.c | 68 ++++++++++++------------- - drivers/pci/hotplug/pciehp_hpc.c | 2 - drivers/pci/hotplug/shpchp.h | 3 - - drivers/pci/hotplug/shpchp_ctrl.c | 98 ++++++++++++++++++------------------- - drivers/pci/hotplug/shpchp_hpc.c | 2 - 13 files changed, 143 insertions(+), 137 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp.h -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp.h -@@ -37,6 +37,7 @@ - - #include <linux/acpi.h> - #include <linux/kobject.h> /* for KOBJ_NAME_LEN */ -+#include <linux/mutex.h> - #include "pci_hotplug.h" - - #define dbg(format, arg...) \ -@@ -118,7 +119,7 @@ struct acpiphp_slot { - struct acpiphp_bridge *bridge; /* parent */ - struct list_head funcs; /* one slot may have different - objects (i.e. for each function) */ -- struct semaphore crit_sect; -+ struct mutex crit_sect; - - u32 id; /* slot id (serial #) for hotplug core */ - u8 device; /* pci device# */ ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -46,7 +46,7 @@ - #include <linux/kernel.h> - #include <linux/pci.h> - #include <linux/smp_lock.h> --#include <asm/semaphore.h> -+#include <linux/mutex.h> - - #include "../pci.h" - #include "pci_hotplug.h" -@@ -188,7 +188,7 @@ register_slot(acpi_handle handle, u32 lv - slot->device = device; - slot->sun = sun; - INIT_LIST_HEAD(&slot->funcs); -- init_MUTEX(&slot->crit_sect); -+ mutex_init(&slot->crit_sect); - - slot->next = bridge->slots; - bridge->slots = slot; -@@ -1401,7 +1401,7 @@ int acpiphp_enable_slot(struct acpiphp_s - { - int retval; - -- down(&slot->crit_sect); -+ mutex_lock(&slot->crit_sect); - - /* wake up all functions */ - retval = power_on_slot(slot); -@@ -1413,7 +1413,7 @@ int acpiphp_enable_slot(struct acpiphp_s - retval = enable_device(slot); - - err_exit: -- up(&slot->crit_sect); -+ mutex_unlock(&slot->crit_sect); - return retval; - } - -@@ -1424,7 +1424,7 @@ int acpiphp_disable_slot(struct acpiphp_ - { - int retval = 0; - -- down(&slot->crit_sect); -+ mutex_lock(&slot->crit_sect); - - /* unconfigure all functions */ - retval = disable_device(slot); -@@ -1437,7 +1437,7 @@ int acpiphp_disable_slot(struct acpiphp_ - goto err_exit; - - err_exit: -- up(&slot->crit_sect); -+ mutex_unlock(&slot->crit_sect); - return retval; - } - ---- gregkh-2.6.orig/drivers/pci/hotplug/cpqphp.h -+++ gregkh-2.6/drivers/pci/hotplug/cpqphp.h -@@ -32,6 +32,7 @@ - #include <linux/interrupt.h> - #include <asm/io.h> /* for read? and write? functions */ - #include <linux/delay.h> /* for delays */ -+#include <linux/mutex.h> - - #define MY_NAME "cpqphp" - -@@ -286,7 +287,7 @@ struct event_info { - struct controller { - struct controller *next; - u32 ctrl_int_comp; -- struct semaphore crit_sect; /* critical section semaphore */ -+ struct mutex crit_sect; /* critical section mutex */ - void __iomem *hpc_reg; /* cookie for our pci controller location */ - struct pci_resource *mem_head; - struct pci_resource *p_mem_head; ---- gregkh-2.6.orig/drivers/pci/hotplug/cpqphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/cpqphp_core.c -@@ -599,7 +599,7 @@ cpqhp_set_attention_status(struct contro - hp_slot = func->device - ctrl->slot_device_offset; - - // Wait for exclusive access to hardware -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (status == 1) { - amber_LED_on (ctrl, hp_slot); -@@ -607,7 +607,7 @@ cpqhp_set_attention_status(struct contro - amber_LED_off (ctrl, hp_slot); - } else { - // Done with exclusive hardware access -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return(1); - } - -@@ -617,7 +617,7 @@ cpqhp_set_attention_status(struct contro - wait_for_ctrl_irq (ctrl); - - // Done with exclusive hardware access -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return(0); - } -@@ -1084,7 +1084,7 @@ static int cpqhpc_probe(struct pci_dev * - dbg("bus device function rev: %d %d %d %d\n", ctrl->bus, - PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev); - -- init_MUTEX(&ctrl->crit_sect); -+ mutex_init(&ctrl->crit_sect); - init_waitqueue_head(&ctrl->queue); - - /* initialize our threads if they haven't already been started up */ -@@ -1223,7 +1223,7 @@ static int cpqhpc_probe(struct pci_dev * - - // turn off empty slots here unless command line option "ON" set - // Wait for exclusive access to hardware -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - num_of_slots = readb(ctrl->hpc_reg + SLOT_MASK) & 0x0F; - -@@ -1270,12 +1270,12 @@ static int cpqhpc_probe(struct pci_dev * - rc = init_SERR(ctrl); - if (rc) { - err("init_SERR failed\n"); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - goto err_free_irq; - } - - // Done with exclusive hardware access -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - cpqhp_create_debugfs_files(ctrl); - ---- gregkh-2.6.orig/drivers/pci/hotplug/cpqphp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/cpqphp_ctrl.c -@@ -1299,7 +1299,7 @@ static u32 board_replaced(struct pci_fun - **********************************/ - rc = CARD_FUNCTIONING; - } else { -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* turn on board without attaching to the bus */ - enable_slot_power (ctrl, hp_slot); -@@ -1333,12 +1333,12 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - if (rc) - return rc; - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - slot_enable (ctrl, hp_slot); - green_LED_blink (ctrl, hp_slot); -@@ -1350,7 +1350,7 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - /* Wait for ~1 second because of hot plug spec */ - long_delay(1*HZ); -@@ -1375,7 +1375,7 @@ static u32 board_replaced(struct pci_fun - * called for the "base" bus/dev/func of an - * adapter. */ - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); -@@ -1386,7 +1386,7 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - if (rc) - return rc; -@@ -1410,7 +1410,7 @@ static u32 board_replaced(struct pci_fun - * called for the "base" bus/dev/func of an - * adapter. */ - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); -@@ -1421,13 +1421,13 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return rc; - } - /* Done configuring so turn LED on full time */ - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - green_LED_on (ctrl, hp_slot); - -@@ -1436,7 +1436,7 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - rc = 0; - } else { - /* Something is wrong -@@ -1445,7 +1445,7 @@ static u32 board_replaced(struct pci_fun - * in this case it will always be called for the "base" - * bus/dev/func of an adapter. */ - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); -@@ -1456,7 +1456,7 @@ static u32 board_replaced(struct pci_fun - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } - - } -@@ -1488,7 +1488,7 @@ static u32 board_added(struct pci_func * - dbg("%s: func->device, slot_offset, hp_slot = %d, %d ,%d\n", - __FUNCTION__, func->device, ctrl->slot_device_offset, hp_slot); - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* turn on board without attaching to the bus */ - enable_slot_power(ctrl, hp_slot); -@@ -1522,7 +1522,7 @@ static u32 board_added(struct pci_func * - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq(ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - if (rc) - return rc; -@@ -1532,7 +1532,7 @@ static u32 board_added(struct pci_func * - /* turn on board and blink green LED */ - - dbg("%s: before down\n", __FUNCTION__); -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - dbg("%s: after down\n", __FUNCTION__); - - dbg("%s: before slot_enable\n", __FUNCTION__); -@@ -1553,7 +1553,7 @@ static u32 board_added(struct pci_func * - dbg("%s: after wait_for_ctrl_irq\n", __FUNCTION__); - - dbg("%s: before up\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - dbg("%s: after up\n", __FUNCTION__); - - /* Wait for ~1 second because of hot plug spec */ -@@ -1607,7 +1607,7 @@ static u32 board_added(struct pci_func * - cpqhp_resource_sort_and_combine(&(ctrl->bus_head)); - - if (rc) { -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); -@@ -1618,7 +1618,7 @@ static u32 board_added(struct pci_func * - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } else { - cpqhp_save_slot_config(ctrl, func); -@@ -1640,7 +1640,7 @@ static u32 board_added(struct pci_func * - } - } while (new_slot); - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - green_LED_on (ctrl, hp_slot); - -@@ -1649,9 +1649,9 @@ static u32 board_added(struct pci_func * - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } else { -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); -@@ -1662,7 +1662,7 @@ static u32 board_added(struct pci_func * - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return rc; - } -@@ -1721,7 +1721,7 @@ static u32 remove_board(struct pci_func - func->status = 0x01; - func->configured = 0; - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - green_LED_off (ctrl, hp_slot); - slot_disable (ctrl, hp_slot); -@@ -1736,7 +1736,7 @@ static u32 remove_board(struct pci_func - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - if (!replace_flag && ctrl->add_support) { - while (func) { -@@ -1899,7 +1899,7 @@ static void interrupt_event_handler(stru - dbg("button cancel\n"); - del_timer(&p_slot->task_event); - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (p_slot->state == BLINKINGOFF_STATE) { - /* slot is on */ -@@ -1922,7 +1922,7 @@ static void interrupt_event_handler(stru - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } - /*** button Released (No action on press...) */ - else if (ctrl->event_queue[loop].event_type == INT_BUTTON_RELEASE) { -@@ -1937,7 +1937,7 @@ static void interrupt_event_handler(stru - p_slot->state = BLINKINGON_STATE; - info(msg_button_on, p_slot->number); - } -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - dbg("blink green LED and turn off amber\n"); - -@@ -1949,7 +1949,7 @@ static void interrupt_event_handler(stru - /* Wait for SOBS to be unset */ - wait_for_ctrl_irq (ctrl); - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - init_timer(&p_slot->task_event); - p_slot->hp_slot = hp_slot; - p_slot->ctrl = ctrl; ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_hpc.c -@@ -34,6 +34,8 @@ - #include <linux/pci.h> - #include <linux/smp_lock.h> - #include <linux/init.h> -+#include <linux/mutex.h> -+ - #include "ibmphp.h" - - static int to_debug = FALSE; -@@ -101,7 +103,7 @@ static int to_debug = FALSE; - //---------------------------------------------------------------------------- - static int ibmphp_shutdown; - static int tid_poll; --static struct semaphore sem_hpcaccess; // lock access to HPC -+static struct mutex sem_hpcaccess; // lock access to HPC - static struct semaphore semOperations; // lock all operations and - // access to data structures - static struct semaphore sem_exit; // make sure polling thread goes away -@@ -131,7 +133,7 @@ void __init ibmphp_hpc_initvars (void) - { - debug ("%s - Entry\n", __FUNCTION__); - -- init_MUTEX (&sem_hpcaccess); -+ mutex_init(&sem_hpcaccess); - init_MUTEX (&semOperations); - init_MUTEX_LOCKED (&sem_exit); - to_debug = FALSE; -@@ -778,7 +780,7 @@ int ibmphp_hpc_writeslot (struct slot * - *---------------------------------------------------------------------*/ - static void get_hpc_access (void) - { -- down (&sem_hpcaccess); -+ mutex_lock(&sem_hpcaccess); - } - - /*---------------------------------------------------------------------- -@@ -786,7 +788,7 @@ static void get_hpc_access (void) - *---------------------------------------------------------------------*/ - void free_hpc_access (void) - { -- up (&sem_hpcaccess); -+ mutex_unlock(&sem_hpcaccess); - } - - /*---------------------------------------------------------------------- ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp.h -+++ gregkh-2.6/drivers/pci/hotplug/pciehp.h -@@ -34,6 +34,7 @@ - #include <linux/delay.h> - #include <linux/sched.h> /* signal_pending() */ - #include <linux/pcieport_if.h> -+#include <linux/mutex.h> - #include "pci_hotplug.h" - - #define MY_NAME "pciehp" -@@ -96,7 +97,7 @@ struct php_ctlr_state_s { - #define MAX_EVENTS 10 - struct controller { - struct controller *next; -- struct semaphore crit_sect; /* critical section semaphore */ -+ struct mutex crit_sect; /* critical section mutex */ - struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ - int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_core.c -@@ -439,7 +439,7 @@ static int pciehp_probe(struct pcie_devi - } - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - t_slot->hpc_ops->get_adapter_status(t_slot, &value); /* Check if slot is occupied */ - -@@ -447,7 +447,7 @@ static int pciehp_probe(struct pcie_devi - rc = t_slot->hpc_ops->power_off_slot(t_slot); /* Power off slot if not occupied*/ - if (rc) { - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - goto err_out_free_ctrl_slot; - } else - /* Wait for the command to complete */ -@@ -455,7 +455,7 @@ static int pciehp_probe(struct pcie_devi - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return 0; - ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_ctrl.c -@@ -229,13 +229,13 @@ u8 pciehp_handle_power_fault(u8 hp_slot, - static void set_slot_off(struct controller *ctrl, struct slot * pslot) - { - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* turn off slot, turn on Amber LED, turn off Green LED if supported*/ - if (POWER_CTRL(ctrl->ctrlcap)) { - if (pslot->hpc_ops->power_off_slot(pslot)) { - err("%s: Issue of Slot Power Off command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return; - } - wait_for_ctrl_irq (ctrl); -@@ -249,14 +249,14 @@ static void set_slot_off(struct controll - if (ATTN_LED(ctrl->ctrlcap)) { - if (pslot->hpc_ops->set_attention_status(pslot, 1)) { - err("%s: Issue of Set Attention Led command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return; - } - wait_for_ctrl_irq (ctrl); - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } - - /** -@@ -279,13 +279,13 @@ static int board_added(struct slot *p_sl - ctrl->slot_device_offset, hp_slot); - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (POWER_CTRL(ctrl->ctrlcap)) { - /* Power on slot */ - rc = p_slot->hpc_ops->power_on_slot(p_slot); - if (rc) { -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return -1; - } - -@@ -301,7 +301,7 @@ static int board_added(struct slot *p_sl - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - /* Wait for ~1 second */ - wait_for_ctrl_irq (ctrl); -@@ -335,7 +335,7 @@ static int board_added(struct slot *p_sl - pci_fixup_device(pci_fixup_final, ctrl->pci_dev); - if (PWR_LED(ctrl->ctrlcap)) { - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - p_slot->hpc_ops->green_led_on(p_slot); - -@@ -343,7 +343,7 @@ static int board_added(struct slot *p_sl - wait_for_ctrl_irq (ctrl); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } - return 0; - -@@ -375,14 +375,14 @@ static int remove_board(struct slot *p_s - dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot); - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (POWER_CTRL(ctrl->ctrlcap)) { - /* power off slot */ - rc = p_slot->hpc_ops->power_off_slot(p_slot); - if (rc) { - err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - /* Wait for the command to complete */ -@@ -398,7 +398,7 @@ static int remove_board(struct slot *p_s - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return 0; - } -@@ -445,7 +445,7 @@ static void pciehp_pushbutton_thread(uns - - if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) { - /* Wait for exclusive access to hardware */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - p_slot->hpc_ops->green_led_off(p_slot); - -@@ -453,7 +453,7 @@ static void pciehp_pushbutton_thread(uns - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } -@@ -495,7 +495,7 @@ static void pciehp_surprise_rm_thread(un - - if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) { - /* Wait for exclusive access to hardware */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - p_slot->hpc_ops->green_led_off(p_slot); - -@@ -503,7 +503,7 @@ static void pciehp_surprise_rm_thread(un - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } -@@ -616,7 +616,7 @@ static void interrupt_event_handler(stru - switch (p_slot->state) { - case BLINKINGOFF_STATE: - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (PWR_LED(ctrl->ctrlcap)) { - p_slot->hpc_ops->green_led_on(p_slot); -@@ -630,11 +630,11 @@ static void interrupt_event_handler(stru - wait_for_ctrl_irq (ctrl); - } - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - break; - case BLINKINGON_STATE: - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (PWR_LED(ctrl->ctrlcap)) { - p_slot->hpc_ops->green_led_off(p_slot); -@@ -647,7 +647,7 @@ static void interrupt_event_handler(stru - wait_for_ctrl_irq (ctrl); - } - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - break; - default: -@@ -676,7 +676,7 @@ static void interrupt_event_handler(stru - } - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* blink green LED and turn off amber */ - if (PWR_LED(ctrl->ctrlcap)) { -@@ -693,7 +693,7 @@ static void interrupt_event_handler(stru - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - init_timer(&p_slot->task_event); - p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ -@@ -708,7 +708,7 @@ static void interrupt_event_handler(stru - if (POWER_CTRL(ctrl->ctrlcap)) { - dbg("power fault\n"); - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - if (ATTN_LED(ctrl->ctrlcap)) { - p_slot->hpc_ops->set_attention_status(p_slot, 1); -@@ -721,7 +721,7 @@ static void interrupt_event_handler(stru - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } - } - /***********SURPRISE REMOVAL********************/ -@@ -756,19 +756,19 @@ int pciehp_enable_slot(struct slot *p_sl - int rc; - - /* Check to see if (latch closed, card present, power off) */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); - if (rc || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - if (MRL_SENS(p_slot->ctrl->ctrlcap)) { - rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - } -@@ -777,11 +777,11 @@ int pciehp_enable_slot(struct slot *p_sl - rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - } -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - - p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - -@@ -806,13 +806,13 @@ int pciehp_disable_slot(struct slot *p_s - return 1; - - /* Check to see if (latch closed, card present, power on) */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - if (!HP_SUPR_RM(p_slot->ctrl->ctrlcap)) { - ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); - if (ret || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - } -@@ -821,7 +821,7 @@ int pciehp_disable_slot(struct slot *p_s - ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - if (ret || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - } -@@ -830,12 +830,12 @@ int pciehp_disable_slot(struct slot *p_s - ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (ret || !getstatus) { - info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return 1; - } - } - -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - - ret = remove_board(p_slot); - update_slot_info(p_slot); ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c -@@ -1334,7 +1334,7 @@ int pcie_init(struct controller * ctrl, - if (pci_enable_device(pdev)) - goto abort_free_ctlr; - -- init_MUTEX(&ctrl->crit_sect); -+ mutex_init(&ctrl->crit_sect); - /* setup wait queue */ - init_waitqueue_head(&ctrl->queue); - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -33,6 +33,7 @@ - #include <linux/pci.h> - #include <linux/delay.h> - #include <linux/sched.h> /* signal_pending(), struct timer_list */ -+#include <linux/mutex.h> - - #include "pci_hotplug.h" - -@@ -79,7 +80,7 @@ struct event_info { - - struct controller { - struct controller *next; -- struct semaphore crit_sect; /* critical section semaphore */ -+ struct mutex crit_sect; /* critical section mutex */ - struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ - int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -242,10 +242,10 @@ static int change_bus_speed(struct contr - int rc = 0; - - dbg("%s: change to speed %d\n", __FUNCTION__, speed); -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, speed))) { - err("%s: Issue of set bus speed mode command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - -@@ -253,10 +253,10 @@ static int change_bus_speed(struct contr - err("%s: Can't set bus speed/mode in the case of adapter & bus mismatch\n", - __FUNCTION__); - err("%s: Error code (%d)\n", __FUNCTION__, rc); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - -@@ -319,14 +319,14 @@ static int board_added(struct slot *p_sl - ctrl->slot_device_offset, hp_slot); - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* Power on slot without connecting to bus */ - rc = p_slot->hpc_ops->power_on_slot(p_slot); - if (rc) { - err("%s: Failed to power on slot\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return -1; - } - -@@ -334,7 +334,7 @@ static int board_added(struct slot *p_sl - if (rc) { - err("%s: Failed to power on slot, error code(%d)\n", __FUNCTION__, rc); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return -1; - } - -@@ -345,7 +345,7 @@ static int board_added(struct slot *p_sl - - if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, PCI_SPEED_33MHz))) { - err("%s: Issue of set bus speed mode command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - -@@ -353,19 +353,19 @@ static int board_added(struct slot *p_sl - err("%s: Can't set bus speed/mode in the case of adapter & bus mismatch\n", - __FUNCTION__); - err("%s: Error code (%d)\n", __FUNCTION__, rc); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { - err("%s: Issue of Slot Enable command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - - if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { - err("%s: Failed to enable slot, error code(%d)\n", __FUNCTION__, rc); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - } -@@ -380,7 +380,7 @@ static int board_added(struct slot *p_sl - if (rc || adapter_speed == PCI_SPEED_UNKNOWN) { - err("%s: Can't get adapter speed or bus mode mismatch\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - -@@ -388,7 +388,7 @@ static int board_added(struct slot *p_sl - if (rc || bus_speed == PCI_SPEED_UNKNOWN) { - err("%s: Can't get bus operation speed\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - -@@ -399,7 +399,7 @@ static int board_added(struct slot *p_sl - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - if ((rc = p_slot->hpc_ops->get_prog_int(p_slot, &pi))) { - err("%s: Can't get controller programming interface, set it to 1\n", __FUNCTION__); -@@ -481,21 +481,21 @@ static int board_added(struct slot *p_sl - return rc; - } - -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { - err("%s: Issue of Slot Enable command failed\n", __FUNCTION__); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - - if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { - err("%s: Failed to enable slot, error code(%d)\n", __FUNCTION__, rc); -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - /* Wait for ~1 second */ - wait_for_ctrl_irq (ctrl); -@@ -521,25 +521,25 @@ static int board_added(struct slot *p_sl - p_slot->pwr_save = 1; - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - p_slot->hpc_ops->green_led_on(p_slot); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return 0; - - err_exit: - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* turn off slot, turn on Amber LED, turn off Green LED */ - rc = p_slot->hpc_ops->slot_disable(p_slot); - if (rc) { - err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - -@@ -547,12 +547,12 @@ err_exit: - if (rc) { - err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - return(rc); - } -@@ -581,14 +581,14 @@ static int remove_board(struct slot *p_s - p_slot->status = 0x01; - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* turn off slot, turn on Amber LED, turn off Green LED */ - rc = p_slot->hpc_ops->slot_disable(p_slot); - if (rc) { - err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - -@@ -596,7 +596,7 @@ static int remove_board(struct slot *p_s - if (rc) { - err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - -@@ -604,12 +604,12 @@ static int remove_board(struct slot *p_s - if (rc) { - err("%s: Issue of Set Attention command failed\n", __FUNCTION__); - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - return rc; - } - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - p_slot->pwr_save = 0; - p_slot->is_a_board = 0; -@@ -656,12 +656,12 @@ static void shpchp_pushbutton_thread (un - - if (shpchp_enable_slot(p_slot)) { - /* Wait for exclusive access to hardware */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - p_slot->hpc_ops->green_led_off(p_slot); - - /* Done with exclusive hardware access */ -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } -@@ -768,25 +768,25 @@ static void interrupt_event_handler(stru - switch (p_slot->state) { - case BLINKINGOFF_STATE: - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - p_slot->hpc_ops->green_led_on(p_slot); - - p_slot->hpc_ops->set_attention_status(p_slot, 0); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - break; - case BLINKINGON_STATE: - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - p_slot->hpc_ops->green_led_off(p_slot); - - p_slot->hpc_ops->set_attention_status(p_slot, 0); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - break; - default: -@@ -813,7 +813,7 @@ static void interrupt_event_handler(stru - } - - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - /* blink green LED and turn off amber */ - p_slot->hpc_ops->green_led_blink(p_slot); -@@ -821,7 +821,7 @@ static void interrupt_event_handler(stru - p_slot->hpc_ops->set_attention_status(p_slot, 0); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - - init_timer(&p_slot->task_event); - p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ -@@ -834,14 +834,14 @@ static void interrupt_event_handler(stru - /***********POWER FAULT********************/ - dbg("%s: power fault\n", __FUNCTION__); - /* Wait for exclusive access to hardware */ -- down(&ctrl->crit_sect); -+ mutex_lock(&ctrl->crit_sect); - - p_slot->hpc_ops->set_attention_status(p_slot, 1); - - p_slot->hpc_ops->green_led_off(p_slot); - - /* Done with exclusive hardware access */ -- up(&ctrl->crit_sect); -+ mutex_unlock(&ctrl->crit_sect); - } else { - /* refresh notification */ - if (p_slot) -@@ -865,26 +865,26 @@ int shpchp_enable_slot (struct slot *p_s - int rc; - - /* Check to see if (latch closed, card present, power off) */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); - if (rc || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } - rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } - rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - - p_slot->is_a_board = 1; - -@@ -925,27 +925,27 @@ int shpchp_disable_slot (struct slot *p_ - return -ENODEV; - - /* Check to see if (latch closed, card present, power on) */ -- down(&p_slot->ctrl->crit_sect); -+ mutex_lock(&p_slot->ctrl->crit_sect); - - ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); - if (ret || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } - ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - if (ret || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } - ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (ret || !getstatus) { - info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - return -ENODEV; - } -- up(&p_slot->ctrl->crit_sect); -+ mutex_unlock(&p_slot->ctrl->crit_sect); - - ret = remove_board(p_slot); - update_slot_info(p_slot); ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -1454,7 +1454,7 @@ int shpc_init(struct controller * ctrl, - } - dbg("%s: php_ctlr->creg %p\n", __FUNCTION__, php_ctlr->creg); - -- init_MUTEX(&ctrl->crit_sect); -+ mutex_init(&ctrl->crit_sect); - /* Setup wait queue */ - init_waitqueue_head(&ctrl->queue); - diff --git a/pci/pci-hotplug-sn-fix-cleanup-on-hotplug-removal-of-ppb.patch b/pci/pci-hotplug-sn-fix-cleanup-on-hotplug-removal-of-ppb.patch deleted file mode 100644 index a2daeb5c18312..0000000000000 --- a/pci/pci-hotplug-sn-fix-cleanup-on-hotplug-removal-of-ppb.patch +++ /dev/null @@ -1,59 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Wed Mar 8 11:22:06 2006 -From: John Keller <jpk@sgi.com> -To: pcihpd-discuss@lists.sourceforge.net -Cc: gregkh@suse.de, John Keller <jpk@sgi.com> -Message-Id: <20060308192134.3879.40465.sendpatchset@attica.americas.sgi.com> -Subject: PCI Hotplug: SN: Fix cleanup on hotplug removal of PPB -Date: Wed, 08 Mar 2006 13:21:34 -0600 - -When doing a hotplug removal of a PPB, sn_bus_store_sysdata() -needs to be called for the PPB and all of its children. - -Acked-by: Prarit Bhargava <prarit@sgi.com> -Signed-off-by: John Keller <jpk@sgi.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/hotplug/sgi_hotplug.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/sgi_hotplug.c -+++ gregkh-2.6/drivers/pci/hotplug/sgi_hotplug.c -@@ -3,7 +3,7 @@ - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * -- * Copyright (C) 2005 Silicon Graphics, Inc. All rights reserved. -+ * Copyright (C) 2005-2006 Silicon Graphics, Inc. All rights reserved. - * - * This work was based on the 2.4/2.6 kernel development by Dick Reigner. - * Work to add BIOS PROM support was completed by Mike Habeck. -@@ -230,6 +230,13 @@ static void sn_bus_free_data(struct pci_ - list_for_each_entry(child, &subordinate_bus->devices, bus_list) - sn_bus_free_data(child); - } -+ /* -+ * Some drivers may use dma accesses during the -+ * driver remove function. We release the sysdata -+ * areas after the driver remove functions have -+ * been called. -+ */ -+ sn_bus_store_sysdata(dev); - sn_pci_unfixup_slot(dev); - } - -@@ -429,13 +436,6 @@ static int disable_slot(struct hotplug_s - PCI_DEVFN(slot->device_num + 1, - PCI_FUNC(func))); - if (dev) { -- /* -- * Some drivers may use dma accesses during the -- * driver remove function. We release the sysdata -- * areas after the driver remove functions have -- * been called. -- */ -- sn_bus_store_sysdata(dev); - sn_bus_free_data(dev); - pci_remove_bus_device(dev); - pci_dev_put(dev); diff --git a/pci/pci-kzalloc-conversion-in-drivers-pci.patch b/pci/pci-kzalloc-conversion-in-drivers-pci.patch deleted file mode 100644 index 620254c80a94b..0000000000000 --- a/pci/pci-kzalloc-conversion-in-drivers-pci.patch +++ /dev/null @@ -1,1020 +0,0 @@ -From snakebyte@gmx.de Tue Feb 28 06:34:53 2006 -Subject: PCI: kzalloc() conversion in drivers/pci -From: Eric Sesterhenn <snakebyte@gmx.de> -Cc: gregkh@suse.de -Date: Tue, 28 Feb 2006 15:34:49 +0100 -Message-Id: <1141137289.17108.3.camel@alice> - -this patch converts drivers/pci to kzalloc usage. -Compile tested with allyes config. - -Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/acpiphp_glue.c | 14 ++----- - drivers/pci/hotplug/cpci_hotplug_core.c | 9 +--- - drivers/pci/hotplug/cpqphp_core.c | 13 ++---- - drivers/pci/hotplug/fakephp.c | 9 +--- - drivers/pci/hotplug/ibmphp_core.c | 6 +-- - drivers/pci/hotplug/ibmphp_ebda.c | 57 +++++++--------------------- - drivers/pci/hotplug/ibmphp_pci.c | 63 ++++++++++---------------------- - drivers/pci/hotplug/ibmphp_res.c | 33 +++++----------- - drivers/pci/hotplug/pciehp_core.c | 13 ++---- - drivers/pci/hotplug/rpaphp_slot.c | 9 +--- - drivers/pci/pci-driver.c | 3 - - drivers/pci/pci-sysfs.c | 3 - - drivers/pci/pcie/portdrv_core.c | 3 - - drivers/pci/probe.c | 9 +--- - 14 files changed, 75 insertions(+), 169 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c -+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c -@@ -143,10 +143,9 @@ register_slot(acpi_handle handle, u32 lv - device = (adr >> 16) & 0xffff; - function = adr & 0xffff; - -- newfunc = kmalloc(sizeof(struct acpiphp_func), GFP_KERNEL); -+ newfunc = kzalloc(sizeof(struct acpiphp_func), GFP_KERNEL); - if (!newfunc) - return AE_NO_MEMORY; -- memset(newfunc, 0, sizeof(struct acpiphp_func)); - - INIT_LIST_HEAD(&newfunc->sibling); - newfunc->handle = handle; -@@ -189,13 +188,12 @@ register_slot(acpi_handle handle, u32 lv - } - - if (!slot) { -- slot = kmalloc(sizeof(struct acpiphp_slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(struct acpiphp_slot), GFP_KERNEL); - if (!slot) { - kfree(newfunc); - return AE_NO_MEMORY; - } - -- memset(slot, 0, sizeof(struct acpiphp_slot)); - slot->bridge = bridge; - slot->device = device; - slot->sun = sun; -@@ -376,12 +374,10 @@ static void add_host_bridge(acpi_handle - { - struct acpiphp_bridge *bridge; - -- bridge = kmalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL); -+ bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL); - if (bridge == NULL) - return; - -- memset(bridge, 0, sizeof(struct acpiphp_bridge)); -- - bridge->type = BRIDGE_TYPE_HOST; - bridge->handle = handle; - -@@ -398,14 +394,12 @@ static void add_p2p_bridge(acpi_handle * - { - struct acpiphp_bridge *bridge; - -- bridge = kmalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL); -+ bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL); - if (bridge == NULL) { - err("out of memory\n"); - return; - } - -- memset(bridge, 0, sizeof(struct acpiphp_bridge)); -- - bridge->type = BRIDGE_TYPE_P2P; - bridge->handle = handle; - ---- gregkh-2.6.orig/drivers/pci/hotplug/cpci_hotplug_core.c -+++ gregkh-2.6/drivers/pci/hotplug/cpci_hotplug_core.c -@@ -248,22 +248,19 @@ cpci_hp_register_bus(struct pci_bus *bus - * with the pci_hotplug subsystem. - */ - for (i = first; i <= last; ++i) { -- slot = kmalloc(sizeof (struct slot), GFP_KERNEL); -+ slot = kzalloc(sizeof (struct slot), GFP_KERNEL); - if (!slot) - goto error; -- memset(slot, 0, sizeof (struct slot)); - - hotplug_slot = -- kmalloc(sizeof (struct hotplug_slot), GFP_KERNEL); -+ kzalloc(sizeof (struct hotplug_slot), GFP_KERNEL); - if (!hotplug_slot) - goto error_slot; -- memset(hotplug_slot, 0, sizeof (struct hotplug_slot)); - slot->hotplug_slot = hotplug_slot; - -- info = kmalloc(sizeof (struct hotplug_slot_info), GFP_KERNEL); -+ info = kzalloc(sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!info) - goto error_hpslot; -- memset(info, 0, sizeof (struct hotplug_slot_info)); - hotplug_slot->info = info; - - name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); ---- gregkh-2.6.orig/drivers/pci/hotplug/cpqphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/cpqphp_core.c -@@ -347,26 +347,22 @@ static int ctrl_slot_setup(struct contro - slot_number = ctrl->first_slot; - - while (number_of_slots) { -- slot = kmalloc(sizeof(*slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(*slot), GFP_KERNEL); - if (!slot) - goto error; - -- memset(slot, 0, sizeof(struct slot)); -- slot->hotplug_slot = kmalloc(sizeof(*(slot->hotplug_slot)), -+ slot->hotplug_slot = kzalloc(sizeof(*(slot->hotplug_slot)), - GFP_KERNEL); - if (!slot->hotplug_slot) - goto error_slot; - hotplug_slot = slot->hotplug_slot; -- memset(hotplug_slot, 0, sizeof(struct hotplug_slot)); - - hotplug_slot->info = -- kmalloc(sizeof(*(hotplug_slot->info)), -+ kzalloc(sizeof(*(hotplug_slot->info)), - GFP_KERNEL); - if (!hotplug_slot->info) - goto error_hpslot; - hotplug_slot_info = hotplug_slot->info; -- memset(hotplug_slot_info, 0, -- sizeof(struct hotplug_slot_info)); - hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); - - if (!hotplug_slot->name) -@@ -854,13 +850,12 @@ static int cpqhpc_probe(struct pci_dev * - goto err_disable_device; - } - -- ctrl = (struct controller *) kmalloc(sizeof(struct controller), GFP_KERNEL); -+ ctrl = kzalloc(sizeof(struct controller), GFP_KERNEL); - if (!ctrl) { - err("%s : out of memory\n", __FUNCTION__); - rc = -ENOMEM; - goto err_disable_device; - } -- memset(ctrl, 0, sizeof(struct controller)); - - rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &subsystem_deviceid); - if (rc) { ---- gregkh-2.6.orig/drivers/pci/hotplug/fakephp.c -+++ gregkh-2.6/drivers/pci/hotplug/fakephp.c -@@ -95,15 +95,13 @@ static int add_slot(struct pci_dev *dev) - struct hotplug_slot *slot; - int retval = -ENOMEM; - -- slot = kmalloc(sizeof(struct hotplug_slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(struct hotplug_slot), GFP_KERNEL); - if (!slot) - goto error; -- memset(slot, 0, sizeof(*slot)); - -- slot->info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); -+ slot->info = kzalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); - if (!slot->info) - goto error_slot; -- memset(slot->info, 0, sizeof(struct hotplug_slot_info)); - - slot->info->power_status = 1; - slot->info->max_bus_speed = PCI_SPEED_UNKNOWN; -@@ -227,11 +225,10 @@ static void pci_rescan_bus(const struct - { - unsigned int devfn; - struct pci_dev *dev; -- dev = kmalloc(sizeof(struct pci_dev), GFP_KERNEL); -+ dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL); - if (!dev) - return; - -- memset(dev, 0, sizeof(dev)); - dev->bus = (struct pci_bus*)bus; - dev->sysdata = bus->sysdata; - for (devfn = 0; devfn < 0x100; devfn += 8) { ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_core.c -@@ -1141,7 +1141,7 @@ static int enable_slot(struct hotplug_sl - goto error_power; - } - -- slot_cur->func = kmalloc(sizeof(struct pci_func), GFP_KERNEL); -+ slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL); - if (!slot_cur->func) { - /* We cannot do update_slot_info here, since no memory for - * kmalloc n.e.ways, and update_slot_info allocates some */ -@@ -1149,7 +1149,6 @@ static int enable_slot(struct hotplug_sl - rc = -ENOMEM; - goto error_power; - } -- memset(slot_cur->func, 0, sizeof(struct pci_func)); - slot_cur->func->busno = slot_cur->bus; - slot_cur->func->device = slot_cur->device; - for (i = 0; i < 4; i++) -@@ -1252,13 +1251,12 @@ int ibmphp_do_disable_slot(struct slot * - - if (slot_cur->func == NULL) { - /* We need this for fncs's that were there on bootup */ -- slot_cur->func = kmalloc(sizeof(struct pci_func), GFP_KERNEL); -+ slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL); - if (!slot_cur->func) { - err("out of system memory\n"); - rc = -ENOMEM; - goto error; - } -- memset(slot_cur->func, 0, sizeof(struct pci_func)); - slot_cur->func->busno = slot_cur->bus; - slot_cur->func->device = slot_cur->device; - } ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_ebda.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_ebda.c -@@ -72,13 +72,7 @@ static int ebda_rio_table (void); - - static struct ebda_hpc_list * __init alloc_ebda_hpc_list (void) - { -- struct ebda_hpc_list *list; -- -- list = kmalloc (sizeof (struct ebda_hpc_list), GFP_KERNEL); -- if (!list) -- return NULL; -- memset (list, 0, sizeof (*list)); -- return list; -+ return kzalloc(sizeof(struct ebda_hpc_list), GFP_KERNEL); - } - - static struct controller *alloc_ebda_hpc (u32 slot_count, u32 bus_count) -@@ -87,21 +81,18 @@ static struct controller *alloc_ebda_hpc - struct ebda_hpc_slot *slots; - struct ebda_hpc_bus *buses; - -- controller = kmalloc (sizeof (struct controller), GFP_KERNEL); -+ controller = kzalloc(sizeof(struct controller), GFP_KERNEL); - if (!controller) - goto error; -- memset (controller, 0, sizeof (*controller)); - -- slots = kmalloc (sizeof (struct ebda_hpc_slot) * slot_count, GFP_KERNEL); -+ slots = kcalloc(slot_count, sizeof(struct ebda_hpc_slot), GFP_KERNEL); - if (!slots) - goto error_contr; -- memset (slots, 0, sizeof (*slots) * slot_count); - controller->slots = slots; - -- buses = kmalloc (sizeof (struct ebda_hpc_bus) * bus_count, GFP_KERNEL); -+ buses = kcalloc(bus_count, sizeof(struct ebda_hpc_bus), GFP_KERNEL); - if (!buses) - goto error_slots; -- memset (buses, 0, sizeof (*buses) * bus_count); - controller->buses = buses; - - return controller; -@@ -122,24 +113,12 @@ static void free_ebda_hpc (struct contro - - static struct ebda_rsrc_list * __init alloc_ebda_rsrc_list (void) - { -- struct ebda_rsrc_list *list; -- -- list = kmalloc (sizeof (struct ebda_rsrc_list), GFP_KERNEL); -- if (!list) -- return NULL; -- memset (list, 0, sizeof (*list)); -- return list; -+ return kzalloc(sizeof(struct ebda_rsrc_list), GFP_KERNEL); - } - - static struct ebda_pci_rsrc *alloc_ebda_pci_rsrc (void) - { -- struct ebda_pci_rsrc *resource; -- -- resource = kmalloc (sizeof (struct ebda_pci_rsrc), GFP_KERNEL); -- if (!resource) -- return NULL; -- memset (resource, 0, sizeof (*resource)); -- return resource; -+ return kzalloc(sizeof(struct ebda_pci_rsrc), GFP_KERNEL); - } - - static void __init print_bus_info (void) -@@ -390,10 +369,9 @@ int __init ibmphp_access_ebda (void) - debug ("now enter io table ---\n"); - debug ("rio blk id: %x\n", blk_id); - -- rio_table_ptr = kmalloc (sizeof (struct rio_table_hdr), GFP_KERNEL); -+ rio_table_ptr = kzalloc(sizeof(struct rio_table_hdr), GFP_KERNEL); - if (!rio_table_ptr) - return -ENOMEM; -- memset (rio_table_ptr, 0, sizeof (struct rio_table_hdr) ); - rio_table_ptr->ver_num = readb (io_mem + offset); - rio_table_ptr->scal_count = readb (io_mem + offset + 1); - rio_table_ptr->riodev_count = readb (io_mem + offset + 2); -@@ -445,10 +423,9 @@ static int __init ebda_rio_table (void) - - // we do concern about rio details - for (i = 0; i < rio_table_ptr->riodev_count; i++) { -- rio_detail_ptr = kmalloc (sizeof (struct rio_detail), GFP_KERNEL); -+ rio_detail_ptr = kzalloc(sizeof(struct rio_detail), GFP_KERNEL); - if (!rio_detail_ptr) - return -ENOMEM; -- memset (rio_detail_ptr, 0, sizeof (struct rio_detail)); - rio_detail_ptr->rio_node_id = readb (io_mem + offset); - rio_detail_ptr->bbar = readl (io_mem + offset + 1); - rio_detail_ptr->rio_type = readb (io_mem + offset + 5); -@@ -503,10 +480,9 @@ static int __init combine_wpg_for_chassi - rio_detail_ptr = list_entry (list_head_ptr, struct rio_detail, rio_detail_list); - opt_rio_ptr = search_opt_vg (rio_detail_ptr->chassis_num); - if (!opt_rio_ptr) { -- opt_rio_ptr = (struct opt_rio *) kmalloc (sizeof (struct opt_rio), GFP_KERNEL); -+ opt_rio_ptr = kzalloc(sizeof(struct opt_rio), GFP_KERNEL); - if (!opt_rio_ptr) - return -ENOMEM; -- memset (opt_rio_ptr, 0, sizeof (struct opt_rio)); - opt_rio_ptr->rio_type = rio_detail_ptr->rio_type; - opt_rio_ptr->chassis_num = rio_detail_ptr->chassis_num; - opt_rio_ptr->first_slot_num = rio_detail_ptr->first_slot_num; -@@ -546,10 +522,9 @@ static int combine_wpg_for_expansion (vo - rio_detail_ptr = list_entry (list_head_ptr, struct rio_detail, rio_detail_list); - opt_rio_lo_ptr = search_opt_lo (rio_detail_ptr->chassis_num); - if (!opt_rio_lo_ptr) { -- opt_rio_lo_ptr = (struct opt_rio_lo *) kmalloc (sizeof (struct opt_rio_lo), GFP_KERNEL); -+ opt_rio_lo_ptr = kzalloc(sizeof(struct opt_rio_lo), GFP_KERNEL); - if (!opt_rio_lo_ptr) - return -ENOMEM; -- memset (opt_rio_lo_ptr, 0, sizeof (struct opt_rio_lo)); - opt_rio_lo_ptr->rio_type = rio_detail_ptr->rio_type; - opt_rio_lo_ptr->chassis_num = rio_detail_ptr->chassis_num; - opt_rio_lo_ptr->first_slot_num = rio_detail_ptr->first_slot_num; -@@ -842,12 +817,11 @@ static int __init ebda_rsrc_controller ( - - bus_info_ptr2 = ibmphp_find_same_bus_num (slot_ptr->slot_bus_num); - if (!bus_info_ptr2) { -- bus_info_ptr1 = (struct bus_info *) kmalloc (sizeof (struct bus_info), GFP_KERNEL); -+ bus_info_ptr1 = kzalloc(sizeof(struct bus_info), GFP_KERNEL); - if (!bus_info_ptr1) { - rc = -ENOMEM; - goto error_no_hp_slot; - } -- memset (bus_info_ptr1, 0, sizeof (struct bus_info)); - bus_info_ptr1->slot_min = slot_ptr->slot_num; - bus_info_ptr1->slot_max = slot_ptr->slot_num; - bus_info_ptr1->slot_count += 1; -@@ -946,19 +920,17 @@ static int __init ebda_rsrc_controller ( - // register slots with hpc core as well as create linked list of ibm slot - for (index = 0; index < hpc_ptr->slot_count; index++) { - -- hp_slot_ptr = kmalloc(sizeof(*hp_slot_ptr), GFP_KERNEL); -+ hp_slot_ptr = kzalloc(sizeof(*hp_slot_ptr), GFP_KERNEL); - if (!hp_slot_ptr) { - rc = -ENOMEM; - goto error_no_hp_slot; - } -- memset(hp_slot_ptr, 0, sizeof(*hp_slot_ptr)); - -- hp_slot_ptr->info = kmalloc (sizeof(struct hotplug_slot_info), GFP_KERNEL); -+ hp_slot_ptr->info = kzalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); - if (!hp_slot_ptr->info) { - rc = -ENOMEM; - goto error_no_hp_info; - } -- memset(hp_slot_ptr->info, 0, sizeof(struct hotplug_slot_info)); - - hp_slot_ptr->name = kmalloc(30, GFP_KERNEL); - if (!hp_slot_ptr->name) { -@@ -966,12 +938,11 @@ static int __init ebda_rsrc_controller ( - goto error_no_hp_name; - } - -- tmp_slot = kmalloc(sizeof(*tmp_slot), GFP_KERNEL); -+ tmp_slot = kzalloc(sizeof(*tmp_slot), GFP_KERNEL); - if (!tmp_slot) { - rc = -ENOMEM; - goto error_no_slot; - } -- memset(tmp_slot, 0, sizeof(*tmp_slot)); - - tmp_slot->flag = TRUE; - ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_pci.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_pci.c -@@ -164,12 +164,11 @@ int ibmphp_configure_card (struct pci_fu - cleanup_count = 6; - goto error; - } -- newfunc = kmalloc(sizeof(*newfunc), GFP_KERNEL); -+ newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL); - if (!newfunc) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (newfunc, 0, sizeof (struct pci_func)); - newfunc->busno = cur_func->busno; - newfunc->device = device; - cur_func->next = newfunc; -@@ -203,12 +202,11 @@ int ibmphp_configure_card (struct pci_fu - flag = FALSE; - for (i = 0; i < 32; i++) { - if (func->devices[i]) { -- newfunc = kmalloc(sizeof(*newfunc), GFP_KERNEL); -+ newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL); - if (!newfunc) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (newfunc, 0, sizeof (struct pci_func)); - newfunc->busno = sec_number; - newfunc->device = (u8) i; - for (j = 0; j < 4; j++) -@@ -232,12 +230,11 @@ int ibmphp_configure_card (struct pci_fu - } - } - -- newfunc = kmalloc(sizeof(*newfunc), GFP_KERNEL); -+ newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL); - if (!newfunc) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (newfunc, 0, sizeof (struct pci_func)); - newfunc->busno = cur_func->busno; - newfunc->device = device; - for (j = 0; j < 4; j++) -@@ -279,12 +276,11 @@ int ibmphp_configure_card (struct pci_fu - for (i = 0; i < 32; i++) { - if (func->devices[i]) { - debug ("inside for loop, device is %x\n", i); -- newfunc = kmalloc(sizeof(*newfunc), GFP_KERNEL); -+ newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL); - if (!newfunc) { - err (" out of system memory\n"); - return -ENOMEM; - } -- memset (newfunc, 0, sizeof (struct pci_func)); - newfunc->busno = sec_number; - newfunc->device = (u8) i; - for (j = 0; j < 4; j++) -@@ -405,13 +401,12 @@ static int configure_device (struct pci_ - - debug ("len[count] in IO %x, count %d\n", len[count], count); - -- io[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - - if (!io[count]) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (io[count], 0, sizeof (struct resource_node)); - io[count]->type = IO; - io[count]->busno = func->busno; - io[count]->devfunc = PCI_DEVFN(func->device, func->function); -@@ -444,12 +439,11 @@ static int configure_device (struct pci_ - - debug ("len[count] in PFMEM %x, count %d\n", len[count], count); - -- pfmem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ pfmem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!pfmem[count]) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (pfmem[count], 0, sizeof (struct resource_node)); - pfmem[count]->type = PFMEM; - pfmem[count]->busno = func->busno; - pfmem[count]->devfunc = PCI_DEVFN(func->device, -@@ -460,13 +454,12 @@ static int configure_device (struct pci_ - ibmphp_add_resource (pfmem[count]); - func->pfmem[count] = pfmem[count]; - } else { -- mem_tmp = kmalloc(sizeof(*mem_tmp), GFP_KERNEL); -+ mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL); - if (!mem_tmp) { - err ("out of system memory\n"); - kfree (pfmem[count]); - return -ENOMEM; - } -- memset (mem_tmp, 0, sizeof (struct resource_node)); - mem_tmp->type = MEM; - mem_tmp->busno = pfmem[count]->busno; - mem_tmp->devfunc = pfmem[count]->devfunc; -@@ -512,12 +505,11 @@ static int configure_device (struct pci_ - - debug ("len[count] in Mem %x, count %d\n", len[count], count); - -- mem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ mem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!mem[count]) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (mem[count], 0, sizeof (struct resource_node)); - mem[count]->type = MEM; - mem[count]->busno = func->busno; - mem[count]->devfunc = PCI_DEVFN(func->device, -@@ -677,14 +669,13 @@ static int configure_bridge (struct pci_ - - debug ("len[count] in IO = %x\n", len[count]); - -- bus_io[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ bus_io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - - if (!bus_io[count]) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (bus_io[count], 0, sizeof (struct resource_node)); - bus_io[count]->type = IO; - bus_io[count]->busno = func->busno; - bus_io[count]->devfunc = PCI_DEVFN(func->device, -@@ -711,13 +702,12 @@ static int configure_bridge (struct pci_ - - debug ("len[count] in PFMEM = %x\n", len[count]); - -- bus_pfmem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ bus_pfmem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!bus_pfmem[count]) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (bus_pfmem[count], 0, sizeof (struct resource_node)); - bus_pfmem[count]->type = PFMEM; - bus_pfmem[count]->busno = func->busno; - bus_pfmem[count]->devfunc = PCI_DEVFN(func->device, -@@ -728,13 +718,12 @@ static int configure_bridge (struct pci_ - ibmphp_add_resource (bus_pfmem[count]); - func->pfmem[count] = bus_pfmem[count]; - } else { -- mem_tmp = kmalloc(sizeof(*mem_tmp), GFP_KERNEL); -+ mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL); - if (!mem_tmp) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (mem_tmp, 0, sizeof (struct resource_node)); - mem_tmp->type = MEM; - mem_tmp->busno = bus_pfmem[count]->busno; - mem_tmp->devfunc = bus_pfmem[count]->devfunc; -@@ -770,13 +759,12 @@ static int configure_bridge (struct pci_ - - debug ("len[count] in Memory is %x\n", len[count]); - -- bus_mem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ bus_mem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!bus_mem[count]) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (bus_mem[count], 0, sizeof (struct resource_node)); - bus_mem[count]->type = MEM; - bus_mem[count]->busno = func->busno; - bus_mem[count]->devfunc = PCI_DEVFN(func->device, -@@ -841,14 +829,13 @@ static int configure_bridge (struct pci_ - flag_io = TRUE; - } else { - debug ("it wants %x IO behind the bridge\n", amount_needed->io); -- io = kmalloc(sizeof(*io), GFP_KERNEL); -+ io = kzalloc(sizeof(*io), GFP_KERNEL); - - if (!io) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (io, 0, sizeof (struct resource_node)); - io->type = IO; - io->busno = func->busno; - io->devfunc = PCI_DEVFN(func->device, func->function); -@@ -865,13 +852,12 @@ static int configure_bridge (struct pci_ - flag_mem = TRUE; - } else { - debug ("it wants %x memory behind the bridge\n", amount_needed->mem); -- mem = kmalloc(sizeof(*mem), GFP_KERNEL); -+ mem = kzalloc(sizeof(*mem), GFP_KERNEL); - if (!mem) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (mem, 0, sizeof (struct resource_node)); - mem->type = MEM; - mem->busno = func->busno; - mem->devfunc = PCI_DEVFN(func->device, func->function); -@@ -888,13 +874,12 @@ static int configure_bridge (struct pci_ - flag_pfmem = TRUE; - } else { - debug ("it wants %x pfmemory behind the bridge\n", amount_needed->pfmem); -- pfmem = kmalloc(sizeof(*pfmem), GFP_KERNEL); -+ pfmem = kzalloc(sizeof(*pfmem), GFP_KERNEL); - if (!pfmem) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (pfmem, 0, sizeof (struct resource_node)); - pfmem->type = PFMEM; - pfmem->busno = func->busno; - pfmem->devfunc = PCI_DEVFN(func->device, func->function); -@@ -904,13 +889,12 @@ static int configure_bridge (struct pci_ - ibmphp_add_resource (pfmem); - flag_pfmem = TRUE; - } else { -- mem_tmp = kmalloc(sizeof(*mem_tmp), GFP_KERNEL); -+ mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL); - if (!mem_tmp) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (mem_tmp, 0, sizeof (struct resource_node)); - mem_tmp->type = MEM; - mem_tmp->busno = pfmem->busno; - mem_tmp->devfunc = pfmem->devfunc; -@@ -936,13 +920,12 @@ static int configure_bridge (struct pci_ - */ - bus = ibmphp_find_res_bus (sec_number); - if (!bus) { -- bus = kmalloc(sizeof(*bus), GFP_KERNEL); -+ bus = kzalloc(sizeof(*bus), GFP_KERNEL); - if (!bus) { - err ("out of system memory\n"); - retval = -ENOMEM; - goto error; - } -- memset (bus, 0, sizeof (struct bus_node)); - bus->busno = sec_number; - debug ("b4 adding new bus\n"); - rc = add_new_bus (bus, io, mem, pfmem, func->busno); -@@ -1111,10 +1094,9 @@ static struct res_needed *scan_behind_br - }; - struct res_needed *amount; - -- amount = kmalloc(sizeof(*amount), GFP_KERNEL); -+ amount = kzalloc(sizeof(*amount), GFP_KERNEL); - if (amount == NULL) - return NULL; -- memset (amount, 0, sizeof (struct res_needed)); - - ibmphp_pci_bus->number = busno; - -@@ -1672,12 +1654,11 @@ static int add_new_bus (struct bus_node - list_add (&bus->bus_list, &cur_bus->bus_list); - } - if (io) { -- io_range = kmalloc(sizeof(*io_range), GFP_KERNEL); -+ io_range = kzalloc(sizeof(*io_range), GFP_KERNEL); - if (!io_range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (io_range, 0, sizeof (struct range_node)); - io_range->start = io->start; - io_range->end = io->end; - io_range->rangeno = 1; -@@ -1685,12 +1666,11 @@ static int add_new_bus (struct bus_node - bus->rangeIO = io_range; - } - if (mem) { -- mem_range = kmalloc(sizeof(*mem_range), GFP_KERNEL); -+ mem_range = kzalloc(sizeof(*mem_range), GFP_KERNEL); - if (!mem_range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (mem_range, 0, sizeof (struct range_node)); - mem_range->start = mem->start; - mem_range->end = mem->end; - mem_range->rangeno = 1; -@@ -1698,12 +1678,11 @@ static int add_new_bus (struct bus_node - bus->rangeMem = mem_range; - } - if (pfmem) { -- pfmem_range = kmalloc(sizeof(*pfmem_range), GFP_KERNEL); -+ pfmem_range = kzalloc(sizeof(*pfmem_range), GFP_KERNEL); - if (!pfmem_range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (pfmem_range, 0, sizeof (struct range_node)); - pfmem_range->start = pfmem->start; - pfmem_range->end = pfmem->end; - pfmem_range->rangeno = 1; ---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_res.c -+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_res.c -@@ -55,13 +55,12 @@ static struct bus_node * __init alloc_er - return NULL; - } - -- newbus = kmalloc (sizeof (struct bus_node), GFP_KERNEL); -+ newbus = kzalloc(sizeof(struct bus_node), GFP_KERNEL); - if (!newbus) { - err ("out of system memory\n"); - return NULL; - } - -- memset (newbus, 0, sizeof (struct bus_node)); - if (flag) - newbus->busno = busno; - else -@@ -79,12 +78,11 @@ static struct resource_node * __init all - return NULL; - } - -- rs = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ rs = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!rs) { - err ("out of system memory\n"); - return NULL; - } -- memset (rs, 0, sizeof (struct resource_node)); - rs->busno = curr->bus_num; - rs->devfunc = curr->dev_fun; - rs->start = curr->start_addr; -@@ -100,12 +98,11 @@ static int __init alloc_bus_range (struc - u8 num_ranges = 0; - - if (first_bus) { -- newbus = kmalloc (sizeof (struct bus_node), GFP_KERNEL); -+ newbus = kzalloc(sizeof(struct bus_node), GFP_KERNEL); - if (!newbus) { - err ("out of system memory.\n"); - return -ENOMEM; - } -- memset (newbus, 0, sizeof (struct bus_node)); - newbus->busno = curr->bus_num; - } else { - newbus = *new_bus; -@@ -122,14 +119,13 @@ static int __init alloc_bus_range (struc - } - } - -- newrange = kmalloc (sizeof (struct range_node), GFP_KERNEL); -+ newrange = kzalloc(sizeof(struct range_node), GFP_KERNEL); - if (!newrange) { - if (first_bus) - kfree (newbus); - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (newrange, 0, sizeof (struct range_node)); - newrange->start = curr->start_addr; - newrange->end = curr->end_addr; - -@@ -1705,12 +1701,11 @@ static int __init once_over (void) - - bus_cur->firstPFMemFromMem = pfmem_cur; - -- mem = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ mem = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!mem) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (mem, 0, sizeof (struct resource_node)); - mem->type = MEM; - mem->busno = pfmem_cur->busno; - mem->devfunc = pfmem_cur->devfunc; -@@ -1994,12 +1989,11 @@ static int __init update_bridge_ranges ( - end_address |= (upper_io_end << 16); - - if ((start_address) && (start_address <= end_address)) { -- range = kmalloc (sizeof (struct range_node), GFP_KERNEL); -+ range = kzalloc(sizeof(struct range_node), GFP_KERNEL); - if (!range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (range, 0, sizeof (struct range_node)); - range->start = start_address; - range->end = end_address + 0xfff; - -@@ -2020,13 +2014,12 @@ static int __init update_bridge_ranges ( - fix_resources (bus_sec); - - if (ibmphp_find_resource (bus_cur, start_address, &io, IO)) { -- io = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ io = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!io) { - kfree (range); - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (io, 0, sizeof (struct resource_node)); - io->type = IO; - io->busno = bus_cur->busno; - io->devfunc = ((device << 3) | (function & 0x7)); -@@ -2045,12 +2038,11 @@ static int __init update_bridge_ranges ( - - if ((start_address) && (start_address <= end_address)) { - -- range = kmalloc (sizeof (struct range_node), GFP_KERNEL); -+ range = kzalloc(sizeof(struct range_node), GFP_KERNEL); - if (!range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (range, 0, sizeof (struct range_node)); - range->start = start_address; - range->end = end_address + 0xfffff; - -@@ -2072,13 +2064,12 @@ static int __init update_bridge_ranges ( - fix_resources (bus_sec); - - if (ibmphp_find_resource (bus_cur, start_address, &mem, MEM)) { -- mem = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ mem = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!mem) { - kfree (range); - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (mem, 0, sizeof (struct resource_node)); - mem->type = MEM; - mem->busno = bus_cur->busno; - mem->devfunc = ((device << 3) | (function & 0x7)); -@@ -2101,12 +2092,11 @@ static int __init update_bridge_ranges ( - - if ((start_address) && (start_address <= end_address)) { - -- range = kmalloc (sizeof (struct range_node), GFP_KERNEL); -+ range = kzalloc(sizeof(struct range_node), GFP_KERNEL); - if (!range) { - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (range, 0, sizeof (struct range_node)); - range->start = start_address; - range->end = end_address + 0xfffff; - -@@ -2127,13 +2117,12 @@ static int __init update_bridge_ranges ( - - fix_resources (bus_sec); - if (ibmphp_find_resource (bus_cur, start_address, &pfmem, PFMEM)) { -- pfmem = kmalloc (sizeof (struct resource_node), GFP_KERNEL); -+ pfmem = kzalloc(sizeof(struct resource_node), GFP_KERNEL); - if (!pfmem) { - kfree (range); - err ("out of system memory\n"); - return -ENOMEM; - } -- memset (pfmem, 0, sizeof (struct resource_node)); - pfmem->type = PFMEM; - pfmem->busno = bus_cur->busno; - pfmem->devfunc = ((device << 3) | (function & 0x7)); ---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/pciehp_core.c -@@ -117,27 +117,23 @@ static int init_slots(struct controller - slot_number = ctrl->first_slot; - - while (number_of_slots) { -- slot = kmalloc(sizeof(*slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(*slot), GFP_KERNEL); - if (!slot) - goto error; - -- memset(slot, 0, sizeof(struct slot)); - slot->hotplug_slot = -- kmalloc(sizeof(*(slot->hotplug_slot)), -+ kzalloc(sizeof(*(slot->hotplug_slot)), - GFP_KERNEL); - if (!slot->hotplug_slot) - goto error_slot; - hotplug_slot = slot->hotplug_slot; -- memset(hotplug_slot, 0, sizeof(struct hotplug_slot)); - - hotplug_slot->info = -- kmalloc(sizeof(*(hotplug_slot->info)), -+ kzalloc(sizeof(*(hotplug_slot->info)), - GFP_KERNEL); - if (!hotplug_slot->info) - goto error_hpslot; - hotplug_slot_info = hotplug_slot->info; -- memset(hotplug_slot_info, 0, -- sizeof(struct hotplug_slot_info)); - hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); - if (!hotplug_slot->name) - goto error_info; -@@ -373,12 +369,11 @@ static int pciehp_probe(struct pcie_devi - u8 value; - struct pci_dev *pdev; - -- ctrl = kmalloc(sizeof(*ctrl), GFP_KERNEL); -+ ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL); - if (!ctrl) { - err("%s : out of memory\n", __FUNCTION__); - goto err_out_none; - } -- memset(ctrl, 0, sizeof(struct controller)); - - pdev = dev->port; - ctrl->pci_dev = pdev; ---- gregkh-2.6.orig/drivers/pci/hotplug/rpaphp_slot.c -+++ gregkh-2.6/drivers/pci/hotplug/rpaphp_slot.c -@@ -84,19 +84,16 @@ struct slot *alloc_slot_struct(struct de - { - struct slot *slot; - -- slot = kmalloc(sizeof (struct slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(struct slot), GFP_KERNEL); - if (!slot) - goto error_nomem; -- memset(slot, 0, sizeof (struct slot)); -- slot->hotplug_slot = kmalloc(sizeof (struct hotplug_slot), GFP_KERNEL); -+ slot->hotplug_slot = kzalloc(sizeof(struct hotplug_slot), GFP_KERNEL); - if (!slot->hotplug_slot) - goto error_slot; -- memset(slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); -- slot->hotplug_slot->info = kmalloc(sizeof (struct hotplug_slot_info), -+ slot->hotplug_slot->info = kzalloc(sizeof(struct hotplug_slot_info), - GFP_KERNEL); - if (!slot->hotplug_slot->info) - goto error_hpslot; -- memset(slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); - slot->hotplug_slot->name = kmalloc(BUS_ID_SIZE + 1, GFP_KERNEL); - if (!slot->hotplug_slot->name) - goto error_info; ---- gregkh-2.6.orig/drivers/pci/pci-driver.c -+++ gregkh-2.6/drivers/pci/pci-driver.c -@@ -53,11 +53,10 @@ store_new_id(struct device_driver *drive - if (fields < 0) - return -EINVAL; - -- dynid = kmalloc(sizeof(*dynid), GFP_KERNEL); -+ dynid = kzalloc(sizeof(*dynid), GFP_KERNEL); - if (!dynid) - return -ENOMEM; - -- memset(dynid, 0, sizeof(*dynid)); - INIT_LIST_HEAD(&dynid->node); - dynid->id.vendor = vendor; - dynid->id.device = device; ---- gregkh-2.6.orig/drivers/pci/pci-sysfs.c -+++ gregkh-2.6/drivers/pci/pci-sysfs.c -@@ -501,9 +501,8 @@ int pci_create_sysfs_dev_files (struct p - if (pci_resource_len(pdev, PCI_ROM_RESOURCE)) { - struct bin_attribute *rom_attr; - -- rom_attr = kmalloc(sizeof(*rom_attr), GFP_ATOMIC); -+ rom_attr = kzalloc(sizeof(*rom_attr), GFP_ATOMIC); - if (rom_attr) { -- memset(rom_attr, 0x00, sizeof(*rom_attr)); - pdev->rom_attr = rom_attr; - rom_attr->size = pci_resource_len(pdev, PCI_ROM_RESOURCE); - rom_attr->attr.name = "rom"; ---- gregkh-2.6.orig/drivers/pci/pcie/portdrv_core.c -+++ gregkh-2.6/drivers/pci/pcie/portdrv_core.c -@@ -248,11 +248,10 @@ static struct pcie_device* alloc_pcie_de - { - struct pcie_device *device; - -- device = kmalloc(sizeof(struct pcie_device), GFP_KERNEL); -+ device = kzalloc(sizeof(struct pcie_device), GFP_KERNEL); - if (!device) - return NULL; - -- memset(device, 0, sizeof(struct pcie_device)); - pcie_device_init(parent, device, port_type, service_type, irq,irq_mode); - printk(KERN_DEBUG "Allocate Port Service[%s]\n", device->device.bus_id); - return device; ---- gregkh-2.6.orig/drivers/pci/probe.c -+++ gregkh-2.6/drivers/pci/probe.c -@@ -33,10 +33,9 @@ LIST_HEAD(pci_devices); - */ - static void pci_create_legacy_files(struct pci_bus *b) - { -- b->legacy_io = kmalloc(sizeof(struct bin_attribute) * 2, -+ b->legacy_io = kzalloc(sizeof(struct bin_attribute) * 2, - GFP_ATOMIC); - if (b->legacy_io) { -- memset(b->legacy_io, 0, sizeof(struct bin_attribute) * 2); - b->legacy_io->attr.name = "legacy_io"; - b->legacy_io->size = 0xffff; - b->legacy_io->attr.mode = S_IRUSR | S_IWUSR; -@@ -320,9 +319,8 @@ static struct pci_bus * __devinit pci_al - { - struct pci_bus *b; - -- b = kmalloc(sizeof(*b), GFP_KERNEL); -+ b = kzalloc(sizeof(*b), GFP_KERNEL); - if (b) { -- memset(b, 0, sizeof(*b)); - INIT_LIST_HEAD(&b->node); - INIT_LIST_HEAD(&b->children); - INIT_LIST_HEAD(&b->devices); -@@ -797,11 +795,10 @@ pci_scan_device(struct pci_bus *bus, int - if (pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type)) - return NULL; - -- dev = kmalloc(sizeof(struct pci_dev), GFP_KERNEL); -+ dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL); - if (!dev) - return NULL; - -- memset(dev, 0, sizeof(struct pci_dev)); - dev->bus = bus; - dev->sysdata = bus->sysdata; - dev->dev.parent = bus->bridge; diff --git a/pci/pci-make-msi-quirk-inheritable-from-the-pci-bus.patch b/pci/pci-make-msi-quirk-inheritable-from-the-pci-bus.patch deleted file mode 100644 index af6c8c28d5a6a..0000000000000 --- a/pci/pci-make-msi-quirk-inheritable-from-the-pci-bus.patch +++ /dev/null @@ -1,83 +0,0 @@ -From mst@mellanox.co.il Tue Feb 14 08:51:01 2006 -Date: Tue, 14 Feb 2006 18:52:22 +0200 -From: "Michael S. Tsirkin" <mst@mellanox.co.il> -To: Roland Dreier <rolandd@cisco.com> -Subject: PCI: make MSI quirk inheritable from the pci bus -Message-ID: <20060214165222.GC12974@mellanox.co.il> -Content-Disposition: inline - - -It turns out AMD 8131 quirk only affects MSI for devices behind the 8131 bridge. -Handle this by adding a flags field in pci_bus, inherited from parent to child. - -Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/msi.c | 3 +++ - drivers/pci/probe.c | 1 + - drivers/pci/quirks.c | 7 +++++-- - include/linux/pci.h | 7 ++++++- - 4 files changed, 15 insertions(+), 3 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/msi.c -+++ gregkh-2.6/drivers/pci/msi.c -@@ -703,6 +703,9 @@ int pci_enable_msi(struct pci_dev* dev) - if (dev->no_msi) - return status; - -+ if (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MSI) -+ return -EINVAL; -+ - temp = dev->irq; - - status = msi_init(); ---- gregkh-2.6.orig/drivers/pci/probe.c -+++ gregkh-2.6/drivers/pci/probe.c -@@ -347,6 +347,7 @@ pci_alloc_child_bus(struct pci_bus *pare - child->parent = parent; - child->ops = parent->ops; - child->sysdata = parent->sysdata; -+ child->bus_flags = parent->bus_flags; - child->bridge = get_device(&bridge->dev); - - child->class_dev.class = &pcibus_class; ---- gregkh-2.6.orig/drivers/pci/quirks.c -+++ gregkh-2.6/drivers/pci/quirks.c -@@ -575,8 +575,11 @@ static void __init quirk_amd_8131_ioapic - { - unsigned char revid, tmp; - -- pci_msi_quirk = 1; -- printk(KERN_WARNING "PCI: MSI quirk detected. pci_msi_quirk set.\n"); -+ if (dev->subordinate) { -+ printk(KERN_WARNING "PCI: MSI quirk detected. " -+ "PCI_BUS_FLAGS_NO_MSI set for subordinate bus.\n"); -+ dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI; -+ } - - if (nr_ioapics == 0) - return; ---- gregkh-2.6.orig/include/linux/pci.h -+++ gregkh-2.6/include/linux/pci.h -@@ -95,6 +95,11 @@ enum pci_channel_state { - pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, - }; - -+typedef unsigned short __bitwise pci_bus_flags_t; -+enum pci_bus_flags { -+ PCI_BUS_FLAGS_NO_MSI = (pci_bus_flags_t) 1, -+}; -+ - /* - * The pci_dev structure is used to describe PCI devices. - */ -@@ -203,7 +208,7 @@ struct pci_bus { - char name[48]; - - unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */ -- unsigned short pad2; -+ pci_bus_flags_t bus_flags; /* Inherited by child busses */ - struct device *bridge; - struct class_device class_dev; - struct bin_attribute *legacy_io; /* legacy I/O for this bus */ diff --git a/pci/pci-move-pci_dev_put-outside-a-spinlock.patch b/pci/pci-move-pci_dev_put-outside-a-spinlock.patch deleted file mode 100644 index 6c82d29842a83..0000000000000 --- a/pci/pci-move-pci_dev_put-outside-a-spinlock.patch +++ /dev/null @@ -1,41 +0,0 @@ -From stern@rowland.harvard.edu Thu Feb 23 14:12:57 2006 -Date: Thu, 23 Feb 2006 17:12:51 -0500 (EST) -From: Alan Stern <stern@rowland.harvard.edu> -To: Greg KH <greg@kroah.com> -Subject: PCI: Move pci_dev_put outside a spinlock -Message-ID: <Pine.LNX.4.44L0.0602231710110.4579-100000@iolanthe.rowland.org> - -This patch (as659) fixes a might_sleep problem in the PCI core, by moving -a call to pci_dev_put() outside the scope of a spinlock. - -Signed-off-by: Alan Stern <stern@rowland.harvard.edu> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/search.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/search.c -+++ gregkh-2.6/drivers/pci/search.c -@@ -246,9 +246,9 @@ pci_get_subsys(unsigned int vendor, unsi - } - dev = NULL; - exit: -- pci_dev_put(from); - dev = pci_dev_get(dev); - spin_unlock(&pci_bus_lock); -+ pci_dev_put(from); - return dev; - } - -@@ -339,9 +339,9 @@ struct pci_dev *pci_get_class(unsigned i - } - dev = NULL; - exit: -- pci_dev_put(from); - dev = pci_dev_get(dev); - spin_unlock(&pci_bus_lock); -+ pci_dev_put(from); - return dev; - } - diff --git a/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch b/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch deleted file mode 100644 index a759d8fa80882..0000000000000 --- a/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch +++ /dev/null @@ -1,140 +0,0 @@ -From akpm@osdl.org Sat Feb 18 01:39:27 2006 -Message-Id: <200602180938.k1I9cE5L005247@shell0.pdx.osdl.net> -From: Bernhard Kaindl <bk@suse.de> -Subject: PCI: PCI/Cardbus cards hidden, needs pci=assign-busses to fix -To: bk@suse.de, alan@lxorguk.ukuu.org.uk, greg@kroah.com, ink@jurassic.park.msu.ru, linux@dominikbrodowski.net, rmk@arm.linux.org.uk -Date: Sat, 18 Feb 2006 01:36:55 -0800 - - -From: Bernhard Kaindl <bk@suse.de> - -"In some cases, especially on modern laptops with a lot of PCI and cardbus -bridges, we're unable to assign correct secondary/subordinate bus numbers -to all cardbus bridges due to BIOS limitations unless we are using -"pci=assign-busses" boot option." -- Ivan Kokshaysky (from a patch comment) - -Without it, Cardbus cards inserted are never seen by PCI because the parent -PCI-PCI Bridge of the Cardbus bridge will not pass and translate Type 1 PCI -configuration cycles correctly and the system will fail to find and -initialise the PCI devices in the system. - -Reference: PCI-PCI Bridges: PCI Configuration Cycles and PCI Bus Numbering: -http://www.science.unitn.it/~fiorella/guidelinux/tlk/node72.html - -The reason for this is that: - ``All PCI busses located behind a PCI-PCI bridge must reside between the -secondary bus number and the subordinate bus number (inclusive).'' - -"pci=assign-busses" makes pcibios_assign_all_busses return 1 and this -turns on PCI renumbering during PCI probing. - -Alan suggested to use DMI automatically set assign-busses on problem systems. - -The only question for me was where to put it. I put it directly before -scanning PCI bus into pcibios_scan_root() because it's called from legacy, -acpi and numa and so it can be one place for all systems and configurations -which may need it. - -AMD64 Laptops are also affected and fixed by assign-busses, and the code is -also incuded from arch/x86_64/pci/ that place will also work for x86_64 -kernels, I only ifdef'-ed the x86-only Laptop in this example. - -Affected and known or assumed to be fixed with it are (found by googling): - -* ASUS Z71V and L3s -* Samsung X20 -* Compaq R3140us and all Compaq R3000 series laptops with TI1620 Controller, - also Compaq R4000 series (from a kernel.org bugreport) -* HP zv5000z (AMD64 3700+, known that fixup_parent_subordinate_busnr fixes it) -* HP zv5200z -* IBM ThinkPad 240 -* An IBM ThinkPad (1.8 GHz Pentium M) debugged by Pavel Machek - gives the correspondig message which detects the possible problem. -* MSI S260 / Medion SIM 2100 MD 95600 - -The patch also expands the "try pci=assign-busses" warning so testers will -help us to update the DMI table. - -Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> -Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> -Cc: Dominik Brodowski <linux@dominikbrodowski.net> -Cc: Russell King <rmk@arm.linux.org.uk> -Signed-off-by: Andrew Morton <akpm@osdl.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - arch/i386/pci/common.c | 32 ++++++++++++++++++++++++++++++++ - drivers/pci/probe.c | 4 +++- - 2 files changed, 35 insertions(+), 1 deletion(-) - ---- gregkh-2.6.orig/arch/i386/pci/common.c -+++ gregkh-2.6/arch/i386/pci/common.c -@@ -8,6 +8,7 @@ - #include <linux/pci.h> - #include <linux/ioport.h> - #include <linux/init.h> -+#include <linux/dmi.h> - - #include <asm/acpi.h> - #include <asm/segment.h> -@@ -120,11 +121,42 @@ void __devinit pcibios_fixup_bus(struct - pci_read_bridge_bases(b); - } - -+/* -+ * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) -+ */ -+#ifdef __i386__ -+static int __devinit assign_all_busses(struct dmi_system_id *d) -+{ -+ pci_probe |= PCI_ASSIGN_ALL_BUSSES; -+ printk(KERN_INFO "%s detected: enabling PCI bus# renumbering" -+ " (pci=assign-busses)\n", d->ident); -+ return 0; -+} -+#endif -+ -+/* -+ * Laptops which need pci=assign-busses to see Cardbus cards -+ */ -+static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { -+#ifdef __i386__ -+ { -+ .callback = assign_all_busses, -+ .ident = "Samsung X20 Laptop", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "SX20S"), -+ }, -+ }, -+#endif /* __i386__ */ -+ {} -+}; - - struct pci_bus * __devinit pcibios_scan_root(int busnum) - { - struct pci_bus *bus = NULL; - -+ dmi_check_system(pciprobe_dmi_table); -+ - while ((bus = pci_find_next_bus(bus)) != NULL) { - if (bus->number == busnum) { - /* Already scanned */ ---- gregkh-2.6.orig/drivers/pci/probe.c -+++ gregkh-2.6/drivers/pci/probe.c -@@ -589,13 +589,15 @@ int __devinit pci_scan_bridge(struct pci - (child->number > bus->subordinate) || - (child->number < bus->number) || - (child->subordinate < bus->number)) { -- printk(KERN_WARNING "PCI: Bus #%02x (-#%02x) may be " -+ printk(KERN_WARNING "PCI: Bus #%02x (-#%02x) is " - "hidden behind%s bridge #%02x (-#%02x)%s\n", - child->number, child->subordinate, - bus->self->transparent ? " transparent" : " ", - bus->number, bus->subordinate, - pcibios_assign_all_busses() ? " " : - " (try 'pci=assign-busses')"); -+ printk(KERN_WARNING "Please report the result to " -+ "linux-kernel to fix this permanently\n"); - } - bus = bus->parent; - } diff --git a/pci/pci-pci-quirk-for-asus-a8v-and-a8v-deluxe-motherboards.patch b/pci/pci-pci-quirk-for-asus-a8v-and-a8v-deluxe-motherboards.patch deleted file mode 100644 index 48368fecbaec8..0000000000000 --- a/pci/pci-pci-quirk-for-asus-a8v-and-a8v-deluxe-motherboards.patch +++ /dev/null @@ -1,61 +0,0 @@ -From root@skyscraper.xs4all.nl Tue Feb 28 12:44:38 2006 -Date: Tue, 28 Feb 2006 21:44:36 +0100 -From: bjd <bjdouma@xs4all.nl> -To: gregkh@suse.de -Subject: PCI: quirk for asus a8v and a8v delux motherboards -Message-ID: <20060228204436.GA18312@skyscraper.unix9.prv> -Content-Disposition: inline - -From: Bauke Jan Douma <bjdouma@xs4all.nl> - -On ASUS A8V and A8V Deluxe boards, the onboard AC97 audio controller -and MC97 modem controller are deactivated when a second PCI soundcard -is present. This patch enables them. - -Signed-off-by: Bauke Jan Douma <bjdouma@xs4all.nl> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/quirks.c | 31 +++++++++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - ---- gregkh-2.6.orig/drivers/pci/quirks.c -+++ gregkh-2.6/drivers/pci/quirks.c -@@ -1074,6 +1074,37 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_735, quirk_sis_96x_compatible ); - - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503 ); -+/* -+ * On ASUS A8V and A8V Deluxe boards, the onboard AC97 audio controller -+ * and MC97 modem controller are disabled when a second PCI soundcard is -+ * present. This patch, tweaking the VT8237 ISA bridge, enables them. -+ * -- bjd -+ */ -+static void __init asus_hides_ac97_lpc(struct pci_dev *dev) -+{ -+ u8 val; -+ int asus_hides_ac97 = 0; -+ -+ if (likely(dev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK)) { -+ if (dev->device == PCI_DEVICE_ID_VIA_8237) -+ asus_hides_ac97 = 1; -+ } -+ -+ if (!asus_hides_ac97) -+ return; -+ -+ pci_read_config_byte(dev, 0x50, &val); -+ if (val & 0xc0) { -+ pci_write_config_byte(dev, 0x50, val & (~0xc0)); -+ pci_read_config_byte(dev, 0x50, &val); -+ if (val & 0xc0) -+ printk(KERN_INFO "PCI: onboard AC97/MC97 devices continue to play 'hide and seek'! 0x%x\n", val); -+ else -+ printk(KERN_INFO "PCI: enabled onboard AC97/MC97 devices\n"); -+ } -+} -+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc ); -+ - - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_smbus ); - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus ); diff --git a/pci/pci-provide-a-boot-parameter-to-disable-msi.patch b/pci/pci-provide-a-boot-parameter-to-disable-msi.patch deleted file mode 100644 index a49c4e6bf0e76..0000000000000 --- a/pci/pci-provide-a-boot-parameter-to-disable-msi.patch +++ /dev/null @@ -1,125 +0,0 @@ -From willy@parisc-linux.org Sun Mar 5 21:33:37 2006 -Date: Sun, 5 Mar 2006 22:33:34 -0700 -From: Matthew Wilcox <matthew@wil.cx> -Cc: "Randy.Dunlap" <rdunlap@xenotime.net>, Greg KH <greg@kroah.com> -Subject: PCI: Provide a boot parameter to disable MSI -Message-ID: <20060306053334.GO1598@parisc-linux.org> -Content-Disposition: inline - - -Several drivers are starting to grow options to disable MSI. However, -it's often a host chipset issue, not something which individual drivers -should handle. So we add the pci=nomsi kernel parameter to allow the user -to disable MSI modes for systems we haven't added to the quirk list yet. - -Signed-off-by: Matthew Wilcox <matthew@wil.cx> -Signed-off-by: Randy Dunlap <rdunlap@xenotime.net> -Acked-by: Jeff Garzik <jeff@garzik.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - Documentation/kernel-parameters.txt | 4 ++++ - drivers/pci/Kconfig | 4 ++++ - drivers/pci/msi.c | 10 ++++++++++ - drivers/pci/pci.c | 8 ++++++-- - drivers/pci/pci.h | 2 ++ - 5 files changed, 26 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/Documentation/kernel-parameters.txt -+++ gregkh-2.6/Documentation/kernel-parameters.txt -@@ -49,6 +49,7 @@ restrictions referred to are that the re - MCA MCA bus support is enabled. - MDA MDA console support is enabled. - MOUSE Appropriate mouse support is enabled. -+ MSI Message Signaled Interrupts (PCI). - MTD MTD support is enabled. - NET Appropriate network support is enabled. - NUMA NUMA support is enabled. -@@ -1152,6 +1153,9 @@ running once the system is up. - Mechanism 2. - nommconf [IA-32,X86_64] Disable use of MMCONFIG for PCI - Configuration -+ nomsi [MSI] If the PCI_MSI kernel config parameter is -+ enabled, this kernel boot option can be used to -+ disable the use of MSI interrupts system-wide. - nosort [IA-32] Don't sort PCI devices according to - order given by the PCI BIOS. This sorting is - done to get a device order compatible with ---- gregkh-2.6.orig/drivers/pci/Kconfig -+++ gregkh-2.6/drivers/pci/Kconfig -@@ -11,6 +11,10 @@ config PCI_MSI - generate an interrupt using an inbound Memory Write on its - PCI bus instead of asserting a device IRQ pin. - -+ Use of PCI MSI interrupts can be disabled at kernel boot time -+ by using the 'pci=nomsi' option. This disables MSI for the -+ entire system. -+ - If you don't know what to do here, say N. - - config PCI_DEBUG ---- gregkh-2.6.orig/drivers/pci/msi.c -+++ gregkh-2.6/drivers/pci/msi.c -@@ -765,8 +765,11 @@ void pci_disable_msi(struct pci_dev* dev - u16 control; - unsigned long flags; - -+ if (!pci_msi_enable) -+ return; - if (!dev) - return; -+ - pos = pci_find_capability(dev, PCI_CAP_ID_MSI); - if (!pos) - return; -@@ -1026,6 +1029,8 @@ void pci_disable_msix(struct pci_dev* de - int pos, temp; - u16 control; - -+ if (!pci_msi_enable) -+ return; - if (!dev) - return; - -@@ -1152,6 +1157,11 @@ void msi_remove_pci_irq_vectors(struct p - } - } - -+void pci_no_msi(void) -+{ -+ pci_msi_enable = 0; -+} -+ - EXPORT_SYMBOL(pci_enable_msi); - EXPORT_SYMBOL(pci_disable_msi); - EXPORT_SYMBOL(pci_enable_msix); ---- gregkh-2.6.orig/drivers/pci/pci.c -+++ gregkh-2.6/drivers/pci/pci.c -@@ -900,8 +900,12 @@ static int __devinit pci_setup(char *str - if (k) - *k++ = 0; - if (*str && (str = pcibios_setup(str)) && *str) { -- /* PCI layer options should be handled here */ -- printk(KERN_ERR "PCI: Unknown option `%s'\n", str); -+ if (!strcmp(str, "nomsi")) { -+ pci_no_msi(); -+ } else { -+ printk(KERN_ERR "PCI: Unknown option `%s'\n", -+ str); -+ } - } - str = k; - } ---- gregkh-2.6.orig/drivers/pci/pci.h -+++ gregkh-2.6/drivers/pci/pci.h -@@ -50,8 +50,10 @@ extern int pci_msi_quirk; - - #ifdef CONFIG_PCI_MSI - void disable_msi_mode(struct pci_dev *dev, int pos, int type); -+void pci_no_msi(void); - #else - static inline void disable_msi_mode(struct pci_dev *dev, int pos, int type) { } -+static inline void pci_no_msi(void) { } - #endif - - extern int pcie_mch_quirk; diff --git a/pci/pci-quirk-for-ibm-dock-ii-cardbus-controllers.patch b/pci/pci-quirk-for-ibm-dock-ii-cardbus-controllers.patch deleted file mode 100644 index aa4d693af775d..0000000000000 --- a/pci/pci-quirk-for-ibm-dock-ii-cardbus-controllers.patch +++ /dev/null @@ -1,54 +0,0 @@ -From kristen.c.accardi@intel.com Tue Jan 17 16:54:13 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: PCI: quirk for IBM Dock II cardbus controllers -Cc: <len.brown@intel.com>, <pavel@ucw.cz> -Date: Tue, 17 Jan 2006 16:57:04 -0800 -Message-Id: <1137545824.19858.49.camel@whizzy> - -The IBM Dock II cardbus bridges require some extra configuration -before Yenta is loaded in order to setup the Interrupts to be -routed properly. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/quirks.c | 27 +++++++++++++++++++++++++++ - 1 file changed, 27 insertions(+) - ---- gregkh-2.6.orig/drivers/pci/quirks.c -+++ gregkh-2.6/drivers/pci/quirks.c -@@ -1242,6 +1242,33 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_IN - DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); - - -+/* -+ * Fixup the cardbus bridges on the IBM Dock II docking station -+ */ -+static void __devinit quirk_ibm_dock2_cardbus(struct pci_dev *dev) -+{ -+ u32 val; -+ -+ /* -+ * tie the 2 interrupt pins to INTA, and configure the -+ * multifunction routing register to handle this. -+ */ -+ if ((dev->subsystem_vendor == PCI_VENDOR_ID_IBM) && -+ (dev->subsystem_device == 0x0148)) { -+ printk(KERN_INFO "PCI: Found IBM Dock II Cardbus Bridge " -+ "applying quirk\n"); -+ pci_read_config_dword(dev, 0x8c, &val); -+ val = ((val & 0xffffff00) | 0x1002); -+ pci_write_config_dword(dev, 0x8c, val); -+ pci_read_config_dword(dev, 0x80, &val); -+ val = ((val & 0x00ffff00) | 0x2864c077); -+ pci_write_config_dword(dev, 0x80, val); -+ } -+} -+ -+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, -+ quirk_ibm_dock2_cardbus); -+ - static void __devinit quirk_netmos(struct pci_dev *dev) - { - unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; diff --git a/pci/pci-really-fix-parent-s-subordinate-busnr.patch b/pci/pci-really-fix-parent-s-subordinate-busnr.patch deleted file mode 100644 index 58bbbb0d33129..0000000000000 --- a/pci/pci-really-fix-parent-s-subordinate-busnr.patch +++ /dev/null @@ -1,33 +0,0 @@ -From kristen.c.accardi@intel.com Tue Jan 17 16:54:14 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: PCI: really fix parent's subordinate busnr -Cc: <len.brown@intel.com>, <pavel@ucw.cz> -Date: Tue, 17 Jan 2006 16:57:01 -0800 -Message-Id: <1137545822.19858.48.camel@whizzy> - -After you find the maximum value of the subordinate buses below the child -bus, you must fix the parent's subordinate bus number again, otherwise -it may be too small. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/probe.c | 5 +++++ - 1 file changed, 5 insertions(+) - ---- gregkh-2.6.orig/drivers/pci/probe.c -+++ gregkh-2.6/drivers/pci/probe.c -@@ -537,6 +537,11 @@ int __devinit pci_scan_bridge(struct pci - pci_fixup_parent_subordinate_busnr(child, max); - /* Now we can scan all subordinate buses... */ - max = pci_scan_child_bus(child); -+ /* -+ * now fix it up again since we have found -+ * the real value of max. -+ */ -+ pci_fixup_parent_subordinate_busnr(child, max); - } else { - /* - * For CardBus bridges, we leave 4 bus numbers diff --git a/pci/pci-remove-msi-save-restore-code-in-specific-driver.patch b/pci/pci-remove-msi-save-restore-code-in-specific-driver.patch deleted file mode 100644 index 296c9f1bc8b7c..0000000000000 --- a/pci/pci-remove-msi-save-restore-code-in-specific-driver.patch +++ /dev/null @@ -1,116 +0,0 @@ -From owner-linux-pci@atrey.karlin.mff.cuni.cz Wed Feb 22 20:57:19 2006 -Subject: PCI: remove msi save/restore code in specific driver -From: Shaohua Li <shaohua.li@intel.com> -To: Cc: Andrew Morton <akpm@osdl.org>, Greg <greg@kroah.com> -Date: Wed, 08 Feb 2006 17:11:40 +0800 -Message-Id: <1139389900.14976.13.camel@sli10-desk.sh.intel.com> - -Remove pcie port driver's msi save/restore code. - -Signed-off-by: Shaohua Li <shaohua.li@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - drivers/pci/pcie/portdrv.h | 1 - drivers/pci/pcie/portdrv_pci.c | 66 ++--------------------------------------- - 2 files changed, 4 insertions(+), 63 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/pcie/portdrv.h -+++ gregkh-2.6/drivers/pci/pcie/portdrv.h -@@ -29,7 +29,6 @@ - - struct pcie_port_device_ext { - int interrupt_mode; /* [0:INTx | 1:MSI | 2:MSI-X] */ -- unsigned int saved_msi_config_space[5]; - }; - - extern struct bus_type pcie_port_bus_type; ---- gregkh-2.6.orig/drivers/pci/pcie/portdrv_pci.c -+++ gregkh-2.6/drivers/pci/pcie/portdrv_pci.c -@@ -30,75 +30,16 @@ MODULE_LICENSE("GPL"); - /* global data */ - static const char device_name[] = "pcieport-driver"; - --static void pci_save_msi_state(struct pci_dev *dev) -+static int pcie_portdrv_save_config(struct pci_dev *dev) - { -- struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev); -- int i = 0, pos; -- u16 control; -- -- if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSI)) <= 0) -- return; -- -- pci_read_config_dword(dev, pos, &p_ext->saved_msi_config_space[i++]); -- control = p_ext->saved_msi_config_space[0] >> 16; -- pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO, -- &p_ext->saved_msi_config_space[i++]); -- if (control & PCI_MSI_FLAGS_64BIT) { -- pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI, -- &p_ext->saved_msi_config_space[i++]); -- pci_read_config_dword(dev, pos + PCI_MSI_DATA_64, -- &p_ext->saved_msi_config_space[i++]); -- } else -- pci_read_config_dword(dev, pos + PCI_MSI_DATA_32, -- &p_ext->saved_msi_config_space[i++]); -- if (control & PCI_MSI_FLAGS_MASKBIT) -- pci_read_config_dword(dev, pos + PCI_MSI_MASK_BIT, -- &p_ext->saved_msi_config_space[i++]); --} -- --static void pci_restore_msi_state(struct pci_dev *dev) --{ -- struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev); -- int i = 0, pos; -- u16 control; -- -- if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSI)) <= 0) -- return; -- -- control = p_ext->saved_msi_config_space[i++] >> 16; -- pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control); -- pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO, -- p_ext->saved_msi_config_space[i++]); -- if (control & PCI_MSI_FLAGS_64BIT) { -- pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI, -- p_ext->saved_msi_config_space[i++]); -- pci_write_config_dword(dev, pos + PCI_MSI_DATA_64, -- p_ext->saved_msi_config_space[i++]); -- } else -- pci_write_config_dword(dev, pos + PCI_MSI_DATA_32, -- p_ext->saved_msi_config_space[i++]); -- if (control & PCI_MSI_FLAGS_MASKBIT) -- pci_write_config_dword(dev, pos + PCI_MSI_MASK_BIT, -- p_ext->saved_msi_config_space[i++]); --} -- --static void pcie_portdrv_save_config(struct pci_dev *dev) --{ -- struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev); -- -- pci_save_state(dev); -- if (p_ext->interrupt_mode == PCIE_PORT_MSI_MODE) -- pci_save_msi_state(dev); -+ return pci_save_state(dev); - } - - static int pcie_portdrv_restore_config(struct pci_dev *dev) - { -- struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev); - int retval; - - pci_restore_state(dev); -- if (p_ext->interrupt_mode == PCIE_PORT_MSI_MODE) -- pci_restore_msi_state(dev); - retval = pci_enable_device(dev); - if (retval) - return retval; -@@ -149,7 +90,8 @@ static int pcie_portdrv_suspend (struct - { - int ret = pcie_port_device_suspend(dev, state); - -- pcie_portdrv_save_config(dev); -+ if (!ret) -+ ret = pcie_portdrv_save_config(dev); - return ret; - } - diff --git a/pci/pci-resource-address-mismatch.patch b/pci/pci-resource-address-mismatch.patch deleted file mode 100644 index 44f04ea4480cb..0000000000000 --- a/pci/pci-resource-address-mismatch.patch +++ /dev/null @@ -1,122 +0,0 @@ -From akpm@osdl.org Wed Feb 22 15:48:22 2006 -Message-Id: <200602222348.k1MNmIhI032277@shell0.pdx.osdl.net> -From: Linus Torvalds <torvalds@osdl.org> -Subject: PCI: resource address mismatch -To: torvalds@osdl.org, adaplas@pol.net, bjk@luxsci.net, greg@kroah.com, ink@jurassic.park.msu.ru, mm-commits@vger.kernel.org -Date: Wed, 22 Feb 2006 15:50:30 -0800 - - -From: Linus Torvalds <torvalds@osdl.org> - -On Tue, 21 Feb 2006, Ivan Kokshaysky wrote: -> There are two bogus entries in the BIOS memory map table which are -> conflicting with a prefetchable memory range of the AGP bridge: -> -> BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) -> BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) -> -> 0000:00:02.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP) (prog-if 00 [Normal decode]) -> Flags: bus master, fast devsel, latency 0 -> Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 -> I/O behind bridge: 0000c000-0000cfff -> Memory behind bridge: e7e00000-e7efffff -> Prefetchable memory behind bridge: fec00000-ffcfffff -> ^^^^^^^^^^^^^^^^^ - -Yes. However, it's pretty clear that the e820 entries are there for a -reason. Probably they are a hack by the BIOS maintainers to keep Windows -from stomping/moving that region, exactly because they want to keep the -bridge where it is (or, it's actually for the BIOS itself - the BIOS -tables are a horrid mess, and BIOS engineers are pretty hacky people: -they'll add random entries to make their own broken algorithms do the -"right thing"). - -> Starting from 2.6.13, kernel tries to resolve that sort of conflicts, -> so that prefetch window of the bridge and the framebuffer memory behind -> it get moved to 0x10000000. - -I think we could (and probably should) solve this another way: consider -the ACPI "reserved regions" from the e820 map exactly the same way that we -do other ACPI hints - they should restrict _new_ allocations, but not -impact stuff we figure out on our own. - -Basically, right now we assign _unassigned_ resources at "fs_initcall" -time. If we were to add in the e820 "reserved region" stuff before that -(but after we've done PCI discovery), we'd probably do the right thing. - -Right now we do the e820 reserved regions very early indeed: we call -"register_memory()" from setup_arch(). We could move at least part of it -(the part that registers the resources) down a bit. - -Here's a test-patch. I'm not saying we should absolutely do this, but it -might be interesting to try... - -Cc: "Antonino A. Daplas" <adaplas@pol.net> -Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> -Cc: <bjk@luxsci.net> -Signed-off-by: Andrew Morton <akpm@osdl.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - arch/i386/kernel/efi.c | 2 +- - arch/i386/kernel/setup.c | 22 +++++++++++++++++----- - 2 files changed, 18 insertions(+), 6 deletions(-) - ---- gregkh-2.6.orig/arch/i386/kernel/efi.c -+++ gregkh-2.6/arch/i386/kernel/efi.c -@@ -543,7 +543,7 @@ efi_initialize_iomem_resources(struct re - if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) > - 0x100000000ULL) - continue; -- res = alloc_bootmem_low(sizeof(struct resource)); -+ res = kzalloc(sizeof(struct resource), GFP_ATOMIC); - switch (md->type) { - case EFI_RESERVED_TYPE: - res->name = "Reserved Memory"; ---- gregkh-2.6.orig/arch/i386/kernel/setup.c -+++ gregkh-2.6/arch/i386/kernel/setup.c -@@ -1288,7 +1288,7 @@ legacy_init_iomem_resources(struct resou - struct resource *res; - if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) - continue; -- res = alloc_bootmem_low(sizeof(struct resource)); -+ res = kzalloc(sizeof(struct resource), GFP_ATOMIC); - switch (e820.map[i].type) { - case E820_RAM: res->name = "System RAM"; break; - case E820_ACPI: res->name = "ACPI Tables"; break; -@@ -1316,13 +1316,15 @@ legacy_init_iomem_resources(struct resou - - /* - * Request address space for all standard resources -+ * -+ * This is called just before pcibios_assign_resources(), which is also -+ * an fs_initcall, but is linked in later (in arch/i386/pci/i386.c). - */ --static void __init register_memory(void) -+static int __init request_standard_resources(void) - { -- unsigned long gapstart, gapsize, round; -- unsigned long long last; -- int i; -+ int i; - -+ printk("Setting up standard PCI resources\n"); - if (efi_enabled) - efi_initialize_iomem_resources(&code_resource, &data_resource); - else -@@ -1334,6 +1336,16 @@ static void __init register_memory(void) - /* request I/O space for devices used on all i[345]86 PCs */ - for (i = 0; i < STANDARD_IO_RESOURCES; i++) - request_resource(&ioport_resource, &standard_io_resources[i]); -+ return 0; -+} -+ -+fs_initcall(request_standard_resources); -+ -+static void __init register_memory(void) -+{ -+ unsigned long gapstart, gapsize, round; -+ unsigned long long last; -+ int i; - - /* - * Search for the bigest gap in the low 32 bits of the e820 diff --git a/pci/pci-return-max-reserved-busnr.patch b/pci/pci-return-max-reserved-busnr.patch deleted file mode 100644 index 074134e4737c9..0000000000000 --- a/pci/pci-return-max-reserved-busnr.patch +++ /dev/null @@ -1,58 +0,0 @@ -From kristen.c.accardi@intel.com Tue Jan 17 16:54:10 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -Subject: PCI: return max reserved busnr -Cc: <len.brown@intel.com>, <pavel@ucw.cz> -Date: Tue, 17 Jan 2006 16:56:56 -0800 -Message-Id: <1137545816.19858.46.camel@whizzy> - -Change the semantics of this call to return the max reserved -bus number instead of just the max assigned bus number. - -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/pci.c | 5 +++-- - include/linux/pci.h | 1 + - 2 files changed, 4 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/pci.c -+++ gregkh-2.6/drivers/pci/pci.c -@@ -19,7 +19,6 @@ - #include <asm/dma.h> /* isa_dma_bridge_buggy */ - #include "pci.h" - --#if 0 - - /** - * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children -@@ -34,7 +33,7 @@ pci_bus_max_busnr(struct pci_bus* bus) - struct list_head *tmp; - unsigned char max, n; - -- max = bus->number; -+ max = bus->subordinate; - list_for_each(tmp, &bus->children) { - n = pci_bus_max_busnr(pci_bus_b(tmp)); - if(n > max) -@@ -42,7 +41,9 @@ pci_bus_max_busnr(struct pci_bus* bus) - } - return max; - } -+EXPORT_SYMBOL_GPL(pci_bus_max_busnr); - -+#if 0 - /** - * pci_max_busnr - returns maximum PCI bus number - * ---- gregkh-2.6.orig/include/linux/pci.h -+++ gregkh-2.6/include/linux/pci.h -@@ -516,6 +516,7 @@ int pci_scan_bridge(struct pci_bus *bus, - void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *), - void *userdata); - int pci_cfg_space_size(struct pci_dev *dev); -+unsigned char pci_bus_max_busnr(struct pci_bus* bus); - - /* kmem_cache style wrapper around pci_alloc_consistent() */ - diff --git a/pci/pci-smbus-unhide-on-hp-compaq-nx6110.patch b/pci/pci-smbus-unhide-on-hp-compaq-nx6110.patch deleted file mode 100644 index 31689a08dfb90..0000000000000 --- a/pci/pci-smbus-unhide-on-hp-compaq-nx6110.patch +++ /dev/null @@ -1,32 +0,0 @@ -From tomek@koprowski.org Sun Feb 19 09:01:51 2006 -From: Tomek Koprowski <tomek@koprowski.org>(by way of Tomek Koprowski <tomek@koprowski.org>) -Date: Sun, 19 Feb 2006 18:03:24 +0100 -To: gregkh@suse.de -Subject: PCI: SMBus unhide on HP Compaq nx6110 -Message-Id: <200602191803.24639.tomek@koprowski.org> - -I attach a trivial patch for 2.6.15.4 that unhides SMBus controller -on an HP Compaq nx6110 notebook. - -Signed-off-by: Tomasz Koprowski <tomek@koprowski.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/quirks.c | 6 ++++++ - 1 file changed, 6 insertions(+) - ---- gregkh-2.6.orig/drivers/pci/quirks.c -+++ gregkh-2.6/drivers/pci/quirks.c -@@ -934,6 +934,12 @@ static void __init asus_hides_smbus_host - case 0x12bd: /* HP D530 */ - asus_hides_smbus = 1; - } -+ if (dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB) { -+ switch (dev->subsystem_device) { -+ case 0x099c: /* HP Compaq nx6110 */ -+ asus_hides_smbus = 1; -+ } -+ } - } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_TOSHIBA)) { - if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB) - switch(dev->subsystem_device) { diff --git a/pci/pci-the-scheduled-removal-of-pci_legacy_proc.patch b/pci/pci-the-scheduled-removal-of-pci_legacy_proc.patch deleted file mode 100644 index af8d6636509f5..0000000000000 --- a/pci/pci-the-scheduled-removal-of-pci_legacy_proc.patch +++ /dev/null @@ -1,204 +0,0 @@ -From bunk@stusta.de Sun Mar 5 07:50:07 2006 -Date: Sun, 5 Mar 2006 16:49:48 +0100 -From: Adrian Bunk <bunk@stusta.de> -To: gregkh@suse.de -Subject: PCI: the scheduled removal of PCI_LEGACY_PROC -Message-ID: <20060305154948.GA20287@stusta.de> -Content-Disposition: inline - -This patch contains the scheduled removal of PCI_LEGACY_PROC. - - -Signed-off-by: Adrian Bunk <bunk@stusta.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - Documentation/feature-removal-schedule.txt | 7 - - drivers/pci/Kconfig | 17 --- - drivers/pci/proc.c | 126 ----------------------------- - 3 files changed, 150 deletions(-) - ---- gregkh-2.6.orig/Documentation/feature-removal-schedule.txt -+++ gregkh-2.6/Documentation/feature-removal-schedule.txt -@@ -158,13 +158,6 @@ Who: Adrian Bunk <bunk@stusta.de> - - --------------------------- - --What: Legacy /proc/pci interface (PCI_LEGACY_PROC) --When: March 2006 --Why: deprecated since 2.5.53 in favor of lspci(8) --Who: Adrian Bunk <bunk@stusta.de> -- ----------------------------- -- - What: pci_module_init(driver) - When: January 2007 - Why: Is replaced by pci_register_driver(pci_driver). ---- gregkh-2.6.orig/drivers/pci/Kconfig -+++ gregkh-2.6/drivers/pci/Kconfig -@@ -13,23 +13,6 @@ config PCI_MSI - - If you don't know what to do here, say N. - --config PCI_LEGACY_PROC -- bool "Legacy /proc/pci interface" -- depends on PCI -- ---help--- -- This feature enables a procfs file -- /proc/pci -- that provides a -- summary of PCI devices in the system. -- -- This feature has been deprecated as of v2.5.53, in favor of using the -- tool lspci(8). This feature may be removed at a future date. -- -- lspci can provide the same data, as well as much more. lspci is a part of -- the pci-utils package, which should be installed by your distribution. -- See <file:Documentation/Changes> for information on where to get the latest -- version. -- -- When in doubt, say N. -- - config PCI_DEBUG - bool "PCI Debugging" - depends on PCI && DEBUG_KERNEL ---- gregkh-2.6.orig/drivers/pci/proc.c -+++ gregkh-2.6/drivers/pci/proc.c -@@ -458,131 +458,6 @@ int pci_proc_detach_bus(struct pci_bus* - return 0; - } - --#ifdef CONFIG_PCI_LEGACY_PROC -- --/* -- * Backward compatible /proc/pci interface. -- */ -- --/* -- * Convert some of the configuration space registers of the device at -- * address (bus,devfn) into a string (possibly several lines each). -- * The configuration string is stored starting at buf[len]. If the -- * string would exceed the size of the buffer (SIZE), 0 is returned. -- */ --static int show_dev_config(struct seq_file *m, void *v) --{ -- struct pci_dev *dev = v; -- struct pci_dev *first_dev; -- struct pci_driver *drv; -- u32 class_rev; -- unsigned char latency, min_gnt, max_lat; -- int reg; -- -- first_dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); -- if (dev == first_dev) -- seq_puts(m, "PCI devices found:\n"); -- pci_dev_put(first_dev); -- -- drv = pci_dev_driver(dev); -- -- pci_user_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); -- pci_user_read_config_byte (dev, PCI_LATENCY_TIMER, &latency); -- pci_user_read_config_byte (dev, PCI_MIN_GNT, &min_gnt); -- pci_user_read_config_byte (dev, PCI_MAX_LAT, &max_lat); -- seq_printf(m, " Bus %2d, device %3d, function %2d:\n", -- dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); -- seq_printf(m, " Class %04x", class_rev >> 16); -- seq_printf(m, ": PCI device %04x:%04x", dev->vendor, dev->device); -- seq_printf(m, " (rev %d).\n", class_rev & 0xff); -- -- if (dev->irq) -- seq_printf(m, " IRQ %d.\n", dev->irq); -- -- if (latency || min_gnt || max_lat) { -- seq_printf(m, " Master Capable. "); -- if (latency) -- seq_printf(m, "Latency=%d. ", latency); -- else -- seq_puts(m, "No bursts. "); -- if (min_gnt) -- seq_printf(m, "Min Gnt=%d.", min_gnt); -- if (max_lat) -- seq_printf(m, "Max Lat=%d.", max_lat); -- seq_putc(m, '\n'); -- } -- -- for (reg = 0; reg < 6; reg++) { -- struct resource *res = dev->resource + reg; -- unsigned long base, end, flags; -- -- base = res->start; -- end = res->end; -- flags = res->flags; -- if (!end) -- continue; -- -- if (flags & PCI_BASE_ADDRESS_SPACE_IO) { -- seq_printf(m, " I/O at 0x%lx [0x%lx].\n", -- base, end); -- } else { -- const char *pref, *type = "unknown"; -- -- if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH) -- pref = "P"; -- else -- pref = "Non-p"; -- switch (flags & PCI_BASE_ADDRESS_MEM_TYPE_MASK) { -- case PCI_BASE_ADDRESS_MEM_TYPE_32: -- type = "32 bit"; break; -- case PCI_BASE_ADDRESS_MEM_TYPE_1M: -- type = "20 bit"; break; -- case PCI_BASE_ADDRESS_MEM_TYPE_64: -- type = "64 bit"; break; -- } -- seq_printf(m, " %srefetchable %s memory at " -- "0x%lx [0x%lx].\n", pref, type, -- base, -- end); -- } -- } -- return 0; --} -- --static struct seq_operations proc_pci_op = { -- .start = pci_seq_start, -- .next = pci_seq_next, -- .stop = pci_seq_stop, -- .show = show_dev_config --}; -- --static int proc_pci_open(struct inode *inode, struct file *file) --{ -- return seq_open(file, &proc_pci_op); --} --static struct file_operations proc_pci_operations = { -- .open = proc_pci_open, -- .read = seq_read, -- .llseek = seq_lseek, -- .release = seq_release, --}; -- --static void legacy_proc_init(void) --{ -- struct proc_dir_entry * entry = create_proc_entry("pci", 0, NULL); -- if (entry) -- entry->proc_fops = &proc_pci_operations; --} -- --#else -- --static void legacy_proc_init(void) --{ -- --} -- --#endif /* CONFIG_PCI_LEGACY_PROC */ -- - static int proc_bus_pci_dev_open(struct inode *inode, struct file *file) - { - return seq_open(file, &proc_bus_pci_devices_op); -@@ -606,7 +481,6 @@ static int __init pci_proc_init(void) - while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { - pci_proc_attach_device(dev); - } -- legacy_proc_init(); - return 0; - } - diff --git a/pci/pcihp_skeleton.c-cleanup.patch b/pci/pcihp_skeleton.c-cleanup.patch deleted file mode 100644 index fd6fd73906431..0000000000000 --- a/pci/pcihp_skeleton.c-cleanup.patch +++ /dev/null @@ -1,125 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:03:18 2006 -Message-ID: <43D81F6F.2030606@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 10:01:35 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: pcihpd-discuss@lists.sourceforge.net, Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 7/11] pcihp_skeleton.c cleanup - -This patch cleans up pcihp_skelton.c as follows. - - o Move slot name area into struct slot. - o Replace kmalloc with kzalloc and clean up the arg of sizeof() - o Fix the wrong use of get_*_status() functions. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/hotplug/pcihp_skeleton.c | 33 +++++++++++---------------------- - 1 file changed, 11 insertions(+), 22 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/pcihp_skeleton.c -+++ gregkh-2.6/drivers/pci/hotplug/pcihp_skeleton.c -@@ -37,10 +37,12 @@ - #include <linux/init.h> - #include "pci_hotplug.h" - -+#define SLOT_NAME_SIZE 10 - struct slot { - u8 number; - struct hotplug_slot *hotplug_slot; - struct list_head slot_list; -+ char name[SLOT_NAME_SIZE]; - }; - - static LIST_HEAD(slot_list); -@@ -233,12 +235,10 @@ static void release_slot(struct hotplug_ - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - kfree(slot->hotplug_slot->info); -- kfree(slot->hotplug_slot->name); - kfree(slot->hotplug_slot); - kfree(slot); - } - --#define SLOT_NAME_SIZE 10 - static void make_slot_name(struct slot *slot) - { - /* -@@ -257,7 +257,6 @@ static int __init init_slots(void) - struct slot *slot; - struct hotplug_slot *hotplug_slot; - struct hotplug_slot_info *info; -- char *name; - int retval = -ENOMEM; - int i; - -@@ -266,31 +265,23 @@ static int __init init_slots(void) - * with the pci_hotplug subsystem. - */ - for (i = 0; i < num_slots; ++i) { -- slot = kmalloc(sizeof(struct slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(*slot), GFP_KERNEL); - if (!slot) - goto error; -- memset(slot, 0, sizeof(struct slot)); - -- hotplug_slot = kmalloc(sizeof(struct hotplug_slot), -- GFP_KERNEL); -+ hotplug_slot = kzalloc(sizeof(*hotplug_slot), GFP_KERNEL); - if (!hotplug_slot) - goto error_slot; -- memset(hotplug_slot, 0, sizeof (struct hotplug_slot)); - slot->hotplug_slot = hotplug_slot; - -- info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); -+ info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) - goto error_hpslot; -- memset(info, 0, sizeof (struct hotplug_slot_info)); - hotplug_slot->info = info; - -- name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); -- if (!name) -- goto error_info; -- hotplug_slot->name = name; -- - slot->number = i; - -+ hotplug_slot->name = slot->name; - hotplug_slot->private = slot; - hotplug_slot->release = &release_slot; - make_slot_name(slot); -@@ -300,16 +291,16 @@ static int __init init_slots(void) - * Initialize the slot info structure with some known - * good values. - */ -- info->power_status = get_power_status(slot); -- info->attention_status = get_attention_status(slot); -- info->latch_status = get_latch_status(slot); -- info->adapter_status = get_adapter_status(slot); -+ get_power_status(hotplug_slot, &info->power_status); -+ get_attention_status(hotplug_slot, &info->attention_status); -+ get_latch_status(hotplug_slot, &info->latch_status); -+ get_adapter_status(hotplug_slot, &info->adapter_status); - - dbg("registering slot %d\n", i); - retval = pci_hp_register(slot->hotplug_slot); - if (retval) { - err("pci_hp_register failed with error %d\n", retval); -- goto error_name; -+ goto error_info; - } - - /* add slot to our internal list */ -@@ -317,8 +308,6 @@ static int __init init_slots(void) - } - - return 0; --error_name: -- kfree(name); - error_info: - kfree(info); - error_hpslot: diff --git a/pci/shpchp-adapt-to-pci-driver-model.patch b/pci/shpchp-adapt-to-pci-driver-model.patch deleted file mode 100644 index 3671816a6379f..0000000000000 --- a/pci/shpchp-adapt-to-pci-driver-model.patch +++ /dev/null @@ -1,107 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Tue Feb 21 15:41:04 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Message-Id: <1140565551.24286.23.camel@whizzy> -Subject: shpchp: adapt to pci driver model -Date: Tue, 21 Feb 2006 15:45:50 -0800 - -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> - -This patch adapts SHPCHP driver to the PCI device driver model. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 4 ---- - drivers/pci/hotplug/shpchp_core.c | 26 +++++++------------------- - 2 files changed, 7 insertions(+), 23 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -82,7 +82,6 @@ struct event_info { - }; - - struct controller { -- struct list_head ctrl_list; - struct mutex crit_sect; /* critical section mutex */ - struct mutex cmd_lock; /* command lock */ - struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ -@@ -203,9 +202,6 @@ extern void shpchp_remove_ctrl_files(str - extern void cleanup_slots(struct controller *ctrl); - extern void queue_pushbutton_work(void *data); - --/* Global variables */ --extern struct list_head shpchp_ctrl_list; -- - struct ctrl_reg { - volatile u32 base_offset; - volatile u32 slot_avail1; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -39,7 +39,6 @@ - int shpchp_debug; - int shpchp_poll_mode; - int shpchp_poll_time; --LIST_HEAD(shpchp_ctrl_list); - struct workqueue_struct *shpchp_wq; - - #define DRIVER_VERSION "0.4" -@@ -433,8 +432,6 @@ static int shpc_probe(struct pci_dev *pd - ctrl->speed = PCI_SPEED_33MHz; - } - -- list_add(&ctrl->ctrl_list, &shpchp_ctrl_list); -- - shpchp_create_ctrl_files(ctrl); - - return 0; -@@ -447,20 +444,13 @@ err_out_none: - return -ENODEV; - } - --static void __exit unload_shpchpd(void) -+static void shpc_remove(struct pci_dev *dev) - { -- struct list_head *tmp; -- struct list_head *next; -- struct controller *ctrl; -- -- list_for_each_safe(tmp, next, &shpchp_ctrl_list) { -- ctrl = list_entry(tmp, struct controller, ctrl_list); -- shpchp_remove_ctrl_files(ctrl); -- ctrl->hpc_ops->release_ctlr(ctrl); -- kfree(ctrl); -- } -+ struct controller *ctrl = pci_get_drvdata(dev); - -- destroy_workqueue(shpchp_wq); -+ shpchp_remove_ctrl_files(ctrl); -+ ctrl->hpc_ops->release_ctlr(ctrl); -+ kfree(ctrl); - } - - static struct pci_device_id shpcd_pci_tbl[] = { -@@ -473,7 +463,7 @@ static struct pci_driver shpc_driver = { - .name = SHPC_MODULE_NAME, - .id_table = shpcd_pci_tbl, - .probe = shpc_probe, -- /* remove: shpc_remove_one, */ -+ .remove = shpc_remove, - }; - - static int __init shpcd_init(void) -@@ -500,10 +490,8 @@ static int __init shpcd_init(void) - static void __exit shpcd_cleanup(void) - { - dbg("unload_shpchpd()\n"); -- unload_shpchpd(); -- - pci_unregister_driver(&shpc_driver); -- -+ destroy_workqueue(shpchp_wq); - info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n"); - } - diff --git a/pci/shpchp-bugfix-add-missing-serialization.patch b/pci/shpchp-bugfix-add-missing-serialization.patch deleted file mode 100644 index 49be2533e42b1..0000000000000 --- a/pci/shpchp-bugfix-add-missing-serialization.patch +++ /dev/null @@ -1,197 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:02:31 2006 -Message-ID: <43D81F31.9010608@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 10:00:33 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 6/11] shpchp - bugfix: add missing serialization - -Current shpchp driver might cause system panic because of lack of -serialization. It can be reproduced very easily by the following -operation. - - # cd /sys/bus/pci/slots/<slot#> - # while true; do echo 0 > power ; echo 1 > power ; done & - # while true; do echo 0 > power ; echo 1 > power ; done & - -This patch fixes this issue by changing shpchp to get appropreate -semaphore for hot-plug operation. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp_ctrl.c | 66 +++++++++++++------------------------- - 1 file changed, 24 insertions(+), 42 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -307,15 +307,10 @@ static int board_added(struct slot *p_sl - __FUNCTION__, p_slot->device, - ctrl->slot_device_offset, hp_slot); - -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - /* Power on slot without connecting to bus */ - rc = p_slot->hpc_ops->power_on_slot(p_slot); - if (rc) { - err("%s: Failed to power on slot\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return -1; - } - -@@ -325,14 +320,12 @@ static int board_added(struct slot *p_sl - - if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, PCI_SPEED_33MHz))) { - err("%s: Issue of set bus speed mode command failed\n", __FUNCTION__); -- mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { - err("%s: Issue of Slot Enable command failed\n", __FUNCTION__); -- mutex_unlock(&ctrl->crit_sect); - return rc; - } - } -@@ -346,16 +339,12 @@ static int board_added(struct slot *p_sl - - if (rc || adapter_speed == PCI_SPEED_UNKNOWN) { - err("%s: Can't get adapter speed or bus mode mismatch\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - - rc = p_slot->hpc_ops->get_cur_bus_speed(p_slot, &bus_speed); - if (rc || bus_speed == PCI_SPEED_UNKNOWN) { - err("%s: Can't get bus operation speed\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } - -@@ -365,9 +354,6 @@ static int board_added(struct slot *p_sl - max_bus_speed = bus_speed; - } - -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - if ((rc = p_slot->hpc_ops->get_prog_int(p_slot, &pi))) { - err("%s: Can't get controller programming interface, set it to 1\n", __FUNCTION__); - pi = 1; -@@ -744,29 +730,25 @@ static void interrupt_event_handler(stru - int shpchp_enable_slot (struct slot *p_slot) - { - u8 getstatus = 0; -- int rc; -+ int rc, retval = -ENODEV; - - /* Check to see if (latch closed, card present, power off) */ - mutex_lock(&p_slot->ctrl->crit_sect); - rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); - if (rc || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } - rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } - rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (rc || getstatus) { - info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } -- mutex_unlock(&p_slot->ctrl->crit_sect); - - p_slot->is_a_board = 1; - -@@ -781,27 +763,29 @@ int shpchp_enable_slot (struct slot *p_s - && p_slot->ctrl->num_slots == 1) { - /* handle amd pogo errata; this must be done before enable */ - amd_pogo_errata_save_misc_reg(p_slot); -- rc = board_added(p_slot); -+ retval = board_added(p_slot); - /* handle amd pogo errata; this must be done after enable */ - amd_pogo_errata_restore_misc_reg(p_slot); - } else -- rc = board_added(p_slot); -+ retval = board_added(p_slot); - -- if (rc) { -+ if (retval) { - p_slot->hpc_ops->get_adapter_status(p_slot, - &(p_slot->presence_save)); - p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); - } - - update_slot_info(p_slot); -- return rc; -+ out: -+ mutex_unlock(&p_slot->ctrl->crit_sect); -+ return retval; - } - - - int shpchp_disable_slot (struct slot *p_slot) - { - u8 getstatus = 0; -- int ret = 0; -+ int rc, retval = -ENODEV; - - if (!p_slot->ctrl) - return -ENODEV; -@@ -809,28 +793,26 @@ int shpchp_disable_slot (struct slot *p_ - /* Check to see if (latch closed, card present, power on) */ - mutex_lock(&p_slot->ctrl->crit_sect); - -- ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); -- if (ret || !getstatus) { -+ rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); -+ if (rc || !getstatus) { - info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } -- ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); -- if (ret || getstatus) { -+ rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); -+ if (rc || getstatus) { - info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } -- ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); -- if (ret || !getstatus) { -+ rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); -+ if (rc || !getstatus) { - info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); -- mutex_unlock(&p_slot->ctrl->crit_sect); -- return -ENODEV; -+ goto out; - } -- mutex_unlock(&p_slot->ctrl->crit_sect); - -- ret = remove_board(p_slot); -+ retval = remove_board(p_slot); - update_slot_info(p_slot); -- return ret; -+ out: -+ mutex_unlock(&p_slot->ctrl->crit_sect); -+ return retval; - } - diff --git a/pci/shpchp-cleanup-bus-speed-handling.patch b/pci/shpchp-cleanup-bus-speed-handling.patch deleted file mode 100644 index a2b2552f2caad..0000000000000 --- a/pci/shpchp-cleanup-bus-speed-handling.patch +++ /dev/null @@ -1,762 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Tue Feb 28 21:56:42 2006 -Message-ID: <4405373F.2020806@jp.fujitsu.com> -Date: Wed, 01 Mar 2006 14:55:11 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: pcihpd-discuss@lists.sourceforge.net, Greg KH <greg@kroah.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Subject: shpchp: cleanup bus speed handling - -The code related to handling bus speed in SHPCHP driver is -unnecessarily complex. This patch cleans up and simplify that. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp_ctrl.c | 152 ++---------- - drivers/pci/hotplug/shpchp_hpc.c | 466 ++++++++++++-------------------------- - 2 files changed, 189 insertions(+), 429 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -198,7 +198,8 @@ static int change_bus_speed(struct contr - - dbg("%s: change to speed %d\n", __FUNCTION__, speed); - if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, speed))) { -- err("%s: Issue of set bus speed mode command failed\n", __FUNCTION__); -+ err("%s: Issue of set bus speed mode command failed\n", -+ __FUNCTION__); - return WRONG_BUS_FREQUENCY; - } - return rc; -@@ -209,33 +210,26 @@ static int fix_bus_speed(struct controll - enum pci_bus_speed msp) - { - int rc = 0; -- -- if (flag != 0) { /* Other slots on the same bus are occupied */ -- if ( asp < bsp ) { -- err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bsp, asp); -- return WRONG_BUS_FREQUENCY; -+ -+ /* -+ * If other slots on the same bus are occupied, we cannot -+ * change the bus speed. -+ */ -+ if (flag) { -+ if (asp < bsp) { -+ err("%s: speed of bus %x and adapter %x mismatch\n", -+ __FUNCTION__, bsp, asp); -+ rc = WRONG_BUS_FREQUENCY; - } -+ return rc; -+ } -+ -+ if (asp < msp) { -+ if (bsp != asp) -+ rc = change_bus_speed(ctrl, pslot, asp); - } else { -- /* Other slots on the same bus are empty */ -- if (msp == bsp) { -- /* if adapter_speed >= bus_speed, do nothing */ -- if (asp < bsp) { -- /* -- * Try to lower bus speed to accommodate the adapter if other slots -- * on the same controller are empty -- */ -- if ((rc = change_bus_speed(ctrl, pslot, asp))) -- return rc; -- } -- } else { -- if (asp < msp) { -- if ((rc = change_bus_speed(ctrl, pslot, asp))) -- return rc; -- } else { -- if ((rc = change_bus_speed(ctrl, pslot, msp))) -- return rc; -- } -- } -+ if (bsp != msp) -+ rc = change_bus_speed(ctrl, pslot, msp); - } - return rc; - } -@@ -252,8 +246,7 @@ static int board_added(struct slot *p_sl - u8 hp_slot; - u8 slots_not_empty = 0; - int rc = 0; -- enum pci_bus_speed adapter_speed, bus_speed, max_bus_speed; -- u8 pi, mode; -+ enum pci_bus_speed asp, bsp, msp; - struct controller *ctrl = p_slot->ctrl; - - hp_slot = p_slot->device - ctrl->slot_device_offset; -@@ -285,109 +278,36 @@ static int board_added(struct slot *p_sl - } - } - -- rc = p_slot->hpc_ops->get_adapter_speed(p_slot, &adapter_speed); -- /* 0 = PCI 33Mhz, 1 = PCI 66 Mhz, 2 = PCI-X 66 PA, 4 = PCI-X 66 ECC, */ -- /* 5 = PCI-X 133 PA, 7 = PCI-X 133 ECC, 0xa = PCI-X 133 Mhz 266, */ -- /* 0xd = PCI-X 133 Mhz 533 */ -- /* This encoding is different from the one used in cur_bus_speed & */ -- /* max_bus_speed */ -- -- if (rc || adapter_speed == PCI_SPEED_UNKNOWN) { -- err("%s: Can't get adapter speed or bus mode mismatch\n", __FUNCTION__); -+ rc = p_slot->hpc_ops->get_adapter_speed(p_slot, &asp); -+ if (rc) { -+ err("%s: Can't get adapter speed or bus mode mismatch\n", -+ __FUNCTION__); - return WRONG_BUS_FREQUENCY; - } - -- rc = p_slot->hpc_ops->get_cur_bus_speed(p_slot, &bus_speed); -- if (rc || bus_speed == PCI_SPEED_UNKNOWN) { -+ rc = p_slot->hpc_ops->get_cur_bus_speed(p_slot, &bsp); -+ if (rc) { - err("%s: Can't get bus operation speed\n", __FUNCTION__); - return WRONG_BUS_FREQUENCY; - } - -- rc = p_slot->hpc_ops->get_max_bus_speed(p_slot, &max_bus_speed); -- if (rc || max_bus_speed == PCI_SPEED_UNKNOWN) { -+ rc = p_slot->hpc_ops->get_max_bus_speed(p_slot, &msp); -+ if (rc) { - err("%s: Can't get max bus operation speed\n", __FUNCTION__); -- max_bus_speed = bus_speed; -- } -- -- if ((rc = p_slot->hpc_ops->get_prog_int(p_slot, &pi))) { -- err("%s: Can't get controller programming interface, set it to 1\n", __FUNCTION__); -- pi = 1; -+ msp = bsp; - } - - /* Check if there are other slots or devices on the same bus */ - if (!list_empty(&ctrl->pci_dev->subordinate->devices)) - slots_not_empty = 1; - -- dbg("%s: slots_not_empty %d, pi %d\n", __FUNCTION__, -- slots_not_empty, pi); -- dbg("adapter_speed %d, bus_speed %d, max_bus_speed %d\n", -- adapter_speed, bus_speed, max_bus_speed); -- -- if (pi == 2) { -- dbg("%s: In PI = %d\n", __FUNCTION__, pi); -- if ((rc = p_slot->hpc_ops->get_mode1_ECC_cap(p_slot, &mode))) { -- err("%s: Can't get Mode1_ECC, set mode to 0\n", __FUNCTION__); -- mode = 0; -- } -+ dbg("%s: slots_not_empty %d, adapter_speed %d, bus_speed %d, " -+ "max_bus_speed %d\n", __FUNCTION__, slots_not_empty, asp, -+ bsp, msp); - -- switch (adapter_speed) { -- case PCI_SPEED_133MHz_PCIX_533: -- case PCI_SPEED_133MHz_PCIX_266: -- if ((bus_speed != adapter_speed) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- break; -- case PCI_SPEED_133MHz_PCIX_ECC: -- case PCI_SPEED_133MHz_PCIX: -- if (mode) { /* Bus - Mode 1 ECC */ -- if ((bus_speed != 0x7) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- } else { -- if ((bus_speed != 0x4) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- } -- break; -- case PCI_SPEED_66MHz_PCIX_ECC: -- case PCI_SPEED_66MHz_PCIX: -- if (mode) { /* Bus - Mode 1 ECC */ -- if ((bus_speed != 0x5) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- } else { -- if ((bus_speed != 0x2) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- } -- break; -- case PCI_SPEED_66MHz: -- if ((bus_speed != 0x1) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- break; -- case PCI_SPEED_33MHz: -- if (bus_speed > 0x0) { -- if (slots_not_empty == 0) { -- if ((rc = change_bus_speed(ctrl, p_slot, adapter_speed))) -- return rc; -- } else { -- err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed); -- return WRONG_BUS_FREQUENCY; -- } -- } -- break; -- default: -- err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed); -- return WRONG_BUS_FREQUENCY; -- } -- } else { -- /* If adpater_speed == bus_speed, nothing to do here */ -- dbg("%s: In PI = %d\n", __FUNCTION__, pi); -- if ((adapter_speed != bus_speed) && -- ((rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, adapter_speed, bus_speed, max_bus_speed)))) -- return rc; -- } -+ rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, asp, bsp, msp); -+ if (rc) -+ return rc; - - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -82,31 +82,6 @@ - #define SLOT_100MHZ_PCIX_533 0x0f000000 - #define SLOT_133MHZ_PCIX_533 0xf0000000 - -- --/* Secondary Bus Configuration Register */ --/* For PI = 1, Bits 0 to 2 have been encoded as follows to show current bus speed/mode */ --#define PCI_33MHZ 0x0 --#define PCI_66MHZ 0x1 --#define PCIX_66MHZ 0x2 --#define PCIX_100MHZ 0x3 --#define PCIX_133MHZ 0x4 -- --/* For PI = 2, Bits 0 to 3 have been encoded as follows to show current bus speed/mode */ --#define PCI_33MHZ 0x0 --#define PCI_66MHZ 0x1 --#define PCIX_66MHZ 0x2 --#define PCIX_100MHZ 0x3 --#define PCIX_133MHZ 0x4 --#define PCIX_66MHZ_ECC 0x5 --#define PCIX_100MHZ_ECC 0x6 --#define PCIX_133MHZ_ECC 0x7 --#define PCIX_66MHZ_266 0x9 --#define PCIX_100MHZ_266 0xa --#define PCIX_133MHZ_266 0xb --#define PCIX_66MHZ_533 0x11 --#define PCIX_100MHZ_533 0x12 --#define PCIX_133MHZ_533 0x13 -- - /* Slot Configuration */ - #define SLOT_NUM 0x0000001F - #define FIRST_DEV_NUM 0x00001F00 -@@ -548,81 +523,41 @@ static int hpc_get_prog_int(struct slot - - static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value) - { -- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; -- u32 slot_reg; -- u16 slot_status, sec_bus_status; -- u8 m66_cap, pcix_cap, pi; - int retval = 0; -+ struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; -+ u32 slot_reg = readl(php_ctlr->creg + SLOT1 + 4 * slot->hp_slot); -+ u8 pcix_cap = (slot_reg >> 12) & 7; -+ u8 m66_cap = (slot_reg >> 9) & 1; - - DBG_ENTER_ROUTINE - -- if (!slot->ctrl->hpc_ctlr_handle) { -- err("%s: Invalid HPC controller handle!\n", __FUNCTION__); -- return -1; -- } -- -- if (slot->hp_slot >= php_ctlr->num_slots) { -- err("%s: Invalid HPC slot number!\n", __FUNCTION__); -- return -1; -- } -- -- pi = readb(php_ctlr->creg + PROG_INTERFACE); -- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot)); -- dbg("%s: pi = %d, slot_reg = %x\n", __FUNCTION__, pi, slot_reg); -- slot_status = (u16) slot_reg; -- dbg("%s: slot_status = %x\n", __FUNCTION__, slot_status); -- sec_bus_status = readw(php_ctlr->creg + SEC_BUS_CONFIG); -- -- pcix_cap = (u8) ((slot_status & 0x3000) >> 12); -- dbg("%s: pcix_cap = %x\n", __FUNCTION__, pcix_cap); -- m66_cap = (u8) ((slot_status & 0x0200) >> 9); -- dbg("%s: m66_cap = %x\n", __FUNCTION__, m66_cap); -+ dbg("%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n", -+ __FUNCTION__, slot_reg, pcix_cap, m66_cap); - -- -- if (pi == 2) { -- switch (pcix_cap) { -- case 0: -- *value = m66_cap ? PCI_SPEED_66MHz : PCI_SPEED_33MHz; -- break; -- case 1: -- *value = PCI_SPEED_66MHz_PCIX; -- break; -- case 3: -- *value = PCI_SPEED_133MHz_PCIX; -- break; -- case 4: -- *value = PCI_SPEED_133MHz_PCIX_266; -- break; -- case 5: -- *value = PCI_SPEED_133MHz_PCIX_533; -- break; -- case 2: /* Reserved */ -- default: -- *value = PCI_SPEED_UNKNOWN; -- retval = -ENODEV; -- break; -- } -- } else { -- switch (pcix_cap) { -- case 0: -- *value = m66_cap ? PCI_SPEED_66MHz : PCI_SPEED_33MHz; -- break; -- case 1: -- *value = PCI_SPEED_66MHz_PCIX; -- break; -- case 3: -- *value = PCI_SPEED_133MHz_PCIX; -- break; -- case 2: /* Reserved */ -- default: -- *value = PCI_SPEED_UNKNOWN; -- retval = -ENODEV; -- break; -- } -+ switch (pcix_cap) { -+ case 0x0: -+ *value = m66_cap ? PCI_SPEED_66MHz : PCI_SPEED_33MHz; -+ break; -+ case 0x1: -+ *value = PCI_SPEED_66MHz_PCIX; -+ break; -+ case 0x3: -+ *value = PCI_SPEED_133MHz_PCIX; -+ break; -+ case 0x4: -+ *value = PCI_SPEED_133MHz_PCIX_266; -+ break; -+ case 0x5: -+ *value = PCI_SPEED_133MHz_PCIX_533; -+ break; -+ case 0x2: -+ default: -+ *value = PCI_SPEED_UNKNOWN; -+ retval = -ENODEV; -+ break; - } - - dbg("Adapter speed = %d\n", *value); -- - DBG_LEAVE_ROUTINE - return retval; - } -@@ -965,98 +900,66 @@ static int hpc_slot_disable(struct slot - - static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value) - { -- u8 slot_cmd; -- u8 pi; -- int retval = 0; -+ int retval; - struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; -+ u8 pi, cmd; - - DBG_ENTER_ROUTINE -- -- if (!slot->ctrl->hpc_ctlr_handle) { -- err("%s: Invalid HPC controller handle!\n", __FUNCTION__); -- return -1; -- } - - pi = readb(php_ctlr->creg + PROG_INTERFACE); -- -- if (pi == 1) { -- switch (value) { -- case 0: -- slot_cmd = SETA_PCI_33MHZ; -- break; -- case 1: -- slot_cmd = SETA_PCI_66MHZ; -- break; -- case 2: -- slot_cmd = SETA_PCIX_66MHZ; -- break; -- case 3: -- slot_cmd = SETA_PCIX_100MHZ; -- break; -- case 4: -- slot_cmd = SETA_PCIX_133MHZ; -- break; -- default: -- slot_cmd = PCI_SPEED_UNKNOWN; -- retval = -ENODEV; -- return retval; -- } -- } else { -- switch (value) { -- case 0: -- slot_cmd = SETB_PCI_33MHZ; -- break; -- case 1: -- slot_cmd = SETB_PCI_66MHZ; -- break; -- case 2: -- slot_cmd = SETB_PCIX_66MHZ_PM; -- break; -- case 3: -- slot_cmd = SETB_PCIX_100MHZ_PM; -- break; -- case 4: -- slot_cmd = SETB_PCIX_133MHZ_PM; -- break; -- case 5: -- slot_cmd = SETB_PCIX_66MHZ_EM; -- break; -- case 6: -- slot_cmd = SETB_PCIX_100MHZ_EM; -- break; -- case 7: -- slot_cmd = SETB_PCIX_133MHZ_EM; -- break; -- case 8: -- slot_cmd = SETB_PCIX_66MHZ_266; -- break; -- case 0x9: -- slot_cmd = SETB_PCIX_100MHZ_266; -- break; -- case 0xa: -- slot_cmd = SETB_PCIX_133MHZ_266; -- break; -- case 0xb: -- slot_cmd = SETB_PCIX_66MHZ_533; -- break; -- case 0xc: -- slot_cmd = SETB_PCIX_100MHZ_533; -- break; -- case 0xd: -- slot_cmd = SETB_PCIX_133MHZ_533; -- break; -- default: -- slot_cmd = PCI_SPEED_UNKNOWN; -- retval = -ENODEV; -- return retval; -- } -+ if ((pi == 1) && (value > PCI_SPEED_133MHz_PCIX)) -+ return -EINVAL; - -+ switch (value) { -+ case PCI_SPEED_33MHz: -+ cmd = SETA_PCI_33MHZ; -+ break; -+ case PCI_SPEED_66MHz: -+ cmd = SETA_PCI_66MHZ; -+ break; -+ case PCI_SPEED_66MHz_PCIX: -+ cmd = SETA_PCIX_66MHZ; -+ break; -+ case PCI_SPEED_100MHz_PCIX: -+ cmd = SETA_PCIX_100MHZ; -+ break; -+ case PCI_SPEED_133MHz_PCIX: -+ cmd = SETA_PCIX_133MHZ; -+ break; -+ case PCI_SPEED_66MHz_PCIX_ECC: -+ cmd = SETB_PCIX_66MHZ_EM; -+ break; -+ case PCI_SPEED_100MHz_PCIX_ECC: -+ cmd = SETB_PCIX_100MHZ_EM; -+ break; -+ case PCI_SPEED_133MHz_PCIX_ECC: -+ cmd = SETB_PCIX_133MHZ_EM; -+ break; -+ case PCI_SPEED_66MHz_PCIX_266: -+ cmd = SETB_PCIX_66MHZ_266; -+ break; -+ case PCI_SPEED_100MHz_PCIX_266: -+ cmd = SETB_PCIX_100MHZ_266; -+ break; -+ case PCI_SPEED_133MHz_PCIX_266: -+ cmd = SETB_PCIX_133MHZ_266; -+ break; -+ case PCI_SPEED_66MHz_PCIX_533: -+ cmd = SETB_PCIX_66MHZ_533; -+ break; -+ case PCI_SPEED_100MHz_PCIX_533: -+ cmd = SETB_PCIX_100MHZ_533; -+ break; -+ case PCI_SPEED_133MHz_PCIX_533: -+ cmd = SETB_PCIX_133MHZ_533; -+ break; -+ default: -+ return -EINVAL; - } -- retval = shpc_write_cmd(slot, 0, slot_cmd); -- if (retval) { -+ -+ retval = shpc_write_cmd(slot, 0, cmd); -+ if (retval) - err("%s: Write command failed!\n", __FUNCTION__); -- return -1; -- } - - DBG_LEAVE_ROUTINE - return retval; -@@ -1163,64 +1066,43 @@ static irqreturn_t shpc_isr(int IRQ, voi - - static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value) - { -+ int retval = 0; - struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; - enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN; -- int retval = 0; -- u8 pi; -- u32 slot_avail1, slot_avail2; -+ u8 pi = readb(php_ctlr->creg + PROG_INTERFACE); -+ u32 slot_avail1 = readl(php_ctlr->creg + SLOT_AVAIL1); -+ u32 slot_avail2 = readl(php_ctlr->creg + SLOT_AVAIL2); - - DBG_ENTER_ROUTINE - -- if (!slot->ctrl->hpc_ctlr_handle) { -- err("%s: Invalid HPC controller handle!\n", __FUNCTION__); -- return -1; -- } -- -- if (slot->hp_slot >= php_ctlr->num_slots) { -- err("%s: Invalid HPC slot number!\n", __FUNCTION__); -- return -1; -- } -- -- pi = readb(php_ctlr->creg + PROG_INTERFACE); -- slot_avail1 = readl(php_ctlr->creg + SLOT_AVAIL1); -- slot_avail2 = readl(php_ctlr->creg + SLOT_AVAIL2); -- - if (pi == 2) { - if (slot_avail2 & SLOT_133MHZ_PCIX_533) -- bus_speed = PCIX_133MHZ_533; -+ bus_speed = PCI_SPEED_133MHz_PCIX_533; - else if (slot_avail2 & SLOT_100MHZ_PCIX_533) -- bus_speed = PCIX_100MHZ_533; -+ bus_speed = PCI_SPEED_100MHz_PCIX_533; - else if (slot_avail2 & SLOT_66MHZ_PCIX_533) -- bus_speed = PCIX_66MHZ_533; -+ bus_speed = PCI_SPEED_66MHz_PCIX_533; - else if (slot_avail2 & SLOT_133MHZ_PCIX_266) -- bus_speed = PCIX_133MHZ_266; -+ bus_speed = PCI_SPEED_133MHz_PCIX_266; - else if (slot_avail2 & SLOT_100MHZ_PCIX_266) -- bus_speed = PCIX_100MHZ_266; -+ bus_speed = PCI_SPEED_100MHz_PCIX_266; - else if (slot_avail2 & SLOT_66MHZ_PCIX_266) -- bus_speed = PCIX_66MHZ_266; -- else if (slot_avail1 & SLOT_133MHZ_PCIX) -- bus_speed = PCIX_133MHZ; -- else if (slot_avail1 & SLOT_100MHZ_PCIX) -- bus_speed = PCIX_100MHZ; -- else if (slot_avail1 & SLOT_66MHZ_PCIX) -- bus_speed = PCIX_66MHZ; -- else if (slot_avail2 & SLOT_66MHZ) -- bus_speed = PCI_66MHZ; -- else if (slot_avail1 & SLOT_33MHZ) -- bus_speed = PCI_33MHZ; -- else bus_speed = PCI_SPEED_UNKNOWN; -- } else { -+ bus_speed = PCI_SPEED_66MHz_PCIX_266; -+ } -+ -+ if (bus_speed == PCI_SPEED_UNKNOWN) { - if (slot_avail1 & SLOT_133MHZ_PCIX) -- bus_speed = PCIX_133MHZ; -+ bus_speed = PCI_SPEED_133MHz_PCIX; - else if (slot_avail1 & SLOT_100MHZ_PCIX) -- bus_speed = PCIX_100MHZ; -+ bus_speed = PCI_SPEED_100MHz_PCIX; - else if (slot_avail1 & SLOT_66MHZ_PCIX) -- bus_speed = PCIX_66MHZ; -+ bus_speed = PCI_SPEED_66MHz_PCIX; - else if (slot_avail2 & SLOT_66MHZ) -- bus_speed = PCI_66MHZ; -+ bus_speed = PCI_SPEED_66MHz; - else if (slot_avail1 & SLOT_33MHZ) -- bus_speed = PCI_33MHZ; -- else bus_speed = PCI_SPEED_UNKNOWN; -+ bus_speed = PCI_SPEED_33MHz; -+ else -+ retval = -ENODEV; - } - - *value = bus_speed; -@@ -1231,111 +1113,69 @@ static int hpc_get_max_bus_speed (struct - - static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value) - { -+ int retval = 0; - struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; - enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN; -- u16 sec_bus_status; -- int retval = 0; -- u8 pi; -+ u16 sec_bus_reg = readw(php_ctlr->creg + SEC_BUS_CONFIG); -+ u8 pi = readb(php_ctlr->creg + PROG_INTERFACE); -+ u8 speed_mode = (pi == 2) ? (sec_bus_reg & 0xF) : (sec_bus_reg & 0x7); - - DBG_ENTER_ROUTINE - -- if (!slot->ctrl->hpc_ctlr_handle) { -- err("%s: Invalid HPC controller handle!\n", __FUNCTION__); -- return -1; -- } -- -- if (slot->hp_slot >= php_ctlr->num_slots) { -- err("%s: Invalid HPC slot number!\n", __FUNCTION__); -- return -1; -+ if ((pi == 1) && (speed_mode > 4)) { -+ *value = PCI_SPEED_UNKNOWN; -+ return -ENODEV; - } - -- pi = readb(php_ctlr->creg + PROG_INTERFACE); -- sec_bus_status = readw(php_ctlr->creg + SEC_BUS_CONFIG); -- -- if (pi == 2) { -- switch (sec_bus_status & 0x000f) { -- case 0: -- bus_speed = PCI_SPEED_33MHz; -- break; -- case 1: -- bus_speed = PCI_SPEED_66MHz; -- break; -- case 2: -- bus_speed = PCI_SPEED_66MHz_PCIX; -- break; -- case 3: -- bus_speed = PCI_SPEED_100MHz_PCIX; -- break; -- case 4: -- bus_speed = PCI_SPEED_133MHz_PCIX; -- break; -- case 5: -- bus_speed = PCI_SPEED_66MHz_PCIX_ECC; -- break; -- case 6: -- bus_speed = PCI_SPEED_100MHz_PCIX_ECC; -- break; -- case 7: -- bus_speed = PCI_SPEED_133MHz_PCIX_ECC; -- break; -- case 8: -- bus_speed = PCI_SPEED_66MHz_PCIX_266; -- break; -- case 9: -- bus_speed = PCI_SPEED_100MHz_PCIX_266; -- break; -- case 0xa: -- bus_speed = PCI_SPEED_133MHz_PCIX_266; -- break; -- case 0xb: -- bus_speed = PCI_SPEED_66MHz_PCIX_533; -- break; -- case 0xc: -- bus_speed = PCI_SPEED_100MHz_PCIX_533; -- break; -- case 0xd: -- bus_speed = PCI_SPEED_133MHz_PCIX_533; -- break; -- case 0xe: -- case 0xf: -- default: -- bus_speed = PCI_SPEED_UNKNOWN; -- break; -- } -- } else { -- /* In the case where pi is undefined, default it to 1 */ -- switch (sec_bus_status & 0x0007) { -- case 0: -- bus_speed = PCI_SPEED_33MHz; -- break; -- case 1: -- bus_speed = PCI_SPEED_66MHz; -- break; -- case 2: -- bus_speed = PCI_SPEED_66MHz_PCIX; -- break; -- case 3: -- bus_speed = PCI_SPEED_100MHz_PCIX; -- break; -- case 4: -- bus_speed = PCI_SPEED_133MHz_PCIX; -- break; -- case 5: -- bus_speed = PCI_SPEED_UNKNOWN; /* Reserved */ -- break; -- case 6: -- bus_speed = PCI_SPEED_UNKNOWN; /* Reserved */ -- break; -- case 7: -- bus_speed = PCI_SPEED_UNKNOWN; /* Reserved */ -- break; -- default: -- bus_speed = PCI_SPEED_UNKNOWN; -- break; -- } -+ switch (speed_mode) { -+ case 0x0: -+ *value = PCI_SPEED_33MHz; -+ break; -+ case 0x1: -+ *value = PCI_SPEED_66MHz; -+ break; -+ case 0x2: -+ *value = PCI_SPEED_66MHz_PCIX; -+ break; -+ case 0x3: -+ *value = PCI_SPEED_100MHz_PCIX; -+ break; -+ case 0x4: -+ *value = PCI_SPEED_133MHz_PCIX; -+ break; -+ case 0x5: -+ *value = PCI_SPEED_66MHz_PCIX_ECC; -+ break; -+ case 0x6: -+ *value = PCI_SPEED_100MHz_PCIX_ECC; -+ break; -+ case 0x7: -+ *value = PCI_SPEED_133MHz_PCIX_ECC; -+ break; -+ case 0x8: -+ *value = PCI_SPEED_66MHz_PCIX_266; -+ break; -+ case 0x9: -+ *value = PCI_SPEED_100MHz_PCIX_266; -+ break; -+ case 0xa: -+ *value = PCI_SPEED_133MHz_PCIX_266; -+ break; -+ case 0xb: -+ *value = PCI_SPEED_66MHz_PCIX_533; -+ break; -+ case 0xc: -+ *value = PCI_SPEED_100MHz_PCIX_533; -+ break; -+ case 0xd: -+ *value = PCI_SPEED_133MHz_PCIX_533; -+ break; -+ default: -+ *value = PCI_SPEED_UNKNOWN; -+ retval = -ENODEV; -+ break; - } - -- *value = bus_speed; - dbg("Current bus speed = %d\n", bus_speed); - DBG_LEAVE_ROUTINE - return retval; diff --git a/pci/shpchp-cleanup-check-command-status.patch b/pci/shpchp-cleanup-check-command-status.patch deleted file mode 100644 index d54b3a7b52350..0000000000000 --- a/pci/shpchp-cleanup-check-command-status.patch +++ /dev/null @@ -1,348 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:01:26 2006 -Message-ID: <43D81EEC.4000003@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 09:59:24 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 5/11] shpchp - cleanup check command status - -This patch cleanups codes that check the command status. For this, it -introduces a new semaphore "cmd_sem" for each controller. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 1 - drivers/pci/hotplug/shpchp_ctrl.c | 120 -------------------------------------- - drivers/pci/hotplug/shpchp_hpc.c | 25 ++++++- - 3 files changed, 23 insertions(+), 123 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -80,6 +80,7 @@ struct event_info { - struct controller { - struct list_head ctrl_list; - struct mutex crit_sect; /* critical section mutex */ -+ struct mutex cmd_lock; /* command lock */ - struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ - int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -242,21 +242,10 @@ static int change_bus_speed(struct contr - int rc = 0; - - dbg("%s: change to speed %d\n", __FUNCTION__, speed); -- mutex_lock(&ctrl->crit_sect); - if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, speed))) { - err("%s: Issue of set bus speed mode command failed\n", __FUNCTION__); -- mutex_unlock(&ctrl->crit_sect); -- return WRONG_BUS_FREQUENCY; -- } -- -- if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { -- err("%s: Can't set bus speed/mode in the case of adapter & bus mismatch\n", -- __FUNCTION__); -- err("%s: Error code (%d)\n", __FUNCTION__, rc); -- mutex_unlock(&ctrl->crit_sect); - return WRONG_BUS_FREQUENCY; - } -- mutex_unlock(&ctrl->crit_sect); - return rc; - } - -@@ -330,15 +319,6 @@ static int board_added(struct slot *p_sl - return -1; - } - -- rc = p_slot->hpc_ops->check_cmd_status(ctrl); -- if (rc) { -- err("%s: Failed to power on slot, error code(%d)\n", __FUNCTION__, rc); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- return -1; -- } -- -- - if ((ctrl->pci_dev->vendor == 0x8086) && (ctrl->pci_dev->device == 0x0332)) { - if (slots_not_empty) - return WRONG_BUS_FREQUENCY; -@@ -349,25 +329,12 @@ static int board_added(struct slot *p_sl - return WRONG_BUS_FREQUENCY; - } - -- if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { -- err("%s: Can't set bus speed/mode in the case of adapter & bus mismatch\n", -- __FUNCTION__); -- err("%s: Error code (%d)\n", __FUNCTION__, rc); -- mutex_unlock(&ctrl->crit_sect); -- return WRONG_BUS_FREQUENCY; -- } - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { - err("%s: Issue of Slot Enable command failed\n", __FUNCTION__); - mutex_unlock(&ctrl->crit_sect); - return rc; - } -- -- if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { -- err("%s: Failed to enable slot, error code(%d)\n", __FUNCTION__, rc); -- mutex_unlock(&ctrl->crit_sect); -- return rc; -- } - } - - rc = p_slot->hpc_ops->get_adapter_speed(p_slot, &adapter_speed); -@@ -481,22 +448,12 @@ static int board_added(struct slot *p_sl - return rc; - } - -- mutex_lock(&ctrl->crit_sect); - /* turn on board, blink green LED, turn off Amber LED */ - if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) { - err("%s: Issue of Slot Enable command failed\n", __FUNCTION__); -- mutex_unlock(&ctrl->crit_sect); - return rc; - } - -- if ((rc = p_slot->hpc_ops->check_cmd_status(ctrl))) { -- err("%s: Failed to enable slot, error code(%d)\n", __FUNCTION__, rc); -- mutex_unlock(&ctrl->crit_sect); -- return rc; -- } -- -- mutex_unlock(&ctrl->crit_sect); -- - /* Wait for ~1 second */ - wait_for_ctrl_irq (ctrl); - -@@ -520,40 +477,18 @@ static int board_added(struct slot *p_sl - p_slot->is_a_board = 0x01; - p_slot->pwr_save = 1; - -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - p_slot->hpc_ops->green_led_on(p_slot); - -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - return 0; - - err_exit: -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - /* turn off slot, turn on Amber LED, turn off Green LED */ - rc = p_slot->hpc_ops->slot_disable(p_slot); - if (rc) { - err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return rc; - } - -- rc = p_slot->hpc_ops->check_cmd_status(ctrl); -- if (rc) { -- err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- return rc; -- } -- -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - return(rc); - } - -@@ -580,37 +515,19 @@ static int remove_board(struct slot *p_s - if (p_slot->is_a_board) - p_slot->status = 0x01; - -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - /* turn off slot, turn on Amber LED, turn off Green LED */ - rc = p_slot->hpc_ops->slot_disable(p_slot); - if (rc) { - err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return rc; - } -- -- rc = p_slot->hpc_ops->check_cmd_status(ctrl); -- if (rc) { -- err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- return rc; -- } - - rc = p_slot->hpc_ops->set_attention_status(p_slot, 0); - if (rc) { - err("%s: Issue of Set Attention command failed\n", __FUNCTION__); -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - return rc; - } - -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - p_slot->pwr_save = 0; - p_slot->is_a_board = 0; - -@@ -654,15 +571,9 @@ static void shpchp_pushbutton_thread (un - } else { - p_slot->state = POWERON_STATE; - -- if (shpchp_enable_slot(p_slot)) { -- /* Wait for exclusive access to hardware */ -- mutex_lock(&p_slot->ctrl->crit_sect); -- -+ if (shpchp_enable_slot(p_slot)) - p_slot->hpc_ops->green_led_off(p_slot); - -- /* Done with exclusive hardware access */ -- mutex_unlock(&p_slot->ctrl->crit_sect); -- } - p_slot->state = STATIC_STATE; - } - -@@ -767,27 +678,12 @@ static void interrupt_event_handler(stru - - switch (p_slot->state) { - case BLINKINGOFF_STATE: -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - p_slot->hpc_ops->green_led_on(p_slot); -- - p_slot->hpc_ops->set_attention_status(p_slot, 0); -- -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - break; - case BLINKINGON_STATE: -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - p_slot->hpc_ops->green_led_off(p_slot); -- - p_slot->hpc_ops->set_attention_status(p_slot, 0); -- -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - break; - default: - warn("Not a valid state\n"); -@@ -812,17 +708,10 @@ static void interrupt_event_handler(stru - info(msg_button_on, p_slot->number); - } - -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - /* blink green LED and turn off amber */ - p_slot->hpc_ops->green_led_blink(p_slot); -- - p_slot->hpc_ops->set_attention_status(p_slot, 0); - -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); -- - init_timer(&p_slot->task_event); - p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ - p_slot->task_event.function = (void (*)(unsigned long)) pushbutton_helper_thread; -@@ -833,15 +722,8 @@ static void interrupt_event_handler(stru - } else if (ctrl->event_queue[loop].event_type == INT_POWER_FAULT) { - /***********POWER FAULT********************/ - dbg("%s: power fault\n", __FUNCTION__); -- /* Wait for exclusive access to hardware */ -- mutex_lock(&ctrl->crit_sect); -- - p_slot->hpc_ops->set_attention_status(p_slot, 1); -- - p_slot->hpc_ops->green_led_off(p_slot); -- -- /* Done with exclusive hardware access */ -- mutex_unlock(&ctrl->crit_sect); - } else { - /* refresh notification */ - if (p_slot) ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -231,6 +231,7 @@ static spinlock_t list_lock; - static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs); - - static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds); -+static int hpc_check_cmd_status(struct controller *ctrl); - - /* This is the interrupt polling timeout function. */ - static void int_poll_timeout(unsigned long lphp_ctlr) -@@ -303,10 +304,13 @@ static int shpc_write_cmd(struct slot *s - int i; - - DBG_ENTER_ROUTINE -- -+ -+ mutex_lock(&slot->ctrl->cmd_lock); -+ - if (!php_ctlr) { - err("%s: Invalid HPC controller handle!\n", __FUNCTION__); -- return -1; -+ retval = -EINVAL; -+ goto out; - } - - for (i = 0; i < 10; i++) { -@@ -323,7 +327,8 @@ static int shpc_write_cmd(struct slot *s - if (cmd_status & 0x1) { - /* After 1 sec and and the controller is still busy */ - err("%s : Controller is still busy after 1 sec.\n", __FUNCTION__); -- return -1; -+ retval = -EBUSY; -+ goto out; - } - - ++t_slot; -@@ -340,6 +345,17 @@ static int shpc_write_cmd(struct slot *s - * Wait for command completion. - */ - retval = shpc_wait_cmd(slot->ctrl); -+ if (retval) -+ goto out; -+ -+ cmd_status = hpc_check_cmd_status(slot->ctrl); -+ if (cmd_status) { -+ err("%s: Failed to issued command 0x%x (error code = %d)\n", -+ __FUNCTION__, cmd, cmd_status); -+ retval = -EIO; -+ } -+ out: -+ mutex_unlock(&slot->ctrl->cmd_lock); - - DBG_LEAVE_ROUTINE - return retval; -@@ -1343,7 +1359,6 @@ static struct hpc_ops shpchp_hpc_ops = { - .green_led_blink = hpc_set_green_led_blink, - - .release_ctlr = hpc_release_ctlr, -- .check_cmd_status = hpc_check_cmd_status, - }; - - inline static int shpc_indirect_creg_read(struct controller *ctrl, int index, -@@ -1455,6 +1470,8 @@ int shpc_init(struct controller * ctrl, - dbg("%s: php_ctlr->creg %p\n", __FUNCTION__, php_ctlr->creg); - - mutex_init(&ctrl->crit_sect); -+ mutex_init(&ctrl->cmd_lock); -+ - /* Setup wait queue */ - init_waitqueue_head(&ctrl->queue); - diff --git a/pci/shpchp-cleanup-controller-list.patch b/pci/shpchp-cleanup-controller-list.patch deleted file mode 100644 index 98d3087f77ba6..0000000000000 --- a/pci/shpchp-cleanup-controller-list.patch +++ /dev/null @@ -1,105 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Wed Jan 25 17:01:01 2006 -Message-ID: <43D81EB6.5060405@jp.fujitsu.com> -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 4/11] shpchp - cleanup controller list -Date: Thu, 26 Jan 2006 09:58:30 +0900 - -This patch changes SHPCHP driver to use list_head structure for -managing controller list. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 4 ++-- - drivers/pci/hotplug/shpchp_core.c | 25 +++++++------------------ - drivers/pci/hotplug/shpchp_ctrl.c | 2 +- - 3 files changed, 10 insertions(+), 21 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -78,7 +78,7 @@ struct event_info { - }; - - struct controller { -- struct controller *next; -+ struct list_head ctrl_list; - struct mutex crit_sect; /* critical section mutex */ - struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ - int num_slots; /* Number of slots on ctlr */ -@@ -204,7 +204,7 @@ extern void shpchp_remove_ctrl_files(str - - - /* Global variables */ --extern struct controller *shpchp_ctrl_list; -+extern struct list_head shpchp_ctrl_list; - - struct ctrl_reg { - volatile u32 base_offset; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -38,7 +38,7 @@ - int shpchp_debug; - int shpchp_poll_mode; - int shpchp_poll_time; --struct controller *shpchp_ctrl_list; /* = NULL */ -+LIST_HEAD(shpchp_ctrl_list); - - #define DRIVER_VERSION "0.4" - #define DRIVER_AUTHOR "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>" -@@ -452,13 +452,7 @@ static int shpc_probe(struct pci_dev *pd - /* Finish setting up the hot plug ctrl device */ - ctrl->next_event = 0; - -- if (!shpchp_ctrl_list) { -- shpchp_ctrl_list = ctrl; -- ctrl->next = NULL; -- } else { -- ctrl->next = shpchp_ctrl_list; -- shpchp_ctrl_list = ctrl; -- } -+ list_add(&ctrl->ctrl_list, &shpchp_ctrl_list); - - shpchp_create_ctrl_files(ctrl); - -@@ -493,22 +487,17 @@ static int shpc_start_thread(void) - - static void __exit unload_shpchpd(void) - { -+ struct list_head *tmp; -+ struct list_head *next; - struct controller *ctrl; -- struct controller *tctrl; -- -- ctrl = shpchp_ctrl_list; - -- while (ctrl) { -+ list_for_each_safe(tmp, next, &shpchp_ctrl_list) { -+ ctrl = list_entry(tmp, struct controller, ctrl_list); - shpchp_remove_ctrl_files(ctrl); - cleanup_slots(ctrl); -- - kfree (ctrl->pci_bus); - ctrl->hpc_ops->release_ctlr(ctrl); -- -- tctrl = ctrl; -- ctrl = ctrl->next; -- -- kfree(tctrl); -+ kfree(ctrl); - } - - /* Stop the notification mechanism */ ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -688,7 +688,7 @@ static int event_thread(void* data) - if (pushbutton_pending) - shpchp_pushbutton_thread(pushbutton_pending); - else -- for (ctrl = shpchp_ctrl_list; ctrl; ctrl=ctrl->next) -+ list_for_each_entry(ctrl, &shpchp_ctrl_list, ctrl_list) - interrupt_event_handler(ctrl); - } - dbg("event_thread signals exit\n"); diff --git a/pci/shpchp-cleanup-init_slots.patch b/pci/shpchp-cleanup-init_slots.patch deleted file mode 100644 index 93149aac708d7..0000000000000 --- a/pci/shpchp-cleanup-init_slots.patch +++ /dev/null @@ -1,190 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 16:57:14 2006 -Message-ID: <43D81E07.5060508@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 09:55:35 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 1/11] shpchp - cleanup init_slots() - -This patch cleanups init_slots() function of SHPCHP driver based on -pcihp_skelton.c. This patch has no functional change. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 7 -- - drivers/pci/hotplug/shpchp_core.c | 120 +++++++++++++++++++------------------- - 2 files changed, 63 insertions(+), 64 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -428,13 +428,6 @@ static inline void amd_pogo_errata_resto - pci_write_config_dword(p_slot->ctrl->pci_dev, PCIX_MISCII_OFFSET, pcix_misc2_temp); - } - --#define SLOT_NAME_SIZE 10 -- --static inline void make_slot_name(char *buffer, int buffer_size, struct slot *slot) --{ -- snprintf(buffer, buffer_size, "%04d_%04d", slot->bus, slot->number); --} -- - enum php_ctlr_type { - PCI, - ISA, ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -99,89 +99,95 @@ static void release_slot(struct hotplug_ - kfree(slot); - } - -+#define SLOT_NAME_SIZE 10 -+static void make_slot_name(struct slot *slot) -+{ -+ snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "%04d_%04d", -+ slot->bus, slot->number); -+} -+ - static int init_slots(struct controller *ctrl) - { -- struct slot *new_slot; -- u8 number_of_slots; -- u8 slot_device; -- u32 slot_number, sun; -- int result = -ENOMEM; -- -- number_of_slots = ctrl->num_slots; -- slot_device = ctrl->slot_device_offset; -- slot_number = ctrl->first_slot; -- -- while (number_of_slots) { -- new_slot = (struct slot *) kmalloc(sizeof(struct slot), GFP_KERNEL); -- if (!new_slot) -+ struct slot *slot; -+ struct hotplug_slot *hotplug_slot; -+ struct hotplug_slot_info *info; -+ char *name; -+ int retval = -ENOMEM; -+ int i; -+ u32 sun; -+ -+ for (i = 0; i < ctrl->num_slots; i++) { -+ slot = kmalloc(sizeof(struct slot), GFP_KERNEL); -+ if (!slot) - goto error; -+ memset(slot, 0, sizeof(struct slot)); - -- memset(new_slot, 0, sizeof(struct slot)); -- new_slot->hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL); -- if (!new_slot->hotplug_slot) -+ hotplug_slot = kmalloc(sizeof(struct hotplug_slot), -+ GFP_KERNEL); -+ if (!hotplug_slot) - goto error_slot; -- memset(new_slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); -+ memset(hotplug_slot, 0, sizeof(struct hotplug_slot)); -+ slot->hotplug_slot = hotplug_slot; - -- new_slot->hotplug_slot->info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); -- if (!new_slot->hotplug_slot->info) -+ info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); -+ if (!info) - goto error_hpslot; -- memset(new_slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); -- new_slot->hotplug_slot->name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL); -- if (!new_slot->hotplug_slot->name) -+ memset(info, 0, sizeof (struct hotplug_slot_info)); -+ hotplug_slot->info = info; -+ -+ name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); -+ if (!name) - goto error_info; -+ hotplug_slot->name = name; - -- new_slot->magic = SLOT_MAGIC; -- new_slot->ctrl = ctrl; -- new_slot->bus = ctrl->slot_bus; -- new_slot->device = slot_device; -- new_slot->hpc_ops = ctrl->hpc_ops; -+ slot->hp_slot = i; -+ slot->magic = SLOT_MAGIC; -+ slot->ctrl = ctrl; -+ slot->bus = ctrl->slot_bus; -+ slot->device = ctrl->slot_device_offset + i; -+ slot->hpc_ops = ctrl->hpc_ops; - - if (shpchprm_get_physical_slot_number(ctrl, &sun, -- new_slot->bus, new_slot->device)) -+ slot->bus, slot->device)) - goto error_name; - -- new_slot->number = sun; -- new_slot->hp_slot = slot_device - ctrl->slot_device_offset; -+ slot->number = sun; - - /* register this slot with the hotplug pci core */ -- new_slot->hotplug_slot->private = new_slot; -- new_slot->hotplug_slot->release = &release_slot; -- make_slot_name(new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot); -- new_slot->hotplug_slot->ops = &shpchp_hotplug_slot_ops; -- -- new_slot->hpc_ops->get_power_status(new_slot, &(new_slot->hotplug_slot->info->power_status)); -- new_slot->hpc_ops->get_attention_status(new_slot, &(new_slot->hotplug_slot->info->attention_status)); -- new_slot->hpc_ops->get_latch_status(new_slot, &(new_slot->hotplug_slot->info->latch_status)); -- new_slot->hpc_ops->get_adapter_status(new_slot, &(new_slot->hotplug_slot->info->adapter_status)); -- -- dbg("Registering bus=%x dev=%x hp_slot=%x sun=%x slot_device_offset=%x\n", new_slot->bus, -- new_slot->device, new_slot->hp_slot, new_slot->number, ctrl->slot_device_offset); -- result = pci_hp_register (new_slot->hotplug_slot); -- if (result) { -- err ("pci_hp_register failed with error %d\n", result); -+ hotplug_slot->private = slot; -+ hotplug_slot->release = &release_slot; -+ make_slot_name(slot); -+ hotplug_slot->ops = &shpchp_hotplug_slot_ops; -+ -+ get_power_status(hotplug_slot, &info->power_status); -+ get_attention_status(hotplug_slot, &info->attention_status); -+ get_latch_status(hotplug_slot, &info->latch_status); -+ get_adapter_status(hotplug_slot, &info->adapter_status); -+ -+ dbg("Registering bus=%x dev=%x hp_slot=%x sun=%x " -+ "slot_device_offset=%x\n", slot->bus, slot->device, -+ slot->hp_slot, slot->number, ctrl->slot_device_offset); -+ retval = pci_hp_register(slot->hotplug_slot); -+ if (retval) { -+ err("pci_hp_register failed with error %d\n", retval); - goto error_name; - } - -- new_slot->next = ctrl->slot; -- ctrl->slot = new_slot; -- -- number_of_slots--; -- slot_device++; -- slot_number += ctrl->slot_num_inc; -+ slot->next = ctrl->slot; -+ ctrl->slot = slot; - } - - return 0; -- - error_name: -- kfree(new_slot->hotplug_slot->name); -+ kfree(name); - error_info: -- kfree(new_slot->hotplug_slot->info); -+ kfree(info); - error_hpslot: -- kfree(new_slot->hotplug_slot); -+ kfree(hotplug_slot); - error_slot: -- kfree(new_slot); -+ kfree(slot); - error: -- return result; -+ return retval; - } - - static void cleanup_slots(struct controller *ctrl) diff --git a/pci/shpchp-cleanup-shpchp_core.c.patch b/pci/shpchp-cleanup-shpchp_core.c.patch deleted file mode 100644 index c77a03bdb717c..0000000000000 --- a/pci/shpchp-cleanup-shpchp_core.c.patch +++ /dev/null @@ -1,280 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Wed Jan 25 16:59:06 2006 -Message-ID: <43D81E55.4030107@jp.fujitsu.com> -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 2/11] shpchp - cleanup shpchp_core.c -Date: Thu, 26 Jan 2006 09:56:53 +0900 - -This patch cleanups some codes in shpchp_core.c. This patch has no -functional changes. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/hotplug/shpchp_core.c | 84 ++++++++++++++++---------------------- - 1 file changed, 36 insertions(+), 48 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -213,9 +213,12 @@ static int get_ctlr_slot_config(struct c - int rc; - int flags; - -- rc = shpc_get_ctlr_slot_config(ctrl, &num_ctlr_slots, &first_device_num, &physical_slot_num, &updown, &flags); -+ rc = shpc_get_ctlr_slot_config(ctrl, &num_ctlr_slots, -+ &first_device_num, &physical_slot_num, -+ &updown, &flags); - if (rc) { -- err("%s: get_ctlr_slot_config fail for b:d (%x:%x)\n", __FUNCTION__, ctrl->bus, ctrl->device); -+ err("%s: get_ctlr_slot_config fail for b:d (%x:%x)\n", -+ __FUNCTION__, ctrl->bus, ctrl->device); - return -1; - } - -@@ -224,19 +227,19 @@ static int get_ctlr_slot_config(struct c - ctrl->first_slot = physical_slot_num; - ctrl->slot_num_inc = updown; /* either -1 or 1 */ - -- dbg("%s: num_slot(0x%x) 1st_dev(0x%x) psn(0x%x) updown(%d) for b:d (%x:%x)\n", -- __FUNCTION__, num_ctlr_slots, first_device_num, physical_slot_num, updown, ctrl->bus, ctrl->device); -+ dbg("%s: num_slot(0x%x) 1st_dev(0x%x) psn(0x%x) updown(%d) for b:d " -+ "(%x:%x)\n", __FUNCTION__, num_ctlr_slots, first_device_num, -+ physical_slot_num, updown, ctrl->bus, ctrl->device); - - return 0; - } - -- - /* - * set_attention_status - Turns the Amber LED for a slot on, off or blink - */ - static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - -@@ -246,20 +249,18 @@ static int set_attention_status (struct - return 0; - } - -- - static int enable_slot (struct hotplug_slot *hotplug_slot) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - - return shpchp_enable_slot(slot); - } - -- - static int disable_slot (struct hotplug_slot *hotplug_slot) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - -@@ -268,7 +269,7 @@ static int disable_slot (struct hotplug_ - - static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -@@ -282,7 +283,7 @@ static int get_power_status (struct hotp - - static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -@@ -296,7 +297,7 @@ static int get_attention_status (struct - - static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -@@ -310,7 +311,7 @@ static int get_latch_status (struct hotp - - static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -@@ -324,7 +325,7 @@ static int get_adapter_status (struct ho - - static int get_address (struct hotplug_slot *hotplug_slot, u32 *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - struct pci_bus *bus = slot->ctrl->pci_dev->subordinate; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -@@ -336,11 +337,11 @@ static int get_address (struct hotplug_s - - static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -- -+ - retval = slot->hpc_ops->get_max_bus_speed(slot, value); - if (retval < 0) - *value = PCI_SPEED_UNKNOWN; -@@ -350,11 +351,11 @@ static int get_max_bus_speed (struct hot - - static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) - { -- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); -+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); -- -+ - retval = slot->hpc_ops->get_cur_bus_speed(slot, value); - if (retval < 0) - *value = PCI_SPEED_UNKNOWN; -@@ -378,13 +379,13 @@ static int shpc_probe(struct pci_dev *pd - int rc; - struct controller *ctrl; - struct slot *t_slot; -- int first_device_num; /* first PCI device number supported by this SHPC */ -- int num_ctlr_slots; /* number of slots supported by this SHPC */ -+ int first_device_num; /* first PCI device number */ -+ int num_ctlr_slots; /* number of slots implemented */ - - if (!is_shpc_capable(pdev)) - return -ENODEV; - -- ctrl = (struct controller *) kmalloc(sizeof(struct controller), GFP_KERNEL); -+ ctrl = kmalloc(sizeof(struct controller), GFP_KERNEL); - if (!ctrl) { - err("%s : out of memory\n", __FUNCTION__); - goto err_out_none; -@@ -393,31 +394,32 @@ static int shpc_probe(struct pci_dev *pd - - rc = shpc_init(ctrl, pdev); - if (rc) { -- dbg("%s: controller initialization failed\n", SHPC_MODULE_NAME); -+ dbg("%s: controller initialization failed\n", -+ SHPC_MODULE_NAME); - goto err_out_free_ctrl; - } - - pci_set_drvdata(pdev, ctrl); - -- ctrl->pci_bus = kmalloc (sizeof (*ctrl->pci_bus), GFP_KERNEL); -+ ctrl->pci_bus = kmalloc(sizeof (*ctrl->pci_bus), GFP_KERNEL); - if (!ctrl->pci_bus) { - err("out of memory\n"); - rc = -ENOMEM; - goto err_out_unmap_mmio_region; - } -- -+ - memcpy (ctrl->pci_bus, pdev->bus, sizeof (*ctrl->pci_bus)); - ctrl->bus = pdev->bus->number; - ctrl->slot_bus = pdev->subordinate->number; -- - ctrl->device = PCI_SLOT(pdev->devfn); - ctrl->function = PCI_FUNC(pdev->devfn); -- dbg("ctrl bus=0x%x, device=%x, function=%x, irq=%x\n", ctrl->bus, ctrl->device, ctrl->function, pdev->irq); -+ -+ dbg("ctrl bus=0x%x, device=%x, function=%x, irq=%x\n", -+ ctrl->bus, ctrl->device, ctrl->function, pdev->irq); - - /* -- * Save configuration headers for this and subordinate PCI buses -+ * Save configuration headers for this and subordinate PCI buses - */ -- - rc = get_ctlr_slot_config(ctrl); - if (rc) { - err(msg_initialization_err, rc); -@@ -427,7 +429,7 @@ static int shpc_probe(struct pci_dev *pd - num_ctlr_slots = ctrl->num_slots; - - ctrl->add_support = 1; -- -+ - /* Setup the slot information structures */ - rc = init_slots(ctrl); - if (rc) { -@@ -443,7 +445,8 @@ static int shpc_probe(struct pci_dev *pd - dbg("%s: t_slot->hp_slot %x\n", __FUNCTION__,t_slot->hp_slot); - - if (rc || ctrl->speed == PCI_SPEED_UNKNOWN) { -- err(SHPC_MODULE_NAME ": Can't get current bus speed. Set to 33MHz PCI.\n"); -+ err(SHPC_MODULE_NAME ": Can't get current bus speed. " -+ "Set to 33MHz PCI.\n"); - ctrl->speed = PCI_SPEED_33MHz; - } - -@@ -474,11 +477,10 @@ err_out_none: - return -ENODEV; - } - -- - static int shpc_start_thread(void) - { - int retval = 0; -- -+ - dbg("Initialize + Start the notification/polling mechanism \n"); - - retval = shpchp_event_start_thread(); -@@ -515,24 +517,12 @@ static void __exit unload_shpchpd(void) - - } - -- - static struct pci_device_id shpcd_pci_tbl[] = { -- { -- .class = ((PCI_CLASS_BRIDGE_PCI << 8) | 0x00), -- .class_mask = ~0, -- .vendor = PCI_ANY_ID, -- .device = PCI_ANY_ID, -- .subvendor = PCI_ANY_ID, -- .subdevice = PCI_ANY_ID, -- }, -- -+ {PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_PCI << 8) | 0x00), ~0)}, - { /* end: all zeroes */ } - }; -- - MODULE_DEVICE_TABLE(pci, shpcd_pci_tbl); - -- -- - static struct pci_driver shpc_driver = { - .name = SHPC_MODULE_NAME, - .id_table = shpcd_pci_tbl, -@@ -540,8 +530,6 @@ static struct pci_driver shpc_driver = { - /* remove: shpc_remove_one, */ - }; - -- -- - static int __init shpcd_init(void) - { - int retval = 0; diff --git a/pci/shpchp-cleanup-slot-list.patch b/pci/shpchp-cleanup-slot-list.patch deleted file mode 100644 index d374faeb683e5..0000000000000 --- a/pci/shpchp-cleanup-slot-list.patch +++ /dev/null @@ -1,113 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 16:59:16 2006 -Message-ID: <43D81E84.8080102@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 09:57:40 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 3/11] shpchp - cleanup slot list - -This patch changes SHPCHP driver to use list_head structure for -managing slot list. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 21 ++++++++------------- - drivers/pci/hotplug/shpchp_core.c | 21 ++++++++++----------- - 2 files changed, 18 insertions(+), 24 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -56,7 +56,6 @@ extern int shpchp_debug; - #define SLOT_MAGIC 0x67267321 - struct slot { - u32 magic; -- struct slot *next; - u8 bus; - u8 device; - u16 status; -@@ -87,7 +86,7 @@ struct controller { - struct pci_dev *pci_dev; - struct pci_bus *pci_bus; - struct event_info event_queue[10]; -- struct slot *slot; -+ struct list_head slot_list; - struct hpc_ops *hpc_ops; - wait_queue_head_t queue; /* sleep & wake process */ - u8 next_event; -@@ -315,23 +314,19 @@ static inline struct slot *get_slot (str - - static inline struct slot *shpchp_find_slot (struct controller *ctrl, u8 device) - { -- struct slot *p_slot, *tmp_slot = NULL; -+ struct slot *slot; - - if (!ctrl) - return NULL; - -- p_slot = ctrl->slot; -- -- while (p_slot && (p_slot->device != device)) { -- tmp_slot = p_slot; -- p_slot = p_slot->next; -- } -- if (p_slot == NULL) { -- err("ERROR: shpchp_find_slot device=0x%x\n", device); -- p_slot = tmp_slot; -+ list_for_each_entry(slot, &ctrl->slot_list, slot_list) { -+ if (slot->device == device) -+ return slot; - } - -- return (p_slot); -+ err("%s: slot (device=0x%x) not found\n", __FUNCTION__, device); -+ -+ return NULL; - } - - static inline int wait_for_ctrl_irq (struct controller *ctrl) ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -173,8 +173,7 @@ static int init_slots(struct controller - goto error_name; - } - -- slot->next = ctrl->slot; -- ctrl->slot = slot; -+ list_add(&slot->slot_list, &ctrl->slot_list); - } - - return 0; -@@ -192,15 +191,14 @@ error: - - static void cleanup_slots(struct controller *ctrl) - { -- struct slot *old_slot, *next_slot; -- -- old_slot = ctrl->slot; -- ctrl->slot = NULL; -- -- while (old_slot) { -- next_slot = old_slot->next; -- pci_hp_deregister(old_slot->hotplug_slot); -- old_slot = next_slot; -+ struct list_head *tmp; -+ struct list_head *next; -+ struct slot *slot; -+ -+ list_for_each_safe(tmp, next, &ctrl->slot_list) { -+ slot = list_entry(tmp, struct slot, slot_list); -+ list_del(&slot->slot_list); -+ pci_hp_deregister(slot->hotplug_slot); - } - } - -@@ -391,6 +389,7 @@ static int shpc_probe(struct pci_dev *pd - goto err_out_none; - } - memset(ctrl, 0, sizeof(struct controller)); -+ INIT_LIST_HEAD(&ctrl->slot_list); - - rc = shpc_init(ctrl, pdev); - if (rc) { diff --git a/pci/shpchp-event-handling-rework.patch b/pci/shpchp-event-handling-rework.patch deleted file mode 100644 index 670e496a23ff3..0000000000000 --- a/pci/shpchp-event-handling-rework.patch +++ /dev/null @@ -1,754 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Tue Feb 21 15:41:04 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Message-Id: <1140565545.24286.21.camel@whizzy> -Subject: shpchp: event handling rework -Date: Tue, 21 Feb 2006 15:45:45 -0800 - -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> - -The event handler of SHPCHP driver is unnecessarily very complex. In -addition, current event handler can only a fixed number of events at -the same time, and some of events would be lost if several number of -events happened at the same time. - -This patch simplify the event handler by using 'work queue', and it -also fix the above-mentioned issue. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 13 - - drivers/pci/hotplug/shpchp_core.c | 49 +---- - drivers/pci/hotplug/shpchp_ctrl.c | 315 ++++++++++---------------------------- - drivers/pci/hotplug/shpchp_hpc.c | 10 + - 4 files changed, 120 insertions(+), 267 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -46,6 +46,7 @@ - extern int shpchp_poll_mode; - extern int shpchp_poll_time; - extern int shpchp_debug; -+extern struct workqueue_struct *shpchp_wq; - - /*#define dbg(format, arg...) do { if (shpchp_debug) printk(KERN_DEBUG "%s: " format, MY_NAME , ## arg); } while (0)*/ - #define dbg(format, arg...) do { if (shpchp_debug) printk("%s: " format, MY_NAME , ## arg); } while (0) -@@ -70,11 +71,13 @@ struct slot { - struct hotplug_slot *hotplug_slot; - struct list_head slot_list; - char name[SLOT_NAME_SIZE]; -+ struct work_struct work; /* work for button event */ - }; - - struct event_info { - u32 event_type; -- u8 hp_slot; -+ struct slot *p_slot; -+ struct work_struct work; - }; - - struct controller { -@@ -85,11 +88,9 @@ struct controller { - int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ - struct pci_dev *pci_dev; -- struct event_info event_queue[10]; - struct list_head slot_list; - struct hpc_ops *hpc_ops; - wait_queue_head_t queue; /* sleep & wake process */ -- u8 next_event; - u8 bus; - u8 device; - u8 function; -@@ -180,9 +181,6 @@ struct hotplug_params { - /* sysfs functions for the hotplug controller info */ - extern void shpchp_create_ctrl_files (struct controller *ctrl); - --/* controller functions */ --extern int shpchp_event_start_thread(void); --extern void shpchp_event_stop_thread(void); - extern int shpchp_enable_slot(struct slot *slot); - extern int shpchp_disable_slot(struct slot *slot); - -@@ -201,7 +199,8 @@ extern void get_hp_params_from_firmware( - extern int shpchprm_get_physical_slot_number(struct controller *ctrl, - u32 *sun, u8 busnum, u8 devnum); - extern void shpchp_remove_ctrl_files(struct controller *ctrl); -- -+extern void cleanup_slots(struct controller *ctrl); -+extern void shpchp_pushbutton_thread(void *data); - - /* Global variables */ - extern struct list_head shpchp_ctrl_list; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -32,6 +32,7 @@ - #include <linux/kernel.h> - #include <linux/types.h> - #include <linux/pci.h> -+#include <linux/workqueue.h> - #include "shpchp.h" - - /* Global variables */ -@@ -39,6 +40,7 @@ int shpchp_debug; - int shpchp_poll_mode; - int shpchp_poll_time; - LIST_HEAD(shpchp_ctrl_list); -+struct workqueue_struct *shpchp_wq; - - #define DRIVER_VERSION "0.4" - #define DRIVER_AUTHOR "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>" -@@ -57,7 +59,6 @@ MODULE_PARM_DESC(shpchp_poll_time, "Poll - - #define SHPC_MODULE_NAME "shpchp" - --static int shpc_start_thread (void); - static int set_attention_status (struct hotplug_slot *slot, u8 value); - static int enable_slot (struct hotplug_slot *slot); - static int disable_slot (struct hotplug_slot *slot); -@@ -141,6 +142,7 @@ static int init_slots(struct controller - goto error_info; - - slot->number = sun; -+ INIT_WORK(&slot->work, shpchp_pushbutton_thread, slot); - - /* register this slot with the hotplug pci core */ - hotplug_slot->private = slot; -@@ -176,7 +178,7 @@ error: - return retval; - } - --static void cleanup_slots(struct controller *ctrl) -+void cleanup_slots(struct controller *ctrl) - { - struct list_head *tmp; - struct list_head *next; -@@ -185,6 +187,8 @@ static void cleanup_slots(struct control - list_for_each_safe(tmp, next, &ctrl->slot_list) { - slot = list_entry(tmp, struct slot, slot_list); - list_del(&slot->slot_list); -+ cancel_delayed_work(&slot->work); -+ flush_workqueue(shpchp_wq); - pci_hp_deregister(slot->hotplug_slot); - } - } -@@ -400,7 +404,7 @@ static int shpc_probe(struct pci_dev *pd - rc = get_ctlr_slot_config(ctrl); - if (rc) { - err(msg_initialization_err, rc); -- goto err_out_unmap_mmio_region; -+ goto err_out_release_ctlr; - } - first_device_num = ctrl->slot_device_offset; - num_ctlr_slots = ctrl->num_slots; -@@ -411,7 +415,7 @@ static int shpc_probe(struct pci_dev *pd - rc = init_slots(ctrl); - if (rc) { - err(msg_initialization_err, 6); -- goto err_out_free_ctrl_slot; -+ goto err_out_release_ctlr; - } - - /* Now hpc_functions (slot->hpc_ops->functions) are ready */ -@@ -427,18 +431,13 @@ static int shpc_probe(struct pci_dev *pd - ctrl->speed = PCI_SPEED_33MHz; - } - -- /* Finish setting up the hot plug ctrl device */ -- ctrl->next_event = 0; -- - list_add(&ctrl->ctrl_list, &shpchp_ctrl_list); - - shpchp_create_ctrl_files(ctrl); - - return 0; - --err_out_free_ctrl_slot: -- cleanup_slots(ctrl); --err_out_unmap_mmio_region: -+err_out_release_ctlr: - ctrl->hpc_ops->release_ctlr(ctrl); - err_out_free_ctrl: - kfree(ctrl); -@@ -446,21 +445,6 @@ err_out_none: - return -ENODEV; - } - --static int shpc_start_thread(void) --{ -- int retval = 0; -- -- dbg("Initialize + Start the notification/polling mechanism \n"); -- -- retval = shpchp_event_start_thread(); -- if (retval) { -- dbg("shpchp_event_start_thread() failed\n"); -- return retval; -- } -- -- return retval; --} -- - static void __exit unload_shpchpd(void) - { - struct list_head *tmp; -@@ -470,14 +454,11 @@ static void __exit unload_shpchpd(void) - list_for_each_safe(tmp, next, &shpchp_ctrl_list) { - ctrl = list_entry(tmp, struct controller, ctrl_list); - shpchp_remove_ctrl_files(ctrl); -- cleanup_slots(ctrl); - ctrl->hpc_ops->release_ctlr(ctrl); - kfree(ctrl); - } - -- /* Stop the notification mechanism */ -- shpchp_event_stop_thread(); -- -+ destroy_workqueue(shpchp_wq); - } - - static struct pci_device_id shpcd_pci_tbl[] = { -@@ -501,17 +482,15 @@ static int __init shpcd_init(void) - shpchp_poll_mode = 1; - #endif - -- retval = shpc_start_thread(); -- if (retval) -- goto error_hpc_init; -+ shpchp_wq = create_singlethread_workqueue("shpchpd"); -+ if (!shpchp_wq) -+ return -ENOMEM; - - retval = pci_register_driver(&shpc_driver); - dbg("%s: pci_register_driver = %d\n", __FUNCTION__, retval); - info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); -- --error_hpc_init: - if (retval) { -- shpchp_event_stop_thread(); -+ destroy_workqueue(shpchp_wq); - } - return retval; - } ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -32,44 +32,46 @@ - #include <linux/types.h> - #include <linux/smp_lock.h> - #include <linux/pci.h> -+#include <linux/workqueue.h> - #include "../pci.h" - #include "shpchp.h" - --static void interrupt_event_handler(struct controller *ctrl); -+static void interrupt_event_handler(void *data); - --static struct semaphore event_semaphore; /* mutex for process loop (up if something to process) */ --static struct semaphore event_exit; /* guard ensure thread has exited before calling it quits */ --static int event_finished; --static unsigned long pushbutton_pending; /* = 0 */ -+static int queue_interrupt_event(struct slot *p_slot, u32 event_type) -+{ -+ struct event_info *info; -+ -+ info = kmalloc(sizeof(*info), GFP_ATOMIC); -+ if (!info) -+ return -ENOMEM; -+ -+ info->event_type = event_type; -+ info->p_slot = p_slot; -+ INIT_WORK(&info->work, interrupt_event_handler, info); -+ -+ queue_work(shpchp_wq, &info->work); -+ -+ return 0; -+} - - u8 shpchp_handle_attention_button(u8 hp_slot, void *inst_id) - { - struct controller *ctrl = (struct controller *) inst_id; - struct slot *p_slot; -- u8 rc = 0; -- u8 getstatus; -- struct event_info *taskInfo; -+ u32 event_type; - - /* Attention Button Change */ - dbg("shpchp: Attention button interrupt received.\n"); - -- /* This is the structure that tells the worker thread what to do */ -- taskInfo = &(ctrl->event_queue[ctrl->next_event]); - p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); -- - p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); -- p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); -- -- ctrl->next_event = (ctrl->next_event + 1) % 10; -- taskInfo->hp_slot = hp_slot; -- -- rc++; - - /* - * Button pressed - See if need to TAKE ACTION!!! - */ - info("Button pressed on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_BUTTON_PRESS; -+ event_type = INT_BUTTON_PRESS; - - if ((p_slot->state == BLINKINGON_STATE) - || (p_slot->state == BLINKINGOFF_STATE)) { -@@ -77,7 +79,7 @@ u8 shpchp_handle_attention_button(u8 hp_ - * attention again before the 5 sec. limit expires to cancel hot-add - * or hot-remove - */ -- taskInfo->event_type = INT_BUTTON_CANCEL; -+ event_type = INT_BUTTON_CANCEL; - info("Button cancel on Slot(%d)\n", ctrl->first_slot + hp_slot); - } else if ((p_slot->state == POWERON_STATE) - || (p_slot->state == POWEROFF_STATE)) { -@@ -85,12 +87,11 @@ u8 shpchp_handle_attention_button(u8 hp_ - * means that the previous attention button action to hot-add or - * hot-remove is undergoing - */ -- taskInfo->event_type = INT_BUTTON_IGNORE; -+ event_type = INT_BUTTON_IGNORE; - info("Button ignore on Slot(%d)\n", ctrl->first_slot + hp_slot); - } - -- if (rc) -- up(&event_semaphore); /* signal event thread that new event is posted */ -+ queue_interrupt_event(p_slot, event_type); - - return 0; - -@@ -100,21 +101,12 @@ u8 shpchp_handle_switch_change(u8 hp_slo - { - struct controller *ctrl = (struct controller *) inst_id; - struct slot *p_slot; -- u8 rc = 0; - u8 getstatus; -- struct event_info *taskInfo; -+ u32 event_type; - - /* Switch Change */ - dbg("shpchp: Switch interrupt received.\n"); - -- /* This is the structure that tells the worker thread -- * what to do -- */ -- taskInfo = &(ctrl->event_queue[ctrl->next_event]); -- ctrl->next_event = (ctrl->next_event + 1) % 10; -- taskInfo->hp_slot = hp_slot; -- -- rc++; - p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save)); - p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); -@@ -126,9 +118,9 @@ u8 shpchp_handle_switch_change(u8 hp_slo - * Switch opened - */ - info("Latch open on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_SWITCH_OPEN; -+ event_type = INT_SWITCH_OPEN; - if (p_slot->pwr_save && p_slot->presence_save) { -- taskInfo->event_type = INT_POWER_FAULT; -+ event_type = INT_POWER_FAULT; - err("Surprise Removal of card\n"); - } - } else { -@@ -136,34 +128,23 @@ u8 shpchp_handle_switch_change(u8 hp_slo - * Switch closed - */ - info("Latch close on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_SWITCH_CLOSE; -+ event_type = INT_SWITCH_CLOSE; - } - -- if (rc) -- up(&event_semaphore); /* signal event thread that new event is posted */ -+ queue_interrupt_event(p_slot, event_type); - -- return rc; -+ return 1; - } - - u8 shpchp_handle_presence_change(u8 hp_slot, void *inst_id) - { - struct controller *ctrl = (struct controller *) inst_id; - struct slot *p_slot; -- u8 rc = 0; -- /*u8 temp_byte;*/ -- struct event_info *taskInfo; -+ u32 event_type; - - /* Presence Change */ - dbg("shpchp: Presence/Notify input change.\n"); - -- /* This is the structure that tells the worker thread -- * what to do -- */ -- taskInfo = &(ctrl->event_queue[ctrl->next_event]); -- ctrl->next_event = (ctrl->next_event + 1) % 10; -- taskInfo->hp_slot = hp_slot; -- -- rc++; - p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - - /* -@@ -175,39 +156,29 @@ u8 shpchp_handle_presence_change(u8 hp_s - * Card Present - */ - info("Card present on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_PRESENCE_ON; -+ event_type = INT_PRESENCE_ON; - } else { - /* - * Not Present - */ - info("Card not present on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_PRESENCE_OFF; -+ event_type = INT_PRESENCE_OFF; - } - -- if (rc) -- up(&event_semaphore); /* signal event thread that new event is posted */ -+ queue_interrupt_event(p_slot, event_type); - -- return rc; -+ return 1; - } - - u8 shpchp_handle_power_fault(u8 hp_slot, void *inst_id) - { - struct controller *ctrl = (struct controller *) inst_id; - struct slot *p_slot; -- u8 rc = 0; -- struct event_info *taskInfo; -+ u32 event_type; - - /* Power fault */ - dbg("shpchp: Power fault interrupt received.\n"); - -- /* This is the structure that tells the worker thread -- * what to do -- */ -- taskInfo = &(ctrl->event_queue[ctrl->next_event]); -- ctrl->next_event = (ctrl->next_event + 1) % 10; -- taskInfo->hp_slot = hp_slot; -- -- rc++; - p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - - if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { -@@ -216,21 +187,21 @@ u8 shpchp_handle_power_fault(u8 hp_slot, - */ - info("Power fault cleared on Slot(%d)\n", ctrl->first_slot + hp_slot); - p_slot->status = 0x00; -- taskInfo->event_type = INT_POWER_FAULT_CLEAR; -+ event_type = INT_POWER_FAULT_CLEAR; - } else { - /* - * Power fault - */ - info("Power fault on Slot(%d)\n", ctrl->first_slot + hp_slot); -- taskInfo->event_type = INT_POWER_FAULT; -+ event_type = INT_POWER_FAULT; - /* set power fault status for this board */ - p_slot->status = 0xFF; - info("power fault bit %x set\n", hp_slot); - } -- if (rc) -- up(&event_semaphore); /* signal event thread that new event is posted */ - -- return rc; -+ queue_interrupt_event(p_slot, event_type); -+ -+ return 1; - } - - /* The following routines constitute the bulk of the -@@ -521,14 +492,6 @@ static int remove_board(struct slot *p_s - } - - --static void pushbutton_helper_thread (unsigned long data) --{ -- pushbutton_pending = data; -- -- up(&event_semaphore); --} -- -- - /** - * shpchp_pushbutton_thread - * -@@ -536,90 +499,24 @@ static void pushbutton_helper_thread (un - * Handles all pending events and exits. - * - */ --static void shpchp_pushbutton_thread (unsigned long slot) -+void shpchp_pushbutton_thread(void *data) - { -- struct slot *p_slot = (struct slot *) slot; -+ struct slot *p_slot = data; - u8 getstatus; -- -- pushbutton_pending = 0; -- -- if (!p_slot) { -- dbg("%s: Error! slot NULL\n", __FUNCTION__); -- return; -- } - - p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (getstatus) { - p_slot->state = POWEROFF_STATE; -- - shpchp_disable_slot(p_slot); - p_slot->state = STATIC_STATE; - } else { - p_slot->state = POWERON_STATE; -- - if (shpchp_enable_slot(p_slot)) - p_slot->hpc_ops->green_led_off(p_slot); -- - p_slot->state = STATIC_STATE; - } -- -- return; - } - -- --/* this is the main worker thread */ --static int event_thread(void* data) --{ -- struct controller *ctrl; -- lock_kernel(); -- daemonize("shpchpd_event"); -- unlock_kernel(); -- -- while (1) { -- dbg("!!!!event_thread sleeping\n"); -- down_interruptible (&event_semaphore); -- dbg("event_thread woken finished = %d\n", event_finished); -- if (event_finished || signal_pending(current)) -- break; -- /* Do stuff here */ -- if (pushbutton_pending) -- shpchp_pushbutton_thread(pushbutton_pending); -- else -- list_for_each_entry(ctrl, &shpchp_ctrl_list, ctrl_list) -- interrupt_event_handler(ctrl); -- } -- dbg("event_thread signals exit\n"); -- up(&event_exit); -- return 0; --} -- --int shpchp_event_start_thread (void) --{ -- int pid; -- -- /* initialize our semaphores */ -- init_MUTEX_LOCKED(&event_exit); -- event_finished=0; -- -- init_MUTEX_LOCKED(&event_semaphore); -- pid = kernel_thread(event_thread, NULL, 0); -- -- if (pid < 0) { -- err ("Can't start up our event thread\n"); -- return -1; -- } -- return 0; --} -- -- --void shpchp_event_stop_thread (void) --{ -- event_finished = 1; -- up(&event_semaphore); -- down(&event_exit); --} -- -- - static int update_slot_info (struct slot *slot) - { - struct hotplug_slot_info *info; -@@ -639,91 +536,59 @@ static int update_slot_info (struct slot - return result; - } - --static void interrupt_event_handler(struct controller *ctrl) -+static void interrupt_event_handler(void *data) - { -- int loop = 0; -- int change = 1; -- u8 hp_slot; -+ struct event_info *info = data; -+ struct slot *p_slot = info->p_slot; - u8 getstatus; -- struct slot *p_slot; - -- while (change) { -- change = 0; -- -- for (loop = 0; loop < 10; loop++) { -- if (ctrl->event_queue[loop].event_type != 0) { -- dbg("%s:loop %x event_type %x\n", __FUNCTION__, loop, -- ctrl->event_queue[loop].event_type); -- hp_slot = ctrl->event_queue[loop].hp_slot; -- -- p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); -- -- if (ctrl->event_queue[loop].event_type == INT_BUTTON_CANCEL) { -- dbg("%s: button cancel\n", __FUNCTION__); -- del_timer(&p_slot->task_event); -- -- switch (p_slot->state) { -- case BLINKINGOFF_STATE: -- p_slot->hpc_ops->green_led_on(p_slot); -- p_slot->hpc_ops->set_attention_status(p_slot, 0); -- break; -- case BLINKINGON_STATE: -- p_slot->hpc_ops->green_led_off(p_slot); -- p_slot->hpc_ops->set_attention_status(p_slot, 0); -- break; -- default: -- warn("Not a valid state\n"); -- return; -- } -- info(msg_button_cancel, p_slot->number); -- p_slot->state = STATIC_STATE; -- } else if (ctrl->event_queue[loop].event_type == INT_BUTTON_PRESS) { -- /* Button Pressed (No action on 1st press...) */ -- dbg("%s: Button pressed\n", __FUNCTION__); -- -- p_slot->hpc_ops->get_power_status(p_slot, &getstatus); -- if (getstatus) { -- /* slot is on */ -- dbg("%s: slot is on\n", __FUNCTION__); -- p_slot->state = BLINKINGOFF_STATE; -- info(msg_button_off, p_slot->number); -- } else { -- /* slot is off */ -- dbg("%s: slot is off\n", __FUNCTION__); -- p_slot->state = BLINKINGON_STATE; -- info(msg_button_on, p_slot->number); -- } -- -- /* blink green LED and turn off amber */ -- p_slot->hpc_ops->green_led_blink(p_slot); -- p_slot->hpc_ops->set_attention_status(p_slot, 0); -- -- init_timer(&p_slot->task_event); -- p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ -- p_slot->task_event.function = (void (*)(unsigned long)) pushbutton_helper_thread; -- p_slot->task_event.data = (unsigned long) p_slot; -- -- dbg("%s: add_timer p_slot = %p\n", __FUNCTION__,(void *) p_slot); -- add_timer(&p_slot->task_event); -- } else if (ctrl->event_queue[loop].event_type == INT_POWER_FAULT) { -- /***********POWER FAULT********************/ -- dbg("%s: power fault\n", __FUNCTION__); -- p_slot->hpc_ops->set_attention_status(p_slot, 1); -- p_slot->hpc_ops->green_led_off(p_slot); -- } else { -- /* refresh notification */ -- if (p_slot) -- update_slot_info(p_slot); -- } -- -- ctrl->event_queue[loop].event_type = 0; -- -- change = 1; -- } -- } /* End of FOR loop */ -+ switch (info->event_type) { -+ case INT_BUTTON_CANCEL: -+ dbg("%s: button cancel\n", __FUNCTION__); -+ cancel_delayed_work(&p_slot->work); -+ switch (p_slot->state) { -+ case BLINKINGOFF_STATE: -+ p_slot->hpc_ops->green_led_on(p_slot); -+ p_slot->hpc_ops->set_attention_status(p_slot, 0); -+ break; -+ case BLINKINGON_STATE: -+ p_slot->hpc_ops->green_led_off(p_slot); -+ p_slot->hpc_ops->set_attention_status(p_slot, 0); -+ break; -+ default: -+ warn("Not a valid state\n"); -+ return; -+ } -+ info(msg_button_cancel, p_slot->number); -+ p_slot->state = STATIC_STATE; -+ break; -+ case INT_BUTTON_PRESS: -+ dbg("%s: Button pressed\n", __FUNCTION__); -+ p_slot->hpc_ops->get_power_status(p_slot, &getstatus); -+ if (getstatus) { -+ p_slot->state = BLINKINGOFF_STATE; -+ info(msg_button_off, p_slot->number); -+ } else { -+ p_slot->state = BLINKINGON_STATE; -+ info(msg_button_on, p_slot->number); -+ } -+ /* blink green LED and turn off amber */ -+ p_slot->hpc_ops->green_led_blink(p_slot); -+ p_slot->hpc_ops->set_attention_status(p_slot, 0); -+ -+ queue_delayed_work(shpchp_wq, &p_slot->work, 5*HZ); -+ break; -+ case INT_POWER_FAULT: -+ dbg("%s: power fault\n", __FUNCTION__); -+ p_slot->hpc_ops->set_attention_status(p_slot, 1); -+ p_slot->hpc_ops->green_led_off(p_slot); -+ break; -+ default: -+ update_slot_info(p_slot); -+ break; - } - -- return; -+ kfree(info); - } - - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -813,6 +813,7 @@ static void hpc_release_ctlr(struct cont - { - struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; - struct php_ctlr_state_s *p, *p_prev; -+ int i; - - DBG_ENTER_ROUTINE - -@@ -821,6 +822,14 @@ static void hpc_release_ctlr(struct cont - return ; - } - -+ /* -+ * Mask all slot event interrupts -+ */ -+ for (i = 0; i < ctrl->num_slots; i++) -+ writel(0xffff3fff, php_ctlr->creg + SLOT1 + (4 * i)); -+ -+ cleanup_slots(ctrl); -+ - if (shpchp_poll_mode) { - del_timer(&php_ctlr->int_poll_timer); - } else { -@@ -830,6 +839,7 @@ static void hpc_release_ctlr(struct cont - pci_disable_msi(php_ctlr->pci_dev); - } - } -+ - if (php_ctlr->pci_dev) { - iounmap(php_ctlr->creg); - release_mem_region(ctrl->mmio_base, ctrl->mmio_size); diff --git a/pci/shpchp-fix-incorrect-return-value-of-interrupt-handler.patch b/pci/shpchp-fix-incorrect-return-value-of-interrupt-handler.patch deleted file mode 100644 index 7cdc89c357c52..0000000000000 --- a/pci/shpchp-fix-incorrect-return-value-of-interrupt-handler.patch +++ /dev/null @@ -1,55 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:08:13 2006 -Message-ID: <43D82075.4030401@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 10:05:57 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 11/11] shpchp - Fix incorrect return value of interrupt handler - -Current SHPCHP driver has a bug in its interrupt handler which cause -"IRQ #: nobody cared" oops. This problem can be reproduced easily by -the following operation. - - # cd /sys/bus/pci/slots/<slot#> - # while true; do echo 1 > attention ; done & - -The reason is that when command complete interrupt is raised, current -SHPCHP driver's interrupt handler returns IRQ_NONE regardless of if -the interrupt is handled or not. - -This patch fixes this issue. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp_hpc.c | 11 +++-------- - 1 file changed, 3 insertions(+), 8 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -1109,14 +1109,8 @@ static irqreturn_t shpc_isr(int IRQ, voi - wake_up_interruptible(&ctrl->queue); - } - -- if ((intr_loc = (intr_loc >> 1)) == 0) { -- /* Unmask Global Interrupt Mask */ -- temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE); -- temp_dword &= 0xfffffffe; -- writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE); -- -- return IRQ_NONE; -- } -+ if ((intr_loc = (intr_loc >> 1)) == 0) -+ goto out; - - for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) { - /* To find out which slot has interrupt pending */ -@@ -1146,6 +1140,7 @@ static irqreturn_t shpc_isr(int IRQ, voi - dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2); - } - } -+ out: - if (!shpchp_poll_mode) { - /* Unmask Global Interrupt Mask */ - temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE); diff --git a/pci/shpchp-fix-slot-state-handling.patch b/pci/shpchp-fix-slot-state-handling.patch deleted file mode 100644 index b625579014607..0000000000000 --- a/pci/shpchp-fix-slot-state-handling.patch +++ /dev/null @@ -1,455 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Tue Feb 21 15:42:10 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Message-Id: <1140565548.24286.22.camel@whizzy> -Subject: shpchp: Fix slot state handling -Date: Tue, 21 Feb 2006 15:45:48 -0800 - -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> - -Current SHPCHP driver doesn't care about the confliction between -hotplug operation via sysfs and hotplug operation via attention -button. So if those ware conflicted, slot could be an unexpected -state. - -This patch changes SHPCHP driver to handle slot state properly. With -this patch, slot events are handled according to the current slot -state as shown at the Table below. - - Table. Slot States and Event Handling -========================================================================= -Slot State Event and Action -========================================================================= -STATIC - Go to POWERON state if user initiates -(Slot enabled, insertion request via sysfs - Slot disabled) - Go to POWEROFF state if user initiates removal - request via sysfs - - Go to BLINKINGON state if user presses - attention button when the slot is disabled - - Go to BLINKINGOFF state if user presses - attention button when the slot is enabled -------------------------------------------------------------------------- -POWERON - Ignore insertion requests via sysfs -(Enabling slot) - Ignore removal requests via sysfs - - Ignore attention button press - - Go to STATIC state when slot has been enabled - - Go to STATIC state if any error happened while - enabling slot -------------------------------------------------------------------------- -POWEROFF - Ignore insertion requests via sysfs -(Disabling slot) - Ignore removal requests via sysfs - - Ignore attention button press - - Go to STATIC state when slot has been disabled -------------------------------------------------------------------------- -BLINKINGON - Go to POWERON state if user initiates insertion -(Waiting for >5 sec. request via sysfs - for canceling - Ignore removal request via sysfs - insertion request - Go to STATIC state if user presses attention - initiated via button - attention button) - Go to POWERON state after waiting for >5 sec. -------------------------------------------------------------------------- -BLINKINGOFF - Ignore insertion request via sysfs -(Waiting for >5 sec. - Go to POWEROFF state if user initiates removal - for canceling removal request via sysfs - request initiated via - Go to STATIC state if user presses attention - attention button) button - - Go to POWEROFF state after waiting for >5 sec. -------------------------------------------------------------------------- - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 7 - - drivers/pci/hotplug/shpchp_core.c | 8 - - drivers/pci/hotplug/shpchp_ctrl.c | 227 ++++++++++++++++++++++++++++---------- - 3 files changed, 181 insertions(+), 61 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -72,6 +72,7 @@ struct slot { - struct list_head slot_list; - char name[SLOT_NAME_SIZE]; - struct work_struct work; /* work for button event */ -+ struct mutex lock; - }; - - struct event_info { -@@ -181,8 +182,8 @@ struct hotplug_params { - /* sysfs functions for the hotplug controller info */ - extern void shpchp_create_ctrl_files (struct controller *ctrl); - --extern int shpchp_enable_slot(struct slot *slot); --extern int shpchp_disable_slot(struct slot *slot); -+extern int shpchp_sysfs_enable_slot(struct slot *slot); -+extern int shpchp_sysfs_disable_slot(struct slot *slot); - - extern u8 shpchp_handle_attention_button(u8 hp_slot, void *inst_id); - extern u8 shpchp_handle_switch_change(u8 hp_slot, void *inst_id); -@@ -200,7 +201,7 @@ extern int shpchprm_get_physical_slot_nu - u32 *sun, u8 busnum, u8 devnum); - extern void shpchp_remove_ctrl_files(struct controller *ctrl); - extern void cleanup_slots(struct controller *ctrl); --extern void shpchp_pushbutton_thread(void *data); -+extern void queue_pushbutton_work(void *data); - - /* Global variables */ - extern struct list_head shpchp_ctrl_list; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -136,13 +136,14 @@ static int init_slots(struct controller - slot->bus = ctrl->slot_bus; - slot->device = ctrl->slot_device_offset + i; - slot->hpc_ops = ctrl->hpc_ops; -+ mutex_init(&slot->lock); - - if (shpchprm_get_physical_slot_number(ctrl, &sun, - slot->bus, slot->device)) - goto error_info; - - slot->number = sun; -- INIT_WORK(&slot->work, shpchp_pushbutton_thread, slot); -+ INIT_WORK(&slot->work, queue_pushbutton_work, slot); - - /* register this slot with the hotplug pci core */ - hotplug_slot->private = slot; -@@ -188,6 +189,7 @@ void cleanup_slots(struct controller *ct - slot = list_entry(tmp, struct slot, slot_list); - list_del(&slot->slot_list); - cancel_delayed_work(&slot->work); -+ flush_scheduled_work(); - flush_workqueue(shpchp_wq); - pci_hp_deregister(slot->hotplug_slot); - } -@@ -244,7 +246,7 @@ static int enable_slot (struct hotplug_s - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - -- return shpchp_enable_slot(slot); -+ return shpchp_sysfs_enable_slot(slot); - } - - static int disable_slot (struct hotplug_slot *hotplug_slot) -@@ -253,7 +255,7 @@ static int disable_slot (struct hotplug_ - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - -- return shpchp_disable_slot(slot); -+ return shpchp_sysfs_disable_slot(slot); - } - - static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -37,6 +37,8 @@ - #include "shpchp.h" - - static void interrupt_event_handler(void *data); -+static int shpchp_enable_slot(struct slot *p_slot); -+static int shpchp_disable_slot(struct slot *p_slot); - - static int queue_interrupt_event(struct slot *p_slot, u32 event_type) - { -@@ -50,7 +52,7 @@ static int queue_interrupt_event(struct - info->p_slot = p_slot; - INIT_WORK(&info->work, interrupt_event_handler, info); - -- queue_work(shpchp_wq, &info->work); -+ schedule_work(&info->work); - - return 0; - } -@@ -73,24 +75,6 @@ u8 shpchp_handle_attention_button(u8 hp_ - info("Button pressed on Slot(%d)\n", ctrl->first_slot + hp_slot); - event_type = INT_BUTTON_PRESS; - -- if ((p_slot->state == BLINKINGON_STATE) -- || (p_slot->state == BLINKINGOFF_STATE)) { -- /* Cancel if we are still blinking; this means that we press the -- * attention again before the 5 sec. limit expires to cancel hot-add -- * or hot-remove -- */ -- event_type = INT_BUTTON_CANCEL; -- info("Button cancel on Slot(%d)\n", ctrl->first_slot + hp_slot); -- } else if ((p_slot->state == POWERON_STATE) -- || (p_slot->state == POWEROFF_STATE)) { -- /* Ignore if the slot is on power-on or power-off state; this -- * means that the previous attention button action to hot-add or -- * hot-remove is undergoing -- */ -- event_type = INT_BUTTON_IGNORE; -- info("Button ignore on Slot(%d)\n", ctrl->first_slot + hp_slot); -- } -- - queue_interrupt_event(p_slot, event_type); - - return 0; -@@ -492,6 +476,11 @@ static int remove_board(struct slot *p_s - } - - -+struct pushbutton_work_info { -+ struct slot *p_slot; -+ struct work_struct work; -+}; -+ - /** - * shpchp_pushbutton_thread - * -@@ -499,22 +488,61 @@ static int remove_board(struct slot *p_s - * Handles all pending events and exits. - * - */ --void shpchp_pushbutton_thread(void *data) -+static void shpchp_pushbutton_thread(void *data) - { -- struct slot *p_slot = data; -- u8 getstatus; -+ struct pushbutton_work_info *info = data; -+ struct slot *p_slot = info->p_slot; - -- p_slot->hpc_ops->get_power_status(p_slot, &getstatus); -- if (getstatus) { -- p_slot->state = POWEROFF_STATE; -+ mutex_lock(&p_slot->lock); -+ switch (p_slot->state) { -+ case POWEROFF_STATE: -+ mutex_unlock(&p_slot->lock); - shpchp_disable_slot(p_slot); -+ mutex_lock(&p_slot->lock); - p_slot->state = STATIC_STATE; -- } else { -- p_slot->state = POWERON_STATE; -+ break; -+ case POWERON_STATE: -+ mutex_unlock(&p_slot->lock); - if (shpchp_enable_slot(p_slot)) - p_slot->hpc_ops->green_led_off(p_slot); -+ mutex_lock(&p_slot->lock); - p_slot->state = STATIC_STATE; -+ break; -+ default: -+ break; -+ } -+ mutex_unlock(&p_slot->lock); -+ -+ kfree(info); -+} -+ -+void queue_pushbutton_work(void *data) -+{ -+ struct slot *p_slot = data; -+ struct pushbutton_work_info *info; -+ -+ info = kmalloc(sizeof(*info), GFP_KERNEL); -+ if (!info) { -+ err("%s: Cannot allocate memory\n", __FUNCTION__); -+ return; -+ } -+ info->p_slot = p_slot; -+ INIT_WORK(&info->work, shpchp_pushbutton_thread, info); -+ -+ mutex_lock(&p_slot->lock); -+ switch (p_slot->state) { -+ case BLINKINGOFF_STATE: -+ p_slot->state = POWEROFF_STATE; -+ break; -+ case BLINKINGON_STATE: -+ p_slot->state = POWERON_STATE; -+ break; -+ default: -+ goto out; - } -+ queue_work(shpchp_wq, &info->work); -+ out: -+ mutex_unlock(&p_slot->lock); - } - - static int update_slot_info (struct slot *slot) -@@ -536,34 +564,15 @@ static int update_slot_info (struct slot - return result; - } - --static void interrupt_event_handler(void *data) -+/* -+ * Note: This function must be called with slot->lock held -+ */ -+static void handle_button_press_event(struct slot *p_slot) - { -- struct event_info *info = data; -- struct slot *p_slot = info->p_slot; - u8 getstatus; - -- switch (info->event_type) { -- case INT_BUTTON_CANCEL: -- dbg("%s: button cancel\n", __FUNCTION__); -- cancel_delayed_work(&p_slot->work); -- switch (p_slot->state) { -- case BLINKINGOFF_STATE: -- p_slot->hpc_ops->green_led_on(p_slot); -- p_slot->hpc_ops->set_attention_status(p_slot, 0); -- break; -- case BLINKINGON_STATE: -- p_slot->hpc_ops->green_led_off(p_slot); -- p_slot->hpc_ops->set_attention_status(p_slot, 0); -- break; -- default: -- warn("Not a valid state\n"); -- return; -- } -- info(msg_button_cancel, p_slot->number); -- p_slot->state = STATIC_STATE; -- break; -- case INT_BUTTON_PRESS: -- dbg("%s: Button pressed\n", __FUNCTION__); -+ switch (p_slot->state) { -+ case STATIC_STATE: - p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (getstatus) { - p_slot->state = BLINKINGOFF_STATE; -@@ -576,7 +585,51 @@ static void interrupt_event_handler(void - p_slot->hpc_ops->green_led_blink(p_slot); - p_slot->hpc_ops->set_attention_status(p_slot, 0); - -- queue_delayed_work(shpchp_wq, &p_slot->work, 5*HZ); -+ schedule_delayed_work(&p_slot->work, 5*HZ); -+ break; -+ case BLINKINGOFF_STATE: -+ case BLINKINGON_STATE: -+ /* -+ * Cancel if we are still blinking; this means that we -+ * press the attention again before the 5 sec. limit -+ * expires to cancel hot-add or hot-remove -+ */ -+ info("Button cancel on Slot(%s)\n", p_slot->name); -+ dbg("%s: button cancel\n", __FUNCTION__); -+ cancel_delayed_work(&p_slot->work); -+ if (p_slot->state == BLINKINGOFF_STATE) -+ p_slot->hpc_ops->green_led_on(p_slot); -+ else -+ p_slot->hpc_ops->green_led_off(p_slot); -+ p_slot->hpc_ops->set_attention_status(p_slot, 0); -+ info(msg_button_cancel, p_slot->number); -+ p_slot->state = STATIC_STATE; -+ break; -+ case POWEROFF_STATE: -+ case POWERON_STATE: -+ /* -+ * Ignore if the slot is on power-on or power-off state; -+ * this means that the previous attention button action -+ * to hot-add or hot-remove is undergoing -+ */ -+ info("Button ignore on Slot(%s)\n", p_slot->name); -+ update_slot_info(p_slot); -+ break; -+ default: -+ warn("Not a valid state\n"); -+ break; -+ } -+} -+ -+static void interrupt_event_handler(void *data) -+{ -+ struct event_info *info = data; -+ struct slot *p_slot = info->p_slot; -+ -+ mutex_lock(&p_slot->lock); -+ switch (info->event_type) { -+ case INT_BUTTON_PRESS: -+ handle_button_press_event(p_slot); - break; - case INT_POWER_FAULT: - dbg("%s: power fault\n", __FUNCTION__); -@@ -587,12 +640,13 @@ static void interrupt_event_handler(void - update_slot_info(p_slot); - break; - } -+ mutex_unlock(&p_slot->lock); - - kfree(info); - } - - --int shpchp_enable_slot (struct slot *p_slot) -+static int shpchp_enable_slot (struct slot *p_slot) - { - u8 getstatus = 0; - int rc, retval = -ENODEV; -@@ -647,7 +701,7 @@ int shpchp_enable_slot (struct slot *p_s - } - - --int shpchp_disable_slot (struct slot *p_slot) -+static int shpchp_disable_slot (struct slot *p_slot) - { - u8 getstatus = 0; - int rc, retval = -ENODEV; -@@ -681,3 +735,66 @@ int shpchp_disable_slot (struct slot *p_ - return retval; - } - -+int shpchp_sysfs_enable_slot(struct slot *p_slot) -+{ -+ int retval = -ENODEV; -+ -+ mutex_lock(&p_slot->lock); -+ switch (p_slot->state) { -+ case BLINKINGON_STATE: -+ cancel_delayed_work(&p_slot->work); -+ case STATIC_STATE: -+ p_slot->state = POWERON_STATE; -+ mutex_unlock(&p_slot->lock); -+ retval = shpchp_enable_slot(p_slot); -+ mutex_lock(&p_slot->lock); -+ p_slot->state = STATIC_STATE; -+ break; -+ case POWERON_STATE: -+ info("Slot %s is already in powering on state\n", -+ p_slot->name); -+ break; -+ case BLINKINGOFF_STATE: -+ case POWEROFF_STATE: -+ info("Already enabled on slot %s\n", p_slot->name); -+ break; -+ default: -+ err("Not a valid state on slot %s\n", p_slot->name); -+ break; -+ } -+ mutex_unlock(&p_slot->lock); -+ -+ return retval; -+} -+ -+int shpchp_sysfs_disable_slot(struct slot *p_slot) -+{ -+ int retval = -ENODEV; -+ -+ mutex_lock(&p_slot->lock); -+ switch (p_slot->state) { -+ case BLINKINGOFF_STATE: -+ cancel_delayed_work(&p_slot->work); -+ case STATIC_STATE: -+ p_slot->state = POWEROFF_STATE; -+ mutex_unlock(&p_slot->lock); -+ retval = shpchp_disable_slot(p_slot); -+ mutex_lock(&p_slot->lock); -+ p_slot->state = STATIC_STATE; -+ break; -+ case POWEROFF_STATE: -+ info("Slot %s is already in powering off state\n", -+ p_slot->name); -+ break; -+ case BLINKINGON_STATE: -+ case POWERON_STATE: -+ info("Already disabled on slot %s\n", p_slot->name); -+ break; -+ default: -+ err("Not a valid state on slot %s\n", p_slot->name); -+ break; -+ } -+ mutex_unlock(&p_slot->lock); -+ -+ return retval; -+} diff --git a/pci/shpchp-move-slot-name-into-struct-slot.patch b/pci/shpchp-move-slot-name-into-struct-slot.patch deleted file mode 100644 index ba9627ab82972..0000000000000 --- a/pci/shpchp-move-slot-name-into-struct-slot.patch +++ /dev/null @@ -1,97 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:07:14 2006 -Message-ID: <43D82038.6050102@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 10:04:56 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 10/11] shpchp - move slot name into struct slot - -This patch moves slot name area into struct slot. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 2 ++ - drivers/pci/hotplug/shpchp_core.c | 14 +++----------- - 2 files changed, 5 insertions(+), 11 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -53,6 +53,7 @@ extern int shpchp_debug; - #define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg) - #define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg) - -+#define SLOT_NAME_SIZE 10 - struct slot { - u8 bus; - u8 device; -@@ -68,6 +69,7 @@ struct slot { - struct hpc_ops *hpc_ops; - struct hotplug_slot *hotplug_slot; - struct list_head slot_list; -+ char name[SLOT_NAME_SIZE]; - }; - - struct event_info { ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -94,12 +94,10 @@ static void release_slot(struct hotplug_ - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - - kfree(slot->hotplug_slot->info); -- kfree(slot->hotplug_slot->name); - kfree(slot->hotplug_slot); - kfree(slot); - } - --#define SLOT_NAME_SIZE 10 - static void make_slot_name(struct slot *slot) - { - snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "%04d_%04d", -@@ -111,7 +109,6 @@ static int init_slots(struct controller - struct slot *slot; - struct hotplug_slot *hotplug_slot; - struct hotplug_slot_info *info; -- char *name; - int retval = -ENOMEM; - int i; - u32 sun; -@@ -131,10 +128,7 @@ static int init_slots(struct controller - goto error_hpslot; - hotplug_slot->info = info; - -- name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); -- if (!name) -- goto error_info; -- hotplug_slot->name = name; -+ hotplug_slot->name = slot->name; - - slot->hp_slot = i; - slot->ctrl = ctrl; -@@ -144,7 +138,7 @@ static int init_slots(struct controller - - if (shpchprm_get_physical_slot_number(ctrl, &sun, - slot->bus, slot->device)) -- goto error_name; -+ goto error_info; - - slot->number = sun; - -@@ -165,15 +159,13 @@ static int init_slots(struct controller - retval = pci_hp_register(slot->hotplug_slot); - if (retval) { - err("pci_hp_register failed with error %d\n", retval); -- goto error_name; -+ goto error_info; - } - - list_add(&slot->slot_list, &ctrl->slot_list); - } - - return 0; --error_name: -- kfree(name); - error_info: - kfree(info); - error_hpslot: diff --git a/pci/shpchp-remove-unused-pci_bus-member-from-controller-structure.patch b/pci/shpchp-remove-unused-pci_bus-member-from-controller-structure.patch deleted file mode 100644 index 21e1fffcc7ea9..0000000000000 --- a/pci/shpchp-remove-unused-pci_bus-member-from-controller-structure.patch +++ /dev/null @@ -1,76 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Tue Feb 21 15:41:15 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Message-Id: <1140565538.24286.19.camel@whizzy> -Subject: shpchp: Remove unused pci_bus member from controller structure -Date: Tue, 21 Feb 2006 15:45:38 -0800 - -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> - -This patch removes unused 'pci_bus' member from controller structure. -This patch have no functional change. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/hotplug/shpchp.h | 1 - - drivers/pci/hotplug/shpchp_core.c | 13 +------------ - 2 files changed, 1 insertion(+), 13 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -85,7 +85,6 @@ struct controller { - int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ - struct pci_dev *pci_dev; -- struct pci_bus *pci_bus; - struct event_info event_queue[10]; - struct list_head slot_list; - struct hpc_ops *hpc_ops; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -386,14 +386,6 @@ static int shpc_probe(struct pci_dev *pd - - pci_set_drvdata(pdev, ctrl); - -- ctrl->pci_bus = kmalloc(sizeof(*ctrl->pci_bus), GFP_KERNEL); -- if (!ctrl->pci_bus) { -- err("out of memory\n"); -- rc = -ENOMEM; -- goto err_out_unmap_mmio_region; -- } -- -- memcpy (ctrl->pci_bus, pdev->bus, sizeof (*ctrl->pci_bus)); - ctrl->bus = pdev->bus->number; - ctrl->slot_bus = pdev->subordinate->number; - ctrl->device = PCI_SLOT(pdev->devfn); -@@ -408,7 +400,7 @@ static int shpc_probe(struct pci_dev *pd - rc = get_ctlr_slot_config(ctrl); - if (rc) { - err(msg_initialization_err, rc); -- goto err_out_free_ctrl_bus; -+ goto err_out_unmap_mmio_region; - } - first_device_num = ctrl->slot_device_offset; - num_ctlr_slots = ctrl->num_slots; -@@ -446,8 +438,6 @@ static int shpc_probe(struct pci_dev *pd - - err_out_free_ctrl_slot: - cleanup_slots(ctrl); --err_out_free_ctrl_bus: -- kfree(ctrl->pci_bus); - err_out_unmap_mmio_region: - ctrl->hpc_ops->release_ctlr(ctrl); - err_out_free_ctrl: -@@ -481,7 +471,6 @@ static void __exit unload_shpchpd(void) - ctrl = list_entry(tmp, struct controller, ctrl_list); - shpchp_remove_ctrl_files(ctrl); - cleanup_slots(ctrl); -- kfree (ctrl->pci_bus); - ctrl->hpc_ops->release_ctlr(ctrl); - kfree(ctrl); - } diff --git a/pci/shpchp-remove-unused-wait_for_ctrl_irq.patch b/pci/shpchp-remove-unused-wait_for_ctrl_irq.patch deleted file mode 100644 index ba58261356d67..0000000000000 --- a/pci/shpchp-remove-unused-wait_for_ctrl_irq.patch +++ /dev/null @@ -1,63 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Tue Feb 21 15:41:04 2006 -From: Kristen Accardi <kristen.c.accardi@intel.com> -To: Greg KH <greg@kroah.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, Kristen Accardi <kristen.c.accardi@intel.com> -Message-Id: <1140565542.24286.20.camel@whizzy> -Subject: shpchp: Remove unused wait_for_ctrl_irq -Date: Tue, 21 Feb 2006 15:45:42 -0800 - -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> - -The wait_for_ctrl_irq() function in SHPCHP driver is no longer needed. -This patch removes that. This patch has no functional change. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 21 --------------------- - drivers/pci/hotplug/shpchp_ctrl.c | 2 +- - 2 files changed, 1 insertion(+), 22 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -325,27 +325,6 @@ static inline struct slot *shpchp_find_s - return NULL; - } - --static inline int wait_for_ctrl_irq (struct controller *ctrl) --{ -- DECLARE_WAITQUEUE(wait, current); -- int retval = 0; -- -- add_wait_queue(&ctrl->queue, &wait); -- -- if (!shpchp_poll_mode) { -- /* Sleep for up to 1 second */ -- msleep_interruptible(1000); -- } else { -- /* Sleep for up to 2 seconds */ -- msleep_interruptible(2000); -- } -- remove_wait_queue(&ctrl->queue, &wait); -- if (signal_pending(current)) -- retval = -EINTR; -- -- return retval; --} -- - static inline void amd_pogo_errata_save_misc_reg(struct slot *p_slot) - { - u32 pcix_misc2_temp; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c -@@ -441,7 +441,7 @@ static int board_added(struct slot *p_sl - } - - /* Wait for ~1 second */ -- wait_for_ctrl_irq (ctrl); -+ msleep(1000); - - dbg("%s: slot status = %x\n", __FUNCTION__, p_slot->status); - /* Check for a power fault */ diff --git a/pci/shpchp-removed-unncessary-magic-member-from-slot.patch b/pci/shpchp-removed-unncessary-magic-member-from-slot.patch deleted file mode 100644 index 38bb9dc083fca..0000000000000 --- a/pci/shpchp-removed-unncessary-magic-member-from-slot.patch +++ /dev/null @@ -1,52 +0,0 @@ -From kaneshige.kenji@jp.fujitsu.com Wed Jan 25 17:05:23 2006 -Message-ID: <43D81FEC.1040804@jp.fujitsu.com> -Date: Thu, 26 Jan 2006 10:03:40 +0900 -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 9/11] shpchp - removed unncessary 'magic' member from slot - -This patch removes unnecessary 'magic' member from struct slot of -SHPCHP driver. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp.h | 6 ------ - drivers/pci/hotplug/shpchp_core.c | 1 - - 2 files changed, 7 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h -+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h -@@ -53,9 +53,7 @@ extern int shpchp_debug; - #define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg) - #define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg) - --#define SLOT_MAGIC 0x67267321 - struct slot { -- u32 magic; - u8 bus; - u8 device; - u16 status; -@@ -287,10 +285,6 @@ static inline int slot_paranoia_check (s - dbg("%s - slot == NULL", function); - return -1; - } -- if (slot->magic != SLOT_MAGIC) { -- dbg("%s - bad magic number for slot", function); -- return -1; -- } - if (!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!", function); - return -1; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -137,7 +137,6 @@ static int init_slots(struct controller - hotplug_slot->name = name; - - slot->hp_slot = i; -- slot->magic = SLOT_MAGIC; - slot->ctrl = ctrl; - slot->bus = ctrl->slot_bus; - slot->device = ctrl->slot_device_offset + i; diff --git a/pci/shpchp-replace-kmalloc-with-kzalloc-and-cleanup-arg-of-sizeof.patch b/pci/shpchp-replace-kmalloc-with-kzalloc-and-cleanup-arg-of-sizeof.patch deleted file mode 100644 index 3ae50c39f4eca..0000000000000 --- a/pci/shpchp-replace-kmalloc-with-kzalloc-and-cleanup-arg-of-sizeof.patch +++ /dev/null @@ -1,89 +0,0 @@ -From pcihpd-discuss-admin@lists.sourceforge.net Wed Jan 25 17:05:02 2006 -Message-ID: <43D81FB1.4020705@jp.fujitsu.com> -From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -To: Greg KH <gregkh@suse.de> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Subject: [PATCH 8/11] shpchp - replace kmalloc() with kzalloc() and cleanup arg of sizeof() -Date: Thu, 26 Jan 2006 10:02:41 +0900 - -This patch replaces kmalloc() and memset() pair with kzalloc() and -cleans up the arg of sizeof() in SHPCHP driver. - -Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/pci/hotplug/shpchp_core.c | 15 +++++---------- - drivers/pci/hotplug/shpchp_hpc.c | 4 +--- - 2 files changed, 6 insertions(+), 13 deletions(-) - ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c -@@ -117,22 +117,18 @@ static int init_slots(struct controller - u32 sun; - - for (i = 0; i < ctrl->num_slots; i++) { -- slot = kmalloc(sizeof(struct slot), GFP_KERNEL); -+ slot = kzalloc(sizeof(*slot), GFP_KERNEL); - if (!slot) - goto error; -- memset(slot, 0, sizeof(struct slot)); - -- hotplug_slot = kmalloc(sizeof(struct hotplug_slot), -- GFP_KERNEL); -+ hotplug_slot = kzalloc(sizeof(*hotplug_slot), GFP_KERNEL); - if (!hotplug_slot) - goto error_slot; -- memset(hotplug_slot, 0, sizeof(struct hotplug_slot)); - slot->hotplug_slot = hotplug_slot; - -- info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); -+ info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) - goto error_hpslot; -- memset(info, 0, sizeof (struct hotplug_slot_info)); - hotplug_slot->info = info; - - name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); -@@ -383,12 +379,11 @@ static int shpc_probe(struct pci_dev *pd - if (!is_shpc_capable(pdev)) - return -ENODEV; - -- ctrl = kmalloc(sizeof(struct controller), GFP_KERNEL); -+ ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL); - if (!ctrl) { - err("%s : out of memory\n", __FUNCTION__); - goto err_out_none; - } -- memset(ctrl, 0, sizeof(struct controller)); - INIT_LIST_HEAD(&ctrl->slot_list); - - rc = shpc_init(ctrl, pdev); -@@ -400,7 +395,7 @@ static int shpc_probe(struct pci_dev *pd - - pci_set_drvdata(pdev, ctrl); - -- ctrl->pci_bus = kmalloc(sizeof (*ctrl->pci_bus), GFP_KERNEL); -+ ctrl->pci_bus = kmalloc(sizeof(*ctrl->pci_bus), GFP_KERNEL); - if (!ctrl->pci_bus) { - err("out of memory\n"); - rc = -ENOMEM; ---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c -+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c -@@ -1390,15 +1390,13 @@ int shpc_init(struct controller * ctrl, - ctrl->pci_dev = pdev; /* pci_dev of the P2P bridge */ - - spin_lock_init(&list_lock); -- php_ctlr = (struct php_ctlr_state_s *) kmalloc(sizeof(struct php_ctlr_state_s), GFP_KERNEL); -+ php_ctlr = kzalloc(sizeof(*php_ctlr), GFP_KERNEL); - - if (!php_ctlr) { /* allocate controller state data */ - err("%s: HPC controller memory allocation error!\n", __FUNCTION__); - goto abort; - } - -- memset(php_ctlr, 0, sizeof(struct php_ctlr_state_s)); -- - php_ctlr->pci_dev = pdev; /* save pci_dev in context */ - - if ((pdev->vendor == PCI_VENDOR_ID_AMD) || (pdev->device == |