diff options
author | Ram Pai <linuxram@us.ibm.com> | 2011-07-07 14:19:10 -0400 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2011-07-08 18:49:20 -0400 |
commit | f483d3923dc3a6394c483e28ccb3fe700bdf399e (patch) | |
tree | ef487babd0ef104e1fa8323c23050d66096c0f3a /drivers/pci/setup-bus.c | |
parent | a2fa83faf47b514ab947cea916d3691b66525073 (diff) |
PCI: conditional resource-reallocation through kernel parameter pci=realloc
Multiple attempts to dynamically reallocate pci resources have
unfortunately lead to regressions. Though we continue to fix the
regressions and fine tune the dynamic-reallocation behavior, we have not
reached a acceptable state yet.
This patch provides a interim solution. It disables dynamic reallocation
by default, but adds the ability to enable it through pci=realloc kernel
command line parameter.
Tested-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/setup-bus.c')
-rw-r--r-- | drivers/pci/setup-bus.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 1e9e5a5b8c81..9995842e45b5 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
@@ -47,6 +47,13 @@ struct resource_list_x { | |||
47 | (head)->next = NULL; \ | 47 | (head)->next = NULL; \ |
48 | } while (0) | 48 | } while (0) |
49 | 49 | ||
50 | int pci_realloc_enable = 0; | ||
51 | #define pci_realloc_enabled() pci_realloc_enable | ||
52 | void pci_realloc(void) | ||
53 | { | ||
54 | pci_realloc_enable = 1; | ||
55 | } | ||
56 | |||
50 | /** | 57 | /** |
51 | * add_to_list() - add a new resource tracker to the list | 58 | * add_to_list() - add a new resource tracker to the list |
52 | * @head: Head of the list | 59 | * @head: Head of the list |
@@ -1025,6 +1032,7 @@ static int __init pci_get_max_depth(void) | |||
1025 | return depth; | 1032 | return depth; |
1026 | } | 1033 | } |
1027 | 1034 | ||
1035 | |||
1028 | /* | 1036 | /* |
1029 | * first try will not touch pci bridge res | 1037 | * first try will not touch pci bridge res |
1030 | * second and later try will clear small leaf bridge res | 1038 | * second and later try will clear small leaf bridge res |
@@ -1068,6 +1076,13 @@ again: | |||
1068 | /* any device complain? */ | 1076 | /* any device complain? */ |
1069 | if (!head.next) | 1077 | if (!head.next) |
1070 | goto enable_and_dump; | 1078 | goto enable_and_dump; |
1079 | |||
1080 | /* don't realloc if asked to do so */ | ||
1081 | if (!pci_realloc_enabled()) { | ||
1082 | free_list(resource_list_x, &head); | ||
1083 | goto enable_and_dump; | ||
1084 | } | ||
1085 | |||
1071 | failed_type = 0; | 1086 | failed_type = 0; |
1072 | for (list = head.next; list;) { | 1087 | for (list = head.next; list;) { |
1073 | failed_type |= list->flags; | 1088 | failed_type |= list->flags; |