mtrr.c (9ae38b4fb13597ce1821376d23958bbe4976c759) | mtrr.c (34a83deac31cd9fdecef331578422095af2db4b0) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * vMTRR implementation 4 * 5 * Copyright (C) 2006 Qumranet, Inc. 6 * Copyright 2010 Red Hat, Inc. and/or its affiliates. 7 * Copyright(C) 2015 Intel Corporation. 8 * --- 20 unchanged lines hidden (view full) --- 29{ 30 /* MTRR base MSRs use even numbers, masks use odd numbers. */ 31 return !(msr & 0x1); 32} 33 34static struct kvm_mtrr_range *var_mtrr_msr_to_range(struct kvm_vcpu *vcpu, 35 unsigned int msr) 36{ | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * vMTRR implementation 4 * 5 * Copyright (C) 2006 Qumranet, Inc. 6 * Copyright 2010 Red Hat, Inc. and/or its affiliates. 7 * Copyright(C) 2015 Intel Corporation. 8 * --- 20 unchanged lines hidden (view full) --- 29{ 30 /* MTRR base MSRs use even numbers, masks use odd numbers. */ 31 return !(msr & 0x1); 32} 33 34static struct kvm_mtrr_range *var_mtrr_msr_to_range(struct kvm_vcpu *vcpu, 35 unsigned int msr) 36{ |
37 int index = (msr - 0x200) / 2; | 37 int index = (msr - MTRRphysBase_MSR(0)) / 2; |
38 39 return &vcpu->arch.mtrr_state.var_ranges[index]; 40} 41 42static bool msr_mtrr_valid(unsigned msr) 43{ 44 switch (msr) { | 38 39 return &vcpu->arch.mtrr_state.var_ranges[index]; 40} 41 42static bool msr_mtrr_valid(unsigned msr) 43{ 44 switch (msr) { |
45 case 0x200 ... 0x200 + 2 * KVM_NR_VAR_MTRR - 1: | 45 case MTRRphysBase_MSR(0) ... MTRRphysMask_MSR(KVM_NR_VAR_MTRR - 1): |
46 case MSR_MTRRfix64K_00000: 47 case MSR_MTRRfix16K_80000: 48 case MSR_MTRRfix16K_A0000: 49 case MSR_MTRRfix4K_C0000: 50 case MSR_MTRRfix4K_C8000: 51 case MSR_MTRRfix4K_D0000: 52 case MSR_MTRRfix4K_D8000: 53 case MSR_MTRRfix4K_E0000: --- 29 unchanged lines hidden (view full) --- 83 } else if (msr >= MSR_MTRRfix64K_00000 && msr <= MSR_MTRRfix4K_F8000) { 84 for (i = 0; i < 8 ; i++) 85 if (!valid_mtrr_type((data >> (i * 8)) & 0xff)) 86 return false; 87 return true; 88 } 89 90 /* variable MTRRs */ | 46 case MSR_MTRRfix64K_00000: 47 case MSR_MTRRfix16K_80000: 48 case MSR_MTRRfix16K_A0000: 49 case MSR_MTRRfix4K_C0000: 50 case MSR_MTRRfix4K_C8000: 51 case MSR_MTRRfix4K_D0000: 52 case MSR_MTRRfix4K_D8000: 53 case MSR_MTRRfix4K_E0000: --- 29 unchanged lines hidden (view full) --- 83 } else if (msr >= MSR_MTRRfix64K_00000 && msr <= MSR_MTRRfix4K_F8000) { 84 for (i = 0; i < 8 ; i++) 85 if (!valid_mtrr_type((data >> (i * 8)) & 0xff)) 86 return false; 87 return true; 88 } 89 90 /* variable MTRRs */ |
91 WARN_ON(!(msr >= 0x200 && msr < 0x200 + 2 * KVM_NR_VAR_MTRR)); | 91 WARN_ON(!(msr >= MTRRphysBase_MSR(0) && 92 msr <= MTRRphysMask_MSR(KVM_NR_VAR_MTRR - 1))); |
92 93 mask = kvm_vcpu_reserved_gpa_bits_raw(vcpu); 94 if ((msr & 1) == 0) { 95 /* MTRR base */ 96 if (!valid_mtrr_type(data & 0xff)) 97 return false; 98 mask |= 0xf00; 99 } else --- 628 unchanged lines hidden --- | 93 94 mask = kvm_vcpu_reserved_gpa_bits_raw(vcpu); 95 if ((msr & 1) == 0) { 96 /* MTRR base */ 97 if (!valid_mtrr_type(data & 0xff)) 98 return false; 99 mask |= 0xf00; 100 } else --- 628 unchanged lines hidden --- |