.. include:: ../../disclaimer-zh_CN.rst :Original: Documentation/core-api/irq/irqflags-tracing.rst :翻译: å¸å»¶è…¾ Yanteng Si <siyanteng@loongson.cn> .. _cn_irqflags-tracing.rst: ================= IRQ-flags状æ€è¿½è¸ª ================= :Author: 最åˆç”±Ingo Molnar <mingo@redhat.com>开始撰写 “irq-flags tracingâ€ï¼ˆä¸æ–æ ‡å¿—è¿½è¸ªï¼‰åŠŸèƒ½å¯ä»¥ “追踪†hardirqå’Œsoftirq的状æ€ï¼Œå®ƒè®© 感兴趣的åç³»ç»Ÿæœ‰æœºä¼šäº†è§£åˆ°åˆ°å†…æ ¸ä¸å‘生的æ¯ä¸€ä¸ª hardirqs-off/hardirqs-onã€softirqs-off/softirqs-on事件。 CONFIG_TRACE_IRQFLAGS_SUPPORT是通用é”调试代ç æ供的CONFIG_PROVE_SPIN_LOCKING å’ŒCONFIG_PROVE_RW_LOCKING所需è¦çš„。å¦åˆ™å°†åªæœ‰CONFIG_PROVE_MUTEX_LOCKINGå’Œ CONFIG_PROVE_RWSEM_LOCKING在一个架构上被æä¾›--这些都是ä¸åœ¨IRQ上下文ä¸ä½¿ç”¨çš„ é”API。(rwsems的一个异常是å¯ä»¥è§£å†³çš„) 架构对这一点的支æŒå½“然ä¸å±žäºŽâ€œå¾®ä¸è¶³é“â€çš„èŒƒç•´ï¼Œå› ä¸ºå¾ˆå¤šä½Žçº§çš„æ±‡ç¼–ä»£ç 都è¦å¤„ç†irq-flags 的状æ€å˜åŒ–。但是一个架构å¯ä»¥ä»¥ä¸€ç§ç›¸å½“ç›´æŽ¥ä¸”æ— é£Žé™©çš„æ–¹å¼å¯ç”¨irq-flags-tracing。 架构如果想支æŒè¿™ä¸ªï¼Œéœ€è¦å…ˆåšä¸€äº›ä»£ç 组织上的改å˜: - 在他们的arch级Kconfig文件ä¸æ·»åŠ 并å¯ç”¨TRACE_IRQFLAGS_SUPPORT。 然åŽè¿˜éœ€è¦åšä¸€äº›åŠŸèƒ½ä¸Šçš„改å˜æ¥å®žçŽ°å¯¹irq-flags-tracing的支æŒ: - 在低级入å£ä»£ç ä¸å¢žåŠ (构建æ¡ä»¶ï¼‰å¯¹trace_hardirqs_off()/trace_hardirqs_on() 函数的调用。é”验è¯å™¨ä¼šå¯†åˆ‡å…³æ³¨ “realâ€çš„irq-flags是å¦ä¸Ž “virtualâ€çš„irq-flags 状æ€ç›¸åŒ¹é…,如果两者ä¸åŒ¹é…,则会å‘出è¦å‘Šï¼ˆå¹¶å…³é—自己)。通常维护archä¸ irq-flags-track的大部分时间都是在这ç§çŠ¶æ€ä¸‹åº¦è¿‡çš„:看看lockdepçš„è¦å‘Šï¼Œè¯•ç€ 找出我们还没有æžå®šçš„汇编代ç 。修å¤å¹¶é‡å¤ã€‚一旦系统å¯åŠ¨ï¼Œå¹¶ä¸”在irq-flags跟踪功 能ä¸æ²¡æœ‰å‡ºçŽ°lockdepè¦å‘Šçš„情况下,arch支æŒå°±å®Œæˆäº†ã€‚ - 如果该架构有ä¸å¯å±è”½çš„ä¸æ–,那么需è¦é€šè¿‡lockdep_off()/lockdep_on()å°†è¿™äº›ä¸ æ–从irq跟踪[å’Œé”验è¯]机制ä¸æŽ’除。 一般æ¥è¯´ï¼Œåœ¨ä¸€ä¸ªæž¶æž„ä¸ï¼Œä¸å®Œæ•´çš„irq-flags-tracing实现是没有风险的:lockdep 会检测到这一点,并将自己关é—。å³é”验è¯å™¨ä»ç„¶å¯é 。应该ä¸ä¼šå› 为irq-tracingçš„é”™ 误而崩溃。(除éžé€šè¿‡ä¿®æ”¹ä¸è¯¥ä¿®æ”¹çš„æ¡ä»¶æ¥æ›´æ”¹æ±‡ç¼–或寄å˜å™¨è€Œç ´å其他代ç )