All of lore.kernel.org
 help / color / mirror / Atom feed
From: Russell King <rmk+lkml@arm.linux.org.uk>
To: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: linux-pcmcia@lists.infradead.org, linux-kernel@vger.kernel.org,
	Dominik Brodowski <linux@dominikbrodowski.net>
Subject: Re: PCMCIA driver resource allocation
Date: Fri, 19 Oct 2007 23:40:22 +0100	[thread overview]
Message-ID: <20071019224022.GA29738@flint.arm.linux.org.uk> (raw)
In-Reply-To: <200710191051.51686.bjorn.helgaas@hp.com>

On Fri, Oct 19, 2007 at 10:51:51AM -0600, Bjorn Helgaas wrote:
> Question 1: Does the linux-pcmcia list still exist?  It's in MAINTAINERS:
> 
>   PCMCIA SUBSYSTEM
>   P:      Linux PCMCIA Team
>   L:      linux-pcmcia@lists.infradead.org
>   L:      http://lists.infradead.org/mailman/listinfo/linux-pcmcia
>   T:      git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
>   S:      Maintained
> 
> but the archive: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
> seems dead.

The list is still around, but Dominik seems to have vanished.

> Question 2: Documentation/pcmcia/driver-changes.txt says drivers should
> now claim their own resources:
> 
>   * Resource management. (as of 2.6.8)
>      Although the PCMCIA subsystem will allocate resources for cards,
>      it no longer marks these resources busy. This means that driver
>      authors are now responsible for claiming your resources as per
>      other drivers in Linux.
> 
> But I don't see any drivers that do that.  It looks like there should
> be a bunch of changes like the one below.  Is there a reason these
> changes didn't happen, other than just lack of interest?

That's from around the time that I handed PCMCIA over to Dominik, and was
a to-do item.  I had some drivers converted over - mainly the few that I
was using, those being serial and pcnet_cs (serial is converted over but
the patch I had for pcnet_cs is below.)

However, in spite of me pointing Dominik at my remaining patch sets several
times, as far as I could tell they got ignored.  So essentially I all lost
interest in helping out with PCMCIA.

> Index: work3/drivers/net/wireless/orinoco_cs.c
> ===================================================================
> --- work3.orig/drivers/net/wireless/orinoco_cs.c	2007-10-18 10:56:34.000000000 -0600
> +++ work3/drivers/net/wireless/orinoco_cs.c	2007-10-18 13:22:44.000000000 -0600
> @@ -296,6 +296,10 @@
>  	/* We initialize the hermes structure before completing PCMCIA
>  	 * configuration just in case the interrupt handler gets
>  	 * called. */
> +	priv->io_resource = request_region(link->io.BasePort1,
> +					   link->io.NumPorts1, DRIVER_NAME);
> +	if (!priv->io_resource)
> +		goto cs_failed;
>  	mem = ioport_map(link->io.BasePort1, link->io.NumPorts1);
>  	if (!mem)
>  		goto cs_failed;
> @@ -366,6 +370,10 @@
>  	pcmcia_disable_device(link);
>  	if (priv->hw.iobase)
>  		ioport_unmap(priv->hw.iobase);
> +	if (priv->io_resource) {
> +		release_resource(priv->io_resource);
> +		priv->io_resource = NULL;

Wrong function.  release_resource() doesn't pair with request_region().
request_region() allocates memory for the struct resource.
release_resource() merely removes the struct resource from the tree.
release_region() on the other hand removes the struct resource and
frees it.

---

Convert pcnet_cs and serial_cs to request their IO regions, thereby
marking them busy.  These are only two of many drivers which need this
update.

diff -u -x BitKeeper -x ChangeSet -x SCCS -x _xlk -x '*.orig' -x '*.rej' ref/drivers/net/pcmcia/pcnet_cs.c linux/drivers/net/pcmcia/pcnet_cs.c
--- ref/drivers/net/pcmcia/pcnet_cs.c	Sun Nov 16 19:12:33 2003
+++ linux/drivers/net/pcmcia/pcnet_cs.c	Tue Dec 23 09:43:22 2003
@@ -687,8 +687,15 @@
     dev->poll_controller = ei_poll;
 #endif
 
+    if (!request_region(dev->base_addr, link->io.NumPorts1, "pcnet_cs")) {
+	printk(KERN_NOTICE "pcnet_cs: request_region() failed\n");
+	link->dev = NULL;
+	goto failed;
+    }
+
     if (register_netdev(dev) != 0) {
 	printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
+	release_region(dev->base_addr, link->io.NumPorts1);
 	link->dev = NULL;
 	goto failed;
     }
@@ -736,6 +743,9 @@
 
     DEBUG(0, "pcnet_release(0x%p)\n", link);
 
+    if (link->dev)
+	release_region(link->io.BasePort1, link->io.NumPorts1);
+
     if (info->flags & USE_SHMEM) {
 	iounmap(info->base);
 	pcmcia_release_window(link->win);


-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:


  reply	other threads:[~2007-10-19 22:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-19 16:51 PCMCIA driver resource allocation Bjorn Helgaas
2007-10-19 22:40 ` Russell King [this message]
2007-10-21 17:46   ` Kristoffer Ericson
2007-10-21  8:41     ` Russell King
2007-10-22 15:27   ` Bjorn Helgaas

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=20071019224022.GA29738@flint.arm.linux.org.uk \
    --to=rmk+lkml@arm.linux.org.uk \
    --cc=bjorn.helgaas@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pcmcia@lists.infradead.org \
    --cc=linux@dominikbrodowski.net \
    /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.