aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/setup-bus.c
diff options
context:
space:
mode:
authorIvan Kokshaysky <ink@jurassic.park.msu.ru>2008-03-30 11:50:14 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-04-21 00:47:08 -0400
commit884525655d07fdee9245716b998ecdc45cdd8007 (patch)
tree975cbf2b5079430240d3496323df1a266be95d27 /drivers/pci/setup-bus.c
parentd75b305295c38ba9610ff3b2200f7d1989dc55fd (diff)
PCI: clean up resource alignment management
Done per Linus' request and suggestions. Linus has explained that better than I'll be able to explain: On Thu, Mar 27, 2008 at 10:12:10AM -0700, Linus Torvalds wrote: > Actually, before we go any further, there might be a less intrusive > alternative: add just a couple of flags to the resource flags field (we > still have something like 8 unused bits on 32-bit), and use those to > implement a generic "resource_alignment()" routine. > > Two flags would do it: > > - IORESOURCE_SIZEALIGN: size indicates alignment (regular PCI device > resources) > > - IORESOURCE_STARTALIGN: start field is alignment (PCI bus resources > during probing) > > and then the case of both flags zero (or both bits set) would actually be > "invalid", and we would also clear the IORESOURCE_STARTALIGN flag when we > actually allocate the resource (so that we don't use the "start" field as > alignment incorrectly when it no longer indicates alignment). > > That wouldn't be totally generic, but it would have the nice property of > automatically at least add sanity checking for that whole "res->start has > the odd meaning of 'alignment' during probing" and remove the need for a > new field, and it would allow us to have a generic "resource_alignment()" > routine that just gets a resource pointer. Besides, I removed IORESOURCE_BUS_HAS_VGA flag which was unused for ages. Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Gary Hade <garyhade@us.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci/setup-bus.c')
-rw-r--r--drivers/pci/setup-bus.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index f7cb8e0758b4..5cf84568c9e4 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -65,6 +65,7 @@ static void pbus_assign_resources_sorted(struct pci_bus *bus)
65 res = list->res; 65 res = list->res;
66 idx = res - &list->dev->resource[0]; 66 idx = res - &list->dev->resource[0];
67 if (pci_assign_resource(list->dev, idx)) { 67 if (pci_assign_resource(list->dev, idx)) {
68 /* FIXME: get rid of this */
68 res->start = 0; 69 res->start = 0;
69 res->end = 0; 70 res->end = 0;
70 res->flags = 0; 71 res->flags = 0;
@@ -327,6 +328,7 @@ static void pbus_size_io(struct pci_bus *bus)
327 /* Alignment of the IO window is always 4K */ 328 /* Alignment of the IO window is always 4K */
328 b_res->start = 4096; 329 b_res->start = 4096;
329 b_res->end = b_res->start + size - 1; 330 b_res->end = b_res->start + size - 1;
331 b_res->flags |= IORESOURCE_STARTALIGN;
330} 332}
331 333
332/* Calculate the size of the bus and minimal alignment which 334/* Calculate the size of the bus and minimal alignment which
@@ -401,6 +403,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long
401 } 403 }
402 b_res->start = min_align; 404 b_res->start = min_align;
403 b_res->end = size + min_align - 1; 405 b_res->end = size + min_align - 1;
406 b_res->flags |= IORESOURCE_STARTALIGN;
404 return 1; 407 return 1;
405} 408}
406 409