• Suraj Jitindar Singh's avatar
    KVM: PPC: Book3S HV: Only write DAWR[X] when handling h_set_dawr in real mode · 84b02824
    Suraj Jitindar Singh authored
    The hcall H_SET_DAWR is used by a guest to set the data address
    watchpoint register (DAWR). This hcall is handled in the host in
    kvmppc_h_set_dawr() which can be called in either real mode on the
    guest exit path from hcall_try_real_mode() in book3s_hv_rmhandlers.S,
    or in virtual mode when called from kvmppc_pseries_do_hcall() in
    book3s_hv.c.
    
    The function kvmppc_h_set_dawr() updates the dawr and dawrx fields in
    the vcpu struct accordingly and then also writes the respective values
    into the DAWR and DAWRX registers directly. It is necessary to write
    the registers directly here when calling the function in real mode
    since the path to re-enter the guest won't do this. However when in
    virtual mode the host DAWR and DAWRX values have already been
    restored, and so writing the registers would overwrite these.
    Additionally there is no reason to write the guest values here as
    these will be read from the vcpu struct and written to the registers
    appropriately the next time the vcpu is run.
    
    This also avoids the case when handling h_set_dawr for a nested guest
    where the guest hypervisor isn't able to write the DAWR and DAWRX
    registers directly and must rely on the real hypervisor to do this for
    it when it calls H_ENTER_NESTED.
    
    Fixes: c1fe190c ("powerpc: Add force enable of DAWR on P9 option")
    Signed-off-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    84b02824
book3s_hv_rmhandlers.S 85.7 KB