Hello,
Thanks for your reply.
>
> I think we need to hide this into an arch_specific function. Which can
> then have a indirect function pointer for
> cell just like what you do today on PPC.
>
> But I don't understand why you need this extra check JUST for
> pfm_read_pmds() and not for all 3 accesses.
> Could you elaborate on that?
I think that pfm_write_pmcs() and pfm_write_pmds() need this extra check too.
I did not notice that because I didn't get the problem by pfmon.
But If the user program calls them on its way, the problem happen.
I will update the patch tomorrow.
Thanks.
Takashi Yamamoto.
>
> On Wed, Apr 2, 2008 at 4:09 AM, TakashiYamamoto
> <[EMAIL PROTECTED]> wrote:
> > Hello,
> > I updated the patch for the latest git tree.
> >
> > Thanks,
> > Takashi Yamamoto.
> > -----------------------------------------------------
> > This patch changes the check of PMU access in pfm_read_pmds().
> >
> > In the cell-spe-follow mode,
> > we need to call the special function to check
> > whether the target SPU program is running.
> >
> > Signed-off-by: Takashi Yamamoto <[EMAIL PROTECTED]>
> > ---
> > include/asm-powerpc/perfmon_kern.h | 13 +++++++++++++
> > perfmon/perfmon_rw.c | 12 +++++++++++-
> > 2 files changed, 24 insertions(+), 1 deletion(-)
> >
> > --- a/include/asm-powerpc/perfmon_kern.h
> > +++ b/include/asm-powerpc/perfmon_kern.h
> > @@ -450,6 +450,19 @@ struct pfm_arch_context {
> > void *arg;
> > };
> >
> > +/*
> > + * This function returns whether the target SPU program is running.
> > + */
> > +static inline int pfm_cell_can_access_pmu(
> > + struct pfm_context *ctx)
> > +{
> > + struct pfm_arch_context *ctx_arch = pfm_ctx_arch(ctx);
> > + if (ctx->flags.not_dflt_ctxsw && ctx_arch->arg)
> > + return 1;
> > + else
> > + return 0;
> > +}
> > +
> > #define PFM_ARCH_CTX_SIZE sizeof(struct pfm_arch_context)
> > /*
> > * PowerPC does not need extra alignment requirements for the sampling
> > buffer
> > --- a/perfmon/perfmon_rw.c
> > +++ b/perfmon/perfmon_rw.c
> > @@ -506,7 +506,17 @@ int __pfm_read_pmds(struct pfm_context *
> >
> > if (likely(ctx->state == PFM_CTX_LOADED)) {
> > can_access_pmu = __get_cpu_var(pmu_owner) == ctx->task
> > - || ctx->flags.system;
> > + || ctx->flags.system;
> > +
> > +#ifdef CONFIG_PPC
> > + /*
> > + * In the cell_spe_follow mode,
> > + * The target SPU program may run on the other CPU's SPU,
> > + * So pfm_cell_can_access_pmu(ctx) is used here.
> > + */
> > + if (!ctx->flags.system)
> > + can_access_pmu = pfm_cell_can_access_pmu(ctx);
> > +#endif
> >
> > if (can_access_pmu)
> > pfm_arch_serialize();
> >
> >
> >
> > -------------------------------------------------------------------------
> > Check out the new SourceForge.net Marketplace.
> > It's the best place to buy or sell services for
> > just about anything Open Source.
> >
> > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> > _______________________________________________
> > perfmon2-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/perfmon2-devel
> >
> >
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
perfmon2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel