dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: devel@driverdev.osuosl.org, Hans de Goede <hdegoede@redhat.com>,
	Michael Thayer <michael.thayer@oracle.com>,
	dri-devel@lists.freedesktop.org
Subject: [PATCH 03/12] staging: vboxvideo: Fold driver_load/unload into probe/remove functions
Date: Tue, 18 Sep 2018 19:44:29 +0200	[thread overview]
Message-ID: <20180918174438.19780-4-hdegoede@redhat.com> (raw)
In-Reply-To: <20180918174438.19780-1-hdegoede@redhat.com>

Fold the driver_load / unload functions into the probe / remove functions
now that we are no longer using the deprecated drm_get_pci_dev() mechanism.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/staging/vboxvideo/vbox_drv.c  | 71 +++++++++++++++++++++------
 drivers/staging/vboxvideo/vbox_drv.h  |  6 ++-
 drivers/staging/vboxvideo/vbox_main.c | 67 ++-----------------------
 3 files changed, 63 insertions(+), 81 deletions(-)

diff --git a/drivers/staging/vboxvideo/vbox_drv.c b/drivers/staging/vboxvideo/vbox_drv.c
index 69cc508af1bc..410a1f35b746 100644
--- a/drivers/staging/vboxvideo/vbox_drv.c
+++ b/drivers/staging/vboxvideo/vbox_drv.c
@@ -51,48 +51,89 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static int vbox_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
+	struct vbox_private *vbox = NULL;
 	struct drm_device *dev = NULL;
 	int ret = 0;
 
+	if (!vbox_check_supported(VBE_DISPI_ID_HGSMI))
+		return -ENODEV;
+
 	dev = drm_dev_alloc(&driver, &pdev->dev);
-	if (IS_ERR(dev)) {
-		ret = PTR_ERR(dev);
-		goto err_drv_alloc;
-	}
+	if (IS_ERR(dev))
+		return PTR_ERR(dev);
 
 	ret = pci_enable_device(pdev);
 	if (ret)
-		goto err_pci_enable;
+		goto err_dev_put;
 
 	dev->pdev = pdev;
 	pci_set_drvdata(pdev, dev);
 
-	ret = vbox_driver_load(dev);
+	vbox = devm_kzalloc(&pdev->dev, sizeof(*vbox), GFP_KERNEL);
+	if (!vbox) {
+		ret = -ENOMEM;
+		goto err_pci_disable;
+	}
+
+	dev->dev_private = vbox;
+	vbox->dev = dev;
+
+	mutex_init(&vbox->hw_mutex);
+
+	ret = vbox_hw_init(vbox);
+	if (ret)
+		goto err_pci_disable;
+
+	ret = vbox_mm_init(vbox);
 	if (ret)
-		goto err_vbox_driver_load;
+		goto err_hw_fini;
+
+	ret = vbox_mode_init(dev);
+	if (ret)
+		goto err_mm_fini;
+
+	ret = vbox_irq_init(vbox);
+	if (ret)
+		goto err_mode_fini;
+
+	ret = vbox_fbdev_init(dev);
+	if (ret)
+		goto err_irq_fini;
 
 	ret = drm_dev_register(dev, 0);
 	if (ret)
-		goto err_drv_dev_register;
+		goto err_fbdev_fini;
 
-	return ret;
+	return 0;
 
- err_drv_dev_register:
-	vbox_driver_unload(dev);
- err_vbox_driver_load:
+err_fbdev_fini:
+	vbox_fbdev_fini(dev);
+err_irq_fini:
+	vbox_irq_fini(vbox);
+err_mode_fini:
+	vbox_mode_fini(dev);
+err_mm_fini:
+	vbox_mm_fini(vbox);
+err_hw_fini:
+	vbox_hw_fini(vbox);
+err_pci_disable:
 	pci_disable_device(pdev);
- err_pci_enable:
+err_dev_put:
 	drm_dev_put(dev);
- err_drv_alloc:
 	return ret;
 }
 
 static void vbox_pci_remove(struct pci_dev *pdev)
 {
 	struct drm_device *dev = pci_get_drvdata(pdev);
+	struct vbox_private *vbox = dev->dev_private;
 
 	drm_dev_unregister(dev);
-	vbox_driver_unload(dev);
+	vbox_fbdev_fini(dev);
+	vbox_irq_fini(vbox);
+	vbox_mode_fini(dev);
+	vbox_mm_fini(vbox);
+	vbox_hw_fini(vbox);
 	drm_dev_put(dev);
 }
 
diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h
index 594f84272957..a8e0dd8b57bf 100644
--- a/drivers/staging/vboxvideo/vbox_drv.h
+++ b/drivers/staging/vboxvideo/vbox_drv.h
@@ -126,8 +126,6 @@ struct vbox_private {
 #undef CURSOR_PIXEL_COUNT
 #undef CURSOR_DATA_SIZE
 
-int vbox_driver_load(struct drm_device *dev);
-void vbox_driver_unload(struct drm_device *dev);
 void vbox_driver_lastclose(struct drm_device *dev);
 
 struct vbox_gem_object;
@@ -177,6 +175,10 @@ struct vbox_fbdev {
 #define to_vbox_encoder(x) container_of(x, struct vbox_encoder, base)
 #define to_vbox_framebuffer(x) container_of(x, struct vbox_framebuffer, base)
 
+bool vbox_check_supported(u16 id);
+int vbox_hw_init(struct vbox_private *vbox);
+void vbox_hw_fini(struct vbox_private *vbox);
+
 int vbox_mode_init(struct drm_device *dev);
 void vbox_mode_fini(struct drm_device *dev);
 
diff --git a/drivers/staging/vboxvideo/vbox_main.c b/drivers/staging/vboxvideo/vbox_main.c
index a1cd29fe98fd..815292f1d7e6 100644
--- a/drivers/staging/vboxvideo/vbox_main.c
+++ b/drivers/staging/vboxvideo/vbox_main.c
@@ -228,7 +228,7 @@ static bool have_hgsmi_mode_hints(struct vbox_private *vbox)
 	return have_hints == VINF_SUCCESS && have_cursor == VINF_SUCCESS;
 }
 
-static bool vbox_check_supported(u16 id)
+bool vbox_check_supported(u16 id)
 {
 	u16 dispi_id;
 
@@ -242,7 +242,7 @@ static bool vbox_check_supported(u16 id)
  * Set up our heaps and data exchange buffers in VRAM before handing the rest
  * to the memory manager.
  */
-static int vbox_hw_init(struct vbox_private *vbox)
+int vbox_hw_init(struct vbox_private *vbox)
 {
 	int ret = -ENOMEM;
 
@@ -309,74 +309,13 @@ static int vbox_hw_init(struct vbox_private *vbox)
 	return ret;
 }
 
-static void vbox_hw_fini(struct vbox_private *vbox)
+void vbox_hw_fini(struct vbox_private *vbox)
 {
 	vbox_accel_fini(vbox);
 	gen_pool_destroy(vbox->guest_pool);
 	pci_iounmap(vbox->dev->pdev, vbox->guest_heap);
 }
 
-int vbox_driver_load(struct drm_device *dev)
-{
-	struct vbox_private *vbox;
-	int ret = 0;
-
-	if (!vbox_check_supported(VBE_DISPI_ID_HGSMI))
-		return -ENODEV;
-
-	vbox = devm_kzalloc(dev->dev, sizeof(*vbox), GFP_KERNEL);
-	if (!vbox)
-		return -ENOMEM;
-
-	dev->dev_private = vbox;
-	vbox->dev = dev;
-
-	mutex_init(&vbox->hw_mutex);
-
-	ret = vbox_hw_init(vbox);
-	if (ret)
-		return ret;
-
-	ret = vbox_mm_init(vbox);
-	if (ret)
-		goto err_hw_fini;
-
-	ret = vbox_mode_init(dev);
-	if (ret)
-		goto err_drm_mode_cleanup;
-
-	ret = vbox_irq_init(vbox);
-	if (ret)
-		goto err_mode_fini;
-
-	ret = vbox_fbdev_init(dev);
-	if (ret)
-		goto err_irq_fini;
-
-	return 0;
-
-err_irq_fini:
-	vbox_irq_fini(vbox);
-err_mode_fini:
-	vbox_mode_fini(dev);
-err_drm_mode_cleanup:
-	vbox_mm_fini(vbox);
-err_hw_fini:
-	vbox_hw_fini(vbox);
-	return ret;
-}
-
-void vbox_driver_unload(struct drm_device *dev)
-{
-	struct vbox_private *vbox = dev->dev_private;
-
-	vbox_fbdev_fini(dev);
-	vbox_irq_fini(vbox);
-	vbox_mode_fini(dev);
-	vbox_mm_fini(vbox);
-	vbox_hw_fini(vbox);
-}
-
 /**
  * @note this is described in the DRM framework documentation.  AST does not
  * have it, but we get an oops on driver unload if it is not present.
-- 
2.19.0.rc1

  parent reply	other threads:[~2018-09-18 17:44 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-18 17:44 [PATCH 00/12] staging: vboxvideo: Preparation work for moving to atomic modesetting Hans de Goede
2018-09-18 17:44 ` [PATCH 01/12] staging: vboxvideo: Let DRM core handle connector registering Hans de Goede
2018-09-18 17:44 ` [PATCH 02/12] staging: vboxvideo: Move setup of modesetting from driver_load to mode_init Hans de Goede
2018-09-18 17:44 ` Hans de Goede [this message]
2018-09-18 17:44 ` [PATCH 04/12] staging: vboxvideo: Embed drm_device into driver structure Hans de Goede
2018-09-18 17:44 ` [PATCH 05/12] staging: vboxvideo: Fold vbox_drm_resume() into vbox_pm_resume() Hans de Goede
2018-09-18 17:44 ` [PATCH 06/12] staging: vboxvideo: Add fl_flag argument to vbox_fb_pin() helper Hans de Goede
2018-09-18 17:44 ` [PATCH 07/12] staging: vboxvideo: Expose creation of universal primary plane Hans de Goede
2018-09-18 17:44 ` [PATCH 08/12] staging: vboxvideo: Init fb_info.fix.smem once from fbdev_create Hans de Goede
2018-09-18 17:44 ` [PATCH 09/12] staging: vboxvideo: Move pin / unpin of fb out of vbox_crtc_set_base_and_mode Hans de Goede
2018-09-18 17:44 ` [PATCH 10/12] staging: vboxvideo: Fix NULL ptr deref in vbox_set_up_input_mapping() Hans de Goede
2018-09-18 17:44 ` [PATCH 11/12] staging: vboxvideo: Move bo_[un]resere calls into vbox_bo_[un]pin Hans de Goede
2018-09-18 17:44 ` [PATCH 12/12] staging: vboxvideo: Add vbox_bo_k[un]map helper functions Hans de Goede
2018-09-20 10:32 ` [PATCH 00/12] staging: vboxvideo: Preparation work for moving to atomic modesetting Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180918174438.19780-4-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=michael.thayer@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).