}
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];
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,
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;
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);
}
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);
}