From: Rusty Russell <rusty@rustcorp.com.au>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: linux-kernel@vger.kernel.org, torvalds@transmeta.com,
dhinds@zen.stanford.edu, alan@lxorguk.ukuu.org.uk
Subject: Re: [PATCH] Get rid of check_resource() before it becomes a problem
Date: Wed, 30 Oct 2002 14:15:01 +1100 [thread overview]
Message-ID: <20021030034743.A05AA2C0DD@lists.samba.org> (raw)
In-Reply-To: Your message of "Tue, 29 Oct 2002 21:33:28 CDT." <3DBF44F8.8010307@pobox.com>
In message <3DBF44F8.8010307@pobox.com> you write:
> Need to zap the export from kernel/ksyms.c too
Ack.
Here it is, fresh against 2.5.44.
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
Name: Remove inherently racy check_resource
Author: Rusty Russell
Status: Trivial
D: The new resource interface foolishly replicated the (obsolete,
D: racy) spirit of the check_region call as check_resource. You
D: should use request_resource/release_resource instead.
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .8919-linux-2.5.45/drivers/pcmcia/rsrc_mgr.c .8919-linux-2.5.45.updated/drivers/pcmcia/rsrc_mgr.c
--- .8919-linux-2.5.45/drivers/pcmcia/rsrc_mgr.c 2002-10-15 15:29:59.000000000 +1000
+++ .8919-linux-2.5.45.updated/drivers/pcmcia/rsrc_mgr.c 2002-10-30 14:03:09.000000000 +1100
@@ -124,16 +124,36 @@ static struct resource *resource_parent(
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,
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .8919-linux-2.5.45/include/linux/ioport.h .8919-linux-2.5.45.updated/include/linux/ioport.h
--- .8919-linux-2.5.45/include/linux/ioport.h 2002-05-09 12:40:19.000000000 +1000
+++ .8919-linux-2.5.45.updated/include/linux/ioport.h 2002-10-30 14:03:09.000000000 +1100
@@ -85,7 +85,6 @@ extern struct resource iomem_resource;
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,
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .8919-linux-2.5.45/kernel/ksyms.c .8919-linux-2.5.45.updated/kernel/ksyms.c
--- .8919-linux-2.5.45/kernel/ksyms.c 2002-10-30 12:53:10.000000000 +1100
+++ .8919-linux-2.5.45.updated/kernel/ksyms.c 2002-10-30 14:06:18.000000000 +1100
@@ -445,7 +445,6 @@ EXPORT_SYMBOL(enable_hlt);
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);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .8919-linux-2.5.45/kernel/resource.c .8919-linux-2.5.45.updated/kernel/resource.c
--- .8919-linux-2.5.45/kernel/resource.c 2002-08-11 15:31:43.000000000 +1000
+++ .8919-linux-2.5.45.updated/kernel/resource.c 2002-10-30 14:03:09.000000000 +1100
@@ -131,20 +131,6 @@ int release_resource(struct resource *ol
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.
*/
prev parent reply other threads:[~2002-10-30 3:41 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-30 1:40 [PATCH] Get rid of check_resource() before it becomes a problem Rusty Russell
2002-10-30 2:33 ` Jeff Garzik
2002-10-30 3:15 ` Rusty Russell [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20021030034743.A05AA2C0DD@lists.samba.org \
--to=rusty@rustcorp.com.au \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=dhinds@zen.stanford.edu \
--cc=jgarzik@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.