return &ioport_resource;
}
+/* FIXME: Fundamentally racy. */
static inline int check_io_resource(unsigned long b, unsigned long n,
struct pci_dev *dev)
{
- return check_resource(resource_parent(b, n, IORESOURCE_IO, dev), b, n);
+ struct resource *region;
+
+ region = __request_region(resource_parent(b, n, IORESOURCE_IO, dev),
+ b, n, "check_io_resource");
+ if (!region)
+ return -EBUSY;
+
+ release_resource(region);
+ kfree(region);
+ return 0;
}
+/* FIXME: Fundamentally racy. */
static inline int check_mem_resource(unsigned long b, unsigned long n,
struct pci_dev *dev)
{
- return check_resource(resource_parent(b, n, IORESOURCE_MEM, dev), b, n);
+ struct resource *region;
+
+ region = __request_region(resource_parent(b, n, IORESOURCE_MEM, dev),
+ b, n, "check_mem_resource");
+ if (!region)
+ return -EBUSY;
+
+ release_resource(region);
+ kfree(region);
+ return 0;
}
static struct resource *make_resource(unsigned long b, unsigned long n,
extern int get_resource_list(struct resource *, char *buf, int size);
-extern int check_resource(struct resource *root, unsigned long, unsigned long);
extern int request_resource(struct resource *root, struct resource *new);
extern int release_resource(struct resource *new);
extern int allocate_resource(struct resource *root, struct resource *new,
EXPORT_SYMBOL(request_resource);
EXPORT_SYMBOL(release_resource);
EXPORT_SYMBOL(allocate_resource);
-EXPORT_SYMBOL(check_resource);
EXPORT_SYMBOL(__request_region);
EXPORT_SYMBOL(__check_region);
EXPORT_SYMBOL(__release_region);
return retval;
}
-int check_resource(struct resource *root, unsigned long start, unsigned long len)
-{
- struct resource *conflict, tmp;
-
- tmp.start = start;
- tmp.end = start + len - 1;
- write_lock(&resource_lock);
- conflict = __request_resource(root, &tmp);
- if (!conflict)
- __release_resource(&tmp);
- write_unlock(&resource_lock);
- return conflict ? -EBUSY : 0;
-}
-
/*
* Find empty slot in the resource tree given range and alignment.
*/