Hello,
Thanks for your reply.

> Why do you need to expose this Cell-specific feature into generic code?
> 
> Can't you hide this inside the arch code by using the pfm_arch_*() callbacks?

No.
In this patch, I want to avoid setting TIF_PERFMON_CTXSW to the task flag
when cell_spe_follow flag is set.
I couln't hide this change in pfmon_arch_load_context(),
because it is called before set_task_thread_flag().

Can I add a parameter which control to set TIF_PERFMON_CTXSW to the task flag
to pfmon_arch_load_context()?
OR
Can I add pfmon_arch_set_task_thread_flag()?

> There is an arch-specific portion to the context. You get to it with
> ctx_arch =pfm_ctx_arch(ctx).

OK,
I can move cell_spe_follow flag to ctx_arch,
If I can control to set TIF_PERFMON_CTXSW to the task flag from
the arch specific code.

Thanks.
Takashi Yamamoto.

> 
> 2008/3/28 TakashiYamamoto <[EMAIL PROTECTED]>:
> > Hello,
> >  I updated the patch for the latest perfmon2 git tree.
> >
> >  ---------------------------------------------------------------
> >
> > This patch adds cell_spe_follow flag to context flags.
> >  This flag is used for following the Cell SPE context switch.
> >
> >  Signed-off-by: Takashi Yamamoto <[EMAIL PROTECTED]>
> >  ---
> >   arch/powerpc/perfmon/perfmon_cell.c |    2 ++
> >   include/asm-powerpc/perfmon.h       |    8 ++++++++
> >   include/linux/perfmon_kern.h        |    3 ++-
> >   perfmon/perfmon_attach.c            |   26 ++++++++++++++++++++++----
> >
> >
> >  4 files changed, 34 insertions(+), 5 deletions(-)
> >
> >  --- a/arch/powerpc/perfmon/perfmon_cell.c
> >  +++ b/arch/powerpc/perfmon/perfmon_cell.c
> >  @@ -1220,6 +1220,8 @@ static void pfm_cell_get_ovfl_pmds(struc
> >   **/
> >   static int pfm_cell_create_context(struct pfm_context *ctx, u32 ctx_flags)
> >   {
> >  +       ctx->flags.cell_spe_follow =
> >  +               (ctx_flags & PFM_FL_CELL_SPE_FOLLOW) ? 1:0;
> >         return 0;
> >   }
> >
> >  --- a/include/asm-powerpc/perfmon.h
> >  +++ b/include/asm-powerpc/perfmon.h
> >  @@ -31,4 +31,12 @@
> >   #define PFM_ARCH_MAX_PMCS      (256+64) /* 256 HW 64 SW */
> >   #define PFM_ARCH_MAX_PMDS      (256+64) /* 256 HW 64 SW */
> >
> >  +/*
> >  + * context flags (ctx_flags)
> >  + *
> >  + * bits[00-15]: generic flags
> >  + * bits[16-31]: arch-specific flags
> >  + */
> >  +#define PFM_FL_CELL_SPE_FOLLOW 0x10000
> >  +
> >   #endif /* _ASM_POWERPC_PERFMON_H_ */
> >  --- a/include/linux/perfmon_kern.h
> >  +++ b/include/linux/perfmon_kern.h
> >  @@ -118,7 +118,8 @@ struct pfm_context_flags {
> >         unsigned int can_restart:8;     /* allowed to issue a PFM_RESTART */
> >         unsigned int reset_count:8;     /* number of pending resets */
> >         unsigned int is_self:1;         /* per-thread and self-montoring */
> >  -       unsigned int reserved:5;        /* for future use */
> >  +       unsigned int cell_spe_follow:1; /* cell spe ctx follow */
> >  +       unsigned int reserved:4;        /* for future use */
> >   };
> >
> >   /*
> >  --- a/perfmon/perfmon_attach.c
> >  +++ b/perfmon/perfmon_attach.c
> >  @@ -148,8 +148,17 @@ int __pfm_load_context(struct pfm_contex
> >
> >                 ctx->last_cpu = -1;
> >                 set->priv_flags |= PFM_SETFL_PRIV_MOD_BOTH;
> >
> >  -               set_tsk_thread_flag(task, TIF_PERFMON_CTXSW);
> >  -               PFM_DBG("[%d] set TIF", task->pid);
> >  +               /*
> >  +                * If cell_spe_follow is true, the task is not marked by
> >  +                * TIF_PERFMON_CTXSW and pfm_ctxsw() is not called
> >  +                * from the task scheduler.
> >  +                * pfm_ctxsw() is called from SPU notifier in 
> > perfmon_cell.c
> >  +                *
> >  +                */
> >  +               if (!ctx->flags.cell_spe_follow) {
> >  +                       set_tsk_thread_flag(task, TIF_PERFMON_CTXSW);
> >  +                       PFM_DBG("[%d] set TIF", task->pid);
> >  +               }
> >
> >                 PFM_DBG("context loaded next ctxswin for [%d]", task->pid);
> >         } else {
> >  @@ -171,8 +180,17 @@ int __pfm_load_context(struct pfm_contex
> >
> >
> >
> >                 ctx->flags.is_self = 1;
> >
> >  -               set_tsk_thread_flag(task, TIF_PERFMON_CTXSW);
> >  -               PFM_DBG("[%d] set TIF", task->pid);
> >  +               /*
> >  +                * If cell_spe_follow is true, the task is not marked by
> >  +                * TIF_PERFMON_CTXSW and pfm_ctxsw() is not called
> >  +                * from the task scheduler.
> >  +                * pfm_ctxsw() is called from SPU notifier in 
> > perfmon_cell.c
> >  +                *
> >  +                */
> >  +               if (!ctx->flags.cell_spe_follow) {
> >  +                       set_tsk_thread_flag(task, TIF_PERFMON_CTXSW);
> >  +                       PFM_DBG("[%d] set TIF", task->pid);
> >  +               }
> >
> >                 /*
> >                  * load PMD from set
> >
> >
> >
> > -------------------------------------------------------------------------
> >  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
> >
> >


-------------------------------------------------------------------------
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

Reply via email to