<?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 10. 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 10. What Functions Are Safe To Call From Interrupts?</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09s04.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch10s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10. What Functions Are Safe To Call From Interrupts?"><div class="titlepage"><div><div><h2 class="title"><a id="sleeping-things"></a>Chapter 10. 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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <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 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Some Functions Which Don't Sleep</td></tr></table></div></body></html>