函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\irq\manage.c Create Date:2022-07-27 11:09:57
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:Internal function to unregister an irqaction - used to free* regular and special interrupts that are part of the architecture.

函数原型:static struct irqaction *__free_irq(struct irq_desc *desc, void *dev_id)

返回类型:struct irqaction

参数:

类型参数名称
struct irq_desc *desc
void *dev_id
1674  irq等于中断号
1678  WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq)
1680  mutex_lock( & request_mutex)
1681  总线上锁
1682  raw_spin_lock_irqsave( & 自旋锁, flags)
1688  action_ptr等于中断服务例程链表
1689  循环
1690  action等于action_ptr
1692  如果非action
1693  WARN(1, "Trying to free already-free IRQ %d\n", irq)
1697  返回:NULL
1700  如果设备标识恒等于dev_id退出
1702  action_ptr等于下一个共享中断
1706  action_ptr等于下一个共享中断
1708  irq_pm_remove_action(desc, action)
1711  如果非中断服务例程链表
1712  irq_settings_clr_disable_unlazy(desc)
1714  irq_shutdown(desc)
1723  raw_spin_unlock_irqrestore( & 自旋锁, flags)
1738  慢总线解锁
1740  unregister_handler_proc(irq, action)
1747  __synchronize_hardirq(desc, true)
1771  如果中断线程
1772  结束线程的运行
1773  put_task_struct(中断线程)
1774  如果secondary中断线程
1781  如果非中断服务例程链表
1786  总线上锁
1791  raw_spin_lock_irqsave( & 自旋锁, flags)
1792  irq_domain_deactivate_irq( & irq_data)
1793  raw_spin_unlock_irqrestore( & 自旋锁, flags)
1795  irq_release_resources(desc)
1796  慢总线解锁
1797  irq_remove_timings(desc)
1800  mutex_unlock - release the mutex*@lock: the mutex to be released* Unlock a mutex that has been locked by this task previously.* This function must not be used in interrupt context. Unlocking* of a not locked mutex is not allowed.
1802  q_chip_pm_put - Disable power for an IRQ chip*@data: Pointer to interrupt specific data* Disable the power to the IRQ chip referenced by the interrupt data* structure, belongs. Note that power will only be disabled, once this
1803  module_put(owner)
1804  释放内存
1805  返回:action
调用者
名称描述
remove_irqmove_irq - free an interrupt*@irq: Interrupt line to free*@act: irqaction for the interrupt* Used to remove interrupts statically setup by the early boot process.
free_irq_irq - free an interrupt allocated with request_irq*@irq: Interrupt line to free*@dev_id: Device identity to free* Remove an interrupt handler