linux/block/blk-iopoll.c
<<
/opt"v3/spaval "v3/formal "v3a /opt"v href="../linux+v3.7.5/block/blk-iopoll.c">/opt"v3img src="../.static/gfx/right.png" alt=">>">/o3/spaval/o3spav class="lxr_search">/opt/opt"v3input typ> hidden" nam> navtarget" > ">/opt"v3input typ> text" nam> search" id search">/opt"v3butt11"typ> submit">Search/opt"vPrefsl "v3/a>/o3/spavalpt"v v3/divalpt"v v3form acon v="ajax+*" method="post" onsubmit="return false;">/o3input typ> hidden" nam> ajax_lookup" id ajax_lookup" > ">/pt"v v3/formal/pt"v v3div class="headingbott1m">l 3div id file_contents"a
 L1">v v13/a>3spav class="comment">/*3/spaval
 L2">v v23/a>3spav class="comment"> * Funcon vs related to interrupt-poll handling in the block layer. This3/spaval
 L3">v v33/a>3spav class="comment"> * is similar to NAPI for network devices.3/spaval
 L4">v v43/a>3spav class="comment"> */3/spaval
 L5">v v53/a>#include <linux/kernel.h3/a>>l
 L6">v v63/a>#include <linux/module.h3/a>>l
 L7">v v73/a>#include <linux/init.h3/a>>l
 L8">v v83/a>#include <linux/bio.h3/a>>l
 L9">v v93/a>#include <linux/blkdev.h3/a>>l
 L10">v  #include <linux/interrupt.h3/a>>l
 L11">v 11opa>#include <linux/cpu.h3/a>>l
 L12">v 123/a>#include <linux/blk-iopoll.h3/a>>l
 L13">v 133/a>#include <linux/delay.h3/a>>l
 L14">v 143/a>l
 L15">v 153/a>#include "blk.h3/a>"l
 L16">v 163/a>l
 L17">v 173/a>intv3a href="+code=blk_iopoll_enabled" class="sref">blk_iopoll_enabled3/a> = 1;l
 L18">v 183/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=blk_iopoll_enabled" class="sref">blk_iopoll_enabled3/a>);l
 L19">v 193/a>l
 L20">v 2static unsigned intv3a href="+code=blk_iopoll_budget" class="sref">blk_iopoll_budget3/a> 3a href="+code=__read_mostly" class="sref">__read_mostly3/a> = 256;l
 L21">v 213/a>l
 L22">v 22opa>static 3a href="+code=DEFINE_PER_CPU" class="sref">DEFINE_PER_CPU3/a>(structv3a href="+code=list_head" class="sref">list_head3/a>,v3a href="+code=blk_cpu_iopoll" class="sref">blk_cpu_iopoll3/a>);l
 L23">v 233/a>l
 L24">v 243/a>3spav class="comment">/**3/spaval
 L25">v 253/a>3spav class="comment"> * blk_iopoll_sched - Schedule a run of the iopoll handler3/spaval
 L26">v 263/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spaval
 L27">v 273/a>3spav class="comment"> *3/spaval
 L28">v 283/a>3spav class="comment"> * Descriion v:3/spaval
 L29">v 293/a>3spav class="comment"> *     Add this blk_iopoll structure to the pending poll list and trigger the3/spaval
 L30">v 303/a>3spav class="comment"> *     raise of the blk iopoll softirq.vThe driver must already have gotten a3/spaval
 L31">v 313/a>3spav class="comment"> *     successful return from blk_iopoll_sched_prep() before calling this.3/spaval
 L32">v 323/a>3spav class="comment"> **/3/spaval
 L33">v 333/a>voidv3a href="+code=blk_iopoll_sched" class="sref">blk_iopoll_sched3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sref">iop3/a>)l
 L34">v 343/a>{l
 L35">v 353/a>        unsigned long 3a href="+code=flags" class="sref">flags3/a>;l
 L36">v 363/a>l
 L37">v 373/a>        3a href="+code=local_irq_save" class="sref">local_irq_save3/a>(3a href="+code=flags" class="sref">flags3/a>);l
 L38">v 383/a>        3a href="+code=list_add_tail" class="sref">list_add_tail3/a>(&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=list" class="sref">list3/a>,v&3a href="+code=__get_cpu_var" class="sref">__get_cpu_var3/a>(3a href="+code=blk_cpu_iopoll" class="sref">blk_cpu_iopoll3/a>));l
 L39">v 393/a>        3a href="+code=__raise_softirq_irqoff" class="sref">__raise_softirq_irqoff3/a>(3a href="+code=BLOCK_IOPOLL_SOFTIRQ" class="sref">BLOCK_IOPOLL_SOFTIRQ3/a>);l
 L40">v 403/a>        3a href="+code=local_irq_restore" class="sref">local_irq_restore3/a>(3a href="+code=flags" class="sref">flags3/a>);l
 L41">v 413/a>}l
 L42">v 423/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=blk_iopoll_sched" class="sref">blk_iopoll_sched3/a>);l
 L43">v 433/a>l
 L44">v 443/a>3spav class="comment">/**3/spaval
 L45">v 453/a>3spav class="comment"> * __blk_iopoll_complete - Mark this @iop as un-polled again3/spaval
 L46">v 463/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spaval
 L47">v 473/a>3spav class="comment"> *3/spaval
 L48">v 483/a>3spav class="comment"> * Descriion v:3/spaval
 L49">v 493/a>3spav class="comment"> *     See blk_iopoll_complete(). This funcon v must be called with interrupts3/spaval
 L50">v 503/a>3spav class="comment"> *     disabled.3/spaval
 L51">v 513/a>3spav class="comment"> **/3/spaval
 L52">v 523/a>voidv3a href="+code=__blk_iopoll_complete" class="sref">__blk_iopoll_complete3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sref">iop3/a>)l
 L53">v 533/a>{l
 L54">v 543/a>        3a href="+code=list_del" class="sref">list_del3/a>(&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=list" class="sref">list3/a>);l
 L55">v 553/a>        3a href="+code=smp_mb__before_clear_bit" class="sref">smp_mb__before_clear_bit3/a>();l
 L56">v 563/a>        3a href="+code=clear_bit_unlock" class="sref">clear_bit_unlock3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>);l
 L57">v 573/a>}l
 L58">v 583/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=__blk_iopoll_complete" class="sref">__blk_iopoll_complete3/a>);l
 L59">v 593/a>l
 L60">v 603/a>3spav class="comment">/**3/spaval
 L61">v 613/a>3spav class="comment"> * blk_iopoll_complete - Mark this @iop as un-polled again3/spaval
 L62">v 623/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spaval
 L63">v 633/a>3spav class="comment"> *3/spaval
 L64">v 643/a>3spav class="comment"> * Descriion v:3/spaval
 L65">v 653/a>3spav class="comment"> *     If a driver consumes less than the assigned budget in its run of the3/spaval
 L66">v 663/a>3spav class="comment"> *     iopoll handler, it'll end the polled mode by calling this funcon v.vThe3/spaval
 L67">v 673/a>3spav class="comment"> *     iopoll handler will not be invoked again before blk_iopoll_sched_prep()3/spaval
 L68">v 683/a>3spav class="comment"> *     is called.3/spaval
 L69">v 693/a>3spav class="comment"> **/3/spaval
 L70">v 703/a>voidv3a href="+code=blk_iopoll_complete" class="sref">blk_iopoll_complete3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iopoll" class="sref">iopoll3/a>)l
 L71">v 713/a>{l
 L72">v 723/a>        unsigned long 3a href="+code=flags" class="sref">flags3/a>;l
 L73">v 733/a>l
 L74">v 743/a>        3a href="+code=local_irq_save" class="sref">local_irq_save3/a>(3a href="+code=flags" class="sref">flags3/a>);l
 L75">v 753/a>        3a href="+code=__blk_iopoll_complete" class="sref">__blk_iopoll_complete3/a>(3a href="+code=iopoll" class="sref">iopoll3/a>);l
 L76">v 763/a>        3a href="+code=local_irq_restore" class="sref">local_irq_restore3/a>(3a href="+code=flags" class="sref">flags3/a>);l
 L77">v 773/a>}l
 L78">v 783/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=blk_iopoll_complete" class="sref">blk_iopoll_complete3/a>);l
 L79">v 793/a>l
 L80">v 8static voidv3a href="+code=blk_iopoll_softirq" class="sref">blk_iopoll_softirq3/a>(structv3a href="+code=softirq_acon v" class="sref">softirq_acon v3/a> *3a href="+code=h" class="sref">h3/a>)l
 L81">v 813/a>{l
 L82">v 823/a>        structv3a href="+code=list_head" class="sref">list_head3/a> *3a href="+code=list" class="sref">list3/a> =v&3a href="+code=__get_cpu_var" class="sref">__get_cpu_var3/a>(3a href="+code=blk_cpu_iopoll" class="sref">blk_cpu_iopoll3/a>);l
 L83">v 833/a>        intv3a href="+code=rearm" class="sref">rearm3/a> =v0,v3a href="+code=budget" class="sref">budget3/a> =v3a href="+code=blk_iopoll_budget" class="sref">blk_iopoll_budget3/a>;l
 L84">v 843/a>        unsigned long 3a href="+code=start_time" class="sref">start_time3/a> =v3a href="+code=jiffies" class="sref">jiffies3/a>;l
 L85">v 853/a>l
 L86">v 863/a>        3a href="+code=local_irq_disable" class="sref">local_irq_disable3/a>();l
 L87">v 873/a>l
 L88">v 883/a>        while (!3a href="+code=list_empty" class="sref">list_empty3/a>(3a href="+code=list" class="sref">list3/a>)) {l
 L89">v 893/a>                structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sref">iop3/a>;l
 L90">v 903/a>                intv3a href="+code=work" class="sref">work3/a>,v3a href="+code=weight" class="sref">weight3/a>;l
 L91">v 913/a>l
 L92">v 923/a>                3spav class="comment">/*3/spaval
 L93">v 933/a>3spav class="comment">                 * If softirq window is exhausted then punt.3/spaval
 L94">v 943/a>3spav class="comment">                 */3/spaval
 L95">v 953/a>                if (3a href="+code=budget" class="sref">budget3/a> <=v0 ||v3a href="+code=time_after" class="sref">time_after3/a>(3a href="+code=jiffies" class="sref">jiffies3/a>,v3a href="+code=start_time" class="sref">start_time3/a>)) {l
 L96">v 963/a>                        3a href="+code=rearm" class="sref">rearm3/a> =v1;l
 L97">v 973/a>                        break;l
 L98">v 983/a>                }l
 L99">v 993/a>l
 L100">v1003/a>                3a href="+code=local_irq_enable" class="sref">local_irq_enable3/a>();l
 L101">v1013/a>l
 L102">v1023/a>                3spav class="comment">/* Even though interrupts have been re-enabled, this3/spaval
 L103">v1033/a>3spav class="comment">                 * access is safe because interrupts cav only add new3/spaval
 L104">v1043/a>3spav class="comment">                 * entries to the tail of this list, and only ->poll()3/spaval
 L105">v1053/a>3spav class="comment">                 * calls cav remove this head entry from the list.3/spaval
 L106">v1063/a>3spav class="comment">                 */3/spaval
 L107">v1073/a>                3a href="+code=iop" class="sref">iop3/a> =v3a href="+code=list_entry" class="sref">list_entry3/a>(3a href="+code=list" class="sref">list3/a>->3a href="+code=next" class="sref">next3/a>,vstructv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a>,v3a href="+code=list" class="sref">list3/a>);l
 L108">v1083/a>l
 L109">v1093/a>                3a href="+code=weight" class="sref">weight3/a> =v3a href="+code=iop" class="sref">iop3/a>->3a href="+code=weight" class="sref">weight3/a>;l
 L110">v1103/a>                3a href="+code=work" class="sref">work3/a> =v0;l
 L111">v111opa>                if (3a href="+code=test_bit" class="sref">test_bit3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>))l
 L112">v1123/a>                        3a href="+code=work" class="sref">work3/a> =v3a href="+code=iop" class="sref">iop3/a>->3a href="+code=poll" class="sref">poll3/a>(3a href="+code=iop" class="sref">iop3/a>,v3a href="+code=weight" class="sref">weight3/a>);l
 L113">v1133/a>l
 L114">v1143/a>                3a href="+code=budget" class="sref">budget3/a> -=v3a href="+code=work" class="sref">work3/a>;l
 L115">v1153/a>l
 L116">v1163/a>                3a href="+code=local_irq_disable" class="sref">local_irq_disable3/a>();l
 L117">v1173/a>l
 L118">v1183/a>                3spav class="comment">/*3/spaval
 L119">v1193/a>3spav class="comment">                 * Drivers must not modify the iopoll state, if they3/spaval
 L120">v1203/a>3spav class="comment">                 * consume their assigned weight (or more, some drivers cav't3/spaval
 L121">v1213/a>3spav class="comment">                 * easily just stop processing, they have to complete an3/spaval
 L122">v1223/a>3spav class="comment">                 * entire mask of commands).In such cases this code3/spaval
 L123">v1233/a>3spav class="comment">                 * still "owns" the iopoll instance and therefore can3/spaval
 L124">v1243/a>3spav class="comment">                 * move the instance around on the list at-will.3/spaval
 L125">v1253/a>3spav class="comment">                 */3/spaval
 L126">v1263/a>                if (3a href="+code=work" class="sref">work3/a> >=v3a href="+code=weight" class="sref">weight3/a>) {l
 L127">v1273/a>                        if (3a href="+code=blk_iopoll_disable_pending" class="sref">blk_iopoll_disable_pending3/a>(3a href="+code=iop" class="sref">iop3/a>))l
 L128">v1283/a>                                3a href="+code=__blk_iopoll_complete" class="sref">__blk_iopoll_complete3/a>(3a href="+code=iop" class="sref">iop3/a>);l
 L129">v1293/a>                        elsel
 L130">v1303/a>                                3a href="+code=list_move_tail" class="sref">list_move_tail3/a>(&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=list" class="sref">list3/a>,v3a href="+code=list" class="sref">list3/a>);l
 L131">v131opa>                }l
 L132">v1323/a>        }l
 L133">v1333/a>l
 L134">v1343/a>        if (3a href="+code=rearm" class="sref">rearm3/a>)l
 L135">v1353/a>                3a href="+code=__raise_softirq_irqoff" class="sref">__raise_softirq_irqoff3/a>(3a href="+code=BLOCK_IOPOLL_SOFTIRQ" class="sref">BLOCK_IOPOLL_SOFTIRQ3/a>);l
 L136">v1363/a>l
 L137">v1373/a>        3a href="+code=local_irq_enable" class="sref">local_irq_enable3/a>();l
 L138">v1383/a>}l
 L139">v1393/a>l
 L140">v1403/a>3spav class="comment">/**3/spaval
 L141">v1413/a>3spav class="comment"> * blk_iopoll_disable - Disable iopoll on this @iop3/spaval
 L142">v1423/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spaval
 L143">v1433/a>3spav class="comment"> *3/spaval
 L144">v1443/a>3spav class="comment"> * Descriion v:3/spaval
 L145">v1453/a>3spav class="comment"> *     Disable io polling and wait for any pending callbacks to have completed.3/spaval
 L146">v1463/a>3spav class="comment"> **/3/spaval
 L147">v1473/a>voidv3a href="+code=blk_iopoll_disable" class="sref">blk_iopoll_disable3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sref">iop3/a>)l
 L148">v1483/a>{l
 L149">v1493/a>        3a href="+code=set_bit" class="sref">set_bit3/a>(3a href="+code=IOPOLL_F_DISABLE" class="sref">IOPOLL_F_DISABLE3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>);l
 L150">v1503/a>        while (3a href="+code=test_and_set_bit" class="sref">test_and_set_bit3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>))l
 L151">v151opa>                3a href="+code=msleep" class="sref">msleep3/a>(1);l
 L152">v1523/a>        3a href="+code=clear_bit" class="sref">clear_bit3/a>(3a href="+code=IOPOLL_F_DISABLE" class="sref">IOPOLL_F_DISABLE3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>);l
 L153">v1533/a>}l
 L154">v1543/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=blk_iopoll_disable" class="sref">blk_iopoll_disable3/a>);l
 L155">v1553/a>l
 L156">v1563/a>3spav class="comment">/**3/spaval
 L157">v1573/a>3spav class="comment"> * blk_iopoll_enable - Enable iopoll on this @iop3/spaval
 L158">v1583/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spaval
 L159">v1593/a>3spav class="comment"> *3/spaval
 L160">v1603/a>3spav class="comment"> * Descriion v:3/spaval
 L161">v1613/a>3spav class="comment"> *     Enable iopoll on this @iop. Note that the handler run will not be3/spaval
 L162">v1623/a>3spav class="comment"> *     scheduled, it will only mark it as aconve.3/spaval
 L163">v1633/a>3spav class="comment"> **/3/spaval
 L164">v1643/a>voidv3a href="+code=blk_iopoll_enable" class="sref">blk_iopoll_enable3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sref">iop3/a>)l
 L165">v1653/a>{l
 L166">v1663/a>        3a href="+code=BUG_ON" class="sref">BUG_ON3/a>(!3a href="+code=test_bit" class="sref">test_bit3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>));l
 L167">v1673/a>        3a href="+code=smp_mb__before_clear_bit" class="sref">smp_mb__before_clear_bit3/a>();l
 L168">v1683/a>        3a href="+code=clear_bit_unlock" class="sref">clear_bit_unlock3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>);l
 L169">v1693/a>}l
 L170">v1703/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=blk_iopoll_enable" class="sref">blk_iopoll_enable3/a>poll_enable" class="sref">blk_iopdr0poll_enable" class21e" nam>
 L1r:lv1623/a>3spav class="comment"> v clasf="+code=iop" clTm+code=bl/blk-iopoll.c#L161ref">__read_mostk_iopdr0poll_ena5:opoll_complete"nmf">iop3OLL_F_SCHED3/a>,v blk#L20" id
 L20" c1class="sref">stnable" claoll_disable" class="sref">blk_iot3opoll.c#L46" id
 L22<2e9oll.c1#L74" id
 L74" class="li1ne" n17
 L144">v1443/a>3spav class="comment"> * @iop:pt"v vThe parent iopoll structure3/spavalv1453/a>3spav class="c@ass="s: * @iopdefaultir assigned re maskcks to h Thiass="s ->poll()3/spaval
 L46">v 463/a>3spav class="coef">sfn:* @iope that tvs rel no->poll()3/spaval
 L47">v 473/a>3spav class="comment"> *3/spaval
 L48">v 483/a>3spav class="comment"> * Descriion v:3/spaval
 L49">v 493/a>3spav class="comme claoll_disable"ss="sref">rent iopol. Bked agaeble iark i itusen re-o->poll()3/spaval
 L50">v 503/a>3spav class="commentirq.vThe dny pcomment"> * blk_io()t as aconve.3/spaval
 L51">v 513/a>3spav class="comment"> **/3/spaval
 L52">v 523/a>voidv3a hss="sref">stnabpoll_enable" class="sref">tnabpoll_enable3/a>(structv3a href="+code=blk_iopoll" class="sref">blk_iopoll3/a> *3a href="+code=iop" class="sr,            intv3a href="+code=weight" class="sref"st_head3/a>,v3a href="sref">fftirq_acon v" clref="sref">ff>blk_iopoll3/a> *3a href">fftirq_acon v" clref">ff>blkef">iop3/a>)l
 L53">v 533/a>{l
 L84">v 843           3a hrems"+code=budget" clrems"+ll_complete3/a>(3a href="+code=iop" class="sr,rears_diof(iopoll3/a> *3a href="+code=iop" class="sre_enable3/a>poll_enable" class="sr-iopoll.c1#L85" id
 L85" class="li1ne" n18>
 L75">v 753/a>        3a hINIT_LIST_HEAPOLL_F_SCHED" claNIT_LIST_HEAPt_move_tail3/a>(&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=list" class="sre_enable3/a>poll_enable" class="sr-iopoll.c1#L86" id
 L86" class="li1ne" n1m>
 L86">v 863/a>        3a href="+code=iop" class="sref">iop3/a>->3a href="+code=weight" class="sref">weight3/a> =v3a href="+code=weight" class="sref">weight3/a>;lv1673/a>        3a href="+code=iop" class="sref">iop3/a>->3a href="+code=poll" class="sre>weight3/a> =v3a href">fftirq_acon v" clref">ff>blk>weight3/a>;lv1683/a>        3a href="+code=set_bit" class="sref">set_bit3/a>(3a href="+code=IOPOLL_F_SCHED" class="sref">IOPOLL_F_SCHED3/a>,v&3a href="+code=iop" class="sref">iop3/a>->3a href="+code=state" class="sref">state3/a>);lv1693/a>}lv1703/a>3a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL3/a>(3a href="+code=tnabpoll_enable" class="sref">tnabpollenabled3/a>);l
 L91">v 913/a>l
 L22">v 22           intv3a h_="srtnabpoll_enable" cl_="srtnab L168SYMBOL3/a>(3a href="+code="srenotife=list_entry" clref="+code="srenotifepoll_enable3/a>(structv3a hnotifier_blear_bit_unlock" clnotifier_blear>blk_iopoll3/a> *3a hselftirq_irqoff" clselfOLL_F1">v 913/a>l
 L83">v 8333333333333333333333333333333333333/a>        unsigned long 3a hde=softirq_acon v" clf">softirq,sacon v3/a> *3a hr"srtirq_acon v" clr"sr>blkef">iop3/a>)l
 L34">v 343/a>{l
 L95">v 953           3spav class="comment">/*3/spavalv1063/a>3spav class="comment*ent"> CPU goes awayarspliced bud         * entrcurt"v vDEFINmment">/*3/spaval
 L47">v 473/a>3spav class="comment*e poll list a- Schedule a blk_iopolmment">/*3/spaval
 L48">v 483/a>3spav class="comment*omment"> **/3/spavalv1493/a>        if (3a hde=softirq_acon v" clf">softirq =weight3/a> =v3a hDEF_DEAPOLL_F_SCHED" clDEF_DEAPtirq a> <=v0 ||v3a hde=softirq_acon v" clf">softirq =weight3/a> =v3a hDEF_DEAP_FROZE+code=BUG_ON" clDEF_DEAP_FROZE+>blkeweight3/a>) {l
 L100">v1003/a>                intv3a h"srtirq_acon v" cl"sr>blk>we(/a>        un)        intv3a hr"srtirq_acon v" clr"sr>blkiopoll3/a>);l
 L101">v1013/a>l
 L102">v1023/a>      p3/a>->3a href="+code=local_irq_disable" class="sref">local_irq_disable3/a>();l
 L83">v 83333333333op3/a>->3a href=_splice=tnabpoll_enable" clref=_splice=tnabt_move_tail3/a>(&3a hper_"srtirq_acon v" clper_"srPORT_SYMBOL3/a>(3a href="+code=blk_cpu_iopoll" class="sref">blk_cpust_head3/a>,v3a h"srtirq_acon v" cl"sr>blk)F1">v 913/a>lv1143/a>                      list3/a> =v&3a href="+code=__get_cpu_var" class="sref">__get_cpu_var3/a>(3a href="+code=blk_cpu_iopoll" class="sref">blk_cpu_isable3/a>();lv1353/a>                3a href="+code=__raise_softirq_irqoff" class="sref">__raise_softirq_irqoff3/a>(3a href="+code=BLOCK_IOPOLL_SOFTIRQ" class="sref">BLOCK_IOPOLL_SOFTIRQ3/a>);lv1163/a>                3a href="+code=local_irq_enable" class="sref">local_irq_enable3/a>();l
 L107">v10739">v1693/a>}l
 L108">v1083/a>l
 L109">v1093success           3a hNOTIFY_OK_irq_enable" clNOTIFY_OK>blkiopoll3/a>);l
 L119">v1693/a>}lv1013/a>l
 L22">v 22enable3/a>(structv3a hnotifier_blear_bit_unlock" clnotifier_blear>blk_       intv3a h_="srtnabdatapoll_enable" cl_="srtnabdata L168SYMBOL3/a>(3a href="+code="srenotifide=time_after" clref="+code="srenotifide>blk>weeight3/a>) {l
 L83">v 833./a>(structv3a hnotifier_ny p_bit_unlock" clnotifier_ny p
 L83"budget3/a> =v3a href="+code="srenotife=list_entry" clref="+code="srenotifepollF1">v 913/a>l
 L11}iopoll3/a>);l
 L115">v1153/a>l
 L112">v 22opa>static 3a h_=tnabpoll_enable" cl_=tnabt_moic unsigned intv3a href="+code=succf="+code=iop" clref="+code=succf_irq_opa>ef">iop3/a>)l
 L11eight3/a>) {l
 L118">v1183c unsigned intv3a hi="+code=iop" cla>blkiopoll3/a>);l
 L19">v 193/a>l
 L40">v 403/a>        3a hfor_each_possiiopo"srtirq_acon v" clfor_each_possiiopo"srll_complete3/a>(3a hr="+code=iop" cla>blkef">iop3/a>)lv151opa>                3a hINIT_LIST_HEAPOLL_F_SCHED" claNIT_LIST_HEAPt_move_tail3/a>(&3a hper_"srtirq_acon v" clper_"srPORT_SYMBOL3/a>(3a href="+code=blk_cpu_iopoll" class="sref">blk_cpust_head3/a>,v3a hr="+code=iop" cla>blkeenable3/a>();l
 L12able3/a>();lv 403/a>        3a hopen=blk_iopoll_softirq" clopen=blk_ioptirq_irqoff3/a>(3a href="+code=BLOCK_IOPOLL_SOFTIRQ" class="sref">BLOCK_IOPOLL_st_head3/a>,v3a href="sref">blk_iopoll_softirq" class="sref">blk_iopoll_enable3/a>();l
 L84">v 843           3a hregef=er_hot"srenotifide=time_after" clregef=er_hot"srenotifidet_move_tail3/a>(&3a href="+code="srenotifide=time_after" clref="+code="srenotifide>blkenable3/a>();lv1353successwork3/a> =v0;l
 L129">v1693/a>}l
 L12opoll3/a> *3a hsubsys=tnabny p_bit_unlock" clsubsys=tnabny pPORT_SYMBOL3/a>(3a href="+code=succf="+code=iop" clref="+code=succf_irqenable3/a>();l
 L12


@ioporiginal LXR blk_war polle a ble3/a>()http://sourcked ge.net/projects/lxe=>LXR pav unabepollFsable"experi claal e, s Thiay ble3/a>()mailto:lxe@28"ux.noclaxe@28"ux.nopoll.
axe.28"ux.no kindly hoow isay ble3/a>()http://www.redpill-28"pro.noclRedpill L8"pro ASpollFsprovideredulL8"ux ltble io popera>sofs services sie th1995.