|
@@ -365,7 +365,7 @@ static int __devinit xenfb_probe(struct xenbus_device *dev,
|
|
|
struct fb_info *fb_info;
|
|
|
int fb_size;
|
|
|
int val;
|
|
|
- int ret;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
|
|
if (info == NULL) {
|
|
@@ -458,26 +458,31 @@ static int __devinit xenfb_probe(struct xenbus_device *dev,
|
|
|
xenfb_init_shared_page(info, fb_info);
|
|
|
|
|
|
ret = xenfb_connect_backend(dev, info);
|
|
|
- if (ret < 0)
|
|
|
- goto error;
|
|
|
+ if (ret < 0) {
|
|
|
+ xenbus_dev_fatal(dev, ret, "xenfb_connect_backend");
|
|
|
+ goto error_fb;
|
|
|
+ }
|
|
|
|
|
|
ret = register_framebuffer(fb_info);
|
|
|
if (ret) {
|
|
|
- fb_deferred_io_cleanup(fb_info);
|
|
|
- fb_dealloc_cmap(&fb_info->cmap);
|
|
|
- framebuffer_release(fb_info);
|
|
|
xenbus_dev_fatal(dev, ret, "register_framebuffer");
|
|
|
- goto error;
|
|
|
+ goto error_fb;
|
|
|
}
|
|
|
info->fb_info = fb_info;
|
|
|
|
|
|
xenfb_make_preferred_console();
|
|
|
return 0;
|
|
|
|
|
|
- error_nomem:
|
|
|
- ret = -ENOMEM;
|
|
|
- xenbus_dev_fatal(dev, ret, "allocating device memory");
|
|
|
- error:
|
|
|
+error_fb:
|
|
|
+ fb_deferred_io_cleanup(fb_info);
|
|
|
+ fb_dealloc_cmap(&fb_info->cmap);
|
|
|
+ framebuffer_release(fb_info);
|
|
|
+error_nomem:
|
|
|
+ if (!ret) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ xenbus_dev_fatal(dev, ret, "allocating device memory");
|
|
|
+ }
|
|
|
+error:
|
|
|
xenfb_remove(dev);
|
|
|
return ret;
|
|
|
}
|