The ISAPNP spec recommends that independent options precede
dependent ones, but this is not actually required. The current
ISAPNP code incorrectly puts such trailing independent options
at the end of the last dependent option list.
This patch fixes that bug by resetting the current option list
to the independent list when we see an "End Dependent Functions"
tag. PNPBIOS and PNPACPI handle this the same way.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-by: Rene Herman <rene.herman@gmail.com>
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c 2008-06-03 15:45:02.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c 2008-06-03 15:49:38.000000000 -0600
@@ -584,14 +584,14 @@ static int __init isapnp_create_device(s
{
int number = 0, skip = 0, priority, compat = 0;
unsigned char type, tmp[17];
- struct pnp_option *option;
+ struct pnp_option *option, *option_independent;
struct pnp_dev *dev;
u32 eisa_id;
char id[8];
if ((dev = isapnp_parse_device(card, size, number++)) == NULL)
return 1;
- option = pnp_register_independent_option(dev);
+ option_independent = option = pnp_register_independent_option(dev);
if (!option) {
kfree(dev);
return 1;
@@ -613,6 +613,7 @@ static int __init isapnp_create_device(s
size = 0;
skip = 0;
option = pnp_register_independent_option(dev);
+ option_independent = option;
if (!option) {
kfree(dev);
return 1;
@@ -662,6 +663,10 @@ static int __init isapnp_create_device(s
case _STAG_ENDDEP:
if (size != 0)
goto __skip;
+ if (option_independent == option)
+ dev_warn(&dev->dev, "missing "
+ "_STAG_STARTDEP tag\n");
+ option = option_independent;
dev_dbg(&dev->dev, "end dependent options\n");
break;
case _STAG_IOPORT:
--
--
| Chuck Ebbert | Why do so many machines need "noapic"? |
| Greg Kroah-Hartman | [PATCH 004/196] Chinese: add translation of SubmittingPatches |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Jeremy Allison | Re: [RFC] Heads up on sys_fallocate() |
git: | |
| Corey Minyard | [PATCH 3/3] Convert the UDP hash lock to RCU |
| David Miller | [GIT]: Networking |
| Denys Fedoryshchenko | packetloss, on e1000e worse than r8169? |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
