Signed-off-by: Andrew Morton --- include/linux/ioport.h | 25 ++++++++++++---------- include/linux/types.h | 7 ++++++ kernel/resource.c | 43 ++++++++++++++++++++++++--------------- 3 files changed, 48 insertions(+), 27 deletions(-) diff -puN include/linux/ioport.h~gregkh-pci-kconfigurable-resources-core-changes include/linux/ioport.h --- devel/include/linux/ioport.h~gregkh-pci-kconfigurable-resources-core-changes 2006-06-09 15:21:25.000000000 -0700 +++ devel-akpm/include/linux/ioport.h 2006-06-09 15:21:25.000000000 -0700 @@ -15,7 +15,7 @@ * nesting etc.. */ struct resource { - u64 start, end; + resource_size_t start, end; const char *name; unsigned long flags; struct resource *parent, *sibling, *child; @@ -97,31 +97,34 @@ extern struct resource * ____request_res extern int release_resource(struct resource *new); extern __deprecated_for_modules int insert_resource(struct resource *parent, struct resource *new); extern int allocate_resource(struct resource *root, struct resource *new, - u64 size, - u64 min, u64 max, - u64 align, + resource_size_t size, resource_size_t min, + resource_size_t max, resource_size_t align, void (*alignf)(void *, struct resource *, - u64, u64), + resource_size_t, resource_size_t), void *alignf_data); -int adjust_resource(struct resource *res, u64 start, - u64 size); +int adjust_resource(struct resource *res, resource_size_t start, + resource_size_t size); /* Convenience shorthand with allocation */ #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name)) #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) #define rename_region(region, newname) do { (region)->name = (newname); } while (0) -extern struct resource * __request_region(struct resource *, u64 start, u64 n, const char *name); +extern struct resource * __request_region(struct resource *, + resource_size_t start, + resource_size_t n, const char *name); /* Compatibility cruft */ #define release_region(start,n) __release_region(&ioport_resource, (start), (n)) #define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) -extern int __check_region(struct resource *, u64, u64); -extern void __release_region(struct resource *, u64, u64); +extern int __check_region(struct resource *, resource_size_t, resource_size_t); +extern void __release_region(struct resource *, resource_size_t, + resource_size_t); -static inline int __deprecated check_region(u64 s, u64 n) +static inline int __deprecated check_region(resource_size_t s, + resource_size_t n) { return __check_region(&ioport_resource, s, n); } diff -puN include/linux/types.h~gregkh-pci-kconfigurable-resources-core-changes include/linux/types.h --- devel/include/linux/types.h~gregkh-pci-kconfigurable-resources-core-changes 2006-06-09 15:21:25.000000000 -0700 +++ devel-akpm/include/linux/types.h 2006-06-09 15:21:25.000000000 -0700 @@ -177,8 +177,15 @@ typedef __u64 __bitwise __be64; #ifdef __KERNEL__ typedef unsigned __bitwise__ gfp_t; + +#ifdef CONFIG_RESOURCES_32BIT +typedef __u32 resource_size_t; +#else +typedef __u64 resource_size_t; #endif +#endif /* __KERNEL__ */ + struct ustat { __kernel_daddr_t f_tfree; __kernel_ino_t f_tinode; diff -puN kernel/resource.c~gregkh-pci-kconfigurable-resources-core-changes kernel/resource.c --- devel/kernel/resource.c~gregkh-pci-kconfigurable-resources-core-changes 2006-06-09 15:21:25.000000000 -0700 +++ devel-akpm/kernel/resource.c 2006-06-09 15:21:25.000000000 -0700 @@ -23,7 +23,11 @@ struct resource ioport_resource = { .name = "PCI IO", +#ifdef CONFIG_RESOURCES_32BIT + .start = 0x0000UL, +#else .start = 0x0000ULL, +#endif .end = IO_SPACE_LIMIT, .flags = IORESOURCE_IO, }; @@ -32,8 +36,13 @@ EXPORT_SYMBOL(ioport_resource); struct resource iomem_resource = { .name = "PCI mem", +#ifdef CONFIG_RESOURCES_32BIT + .start = 0UL, + .end = ~0UL, +#else .start = 0ULL, .end = ~0ULL, +#endif .flags = IORESOURCE_MEM, }; @@ -151,8 +160,8 @@ __initcall(ioresources_init); /* Return the conflict entry if you can't request it */ static struct resource * __request_resource(struct resource *root, struct resource *new) { - u64 start = new->start; - u64 end = new->end; + resource_size_t start = new->start; + resource_size_t end = new->end; struct resource *tmp, **p; if (end < start) @@ -236,11 +245,10 @@ EXPORT_SYMBOL(release_resource); * Find empty slot in the resource tree given range and alignment. */ static int find_resource(struct resource *root, struct resource *new, - u64 size, - u64 min, u64 max, - u64 align, + resource_size_t size, resource_size_t min, + resource_size_t max, resource_size_t align, void (*alignf)(void *, struct resource *, - u64, u64), + resource_size_t, resource_size_t), void *alignf_data) { struct resource *this = root->child; @@ -282,11 +290,10 @@ static int find_resource(struct resource * Allocate empty slot in the resource tree given range and alignment. */ int allocate_resource(struct resource *root, struct resource *new, - u64 size, - u64 min, u64 max, - u64 align, + resource_size_t size, resource_size_t min, + resource_size_t max, resource_size_t align, void (*alignf)(void *, struct resource *, - u64, u64), + resource_size_t, resource_size_t), void *alignf_data) { int err; @@ -378,10 +385,10 @@ EXPORT_SYMBOL(insert_resource); * arguments. Returns -EBUSY if it can't fit. Existing children of * the resource are assumed to be immutable. */ -int adjust_resource(struct resource *res, u64 start, u64 size) +int adjust_resource(struct resource *res, resource_size_t start, resource_size_t size) { struct resource *tmp, *parent = res->parent; - u64 end = start + size - 1; + resource_size_t end = start + size - 1; int result = -EBUSY; write_lock(&resource_lock); @@ -428,7 +435,9 @@ EXPORT_SYMBOL(adjust_resource); * * Release-region releases a matching busy region. */ -struct resource * __request_region(struct resource *parent, u64 start, u64 n, const char *name) +struct resource * __request_region(struct resource *parent, + resource_size_t start, resource_size_t n, + const char *name) { struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL); @@ -464,7 +473,8 @@ struct resource * __request_region(struc EXPORT_SYMBOL(__request_region); -int __check_region(struct resource *parent, u64 start, u64 n) +int __check_region(struct resource *parent, resource_size_t start, + resource_size_t n) { struct resource * res; @@ -479,10 +489,11 @@ int __check_region(struct resource *pare EXPORT_SYMBOL(__check_region); -void __release_region(struct resource *parent, u64 start, u64 n) +void __release_region(struct resource *parent, resource_size_t start, + resource_size_t n) { struct resource **p; - u64 end; + resource_size_t end; p = &parent->child; end = start + n - 1; _