⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soft_irqs.html

📁 ADI 公司blackfin系列的用户使用文挡。
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head>  <title></title>  <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />  <link rel="stylesheet" media="screen" type="text/css" href="./design.css" />  <link rel="stylesheet" media="print" type="text/css" href="./print.css" />  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><a href=start.html>start</a></br><h2><a name="soft_irqs" id="soft_irqs">Soft Irqs</a></h2><div class="level2"><p> First a review of some system services. These are deferred processing entities that can take over compute intensive or process intensive tasks from fast running interrupt routines.</p><ul><li class="level1"><div class="li"> Bottom halves. These are serialized globally so that only one can execute on ANY cpu at one time.</div></li></ul><ul><li class="level1"><div class="li"> Tasklets. These are serialized per CPU so that a given tasklet will run to completion before being executed again.</div></li></ul><ul><li class="level1"><div class="li"> Soft Irqs. Unlike bottom halfs and tasklets, soft irqs can be serviced at any time by any available CPU.</div></li></ul><p>They are mainly used in network drivers where each packet must be serviced as fast as possible by any CPU available</p><p> The soft irq routine must be written so thet it permits this sort of operation. It must be reentrant.</p><p>The core kernel code is in <strong>linux-2.6.x/kernel/softirq.c</strong>.</p><p> The main kernel timer is another example of a well used soft Irq linux-2.6.x/kernel/timer.c </p><pre class="code c">&nbsp;&nbsp;<span class="kw4">void</span> run_local_timers<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><span class="br0">&#123;</span>        raise_softirq<span class="br0">&#40;</span>TIMER_SOFTIRQ<span class="br0">&#41;</span>;<span class="br0">&#125;</span>&nbsp;<span class="kw4">void</span> __init init_timers<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><span class="br0">&#123;</span>        timer_cpu_notify<span class="br0">&#40;</span>&amp;timers_nb, <span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">long</span><span class="br0">&#41;</span>CPU_UP_PREPARE,                                <span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="kw4">long</span><span class="br0">&#41;</span>smp_processor_id<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;        register_cpu_notifier<span class="br0">&#40;</span>&amp;timers_nb<span class="br0">&#41;</span>;        open_softirq<span class="br0">&#40;</span>TIMER_SOFTIRQ, run_timer_softirq, <span class="kw2">NULL</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>&nbsp;</pre><p>The system softirqs are defined in the file <strong>linux-2.6.x/include/linux/interrupt.h</strong></p><p> enum {</p><pre class="code">      HI_SOFTIRQ=0,      TIMER_SOFTIRQ,      NET_TX_SOFTIRQ,      NET_RX_SOFTIRQ,      SCSI_SOFTIRQ,      TASKLET_SOFTIRQ</pre><p>};</p></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -