From: Tim Waugh <twaugh@redhat.com>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: linux-kernel@vger.kernel.org
Subject: [patch] 2.4.2-pre3: parport_pc init_module bug
Date: Tue, 13 Feb 2001 23:43:49 +0000 [thread overview]
Message-ID: <20010213234349.O9459@redhat.com> (raw)
Linus,
Here's a patch that fixes a bug that can cause PCI driver list
corruption. If parport_pc's init_module fails after it calls
pci_register_driver, cleanup_module isn't called and so it's still
registered when it gets unloaded.
Tim.
*/
2001-01-13 Tim Waugh <twaugh@redhat.com>
* parport_pc.c: Fix PCI driver list corruption on
unsuccessful module load (Andrew Morton).
--- linux/drivers/parport/parport_pc.c.init Tue Feb 13 23:31:25 2001
+++ linux/drivers/parport/parport_pc.c Tue Feb 13 23:35:56 2001
@@ -89,6 +89,7 @@
} superios[NR_SUPERIOS] __devinitdata = { {0,},};
static int user_specified __devinitdata = 0;
+static int registered_parport;
/* frob_control, but for ECR */
static void frob_econtrol (struct parport *pb, unsigned char m,
@@ -2605,6 +2606,7 @@
count += parport_pc_find_nonpci_ports (autoirq, autodma);
r = pci_register_driver (&parport_pc_pci_driver);
+ registered_parport = 1;
if (r > 0)
count += r;
@@ -2667,6 +2669,7 @@
/* Work out how many ports we have, then get parport_share to parse
the irq values. */
unsigned int i;
+ int ret;
for (i = 0; i < PARPORT_PC_MAX_PORTS && io[i]; i++);
if (i) {
if (parport_parse_irqs(i, irq, irqval)) return 1;
@@ -2691,7 +2694,11 @@
}
}
- return !parport_pc_init (io, io_hi, irqval, dmaval);
+ ret = !parport_pc_init (io, io_hi, irqval, dmaval);
+ if (ret && registered_parport)
+ pci_unregister_driver (&parport_pc_pci_driver);
+
+ return ret;
}
void cleanup_module(void)
*** linux/drivers/parport/ChangeLog.init Fri Jan 5 10:41:52 2001
--- linux/drivers/parport/ChangeLog Tue Feb 13 23:32:02 2001
***************
*** 0 ****
--- 1,7 ----
+ 2001-02-13 Andrew Morton <andrewm@uow.edu.au>
+
+ * parport_pc.c (registered_parport): New static variable.
+ (parport_pc_find_ports): Set it when we register PCI driver.
+ (init_module): Unregister PCI driver if necessary when we
+ fail.
+
next reply other threads:[~2001-02-13 23:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-13 23:43 Tim Waugh [this message]
2001-02-14 8:03 ` [patch] 2.4.2-pre3: parport_pc init_module bug Jeff Garzik
2001-02-14 8:53 ` James Sutherland
2001-02-14 10:53 ` Tim Waugh
2001-02-14 11:14 ` Jeff Garzik
2001-02-14 11:18 ` Tim Waugh
2001-02-14 11:21 ` Andrew Morton
2001-02-14 11:17 ` Tim Waugh
2001-02-14 11:24 ` Jeff Garzik
2001-02-14 11:40 ` Philipp Rumpf
2001-02-14 17:25 ` Grant Grundler
2001-02-14 21:12 ` Philipp Rumpf
2001-02-15 2:26 ` Grant Grundler
2001-02-18 15:05 ` Jeff Garzik
2001-02-14 11:31 ` Philipp Rumpf
2001-02-14 11:17 ` Jeff Garzik
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=20010213234349.O9459@redhat.com \
--to=twaugh@redhat.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.