diff mbox

[4/5] KVM: PPC: BOOKE: Clear guest dbsr in userspace exit KVM_EXIT_DEBUG

Message ID 1407138762-25531-4-git-send-email-Bharat.Bhushan@freescale.com
State New, archived
Headers show

Commit Message

Bharat Bhushan Aug. 4, 2014, 7:52 a.m. UTC
Dbsr is not visible to userspace and we do not think any need to
expose this to userspace because:
  Userspace cannot inject debug interrupt to guest (as this
  does not know guest ability to handle debug interrupt), so
  userspace will always clear DBSR.
  Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG
  handling then clearing dbsr in kernel looks simple as this
  avoid doing SET_SREGS/set_one_reg() to clear DBSR

Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
 arch/powerpc/kvm/booke.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Scott Wood Aug. 4, 2014, 10:46 p.m. UTC | #1
On Mon, 2014-08-04 at 13:22 +0530, Bharat Bhushan wrote:
> Dbsr is not visible to userspace and we do not think any need to
> expose this to userspace because:
>   Userspace cannot inject debug interrupt to guest (as this
>   does not know guest ability to handle debug interrupt), so
>   userspace will always clear DBSR.
>   Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG
>   handling then clearing dbsr in kernel looks simple as this
>   avoid doing SET_SREGS/set_one_reg() to clear DBSR
> 
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
>  arch/powerpc/kvm/booke.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> index 322da7d..5c2e26a 100644
> --- a/arch/powerpc/kvm/booke.c
> +++ b/arch/powerpc/kvm/booke.c
> @@ -735,6 +735,17 @@ static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu)
>  	struct debug_reg *dbg_reg = &(vcpu->arch.shadow_dbg_reg);
>  	u32 dbsr = vcpu->arch.dbsr;
>  
> +	/* Clear guest dbsr (vcpu->arch.dbsr).
> +	 * dbsr is not visible to userspace and we do not think any
> +	 * need to expose this to userspace because:
> +	 * Userspace cannot inject debug interrupt to guest (as this does
> +	 * not know guest ability to handle debug interrupt), so userspace
> +	 * will always clear DBSR.
> +	 * Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG
> +	 * handling then clearing here looks simple as this
> +	 * avoid doing SET_SREGS/set_one_reg() to clear DBSR
> +	 */
> +	vcpu->arch.dbsr = 0;
>  	run->debug.arch.status = 0;
>  	run->debug.arch.address = vcpu->arch.pc;
>  

I think the changelog is adequate -- I don't think we need to be so
verbose in the code itself.  The question was just whether this was a
userspace-visible change, and it isn't.

FWIW, I think dbsr should be visible to userspace in general (regardless
of whether it's cleared here), because all guest registers should be
visible to userspace.  I may be debugging a guest through means that
don't require owning debug resources, such as stopping and inspecting a
guest that has hung or crashed.

-Scott


--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bharat Bhushan Aug. 5, 2014, 3:33 a.m. UTC | #2
> -----Original Message-----

> From: Wood Scott-B07421

> Sent: Tuesday, August 05, 2014 4:17 AM

> To: Bhushan Bharat-R65777

> Cc: agraf@suse.de; kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; Yoder Stuart-

> B08248

> Subject: Re: [PATCH 4/5] KVM: PPC: BOOKE: Clear guest dbsr in userspace exit

> KVM_EXIT_DEBUG

> 

> On Mon, 2014-08-04 at 13:22 +0530, Bharat Bhushan wrote:

> > Dbsr is not visible to userspace and we do not think any need to

> > expose this to userspace because:

> >   Userspace cannot inject debug interrupt to guest (as this

> >   does not know guest ability to handle debug interrupt), so

> >   userspace will always clear DBSR.

> >   Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG

> >   handling then clearing dbsr in kernel looks simple as this

> >   avoid doing SET_SREGS/set_one_reg() to clear DBSR

> >

> > Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>

> > ---

> >  arch/powerpc/kvm/booke.c | 11 +++++++++++

> >  1 file changed, 11 insertions(+)

> >

> > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index

> > 322da7d..5c2e26a 100644

> > --- a/arch/powerpc/kvm/booke.c

> > +++ b/arch/powerpc/kvm/booke.c

> > @@ -735,6 +735,17 @@ static int kvmppc_handle_debug(struct kvm_run *run,

> struct kvm_vcpu *vcpu)

> >  	struct debug_reg *dbg_reg = &(vcpu->arch.shadow_dbg_reg);

> >  	u32 dbsr = vcpu->arch.dbsr;

> >

> > +	/* Clear guest dbsr (vcpu->arch.dbsr).

> > +	 * dbsr is not visible to userspace and we do not think any

> > +	 * need to expose this to userspace because:

> > +	 * Userspace cannot inject debug interrupt to guest (as this does

> > +	 * not know guest ability to handle debug interrupt), so userspace

> > +	 * will always clear DBSR.

> > +	 * Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG

> > +	 * handling then clearing here looks simple as this

> > +	 * avoid doing SET_SREGS/set_one_reg() to clear DBSR

> > +	 */

> > +	vcpu->arch.dbsr = 0;

> >  	run->debug.arch.status = 0;

> >  	run->debug.arch.address = vcpu->arch.pc;

> >

> 

> I think the changelog is adequate -- I don't think we need to be so verbose in

> the code itself.  The question was just whether this was a userspace-visible

> change, and it isn't.


Ok, will make a small comment.

> 

> FWIW, I think dbsr should be visible to userspace in general (regardless of

> whether it's cleared here), because all guest registers should be visible to

> userspace.  I may be debugging a guest through means that don't require owning

> debug resources, such as stopping and inspecting a guest that has hung or

> crashed.


Do you mean that we should also add a one-reg interface for DBSR ?

Thanks
-Bharat

> 

> -Scott

>
Scott Wood Aug. 5, 2014, 3:36 a.m. UTC | #3
On Mon, 2014-08-04 at 22:33 -0500, Bhushan Bharat-R65777 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, August 05, 2014 4:17 AM
> > To: Bhushan Bharat-R65777
> > Cc: agraf@suse.de; kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; Yoder Stuart-
> > B08248
> > Subject: Re: [PATCH 4/5] KVM: PPC: BOOKE: Clear guest dbsr in userspace exit
> > KVM_EXIT_DEBUG
> > 
> > FWIW, I think dbsr should be visible to userspace in general (regardless of
> > whether it's cleared here), because all guest registers should be visible to
> > userspace.  I may be debugging a guest through means that don't require owning
> > debug resources, such as stopping and inspecting a guest that has hung or
> > crashed.
> 
> Do you mean that we should also add a one-reg interface for DBSR ?

Yes.

-Scott


--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 322da7d..5c2e26a 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -735,6 +735,17 @@  static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu)
 	struct debug_reg *dbg_reg = &(vcpu->arch.shadow_dbg_reg);
 	u32 dbsr = vcpu->arch.dbsr;
 
+	/* Clear guest dbsr (vcpu->arch.dbsr).
+	 * dbsr is not visible to userspace and we do not think any
+	 * need to expose this to userspace because:
+	 * Userspace cannot inject debug interrupt to guest (as this does
+	 * not know guest ability to handle debug interrupt), so userspace
+	 * will always clear DBSR.
+	 * Now if userspace has to always clear DBSR in KVM_EXIT_DEBUG
+	 * handling then clearing here looks simple as this
+	 * avoid doing SET_SREGS/set_one_reg() to clear DBSR
+	 */
+	vcpu->arch.dbsr = 0;
 	run->debug.arch.status = 0;
 	run->debug.arch.address = vcpu->arch.pc;