goto err_vbg_core_exit;
        }
 
-       ret = devm_request_irq(dev, pci->irq, vbg_core_isr, IRQF_SHARED,
-                              DEVICE_NAME, gdev);
+       ret = request_irq(pci->irq, vbg_core_isr, IRQF_SHARED, DEVICE_NAME,
+                         gdev);
        if (ret) {
                vbg_err("vboxguest: Error requesting irq: %d\n", ret);
                goto err_vbg_core_exit;
        if (ret) {
                vbg_err("vboxguest: Error misc_register %s failed: %d\n",
                        DEVICE_NAME, ret);
-               goto err_vbg_core_exit;
+               goto err_free_irq;
        }
 
        ret = misc_register(&gdev->misc_device_user);
        misc_deregister(&gdev->misc_device_user);
 err_unregister_misc_device:
        misc_deregister(&gdev->misc_device);
+err_free_irq:
+       free_irq(pci->irq, gdev);
 err_vbg_core_exit:
        vbg_core_exit(gdev);
 err_disable_pcidev:
        vbg_gdev = NULL;
        mutex_unlock(&vbg_gdev_mutex);
 
+       free_irq(pci->irq, gdev);
        device_remove_file(gdev->dev, &dev_attr_host_features);
        device_remove_file(gdev->dev, &dev_attr_host_version);
        misc_deregister(&gdev->misc_device_user);