diff options
author | Antonino A. Daplas <adaplas@gmail.com> | 2005-12-19 02:11:49 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-12-20 12:27:15 -0500 |
commit | 33c37c06f8066342764bd1568c9f3524efe889a5 (patch) | |
tree | ba308b43facb9fc39f412dc82ee79e96cd022df8 | |
parent | 4b3760ce3d448d4af3036cd6c650d651a16ee02d (diff) |
[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: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/video/intelfb/intelfbdrv.c | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c index ac8d6617095e..0090544842f5 100644 --- a/drivers/video/intelfb/intelfbdrv.c +++ b/drivers/video/intelfb/intelfbdrv.c | |||
@@ -135,9 +135,6 @@ | |||
135 | static void __devinit get_initial_mode(struct intelfb_info *dinfo); | 135 | static void __devinit get_initial_mode(struct intelfb_info *dinfo); |
136 | static void update_dinfo(struct intelfb_info *dinfo, | 136 | static void update_dinfo(struct intelfb_info *dinfo, |
137 | struct fb_var_screeninfo *var); | 137 | struct fb_var_screeninfo *var); |
138 | static int intelfb_get_fix(struct fb_fix_screeninfo *fix, | ||
139 | struct fb_info *info); | ||
140 | |||
141 | static int intelfb_check_var(struct fb_var_screeninfo *var, | 138 | static int intelfb_check_var(struct fb_var_screeninfo *var, |
142 | struct fb_info *info); | 139 | struct fb_info *info); |
143 | static int intelfb_set_par(struct fb_info *info); | 140 | static int intelfb_set_par(struct fb_info *info); |
@@ -1096,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo) | |||
1096 | return 1; | 1093 | return 1; |
1097 | 1094 | ||
1098 | info->pixmap.scan_align = 1; | 1095 | info->pixmap.scan_align = 1; |
1099 | 1096 | strcpy(info->fix.id, dinfo->name); | |
1097 | info->fix.smem_start = dinfo->fb.physical; | ||
1098 | info->fix.smem_len = dinfo->fb.size; | ||
1099 | info->fix.type = FB_TYPE_PACKED_PIXELS; | ||
1100 | info->fix.type_aux = 0; | ||
1101 | info->fix.xpanstep = 8; | ||
1102 | info->fix.ypanstep = 1; | ||
1103 | info->fix.ywrapstep = 0; | ||
1104 | info->fix.mmio_start = dinfo->mmio_base_phys; | ||
1105 | info->fix.mmio_len = INTEL_REG_SIZE; | ||
1106 | info->fix.accel = FB_ACCEL_I830; | ||
1100 | update_dinfo(dinfo, &info->var); | 1107 | update_dinfo(dinfo, &info->var); |
1101 | 1108 | ||
1102 | return 0; | 1109 | return 0; |
@@ -1114,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) | |||
1114 | dinfo->yres = var->xres; | 1121 | dinfo->yres = var->xres; |
1115 | dinfo->pixclock = var->pixclock; | 1122 | dinfo->pixclock = var->pixclock; |
1116 | 1123 | ||
1117 | intelfb_get_fix(&dinfo->info->fix, dinfo->info); | 1124 | dinfo->info->fix.visual = dinfo->visual; |
1125 | dinfo->info->fix.line_length = dinfo->pitch; | ||
1118 | 1126 | ||
1119 | switch (dinfo->bpp) { | 1127 | switch (dinfo->bpp) { |
1120 | case 8: | 1128 | case 8: |
@@ -1144,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var) | |||
1144 | 1152 | ||
1145 | /* fbops functions */ | 1153 | /* fbops functions */ |
1146 | 1154 | ||
1147 | static int | ||
1148 | intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info) | ||
1149 | { | ||
1150 | struct intelfb_info *dinfo = GET_DINFO(info); | ||
1151 | |||
1152 | DBG_MSG("intelfb_get_fix\n"); | ||
1153 | |||
1154 | memset(fix, 0, sizeof(*fix)); | ||
1155 | strcpy(fix->id, dinfo->name); | ||
1156 | fix->smem_start = dinfo->fb.physical; | ||
1157 | fix->smem_len = dinfo->fb.size; | ||
1158 | fix->type = FB_TYPE_PACKED_PIXELS; | ||
1159 | fix->type_aux = 0; | ||
1160 | fix->visual = dinfo->visual; | ||
1161 | fix->xpanstep = 8; | ||
1162 | fix->ypanstep = 1; | ||
1163 | fix->ywrapstep = 0; | ||
1164 | fix->line_length = dinfo->pitch; | ||
1165 | fix->mmio_start = dinfo->mmio_base_phys; | ||
1166 | fix->mmio_len = INTEL_REG_SIZE; | ||
1167 | fix->accel = FB_ACCEL_I830; | ||
1168 | return 0; | ||
1169 | } | ||
1170 | |||
1171 | /*************************************************************** | 1155 | /*************************************************************** |
1172 | * fbdev interface * | 1156 | * fbdev interface * |
1173 | ***************************************************************/ | 1157 | ***************************************************************/ |