From: <castet.matthieu@free.fr>

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 <akpm@osdl.org>
---

 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;
_