powerpc: Rework set_dabr so it can take a DABRX value as well
Rework set_dabr to take a DABRX value as well. Both the pseries and PS3 hypervisors do some checks on the DABRX values that are passed in the hcall. This patch stops bogus values from being passed to hypervisor. Also, in the case where we are clearing the breakpoint, where DABR and DABRX are zero, we modify the DABRX value to make it valid so that the hcall won't fail. Signed-off-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
3ab96a02e8
commit
4474ef055c
@@ -184,11 +184,15 @@ early_param("ps3flash", early_parse_ps3flash);
|
||||
#define prealloc_ps3flash_bounce_buffer() do { } while (0)
|
||||
#endif
|
||||
|
||||
static int ps3_set_dabr(unsigned long dabr)
|
||||
static int ps3_set_dabr(unsigned long dabr, unsigned long dabrx)
|
||||
{
|
||||
enum {DABR_USER = 1, DABR_KERNEL = 2,};
|
||||
/* Have to set at least one bit in the DABRX */
|
||||
if (dabrx == 0 && dabr == 0)
|
||||
dabrx = DABRX_USER;
|
||||
/* hypervisor only allows us to set BTI, Kernel and user */
|
||||
dabrx &= DABRX_BTI | DABRX_KERNEL | DABRX_USER;
|
||||
|
||||
return lv1_set_dabr(dabr, DABR_KERNEL | DABR_USER) ? -1 : 0;
|
||||
return lv1_set_dabr(dabr, dabrx) ? -1 : 0;
|
||||
}
|
||||
|
||||
static void __init ps3_setup_arch(void)
|
||||
|
Reference in New Issue
Block a user