UBUNTU: SAUCE: (no-up) Modularize vesafb -- fix initialisation
authorAndy Whitcroft <apw@canonical.com>
Thu, 29 Jul 2010 08:42:21 +0000 (09:42 +0100)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:49:03 +0000 (06:49 -0700)
When this patch was rolled forward, likely between Dapper and Hardy
a chunk of initialisation was lost.  Pull this back in so we actually
have an vesafb_info structure initialised.  Else we may well panic when
we rmmod vesafb.

Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Brad Figg <brad.figg@canonical.com>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>

drivers/video/vesafb.c

index 00df7e5..e371d13 100644 (file)
@@ -257,6 +257,7 @@ static int __init vesafb_setup(char *options)
 static int __init vesafb_probe(struct platform_device *dev)
 {
        struct fb_info *info;
+       struct vesafb_info *vfb_info;
        int i, err;
        unsigned int size_vmode;
        unsigned int size_remap;
@@ -315,13 +316,14 @@ static int __init vesafb_probe(struct platform_device *dev)
                   spaces our resource handlers simply don't know about */
        }
 
-       info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
+       info = framebuffer_alloc(sizeof(struct vesafb_info), &dev->dev);
        if (!info) {
                release_mem_region(vesafb_fix.smem_start, size_total);
                return -ENOMEM;
        }
-       info->pseudo_palette = info->par;
-       info->par = NULL;
+       vfb_info = (struct vesafb_info *) info->par;
+       vfb_info->mtrr_hdl = -1;
+       info->pseudo_palette = vfb_info->pseudo_palette;
 
        /* set vesafb aperture size for generic probing */
        info->apertures = alloc_apertures(1);
@@ -464,18 +466,16 @@ static int __init vesafb_probe(struct platform_device *dev)
                }
 
                if (type) {
-                       int rc;
-
                        /* Find the largest power-of-two */
                        while (temp_size & (temp_size - 1))
                                temp_size &= (temp_size - 1);
 
                        /* Try and find a power of two to add */
                        do {
-                               rc = mtrr_add(vesafb_fix.smem_start, temp_size,
+                               vfb_info->mtrr_hdl = mtrr_add(vesafb_fix.smem_start, temp_size,
                                              type, 1);
                                temp_size >>= 1;
-                       } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
+                       } while (temp_size >= PAGE_SIZE && vfb_info->mtrr_hdl == -EINVAL);
                }
        }
 #endif