[PATCH 1/1] UBUNTU: SAUCE: (no-up) Modularize vesafb -- fix initialisation
Stefan Bader
stefan.bader at canonical.com
Thu Jul 29 09:10:00 UTC 2010
On 07/29/2010 10:42 AM, Andy Whitcroft wrote:
> 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 at canonical.com>
> ---
> drivers/video/vesafb.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c
> index 5a95b55..7137226 100644
> --- a/drivers/video/vesafb.c
> +++ b/drivers/video/vesafb.c
> @@ -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;
Hm, before info->pseudo_palette was info->par and info->par was reset to NULL.
Now info->pseudo_palette is set to ((struct vesafb_info *)
info->par)->pseudo_palette (which would be ok if that is the first element) and
info->par is left unchanged. Just double checking if thats the intention.
>
> /* 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
More information about the kernel-team
mailing list