All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Bhushan Bharat-R65777 <R65777@freescale.com>
Cc: Wood Scott-B07421 <B07421@freescale.com>,
	"kvm-ppc@vger.kernel.org" <kvm-ppc@vger.kernel.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC debug registers
Date: Tue, 24 Jul 2012 12:46:27 +0000	[thread overview]
Message-ID: <500E9923.8070504@suse.de> (raw)
In-Reply-To: <6A3DF150A5B70D4F9B66A25E3F7C888D03DD61E6@039-SN2MPN1-023.039d.mgd.msft.net>

On 07/24/2012 03:04 AM, Bhushan Bharat-R65777 wrote:
>
>> -----Original Message-----
>> From: Alexander Graf [mailto:agraf@suse.de]
>> Sent: Monday, July 23, 2012 11:12 PM
>> To: Bhushan Bharat-R65777
>> Cc: Wood Scott-B07421; kvm-ppc@vger.kernel.org; kvm@vger.kernel.org
>> Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC debug
>> registers
>>
>> On 07/23/2012 05:48 PM, Bhushan Bharat-R65777 wrote:
>>>> -----Original Message-----
>>>> From: Wood Scott-B07421
>>>> Sent: Monday, July 23, 2012 9:12 PM
>>>> To: Bhushan Bharat-R65777
>>>> Cc: kvm-ppc@vger.kernel.org; agraf@suse.de; kvm@vger.kernel.org;
>>>> Bhushan Bharat-
>>>> R65777
>>>> Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC
>>>> debug registers
>>>>
>>>> On 07/23/2012 06:19 AM, Bharat Bhushan wrote:
>>>>> IAC/DAC are defined as 32 bit while they are 64 bit wide. So ONE_REG
>>>>> interface is added to set/get them.
>>>>>
>>>>> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
>>>>> ---
>>>>> v2:
>>>>>    - Using copy_to/from_user() apis.
>>>>>
>>>>>    arch/powerpc/include/asm/kvm.h      |   12 ++++++
>>>>>    arch/powerpc/include/asm/kvm_host.h |   28 ++++++++++++++-
>>>>>    arch/powerpc/kvm/booke.c            |   64
>> +++++++++++++++++++++++++++++++++-
>>>>>    arch/powerpc/kvm/booke_emulate.c    |    8 ++--
>>>>>    4 files changed, 104 insertions(+), 8 deletions(-)
>>>>>
>>>>> diff --git a/arch/powerpc/include/asm/kvm.h
>>>>> b/arch/powerpc/include/asm/kvm.h index 1bea4d8..3c14202 100644
>>>>> --- a/arch/powerpc/include/asm/kvm.h
>>>>> +++ b/arch/powerpc/include/asm/kvm.h
>>>>> @@ -221,6 +221,12 @@ struct kvm_sregs {
>>>>>
>>>>>    			__u32 dbsr;	/* KVM_SREGS_E_UPDATE_DBSR */
>>>>>    			__u32 dbcr[3];
>>>>> +			/*
>>>>> +			 * iac/dac registers are 64bit wide, while this API
>>>>> +			 * interface provides only lower 32 bits on 64 bit
>>>>> +			 * processors. ONE_REG interface is added for 64bit
>>>>> +			 * iac/dac registers.
>>>>> +			 */
>>>>>    			__u32 iac[4];
>>>>>    			__u32 dac[2];
>>>>>    			__u32 dvc[2];
>>>>> @@ -326,5 +332,11 @@ struct kvm_book3e_206_tlb_params {  };
>>>>>
>>>>>    #define KVM_REG_PPC_HIOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)
>>>>> +#define KVM_REG_PPC_IAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)
>>>>> +#define KVM_REG_PPC_IAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3)
>>>>> +#define KVM_REG_PPC_IAC3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4)
>>>>> +#define KVM_REG_PPC_IAC4	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5)
>>>>> +#define KVM_REG_PPC_DAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6)
>>>>> +#define KVM_REG_PPC_DAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7)
>>>>>
>>>>>    #endif /* __LINUX_KVM_POWERPC_H */ diff --git
>>>>> a/arch/powerpc/include/asm/kvm_host.h
>>>>> b/arch/powerpc/include/asm/kvm_host.h
>>>>> index 43cac48..2c0f015 100644
>>>>> --- a/arch/powerpc/include/asm/kvm_host.h
>>>>> +++ b/arch/powerpc/include/asm/kvm_host.h
>>>>> @@ -342,6 +342,31 @@ struct kvmppc_slb {
>>>>>    	bool class	: 1;
>>>>>    };
>>>>>
>>>>> +#ifdef CONFIG_BOOKE
>>>>> +# ifdef CONFIG_PPC_FSL_BOOK3E
>>>>> +#define KVMPPC_IAC_NUM	2
>>>>> +#define KVMPPC_DAC_NUM	2
>>>>> +# else
>>>>> +#define KVMPPC_IAC_NUM	4
>>>>> +#define KVMPPC_DAC_NUM	2
>>>>> +# endif
>>>>> +#define KVMPPC_MAX_IAC	4
>>>>> +#define KVMPPC_MAX_DAC	2
>>>>> +#endif
>>>>> +
>>>>> +struct kvmppc_debug_reg {
>>>>> +#ifdef CONFIG_BOOKE
>>>>> +	u32 dbcr0;
>>>>> +	u32 dbcr1;
>>>>> +	u32 dbcr2;
>>>>> +#ifdef CONFIG_KVM_E500MC
>>>>> +	u32 dbcr4;
>>>>> +#endif
>>>>> +	u64 iac[KVMPPC_MAX_IAC];
>>>>> +	u64 dac[KVMPPC_MAX_DAC];
>>>>> +#endif
>>>>> +};
>>>> Is there any reason for this to be a separate struct?
>>> No specific reason, The rest of debug ( which will follow sometime soon) uses
>> this structure and looks to make code look easy.
>>
>> So why not use an fsl / booke specific struct for the debug patches then? Debug
>> registers are really nothing common between book3s and booke, so we shouldn't
>> treat them as such by using the same struct definition.
>>
> All elements of struct are under #ifdef CONFIG_BOOKE? So for book3s it is as good as void, only struct type if declared. Do you want the struct type also under config_booke ?

struct kvmppc_booke_debug_reg {
    <lots of defines>
};

struct kvmppc_book3s_debug_reg {
    <lots of other defines>
};

void booke_foo() {
   struct kvmppc_booke_debug_reg r;
   r.dbcr0 = 0;
}

vs

struct kvmppc_debug_reg {
#ifdef CONFIG_BOOKE
   <lots of defines>
#else
   <lots of other defines>
#endif
};

void booke_foo() {
   struct kvmppc_debug_reg r;
   r.dbcr0 = 0;
}

Which one has less #ifdefs? Keep in mind that the less #ifdefs you have, 
the more readable and maintainable your code becomes, because config 
options have less effect on your syntax.


Alex


WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Bhushan Bharat-R65777 <R65777@freescale.com>
Cc: Wood Scott-B07421 <B07421@freescale.com>,
	"kvm-ppc@vger.kernel.org" <kvm-ppc@vger.kernel.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC debug registers
Date: Tue, 24 Jul 2012 14:46:27 +0200	[thread overview]
Message-ID: <500E9923.8070504@suse.de> (raw)
In-Reply-To: <6A3DF150A5B70D4F9B66A25E3F7C888D03DD61E6@039-SN2MPN1-023.039d.mgd.msft.net>

On 07/24/2012 03:04 AM, Bhushan Bharat-R65777 wrote:
>
>> -----Original Message-----
>> From: Alexander Graf [mailto:agraf@suse.de]
>> Sent: Monday, July 23, 2012 11:12 PM
>> To: Bhushan Bharat-R65777
>> Cc: Wood Scott-B07421; kvm-ppc@vger.kernel.org; kvm@vger.kernel.org
>> Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC debug
>> registers
>>
>> On 07/23/2012 05:48 PM, Bhushan Bharat-R65777 wrote:
>>>> -----Original Message-----
>>>> From: Wood Scott-B07421
>>>> Sent: Monday, July 23, 2012 9:12 PM
>>>> To: Bhushan Bharat-R65777
>>>> Cc: kvm-ppc@vger.kernel.org; agraf@suse.de; kvm@vger.kernel.org;
>>>> Bhushan Bharat-
>>>> R65777
>>>> Subject: Re: [PATCH v2] booke: Added ONE_REG interface for IAC/DAC
>>>> debug registers
>>>>
>>>> On 07/23/2012 06:19 AM, Bharat Bhushan wrote:
>>>>> IAC/DAC are defined as 32 bit while they are 64 bit wide. So ONE_REG
>>>>> interface is added to set/get them.
>>>>>
>>>>> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
>>>>> ---
>>>>> v2:
>>>>>    - Using copy_to/from_user() apis.
>>>>>
>>>>>    arch/powerpc/include/asm/kvm.h      |   12 ++++++
>>>>>    arch/powerpc/include/asm/kvm_host.h |   28 ++++++++++++++-
>>>>>    arch/powerpc/kvm/booke.c            |   64
>> +++++++++++++++++++++++++++++++++-
>>>>>    arch/powerpc/kvm/booke_emulate.c    |    8 ++--
>>>>>    4 files changed, 104 insertions(+), 8 deletions(-)
>>>>>
>>>>> diff --git a/arch/powerpc/include/asm/kvm.h
>>>>> b/arch/powerpc/include/asm/kvm.h index 1bea4d8..3c14202 100644
>>>>> --- a/arch/powerpc/include/asm/kvm.h
>>>>> +++ b/arch/powerpc/include/asm/kvm.h
>>>>> @@ -221,6 +221,12 @@ struct kvm_sregs {
>>>>>
>>>>>    			__u32 dbsr;	/* KVM_SREGS_E_UPDATE_DBSR */
>>>>>    			__u32 dbcr[3];
>>>>> +			/*
>>>>> +			 * iac/dac registers are 64bit wide, while this API
>>>>> +			 * interface provides only lower 32 bits on 64 bit
>>>>> +			 * processors. ONE_REG interface is added for 64bit
>>>>> +			 * iac/dac registers.
>>>>> +			 */
>>>>>    			__u32 iac[4];
>>>>>    			__u32 dac[2];
>>>>>    			__u32 dvc[2];
>>>>> @@ -326,5 +332,11 @@ struct kvm_book3e_206_tlb_params {  };
>>>>>
>>>>>    #define KVM_REG_PPC_HIOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)
>>>>> +#define KVM_REG_PPC_IAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)
>>>>> +#define KVM_REG_PPC_IAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3)
>>>>> +#define KVM_REG_PPC_IAC3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4)
>>>>> +#define KVM_REG_PPC_IAC4	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5)
>>>>> +#define KVM_REG_PPC_DAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6)
>>>>> +#define KVM_REG_PPC_DAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7)
>>>>>
>>>>>    #endif /* __LINUX_KVM_POWERPC_H */ diff --git
>>>>> a/arch/powerpc/include/asm/kvm_host.h
>>>>> b/arch/powerpc/include/asm/kvm_host.h
>>>>> index 43cac48..2c0f015 100644
>>>>> --- a/arch/powerpc/include/asm/kvm_host.h
>>>>> +++ b/arch/powerpc/include/asm/kvm_host.h
>>>>> @@ -342,6 +342,31 @@ struct kvmppc_slb {
>>>>>    	bool class	: 1;
>>>>>    };
>>>>>
>>>>> +#ifdef CONFIG_BOOKE
>>>>> +# ifdef CONFIG_PPC_FSL_BOOK3E
>>>>> +#define KVMPPC_IAC_NUM	2
>>>>> +#define KVMPPC_DAC_NUM	2
>>>>> +# else
>>>>> +#define KVMPPC_IAC_NUM	4
>>>>> +#define KVMPPC_DAC_NUM	2
>>>>> +# endif
>>>>> +#define KVMPPC_MAX_IAC	4
>>>>> +#define KVMPPC_MAX_DAC	2
>>>>> +#endif
>>>>> +
>>>>> +struct kvmppc_debug_reg {
>>>>> +#ifdef CONFIG_BOOKE
>>>>> +	u32 dbcr0;
>>>>> +	u32 dbcr1;
>>>>> +	u32 dbcr2;
>>>>> +#ifdef CONFIG_KVM_E500MC
>>>>> +	u32 dbcr4;
>>>>> +#endif
>>>>> +	u64 iac[KVMPPC_MAX_IAC];
>>>>> +	u64 dac[KVMPPC_MAX_DAC];
>>>>> +#endif
>>>>> +};
>>>> Is there any reason for this to be a separate struct?
>>> No specific reason, The rest of debug ( which will follow sometime soon) uses
>> this structure and looks to make code look easy.
>>
>> So why not use an fsl / booke specific struct for the debug patches then? Debug
>> registers are really nothing common between book3s and booke, so we shouldn't
>> treat them as such by using the same struct definition.
>>
> All elements of struct are under #ifdef CONFIG_BOOKE? So for book3s it is as good as void, only struct type if declared. Do you want the struct type also under config_booke ?

struct kvmppc_booke_debug_reg {
    <lots of defines>
};

struct kvmppc_book3s_debug_reg {
    <lots of other defines>
};

void booke_foo() {
   struct kvmppc_booke_debug_reg r;
   r.dbcr0 = 0;
}

vs

struct kvmppc_debug_reg {
#ifdef CONFIG_BOOKE
   <lots of defines>
#else
   <lots of other defines>
#endif
};

void booke_foo() {
   struct kvmppc_debug_reg r;
   r.dbcr0 = 0;
}

Which one has less #ifdefs? Keep in mind that the less #ifdefs you have, 
the more readable and maintainable your code becomes, because config 
options have less effect on your syntax.


Alex

  reply	other threads:[~2012-07-24 12:46 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-23 11:19 [PATCH v2] booke: Added ONE_REG interface for IAC/DAC debug registers Bharat Bhushan
2012-07-23 11:31 ` Bharat Bhushan
2012-07-23 15:42 ` Scott Wood
2012-07-23 15:42   ` Scott Wood
2012-07-23 15:48   ` Bhushan Bharat-R65777
2012-07-23 15:48     ` Bhushan Bharat-R65777
2012-07-23 16:02     ` Scott Wood
2012-07-23 16:02       ` Scott Wood
2012-07-23 17:41     ` Alexander Graf
2012-07-23 17:41       ` Alexander Graf
2012-07-24  1:04       ` Bhushan Bharat-R65777
2012-07-24  1:04         ` Bhushan Bharat-R65777
2012-07-24 12:46         ` Alexander Graf [this message]
2012-07-24 12:46           ` Alexander Graf
2012-07-24 13:26           ` Bhushan Bharat-R65777
2012-07-24 13:26             ` Bhushan Bharat-R65777
2012-07-24 14:56             ` Alexander Graf
2012-07-24 14:56               ` Alexander Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=500E9923.8070504@suse.de \
    --to=agraf@suse.de \
    --cc=B07421@freescale.com \
    --cc=R65777@freescale.com \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.