Fix must-check warnings and implement a few error paths.

This commit is contained in:
Kristian Høgsberg 2007-07-02 17:52:07 -04:00
parent b323ab52aa
commit c9d752ff4f
3 changed files with 43 additions and 16 deletions

View file

@ -311,7 +311,7 @@ int drm_init(struct drm_driver *driver,
}
if (!drm_fb_loaded)
pci_register_driver(&driver->pci_driver);
return pci_register_driver(&driver->pci_driver);
else {
for (i = 0; pciidlist[i].vendor != 0; i++) {
pid = &pciidlist[i];

View file

@ -232,18 +232,22 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
if (!drm_fb_loaded) {
pci_set_drvdata(pdev, dev);
pci_request_regions(pdev, driver->pci_driver.name);
ret = pci_request_regions(pdev, driver->pci_driver.name);
if (ret)
goto err_g1;
}
pci_enable_device(pdev);
ret = pci_enable_device(pdev);
if (ret)
goto err_g2;
pci_set_master(pdev);
if ((ret = drm_fill_in_dev(dev, pdev, ent, driver))) {
printk(KERN_ERR "DRM: fill_in_dev failed\n");
goto err_g1;
goto err_g3;
}
if ((ret = drm_get_head(dev, &dev->primary)))
goto err_g1;
goto err_g3;
DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
driver->name, driver->major, driver->minor, driver->patchlevel,
@ -251,12 +255,16 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
return 0;
err_g1:
if (!drm_fb_loaded) {
pci_set_drvdata(pdev, NULL);
pci_release_regions(pdev);
err_g3:
if (!drm_fb_loaded)
pci_disable_device(pdev);
}
err_g2:
if (!drm_fb_loaded)
pci_release_regions(pdev);
err_g1:
if (!drm_fb_loaded)
pci_set_drvdata(pdev, NULL);
drm_free(dev, sizeof(*dev), DRM_MEM_STUB);
printk(KERN_ERR "DRM: drm_get_dev failed.\n");
return ret;

View file

@ -93,11 +93,15 @@ struct drm_sysfs_class *drm_sysfs_create(struct module *owner, char *name)
retval = class_register(&cs->class);
if (retval)
goto error;
class_create_file(&cs->class, &class_attr_version);
retval = class_create_file(&cs->class, &class_attr_version);
if (retval)
goto error_with_class;
return cs;
error:
error_with_class:
class_unregister(&cs->class);
error:
kfree(cs);
return ERR_PTR(retval);
}
@ -170,16 +174,31 @@ struct class_device *drm_sysfs_device_add(struct drm_sysfs_class *cs,
if (retval)
goto error;
class_device_create_file(&s_dev->class_dev, &cs->attr);
retval = class_device_create_file(&s_dev->class_dev, &cs->attr);
if (retval)
goto error_with_device;
class_set_devdata(&s_dev->class_dev, head);
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++)
class_device_create_file(&s_dev->class_dev, &class_device_attrs[i]);
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++) {
retval = class_device_create_file(&s_dev->class_dev,
&class_device_attrs[i]);
if (retval)
goto error_with_files;
}
return &s_dev->class_dev;
error:
error_with_files:
while (i > 0)
class_device_remove_file(&s_dev->class_dev,
&class_device_attrs[--i]);
class_device_remove_file(&s_dev->class_dev, &cs->attr);
error_with_device:
class_device_unregister(&s_dev->class_dev);
error:
kfree(s_dev);
return ERR_PTR(retval);
}