<html><body>
<p><tt>maynardj@linux.vnet.ibm.com wrote on 08/12/2006 01:04:30 PM:<br>
<br>
&gt; Arnd Bergmann wrote:<br>
&gt; <br>
&gt; &gt;On Wednesday 06 December 2006 23:04, Maynard Johnson wrote:<br>
&gt; &gt; &nbsp;<br>
&gt; &gt;No code should ever need to look at other SPUs when performing an<br>
&gt; &gt;operation on a given SPU, so we don't need to hold a global lock<br>
&gt; &gt;during normal operation.<br>
&gt; &gt;<br>
&gt; &gt;We have two cases that need to be handled:<br>
&gt; &gt;<br>
&gt; &gt;- on each context unload and load (both for a full switch operation),<br>
&gt; &gt; &nbsp;call to the profiling code with a pointer to the current context<br>
&gt; &gt; &nbsp;and spu (context is NULL when unloading).<br>
&gt; &gt;<br>
&gt; &gt; &nbsp;If the new context is not know yet, scan its overlay table (expensive)<br>
&gt; &gt; &nbsp;and store information about it in an oprofile private object. Otherwise<br>
&gt; &gt; &nbsp;just point to the currently active object, this should be really cheap.<br>
&gt; &gt;<br>
&gt; &gt;- When enabling oprofile initially, scan all contexts that are currently<br>
&gt; &gt; &nbsp;running on one of the SPUs. This is also expensive, but should happen<br>
&gt; &gt; &nbsp;before the measurement starts so it does not impact the resulting data.<br>
&gt; &gt;<br>
</tt><br>
<tt>Agreed. &nbsp;</tt><br>
<br>
<tt>&lt;snip&gt;</tt><br>
<br>
<tt>&gt; &gt;&gt;I'm not exactly sure what you're saying here. &nbsp;Are you suggesting that a <br>
&gt; &gt;&gt;user may only be interested in acitve SPU notification and, therefore, <br>
&gt; &gt;&gt;shouldn't have to be depenent on the &quot;standard&quot; notification <br>
&gt; &gt;&gt;registration succeeding? &nbsp;There may be a case for adding a new <br>
&gt; &gt;&gt;registration function, I suppose; although, I'm not aware of any other <br>
&gt; &gt;&gt;users of the SPUFS notification mechanism besides OProfile and PDT, and <br>
&gt; &gt;&gt;we need notification of both active and future SPU tasks. &nbsp;But I would <br>
&gt; &gt;&gt;not object to a new function.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &nbsp; &nbsp;<br>
&gt; &gt;&gt;<br>
&gt; &gt;I think what Luke was trying to get to is that notify_spus_active() should<br>
&gt; &gt;not call blocking_notifier_call_chain(), since it will notify other users<br>
&gt; &gt;as well as the newly registered one. Instead, it can simply call the<br>
&gt; &gt;notifier function directly.<br>
&gt; &gt; &nbsp;<br>
&gt; &gt;<br>
&gt; Ah, yes. &nbsp;Thanks to both of you for pointing that out. &nbsp;I'll fix that <br>
&gt; and re-post.<br>
&gt; <br>
&gt; -Maynard<br>
&gt; <br>
</tt><br>
<tt>I actually was hoping to take this one step further. &nbsp;If the interface to</tt><br>
<tt>the context switch handler is something like:</tt><br>
<br>
<tt>switch_handler(int spu_id, from_ctx, to_ctx)</tt><br>
<br>
<tt>The kernel extension can maintain an internal spu table of its own where it</tt><br>
<tt>marks the named spuid as active or not. &nbsp;You don't need to have a bunch of</tt><br>
<tt>individual calls. &nbsp;Internally, you can keep track of it yourself.</tt><br>
<br>
<tt>Luke</tt></body></html>