Messages in this thread | | | Subject | Re: [PATCH v2 03/16] powerpc/watchpoint: Introduce function to get nr watchpoints dynamically | From | Christophe Leroy <> | Date | Wed, 1 Apr 2020 08:29:06 +0200 |
| |
Le 01/04/2020 à 08:12, Ravi Bangoria a écrit : > So far we had only one watchpoint, so we have hardcoded HBP_NUM to 1. > But future Power architecture is introducing 2nd DAWR and thus kernel > should be able to dynamically find actual number of watchpoints > supported by hw it's running on. Introduce function for the same. > Also convert HBP_NUM macro to HBP_NUM_MAX, which will now represent > maximum number of watchpoints supported by Powerpc.
Everywhere else in the code, it is called 'breakpoint', not 'watchpoint'.
Wouldn't it be more consistent to call the function nr_bp_slots() instead of nr_wp_slots() ?
Especially as we are likely going to extend your changes to support DABR2 in addition to DABR on BOOK3S/32.
Christophe
> > Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> > --- > arch/powerpc/include/asm/cputable.h | 6 +++++- > arch/powerpc/include/asm/hw_breakpoint.h | 5 +++++ > arch/powerpc/include/asm/processor.h | 2 +- > arch/powerpc/kernel/hw_breakpoint.c | 2 +- > 4 files changed, 12 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h > index 40a4d3c6fd99..c67b94f3334c 100644 > --- a/arch/powerpc/include/asm/cputable.h > +++ b/arch/powerpc/include/asm/cputable.h > @@ -614,7 +614,11 @@ enum { > }; > #endif /* __powerpc64__ */ > > -#define HBP_NUM 1 > +/* > + * Maximum number of hw breakpoint supported on powerpc. Number of > + * breakpoints supported by actual hw might be less than this. > + */ > +#define HBP_NUM_MAX 1 > > #endif /* !__ASSEMBLY__ */ > > diff --git a/arch/powerpc/include/asm/hw_breakpoint.h b/arch/powerpc/include/asm/hw_breakpoint.h > index f2f8d8aa8e3b..518b41eef924 100644 > --- a/arch/powerpc/include/asm/hw_breakpoint.h > +++ b/arch/powerpc/include/asm/hw_breakpoint.h > @@ -43,6 +43,11 @@ struct arch_hw_breakpoint { > #define DABR_MAX_LEN 8 > #define DAWR_MAX_LEN 512 > > +static inline int nr_wp_slots(void) > +{ > + return HBP_NUM_MAX; > +} > + > #ifdef CONFIG_HAVE_HW_BREAKPOINT > #include <linux/kdebug.h> > #include <asm/reg.h> > diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h > index eedcbfb9a6ff..90f6dbc7ff00 100644 > --- a/arch/powerpc/include/asm/processor.h > +++ b/arch/powerpc/include/asm/processor.h > @@ -180,7 +180,7 @@ struct thread_struct { > int fpexc_mode; /* floating-point exception mode */ > unsigned int align_ctl; /* alignment handling control */ > #ifdef CONFIG_HAVE_HW_BREAKPOINT > - struct perf_event *ptrace_bps[HBP_NUM]; > + struct perf_event *ptrace_bps[HBP_NUM_MAX]; > /* > * Helps identify source of single-step exception and subsequent > * hw-breakpoint enablement > diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c > index 72f461bd70fb..4120349e2abe 100644 > --- a/arch/powerpc/kernel/hw_breakpoint.c > +++ b/arch/powerpc/kernel/hw_breakpoint.c > @@ -38,7 +38,7 @@ static DEFINE_PER_CPU(struct perf_event *, bp_per_reg); > int hw_breakpoint_slots(int type) > { > if (type == TYPE_DATA) > - return HBP_NUM; > + return nr_wp_slots(); > return 0; /* no instruction breakpoints available */ > } > >
| |