hda: Remove interrupt hanlder before freeing interrupt vector.
Freeing an interrupt vector that still has handlers is not allowed. Change-Id: If2f256e5288c7a61b7e23bdb202f259f5b67b7ae Reviewed-on: https://review.haiku-os.org/c/haiku/+/3112 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
c7c0cf726e
commit
d9ff5e5637
@@ -1313,6 +1313,9 @@ hda_hw_uninit(hda_controller* controller)
|
|||||||
// Disable interrupts, and remove interrupt handler
|
// Disable interrupts, and remove interrupt handler
|
||||||
controller->Write32(HDAC_INTR_CONTROL, 0);
|
controller->Write32(HDAC_INTR_CONTROL, 0);
|
||||||
|
|
||||||
|
remove_io_interrupt_handler(controller->irq,
|
||||||
|
(interrupt_handler)hda_interrupt_handler, controller);
|
||||||
|
|
||||||
if (controller->msi) {
|
if (controller->msi) {
|
||||||
// Disable MSI
|
// Disable MSI
|
||||||
gPCIx86Module->disable_msi(controller->pci_info.bus,
|
gPCIx86Module->disable_msi(controller->pci_info.bus,
|
||||||
@@ -1321,9 +1324,6 @@ hda_hw_uninit(hda_controller* controller)
|
|||||||
controller->pci_info.device, controller->pci_info.function);
|
controller->pci_info.device, controller->pci_info.function);
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_io_interrupt_handler(controller->irq,
|
|
||||||
(interrupt_handler)hda_interrupt_handler, controller);
|
|
||||||
|
|
||||||
// Delete corb/rirb area
|
// Delete corb/rirb area
|
||||||
if (controller->corb_rirb_pos_area >= 0) {
|
if (controller->corb_rirb_pos_area >= 0) {
|
||||||
delete_area(controller->corb_rirb_pos_area);
|
delete_area(controller->corb_rirb_pos_area);
|
||||||
|
|||||||
Reference in New Issue
Block a user