[PATCH] crash in aty128_set_lcd_enable() on PowerBook
Current Linus tree crashes in aty128_set_lcd_enable() because par->pdev is NULL. This happens since at least a week. Call trace is: aty128_set_lcd_enable aty128fb_set_par fbcon_init visual_init take_over_console fbcon_takeover notifier_call_chain blocking_notifier_call_chain register_framebuffer aty128fb_probe pci_device_probe bus_for_each_dev driver_attach bus_add_driver driver_register __pci_register_driver aty128fb_init init kernel_thread - info->fix was assigned twice. - par->vram_size is assigned in aty128_probe(), no need to redo it again in aty128_init() - register_framebuffer() uses uninitialized struct members, move it past par->pdev assignment and past aty128_bl_init(). Signed-off-by: Olaf Hering <olh@suse.de> Acked-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
06fa45d3a1
commit
c3760ae1f9
|
@ -1913,9 +1913,6 @@ static int __devinit aty128_init(struct pci_dev *pdev, const struct pci_device_i
|
|||
u8 chip_rev;
|
||||
u32 dac;
|
||||
|
||||
if (!par->vram_size) /* may have already been probed */
|
||||
par->vram_size = aty_ld_le32(CONFIG_MEMSIZE) & 0x03FFFFFF;
|
||||
|
||||
/* Get the chip revision */
|
||||
chip_rev = (aty_ld_le32(CONFIG_CNTL) >> 16) & 0x1F;
|
||||
|
||||
|
@ -2028,9 +2025,6 @@ static int __devinit aty128_init(struct pci_dev *pdev, const struct pci_device_i
|
|||
|
||||
aty128_init_engine(par);
|
||||
|
||||
if (register_framebuffer(info) < 0)
|
||||
return 0;
|
||||
|
||||
par->pm_reg = pci_find_capability(pdev, PCI_CAP_ID_PM);
|
||||
par->pdev = pdev;
|
||||
par->asleep = 0;
|
||||
|
@ -2040,6 +2034,9 @@ static int __devinit aty128_init(struct pci_dev *pdev, const struct pci_device_i
|
|||
aty128_bl_init(par);
|
||||
#endif
|
||||
|
||||
if (register_framebuffer(info) < 0)
|
||||
return 0;
|
||||
|
||||
printk(KERN_INFO "fb%d: %s frame buffer device on %s\n",
|
||||
info->node, info->fix.id, video_card);
|
||||
|
||||
|
@ -2089,7 +2086,6 @@ static int __devinit aty128_probe(struct pci_dev *pdev, const struct pci_device_
|
|||
par = info->par;
|
||||
|
||||
info->pseudo_palette = par->pseudo_palette;
|
||||
info->fix = aty128fb_fix;
|
||||
|
||||
/* Virtualize mmio region */
|
||||
info->fix.mmio_start = reg_addr;
|
||||
|
|
Loading…
Reference in a new issue