Commit 33c37c06 authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds

[PATCH] intelfb: Fix oops when changing video mode

Reported by: janis huang (Bugzilla Bug 5747)

Fix on oops in intelfb.  Not sure what's happening, looks like
dinfo->name pointer is invalidated after initialization.  Remove
intelfb_get_fix, it's not needed and move the majority of the code to
the initialization routine.
Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 4b3760ce
...@@ -135,9 +135,6 @@ ...@@ -135,9 +135,6 @@
static void __devinit get_initial_mode(struct intelfb_info *dinfo); static void __devinit get_initial_mode(struct intelfb_info *dinfo);
static void update_dinfo(struct intelfb_info *dinfo, static void update_dinfo(struct intelfb_info *dinfo,
struct fb_var_screeninfo *var); struct fb_var_screeninfo *var);
static int intelfb_get_fix(struct fb_fix_screeninfo *fix,
struct fb_info *info);
static int intelfb_check_var(struct fb_var_screeninfo *var, static int intelfb_check_var(struct fb_var_screeninfo *var,
struct fb_info *info); struct fb_info *info);
static int intelfb_set_par(struct fb_info *info); static int intelfb_set_par(struct fb_info *info);
...@@ -1096,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo) ...@@ -1096,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
return 1; return 1;
info->pixmap.scan_align = 1; info->pixmap.scan_align = 1;
strcpy(info->fix.id, dinfo->name);
info->fix.smem_start = dinfo->fb.physical;
info->fix.smem_len = dinfo->fb.size;
info->fix.type = FB_TYPE_PACKED_PIXELS;
info->fix.type_aux = 0;
info->fix.xpanstep = 8;
info->fix.ypanstep = 1;
info->fix.ywrapstep = 0;
info->fix.mmio_start = dinfo->mmio_base_phys;
info->fix.mmio_len = INTEL_REG_SIZE;
info->fix.accel = FB_ACCEL_I830;
update_dinfo(dinfo, &info->var); update_dinfo(dinfo, &info->var);
return 0; return 0;
...@@ -1114,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) ...@@ -1114,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
dinfo->yres = var->xres; dinfo->yres = var->xres;
dinfo->pixclock = var->pixclock; dinfo->pixclock = var->pixclock;
intelfb_get_fix(&dinfo->info->fix, dinfo->info); dinfo->info->fix.visual = dinfo->visual;
dinfo->info->fix.line_length = dinfo->pitch;
switch (dinfo->bpp) { switch (dinfo->bpp) {
case 8: case 8:
...@@ -1144,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) ...@@ -1144,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
/* fbops functions */ /* fbops functions */
static int
intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info)
{
struct intelfb_info *dinfo = GET_DINFO(info);
DBG_MSG("intelfb_get_fix\n");
memset(fix, 0, sizeof(*fix));
strcpy(fix->id, dinfo->name);
fix->smem_start = dinfo->fb.physical;
fix->smem_len = dinfo->fb.size;
fix->type = FB_TYPE_PACKED_PIXELS;
fix->type_aux = 0;
fix->visual = dinfo->visual;
fix->xpanstep = 8;
fix->ypanstep = 1;
fix->ywrapstep = 0;
fix->line_length = dinfo->pitch;
fix->mmio_start = dinfo->mmio_base_phys;
fix->mmio_len = INTEL_REG_SIZE;
fix->accel = FB_ACCEL_I830;
return 0;
}
/*************************************************************** /***************************************************************
* fbdev interface * * fbdev interface *
***************************************************************/ ***************************************************************/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment