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 /include/linux | |
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 'include/linux')
-rw-r--r-- | include/linux/ioport.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 605d237364d2..d5d40a9f7929 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
@@ -44,7 +44,9 @@ struct resource_list { | |||
44 | #define IORESOURCE_CACHEABLE 0x00004000 | 44 | #define IORESOURCE_CACHEABLE 0x00004000 |
45 | #define IORESOURCE_RANGELENGTH 0x00008000 | 45 | #define IORESOURCE_RANGELENGTH 0x00008000 |
46 | #define IORESOURCE_SHADOWABLE 0x00010000 | 46 | #define IORESOURCE_SHADOWABLE 0x00010000 |
47 | #define IORESOURCE_BUS_HAS_VGA 0x00080000 | 47 | |
48 | #define IORESOURCE_SIZEALIGN 0x00020000 /* size indicates alignment */ | ||
49 | #define IORESOURCE_STARTALIGN 0x00040000 /* start field is alignment */ | ||
48 | 50 | ||
49 | #define IORESOURCE_DISABLED 0x10000000 | 51 | #define IORESOURCE_DISABLED 0x10000000 |
50 | #define IORESOURCE_UNSET 0x20000000 | 52 | #define IORESOURCE_UNSET 0x20000000 |
@@ -110,6 +112,7 @@ extern int allocate_resource(struct resource *root, struct resource *new, | |||
110 | void *alignf_data); | 112 | void *alignf_data); |
111 | int adjust_resource(struct resource *res, resource_size_t start, | 113 | int adjust_resource(struct resource *res, resource_size_t start, |
112 | resource_size_t size); | 114 | resource_size_t size); |
115 | resource_size_t resource_alignment(struct resource *res); | ||
113 | 116 | ||
114 | /* Convenience shorthand with allocation */ | 117 | /* Convenience shorthand with allocation */ |
115 | #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name)) | 118 | #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name)) |