All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiao Guangrong <guangrong.xiao@linux.intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 08/15] KVM: MTRR: introduce fixed_mtrr_segment table
Date: Wed, 03 Jun 2015 10:29:34 +0800	[thread overview]
Message-ID: <556E668E.8000605@linux.intel.com> (raw)
In-Reply-To: <556C2526.6090901@redhat.com>



On 06/01/2015 05:25 PM, Paolo Bonzini wrote:
>
>
> On 30/05/2015 12:59, Xiao Guangrong wrote:
>> This table summarizes the information of fixed MTRRs and introduce some APIs
>> to abstract its operation which helps us to clean up the code and will be
>> used in later patches
>>
>> Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
>> ---
>>   arch/x86/kvm/mtrr.c | 191 ++++++++++++++++++++++++++++++++++++++--------------
>>   1 file changed, 142 insertions(+), 49 deletions(-)
>>
>> diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c
>> index d3c06d2..888441e 100644
>> --- a/arch/x86/kvm/mtrr.c
>> +++ b/arch/x86/kvm/mtrr.c
>> @@ -102,12 +102,126 @@ bool kvm_mtrr_valid(struct kvm_vcpu *vcpu, u32 msr, u64 data)
>>   }
>>   EXPORT_SYMBOL_GPL(kvm_mtrr_valid);
>>
>> +struct fixed_mtrr_segment {
>> +	u64 start;
>> +	u64 end;
>> +
>> +	/*
>> +	 * unit corresponds to the MSR entry in this segment, the size
>> +	 * of unit is covered in one MSR.
>> +	 */
>> +	u64 unit_size;
>> +
>> +	/* a range is covered in one memory cache type. */
>> +	u64 range_size;
>> +
>> +	/* the start position in kvm_mtrr.fixed_ranges[]. */
>> +	int range_start;
>> +};
>> +
>> +static struct fixed_mtrr_segment fixed_seg_table[] = {
>> +	/* MSR_MTRRfix64K_00000, 1 unit. 64K fixed mtrr. */
>> +	{
>> +		.start = 0x0,
>> +		.end = 0x80000,
>> +		.unit_size = 0x80000,
>
> Unit size is always range size * 8.

Good catch, will drop this.

>
>> +		.range_size = 1ULL << 16,
>
> Perhaps 64 * 1024 (and so on below) is clearer, because it matches the
> name of the MSR?

Yes, it's better.

>
>> +		.range_start = 0,
>> +	},
>> +
>> +	/*
>> +	 * MSR_MTRRfix16K_80000 ... MSR_MTRRfix16K_A0000, 2 units,
>> +	 * 16K fixed mtrr.
>> +	 */
>> +	{
>> +		.start = 0x80000,
>> +		.end = 0xc0000,
>> +		.unit_size = (0xc0000 - 0x80000) / 2,
>> +		.range_size = 1ULL << 14,
>> +		.range_start = 8,
>> +	},
>> +
>> +	/*
>> +	 * MSR_MTRRfix4K_C0000 ... MSR_MTRRfix4K_F8000, 8 units,
>> +	 * 4K fixed mtrr.
>> +	 */
>> +	{
>> +		.start = 0xc0000,
>> +		.end = 0x100000,
>> +		.unit_size = (0x100000 - 0xc0000) / 8,
>> +		.range_size = 1ULL << 12,
>> +		.range_start = 24,
>> +	}
>> +};
>> +
>> +static int fixed_msr_to_range_index(u32 msr)
>> +{
>> +	int seg, unit;
>> +
>> +	if (!fixed_msr_to_seg_unit(msr, &seg, &unit))
>> +		return -1;
>> +
>> +	fixed_mtrr_seg_unit_range_index(seg, unit);
>
> This looks wrong.

Oops, should be "return fixed_mtrr_seg_unit_range_index(seg, unit);" :(

>
>> +	return 0;
>> +}
>> +
>>   static void update_mtrr(struct kvm_vcpu *vcpu, u32 msr)
>>   {
>>   	struct kvm_mtrr *mtrr_state = &vcpu->arch.mtrr_state;
>>   	gfn_t start, end, mask;
>>   	int index;
>> -	bool is_fixed = true;
>>
>>   	if (msr == MSR_IA32_CR_PAT || !tdp_enabled ||
>>   	      !kvm_arch_has_noncoherent_dma(vcpu->kvm))
>> @@ -116,32 +230,19 @@ static void update_mtrr(struct kvm_vcpu *vcpu, u32 msr)
>>   	if (!mtrr_state->mtrr_enabled && msr != MSR_MTRRdefType)
>>   		return;
>>
>> +	if (fixed_msr_to_range(msr, &start, &end)) {
>> +		if (!mtrr_state->fixed_mtrr_enabled)
>> +			return;
>> +		goto do_zap;
>> +	}
>> +
>>   	switch (msr) {
>
> Please move defType handling in an "if" above "if
> (fixed_msr_to_range(msr, &start, &end))".  Then you don't need the goto.
>

Yes, indeed. Will do it in the next version.

  reply	other threads:[~2015-06-03  2:29 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-30 10:59 [PATCH 00/15] KVM: x86: fully implement vMTRR Xiao Guangrong
2015-05-30 10:58 ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 01/15] KVM: x86: move MTRR related code to a separate file Xiao Guangrong
2015-05-30 10:59 ` [PATCH 02/15] KVM: MTRR: handle MSR_MTRRcap in kvm_mtrr_get_msr Xiao Guangrong
2015-05-30 10:59 ` [PATCH 03/15] KVM: MTRR: remove mtrr_state.have_fixed Xiao Guangrong
2015-05-30 10:59 ` [PATCH 04/15] KVM: MTRR: exactly define the size of variable MTRRs Xiao Guangrong
2015-05-30 10:59 ` [PATCH 05/15] KVM: MTRR: clean up mtrr default type Xiao Guangrong
2015-06-01  9:11   ` Paolo Bonzini
2015-06-03  1:55     ` Xiao Guangrong
2015-06-09  0:35   ` David Matlack
2015-05-30 10:59 ` [PATCH 06/15] KVM: MTRR: do not split 64 bits MSR content Xiao Guangrong
2015-05-30 10:59 ` [PATCH 07/15] KVM: MTRR: improve kvm_mtrr_get_guest_memory_type Xiao Guangrong
2015-06-01  9:16   ` Paolo Bonzini
2015-06-03  2:12     ` Xiao Guangrong
2015-06-03  7:57       ` Paolo Bonzini
2015-05-30 10:59 ` [PATCH 08/15] KVM: MTRR: introduce fixed_mtrr_segment table Xiao Guangrong
2015-06-01  9:25   ` Paolo Bonzini
2015-06-03  2:29     ` Xiao Guangrong [this message]
2015-05-30 10:59 ` [PATCH 09/15] KVM: MTRR: introduce var_mtrr_range Xiao Guangrong
2015-06-09  0:36   ` David Matlack
2015-06-09  2:38     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 10/15] KVM: MTRR: sort variable MTRRs Xiao Guangrong
2015-06-01  9:27   ` Paolo Bonzini
2015-06-03  2:31     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 11/15] KVM: MTRR: introduce fixed_mtrr_addr_* functions Xiao Guangrong
2015-05-30 10:59 ` [PATCH 12/15] KVM: MTRR: introduce mtrr_for_each_mem_type Xiao Guangrong
2015-06-01  9:33   ` Paolo Bonzini
2015-06-01 14:26     ` Paolo Bonzini
2015-06-03  2:57       ` Xiao Guangrong
2015-06-03  2:40     ` Xiao Guangrong
2015-06-09  0:36   ` David Matlack
2015-06-09  2:45     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 13/15] KVM: MTRR: simplify kvm_mtrr_get_guest_memory_type Xiao Guangrong
2015-05-30 10:59 ` [PATCH 14/15] KVM: MTRR: do not map huage page for non-consistent range Xiao Guangrong
2015-06-01  9:36   ` Paolo Bonzini
2015-06-01  9:38     ` Paolo Bonzini
2015-06-03  2:56     ` Xiao Guangrong
2015-06-03  7:55       ` Paolo Bonzini
2015-06-04  8:23         ` Xiao Guangrong
2015-06-04  8:26           ` Xiao Guangrong
2015-06-04  8:34             ` Paolo Bonzini
2015-06-04  8:36           ` Paolo Bonzini
2015-06-05  6:33             ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 15/15] KVM: VMX: fully implement guest MTRR virtualization Xiao Guangrong

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=556E668E.8000605@linux.intel.com \
    --to=guangrong.xiao@linux.intel.com \
    --cc=gleb@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    /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.