Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210706075011.9009-1-tzimmermann@suse.de

+11 -7
-1
drivers/gpu/drm/vboxvideo/vbox_drv.c
··· 184 184 .lastclose = drm_fb_helper_lastclose, 185 185 186 186 .fops = &vbox_fops, 187 - .irq_handler = vbox_irq_handler, 188 187 .name = DRIVER_NAME, 189 188 .desc = DRIVER_DESC, 190 189 .date = DRIVER_DATE,
-1
drivers/gpu/drm/vboxvideo/vbox_drv.h
··· 145 145 int vbox_irq_init(struct vbox_private *vbox); 146 146 void vbox_irq_fini(struct vbox_private *vbox); 147 147 void vbox_report_hotplug(struct vbox_private *vbox); 148 - irqreturn_t vbox_irq_handler(int irq, void *arg); 149 148 150 149 /* vbox_hgsmi.c */ 151 150 void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size,
+11 -5
drivers/gpu/drm/vboxvideo/vbox_irq.c
··· 10 10 */ 11 11 12 12 #include <linux/pci.h> 13 - #include <drm/drm_irq.h> 13 + 14 + #include <drm/drm_drv.h> 14 15 #include <drm/drm_probe_helper.h> 15 16 16 17 #include "vbox_drv.h" ··· 32 31 schedule_work(&vbox->hotplug_work); 33 32 } 34 33 35 - irqreturn_t vbox_irq_handler(int irq, void *arg) 34 + static irqreturn_t vbox_irq_handler(int irq, void *arg) 36 35 { 37 36 struct drm_device *dev = (struct drm_device *)arg; 38 37 struct vbox_private *vbox = to_vbox_dev(dev); ··· 171 170 172 171 int vbox_irq_init(struct vbox_private *vbox) 173 172 { 174 - struct pci_dev *pdev = to_pci_dev(vbox->ddev.dev); 173 + struct drm_device *dev = &vbox->ddev; 174 + struct pci_dev *pdev = to_pci_dev(dev->dev); 175 175 176 176 INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker); 177 177 vbox_update_mode_hints(vbox); 178 178 179 - return drm_irq_install(&vbox->ddev, pdev->irq); 179 + /* PCI devices require shared interrupts. */ 180 + return request_irq(pdev->irq, vbox_irq_handler, IRQF_SHARED, dev->driver->name, dev); 180 181 } 181 182 182 183 void vbox_irq_fini(struct vbox_private *vbox) 183 184 { 184 - drm_irq_uninstall(&vbox->ddev); 185 + struct drm_device *dev = &vbox->ddev; 186 + struct pci_dev *pdev = to_pci_dev(dev->dev); 187 + 188 + free_irq(pdev->irq, dev); 185 189 flush_work(&vbox->hotplug_work); 186 190 }