Commit a6ba44e8 authored by Ravi Bangoria's avatar Ravi Bangoria Committed by Michael Ellerman

powerpc/watchpoint: Introduce function to get nr watchpoints dynamically

So far we had only one watchpoint, so we have hardcoded HBP_NUM to 1.
But Power10 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.
Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarMichael Neuling <mikey@neuling.org>
Link: https://lore.kernel.org/r/20200514111741.97993-4-ravi.bangoria@linux.ibm.com
parent 4a4ec228
...@@ -614,7 +614,11 @@ enum { ...@@ -614,7 +614,11 @@ enum {
}; };
#endif /* __powerpc64__ */ #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__ */ #endif /* !__ASSEMBLY__ */
......
...@@ -43,6 +43,11 @@ struct arch_hw_breakpoint { ...@@ -43,6 +43,11 @@ struct arch_hw_breakpoint {
#define DABR_MAX_LEN 8 #define DABR_MAX_LEN 8
#define DAWR_MAX_LEN 512 #define DAWR_MAX_LEN 512
static inline int nr_wp_slots(void)
{
return HBP_NUM_MAX;
}
#ifdef CONFIG_HAVE_HW_BREAKPOINT #ifdef CONFIG_HAVE_HW_BREAKPOINT
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <asm/reg.h> #include <asm/reg.h>
......
...@@ -180,7 +180,7 @@ struct thread_struct { ...@@ -180,7 +180,7 @@ struct thread_struct {
int fpexc_mode; /* floating-point exception mode */ int fpexc_mode; /* floating-point exception mode */
unsigned int align_ctl; /* alignment handling control */ unsigned int align_ctl; /* alignment handling control */
#ifdef CONFIG_HAVE_HW_BREAKPOINT #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 * Helps identify source of single-step exception and subsequent
* hw-breakpoint enablement * hw-breakpoint enablement
......
...@@ -39,7 +39,7 @@ static DEFINE_PER_CPU(struct perf_event *, bp_per_reg); ...@@ -39,7 +39,7 @@ static DEFINE_PER_CPU(struct perf_event *, bp_per_reg);
int hw_breakpoint_slots(int type) int hw_breakpoint_slots(int type)
{ {
if (type == TYPE_DATA) if (type == TYPE_DATA)
return HBP_NUM; return nr_wp_slots();
return 0; /* no instruction breakpoints available */ return 0; /* no instruction breakpoints available */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment