Hi, I&#39;ve modified the code accordingly. And now it works fine :-)<div><br></div><div>FYI, here is my patch.</div><div><br></div><div><div>diff -r 16a569af968d lib/barrelfish/arch/x86/ipi_notify.c</div><div>--- a/lib/barrelfish/arch/x86/ipi_notify.c<span class="Apple-tab-span" style="white-space:pre">        </span>Fri May 04 17:02:29 2012 +0800</div>

<div>+++ b/lib/barrelfish/arch/x86/ipi_notify.c<span class="Apple-tab-span" style="white-space:pre">        </span>Tue May 08 22:10:16 2012 +0800</div><div>@@ -48,6 +48,22 @@</div><div>     return SYS_ERR_OK;</div><div> }</div>
<div>
 </div><div>+static void ipi_alloc_notify_try_request(void* arg) {</div><div>+    struct ipi_notify* uc = arg;</div><div>+    struct monitor_binding* b = get_monitor_binding();</div><div>+</div><div>+    errval_t err = b-&gt;tx_vtbl.ipi_alloc_notify_request(b, NOP_CONT, uc-&gt;ep, (uintptr_t)uc);</div>

<div>+</div><div>+    if (err_is_fail(err)) {</div><div>+        if (err_no(err) == FLOUNDER_ERR_TX_BUSY) {</div><div>+            b-&gt;register_send(b, b-&gt;waitset, MKCONT(ipi_alloc_notify_try_request, uc));</div><div>

+        }</div><div>+        else {</div><div>+            USER_PANIC(&quot;ipi_notify_alloc_db fail, err = %d\n&quot;, err);</div><div>+        }</div><div>+    }</div><div>+}</div><div>+</div><div> /**</div><div>  * \brief Initialise a new IPI notify channel</div>

<div>  *</div><div>@@ -64,10 +80,7 @@</div><div>     // Initialize the rest</div><div>     uc-&gt;cont = cont;</div><div> </div><div>-    struct monitor_binding *b = get_monitor_binding();</div><div>-</div><div>-    err = b-&gt;tx_vtbl.ipi_alloc_notify_request(b, NOP_CONT, uc-&gt;ep, (uintptr_t)uc);</div>

<div>-    assert(err_is_ok(err));</div><div>+    ipi_alloc_notify_try_request(uc);</div><div> </div><div>     return SYS_ERR_OK;</div><div> }</div><div><br></div><br><div class="gmail_quote">On Mon, May 7, 2012 at 10:01 PM, Simon Peter <span dir="ltr">&lt;<a href="mailto:speter@inf.ethz.ch" target="_blank">speter@inf.ethz.ch</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Do you have any ideas about why the b-&gt;tx_vtbl_ipi_alloc_notify_<u></u>request<br>
(line 69, file /lib/barrelfish/arch/x86/ipi_<u></u>notify.c) would fail with<br>
TX_BUSY error? I saw a immediate assert on this result, does it mean the<br>
request operation is not supposed to fail at all? If not, can I just<br>
detect the TX_BUSY error and do a register_send to make it more robust?<br>
</blockquote>
<br></div>
You should be able to do that. It&#39;s probably just an overlooked case where we don&#39;t yet handle busy channels. Your suggested register_send() should do the trick.<span class="HOEnZb"><font color="#888888"><br>
<br>
Simon<br>
<br>
</font></span></blockquote></div><br></div>