diff options
Diffstat (limited to 'drivers/pnp/pnpbios/core.c')
| -rw-r--r-- | drivers/pnp/pnpbios/core.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c index 9b86a01af63..074569e77d2 100644 --- a/drivers/pnp/pnpbios/core.c +++ b/drivers/pnp/pnpbios/core.c @@ -312,18 +312,19 @@ static int __init insert_device(struct pnp_bios_node *node)  	struct list_head *pos;  	struct pnp_dev *dev;  	char id[8]; +	int error;  	/* check if the device is already added */  	list_for_each(pos, &pnpbios_protocol.devices) {  		dev = list_entry(pos, struct pnp_dev, protocol_list);  		if (dev->number == node->handle) -			return -1; +			return -EEXIST;  	}  	pnp_eisa_id_to_string(node->eisa_id & PNP_EISA_ID_MASK, id);  	dev = pnp_alloc_dev(&pnpbios_protocol, node->handle, id);  	if (!dev) -		return -1; +		return -ENOMEM;  	pnpbios_parse_data_stream(dev, node);  	dev->active = pnp_is_active(dev); @@ -342,7 +343,12 @@ static int __init insert_device(struct pnp_bios_node *node)  	if (!dev->active)  		pnp_init_resources(dev); -	pnp_add_device(dev); +	error = pnp_add_device(dev); +	if (error) { +		put_device(&dev->dev); +		return error; +	} +  	pnpbios_interface_attach_device(node);  	return 0;  | 
