diff options
author | Ivan Kokshaysky <ink@jurassic.park.msu.ru> | 2008-03-30 11:50:14 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-21 00:47:08 -0400 |
commit | 884525655d07fdee9245716b998ecdc45cdd8007 (patch) | |
tree | 975cbf2b5079430240d3496323df1a266be95d27 /drivers/pci/setup-bus.c | |
parent | d75b305295c38ba9610ff3b2200f7d1989dc55fd (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.c | 3 |
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 | ||