<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>gulizi</title>
	<atom:link href="http://gulizi.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gulizi.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 15 Dec 2009 21:55:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='gulizi.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>gulizi</title>
		<link>http://gulizi.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gulizi.wordpress.com/osd.xml" title="gulizi" />
	<atom:link rel='hub' href='http://gulizi.wordpress.com/?pushpress=hub'/>
		<item>
		<title>python Attribute Search Summary</title>
		<link>http://gulizi.wordpress.com/2009/12/15/python-attribute-search-summary/</link>
		<comments>http://gulizi.wordpress.com/2009/12/15/python-attribute-search-summary/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 21:55:34 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://gulizi.wordpress.com/2009/12/15/python-attribute-search-summary/</guid>
		<description><![CDATA[Attribute Search Summary This is the long version of the attribute access story, included just for the sake of completeness. When retrieving an attribute from an object (print objectname.attrname) Python follows these steps: If attrname is a special (i.e. Python-provided) attribute for objectname, return it. Check objectname.__class__.__dict__ for attrname. If it exists and is a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=11&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Attribute Search Summary<br />
This is the long version of the attribute access story, included just for the sake of completeness. </p>
<p>When retrieving an attribute from an object (print objectname.attrname) Python follows these steps:</p>
<p>If attrname is a special (i.e. Python-provided) attribute for objectname, return it. </p>
<p>Check objectname.__class__.__dict__ for attrname. If it exists and is a data-descriptor, return the descriptor result. Search all bases of objectname.__class__ for the same case. </p>
<p>Check objectname.__dict__ for attrname, and return if found. If objectname is a class, search its bases too. If it is a class and a descriptor exists in it or its bases, return the descriptor result. </p>
<p>Check objectname.__class__.__dict__ for attrname. If it exists and is a non-data descriptor, return the descriptor result. If it exists, and is not a descriptor, just return it. If it exists and is a data descriptor, we shouldn&#8217;t be here because we would have returned at point 2. Search all bases of objectname.__class__ for same case.</p>
<p>Raise AttributeError </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=11&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/12/15/python-attribute-search-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
		<item>
		<title>Proper Locking Under a Preemptible Kernel</title>
		<link>http://gulizi.wordpress.com/2009/05/24/proper-locking-under-a-preemptible-kernel/</link>
		<comments>http://gulizi.wordpress.com/2009/05/24/proper-locking-under-a-preemptible-kernel/#comments</comments>
		<pubDate>Sun, 24 May 2009 04:45:00 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gulizi.wordpress.com/?p=9</guid>
		<description><![CDATA[http://www.mjmwired.net/kernel/Documentation/preempt-locking.txt A preemptible kernel creates new locking issues.  The issues are the same as 11 those under SMP: concurrency and reentrancy.  Thankfully, the Linux preemptible 12 kernel model leverages existing SMP locking mechanisms.  Thus, the kernel 13 requires explicit additional locking for very few additional situations. 14 15 This document is for all kernel hackers.  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=9&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mjmwired.net/kernel/Documentation/preempt-locking.txt">http://www.mjmwired.net/kernel/Documentation/preempt-locking.txt</a></p>
<p>A preemptible kernel creates new locking issues.  The issues are the same as<br />
<span class="l"><a name="11" href="http://gulizi.wordpress.com/wp-admin/#11">11</a> </span>those under SMP: concurrency and reentrancy.  Thankfully, the Linux preemptible<br />
<span class="l"><a name="12" href="http://gulizi.wordpress.com/wp-admin/#12">12</a> </span>kernel model leverages existing SMP locking mechanisms.  Thus, the kernel<br />
<span class="l"><a name="13" href="http://gulizi.wordpress.com/wp-admin/#13">13</a> </span>requires explicit additional locking for very few additional situations.<br />
<span class="l"><a name="14" href="http://gulizi.wordpress.com/wp-admin/#14">14</a> </span><br />
<span class="l"><a name="15" href="http://gulizi.wordpress.com/wp-admin/#15">15</a> </span>This document is for all kernel hackers.  Developing code in the kernel<br />
<span class="l"><a name="16" href="http://gulizi.wordpress.com/wp-admin/#16">16</a> </span>requires protecting these situations.<br />
<span class="l"><a name="17" href="http://gulizi.wordpress.com/wp-admin/#17">17</a> </span><br />
<span class="l"><a name="18" href="http://gulizi.wordpress.com/wp-admin/#18">18</a> </span><br />
<span class="l"><a name="19" href="http://gulizi.wordpress.com/wp-admin/#19">19</a> </span>RULE #1: Per-CPU data structures need explicit protection<br />
<span class="l"><a name="20" href="http://gulizi.wordpress.com/wp-admin/#20">20</a> </span><br />
<span class="l"><a name="21" href="http://gulizi.wordpress.com/wp-admin/#21">21</a> </span><br />
<span class="l"><a name="22" href="http://gulizi.wordpress.com/wp-admin/#22">22</a> </span>Two similar problems arise. An example code snippet:<br />
<span class="l"><a name="23" href="http://gulizi.wordpress.com/wp-admin/#23">23</a> </span><br />
<span class="l"><a name="24" href="http://gulizi.wordpress.com/wp-admin/#24">24</a> </span>struct this_needs_locking tux[NR_CPUS];<br />
<span class="l"><a name="25" href="http://gulizi.wordpress.com/wp-admin/#25">25</a> </span>tux[smp_processor_id()] = some_value;<br />
<span class="l"><a name="26" href="http://gulizi.wordpress.com/wp-admin/#26">26</a> </span>/* task is preempted here&#8230; */<br />
<span class="l"><a name="27" href="http://gulizi.wordpress.com/wp-admin/#27">27</a> </span>something = tux[smp_processor_id()];<br />
<span class="l"><a name="28" href="http://gulizi.wordpress.com/wp-admin/#28">28</a> </span><br />
<span class="l"><a name="29" href="http://gulizi.wordpress.com/wp-admin/#29">29</a> </span>First, since the data is per-CPU, it may not have explicit SMP locking, but<br />
<span class="l"><a name="30" href="http://gulizi.wordpress.com/wp-admin/#30">30</a> </span>require it otherwise.  Second, when a preempted task is finally rescheduled,<br />
<span class="l"><a name="31" href="http://gulizi.wordpress.com/wp-admin/#31">31</a> </span>the previous value of smp_processor_id may not equal the current.  You must<br />
<span class="l"><a name="32" href="http://gulizi.wordpress.com/wp-admin/#32">32</a> </span>protect these situations by disabling preemption around them.<br />
<span class="l"><a name="33" href="http://gulizi.wordpress.com/wp-admin/#33">33</a> </span><br />
<span class="l"><a name="34" href="http://gulizi.wordpress.com/wp-admin/#34">34</a> </span>You can also use put_cpu() and get_cpu(), which will disable preemption.<br />
<span class="l"><a name="35" href="http://gulizi.wordpress.com/wp-admin/#35">35</a> </span><br />
<span class="l"><a name="36" href="http://gulizi.wordpress.com/wp-admin/#36">36</a> </span><br />
<span class="l"><a name="37" href="http://gulizi.wordpress.com/wp-admin/#37">37</a> </span>RULE #2: CPU state must be protected.<br />
<span class="l"><a name="38" href="http://gulizi.wordpress.com/wp-admin/#38">38</a> </span><br />
<span class="l"><a name="39" href="http://gulizi.wordpress.com/wp-admin/#39">39</a> </span><br />
<span class="l"><a name="40" href="http://gulizi.wordpress.com/wp-admin/#40">40</a> </span>Under preemption, the state of the CPU must be protected.  This is arch-<br />
<span class="l"><a name="41" href="http://gulizi.wordpress.com/wp-admin/#41">41</a> </span>dependent, but includes CPU structures and state not preserved over a context<br />
<span class="l"><a name="42" href="http://gulizi.wordpress.com/wp-admin/#42">42</a> </span>switch.  For example, on x86, entering and exiting FPU mode is now a critical<br />
<span class="l"><a name="43" href="http://gulizi.wordpress.com/wp-admin/#43">43</a> </span>section that must occur while preemption is disabled.  Think what would happen<br />
<span class="l"><a name="44" href="http://gulizi.wordpress.com/wp-admin/#44">44</a> </span>if the kernel is executing a floating-point instruction and is then preempted.<br />
<span class="l"><a name="45" href="http://gulizi.wordpress.com/wp-admin/#45">45</a> </span>Remember, the kernel does not save FPU state except for user tasks.  Therefore,<br />
<span class="l"><a name="46" href="http://gulizi.wordpress.com/wp-admin/#46">46</a> </span>upon preemption, the FPU registers will be sold to the lowest bidder.  Thus,<br />
<span class="l"><a name="47" href="http://gulizi.wordpress.com/wp-admin/#47">47</a> </span>preemption must be disabled around such regions.<br />
<span class="l"><a name="48" href="http://gulizi.wordpress.com/wp-admin/#48">48</a> </span><br />
<span class="l"><a name="49" href="http://gulizi.wordpress.com/wp-admin/#49">49</a> </span>Note, some FPU functions are already explicitly preempt safe.  For example,<br />
<span class="l"><a name="50" href="http://gulizi.wordpress.com/wp-admin/#50">50</a> </span>kernel_fpu_begin and kernel_fpu_end will disable and enable preemption.<br />
<span class="l"><a name="51" href="http://gulizi.wordpress.com/wp-admin/#51">51</a> </span>However, math_state_restore must be called with preemption disabled.<br />
<span class="l"><a name="52" href="http://gulizi.wordpress.com/wp-admin/#52">52</a> </span><br />
<span class="l"><a name="53" href="http://gulizi.wordpress.com/wp-admin/#53">53</a> </span><br />
<span class="l"><a name="54" href="http://gulizi.wordpress.com/wp-admin/#54">54</a> </span>RULE #3: Lock acquire and release must be performed by same task<br />
<span class="l"><a name="55" href="http://gulizi.wordpress.com/wp-admin/#55">55</a> </span><br />
<span class="l"><a name="56" href="http://gulizi.wordpress.com/wp-admin/#56">56</a> </span><br />
<span class="l"><a name="57" href="http://gulizi.wordpress.com/wp-admin/#57">57</a> </span>A lock acquired in one task must be released by the same task.  This<br />
<span class="l"><a name="58" href="http://gulizi.wordpress.com/wp-admin/#58">58</a> </span>means you can&#8217;t do oddball things like acquire a lock and go off to<br />
<span class="l"><a name="59" href="http://gulizi.wordpress.com/wp-admin/#59">59</a> </span>play while another task releases it.  If you want to do something<br />
<span class="l"><a name="60" href="http://gulizi.wordpress.com/wp-admin/#60">60</a> </span>like this, acquire and release the task in the same code path and<br />
<span class="l"><a name="61" href="http://gulizi.wordpress.com/wp-admin/#61">61</a> </span>have the caller wait on an event by the other task.<br />
<span class="l"><a name="62" href="http://gulizi.wordpress.com/wp-admin/#62">62</a> </span><br />
<span class="l"><a name="63" href="http://gulizi.wordpress.com/wp-admin/#63">63</a> </span><br />
<span class="l"><a name="64" href="http://gulizi.wordpress.com/wp-admin/#64">64</a> </span>SOLUTION<br />
<span class="l"><a name="65" href="http://gulizi.wordpress.com/wp-admin/#65">65</a> </span><br />
<span class="l"><a name="66" href="http://gulizi.wordpress.com/wp-admin/#66">66</a> </span><br />
<span class="l"><a name="67" href="http://gulizi.wordpress.com/wp-admin/#67">67</a> </span>Data protection under preemption is achieved by disabling preemption for the<br />
<span class="l"><a name="68" href="http://gulizi.wordpress.com/wp-admin/#68">68</a> </span>duration of the critical region.<br />
<span class="l"><a name="69" href="http://gulizi.wordpress.com/wp-admin/#69">69</a> </span><br />
<span class="l"><a name="70" href="http://gulizi.wordpress.com/wp-admin/#70">70</a> </span>preempt_enable() decrement the preempt counter<br />
<span class="l"><a name="71" href="http://gulizi.wordpress.com/wp-admin/#71">71</a> </span>preempt_disable() increment the preempt counter<br />
<span class="l"><a name="72" href="http://gulizi.wordpress.com/wp-admin/#72">72</a> </span>preempt_enable_no_resched() decrement, but do not immediately preempt<br />
<span class="l"><a name="73" href="http://gulizi.wordpress.com/wp-admin/#73">73</a> </span>preempt_check_resched() if needed, reschedule<br />
<span class="l"><a name="74" href="http://gulizi.wordpress.com/wp-admin/#74">74</a> </span>preempt_count() return the preempt counter<br />
<span class="l"><a name="75" href="http://gulizi.wordpress.com/wp-admin/#75">75</a> </span><br />
<span class="l"><a name="76" href="http://gulizi.wordpress.com/wp-admin/#76">76</a> </span>The functions are nestable.  In other words, you can call preempt_disable<br />
<span class="l"><a name="77" href="http://gulizi.wordpress.com/wp-admin/#77">77</a> </span>n-times in a code path, and preemption will not be reenabled until the n-th<br />
<span class="l"><a name="78" href="http://gulizi.wordpress.com/wp-admin/#78">78</a> </span>call to preempt_enable.  The preempt statements define to nothing if<br />
<span class="l"><a name="79" href="http://gulizi.wordpress.com/wp-admin/#79">79</a> </span>preemption is not enabled.<br />
<span class="l"><a name="80" href="http://gulizi.wordpress.com/wp-admin/#80">80</a> </span><br />
<span class="l"><a name="81" href="http://gulizi.wordpress.com/wp-admin/#81">81</a> </span>Note that you do not need to explicitly prevent preemption if you are holding<br />
<span class="l"><a name="82" href="http://gulizi.wordpress.com/wp-admin/#82">82</a> </span>any locks or interrupts are disabled, since preemption is implicitly disabled<br />
<span class="l"><a name="83" href="http://gulizi.wordpress.com/wp-admin/#83">83</a> </span>in those cases.<br />
<span class="l"><a name="84" href="http://gulizi.wordpress.com/wp-admin/#84">84</a> </span><br />
<span class="l"><a name="85" href="http://gulizi.wordpress.com/wp-admin/#85">85</a> </span>But keep in mind that &#8216;irqs disabled&#8217; is a fundamentally unsafe way of<br />
<span class="l"><a name="86" href="http://gulizi.wordpress.com/wp-admin/#86">86</a> </span>disabling preemption &#8211; any spin_unlock() decreasing the preemption count<br />
<span class="l"><a name="87" href="http://gulizi.wordpress.com/wp-admin/#87">87</a> </span>to 0 might trigger a reschedule. A simple printk() might trigger a reschedule.<br />
<span class="l"><a name="88" href="http://gulizi.wordpress.com/wp-admin/#88">88</a> </span>So use this implicit preemption-disabling property only if you know that the<br />
<span class="l"><a name="89" href="http://gulizi.wordpress.com/wp-admin/#89">89</a> </span>affected codepath does not do any of this. Best policy is to use this only for<br />
<span class="l"><a name="90" href="http://gulizi.wordpress.com/wp-admin/#90">90</a> </span>small, atomic code that you wrote and which calls no complex functions.<br />
<span class="l"><a name="91" href="http://gulizi.wordpress.com/wp-admin/#91">91</a> </span><br />
<span class="l"><a name="92" href="http://gulizi.wordpress.com/wp-admin/#92">92</a> </span>Example:<br />
<span class="l"><a name="93" href="http://gulizi.wordpress.com/wp-admin/#93">93</a> </span><br />
<span class="l"><a name="94" href="http://gulizi.wordpress.com/wp-admin/#94">94</a> </span>cpucache_t *cc; /* this is per-CPU */<br />
<span class="l"><a name="95" href="http://gulizi.wordpress.com/wp-admin/#95">95</a> </span>preempt_disable();<br />
<span class="l"><a name="96" href="http://gulizi.wordpress.com/wp-admin/#96">96</a> </span>cc = cc_data(searchp);<br />
<span class="l"><a name="97" href="http://gulizi.wordpress.com/wp-admin/#97">97</a> </span>if (cc &amp;&amp; cc-&gt;avail) {<br />
<span class="l"><a name="98" href="http://gulizi.wordpress.com/wp-admin/#98">98</a> </span>__free_block(searchp, cc_entry(cc), cc-&gt;avail);<br />
<span class="l"><a name="99" href="http://gulizi.wordpress.com/wp-admin/#99">99</a> </span>cc-&gt;avail = 0;<br />
<span class="l"><a name="100" href="http://gulizi.wordpress.com/wp-admin/#100">100</a> </span>}<br />
<span class="l"><a name="101" href="http://gulizi.wordpress.com/wp-admin/#101">101</a> </span>preempt_enable();<br />
<span class="l"><a name="102" href="http://gulizi.wordpress.com/wp-admin/#102">102</a> </span>return 0;<br />
<span class="l"><a name="103" href="http://gulizi.wordpress.com/wp-admin/#103">103</a> </span><br />
<span class="l"><a name="104" href="http://gulizi.wordpress.com/wp-admin/#104">104</a> </span>Notice how the preemption statements must encompass every reference of the<br />
<span class="l"><a name="105" href="http://gulizi.wordpress.com/wp-admin/#105">105</a> </span>critical variables.  Another example:<br />
<span class="l"><a name="106" href="http://gulizi.wordpress.com/wp-admin/#106">106</a> </span><br />
<span class="l"><a name="107" href="http://gulizi.wordpress.com/wp-admin/#107">107</a> </span>int buf[NR_CPUS];<br />
<span class="l"><a name="108" href="http://gulizi.wordpress.com/wp-admin/#108">108</a> </span>set_cpu_val(buf);<br />
<span class="l"><a name="109" href="http://gulizi.wordpress.com/wp-admin/#109">109</a> </span>if (buf[smp_processor_id()] == -1) printf(KERN_INFO &#8220;wee!\n&#8221;);<br />
<span class="l"><a name="110" href="http://gulizi.wordpress.com/wp-admin/#110">110</a> </span>spin_lock(&amp;buf_lock);<br />
<span class="l"><a name="111" href="http://gulizi.wordpress.com/wp-admin/#111">111</a> </span>/* &#8230; */<br />
<span class="l"><a name="112" href="http://gulizi.wordpress.com/wp-admin/#112">112</a> </span><br />
<span class="l"><a name="113" href="http://gulizi.wordpress.com/wp-admin/#113">113</a> </span>This code is not preempt-safe, but see how easily we can fix it by simply<br />
<span class="l"><a name="114" href="http://gulizi.wordpress.com/wp-admin/#114">114</a> </span>moving the spin_lock up two lines.<br />
<span class="l"><a name="115" href="http://gulizi.wordpress.com/wp-admin/#115">115</a> </span><br />
<span class="l"><a name="116" href="http://gulizi.wordpress.com/wp-admin/#116">116</a> </span><br />
<span class="l"><a name="117" href="http://gulizi.wordpress.com/wp-admin/#117">117</a> </span>PREVENTING PREEMPTION USING INTERRUPT DISABLING<br />
<span class="l"><a name="118" href="http://gulizi.wordpress.com/wp-admin/#118">118</a> </span><br />
<span class="l"><a name="119" href="http://gulizi.wordpress.com/wp-admin/#119">119</a> </span><br />
<span class="l"><a name="120" href="http://gulizi.wordpress.com/wp-admin/#120">120</a> </span>It is possible to prevent a preemption event using local_irq_disable and<br />
<span class="l"><a name="121" href="http://gulizi.wordpress.com/wp-admin/#121">121</a> </span>local_irq_save.  Note, when doing so, you must be very careful to not cause<br />
<span class="l"><a name="122" href="http://gulizi.wordpress.com/wp-admin/#122">122</a> </span>an event that would set need_resched and result in a preemption check.  When<br />
<span class="l"><a name="123" href="http://gulizi.wordpress.com/wp-admin/#123">123</a> </span>in doubt, rely on locking or explicit preemption disabling.<br />
<span class="l"><a name="124" href="http://gulizi.wordpress.com/wp-admin/#124">124</a> </span><br />
<span class="l"><a name="125" href="http://gulizi.wordpress.com/wp-admin/#125">125</a> </span>Note in 2.5 interrupt disabling is now only per-CPU (e.g. local).<br />
<span class="l"><a name="126" href="http://gulizi.wordpress.com/wp-admin/#126">126</a> </span><br />
<span class="l"><a name="127" href="http://gulizi.wordpress.com/wp-admin/#127">127</a> </span>An additional concern is proper usage of local_irq_disable and local_irq_save.<br />
<span class="l"><a name="128" href="http://gulizi.wordpress.com/wp-admin/#128">128</a> </span>These may be used to protect from preemption, however, on exit, if preemption<br />
<span class="l"><a name="129" href="http://gulizi.wordpress.com/wp-admin/#129">129</a> </span>may be enabled, a test to see if preemption is required should be done.  If<br />
<span class="l"><a name="130" href="http://gulizi.wordpress.com/wp-admin/#130">130</a> </span>these are called from the spin_lock and read/write lock macros, the right thing<br />
<span class="l"><a name="131" href="http://gulizi.wordpress.com/wp-admin/#131">131</a> </span>is done.  They may also be called within a spin-lock protected region, however,<br />
<span class="l"><a name="132" href="http://gulizi.wordpress.com/wp-admin/#132">132</a> </span>if they are ever called outside of this context, a test for preemption should<br />
<span class="l"><a name="133" href="http://gulizi.wordpress.com/wp-admin/#133">133</a> </span>be made. Do note that calls from interrupt context or bottom half/ tasklets<br />
<span class="l"><a name="134" href="http://gulizi.wordpress.com/wp-admin/#134">134</a> </span>are also protected by preemption locks and so may use the versions which do<br />
<span class="l"><a name="135" href="http://gulizi.wordpress.com/wp-admin/#135">135</a> </span>not check preemption.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=9&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/05/24/proper-locking-under-a-preemptible-kernel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
		<item>
		<title>linux LWP</title>
		<link>http://gulizi.wordpress.com/2009/05/24/linux-lwp/</link>
		<comments>http://gulizi.wordpress.com/2009/05/24/linux-lwp/#comments</comments>
		<pubDate>Sun, 24 May 2009 03:52:11 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gulizi.wordpress.com/?p=6</guid>
		<description><![CDATA[http://linuxprograms.wordpress.com/2007/12/19/linux-kernel-support-for-threads-light-weight-processe/ So how is this issue solved in Linux? It is done by implementing the so called ‘Light weight processes’. A fork() system call creates a new process. If the child process does not have any execve() like system calls, both the child and the parent process share the same address space for the text(program [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=6&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://linuxprograms.wordpress.com/2007/12/19/linux-kernel-support-for-threads-light-weight-processe/">http://linuxprograms.wordpress.com/2007/12/19/linux-kernel-support-for-threads-light-weight-processe/</a></p>
<p>So how is this issue solved in Linux? It is done by implementing the so called ‘Light weight processes’. A fork() system call creates a new process. If the child process does not have any <span style="font-weight:bold;font-style:italic;">execve()</span> like system calls, both the child and the parent process share the same address space for the text(program code). And the data address space is marked as ‘Copy on write’ that is in the beginning both the child and the parent process share the same data adrress space, but any attempt of changing the data by the child will result in creating a new data address space for the child.</p>
<p>Since now we got an idea about how the <span style="font-weight:bold;font-style:italic;">fork()</span> system call works, we can now think about implementing threads. As we know that threads in the same process share the same address space for text and data, so we need not set any ‘Copy on write’. The issues of data synchroniztion which comes up when two threads access the same data varible has to be worked upon by the programmer.</p>
<p>There is a system call called clone called <span style="font-weight:bold;font-style:italic;">clone()</span> or <span style="font-weight:bold;font-style:italic;">clone2()</span> which helps in creating a child process but unlike <span style="font-weight:bold;font-style:italic;">fork()</span>, we have more control on deciding the behaviour of the child process whether we want to have the new child share the same filesystem information, file descriptor table, signal handler table or the memory space of the parent. In fact the threads library makes use of the <span style="font-weight:bold;font-style:italic;">clone()</span> system call to create new threads.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=6&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/05/24/linux-lwp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
		<item>
		<title></title>
		<link>http://gulizi.wordpress.com/2009/01/15/4/</link>
		<comments>http://gulizi.wordpress.com/2009/01/15/4/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 05:52:36 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gulizi.wordpress.com/?p=4</guid>
		<description><![CDATA[http://www.nbi.dk/GroupTheory/ http://math.ucr.edu/home/baez/rosetta.pdf<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=4&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.nbi.dk/GroupTheory/">http://www.nbi.dk/GroupTheory/</a></p>
<p><a href="http://math.ucr.edu/home/baez/rosetta.pdf">http://math.ucr.edu/home/baez/rosetta.pdf</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=4&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/01/15/4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
		<item>
		<title>links</title>
		<link>http://gulizi.wordpress.com/2009/01/15/links/</link>
		<comments>http://gulizi.wordpress.com/2009/01/15/links/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 05:28:46 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gulizi.wordpress.com/2009/01/15/links/</guid>
		<description><![CDATA[http://reperiendi.wordpress.com/category/programming/ http://arxiv.org/PS_cache/math/pdf/0305/0305049v1.pdf<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=3&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>http://reperiendi.wordpress.com/category/programming/</p>
<p>http://arxiv.org/PS_cache/math/pdf/0305/0305049v1.pdf</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=3&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/01/15/links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://gulizi.wordpress.com/2009/01/15/hello-world/</link>
		<comments>http://gulizi.wordpress.com/2009/01/15/hello-world/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 05:26:52 +0000</pubDate>
		<dc:creator>gulizi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=1&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gulizi.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gulizi.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gulizi.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gulizi.wordpress.com&amp;blog=6180860&amp;post=1&amp;subd=gulizi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gulizi.wordpress.com/2009/01/15/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/79908f2e1dca9aa802c8fb62a5b20a26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gulizi</media:title>
		</media:content>
	</item>
	</channel>
</rss>
