Commit db20ea67 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/vbox: Convert to Linux IRQ interfaces

Drop the DRM IRQ midlayer in favor of Linux IRQ interfaces. DRM's
IRQ helpers are mostly useful for UMS drivers. Modern KMS drivers
don't benefit from using it.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210706075011.9009-1-tzimmermann@suse.de
parent 48bd8580
...@@ -184,7 +184,6 @@ static const struct drm_driver driver = { ...@@ -184,7 +184,6 @@ static const struct drm_driver driver = {
.lastclose = drm_fb_helper_lastclose, .lastclose = drm_fb_helper_lastclose,
.fops = &vbox_fops, .fops = &vbox_fops,
.irq_handler = vbox_irq_handler,
.name = DRIVER_NAME, .name = DRIVER_NAME,
.desc = DRIVER_DESC, .desc = DRIVER_DESC,
.date = DRIVER_DATE, .date = DRIVER_DATE,
......
...@@ -145,7 +145,6 @@ void vbox_mm_fini(struct vbox_private *vbox); ...@@ -145,7 +145,6 @@ void vbox_mm_fini(struct vbox_private *vbox);
int vbox_irq_init(struct vbox_private *vbox); int vbox_irq_init(struct vbox_private *vbox);
void vbox_irq_fini(struct vbox_private *vbox); void vbox_irq_fini(struct vbox_private *vbox);
void vbox_report_hotplug(struct vbox_private *vbox); void vbox_report_hotplug(struct vbox_private *vbox);
irqreturn_t vbox_irq_handler(int irq, void *arg);
/* vbox_hgsmi.c */ /* vbox_hgsmi.c */
void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size, void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size,
......
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
*/ */
#include <linux/pci.h> #include <linux/pci.h>
#include <drm/drm_irq.h>
#include <drm/drm_drv.h>
#include <drm/drm_probe_helper.h> #include <drm/drm_probe_helper.h>
#include "vbox_drv.h" #include "vbox_drv.h"
...@@ -31,7 +32,7 @@ void vbox_report_hotplug(struct vbox_private *vbox) ...@@ -31,7 +32,7 @@ void vbox_report_hotplug(struct vbox_private *vbox)
schedule_work(&vbox->hotplug_work); schedule_work(&vbox->hotplug_work);
} }
irqreturn_t vbox_irq_handler(int irq, void *arg) static irqreturn_t vbox_irq_handler(int irq, void *arg)
{ {
struct drm_device *dev = (struct drm_device *)arg; struct drm_device *dev = (struct drm_device *)arg;
struct vbox_private *vbox = to_vbox_dev(dev); struct vbox_private *vbox = to_vbox_dev(dev);
...@@ -170,16 +171,21 @@ static void vbox_hotplug_worker(struct work_struct *work) ...@@ -170,16 +171,21 @@ static void vbox_hotplug_worker(struct work_struct *work)
int vbox_irq_init(struct vbox_private *vbox) int vbox_irq_init(struct vbox_private *vbox)
{ {
struct pci_dev *pdev = to_pci_dev(vbox->ddev.dev); struct drm_device *dev = &vbox->ddev;
struct pci_dev *pdev = to_pci_dev(dev->dev);
INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker); INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker);
vbox_update_mode_hints(vbox); vbox_update_mode_hints(vbox);
return drm_irq_install(&vbox->ddev, pdev->irq); /* PCI devices require shared interrupts. */
return request_irq(pdev->irq, vbox_irq_handler, IRQF_SHARED, dev->driver->name, dev);
} }
void vbox_irq_fini(struct vbox_private *vbox) void vbox_irq_fini(struct vbox_private *vbox)
{ {
drm_irq_uninstall(&vbox->ddev); struct drm_device *dev = &vbox->ddev;
struct pci_dev *pdev = to_pci_dev(dev->dev);
free_irq(pdev->irq, dev);
flush_work(&vbox->hotplug_work); flush_work(&vbox->hotplug_work);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment