Sophie

Sophie

distrib > CentOS > 6 > i386 > by-pkgid > cf93d8a8acdcc6fe2225039da0502495 > files > 2231

kernel-doc-2.6.32-131.17.1.el6.centos.plus.noarch.rpm

<?xml version="1.0" encoding="ANSI_X3.4-1968" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968" /><title>Chapter&#160;10.&#160;What Functions Are Safe To Call From Interrupts?</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="index.html" title="Unreliable Guide To Locking" /><link rel="up" href="index.html" title="Unreliable Guide To Locking" /><link rel="prev" href="ch09s04.html" title="Data Which Mostly Used By An IRQ Handler" /><link rel="next" href="ch10s02.html" title="Some Functions Which Don't Sleep" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&#160;10.&#160;What Functions Are Safe To Call From Interrupts?</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09s04.html">Prev</a>&#160;</td><th width="60%" align="center">&#160;</th><td width="20%" align="right">&#160;<a accesskey="n" href="ch10s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter&#160;10.&#160;What Functions Are Safe To Call From Interrupts?"><div class="titlepage"><div><div><h2 class="title"><a id="sleeping-things"></a>Chapter&#160;10.&#160;What Functions Are Safe To Call From Interrupts?</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch10.html#sleeping">Some Functions Which Sleep</a></span></dt><dt><span class="sect1"><a href="ch10s02.html">Some Functions Which Don't Sleep</a></span></dt></dl></div><p>
      Many functions in the kernel sleep (ie. call schedule())
      directly or indirectly: you can never call them while holding a
      spinlock, or with preemption disabled.  This also means you need
      to be in user context: calling them from an interrupt is illegal.
    </p><div class="sect1" title="Some Functions Which Sleep"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="sleeping"></a>Some Functions Which Sleep</h2></div></div></div><p>
      The most common ones are listed below, but you usually have to
      read the code to find out if other calls are safe.  If everyone
      else who calls it can sleep, you probably need to be able to
      sleep, too.  In particular, registration and deregistration
      functions usually expect to be called from user context, and can
      sleep.
    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
        Accesses to 
        <a class="firstterm" href="go01.html#gloss-userspace"><em class="firstterm">userspace</em></a>:
      </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
          <code class="function">copy_from_user()</code>
        </p></li><li class="listitem"><p>
          <code class="function">copy_to_user()</code>
        </p></li><li class="listitem"><p>
          <code class="function">get_user()</code>
        </p></li><li class="listitem"><p>
          <code class="function">put_user()</code>
        </p></li></ul></div></li><li class="listitem"><p>
        <code class="function">kmalloc(GFP_KERNEL)</code>
      </p></li><li class="listitem"><p>
      <code class="function">mutex_lock_interruptible()</code> and
      <code class="function">mutex_lock()</code>
      </p><p>
       There is a <code class="function">mutex_trylock()</code> which can be
       used inside interrupt context, as it will not sleep.
       <code class="function">mutex_unlock()</code> will also never sleep.
      </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch09s04.html">Prev</a>&#160;</td><td width="20%" align="center">&#160;</td><td width="40%" align="right">&#160;<a accesskey="n" href="ch10s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Data Which Mostly Used By An IRQ Handler&#160;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&#160;Some Functions Which Don't Sleep</td></tr></table></div></body></html>