Corey, Let's do the 2nd option as I have applied each patch independently so we keep a trace.
I will drop patch 4. Please submit a replacement and update patch 5 accordingly I noticed it was modifying the same file. On Tue, Jul 15, 2008 at 8:44 PM, Corey J Ashford <[EMAIL PROTECTED]> wrote: > Hi Stephane, > > Yes, that code is in arch/powerpc/kernel/process.c > > From here, we can handle this two ways: > 1) I can re-submit 5 patches, getting rid of the get_cpu/put_cpu patch, and > adding the patch to fix the bug described below. > 2) I can just submit a new patch to fix this bug separately, and we can just > agree to reject [PATCH 4/5] which is ghe get_cpu/put_cpu > patch > > Which do you prefer? Or some other option? > > Thanks, > > - Corey > > Corey Ashford > Software Engineer > IBM Linux Technology Center, Linux Toolchain > Beaverton, OR > 503-578-3507 > [EMAIL PROTECTED] > > > "stephane eranian" <[EMAIL PROTECTED]> wrote on 07/15/2008 11:36:50 AM: > >> Corey, >> >> I assume what you are showing in Power specific. In that case, I agree >> in needs to be inside >> the critical section. >> >> >> On Tue, Jul 15, 2008 at 8:27 PM, Corey J Ashford <[EMAIL PROTECTED]> >> wrote: >> > Thanks for the reply >> > "stephane eranian" <[EMAIL PROTECTED]> wrote on 07/15/2008 09:52:28 >> > AM: >> > >> > Looking at the code, it appears you are right about the sread and swrite >> > functions, but I'm now looking at the function >> > pfm_power6_enable_counters. >> > In one case, the call stack looks like this: >> > >> > >> > arch/powerpc/perfmon/perfmon_power6.c: pfm_power6_enable_counters >> > arch/powerpc/perfmon/perfmon.c: pfm_arch_ctxswin_thread >> > perfmon/perfmon_ctxsw.c: __pfm_ctxswin_thread >> > perfmon/perfmon_ctxsw.c: pfm_ctxsw_in >> > arch/powerpc/kernel/process.c: __switch_to >> > >> > >> > The only code that I can find that disables interrupts in this call >> > chain is >> > in __switch_to, but the call to pfm_ctxsw_in is >> > not inside the interrupts-disabled section. The code is as follows: >> > >> > ... >> > if (test_tsk_thread_flag(prev, TIF_PERFMON_CTXSW)) >> > pfm_ctxsw_out(prev, new); >> > >> > if (test_tsk_thread_flag(new, TIF_PERFMON_CTXSW)) >> > pfm_ctxsw_in(prev, new); >> > >> > local_irq_save(flags); >> > >> > account_system_vtime(current); >> > account_process_vtime(current); >> > calculate_steal_time(); >> > >> > /* >> > * We can't take a PMU exception inside _switch() since there is >> > a >> > * window where the kernel stack SLB and the kernel stack are >> > out >> > * of sync. Hard disable here. >> > */ >> > hard_irq_disable(); >> > last = _switch(old_thread, new_thread); >> > >> > local_irq_restore(flags); >> > >> > return last; >> > } >> > >> > The comments in __pfm_ctxswin_thread indicate that it is expected to be >> > run >> > with interrupts off. Do you agree that this POWER-specific code looks >> > incorrect, that those if-statements should be inside the >> > local_irq_save/local_irq_restore block? >> > >> > Thanks for your consideration, >> > >> > - Corey >> > >> > Corey Ashford >> > Software Engineer >> > IBM Linux Technology Center, Linux Toolchain >> > Beaverton, OR >> > 503-578-3507 >> > [EMAIL PROTECTED] >> > >> > >> >> Corey, >> >> >> >> AFAIK, PMD registers can be read at 5 different times: >> >> >> >> - on pfm_read_pmds() >> >> - on context switch save >> >> - set switch save >> >> - on counter overflow to record a sample >> >> - on unload for flush PMU state to software >> >> >> >> In all situations, interrupts are indeed disabled. So you should not >> >> need >> >> getcpu/putcpu. >> >> >> >> >> >> On Tue, Jul 15, 2008 at 6:46 PM, Corey J Ashford <[EMAIL PROTECTED]> >> >> wrote: >> >> > Hi Stephane, >> >> > >> >> > I was not aware that interrupts are disabled during the call the >> >> > pmd_sread >> >> > call, thanks for catching that. Is that also the case for the >> >> > enable_counters and disable_counters calls as well? >> >> > >> >> > Regards, >> >> > >> >> > - Corey >> >> > >> >> > Corey Ashford >> >> > Software Engineer >> >> > IBM Linux Technology Center, Linux Toolchain >> >> > Beaverton, OR >> >> > 503-578-3507 >> >> > [EMAIL PROTECTED] >> >> > >> >> > >> >> > >> >> > >> >> > "stephane eranian" <[EMAIL PROTECTED]> >> >> > 07/15/2008 03:24 AM >> >> > Please respond to >> >> > [EMAIL PROTECTED] >> >> > >> >> > >> >> > To >> >> > Corey J Ashford/Beaverton/[EMAIL PROTECTED] >> >> > cc >> >> > perfmon2-devel@lists.sourceforge.net >> >> > Subject >> >> > Re: [PATCH 5/5] fixes for full perfmon2 on POWER >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > Corey, >> >> > >> >> > >> >> > I don't understand this patch. >> >> > You say: >> >> > "This patch fixes a problem with accessing the array of cpu-specific >> >> > PMU >> >> > counters, where there was a race condition that could occur where we >> >> > acquire the cpu number, and then have the cpu switch out from >> >> > underneath >> >> > us. Using get_cpu()/put_cpu() fixes this problem because get_cpu() >> >> > disables preemption until put_cpu() is called again." >> >> > >> >> > What do you mean by "switch from underneath". AFAIK, pmd_sread() is >> >> > called >> >> > with interrupts masked. I thought, this was enough to prevent any >> >> > preemption? >> >> > >> >> > >> >> > >> >> > On Mon, Jul 14, 2008 at 11:50 PM, Corey Ashford <[EMAIL PROTECTED]> >> >> > wrote: >> >> >> This fixes an issue on POWER4 and POWER6 where PMU exceptions need >> >> >> to >> >> >> be >> >> >> disabled when the context is in masked mode. >> >> >> >> >> >> -- >> >> >> Corey Ashford >> >> >> Software Engineer >> >> >> IBM Linux Technology Center, Linux Toolchain >> >> >> Beaverton, OR >> >> >> 503-578-3507 >> >> >> [EMAIL PROTECTED] >> >> >> >> >> > >> >> > >> >> > >> > > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel