Free_irq
Действие функции free_irq противоположно действию request_irq. Если request_irq аналогична конструктору действий, то эта функция по своему действию наиболее напоминает деструктор.
Убедившись, что значение irq находится в допустимом диапазоне, функция free_irq находит соответствующую запись в массиве irq_desc и начинает итерации по ее списку действий.
Игнорирует этот элемент очереди, если только он не имеет правильный идентификатор устройства.
Удаляет этот элемент из очереди и освобождает выделенную ему память.
Если теперь очередь действий пуста— т.е., если только что был удален единственный элемент очереди — устройство отключается.
Если поток управления доходит до этой точки, значит функция free_irq прошла весь список действий, не найдя походящего dev_id. Если бы она нашла соответствующий идентификатор устройства, оператор goto в строке привел бы к пропуску этой строки. Следовательно, имела место ошибочная попытка освободить действие IRQ; функция free_irq выводит предупреждение об этом.