aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pnp/pnpbios/core.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
index 4e9fd37cff35..e33e03f71084 100644
--- a/drivers/pnp/pnpbios/core.c
+++ b/drivers/pnp/pnpbios/core.c
@@ -315,25 +315,31 @@ struct pnp_protocol pnpbios_protocol = {
315 .disable = pnpbios_disable_resources, 315 .disable = pnpbios_disable_resources,
316}; 316};
317 317
318static int insert_device(struct pnp_dev *dev, struct pnp_bios_node *node) 318static int insert_device(struct pnp_bios_node *node)
319{ 319{
320 struct list_head *pos; 320 struct list_head *pos;
321 struct pnp_dev *pnp_dev; 321 struct pnp_dev *dev;
322 struct pnp_id *dev_id; 322 struct pnp_id *dev_id;
323 char id[8]; 323 char id[8];
324 324
325 /* check if the device is already added */ 325 /* check if the device is already added */
326 dev->number = node->handle;
327 list_for_each(pos, &pnpbios_protocol.devices) { 326 list_for_each(pos, &pnpbios_protocol.devices) {
328 pnp_dev = list_entry(pos, struct pnp_dev, protocol_list); 327 dev = list_entry(pos, struct pnp_dev, protocol_list);
329 if (dev->number == pnp_dev->number) 328 if (dev->number == node->handle)
330 return -1; 329 return -1;
331 } 330 }
332 331
333 /* set the initial values for the PnP device */ 332 dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
333 if (!dev)
334 return -1;
335
334 dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL); 336 dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
335 if (!dev_id) 337 if (!dev_id) {
338 kfree(dev);
336 return -1; 339 return -1;
340 }
341
342 dev->number = node->handle;
337 pnpid32_to_pnpid(node->eisa_id, id); 343 pnpid32_to_pnpid(node->eisa_id, id);
338 memcpy(dev_id->id, id, 7); 344 memcpy(dev_id->id, id, 7);
339 pnp_add_id(dev_id, dev); 345 pnp_add_id(dev_id, dev);
@@ -367,7 +373,6 @@ static void __init build_devlist(void)
367 unsigned int nodes_got = 0; 373 unsigned int nodes_got = 0;
368 unsigned int devs = 0; 374 unsigned int devs = 0;
369 struct pnp_bios_node *node; 375 struct pnp_bios_node *node;
370 struct pnp_dev *dev;
371 376
372 node = kzalloc(node_info.max_node_size, GFP_KERNEL); 377 node = kzalloc(node_info.max_node_size, GFP_KERNEL);
373 if (!node) 378 if (!node)
@@ -388,12 +393,7 @@ static void __init build_devlist(void)
388 break; 393 break;
389 } 394 }
390 nodes_got++; 395 nodes_got++;
391 dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL); 396 if (insert_device(node) == 0)
392 if (!dev)
393 break;
394 if (insert_device(dev, node) < 0)
395 kfree(dev);
396 else
397 devs++; 397 devs++;
398 if (nodenum <= thisnodenum) { 398 if (nodenum <= thisnodenum) {
399 printk(KERN_ERR 399 printk(KERN_ERR