aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/setup-bus.c46
-rw-r--r--drivers/pci/setup-res.c47
2 files changed, 46 insertions, 47 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index c79ce4ee634..f233d127ca8 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -137,6 +137,52 @@ static resource_size_t get_res_add_size(struct resource_list_x *realloc_head,
137 return 0; 137 return 0;
138} 138}
139 139
140/* Sort resources by alignment */
141static void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
142{
143 int i;
144
145 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
146 struct resource *r;
147 struct resource_list *list, *tmp;
148 resource_size_t r_align;
149
150 r = &dev->resource[i];
151
152 if (r->flags & IORESOURCE_PCI_FIXED)
153 continue;
154
155 if (!(r->flags) || r->parent)
156 continue;
157
158 r_align = pci_resource_alignment(dev, r);
159 if (!r_align) {
160 dev_warn(&dev->dev, "BAR %d: %pR has bogus alignment\n",
161 i, r);
162 continue;
163 }
164 for (list = head; ; list = list->next) {
165 resource_size_t align = 0;
166 struct resource_list *ln = list->next;
167
168 if (ln)
169 align = pci_resource_alignment(ln->dev, ln->res);
170
171 if (r_align > align) {
172 tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
173 if (!tmp)
174 panic("pdev_sort_resources(): "
175 "kmalloc() failed!\n");
176 tmp->next = ln;
177 tmp->res = r;
178 tmp->dev = dev;
179 list->next = tmp;
180 break;
181 }
182 }
183 }
184}
185
140static void __dev_sort_resources(struct pci_dev *dev, 186static void __dev_sort_resources(struct pci_dev *dev,
141 struct resource_list *head) 187 struct resource_list *head)
142{ 188{
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index 241de6c2b9c..f968185aa19 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -302,53 +302,6 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
302 return ret; 302 return ret;
303} 303}
304 304
305
306/* Sort resources by alignment */
307void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
308{
309 int i;
310
311 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
312 struct resource *r;
313 struct resource_list *list, *tmp;
314 resource_size_t r_align;
315
316 r = &dev->resource[i];
317
318 if (r->flags & IORESOURCE_PCI_FIXED)
319 continue;
320
321 if (!(r->flags) || r->parent)
322 continue;
323
324 r_align = pci_resource_alignment(dev, r);
325 if (!r_align) {
326 dev_warn(&dev->dev, "BAR %d: %pR has bogus alignment\n",
327 i, r);
328 continue;
329 }
330 for (list = head; ; list = list->next) {
331 resource_size_t align = 0;
332 struct resource_list *ln = list->next;
333
334 if (ln)
335 align = pci_resource_alignment(ln->dev, ln->res);
336
337 if (r_align > align) {
338 tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
339 if (!tmp)
340 panic("pdev_sort_resources(): "
341 "kmalloc() failed!\n");
342 tmp->next = ln;
343 tmp->res = r;
344 tmp->dev = dev;
345 list->next = tmp;
346 break;
347 }
348 }
349 }
350}
351
352int pci_enable_resources(struct pci_dev *dev, int mask) 305int pci_enable_resources(struct pci_dev *dev, int mask)
353{ 306{
354 u16 cmd, old_cmd; 307 u16 cmd, old_cmd;