From: this patch fix a pnpbios problem with independant resource(http://bugzilla.kernel.org/show_bug.cgi?id=3295) : the old code assume that they are given at the beggining (before any SMALL_TAG_STARTDEP entry), but in some case there are found after SMALL_TAG_ENDDEP entry. tag : 6 SMALL_TAG_STARTDEP tag : 8 SMALL_TAG_PORT tag : 6 SMALL_TAG_STARTDEP tag : 8 SMALL_TAG_PORT tag : 7 SMALL_TAG_ENDDEP tag : 4 SMALL_TAG_IRQ <-- independant resource tag : f SMALL_TAG_END Signed-off-by: Andrew Morton --- 25-akpm/drivers/pnp/pnpbios/rsparser.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff -puN drivers/pnp/pnpbios/rsparser.c~pnpbios-parser-bugfix drivers/pnp/pnpbios/rsparser.c --- 25/drivers/pnp/pnpbios/rsparser.c~pnpbios-parser-bugfix 2004-09-03 22:58:21.727384696 -0700 +++ 25-akpm/drivers/pnp/pnpbios/rsparser.c 2004-09-03 22:58:21.731384088 -0700 @@ -346,12 +346,12 @@ pnpbios_parse_resource_option_data(unsig { unsigned int len, tag; int priority = 0; - struct pnp_option *option; + struct pnp_option *option, *option_independent; if (!p) return NULL; - option = pnp_register_independent_option(dev); + option_independent = option = pnp_register_independent_option(dev); if (!option) return NULL; @@ -428,9 +428,14 @@ pnpbios_parse_resource_option_data(unsig case SMALL_TAG_ENDDEP: if (len != 0) goto len_err; + if (option_independent == option) + printk(KERN_WARNING "PnPBIOS: Missing SMALL_TAG_STARTDEP tag\n"); + option = option_independent; break; case SMALL_TAG_END: + if (option_independent != option) + printk(KERN_WARNING "PnPBIOS: Missing SMALL_TAG_ENDDEP tag\n"); p = p + 2; return (unsigned char *)p; break; _