From: Shixiong Ou <[email protected]>

Fix missing pci_disable_device() in probe and remove.

Use pcim_enable_device(), devm_request_mem_region(),
devm_ioremap() and devm_ioremap_wc() to replace manual resource
management. Remove all release_mem_region() and iounmap() calls.
Use devm_request_mem_region() instead of pcim_request_region()
because the requested sizes (16384 for MMIO, maxvram for FB) do
not match the full PCI BAR sizes.

Signed-off-by: Shixiong Ou <[email protected]>
---
 drivers/video/fbdev/matrox/matroxfb_base.c | 30 ++++++++--------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/video/fbdev/matrox/matroxfb_base.c 
b/drivers/video/fbdev/matrox/matroxfb_base.c
index ac04a19b6849..24d312c29fb6 100644
--- a/drivers/video/fbdev/matrox/matroxfb_base.c
+++ b/drivers/video/fbdev/matrox/matroxfb_base.c
@@ -374,10 +374,6 @@ static void matroxfb_remove(struct matrox_fb_info *minfo, 
int dummy)
        unregister_framebuffer(&minfo->fbcon);
        matroxfb_g450_shutdown(minfo);
        arch_phys_wc_del(minfo->wc_cookie);
-       iounmap(minfo->mmio.vbase.vaddr);
-       iounmap(minfo->video.vbase.vaddr);
-       release_mem_region(minfo->video.base, minfo->video.len_maximum);
-       release_mem_region(minfo->mmio.base, 16384);
        kfree(minfo);
 }
 
@@ -1712,11 +1708,13 @@ static int initMatrox2(struct matrox_fb_info *minfo, 
struct board *b)
                goto fail;
        }
        memsize = b->base->maxvram;
-       if (!request_mem_region(ctrlptr_phys, 16384, "matroxfb MMIO")) {
+       if (!devm_request_mem_region(&minfo->pcidev->dev, ctrlptr_phys, 16384,
+                                    "matroxfb MMIO")) {
                goto fail;
        }
-       if (!request_mem_region(video_base_phys, memsize, "matroxfb FB")) {
-               goto failCtrlMR;
+       if (!devm_request_mem_region(&minfo->pcidev->dev, video_base_phys,
+                                    memsize, "matroxfb FB")) {
+               goto fail;
        }
        minfo->video.len_maximum = memsize;
        /* convert mem (autodetect k, M) */
@@ -1727,19 +1725,19 @@ static int initMatrox2(struct matrox_fb_info *minfo, 
struct board *b)
                memsize = mem;
        err = -ENOMEM;
 
-       minfo->mmio.vbase.vaddr = ioremap(ctrlptr_phys, 16384);
+       minfo->mmio.vbase.vaddr = devm_ioremap(&minfo->pcidev->dev, 
ctrlptr_phys, 16384);
        if (!minfo->mmio.vbase.vaddr) {
                printk(KERN_ERR "matroxfb: cannot ioremap(%lX, 16384), matroxfb 
disabled\n", ctrlptr_phys);
-               goto failVideoMR;
+               goto fail;
        }
        minfo->mmio.base = ctrlptr_phys;
        minfo->mmio.len = 16384;
        minfo->video.base = video_base_phys;
-       minfo->video.vbase.vaddr = ioremap_wc(video_base_phys, memsize);
+       minfo->video.vbase.vaddr = devm_ioremap_wc(&minfo->pcidev->dev, 
video_base_phys, memsize);
        if (!minfo->video.vbase.vaddr) {
                printk(KERN_ERR "matroxfb: cannot ioremap(%lX, %d), matroxfb 
disabled\n",
                        video_base_phys, memsize);
-               goto failCtrlIO;
+               goto fail;
        }
        {
                u_int32_t cmd;
@@ -1954,13 +1952,6 @@ static int initMatrox2(struct matrox_fb_info *minfo, 
struct board *b)
        return 0;
 failVideoIO:;
        matroxfb_g450_shutdown(minfo);
-       iounmap(minfo->video.vbase.vaddr);
-failCtrlIO:;
-       iounmap(minfo->mmio.vbase.vaddr);
-failVideoMR:;
-       release_mem_region(video_base_phys, minfo->video.len_maximum);
-failCtrlMR:;
-       release_mem_region(ctrlptr_phys, 16384);
 fail:;
        return err;
 }
@@ -2069,9 +2060,8 @@ static int matroxfb_probe(struct pci_dev* pdev, const 
struct pci_device_id* dumm
                return -ENODEV;
        }
        pci_read_config_dword(pdev, PCI_COMMAND, &cmd);
-       if (pci_enable_device(pdev)) {
+       if (pcim_enable_device(pdev))
                return -1;
-       }
 
        minfo = kzalloc_obj(*minfo);
        if (!minfo)
-- 
2.25.1


No virus found
                Checked by Hillstone Network AntiVirus

Reply via email to