<html><body>
<p>Just FYI:  I just tried out the code I suggested below, and it does not work; it results in a system hang.  I have spent some time analyzing why this doesn't work as I expected, but so far I haven't been able to figure it out.<br>
<br>
Regards,<br>
<br>
Corey Ashford<br>
Software Engineer<br>
IBM Linux Technology Center, Linux Toolchain<br>
Beaverton, OR <br>
503-578-3507 <br>
cjashfor@us.ibm.com<br>
<br>
<br>
<tt>linuxppc-dev-bounces+cjashfor=us.ibm.com@ozlabs.org wrote on 05/15/2008 12:41:55 PM:<br>
<br>
&gt; Hi Benjamin and Olaf,<br>
&gt; <br>
&gt; Thanks for the suggestions.<br>
&gt; <br>
&gt; Ideally, what I'm looking for is something that mimics the operation<br>
&gt; of MASKABLE_EXCEPTION_PSERIES.<br>
&gt; I've been looking at the kernel code (entry_64.S, exception.h, <br>
&gt; head_64.S) but am finding it quite complicated and hard to follow, <br>
&gt; particularly in the area of interrupt disabling wrt the soft and <br>
&gt; hard disable logic.<br>
&gt; <br>
&gt; My initial thought is to do something like this in the beginning of <br>
&gt; my perfmon2 interrupt handler:<br>
&gt; <br>
&gt; void perfmon_pmu_int_handler(struct pt_regs *regs) {<br>
&gt; <br>
&gt; if (get_paca()-&gt;soft_enabled == 0) {<br>
&gt; /* disable hardware interrupts */<br>
&gt; get_paca()-&gt;hard_enabled = 0;<br>
&gt; regs-&gt;msr &amp;= ^MSR_EE;<br>
&gt; return;<br>
&gt; }<br>
&gt; ...<br>
&gt; }<br>
&gt; <br>
&gt; Does this seem like it might work?<br>
&gt; <br>
&gt; Thanks<br>
&gt; <br>
&gt; Corey Ashford<br>
&gt; Software Engineer<br>
&gt; IBM Linux Technology Center, Linux Toolchain<br>
&gt; Beaverton, OR <br>
&gt; 503-578-3507 <br>
&gt; cjashfor@us.ibm.com<br>
&gt; <br>
&gt; <br>
&gt; Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt; wrote on <br>
&gt; 05/14/2008 11:46:07 PM:<br>
&gt; <br>
&gt; &gt; <br>
&gt; &gt; On Tue, 2008-05-13 at 15:26 -0700, Corey Ashford wrote:<br>
&gt; &gt; &gt; The perfmon2 code is available here: <br>
&gt; &gt; &gt; <a href="http://sourceforge.net/project/showfiles.php?group_id=144822">http://sourceforge.net/project/showfiles.php?group_id=144822</a><br>
&gt; &gt; &gt; <br>
&gt; &gt; &gt; perfmon2's interrupt handler does have a single entry point. &nbsp;Could I <br>
&gt; &gt; &gt; somehow mimic what the MASKABLE_EXCEPTION_PSERIES macro does inside<br>
&gt; &gt; &gt; of <br>
&gt; &gt; &gt; the perfmon2 interrupt handler? &nbsp;Are there examples of this I can look<br>
&gt; &gt; &gt; at?<br>
&gt; &gt; &gt; <br>
&gt; &gt; &gt; That would give us the best of both worlds.<br>
&gt; &gt; <br>
&gt; &gt; You can definitely snapshot as many data as you can, and if interrupts<br>
&gt; &gt; are soft-disabled, just return to the caller, storing that snapshot in<br>
&gt; &gt; some per-cpu data structure.<br>
&gt; &gt; <br>
&gt; &gt; You can then add something to local_irq_restore() that checks whether<br>
&gt; &gt; some perfmon2 stuff happened and does the actual storing of the data<br>
&gt; &gt; that were previously collected.<br>
&gt; &gt; <br>
&gt; &gt; Cheers,<br>
&gt; &gt; Ben.<br>
&gt; &gt; <br>
&gt; &gt; _______________________________________________<br>
&gt; Linuxppc-dev mailing list<br>
&gt; Linuxppc-dev@ozlabs.org<br>
&gt; <a href="https://ozlabs.org/mailman/listinfo/linuxppc-dev">https://ozlabs.org/mailman/listinfo/linuxppc-dev</a></tt></body></html>