mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
drm/radeon/kms: cleanup structure and module if initialization fails
This would allow us to properly unload others module like TTM if initialization fails after we initiliazed TTM structure. Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@linux.ie>
This commit is contained in:
parent
eaa5fd1a66
commit
cf0fe4566d
@ -30,10 +30,19 @@
|
|||||||
#include "radeon.h"
|
#include "radeon.h"
|
||||||
#include "radeon_drm.h"
|
#include "radeon_drm.h"
|
||||||
|
|
||||||
|
int radeon_driver_unload_kms(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
struct radeon_device *rdev = dev->dev_private;
|
||||||
|
|
||||||
|
if (rdev == NULL)
|
||||||
|
return 0;
|
||||||
|
radeon_modeset_fini(rdev);
|
||||||
|
radeon_device_fini(rdev);
|
||||||
|
kfree(rdev);
|
||||||
|
dev->dev_private = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Driver load/unload
|
|
||||||
*/
|
|
||||||
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
||||||
{
|
{
|
||||||
struct radeon_device *rdev;
|
struct radeon_device *rdev;
|
||||||
@ -62,31 +71,20 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
|||||||
*/
|
*/
|
||||||
r = radeon_device_init(rdev, dev, dev->pdev, flags);
|
r = radeon_device_init(rdev, dev, dev->pdev, flags);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("Fatal error while trying to initialize radeon.\n");
|
dev_err(&dev->pdev->dev, "Fatal error during GPU init\n");
|
||||||
return r;
|
goto out;
|
||||||
}
|
}
|
||||||
/* Again modeset_init should fail only on fatal error
|
/* Again modeset_init should fail only on fatal error
|
||||||
* otherwise it should provide enough functionalities
|
* otherwise it should provide enough functionalities
|
||||||
* for shadowfb to run
|
* for shadowfb to run
|
||||||
*/
|
*/
|
||||||
r = radeon_modeset_init(rdev);
|
r = radeon_modeset_init(rdev);
|
||||||
if (r) {
|
if (r)
|
||||||
return r;
|
dev_err(&dev->pdev->dev, "Fatal error during modeset init\n");
|
||||||
}
|
out:
|
||||||
return 0;
|
if (r)
|
||||||
}
|
radeon_driver_unload_kms(dev);
|
||||||
|
return r;
|
||||||
int radeon_driver_unload_kms(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
struct radeon_device *rdev = dev->dev_private;
|
|
||||||
|
|
||||||
if (rdev == NULL)
|
|
||||||
return 0;
|
|
||||||
radeon_modeset_fini(rdev);
|
|
||||||
radeon_device_fini(rdev);
|
|
||||||
kfree(rdev);
|
|
||||||
dev->dev_private = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user