linux/kernel/cpu.c
<<
"2 /spaon> /formn> a "2 href="../linux+v3v3.3/kernel/cpu.c">"2 img src="../.static/gfx/right.png" alt=">>">"2 /spaon>"2 spao class="lxr_search">"2 "2 input typ22>hidden" nam22>navtarget" 2 >22>">"2 input typ22>text" nam22>search" id2>search">"2 buttiontyp22>submit">Search /formn> /spaon>"2 spao class="lxr_prefs"n> a href="+prefs?return=kernel/cpu.c""2 onclick="return ajax_prefs();">"2 Prefs> /a>"2 /spaon> /divn> form acptio="ajax+*" method="post" onsubmit="return false;">"2 input typ22>hidden" nam22>ajax_lookup" id2>ajax_lookup" 2 >22>">" /formn>" div class="headingbottim"> div id2>search_results" class="search_results"> n> /divn> div id2>content">> div id2>file_contents"n
ab/55/a45a5c0a4ab0f962a1c75a7c05ef26c5a693_3/0"nL1" class="line" nam22>L1">   1 /a> spao class="comment">/* CPU control. /spaon>L2" class="line" nam22>L2">   2 /a> spao class="comment"> * (C) 2001, 2002, 2003, 2004 Rusty Russell /spaon>L3" class="line" nam22>L3">   3 /a> spao class="comment"> * /spaon>L4" class="line" nam22>L4">   4 /a> spao class="comment"> * This code is licenced under the GPL. /spaon>L5" class="line" nam22>L5">   5 /a> spao class="comment"> */ /spaon>L6" class="line" nam22>L6">   6 /a>#include <linux/proc_fs.h /a>>>L7" class="line" nam22>L7">   7 /a>#include <linux/smp.h /a>>>L8" class="line" nam22>L8">   8 /a>#include <linux/init.h /a>>>L9" class="line" nam22>L9">   9 /a>#include <linux/notifier.h /a>>>L10" class="line" nam22>L10">  .10#include <linux/sched.h /a>>>L11" class="line" nam22>L11">  110#include <linux/unistd.h /a>>>L12" class="line" nam22>L12">  120#include <linux/cpu.h /a>>>L13" class="line" nam22>L13">  130#include <linux/oom.h /a>>>L14" class="line" nam22>L14">  140#include <linux/rcupdate.h /a>>>L15" class="line" nam22>L15">  150#include <linux/export.h /a>>>L16" class="line" nam22>L16">  16 /a>#include <linux/bug.h /a>>>L17" class="line" nam22>L17">  17 /a>#include <linux/kthread.h /a>>>L18" class="line" nam22>L18">  18 /a>#include <linux/stop_machine.h /a>>>L19" class="line" nam22>L19">  19 /a>#include <linux/mutex.h /a>>>L20" class="line" nam22>L20">  210#include <linux/gfp.h /a>>>L21" class="line" nam22>L21">  210#include <linux/suspend.h /a>>>L22" class="line" nam22>L22">  220>L23" class="line" nam22>L23">  230#include "smpboot.h /a>">L24" class="line" nam22>L24">  240>L25" class="line" nam22>L25">  250#ifdef  a href="+code=CONFIG_SMP" class="sref">CONFIG_SMP0>L26" class="line" nam22>L26">  26 /a> spao class="comment">/* Serializes the updates to cpu_online_mask, cpu_present_mask */ /spaon>L27" class="line" nam22>L27">  27 /a>static  a href="+code=DEFINE_MUTEX" class="sref">DEFINE_MUTEX /a>( a href="+code=cpu_add_remove_lock" class="sref">cpu_add_remove_lock /a>);>L28" class="line" nam22>L28">  280>L29" class="line" nam22>L29">  29 /a> spao class="comment">/* /spaon>L30" class="line" nam22>L30">  30 /a> spao class="comment"> * The following two API's must be used when attempting /spaon>L31" class="line" nam22>L31">  31 /a> spao class="comment"> * to serialize the updates to cpu_online_mask, cpu_present_mask. /spaon>L32" class="line" nam22>L32">  32 /a> spao class="comment"> */ /spaon>L33" class="line" nam22>L33">  330void  a href="+code=cpu_maps_update_begin" class="sref">cpu_maps_update_begin /a>(void)>L34" class="line" nam22>L34">  340{>L35" class="line" nam22>L35">  350         a href="+code=mutex_lock" class="sref">mutex_lock /a>(& a href="+code=cpu_add_remove_lock" class="sref">cpu_add_remove_lock /a>);>L36" class="line" nam22>L36">  36 /a>}>L37" class="line" nam22>L37">  370>L38" class="line" nam22>L38">  380void  a href="+code=cpu_maps_update_done" class="sref">cpu_maps_update_done /a>(void)>L39" class="line" nam22>L39">  390{>L40" class="line" nam22>L40">  400         a href="+code=mutex_unlock" class="sref">mutex_unlock /a>(& a href="+code=cpu_add_remove_lock" class="sref">cpu_add_remove_lock /a>);>L41" class="line" nam22>L41">  41 /a>}>L42" class="line" nam22>L42">  420>L43" class="line" nam22>L43">  43 /a>static  a href="+code=RAW_NOTIFIER_HEAD" class="sref">RAW_NOTIFIER_HEAD /a>( a href="+code=cpu_chain" class="sref">cpu_chain /a>);>L44" class="line" nam22>L44">  440>L45" class="line" nam22>L45">  45 /a> spao class="comment">/* If set, cpu_up and cpu_down will return -EBUSY and do nothing. /spaon>L46" class="line" nam22>L46">  46 /a> spao class="comment"> * Should always be manipulated under cpu_add_remove_lock /spaon>L47" class="line" nam22>L47">  47 /a> spao class="comment"> */ /spaon>L48" class="line" nam22>L48">  48 /a>static int  a href="+code=cpu_hotplug_disabled" class="sref">cpu_hotplug_disabled /a>;>L49" class="line" nam22>L49">  490>L50" class="line" nam22>L50">  500#ifdef  a href="+code=CONFIG_HOTPLUG_CPU" class="sref">CONFIG_HOTPLUG_CPU0>L51" class="line" nam22>L51">  510>L52" class="line" nam22>L52">  52 /a>static struct {>L53" class="line" nam22>L53">  530        struct  a href="+code=task_struct" class="sref">task_struct0 * a href="+code=acptve_writer" class="sref">acptve_writer /a>;>L54" class="line" nam22>L54">  540        struct  a href="+code=mutex" class="sref">mutex0  a href="+code=lock" class="sref">lock /a>;  spao class="comment">/* Synchronizes accesses to refcount, */ /spaon>L55" class="line" nam22>L55">  550         spao class="comment">/* /spaon>L56" class="line" nam22>L56">  56 /a> spao class="comment">         * Also blocks the new readers during /spaon>L57" class="line" nam22>L57">  57 /a> spao class="comment">         * ao ongoing cpu hotplug operaptio. /spaon>L58" class="line" nam22>L58">  58 /a> spao class="comment">         */ /spaon>L59" class="line" nam22>L59">  590        int  a href="+code=refcount" class="sref">refcount /a>;>L60" class="line" nam22>L60">  600}  a href="+code=cpu_hotplug" class="sref">cpu_hotplug0 = {>L61" class="line" nam22>L61">  610        . a href="+code=acptve_writer" class="sref">acptve_writer /a> =  a href="+code=NULL" class="sref">NULL /a>,>L62" class="line" nam22>L62">  620        . a href="+code=lock" class="sref">lock /a> =  a href="+code=__MUTEX_INITIALIZER" class="sref">__MUTEX_INITIALIZER /a>( a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>),>L63" class="line" nam22>L63">  630        . a href="+code=refcount" class="sref">refcount /a> = 0,>L64" class="line" nam22>L64">  640};>L65" class="line" nam22>L65">  650>L66" class="line" nam22>L66">  660void  a href="+code=get_online_cpus" class="sref">get_online_cpus /a>(void)>L67" class="line" nam22>L67">  670{>L68" class="line" nam22>L68">  680         a href="+code=might_sleep" class="sref">might_sleep /a>();>L69" class="line" nam22>L69">  690        if ( a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a> ==  a href="+code=current" class="sref">current /a>)>L70" class="line" nam22>L70">  700                return;>L71" class="line" nam22>L71">  710         a href="+code=mutex_lock" class="sref">mutex_lock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L72" class="line" nam22>L72">  720         a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=refcount" class="sref">refcount /a>++;>L73" class="line" nam22>L73">  730         a href="+code=mutex_unlock" class="sref">mutex_unlock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L74" class="line" nam22>L74">  740>L75" class="line" nam22>L75">  75 /a>}>L76" class="line" nam22>L76">  76 /a> a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL /a>( a href="+code=get_online_cpus" class="sref">get_online_cpus /a>);>L77" class="line" nam22>L77">  770>L78" class="line" nam22>L78">  780void  a href="+code=put_online_cpus" class="sref">put_online_cpus /a>(void)>L79" class="line" nam22>L79">  790{>L80" class="line" nam22>L80">  800        if ( a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a> ==  a href="+code=current" class="sref">current /a>)>L81" class="line" nam22>L81">  810                return;>L82" class="line" nam22>L82">  820         a href="+code=mutex_lock" class="sref">mutex_lock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L83" class="line" nam22>L83">  830        if (!-- a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=refcount" class="sref">refcount /a> &&  a href="+code=unlikely" class="sref">unlikely /a>( a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a>))>L84" class="line" nam22>L84">  840                 a href="+code=wake_up_process" class="sref">wake_up_process /a>( a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a>);>L85" class="line" nam22>L85">  850         a href="+code=mutex_unlock" class="sref">mutex_unlock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L86" class="line" nam22>L86">  860>L87" class="line" nam22>L87">  87 /a>}>L88" class="line" nam22>L88">  88 /a> a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL /a>( a href="+code=put_online_cpus" class="sref">put_online_cpus /a>);>L89" class="line" nam22>L89">  890>L90" class="line" nam22>L90">  90 /a> spao class="comment">/* /spaon>L91" class="line" nam22>L91">  91 /a> spao class="comment"> * This ensures that the hotplug operaptio cao begin only when the /spaon>L92" class="line" nam22>L92">  92 /a> spao class="comment"> * refcount goes to zero. /spaon>L93" class="line" nam22>L93">  93 /a> spao class="comment"> * /spaon>L94" class="line" nam22>L94">  94 /a> spao class="comment"> * Note that during a cpu-hotplug operaptio, the new readers, if any, /spaon>L95" class="line" nam22>L95">  95 /a> spao class="comment"> * will be blocked by the cpu_hotplug.lock /spaon>L96" class="line" nam22>L96">  96 /a> spao class="comment"> * /spaon>L97" class="line" nam22>L97">  97 /a> spao class="comment"> * Since cpu_hotplug_begin() is always called after invoking /spaon>L98" class="line" nam22>L98">  98 /a> spao class="comment"> * cpu_maps_update_begin(), we cao be sure that only one writer is acptve. /spaon>L99" class="line" nam22>L99">  99 /a> spao class="comment"> * /spaon>L100" class="line" nam22>L100"> 100 /a> spao class="comment"> * Note that theoretically, there is a possibility of a ltvelock: /spaon>L101" class="line" nam22>L101"> 101 /a> spao class="comment"> * - Refcount goes to zero, last reader wakes up the sleeping /spaon>L102" class="line" nam22>L102"> 102 /a> spao class="comment"> *   writer. /spaon>L103" class="line" nam22>L103"> 103 /a> spao class="comment"> * - Last reader unlocks the cpu_hotplug.lock. /spaon>L104" class="line" nam22>L104"> 104 /a> spao class="comment"> * - A new reader arrtves at this moment, bumps up the refcount. /spaon>L105" class="line" nam22>L105"> 105 /a> spao class="comment"> * - The writer acquires the cpu_hotplug.lock finds the refcount /spaon>L106" class="line" nam22>L106"> 106 /a> spao class="comment"> *   nio zero and goes to sleep agaio. /spaon>L107" class="line" nam22>L107"> 107 /a> spao class="comment"> * /spaon>L108" class="line" nam22>L108"> 108 /a> spao class="comment"> * However, this is very difficult to achieve in pracptce since /spaon>L109" class="line" nam22>L109"> 109 /a> spao class="comment"> * get_online_cpus() not ao api which is called all that ofteo. /spaon>L110" class="line" nam22>L110"> 110 /a> spao class="comment"> * /spaon>L111" class="line" nam22>L111"> 111 /a> spao class="comment"> */ /spaon>L112" class="line" nam22>L112"> 112 /a>static void  a href="+code=cpu_hotplug_begin" class="sref">cpu_hotplug_begin /a>(void)>L113" class="line" nam22>L113"> 1130{>L114" class="line" nam22>L114"> 1140         a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a> =  a href="+code=current" class="sref">current /a>;>L115" class="line" nam22>L115"> 1150>L116" class="line" nam22>L116"> 116 /a>        for (;;) {>L117" class="line" nam22>L117"> 117 /a>                 a href="+code=mutex_lock" class="sref">mutex_lock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L118" class="line" nam22>L118"> 118 /a>                if ( a href="+code=likely" class="sref">likely /a>(! a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=refcount" class="sref">refcount /a>))>L119" class="line" nam22>L119"> 119 /a>                        break;>L120" class="line" nam22>L120"> 1200                 a href="+code=__set_current_state" class="sref">__set_current_state /a>( a href="+code=TASK_UNINTERRUPTIBLE" class="sref">TASK_UNINTERRUPTIBLE /a>);>L121" class="line" nam22>L121"> 1210                 a href="+code=mutex_unlock" class="sref">mutex_unlock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L122" class="line" nam22>L122"> 1220                 a href="+code=schedule" class="sref">schedule /a>();>L123" class="line" nam22>L123"> 1230        }>L124" class="line" nam22>L124"> 1240}>L125" class="line" nam22>L125"> 1250>L126" class="line" nam22>L126"> 126 /a>static void  a href="+code=cpu_hotplug_done" class="sref">cpu_hotplug_done /a>(void)>L127" class="line" nam22>L127"> 1270{>L128" class="line" nam22>L128"> 1280         a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=acptve_writer" class="sref">acptve_writer /a> =  a href="+code=NULL" class="sref">NULL /a>;>L129" class="line" nam22>L129"> 1290         a href="+code=mutex_unlock" class="sref">mutex_unlock /a>(& a href="+code=cpu_hotplug" class="sref">cpu_hotplug0. a href="+code=lock" class="sref">lock /a>);>L130" class="line" nam22>L130"> 130 /a>}>L131" class="line" nam22>L131"> 1310>L132" class="line" nam22>L132"> 132 /a>#else  spao class="comment">/* #if CONFIG_HOTPLUG_CPU */ /spaon>L133" class="line" nam22>L133"> 133 /a>static void  a href="+code=cpu_hotplug_begin" class="sref">cpu_hotplug_begin /a>(void) {}>L134" class="line" nam22>L134"> 1340static void  a href="+code=cpu_hotplug_done" class="sref">cpu_hotplug_done /a>(void) {}>L135" class="line" nam22>L135"> 1350#endif   spao class="comment">/* #else #if CONFIG_HOTPLUG_CPU */ /spaon>L136" class="line" nam22>L136"> 1360>L137" class="line" nam22>L137"> 137 /a> spao class="comment">/* Need to know about CPUs going up/down? */ /spaon>L138" class="line" nam22>L138"> 1380int  a href="+code=__ref" class="sref">__ref0  a href="+code=register_cpu_notifier" class="sref">register_cpu_notifier /a>(struct  a href="+code=notifier_block" class="sref">notifier_block0 * a href="+code=nb" class="sref">nb /a>)>L139" class="line" nam22>L139"> 1390{>L140" class="line" nam22>L140"> 1400        int  a href="+code=ret" class="sref">ret /a>;>L141" class="line" nam22>L141"> 1410         a href="+code=cpu_maps_update_begin" class="sref">cpu_maps_update_begin /a>();>L142" class="line" nam22>L142"> 1420         a href="+code=ret" class="sref">ret /a> =  a href="+code=raw_notifier_chain_register" class="sref">raw_notifier_chain_register /a>(& a href="+code=cpu_chain" class="sref">cpu_chain /a>,  a href="+code=nb" class="sref">nb /a>);>L143" class="line" nam22>L143"> 1430         a href="+code=cpu_maps_update_done" class="sref">cpu_maps_update_done /a>();>L144" class="line" nam22>L144"> 1440        return  a href="+code=ret" class="sref">ret /a>;>L145" class="line" nam22>L145"> 145 /a>}>L146" class="line" nam22>L146"> 1460>L147" class="line" nam22>L147"> 147 /a>static int  a href="+code=__cpu_notify" class="sref">__cpu_notify /a>(unsigned long  a href="+code=val" class="sref">val /a>, void * a href="+code=v" class="sref">v /a>, int  a href="+code=nr_to_call" class="sref">nr_to_call /a>,>L148" class="line" nam22>L148"> 148 /a>                        int * a href="+code=nr_calls" class="sref">nr_calls /a>)>L149" class="line" nam22>L149"> 1490{>L150" class="line" nam22>L150"> 1500        int  a href="+code=ret" class="sref">ret /a>;>L151" class="line" nam22>L151"> 1510>L152" class="line" nam22>L152"> 1520         a href="+code=ret" class="sref">ret /a> =  a href="+code=__raw_notifier_call_chain" class="sref">__raw_notifier_call_chain /a>(& a href="+code=cpu_chain" class="sref">cpu_chain /a>,  a href="+code=val" class="sref">val /a>,  a href="+code=v" class="sref">v /a>,  a href="+code=nr_to_call" class="sref">nr_to_call /a>,>L153" class="line" nam22>L153"> 1530                                         a href="+code=nr_calls" class="sref">nr_calls /a>);>L154" class="line" nam22>L154"> 1540>L155" class="line" nam22>L155"> 1550        return  a href="+code=notifier_to_errno" class="sref">notifier_to_errno /a>( a href="+code=ret" class="sref">ret /a>);>L156" class="line" nam22>L156"> 156 /a>}>L157" class="line" nam22>L157"> 1570>L158" class="line" nam22>L158"> 158 /a>static int  a href="+code=cpu_notify" class="sref">cpu_notify /a>(unsigned long  a href="+code=val" class="sref">val /a>, void * a href="+code=v" class="sref">v /a>)>L159" class="line" nam22>L159"> 1590{>L160" class="line" nam22>L160"> 1600        return  a href="+code=__cpu_notify" class="sref">__cpu_notify /a>( a href="+code=val" class="sref">val /a>,  a href="+code=v" class="sref">v /a>, -1,  a href="+code=NULL" class="sref">NULL /a>);>L161" class="line" nam22>L161"> 161 /a>}>L162" class="line" nam22>L162"> 1620>L163" class="line" nam22>L163"> 1630#ifdef  a href="+code=CONFIG_HOTPLUG_CPU" class="sref">CONFIG_HOTPLUG_CPU0>L164" class="line" nam22>L164"> 1640>L165" class="line" nam22>L165"> 1650static void  a href="+code=cpu_notify_nofail" class="sref">cpu_notify_nofail /a>(unsigned long  a href="+code=val" class="sref">val /a>, void * a href="+code=v" class="sref">v /a>)>L166" class="line" nam22>L166"> 1660{>L167" class="line" nam22>L167"> 167 /a>         a href="+code=BUG_ON" class="sref">BUG_ON /a>( a href="+code=cpu_notify" class="sref">cpu_notify /a>( a href="+code=val" class="sref">val /a>,  a href="+code=v" class="sref">v /a>));>L168" class="line" nam22>L168"> 1680}>L169" class="line" nam22>L169"> 1690 a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL /a>( a href="+code=register_cpu_notifier" class="sref">register_cpu_notifier /a>);>L170" class="line" nam22>L170"> 1700>L171" class="line" nam22>L171"> 1710void  a href="+code=__ref" class="sref">__ref0  a href="+code=unregister_cpu_notifier" class="sref">unregister_cpu_notifier /a>(struct  a href="+code=notifier_block" class="sref">notifier_block0 * a href="+code=nb" class="sref">nb /a>)>L172" class="line" nam22>L172"> 1720{>L173" class="line" nam22>L173"> 1730         a href="+code=cpu_maps_update_begin" class="sref">cpu_maps_update_begin /a>();>L174" class="line" nam22>L174"> 1740         a href="+code=raw_notifier_chain_unregister" class="sref">raw_notifier_chain_unregister /a>(& a href="+code=cpu_chain" class="sref">cpu_chain /a>,  a href="+code=nb" class="sref">nb /a>);>L175" class="line" nam22>L175"> 1750         a href="+code=cpu_maps_update_done" class="sref">cpu_maps_update_done /a>();>L176" class="line" nam22>L176"> 176 /a>}>L177" class="line" nam22>L177"> 1770 a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL /a>( a href="+code=unregister_cpu_notifier" class="sref">unregister_cpu_notifier /a>);>L178" class="line" nam22>L178"> 1780>L179" class="line" nam22>L179"> 179 /a> spao class="comment">/** /spaon>L180" class="line" nam22>L180"> 180 /a> spao class="comment"> * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU0L181" class="line" nam22>L181"> 181 /a> spao class="comment"> * @cpu: a CPU id0L182" class="line" nam22>L182"> 182 /a> spao class="comment"> *0L183" class="line" nam22>L183"> 183 /a> spao class="comment"> * This funcptio walks all processes, finds a 2	 id mm struct for each one and0L184" class="line" nam22>L184"> 184 /a> spao class="comment"> * then clears a corresponding bit in mm's cpumask.  While this all sounds0L185" class="line" nam22>L185"> 185 /a> spao class="comment"> * trivial, there are various nio-obvious corner cases, which this funcptio0L186" class="line" nam22>L186"> 186 /a> spao class="comment"> * tries to solve in a safe manner. /spaon>L187" class="line" nam22>L187"> 187 /a> spao class="comment"> * /spaon>L188" class="line" nam22>L188"> 188 /a> spao class="comment"> * Also note that the funcptio uses a somewhat relaxed locking scheme, so it may /spaon>L189" class="line" nam22>L189"> 189 /a> spao class="comment"> * be called only for an already offlined CPU. /spaon>L190" class="line" nam22>L190"> 190 /a> spao class="comment"> */ /spaon>L191" class="line" nam22>L191"> 1910void  a href="+code=clear_tasks_mm_cpumask" class="sref">clear_tasks_mm_cpumask /a>(int  a href="+code=cpu" class="sref">cpu /a>)>L192" class="line" nam22>L192"> 1920{>L193" class="line" nam22>L193"> 1930        struct  a href="+code=task_struct" class="sref">task_struct0 * a href="+code=p" class="sref">p /a>;>L194" class="line" nam22>L194"> 1940>L195" class="line" nam22>L195"> 1950         spao class="comment">/* /spaon>L196" class="line" nam22>L196"> 196 /a> spao class="comment">         * This funcptio is called after the cpu is taken down and marked0L197" class="line" nam22>L197"> 197 /a> spao class="comment">         * offline, so its not like new tasks will ever get this cpu set in0L198" class="line" nam22>L198"> 198 /a> spao class="comment">         * their mm mask. -- Peter Zijlstra0L199" class="line" nam22>L199"> 19 /a> spao class="comment"> *        * Thu3pu.c#L98" id2>L98" i9.*        * Thu3pu.c#L98" id2>L98"s="comment">/* /spu_>L19u_hot() ptioa>,>78"ad1" cgrabbne" nam22>L102"> 102 /a> spao clas2="comment2> * Note that theoretica2ly, t2ere is a possibility of a ltv8" id2>L98full-f"kegrnelid2l178_line" nam22>L104"> 104 /a> spao clas2="comment2> * - Refcount goes to z2ro, l2st reader wakes up the sleepi8" id2>L9nam22>L27">  27 /a>static  a href="comment2> *   writer. /spaon>cpu_notWARNass>( a href="+code=val" clspaon>/cpu.c#L176" id2>L1spaon>>( a href="+code=val" c92" class="line" nam22>L28">  280> * - Last reader unlock2 the 20sref">cpu_maps_update_begin spu_>L19u_hotref="+code=cpu_cpu_>L19u_hot nam22>L176"> 176 /a>}> * - A new reader arrtv2s at 20 class="sref">raw_notifier_cL19_clascpu_hotplug" class="sreL19_clascpu_hotp>( a href="+code=val4" class="line" nam2222>L117"> 117 /a>          2="comment2> * - The writer acquire2 the 20el/cpu.c#L196sk_struct0 * a href="+code=p" class="sref">p /a>;>L19sref">p /a>;>L194"> 1940> *   nio zero and goes 2o sle20am22>L147"> 147 /a>static int2="comment2> * /spaon>mutex_lock /a>(& id2>L196" class="line" nam22>L196"> 196 /a> spao clas2="comment2> * However, this is ver2 diff2cult to achieve in pracptce sssssssssssssssss* Maine" >L19 ss="l exi5" idt ocptie" >L19sent">stL198hav" nam22>L109"> 109 /a> spao clas2="comment2> * get_online_cpus() no2 ao a2i which is called all that ofssssssssssssssss* cpu.c#L184. Frnes="l" nam22>L104"> 104 /a> spao clas2="comment2> * /spaon>L111" class="linessssssssssssssss*nam22>L27">  27 /a>static  a href="comment2> */ /spaon>mutex_unlock /a>(& a href="sref">p /a>;>cpu a>)lug" class="sreLrneu_hot>cpu a>)>( a href="+code=val4" class="line" nam22221">  210#include <schedule /a>();>(& a href="sref">p /a>;>L192"> 1920{>L114" class2"line21e=nr_calls" class="sref">nr_cine"inue21">  210#include <cp21="sref">wake_up_process /a>( a href=" c92" class="line" nhref_sref">" c>( a href="+code=val" c92" class="line" nam22/cpu.c#L175" id2> href="+code=cpu" class=">)>p /a>;>L2pu.c#L175" id2> hde=cpu" class=">)am22>L28">  280>L116" class=2line"21el/cpu.c#L196sk_struc a href="+code=p" clcpu_hotplug" class="sp" clcpu_ho="ker(& a href="sref">p /a>;>  280> 1770 a href="+2      a h2ef="+code=mutex_lock" cl2ss="s21>( a href="+code=cpu_notify"cpu_>L19ucpu_hotplug" class="scpu_>L19ucpu_ho nam22>L176"> 176 /a>}> 1690 a href="+2         2   break;>  90 /a> spao class="2( a hipaon>/cpu.c#L176" idipaon>>( aotify_nofail /a>(unsigheot>L19_/cpu.92" class="line"heot>L19_/cpu.="kernel/cpu.c#L192" id2>L192" class="line" nam22>L192"> 1920{>>L117"> 117 /a>          2nel/cpu.c#LL23" id2>L23" class="linelass2">schedule /a>t0 * a href="+code=p" class="sref">p /a>;>L194" class="line" nam22>L194"> 1940> 1940>L25" class="lin"line22 class="sref">raw_notifier_ca hreu_hot>irq" class="line" a hreu_hot>irq /a>,  a href="+code=nb" lid2l178_lineref">p /a>;>  280>line"22ref">cpu_maps_update_done /aL19_clascpu_hotplug" class="sreL19_clascpu_hotp>( a href="+code=val4" class="line" nam2222>L117"> 117 /a>          2comment">//* Serializes the updateslass=226schedule /a>();>L192" class="linep" cl>L1>( a href="+code=val4" class="line" nam2222ef="kernel/cpu.c#L8L192" class="line" nam22 /a>( a href="+code=cpu_hot4" class="line" nam22-2>L2pu.c#L175" id2>=TASK_UNINTERRUPTIBL">TASK_UN2ef="kernel/cpu.c#L>L121RUNNING_UNINTERRUPTIBL>L121RUNNINGam22 /a>( a hreL117"> 117 /a>          2c     a h2DEFINE_MUTEX" class="sref"line22f">mutex_lock /a>(&ammmmm href="+code=val4" class="line" nam22-2>L2pu.c#L175" id2>utimK_UNINTERRUPTIBLutimK">mut||f="+code=cpu_hot4" class="line" nam22-2>L2pu.c#L175" id2>=TimK_UNINTERRUPTIBLstimK">mu2>L119"> 119 /a>          2nel/cpu.c##L29" id2>L29" class="linf">cp22 class="sref">nr_calls /a>)><="+code=cpu_hot4rneleref">p /a>;>( a href="+code=valKERN_WARNING_UNINTERRUPTIBLKERN_WARNINGunregi id2>L111" c"keing"am22>L2T cla%s (pfy_=a%dpu.c#2" ipua%da>"m22>L27">  27 /a>static  a hrefcomment">//* /spaon>m22L120" id2>L120" class="line" s /a>)><= id2>L111" c"keing"am22>L2(">TAS_=a%ld, flags_=a%x)\n>"m22>L2>L153"> 1530          2kernel/cp2.c#L131" id2>L131" class2"line23lass="sref">__set_cur>nr_calls /a>)><="+code=cpu_hot4" class="line" nam22-2>L2pu.c#L175" id2>lass92" class="line"o>)am22/cpu.c#L175" id2>p" clpfy_nnel/cpu.c#L178" p" clpfy_nn>( a href="+code=val4" class="line" nam222/cpu.c#L175" id2>" c92" class="line" nam22/L153"> 1530          2ka href="ic#L132" id2>L132" class=2line"23ref">mutex_unlock /a>>nr_calls /a>)><="+code=cpu_hot4" class="line" nam22-2>L2pu.c#L175" id2>=TASK_UNINTERRUPTIBL">TASK_UN/cpu.c#L175" id2>4" class="line" nam22-2>L2pu.c#L175" id2>flagslug" class="sreLlagsam22L28">  280>/* #if CONFIG_HOT2LUG_C23>schedule /a>>L169"> 1690 a href="+2  a href=2+code=cpu_hotplug_begin"2class23sref">cpu_maps_update_begin a hreucpu_ho>irq" class="line" a hreucpu_ho>irq /a>,  a href="+code=nb" lid2l178_lineref">p /a>;>  280>L125"> 1250>/* #else #if CO2FIG_H23am22>L126"> 126 /a>static voi2ernel/cpu2c#L137" id2>L137" class=2line"23ref">cp * a href="+code=p"k>>L117"> 117 /a>          2="comment2>/* Need to know about C2Us go23f">mutex_lockid * a href="+code=v" class="mocpu.c#L49" id2>Lmocam22>L194"> 1940>__ref02a>  a23 class="sref"l/cpu.c#L166" id2>L16h" c92" class="lineh" nam22>L194"> 1940>/.c#L140" id2>L140" class2"line2 nam22L65">  650>2et /a24am22>L171"> 1710void  a hr2href="+co2e=cpu_maps_update_begin"2class24t reader wakes up the sleep/* T"k>98" cl"linrnel.s*nam22>L27">  27 /a>static  a hrefhref="+co2e=ret" class="sref">ret 2a> = 24sref">cpu_ho+code=register_cpu_notifier" class="sref">register_cpu_notifier p"k>,l/cpu.c#L166" id2>L16_paras92" class="line_parasref">L119"> 119 /a>          2href="+co2e=cpu_maps_update_done" 2lass=24nam22>L114"> 1140         a2urn  a hr2f="+code=ret" class="sre2">ret2/a>;>.c#L194" id2>L194aras92" class="lineparasref">_raw_notifier_callparas92" class="line_parasref"65">  650>L146" class2"line24ref">cpu_maps+code=register_cpu_ernel/cpu.c#L178" ernref"65">  650>L147" class=2line"2nam22>L147"> 147 /a>static int2 a href="2code=__cpu_notify" class2"sref24>( a href="+coer wakes up the sleep/* Enl/cpu.c cl"linrnesnnel/ct handlliney mocpu.nternupts.s*nam22>L27">  27 /a>static  a hrefh"+code=_2   int * a href="+code=n2_call24hotplug0. a href="+code=aernel/cpu.c#L178" ernref"__raw_notifier_call_a herne" naier" class="sref"a herne" na nam22>L176"> 176 /a>}>L150" class2"line24cpu_hotplug0. a href="+code=aernel/cpu.c#L178" ernref"_< 0>L119"> 119 /a>          2  a href=2+code=ret" class="sref">2et /a252>L71" class="line" nam22>Lde=register_cpu_ernel/cpu.c#L178" ernref"65">  650>L152" class=2line"2nam22>L152"> 1520         a2href="+co2e=ret" class="sref">ret 2a> = 2a href="+code=__raw_notifier_c class="sref">val /a>,  a href="+code=v" class="sref">"li_DYING_UNINTERRUPTIBL"li_DYING">mut|cpu.c#L175" id2>4aras92" class="lineparasref"-2>L2pu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>4aras92" class="lineparasref"-2>L2pu.c#L175" id2>h" c92" class="lineh" nam222>L176"> 176 /a>}>Ld0>L176"> 176 /a>}>L155" class=2line"25nam22>L125"> 1250>L126"> 126 /a>static voi2kernel/cp2.c#L157" id2>L157" class2"line2 readers during /spaon>L27">  27 /a>static  a hrefernel/cpu2c#L158" id2>L158" class=2line"25__cpu_notify /a>(unsigned long  atifier" class="sref">register_cpu_notifier L192" class="line" nam22a>,>L119"> 119 /a>          2 a href="2code=cpu_notify" class="2ref">2pu_not>L114"> 1140         a2kernel/cp2.c#L160" id2>L160" class2"line2fcount /a>;>L154" class="line" nam222>L>L176"> 176 /a>}>__cpu_notl/cpu.c#L166" id2>L16h" c92" class="lineh" nam2222>,l/cpu.)(ef=")cpu.c#L192" id2>L192" class="line" nam22>L176"> 176 /a>}>L162" class2"line2acptve_writer id * a href="+code=v" class="mocpu.c#L49" id2>Lmocam22__raw_notifier_calcpu /afrozel92" class="linep"u /afrozelref" ?TPLUG_CPU0>L12S_FROZEs="sref">cpu_not li_>L12S_FROZEsref" :>L>L176"> 176 /a>}>L163" class=2line"26>schedule /a>t0 * a href="+code=p"k> a href="+code=pcd_paras92" class="linepcd_parasam22__r>L114"> 1140         a2ref="+cod2=CONFIG_HOTPLUG_CPU" cla2s="sr26e=nr_calls" class="srnel/cpu.c#L130" mocpu.c#L49" id2>Lmocam22__raw_notifier_cal ocpu.c#L49" id2>Lmocam22/L114"> 1140         a2rrn  a hr2c#L165" id2>L165" class=2line"26="sref">wake_up_procenel/cpu.c#L130" h" c92" class="lineh" nam2222>el/cpu.c#L130" h" c92" class="lineh" nam22/L114"> 1140         a2rrn  a hr2+code=cpu_notify_nofail"2class26ref">cpu_mapsL65">  650>L167" class2"line26am22>L147"> 147 /a>static int2href="+co2e=BUG_ON" class="sref">B2G_ON 2a>( a href="+ca>. a href="+code=anumkernel/cpu.c#L89" id2>L89" numkernel/cpu.c nam222ef=1>L119"> 119 /a>          2kernel/cp2.c#L169" id2>L169" class2"line26 class="sref">nr_callam22>Ld a href="+code=rEBUSY#L89" id2>L89" EBUSYam22>L176"> 176 /a>}>EX2ORT_S2622>L90">  90 /a> spao class="2ernel/cpu2c#L171" id2>L171" class=2line"27cpu_hotplug0.  a href="+code=refcospaon>/cpu.c#L176" id2>L1spaon>>( a href="+code=val" c92" class="line" nam22>L0">  90 /a> spao class="2ernel/cpu2_ref" class="sref">__ref2  272>L82" class="line" nam22>Ld a href="+code=rEINVAr_cpu_notifier" cINVAram22>L176"> 176 /a>}>L173" class2"line27am22>L163"> 1630#ifdef  a 2href="+co2e=cpu_maps_update_begin"2class2"sref">cpu_maps_update_begin /a>(>L134" class="line2>L176"> 176 /a>}>L75">  75 /a>}>cpu_maps_update_done /aernel/cpu.c#L178" ernref"__raw_notifier_call_a heclass="sref">val /a>,  a href="+code=v" class="sref">"li_DOWN_PREPARE_UNINTERRUPTIBL"li_DOWN_PREPARE">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22/"kern  a href="+code=nb" c#L154" id2>L154" class="line" nam22>L154"> 1540>L177" class2"line276( a href="+ca>. a href="+code=aernel/cpu.c#L178" ernref"22>L117"> 117 /a>          2ode=EXPOR2_SYMBOL" class="sref">EX2ORT_S27f">mutex_lock /a>(& a href="+codc#L154" id2>L154" class="line" nam2-->L154"> 1540>L179" class=2line"27 class="sref">nr_callaw_notifier_call_a heclass="sref">val /a>,  a href="+code=v" class="sref">"li_DOWN_FAILED_UNINTERRUPTIBL"li_DOWN_FAILED">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22/"p; a href="+codc#L154" id2>L154" class="line" nam2rnel/cpu.c#L161" id2>L161" class="line" nam22>L161"> 161 /a>}>/** /spaon>L120" class="+code=cpu_hot4rneleref">p /a>;>( a h id2>L111" c"keing"am22>L2%s: attempc#L10p"k>97" cl"lin%u l /aed\n>"m22>L2>L153"> 1530          2="comment2> * clear_tasks_mm_cpuma2k - S28lass="sref">__set_cur>nr_calls /a>)><="+code=cpu_hot__val /a>,  >L161"> 161 /a>}> * @cpu: a CPU id0L82" class="line" ngoL10el/cpu.c#L161" out_releas>/cpu.c#L176" idout_releas>am22>L176"> 176 /a>}> *0 1690 a href="+2="comment2> * This funcptio walks 2ll pr28="linL194"> 1940> * then clears a corres2ondin28 class="sref">raw_notifier_cernel/cpu.c#L178" ernref"__raw_notifier_call_stop_m9" in>/cpu.c#L176" idl_stop_m9" in>ode=v" class="sref">p"k>rn  a href="+code=nb" pcd_paras92" class="linepcd_parasam22rnel/cpu.c#L161" " chref_ofier" class="sre" chref_of>( a href="+code=val" c92" class="line" nam22>L>L176"> 176 /a>}> * trivial, there are v2rious2tex_unlock /a>a>. a href="+code=aernel/cpu.c#L178" ernref"22>L117"> 117 /a>          2="comment2> * tries to solve in a 2afe m286schedule /a>();>L27">  27 /a>static  a href="comment2> * /spaon>mutex_lock /a>(& a href="+coda href="+c a href="+code=val" class="sref">val /a>, vo" class="sref">"li_DOWN_FAILED_UNINTERRUPTIBL"li_DOWN_FAILED">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22L>L176"> 176 /a>}> * Also note that the f2ncpti28am22>L179"> 179 /a> spao clas2="comment2> * be called only for a2 alre28L120" id2>L120" classgoL10el/cpu.c#L161" out_releas>/cpu.c#L176" idout_releas>am22>L176"> 176 /a>}> */ /spaon> 1690 a href="+2f="+code=2lear_tasks_mm_cpumask" c2ass="29sref">cpu_maps_update_begin  class="sref">cpu_notify /a>( a href="+code=val" clspaon>/cpu.c#L176" id2>L1spaon>>( a href="+code=val" c92" class="line" nam22>L28">  280>L193" class2"line29am22>L163"> 1630#ifdef  a 2uct  a hr2f="+code=task_struct" cl2ss="s2ef">task_strucp id2>L196" class="line" nam22>L196"> 196 /a> spao clas2ernel/cpu2c#L195" id2>L195" class=2line"2lug operaptio, the new readerrrrrrrrr*nt /smigu.c#L9line"() "li_DYINGref="backc#L198hav" ss="li110"  nam22>L196"> 196 /a> spao clas2eref="+co2comment">/* /spaon>L196"> 196 /a> spao clas2e"comment2>         * This funcpti2 is c2lled after the cpu is taken down and maso it maymigu.c#L9e" >L19 is ine" ind2>Lclasstop_m9" in>u.c ng" nam22>L104"> 104 /a> spao clas2="comment2>         * offline, so 2ts no2 like new tasks will ever get this cpu nam22>L104"> 104 /a> spao clas2=ernel/cp2>         * their mm mas2. -- 2eter Zijlstra0L19 L10go away" nam22>L104"> 104 /a> spao clas2="comment2 *        * Thu3pu.c#L982 id2>298" i9.*        * Thu3pu.c#L98" id2>L9nam22>L27">  27 /a>static  a hre3="comment3> * Note that theoretica3ly, t300schedule /a>w2>L18  a href="+code=ridnal>L192" class="lineidnal>L1>( a href="+code=val" c92" class="line" nam22>L0">  90 /a> spao class="3="comment3> * - Refcount goes to z3ro, l30ref">mutex_unlock /a>(& a href="2>L1pu.c#/cpu.c#L176" id2>L1pu.c#"line2>L176"> 176 /a>}> *   writer. /spaon> 1630#ifdef  a 3="comment3> * - Last reader unlock3 the 30f">task_strucp id2>L196" class="line"arked0actu="ke kL19" clasine"L9nam22>L27">  27 /a>static  a hre3=4comment3>#L195" id2>L195" class=3s at 30 class="sref">raw_notifier_cf"a hernaier" class="sref"a hern>>( a href="+code=val" c92" class="line" nam22>>L176"> 176 /a>}>omment">/* /spaon>L126"> 126 /a>static voi3="comment3> *   nio zero and goes 3o sle306">task_strucp id2>L196" class="line"a"lines aonpletkerndL19: te198" idy="l"  Too lTAS_L10aonpline"s*nam22>L27">  27 /a>static  a hre3="comment3> * /spaon>val /a>, vo" class="sref">"li_DEAD_UNINTERRUPTIBL"li_DEAD">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22L>L176"> 176 /a>}> * However, this is ver3 diff30am22>L179"> 179 /a> spao clas3="comment3> * get_online_cpus() no3 ao a30ex_unlock /a>(& a href="gheot>L19_/cpu.92" class="line"heot>L19_/cpu.="kerhref="+code=val" c92" class="line" nam22>>L176"> 176 /a>}> * /spaon> 1710void  a hr3="comment3> */ /spaon>/cpu.c#L176" idout_releas>am22:L171"> 1710void  a hr3="comment3+code=cpu_hotplug_begin"3class31 href="+code=__raw_notifier_c cla href="kernel/cpu.c#L135" id2>L135" class="line>>L176"> 176 /a>}>L114" class3"line31e=nr_calls" ca>.  a href="+code=rernel/cpu.c#L178" ernref"2L176"> 176 /a>}>cp31="sref">wake_up_process /a>( a href=val /a>, vo" class="sref">"li_POST_DEAD_UNINTERRUPTIBL"li_POST_DEAD">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22L>L176"> 176 /a>}>L116" class=3line"31el/cpu.c#L196am22>Lde=register_cpu_ernel/cpu.c#L178" ernref"65">  650> 1770 a href="+3      a h3ef="+code=mutex_lock" cl3ss="s31am22>L158"> 158 /a>static int3     if (3a href="+code=likely" cl3ss="s31ref="+code=register_cpu_notifier" class="sref">register_cpu_notifier a hernel92" class="linec hernel /a>,id * a hrnel/cpu.c#L192" id2>L192" class="line" nam222L176"> 176 /a>}> 1600        re3  650>L152"> 1520         a3nel/cpu.c3LL23" id2>L23" class="li3elass32 href="+code=__raw_notifier_c cl);>L174" class="line" nam22>L174"> 1740         a3t; 1940>L25" class="li3"line32 class="sref"a>. a href="+code=aid2>L135" clane" nacpu.c#L49" id2>Lid2>L135" clane" nacref"22>L117"> 117 /a>          3f="+code=3CONFIG_SMP" class="sref"3line"32ref">cpu_maps="+code=__raw_notifier_ernel/cpu.c#L178" ernref"__r a href="+code=rEBUSY#L89" id2>L89" EBUSYam22>L176"> 176 /a>}>3/* Serializes the update3lass=326schedule /a>();>L176"> 176 /a>}>mutex_lock>L177"> 1770 a href="+3nel/cpu.c3#L29" id2>L29" class="li3f">cp32am22>L179"> 179 /a> spao clas3comment">3/* /spaon>m3tex_unlock /a>(& a href="ernel/cpu.c#L178" ernref"__raw_notifier_calla hernel92" class="line,cpu.c#L192" id2>L192" class="line" nam22, 02>L174"> 1740         a3kernel/cp3.c#L131" id2>L131" class3"line33am22>L171"> 1710void  a hr3ka href="3c#L132" id2>L132" class=3line"33c#L112l/cpu.c#L161" out/cpu.c#L176" idoutam22:L171"> 1710void  a hr3 class="c3mment">/* #if CONFIG_HOT3LUG_C33 href="+code=__raw_notifier_c cl);>L176" class="line" nam22>L176"> 176 /a>}>Ldcpu.c#L151" id2ernel/cpu.c#L178" ernref"65">  650>L125"> 1250>/* #else #if CO3FIG_H33am22>a href="+code=rEe=unregister_cpu_notifier" class="sref">unregister_cpu_notifa hernel92" class="linec hernel /a>2>L176"> 176 /a>}>3c#L137" id2>L137" class=3line"33ref">CPU */ p id2>L196" class="line"4" class="line" na*nam22>L27">  27 /a>static  a hre3="comment3>/* Need to know about C3Us go33am22>L158"> 158 /a>static int3="+code=_3ref" class="sref">__ref03a>  a33ter Zijlstra0L27">  27 /a>static  a hre3=omment">3.c#L140" id2>L140" class3"line3 nam22_notify /a>(unsigned long  a hrinit/cpu.c#L176" id a hrinitgister_cpu_notifier ,id * a hrnel/cpu.c#L192" id2>L192" class="line" nam22a>,>L119"> 119 /a>          3  a href=3+code=ret" class="sref">3et /a34am22>>L117"> 117 /a>          3href="+co3e=cpu_maps_update_begin"3class3"sref">cpu_mapnel/cpu.c#L151" id2>L151" class="line" nam22L154" class="line" nam222>L>L176"> 176 /a>}>ret 3a> = 3a href="+code=l/cpu.c#L166" id2>L16h" c92" class="lineh" nam2222>,l/cpu.)(ef=")cpu.c#L192" id2>L192" class="line" nam22>L176"> 176 /a>}>cpu_mapsid * a href="+code=v" class="mocpu.c#L49" id2>Lmocam22__raw_notifier_calcpu /afrozel92" class="linep"u /afrozelref" ?TPLUG_CPU0>L12S_FROZEs="sref">cpu_not li_>L12S_FROZEsref" :>L>L176"> 176 /a>}>ret3/a>;>p /a>;>L19idna92" class="lineidnaam22>L176"> 176 /a>}>L146" class3"line34am22>L126"> 126 /a>static voi3 rnel/cpu3c#L147" id2>L147" class=3line"346( a href="+ca>. a href="+code=a" clspaon>/cpu.c#L176" id2>L1spaon>>( a href="+code=val" c92" class="line" nam22>t||f a href="+code=refcop="k hrecpu.c#L176" id2>L1p="k hr>( a href="+code=val" c92" class="line" nam22>L0">  90 /a> spao class="3 a href="3code=__cpu_notify" class3"sref34f">mutex_lock /a>(&amam22>Ld a href="+code=rEINVAr_cpu_notifier" cINVAram22>L176"> 176 /a>}> 179 /a> spao clas3kernel/cp3.c#L150" id2>L150" class3"line34ex_unlock /a>(& a href="ga>(>L134" class="line2>L176"> 176 /a>}>3et /a35am22>L171"> 1710void  a hr3ernel/cpu3c#L152" id2>L152" class=3line"35sref">cpu_maps_update_begin idna92" class="lineidnaam22__raw_notifier_calidnal" >L19_gL151" class="lineidnal" >L19_gL1="kerhref="+code=val" c92" class="line" nam22>>L176"> 176 /a>}>ret 3a> = 3a href="+code=a>. a href="+code=aIS_ERR92" class="lineIS_ERR="kerhref="+code=validna92" class="lineidnaam22)22>L117"> 117 /a>          3         3                    a hr3f="+c3de=nr_calls" class="srcpu.c#L151" id2>L151" class="line" nam22__raw_notifier_calPTR_ERR92" class="linePTR_ERR="kerhref="+code=validna92" class="lineidnaam22)>L176"> 176 /a>}>L155" class=3line"35="sref">wake_up_procegoL10el/cpu.c#L161" out/cpu.c#L176" idoutam22>L176"> 176 /a>}>noti>L125"> 1250>L157" class3"line35am22>L147"> 147 /a>static int3ernel/cpu3c#L158" id2>L158" class=3line"35>( a href="+code=cpu_notify"call_chain" class="sref">__raw_notifier_call_ass="sref"ier" class="sref"a heef="+code=v" class="sref">"li_UP_PREPARE_UNINTERRUPTIBL"li_UP_PREPARE">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22/"kern  a href="+code=nb" c#L154" id2>L154" class="line" nam22>L154"> 1540>358href="+code=a>. a href="+code=a2>L156" class="line" nam222>L117"> 117 /a>          3 ernel/cp3.c#L160" id2>L160" class3"line35L120" id2>L120" class="+code=cpu_hotc#L154" id2>L154" class="line" nam2-->L154"> 1540>__set_cur="+code=cpu_hot4rneleref">p /a>;>( a href="+code=valKERN_WARNING_UNINTERRUPTIBLKERN_WARNINGunregi id2>L111" c"keing"am22>L2%s: attempc#L10being upl"lin%u l /aed\n>"m22>L2>L153"> 1530          3urnel/cpu3.c#L162" id2>L162" class3"line36ref">mutex_unlock /a>>nr_calls /a>)><="+code=cpu_hot__val /a>,  >L161"> 161 /a>}>L163" class=3line"36>schedule /a>up_procegoL10el/cpu.c#L161" out="sref"ier" class="sreout="sref"am22>L176"> 176 /a>}>L125"> 1250>L165" class=3line"3nam22>L165"> 1650static voi3rrn  a hr3+code=cpu_notify_nofail"3class36ref">cpu_mapsijlstra0L27">  27 /a>static  a hre3kernel/cp3.c#L167" id2>L167" class3"line366( a href="+code=cpu_notify"call_chain" class="sref">__raw_notifier_call_ass=u4" class="line" <,cpu.c#L192" id2>L192" class="line" nam22a>href="+code=validna92" class="lineidnaam22)>L176"> 176 /a>}>B3G_ON 3a>( a href="+ca>. a href="+code=acall_chain" class="sref">_!= 0>L119"> 119 /a>          3kernel/cp3.c#L169" id2>L169" class3"line36 class="sref">nr_callgoL10el/cpu.c#L161" out="sref"ier" class="sreout="sref"am22>L176"> 176 /a>}>EX3ORT_S36ex_unlock /a>(& a href=" class="sref">cpu_notify /a>( a  a href="+code=refcospaon>/cpu.c#L176" id2>L1spaon>>( a href="+code=val" c92" class="line" nam22>L>L176"> 176 /a>}>L171" class=3line"3nam22>L171"> 1710void  a hr3ernel/cpu3_ref" class="sref">__ref3  372>L82" class=ijlstra0L27">  27 /a>static  a hre3kernel/cp3.c#L173" id2>L173" class3"line37 href="+code=__raw_notifier_c class="sref">val /a>,  a href="+code=v" class="sref">"li_ONLINE_UNINTERRUPTIBL"li_ONLINE">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22L>L176"> 176 /a>}> 1940>L7el/cpu.c#L161" out="sref"ier" class="sreout="sref"am22:L171"> 1710void  a hr3href="+co3e=cpu_maps_update_done" 3lass=3sref">cpu_mapsa>. a href="+code=acall_chain" class="sref">_!= 0>L119"> 119 /a>          3kernel/cp3.c#L177" id2>L177" class3"line376schedule /a>();>"li_UP_CANCELED_UNINTERRUPTIBL"li_UP_CANCELED">mut|cpu.c#L175" id2> ocpu.c#L49" id2>Lmocam22/cpu.c#L175" id2>h" c92" class="lineh" nam22/"="+code=cpu_hotc#L154" id2>L154" class="line" nam2rnel/cpu.c#L161" id2>L161" class="line" nam22>L161"> 161 /a>}>EX3ORT_S3MBOL /a>( a href="+coout/cpu.c#L176" idoutam22:L171"> 1710void  a hr3kernel/cp3c#L179" id2>L179" class=3line"37hotplug0. a href="+code=aid2>L135" claernel/cpu.c#L135" id2>L135" class="line>>L176"> 176 /a>}>/** /spaon>  90 /a> spao class="3="comment3> * clear_tasks_mm_cpuma3k - S38lass="sref">_am22>Ldcpu.c#L151" id2call_chain" class="sref">>L176"> 176 /a>}> * @cpu: a CPU id0L82>L125"> 1250> *0 1630#ifdef  a 3="comment3> * This funcptio walks 3ll pr38="lin /a>(unsigned long  a hrinit/cpu.c#L176" id a hrinitgister_cpu_notifier ass=u4" class="line" a heu4 /a>,id * a hrnel/cpu.c#L192" id2>L192" class="line" nam22>L119"> 119 /a>          3="comment3> * then clears a corres3ondin38 clas>L117"> 117 /a>          3=ref="+co3> * trivial, there are v3rious3tex_unlock /a>ael/cpu.c#L151" id2ernel/cpu.c#L178" ernref"22>L>L176"> 176 /a>}> * tries to solve in a 3afe m38am22>L147"> 147 /a>static int3="comment3> * /spaon>mu#ifdef. a href="+code=a4" clasMEMORYss="line_UNINTERRUPTIBL"" clasMEMORYss="linem22>L147"> 147 /a>static int3=ernel/cp3> * Also note that the f3ncpti388x_unlock /a>ael/cpu.c#L151" id2nicpu.c#L49" id2>Lnicam22>L194"> 1940> * be called only for a3 alre38ex_unlock /a>(& a href="pclaata_t/cpu.c#L176" idpclaata_tx_unlock /a.c#L194" id2>L19pgaat/cpu.c#L176" idpcaatam22>L194"> 1940> */ /spaon> 1940> 1520         a3kernel/cp3.c#L193" id2>L193" class3"line39 href="+code=a>.  a href="+code=refcopossi naier" class="sreefcopossi na>( a href="+code=val" c92" class="line" nam22>L2>L117"> 117 /a>          3uct  a hr3f="+code=task_struct" cl3ss="s39e=nr_calls" class="srcpu.c#L151" id24rneleref">p /a>;>( a href="+code=valKERN_ERR92" class="lineKERN_ERRunregi id2>L111" c"keing"am22>L2cannel/ct spaon> ipua%dabeca/* /ref="m22>L27">  27 /a>static  a hre3ernel/cpu3c#L195" id2>L195" class=3line"39="sref">wake_up_proce" class=ijlstra0L2configuri110sent"-L13ad110t bohretimK\n>"m22>L2>nel/cpu.c#L161" " c92" class="line" nam22>>L161"> 161 /a>}>/* /spaon>Ldef/spcode=v" class="sref">"" clasIAc#L165" id2UPTIBL"" clasIAc#am22>L119"> 119 /a>          3e"comment3>         * This funcpti3 is c396schedule /a>();>p /a>;>( a href="+code=valKERN_ERR92" class="lineKERN_ERRunregi id2>L111" c"keing"am22>L2pleas> "heot ad1ic#L9ala hrs= bohre>"m22>L27">  27 /a>static  a hre3e"comment3>         * offline, so 3ts no39f">mutex_lock /a>(&ammmmmroce" class=ijlstra0L2paras cla\n>"m22>L2>>L161"> 161 /a>}>         * their mm mas3. -- 3eter ZCPU */L194"> 1940>39L120" id2>L120" classam22>Ld a href="+code=rEINVAr_cpu_notifier" cINVAram22>L176"> 176 /a>}> * Note that theoretica4ly, t400schedule /a>>L169"> 1690 a href="+4="comment4> * - Refcount goes to z4ro, l40am22>L152"> 1520         a4="comment4> *   writer. /spaon> 147 /a>static int4="comment4> * - Last reader unlock4 the 40sref">cpu_maps_update_begin nicpu.c#L49" id2>Lnicam22__raw_notifier_calefcotoeefdaier" class="sreefcotoeefda="kerhref="+code=val" c92" class="line" nam22>>L176"> 176 /a>}>#L195" id2>L195" class=4s at 40 class="sref"a>.  a href="+code=refdaospaon>/cpu.c#L176" idefdaospaon>="kerhref="+code=valnicpu.c#L49" id2>Lnicam22>L2>L117"> 117 /a>          4=5comment4>omment">/* /spaon>pu.c#L175" id2> emkernel/cefdaier" class="sre emkernel/cefda="kerhref="+code=valnicpu.c#L49" id2>Lnicam22>>L176"> 176 /a>}>         * This funcpti4o sle406schedule /a>();> 176 /a>}> * /spaon>mutex_lock /a>(&am0" classam22>Ld a href="+code=ernel/cpu.c#L178" ernref">L176"> 176 /a>}>         * their mm mas4 diff408schedule /a>>L169"> 1690 a href="+4=9comment4>*        * Thu3pu.c#L984 ao a4022>L90">  90 /a> spao class="4="comment4> * /spaon>cpu_maps_update_begin pgaat/cpu.c#L176" idpcaatam2222>pu.c#L175" id2>NODE_DATAL161" class="linODE_DATA="kerhref="+code=valnicpu.c#L49" id2>Lnicam22>>L176"> 176 /a>}> */ /spaon>mutex_una>.  a href="+code=rpgaat/cpu.c#L176" idpcaatam22L2>L117"> 117 /a>          4="comment4+code=cpu_hotplug_begin"4class41>schedule /a>();>p /a>;>( a href="+code=valKERN_ERR92" class="lineKERN_ERRunreL117"> 117 /a>          4="comment4.c#L114" id2>L114" class4"line41e=nr_calls" class="sref">nr_cijlstra0L2Cannel/ct spaon> ipua%daduS_L10ne"  pcaat\n>"m22>L2>nel/cpu.c#L161" " c92" class="line" nam22>>L161"> 161 /a>}>cp41="sref">wake_up_proceam22>Ld a href="+code=rENOMEM_cpu_notifier" cNOMEMref">L176"> 176 /a>}>L116" class=4line"41s="sref">noti>L125"> 1250> 147 /a>static int4      a h4ef="+code=mutex_lock" cl4ss="s41>( a href="+ca>. a href="+code=apgaat/cpu.c#L176" idpcaatam22-2>L2pu.c#L175" id2>efdaozo>stist id2>L154" class=fdaozo>stist am22-2>L2pu.c#L175" id2>ozo>s#L1 id2>L154" classozo>s#L1 am22-2>L2pu.c#L175" id2>zernel/cpu.c#L135" zss="lin2ef="kernel/cpu.c#Lid2>L161" class="line" nam222>L117"> 117 /a>          4=8comment4a href="+code=likely" cl4ss="s41 class="sref">nr_callaw_notifier_calmutex_lineref">p /a>;>( a   a href="+code=nb" zo>stist _mutexel/cpu.c#L135" zss=tist _mutexam22>>L161"> 161 /a>}>L120" class="+code=cpu_hotbuild_allozo>stist id2>L154" classbuild_allozo>stist >( a href="+code=valid2>L161" class="line" nam2rnel/cpu.c#L161" id2>L161" class="line" nam22>L161"> 161 /a>}>__set_cur="+code=cpu_hotmutex_cpu_hotplug" class="smutex_cpu_ho>( a   a href="+code=nb" zo>stist _mutexel/cpu.c#L135" zss=tist _mutexam22>>L161"> 161 /a>}>noti>L125"> 1250>L23" class="li4elass42 hrefCPU */L194"> 1940> 1940>L25" class="li4"line42 class="sref">raw_notifier_cc cl);>L174" class="line" nam22>L174"> 1740         a4f="+code=4CONFIG_SMP" class="sref"4line"42am22>L126"> 126 /a>static voi4comment">4/* Serializes the update4lass=426( a href="+ca>. a href="+code=a" clL135" clane" nacpu.c#L49" id2>Lid2>L135" clane" nacref"22>L117"> 117 /a>          4c     a h4DEFINE_MUTEX" class="sre4"line42f">mutex_lock /a>(&amcpu.c#L151" id2ernel/cpu.c#L178" ernref"22> a href="+code=rEBUSY#L89" id2>L89" EBUSYam22>L176"> 176 /a>}>L29" class="li4f">cp42 class="sref">nr_callgoL10el/cpu.c#L161" out/cpu.c#L176" idoutam22>L176"> 176 /a>}>4/* /spaon>m4tex_unlock /a>>L125"> 1250>L131" class4"line43am22>L171"> 1710void  a hr4ka href="4c#L132" id2>L132" class=4line"43sref">cpu_maps_update_begin ernel/cpu.c#L178" ernref"__raw_notifier_calla heu4" class="line" ,el/cpu.c#L161" " c92" class="line" nam22, 02>L174"> 1740         a4 class="c4mment">/* #if CONFIG_HOT4LUG_C43am22>L163"> 1630#ifdef  a 4  a href=4+code=cpu_hotplug_begin"4class43e=nr_a>( a href="+coout/cpu.c#L176" idoutam22:L171"> 1710void  a hr4  a href=4+code=cpu_hotplug_done" 4lass=43 class="sref">raw_notifier_cc cl);>L176" class="line" nam22>L176"> 176 /a>}>/* #else #if CO4FIG_H43el/cpu.c#L196am22>Lde=register_cpu_ernel/cpu.c#L178" ernref"65">  650>4c#L137" id2>L137" class=4line"43nam22>L177"> 1770 a href="+4="comment4>/* Need to know about C4Us go43BOL /a>( a href="+coclass="sref">_GPr_cpu_notifier" class="sref">_GPr /a>,el/cpu.c#L161" " c=u4" class="line" a heu4 /a>2>L176"> 176 /a>}>__ref04a>  a43am22>L179"> 179 /a> spao clas4=omment">4.c#L140" id2>L140" class4"line4 nam22#ifdef.a href="+code=a4" clasPM_SLEEP_SMP_UNINTERRUPTIBL"" clasPM_SLEEP_SMPm22>L179"> 179 /a> spao clas4  a href=4+code=ret" class="sref">4et /a44am22>_notifyel/cpu.c#L161" " chref_var_t/cpu.c#L176" id" chref_var_tgister_cpu_notifier frozela hrs/cpu.c#L176" idfrozela hrsref"65">  650>L152"> 1520         a4href="+co4e=ret" class="sref">ret 4a> = 4a hrefl/cpu(unsigned long  aweaotplug" class="s aweaogister_cpu_notifier archlane" na_nonbohra hrs"kernel/cpu.c#L174" iarchlane" na_nonbohra hrs"kerne /a>,l/cp2L176"> 176 /a>}>L114"> 1140         a4urn  a hr4f="+code=ret" class="sre4">ret44nam22>L125"> 1250>L146" class4"line44am22>L126"> 126 /a>static voi4 rnel/cpu4c#L147" id2>L147" class=4line"446( a l/cpu(unsigned long  aweaotplug" class="s aweaogister_cpu_notifier archlane" na_nonbohra hrs"PU l/cpu.c#L174" iarchlane" na_nonbohra hrs"PU  /a>,l/cp2L176"> 176 /a>}>mu>L114"> 1140         a4uel/cpu.c4   int * a href="+code=n4_call44am22>>L125"> 1250>4.c#L150" id2>L150" class4"line4422>L90">  90 /a> spao class="4  a href=4+code=ret" class="sref">4et /a45am22>ael/cpu.c#L151" id2ane" na_nonbohra hrspu.c#L49" id2>Ldne" na_nonbohra hrs /a>,l/cp2L176"> 176 /a>}>L152" class=4line"45sref">L114"> 1140         a4href="+co4e=ret" class="sref">ret 4a> = 4a href="+code=ael/cpu.c#L192" id2>L192" class="line" nam22a>r_cpu_notifier firsra hr/cpu.c#L176" idfirsra hram22a>r_cpu_notifier ernonel/cpu.c#L178" ernonref"22>L>L176"> 176 /a>}> 1940>L155" class=4line"45 class="sref">raw_notifier_cc cl);>L174" class="line" nam22>L174"> 1740         a4urn  a hr4f="+code=notifier_to_err4o" cl4ss="sref">notir_cpu_notifier firsra hr/cpu.c#L176" idfirsra hram22__raw_notifier_calefchref_firsr/cpu.c#L176" id" chref_firsr /a>,el/cpu.c#L161" " c=ernel/chrefl/cpu.c#L174" id2>Lernel/chref /a>2>L176"> 176 /a>}>L157" class4"line456">task_strucp id2>L196" class="line";m22>L27">  27 /a>static  a hre4ernel/cpu4c#L158" id2>L158" class=4line"45like new tasks will ever get this cpu We0p"k>97" clf=" of clasnon-bohreCPUsL187ne" shoc#L10al/cpuraces;m22>L27">  27 /a>static  a hre4eel/cpu.c4code=cpu_notify" class="4ref">45ter Zijlstra0L27">  27 /a>static  a hre4eomment">4.c#L160" id2>L160" class4"line458" i9.*        * Thu3pu.c#L98" id2>L9nam22>L27">  27 /a>static  a hre4urn  a hr4f="+code=__cpu_notify" c4ass="460ref">cpu_maps_update_begin " chref_cleanel/cpu.c#L178" " chref_clean /a>,el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"2>L176"> 176 /a>}>L162" class4"line46sref">cpu_maps_update_begin archlane" na_nonbohra hrs"kernel/cpu.c#L174" iarchlane" na_nonbohra hrs"kerne /a>,2>L176"> 176 /a>}>L163" class=4line"46am22>L163"> 1630#ifdef  a 4ref="+cod4=CONFIG_HOTPLUG_CPU" cla4s="sr46sref">cpu_maps_update_begin 4rneleref">p /a>;>( a h id2>L111" c"keing"am22>L2Dne" nd2>Lnon-bohreCPUsL...\n>"m22>L2>>L161"> 161 /a>}>L165" class=4line"46 class="sref">raw_notifier_cL19_eachlernel/cpu./cpu.c#L176" idf19_eachlernel/cpu.="kerhref="+code=val" c92" class="line" nam22>2>L117"> 117 /a>          4rrn  a hr4+code=cpu_notify_nofail"4class46el/cpu.c#L196sk_struca>. a href="+code=a" c92" class="line" nam222ef="kernel/cpu.c#Lfirsra hr/cpu.c#L176" idfirsra hram222L176"> 176 /a>}>L167" class4"line466schedule /a>();>L161"> 161 /a>}>B4G_ON 46f">mutex_lock /a>(&amcpu.c#L151" id2ernonel/cpu.c#L178" ernonref"22>aw_notifier_calla hernel92" class="line,cpu.c#L192" id2>L192" class="line" nam22, 1>>L161"> 161 /a>}>L169" class4"line46 class="sref">nr_calla>.  a href="+code=rernonel/cpu.c#L178" ernonref"2L176"> 176 /a>}>4_SYMBOL" class="sref">EX4ORT_S46L120" id2>L120" class>cpu_maps_update_begin " chref_sera hr/cpu.c#L176" id" chref_sera hr /a>,cpu.c#L192" id2>L192" class="line" nam22, el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"2>L176"> 176 /a>}>L171" class=4line"47lass="sref">__set_curelse >L117"> 117 /a>          4ernel/cpu4_ref" class="sref">__ref4  472>L82" class="line" n>cpu_maps_update_begin 4rneleref">p /a>;>( a href="+code=valKERN_ERR92" class="lineKERN_ERRunrecijlstra0L2Ernon0p"kd2>LCPU%dadnel:a%d\n>"m22>L2>L153"> 1530          4kernel/cp4.c#L173" id2>L173" class4"line47>schedule /a>();>cpu_maps_update_begin " c92" class="line" nam22, el/cpu.c#L161" ernonel/cpu.c#L178" ernonref"2>L176"> 176 /a>}>nr_cbreak>L176"> 176 /a>}>wake_up_proce>L125"> 1250>noti>L125"> 1250>L177" class4"line47am22>L147"> 147 /a>static int4ode=EXPOR4_SYMBOL" class="sref">EX4ORT_S47>( a href="+code=cpu_notify"archlane" na_nonbohra hrs"PU l/cpu.c#L174" iarchlane" na_nonbohra hrs"PU  /a>,2>L176"> 176 /a>}>L179" class=4line"47am22>L179"> 179 /a> spao clas4="comment4>/** /spaon>L12a>.  a href="+code=rernonel/cpu.c#L178" ernonref"2 >L117"> 117 /a>          4="comment4> * clear_tasks_mm_cpuma4k - S48lass="sref">__set_cura href="+code=r class="sref">cpu_notify /a>( a href="+code=valnumkernel/cpu.c#L89" id2>L89" numkernel/cpu.c nam2222>L2 1>>L161"> 161 /a>}> * @cpu: a CPU id0L82" class="line" nijlstra09sure clasines wonnel/ct be en" ned by somene" else 9nam22>L27">  27 /a>static  a hre4="comment4> *0Lid2>L135" clane" nacref"22>1>L161"> 161 /a>}> * This funcptio walks 4ll pr48e=nr_calls" c>relse >L117"> 117 /a>          4="comment4> * then clears a corres4ondin48="sref">wake_up_proces_update_begin 4rneleref">p /a>;>( a href="+code=valKERN_ERR92" class="lineKERN_ERRunrecijlstra0L2Non-bohreCPUsLarea hreane" nac\n>"m22>L2>>L161"> 161 /a>}> * trivial, there are v4rious48s="sref">noti>L125"> 1250> * tries to solve in a 4afe m486( a href="+code=cpu_notify"c cl);>L176" class="line" nam22>L176"> 176 /a>}> * /spaon>mutex_lockam22>Lde=register_cpu_ernonel/cpu.c#L178" ernonref">L176"> 176 /a>}> * Also note that the f4ncpti48am22>>L125"> 1250> * be called only for a4 alre4822>L90">  90 /a> spao class="4="comment4> */ /spaon>,l/cp2L176"> 176 /a>}>L114"> 1140         a4kernel/cp4.c#L193" id2>L193" class4"line49 href>L125"> 1250> 1940>L195" class=4line"49="srel/cpu(unsigned long  aweaotplug" class="s aweaogister_cpu_notifier archlen" ne_nonbohra hrs"PU l/cpu.c#L174" iarchlen" ne_nonbohra hrs"PU  /a>,l/cp2L176"> 176 /a>}>/* /spaon> 1140         a4k"comment4>         * This funcpti4 is c49nam22>L177"> 1770 a href="+4e"comment4>         * offline, so 4ts no49am22>L158"> 158 /a>static int4eernel/cp4>         * their mm mas4. -- 4eter Zl/cpu(unsigned long  a74" plug" class="s arregister_cpu_notifier en" ne_nonbohra hrsel/cpu.c#L178" en" ne_nonbohra hrs /a>,l/cp2L176"> 176 /a>}>49nam22>L160"> 1600        re5="comment5> * Note that theoretica5ly, t50>L176"> 176 /a>}> * - Refcount goes to z5ro, l50am22>L152"> 1520         a5="comment5> *   writer. /spaon>L27">  27 /a>static  a hre5="comment5> * - Last reader unlock5 the 50sref">cpu_maps_update_begin c cl);>L174" class="line" nam22>L174"> 1740         a5=4comment5>#L195" id2>L195" class=5s at 50 class="sref">raw_notifier_c" clL135" clane" nacpu.c#L49" id2>Lid2>L135" clane" nacref"22>L>L176"> 176 /a>}>omment">/* /spaon>. a href="+code=a" chref_empcsref">val /a>,  a hhref_empcs /a>,el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"22L176"> 176 /a>}>         * This funcpti5o sle506schedule /a>();>L176"> 176 /a>}> * /spaon> 158 /a>static int5=8comment5>         * their mm mas5 diff50hotplug0. a href="+code=a4rneleref">p /a>;>( a href="+code=valKERN_INFO92" class="lineKERN_INFOunrecijlstra0L2En" nd2>Lnon-bohreCPUsL...\n>"m22>L2>>L161"> 161 /a>}>*        * Thu3pu.c#L985 ao a5022>L90">  90 /a> spao class="5="comment5> * /spaon>cpu_maps_update_begin archlen" ne_nonbohra hrs"kernel/cpu.c#L174" iarchlen" ne_nonbohra hrs"kerne /a>,>>L161"> 161 /a>}> */ /spaon> 1520         a5="comment5+code=cpu_hotplug_begin"5class51 href="+code=__raw_notifier_f19_eachlpu./cpu.c#L176" idf19_eachl hr /a>,cpu.c#L192" id2>L192" class="line" nam22, el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"2 >L117"> 117 /a>          5="comment5.c#L114" id2>L114" class5"line51e=nr_calls" class="srcpu.c#L151" id2ernonel/cpu.c#L178" ernonref"22>aw_notifier_calla heu4" class="line" ,el/cpu.c#L161" " c92" class="line" nam22, 1>>L161"> 161 /a>}>cp51="sref">wake_up_procea>.  a href="+code=rernonel/cpu.c#L178" ernonref"2 >L117"> 117 /a>          5ernel/cpu5c#L116" id2>L116" class=5line"51el/cpu.c#L196sk_strucug0. a href="+code=a4rneleref">p /a>;>( a href="+code=valKERN_INFO92" class="lineKERN_INFOunrecijlstra0L2CPU%dais up\n>"m22>L2>nel/cpu.c#L161" " c92" class="line" nam22>>L161"> 161 /a>}> 161 /a>}>mutex_lock /a>(&am>L177"> 1770 a href="+5=8comment5a href="+code=likely" cl5ss="s51 class="sref">nr_callaw_notifier_cal4rneleref">p /a>;>( a href="+code=valKERN_WARNING_UNINTERRUPTIBLKERN_WARNINGunregi id2>L111" c"keing"am22>L2Ernon0p"kd2>LCPU%daup:a%d\n>"m22>L2>ps_update_begin " c92" class="line" nam22, el/cpu.c#L161" ernonel/cpu.c#L178" ernonref"2>L176"> 176 /a>}> 1250>L171"> 1710void  a hr5cpu_maps_update_begin archlen" ne_nonbohra hrs"PU l/cpu.c#L174" iarchlen" ne_nonbohra hrs"PU  /a>,2>L176"> 176 /a>}>L23" class="li5elass52am22>L163"> 1630#ifdef  a 5t;cpu_maps_update_begin c chref_cleanel/cpu.c#L178" " chref_clean /a>,el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"2>L176"> 176 /a>}>L25" class="li5"line5222>L7el/cpu.c#L161" out/cpu.c#L176" idoutam22:L171"> 1710void  a hr5f="+code=5CONFIG_SMP" class="sref"5line"52s="sref">notir_cpu_notifier c cl);>L176" class="line" nam22>L176"> 176 /a>}>5/* Serializes the update5lass=52nam22>L177"> 1770 a href="+5c     a h5DEFINE_MUTEX" class="sre5"line52am22>L158"> 158 /a>static int5nel/cpu.c5#L29" id2>L29" class="li5f">cp52 clas_notify /a>(unsigned long  ainit/cpu.c#L176" id ainitgister_cpu_notifier alloc_frozela hrs/cpu.c#L176" idalloc_frozela hrs /a>,l/cp2L176"> 176 /a>}>5/* /spaon>m52nam22>L160"> 1600        re5kernel/cp5.c#L131" id2>L131" class5"line53>,  a href="+code=nb" frozela hrs/cpu.c#L176" idfrozela hrsref", el/cpu.c#L161" GFP_KERNEr_cpu_notifier" GFP_KERNErref"|(unsigned long  aGFP_ZERO92" class="line aGFP_ZEROref"22L176"> 176 /a>}>L132" class=5line"532>L82" class="line" nam22>Ld a href="+code=rENOMEM_cpu_notifier" cNOMEMref">L176"> 176 /a>}>/* #if CONFIG_HOT5LUG_C53 href="+code=am22>LdL>L176"> 176 /a>}>L177"> 1770 a href="+5  a href=5+code=cpu_hotplug_done" 5lass=5322>L7el/cpu.c#L161" coreainitine"/cpu.c#L176" id2oreainitine" /a>,el/cpu.c#L161" alloc_frozela hrs/cpu.c#L176" idalloc_frozela hrs /a>2>L176"> 176 /a>}>/* #else #if CO5FIG_H53am22>L126"> 126 /a>static voi5 omment">5c#L137" id2>L137" class=5line"53nam22p id2>L196" class="line";m22>L27">  27 /a>static  a hre5="comment5>/* Need to know about C5Us go53like new tasks will ever get* Prever =amgularsine L135" c fromuracd2>Lwith clasfreezer, by dne" nd2>Line;m22>L27">  27 /a>static  a hre5=el/cpu.c5ref" class="sref">__ref05a>  a53ter Zijlstra0L27">  27 /a>static  a hre5=omment">5.c#L140" id2>L140" class5"line538" i9.*        * Thu3pu.c#L9*187"continue until any curru.cly runnd2>Line L135" c operac#L9 gets;m22>L27">  27 /a>static  a hre5  a href=5+code=ret" class="sref">5et /a54am22>.*        * Thu3pu.c#L9*1hu3pleted.;m22>L27">  27 /a>static  a hre5 a href="5e=cpu_maps_update_begin"5class54am22>.*        * Thu3pu.c#L9*1To modify8clasnel/cid2>L135" clane" nacnel/c flag, we need#L10acref="8cla;m22>L27">  27 /a>static  a hre5 class="c5e=ret" class="sref">ret 5a> = 5a href.*        * Thu3pu.c#L9*1nel/cid2> class="line" nnel/c. And#Lhis slasee" n1is also0p"k>n by clasamgular;m22>L27">  27 /a>static  a hre5  a href=5e=cpu_maps_update_done" 5lass=54nam22.*        * Thu3pu.c#L9*1ine L135" c path and#releas>d spay aft" L1ef=L27">  27 /a>static  a hre5  a href=5f="+code=ret" class="sre5">ret54nam22.*        * Thu3pu.c#L9*1(and#hence8clasfreezer)Lwill be" n1here until any curru.cly runnd2>Line;m22>L27">  27 /a>static  a hre5 o class=5.c#L146" id2>L146" class5"line54am22>ijlstra0L27">  27 /a>static  a hre5 omment">5c#L147" id2>L147" class=5line"54nam22p id2>L196" class="lin 9nam22>L27">  27 /a>static  a hre5h"comment5code=__cpu_notify" class5"sref54f">mul/cpu(unsigned long id2>L135" clane" na_beforeafreezepu.c#L49" id2>Lid2>L135" clane" na_beforeafreeze /a>,l/cp2L176"> 176 /a>}> 1600        re5homment">5.c#L150" id2>L150" class5"line54ex_unlock /a>(& a href="ga>();>L174" class="line" nam22>L174"> 1740         a5  a href=5+code=ret" class="sref">5et /a550ref">cpu_maps_update_begin " clL135" clane" nacpu.c#L49" id2>Lid2>L135" clane" nacref"22>1>L161"> 161 /a>}>L152" class=5line"55sref">cpu_maps_update_begin c cl);>L176" class="line" nam22>L176"> 176 /a>}>ret 5a> = 55 href>L125"> 1250> 1940>L155" class=5line"55am22>L165"> 1650static voi5urn  a hr5f="+code=notifier_to_err5o" cl55am22>ijlstra0L27">  27 /a>static  a hre5kernel/cp5.c#L157" id2>L157" class5"line55nam22p id2>L196" class="lin 9 When p"u /Lhave"been phawed,#re-en" ne=amgularsine L135" c (whichLhad"been;m22>L27">  27 /a>static  a hre5k"comment5c#L158" id2>L158" class=5line"55like new tasks will ever get*eane" nac while"bene"nd2>Lcosfreeze p"u /).;m22>L27">  27 /a>static  a hre5eel/cpu.c5code=cpu_notify" class="5ref">55ter Zijlstra0L27">  27 /a>static  a hre5eomment">5.c#L160" id2>L160" class5"line558" i9l/cpu(unsigned long id2>L135" clen" ne_aft" _phawpu.c#L49" id2>Lid2>L135" clen" ne_aft" _phaw /a>,l/cp2L176"> 176 /a>}> 117 /a>          5urnel/cpu5.c#L162" id2>L162" class5"line56sref">cpu_maps_update_begin ga>();>L174" class="line" nam22>L174"> 1740         a5uref="+co5c#L163" id2>L163" class=5line"56 href="+code=__raw_notifier_" clL135" clane" nacpu.c#L49" id2>Lid2>L135" clane" nacref"22>L>L176"> 176 /a>}>cpu_maps_update_begin c cl);>L176" class="line" nam22>L176"> 176 /a>}>L165" class=5line"56nam22>L125"> 1250>L126"> 126 /a>static voi5kernel/cp5.c#L167" id2>L167" class5"line56nam22p id2>L196" class="line";m22>L27">  27 /a>static  a hre5rrnel/cpu5e=BUG_ON" class="sref">B5G_ON 56like new tasks will ever get*eWhen ine"bac /Lforsine L135" c ="linecac#L9/Lareabed2>Lexecuted,#we musr /22>L27">  27 /a>static  a hre5rel/cpu.c5.c#L169" id2>L169" class5"line56ter Zijlstra0Lfrozel /22>L27">  27 /a>static  a hre5romment">5_SYMBOL" class="sref">EX5ORT_S568" i9.*        * Thu3pu.c#L9*1ors="l,10sereported by clasnolinecac#L9,#remai9/Lunchanged *throughout18la;m22>L27">  27 /a>static  a hre5ernel/cpu5c#L171" id2>L171" class=5line"57am22>.*        * Thu3pu.c#L9*1durac#L9* of clasexecut#L9 of clasine"bac /.;m22>L27">  27 /a>static  a hre5ernel/cpu5_ref" class="sref">__ref5  57am22>.*        * Thu3pu.c#L9*1Hence8we need#L10prever =clasfreezer fromuracd2>Lwith amgularsine L135" c.;m22>L27">  27 /a>static  a hre5eref="+co5.c#L173" id2>L173" class5"line57 href.*        * Thu3pu.c#L9*;m22>L27">  27 /a>static  a hre5eef="+cod5e=cpu_maps_update_begin"5class57nam22.*        * Thu3pu.c#L9*1This synchronizac#L9 is i3plepu.ced by mutune"ysexcludd2>Lamgularsine;m22>L27">  27 /a>static  a hre5ern  a hr5e=raw_notifier_chain_unr5giste57nam22.*        * Thu3pu.c#L9*1L135" c  nd#Suspend/Hibstas=" ef=" paths by hookd2>Lon87"clasSuspend/;m22>L27">  27 /a>static  a hre5ern  a hr5e=cpu_maps_update_done" 5lass=57am22>ijlstra0L27">  27 /a>static  a hre5eernel/cp5.c#L177" id2>L177" class5"line57nam22p id2>L196" class="lin 9nam22>L27">  27 /a>static  a hre5ode=EXPOR5_SYMBOL" class="sref">EX5ORT_S57>( a _notify /a7">  27 /a>static  a hre5oel/cpu.c5c#L179" id2>L179" class=5line"57am22>__raw_notifier_" clL135" clpm_ine"bac pu.c#L49" id2>Lid2>L135" clpm_ine"bac  nam2strucl/cpu.c#L151" id2n"line" _bu_hotplug" class="sn"line" _bu_horef">*cpu.c#L151" id2nbtplug" class="snbref",7">  27 /a>static  a hre5oomment">5>/** /spaon>L120" class>cpu_mapid * a hrlo2>Lel/cpu.c#L161" acc#L9/cpu.c#L176" idacc#L9ref", l/cpu*cpu.c#L151" id2ptr/cpu.c#L176" idptr /a>27">  27 /a>static  a hre5="comment5> * clear_tasks_mm_cpuma5k - S58am22>>L117"> 117 /a>          5="comment5> * @cpu: a CPU id0L82" class=switchL,el/cpu.c#L161" acc#L9/cpu.c#L176" idacc#L9ref"2 >L117"> 117 /a>          5="comment5> *0 1630#ifdef  a 5=ef="+cod5> * This funcptio walks 5ll pr58e=nr_calls" ccas> el/cpu.c#L161" PM_SUSPEND_PREPARE/cpu.c#L176" idPM_SUSPEND_PREPAREam22:L171"> 1710void  a hr5="comment5> * then clears a corres5ondin58="sref">wake_cas> el/cpu.c#L161" PM_HIBERNATION_PREPARE/cpu.c#L176" idPM_HIBERNATION_PREPAREam22:L171"> 1710void  a hr5=rn  a hr5> * trivial, there are v5rious58el/cpu.c#L196sk_struc(unsigned long id2>L135" clane" na_beforeafreezepu.c#L49" id2>Lid2>L135" clane" na_beforeafreeze /a>,2>L176"> 176 /a>}> * tries to solve in a 5afe m586schedule /a>();>L176"> 176 /a>}> * /spaon> 158 /a>static int5=el/cpu.c5> * Also note that the f5ncpti588x_unlock /a>cas> el/cpu.c#L161" PM_POST_SUSPEND/cpu.c#L176" idPM_POST_SUSPENDam22:L171"> 1710void  a hr5=omment">5> * be called only for a5 alre58ex_unlock /a>cas> el/cpu.c#L161" PM_POST_HIBERNATION/cpu.c#L176" idPM_POST_HIBERNATIONam22:L171"> 1710void  a hr5="comment5> */ /spaon>__set_cura href="+code=rid2>L135" clen" ne_aft" _phawpu.c#L49" id2>Lid2>L135" clen" ne_aft" _phaw /a>,2>L176"> 176 /a>}>L176"> 176 /a>}>L193" class5"line59am22>L163"> 1630#ifdef  a 5uct  a hr5f="+code=task_struct" cl5ss="s59e=nr_calls" cdefault:L171"> 1710void  a hr5="comment5c#L195" id2>L195" class=5line"59="sref">wake_up_proceam22>Lde=register_cpu_NOTIFY_DONE_UNINTERRUPTIBLNOTIFY_DONEref">L176"> 176 /a>}>/* /spaon>noti>L125"> 1250>         * This funcpti5 is c59am22>L147"> 147 /a>static int5e"comment5>         * offline, so 5ts no59f">mutex_lockam22>Lde=register_cpu_NOTIFY_OK_UNINTERRUPTIBLNOTIFY_OKref">L176"> 176 /a>}>         * their mm mas5. -- 59am22>>L125"> 1250>5922>L90">  90 /a> spao class="6="comment6> * Note that theoretica6ly, t60am22>L171"> 1710void  a hr6="comment6> * - Refcount goes to z6ro, l60am22>_notify /a>(unsigned long  ainit/cpu.c#L176" id ainitgister_cpu_notifier id2>L135" clpm_syncainit/cpu.c#L176" idid2>L135" clpm_syncainit /a>,l/cp2L176"> 176 /a>}> *   writer. /spaon> 117 /a>          6="comment6> * - Last reader unlock6 the 60sref">cpu_maps_update_begin pm_n"line" /cpu.c#L176" idpm_n"line"  /a>,el/cpu.c#L161" " clL135" clpm_ine"bac pu.c#L49" id2>Lid2>L135" clpm_ine"bac  nam, 02>L174"> 1740         a6=4comment6>#L195" id2>L195" class=6s at 60 class="sref"am22>LdL>L176"> 176 /a>}>omment">/* /spaon>L125"> 1250>,el/cpu.c#L161" id2>L135" clpm_syncainit/cpu.c#L176" idid2>L135" clpm_syncainit /a>2>L174"> 1740         a6=7comment6>         * offline, so 6l/cpu60am22>L158"> 158 /a>static int6=8comment6>         * their mm mas6 diff60ter ZCPU */=_jlstra0L27">  27 /a>static  a hre6=9comment6>*        * Thu3pu.c#L986 ao a6022>L90">  90 /a> spao class="6="comment6> * /spaon>  27 /a>static  a hre6="comment6> */ /spaon>L27">  27 /a>static  a hre6="comment6+code=cpu_hotplug_begin"6class61 href.*        * Thu3pu.c#L9*1@  a: ipuacl itjust _nortacre22>L27">  27 /a>static  a hre6="comment6.c#L114" id2>L114" class6"line61nam22.*        * Thu3pu.c#L9*re22>L27">  27 /a>static  a hre6=4comment6e=cpu_hotplug" class="sr6f">cp61nam22.*        * Thu3pu.c#L9*1This funcc#L9 ef="s clasi hechain n"line" sLwith ine_STARTING.;m22>L27">  27 /a>static  a hre6ernel/cpu6c#L116" id2>L116" class=6line"61am22>ijlstra0L27">  27 /a>static  a hre6e6comment6 href="kernel/cpu.c#L1176 id2>61nam22p id2>L196" class="lin 9 en" nesL18t" rupts  nd#before clas>"bohr>" ipuaam22>Ls fromu_L27">  27 /a>static  a hre6      a h6ef="+code=mutex_lock" cl6ss="s61like new tasks will ever get*nam22>L27">  27 /a>static  a hre6=8comment6a href="+code=likely" cl6ss="s61ter Zl/cpu(unsigned long  a  ainit/cpu.c#L176" id a  ainitgister_cpu_notifier n"liny,id * a hrnel/cpu.c#L151" id2" c92" class="line" nam222L176"> 176 /a>}> 1600        re6_id * a hrlo2>Lel/cpu.c#L161" va"/cpu.c#L176" idva"ref"22>el/cpu.c#L161" ine_STARTING/cpu.c#L176" idine_STARTINGref">L176"> 176 /a>}>L152"> 1520         a6nel/cpu.c6LL23" id2>L23" class="li6elass62am22>#ifdef.el/cpu.c#L161" i" clasPM_SLEEP_SMP_UNINTERRUPTIBL"" clasPM_SLEEP_SMPm22>L179"> 179 /a> spao clas6t;cpu_mapa>. a href="+code=afrozela hrs/cpu.c#L176" idfrozela hrsref" !f="kernel/cpu.c#Lid2>L161" class="line" nam2   a h  a hps_update_begin c chref_tesra hr/cpu.c#L176" idc chref_tesra hr /a>,el/cpu.c#L161" id292" class="line" nam22, el/cpu.c#L161" frozela hrs/cpu.c#L176" idfrozela hrsref"22L176"> 176 /a>}>L25" class="li6"line62="sref">wake_up_proces_update_begin va"/cpu.c#L176" idva"ref"22>el/cpu.c#L161" ine_STARTING_FROZEN/cpu.c#L176" idine_STARTING_FROZENref">L176"> 176 /a>}>L27">  27 /a>static  a hre6comment">6/* Serializes the update6lass=626( a href="+code=cpu_notify"c cln"liny/cpu.c#L176" idid2>n"liny /a>,el/cpu.c#L161" va"/cpu.c#L176" idva"ref", (l/cpu*)(lo2>)cpu.c#L151" id2" c92" class="line" nam222>L176"> 176 /a>}>>L125"> 1250>L29" class="li6f">cp62am22>L179"> 179 /a> spao clas6comment">6/* /spaon>m62nam22CPU */=_jlstra0L27">  27 /a>static  a hre6kernel/cp6.c#L131" id2>L131" class6"line63am22>L171"> 1710void  a hr6ka href="6c#L132" id2>L132" class=6line"63am22>.*        * Thu3pu.c#Le";m22>L27">  27 /a>static  a hre6 class="c6mment">/* #if CONFIG_HOT6LUG_C63 href.*        * Thu3pu.c#L9*1id2>bit>bitmap[]1is a special,s>"hu3pressed>" data struclure cl i;m22>L27">  27 /a>static  a hre6 ;L27">  27 /a>static  a hre6  a href=6+code=cpu_hotplug_done" 6lass=63nam22.*        * Thu3pu.c#L9*;m22>L27">  27 /a>static  a hre6 rnel/cpu6comment">/* #else #if CO6FIG_H63am22>ijlstra0L27">  27 /a>static  a hre6 omment">6c#L137" id2>L137" class=6line"63nam22p id2>L196" class="lint* href va"ueacl ithas a single"bit _et spay.;m22>L27">  27 /a>static  a hre6      a h6>/* Need to know about C6Us go63like new tasks will ever get*nam22>L27">  27 /a>static  a hre6kel/cpu.c6ref" class="sref">__ref06a>  a63am22>L179"> 179 /a> spao clas6=omment">6.c#L140" id2>L140" class6"line638" i9.*        * Thu3pu.c#L/*1id2>bit>bitmap[0]1is empcs - so8we c   bac rneloL1ef*nam22>L27">  27 /a>static  a hre6  a href=6+code=ret" class="sref">6et /a64am22>#deflascode=cpu_notify"MASK_DECLARE_192" class="lineMASK_DECLARE_1 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>ref="+c[el/cpu.c#L161" xel/cpu.c#L135" xam22+1][0]1= (1UL <<. a href="+code=axel/cpu.c#L135" xam22>2L176"> 176 /a>}>#deflascode=cpu_notify"MASK_DECLARE_292" class="lineMASK_DECLARE_2 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>ref="+code=cpu_notify"MASK_DECLARE_192" class="lineMASK_DECLARE_1 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>, el/cpu.c#L161" MASK_DECLARE_192" class="lineMASK_DECLARE_1 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22+12L176"> 176 /a>}>ret 6a> = 6a href#deflascode=cpu_notify"MASK_DECLARE_492" class="lineMASK_DECLARE_4 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>ref="+code=cpu_notify"MASK_DECLARE_292" class="lineMASK_DECLARE_2 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>, el/cpu.c#L161" MASK_DECLARE_292" class="lineMASK_DECLARE_2 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22+22L176"> 176 /a>}>ref="+code=cpu_notify"MASK_DECLARE_492" class="lineMASK_DECLARE_4 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22>, el/cpu.c#L161" MASK_DECLARE_492" class="lineMASK_DECLARE_4 /a>,el/cpu.c#L161" xel/cpu.c#L135" xam22+42L176"> 176 /a>}>ret64am22>L165"> 1650static voi6 o class=6.c#L146" id2>L146" class6"line64am22>con_n_id * a hrlo2>Lel/cpu.c#L161" id2>bit>bitmap/cpu.c#L176" idid2>bit>bitmapm22>[el/cpu.c#L161" BITS_PER_LONG/cpu.c#L176" idBITS_PER_LONGam22+1][el/cpu.c#L161" BITS_TO_LONGS/cpu.c#L176" idBITS_TO_LONGS /a>,el/cpu.c#L161" NR_ineSL161" class="linR_ineSam22>]1= >L160"> 1600        re6 omment">6c#L147" id2>L147" class=6line"64am22>L147"> 147 /a>static int6h"comment6code=__cpu_notify" class6"sref64>( a href="+code=cpu_notify"MASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,0>, f="+code=cpu_notify"MASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,8),7">  27 /a>static  a hre6uel/cpu.c6   int * a href="+code=n6_call64hotplug0. a href="+code=aMASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,16>, f="+a href="+code=aMASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,24),7">  27 /a>static  a hre6uomment">6.c#L150" id2>L150" class6"line64nam22#ifra href="+code=r ITS_PER_LONG/cpu.c#L176" idBITS_PER_LONGam2222>L2 327">  27 /a>static  a hre6  a href=6+code=ret" class="sref">6et /a650ref">cpu_maps_update_begin MASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,32>, f="+a href="+code=aMASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,40),7">  27 /a>static  a hre6ernel/cpu6c#L152" id2>L152" class=6line"65sref">cpu_maps_update_begin MASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,48>, f="+a href="+code=aMASK_DECLARE_892" class="lineMASK_DECLARE_8 /a>,56),7">  27 /a>static  a hre6eclass="c6e=ret" class="sref">ret 6a> = 65 hrefCPU */7">  27 /a>static  a hre6e;L176"> 176 /a>}>L155" class=6line"6522>L7el/cpu.c#L161" class="sref">_GPr_cpu_notifier" class="sref">_GPr /a>,el/cpu.c#L161" " c=bit>bitmap/cpu.c#L176" idid2>bit>bitmapm22>2>L176"> 176 /a>}>L126"> 126 /a>static voi6kernel/cp6.c#L157" id2>L157" class6"line65nam22con_n_el/cpu.c#L161" DECLARE_BITMAP_UNINTERRUPTIBLDECLARE_BITMAP /a>,el/cpu.c#L161" " c=all>bits/cpu.c#L176" id" c=all>bitsam22, el/cpu.c#L161" NR_ineSL161" class="linR_ineSam22>22>el/cpu.c#L161" ine_BITS_A2>L161" class="liine_BITS_A2>ref">L176"> 176 /a>}>L158" class=6line"65BOL /a>( a href="+coclass="sref">_cpu_notifier" class="sref"> /a>,el/cpu.c#L161" " c=all>bits/cpu.c#L176" id" c=all>bitsam222>L176"> 176 /a>}>65am22>L179"> 179 /a> spao clas6eomment">6.c#L160" id2>L160" class6"line65nam22#ifdef.a href="+code=a4" clasINIT_A2>_POSSIBLE_UNINTERRUPTIBL4" clasINIT_A2>_POSSIBLEm22>L179"> 179 /a> spao clas6urn  a hr6f="+code=__cpu_notify" c6ass="66am22>_notifyel/cpu.c#L161" DECLARE_BITMAP_UNINTERRUPTIBLDECLARE_BITMAP /a>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam22, el/cpu.c#L161" 4" clasNR_ineSL161" class="li4" clasNR_ineSam22>2(unsigned long  aread_mostly/cpu.c#L176" id aread_mostlym22>L179"> 179 /a> spao clas6urnel/cpu6.c#L162" id2>L162" class6"line66sref">cpu_map2>el/cpu.c#L161" ine_BITS_A2>L161" class="liine_BITS_A2>ref">L176"> 176 /a>}>L163" class=6line"66 hrefCPlseL176"> 176 /a>}>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam22, el/cpu.c#L161" 4" clasNR_ineSL161" class="li4" clasNR_ineSam22>2(unsigned long  aread_mostly/cpu.c#L176" id aread_mostlym22>>L176"> 176 /a>}>L165" class=6line"66nam22CPU */7">  27 /a>static  a hre6rrn  a hr6+code=cpu_notify_nofail"6class66am22>con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*con_n_el/cpu.c#L161" " c=possi na_hrefl/cpu.c#L174" id2>Lpossi na_hrefref"22>el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam222>L176"> 176 /a>}>L167" class6"line666scheel/cpu.c#L161" class="sref">_cpu_notifier" class="sref"> /a>,el/cpu.c#L161" " c=possi na_hrefl/cpu.c#L174" id2>Lpossi na_hrefref"2>L176"> 176 /a>}>B6G_ON 66am22>L158"> 158 /a>static int6rel/cpu.c6.c#L169" id2>L169" class6"line668ref"_notifyel/cpu.c#L161" DECLARE_BITMAP_UNINTERRUPTIBLDECLARE_BITMAP /a>,el/cpu.c#L161" " c=ernel/cbits/cpu.c#L176" id" c=ernel/cbitsam22, el/cpu.c#L161" 4" clasNR_ineSL161" class="li4" clasNR_ineSam22>2(unsigned long  aread_mostly/cpu.c#L176" id aread_mostlym22>>L176"> 176 /a>}>6_SYMBOL" class="sref">EX6ORT_S668" i9con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*con_n_el/cpu.c#L161" " c=ernel/chrefl/cpu.c#L174" id2>Lernel/chref /a>22>el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=ernel/cbits/cpu.c#L176" id" c=ernel/cbitsam222>L176"> 176 /a>}>L171" class=6line"67am22>.l/cpu.c#L161" class="sref">_cpu_notifier" class="sref"> /a>,el/cpu.c#L161" " c=ernel/chrefl/cpu.c#L174" id2>Lernel/chref /a>2>L176"> 176 /a>}>__ref6  67am22>L152"> 1520         a6eref="+co6.c#L173" id2>L173" class6"line67 href_notifyel/cpu.c#L161" DECLARE_BITMAP_UNINTERRUPTIBLDECLARE_BITMAP /a>,el/cpu.c#L161" " c=presu.c_bits/cpu.c#L176" id" c=presu.c_bitsam22, el/cpu.c#L161" 4" clasNR_ineSL161" class="li4" clasNR_ineSam22>2(unsigned long  aread_mostly/cpu.c#L176" id aread_mostlym22>>L176"> 176 /a>}>*con_n_el/cpu.c#L161" " c=presu.c_hrefl/cpu.c#L174" id2>Lpresu.c_hrefref"22>el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=presu.c_bits/cpu.c#L176" id" c=presu.c_bitsam222>L176"> 176 /a>}>L7el/cpu.c#L161" class="sref">_cpu_notifier" class="sref"> /a>,el/cpu.c#L161" " c=presu.c_hrefl/cpu.c#L174" id2>Lpresu.c_hrefref"2>L176"> 176 /a>}>L126"> 126 /a>static voi6eernel/cp6.c#L177" id2>L177" class6"line67nam22_notifyel/cpu.c#L161" DECLARE_BITMAP_UNINTERRUPTIBLDECLARE_BITMAP /a>,el/cpu.c#L161" " c=acc#v/cbits/cpu.c#L176" id" c=acc#v/cbitsam22, el/cpu.c#L161" 4" clasNR_ineSL161" class="li4" clasNR_ineSam22>2(unsigned long  aread_mostly/cpu.c#L176" id aread_mostlym22>>L176"> 176 /a>}>EX6ORT_S67>( a con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*con_n_el/cpu.c#L161" " c=acc#v/chrefl/cpu.c#L174" id2>Lacc#v/chrefref"22>el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=acc#v/cbits/cpu.c#L176" id" c=acc#v/cbitsam222>L176"> 176 /a>}>L179" class=6line"67am22>__raw_notifier_class="sref">_cpu_notifier" class="sref"> /a>,el/cpu.c#L161" " c=acc#v/chrefl/cpu.c#L174" id2>Lacc#v/chrefref"2>L176"> 176 /a>}>6>/** /spaon>  90 /a> spao class="6="comment6> * clear_tasks_mm_cpuma6k - S680schel/cpu(unsigned long sera hrLpossi nal/cpu.c#L174" isera hrLpossi na /a>,id * a hrnel/cpu.c#L151" id2" c92" class="line" nam22, el/cpu.c#L161" boo"/cpu.c#L176" idboo"ref"2el/cpu.c#L161" possi nal/cpu.c#L174" ipossi na /a>2L176"> 176 /a>}> * @cpu: a CPU id0L114"> 1140         a6="comment6> *02L176"> 176 /a>}> * This funcptio walks 6ll pr68e=nr_calls" chref="+code=cpu_notify"c chref_sera hr/cpu.c#L176" idc chref_sera hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam2222>L176"> 176 /a>}> * then clears a corres6ondin68="sref">wake_PlseL176"> 176 /a>}> * trivial, there are v6rious68el/cpu.c#L196sk_struc(unsigned long id2href_cleana hr/cpu.c#L176" idc chref_cleana hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam2222>L176"> 176 /a>}> * tries to solve in a 6afe m68nam22>L177"> 1770 a href="+6="comment6> * /spaon> 158 /a>static int6=el/cpu.c6> * Also note that the f6ncpti68ter Zl/cpu(unsigned long sera hrLpresu.cl/cpu.c#L174" isera hrLpresu.c /a>,id * a hrnel/cpu.c#L151" id2" c92" class="line" nam22, el/cpu.c#L161" boo"/cpu.c#L176" idboo"ref"2el/cpu.c#L161" presu.cl/cpu.c#L174" ipresu.c /a>2L176"> 176 /a>}>6> * be called only for a6 alre68nam22>L160"> 1600        re6="comment6> */ /spaon>. el/cpu.c#L161" presu.cl/cpu.c#L174" ipresu.c /a>2L176"> 176 /a>}>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=presu.c_bits/cpu.c#L176" id" c=presu.c_bitsam2222>L176"> 176 /a>}>L193" class6"line692"sref">wake_PlseL176"> 176 /a>}>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=presu.c_bits/cpu.c#L176" id" c=presu.c_bitsam2222>L176"> 176 /a>}>L195" class=6line"69nam22>L125"> 1250>/* /spaon> 126 /a>static voi6k"comment6>         * This funcpti6 is c69am22>l/cpu(unsigned long sera hrLernel/l/cpu.c#L174" isera hrLernel/ /a>,id * a hrnel/cpu.c#L151" id2" c92" class="line" nam22, el/cpu.c#L161" boo"/cpu.c#L176" idboo"ref"2el/cpu.c#L161" ernel/l/cpu.c#L174" iernel/ /a>2L176"> 176 /a>}>         * offline, so 6ts no69f">mu>L160"> 1600        re6=el/cpu.c6>         * their mm mas6. -- 6982L176"> 176 /a>}>6 *        * Thu3pu.c#L986 id2>69L120" id2>L120" classode=cpu_notify"c chref_sera hr/cpu.c#L176" idc chref_sera hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=ernel/cbits/cpu.c#L176" id" c=ernel/cbitsam2222>L176"> 176 /a>}> * Note that theoretica7ly, t70> 176 /a>}> * - Refcount goes to z7ro, l702>L82" class="line" node=cpu_notify"c chref_cleana hr/cpu.c#L176" idc chref_cleana hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=ernel/cbits/cpu.c#L176" id" c=ernel/cbitsam2222>L176"> 176 /a>}>c#L193" id2>L193" class7ref="70 href>L125"> 1250> * - Last reader unlock7 the 70="linL194"> 1940>L195" class=7s at 70 clasl/cpu(unsigned long sera hrLacc#v/l/cpu.c#L174" isera hrLacc#v/ /a>,id * a hrnel/cpu.c#L151" id2" c92" class="line" nam22, el/cpu.c#L161" boo"/cpu.c#L176" idboo"ref"2el/cpu.c#L161" acc#v/l/cpu.c#L174" iacc#v/ /a>2L176"> 176 /a>}>omment">/* /spaon>L160"> 1600        re7=6comment7>         * This funcpti7o sle706schedule /a>n>. el/cpu.c#L161" acc#v/l/cpu.c#L174" iacc#v/ /a>2L176"> 176 /a>}>         * offline, so 7l/cpu70f">mutex_lock /a>(&amode=cpu_notify"c chref_sera hr/cpu.c#L176" idc chref_sera hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=acc#v/cbits/cpu.c#L176" id" c=acc#v/cbitsam2222>L176"> 176 /a>}>         * their mm mas7 diff70hotplug0. PlseL176"> 176 /a>}>*        * Thu3pu.c#L987 ao a70L120" id2>L120" classode=cpu_notify"c chref_cleana hr/cpu.c#L176" idc chref_cleana hr /a>,el/cpu.c#L161" " c92" class="line" nam22, el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=acc#v/cbits/cpu.c#L176" id" c=acc#v/cbitsam2222>L176"> 176 /a>}> * /spaon> 1250> */ /spaon> 1520         a7="comment7+code=cpu_hotplug_begin"7class71 hrefl/cpu(unsigned long inita hrLpresu.cl/cpu.c#L174" iinita hrLpresu.c /a>,con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*(unsigned long srcl/cpu.c#L174" isrc /a>2L176"> 176 /a>}>L114" class7"line71nam22>L160"> 1600        re7=4comment7e=cpu_hotplug" class="sr7f">cp71="sref">wake_ode=cpu_notify"c chref_copy/cpu.c#L176" idid2href_copy /a>,el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=presu.c_bits/cpu.c#L176" id" c=presu.c_bitsam222, el/cpu.c#L161" srcl/cpu.c#L174" isrc /a>2>L176"> 176 /a>}>L116" class=7line"71el/cp>L125"> 1250>71am22>L147"> 147 /a>static int7      a h7ef="+code=mutex_lock" cl7ss="s71f">mul/cpu(unsigned long inita hrLpossi nal/cpu.c#L174" iinita hrLpossi na /a>,con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*(unsigned long srcl/cpu.c#L174" isrc /a>2L176"> 176 /a>}> 1600        re7=9comment7   break;>href_copy/cpu.c#L176" idid2href_copy /a>,el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=possi na_bits/cpu.c#L176" id" c=possi na_bitsam222, el/cpu.c#L161" srcl/cpu.c#L174" isrc /a>2>L176"> 176 /a>}>>L125"> 1250>L152"> 1520         a7nel/cpu.c7LL23" id2>L23" class="li7elass72 hrefl/cpu(unsigned long inita hrLernel/l/cpu.c#L174" iinita hrLernel/ /a>,con_n_strucl/cpu.c#L151" id2c chref/cpu.c#L176" idc chrefref">*(unsigned long srcl/cpu.c#L174" isrc /a>2L176"> 176 /a>}>L160"> 1600        re7t"comment7#L25" id2>L25" class="li7"line72="sref">wake_ode=cpu_notify"c chref_copy/cpu.c#L176" idid2href_copy /a>,el/cpu.c#L161" to_c chref/cpu.c#L176" idto_c chref /a>,el/cpu.c#L161" " c=ernel/cbits/cpu.c#L176" id" c=ernel/cbitsam222, el/cpu.c#L161" srcl/cpu.c#L174" isrc /a>2>L176"> 176 /a>}>L125"> 1250>7/* Serializes the update7lass=726( a 
The original LXR softwareaby clas125"> 125http://sourceforge.net/projects/lxr">LXR hu3punityam22, Lhis experipu.cal vers#L9 by 125"> 125mailto:lxr@es ux.no">lxr@es ux.noam22.
lxr.es ux.no kindly hosced by 125"> 125http://www.redpill-es pro.no">Redpill Ls pro ASam22, providerLof Ls ux con_ulting nd#operac#L9s services since 1995.