<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<BR>&nbsp;<BR>
<DIV id=SkyDrivePlaceholder></DIV>
<DIV>&gt; Date: Wed, 4 Jul 2012 08:12:25 -0700<BR>&gt; Subject: Re: Why can not processes switch in atomic context?<BR>&gt; From: dhylands@gmail.com<BR>&gt; To: buyit@live.cn<BR>&gt; CC: mobile.parmenides@gmail.com; kernelnewbies@kernelnewbies.org<BR>&gt; <BR>&gt; Hi,<BR>&gt; <BR>&gt; On Wed, Jul 4, 2012 at 3:44 AM, ß®Ìì ²· &lt;buyit@live.cn&gt; wrote:<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; ÔÚ 2012-7-3£¬22:26£¬"Parmenides" &lt;mobile.parmenides@gmail.com&gt; Ð´µÀ£º<BR>&gt; &gt;<BR>&gt; ...snip...<BR>&gt; &gt;&gt; 1. For the spinlock case, it is easy to get if preemption is allowed<BR>&gt; &gt;&gt; in critical section, the purpose of protection provided by spinlock<BR>&gt; &gt;&gt; can not be achieved readily.<BR>&gt; &gt;&gt;<BR>&gt; &gt; i think disable preemption in spinlock is not for safe, it is<BR>&gt; &gt; For efficiency. Spinlock should exit as soon as possible.<BR>&gt; &gt; If tank1 get spinlock and goto sleep for 100 seconds before<BR>&gt; &gt; Release spinlock, task2 which requests the same spinlock<BR>&gt; &gt; Should wait for 100 seconds, for this example, mutex should be used instead of spinlock.<BR>&gt; <BR>&gt; Unless, of course, the interrupt that fired tried to acquire the<BR>&gt; spinlock it preempted, in which case you would have deadlock, even on<BR>&gt; an SMP system, if the same processor happened to be used for both.<BR>&gt; </DIV>
<DIV>&nbsp;</DIV>
<DIV>yes, i think you are right, suppose task1 use spin_lock_irqsave() to get a spinlock, </DIV>
<DIV>then call schedule() to sleep for a long time, the interrupt on this cpu core will be</DIV>
<DIV>enabled by kernel, and if there is an interrupt triggered on the same cpu and </DIV>
<DIV>get the same spinlock, deadlock will happen.</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;</DIV>                                               </div></body>
</html>