mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
powerpc/watchpoint: Guest support for 2nd DAWR hcall
2nd DAWR can be set/unset using H_SET_MODE hcall with resource value 5. Enable powervm guest support with that. This has no effect on kvm guest because kvm will return error if guest does hcall with resource value 5. Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200723090813.303838-9-ravi.bangoria@linux.ibm.com
This commit is contained in:
parent
6f3fe297f9
commit
03f3e54abd
@ -358,6 +358,7 @@
|
||||
#define H_SET_MODE_RESOURCE_SET_DAWR0 2
|
||||
#define H_SET_MODE_RESOURCE_ADDR_TRANS_MODE 3
|
||||
#define H_SET_MODE_RESOURCE_LE 4
|
||||
#define H_SET_MODE_RESOURCE_SET_DAWR1 5
|
||||
|
||||
/* Values for argument to H_SIGNAL_SYS_RESET */
|
||||
#define H_SIGNAL_SYS_RESET_ALL -1
|
||||
|
@ -131,7 +131,7 @@ struct machdep_calls {
|
||||
unsigned long dabrx);
|
||||
|
||||
/* Set DAWR for this platform, leave empty for default implementation */
|
||||
int (*set_dawr)(unsigned long dawr,
|
||||
int (*set_dawr)(int nr, unsigned long dawr,
|
||||
unsigned long dawrx);
|
||||
|
||||
#ifdef CONFIG_PPC32 /* XXX for now */
|
||||
|
@ -315,6 +315,11 @@ static inline long plpar_set_watchpoint0(unsigned long dawr0, unsigned long dawr
|
||||
return plpar_set_mode(0, H_SET_MODE_RESOURCE_SET_DAWR0, dawr0, dawrx0);
|
||||
}
|
||||
|
||||
static inline long plpar_set_watchpoint1(unsigned long dawr1, unsigned long dawrx1)
|
||||
{
|
||||
return plpar_set_mode(0, H_SET_MODE_RESOURCE_SET_DAWR1, dawr1, dawrx1);
|
||||
}
|
||||
|
||||
static inline long plpar_signal_sys_reset(long cpu)
|
||||
{
|
||||
return plpar_hcall_norets(H_SIGNAL_SYS_RESET, cpu);
|
||||
|
@ -37,7 +37,7 @@ int set_dawr(int nr, struct arch_hw_breakpoint *brk)
|
||||
dawrx |= (mrd & 0x3f) << (63 - 53);
|
||||
|
||||
if (ppc_md.set_dawr)
|
||||
return ppc_md.set_dawr(dawr, dawrx);
|
||||
return ppc_md.set_dawr(nr, dawr, dawrx);
|
||||
|
||||
if (nr == 0) {
|
||||
mtspr(SPRN_DAWR0, dawr);
|
||||
|
@ -833,12 +833,15 @@ static int pseries_set_xdabr(unsigned long dabr, unsigned long dabrx)
|
||||
return plpar_hcall_norets(H_SET_XDABR, dabr, dabrx);
|
||||
}
|
||||
|
||||
static int pseries_set_dawr(unsigned long dawr, unsigned long dawrx)
|
||||
static int pseries_set_dawr(int nr, unsigned long dawr, unsigned long dawrx)
|
||||
{
|
||||
/* PAPR says we can't set HYP */
|
||||
dawrx &= ~DAWRX_HYP;
|
||||
|
||||
return plpar_set_watchpoint0(dawr, dawrx);
|
||||
if (nr == 0)
|
||||
return plpar_set_watchpoint0(dawr, dawrx);
|
||||
else
|
||||
return plpar_set_watchpoint1(dawr, dawrx);
|
||||
}
|
||||
|
||||
#define CMO_CHARACTERISTICS_TOKEN 44
|
||||
|
Loading…
Reference in New Issue
Block a user