diff options
| author | Antonino A. Daplas <adaplas@gmail.com> | 2005-12-19 02:11:40 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-12-20 12:27:15 -0500 |
| commit | 4b3760ce3d448d4af3036cd6c650d651a16ee02d (patch) | |
| tree | 369f5680fad714f215f7b96b7b62975d55c55424 | |
| parent | 6ee7fb7e363aa8828b3920422416707c79f39007 (diff) | |
[PATCH] intelfb: Fix freeing of nonexistent resource
Fix intelfb trying to free a non-existent resource in its error path.
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/video/intelfb/intelfb.h | 5 | ||||
| -rw-r--r-- | drivers/video/intelfb/intelfbdrv.c | 9 |
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/video/intelfb/intelfb.h b/drivers/video/intelfb/intelfb.h index f077ca34faba..da29d007f215 100644 --- a/drivers/video/intelfb/intelfb.h +++ b/drivers/video/intelfb/intelfb.h | |||
| @@ -41,6 +41,10 @@ | |||
| 41 | 41 | ||
| 42 | /*** hw-related values ***/ | 42 | /*** hw-related values ***/ |
| 43 | 43 | ||
| 44 | /* Resource Allocation */ | ||
| 45 | #define INTELFB_FB_ACQUIRED 1 | ||
| 46 | #define INTELFB_MMIO_ACQUIRED 2 | ||
| 47 | |||
| 44 | /* PCI ids for supported devices */ | 48 | /* PCI ids for supported devices */ |
| 45 | #define PCI_DEVICE_ID_INTEL_830M 0x3577 | 49 | #define PCI_DEVICE_ID_INTEL_830M 0x3577 |
| 46 | #define PCI_DEVICE_ID_INTEL_845G 0x2562 | 50 | #define PCI_DEVICE_ID_INTEL_845G 0x2562 |
| @@ -257,6 +261,7 @@ struct intelfb_info { | |||
| 257 | int hwcursor; | 261 | int hwcursor; |
| 258 | int fixed_mode; | 262 | int fixed_mode; |
| 259 | int ring_active; | 263 | int ring_active; |
| 264 | int flag; | ||
| 260 | 265 | ||
| 261 | /* hw cursor */ | 266 | /* hw cursor */ |
| 262 | int cursor_on; | 267 | int cursor_on; |
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c index 427689e584da..ac8d6617095e 100644 --- a/drivers/video/intelfb/intelfbdrv.c +++ b/drivers/video/intelfb/intelfbdrv.c | |||
| @@ -473,9 +473,9 @@ cleanup(struct intelfb_info *dinfo) | |||
| 473 | if (dinfo->aperture.virtual) | 473 | if (dinfo->aperture.virtual) |
| 474 | iounmap((void __iomem *)dinfo->aperture.virtual); | 474 | iounmap((void __iomem *)dinfo->aperture.virtual); |
| 475 | 475 | ||
| 476 | if (dinfo->mmio_base_phys) | 476 | if (dinfo->flag & INTELFB_MMIO_ACQUIRED) |
| 477 | release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE); | 477 | release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE); |
| 478 | if (dinfo->aperture.physical) | 478 | if (dinfo->flag & INTELFB_FB_ACQUIRED) |
| 479 | release_mem_region(dinfo->aperture.physical, | 479 | release_mem_region(dinfo->aperture.physical, |
| 480 | dinfo->aperture.size); | 480 | dinfo->aperture.size); |
| 481 | framebuffer_release(dinfo->info); | 481 | framebuffer_release(dinfo->info); |
| @@ -572,6 +572,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 572 | cleanup(dinfo); | 572 | cleanup(dinfo); |
| 573 | return -ENODEV; | 573 | return -ENODEV; |
| 574 | } | 574 | } |
| 575 | |||
| 576 | dinfo->flag |= INTELFB_FB_ACQUIRED; | ||
| 577 | |||
| 575 | if (!request_mem_region(dinfo->mmio_base_phys, | 578 | if (!request_mem_region(dinfo->mmio_base_phys, |
| 576 | INTEL_REG_SIZE, | 579 | INTEL_REG_SIZE, |
| 577 | INTELFB_MODULE_NAME)) { | 580 | INTELFB_MODULE_NAME)) { |
| @@ -580,6 +583,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 580 | return -ENODEV; | 583 | return -ENODEV; |
| 581 | } | 584 | } |
| 582 | 585 | ||
| 586 | dinfo->flag |= INTELFB_MMIO_ACQUIRED; | ||
| 587 | |||
| 583 | /* Get the chipset info. */ | 588 | /* Get the chipset info. */ |
| 584 | dinfo->pci_chipset = pdev->device; | 589 | dinfo->pci_chipset = pdev->device; |
| 585 | 590 | ||
