Удаление модуля sdhci-msm
приводит к вызову функции-обработчика модуля module_exit
, которая вызывает platform_device_unregister
для отмены регистрации в качестве драйвера устройства платформы. (Большая часть этого скрыта при вызове макроса module_platform_driver(sdhci_msm_driver);
в "drivers / mmc / host / sdhci-msm. c".)
Когда драйвер платформы не зарегистрирован, все устройства, которые были успешно проверены будет удален автоматически. Обработчик «удаления» драйвера sdhci_msm_remove
будет вызываться автоматически для каждого успешно проверенного устройства.
Так что вы можете быть удивлены, почему sdhci_msm_remove
не освобождает прерывание, назначенное вызовом devm_request_threaded_irq
в " зонд "функция sdhci_msm_probe
? Ответ заключается в том, что в этом нет необходимости, поскольку прерывание было выделено как «ресурс управляемого устройства» (см. Ниже).
devm_request_threaded_irq
- это оболочка «управляемый ресурс устройства» («devres») функция request_threaded_irq
. Все ресурсы, управляемые devres, автоматически очищаются при удалении зондируемого устройства. (Очистка ресурсов, управляемых devres, происходит после возврата обработчика «удалить».) Для ресурсов прерываний, управляемых devres, в результате очистки автоматически вызывается функция free_irq
, которая освобождает прерывание.