Re: commit 3c2e7f7de3 (KVM use NPT page attributes) causes boot failures

From: Xiao Guangrong
Date: Wed Sep 02 2015 - 07:03:11 EST




On 09/02/2015 06:54 PM, Markus Trippelsdorf wrote:
On 2015.09.02 at 18:27 +0800, Xiao Guangrong wrote:


On 09/02/2015 05:38 PM, Markus Trippelsdorf wrote:
On 2015.09.02 at 17:17 +0800, Xiao Guangrong wrote:

No. PAT is of course enabled and booting is successful sometimes even
with the BUG() in allback_mtrr_type(). I suspect a setup (timing) issue.

Thanks for your confirmation.


markus@x4 linux % cat .config | grep X86_PAT
CONFIG_X86_PAT=y
markus@x4 linux % dmesg | grep PAT
[ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT

Strange, BP processor has already set WC to PAT1, however KVM does not read it out
from PAT MSR on its local CPU.

Hmm... PAT default values do not include WC, it seems initing PAT on SP has not
finished after module_init()?

Could please apply this diff and test it again?

(Your patch was malformed.)

[ 2.138098] kvm: Nested Virtualization enabled
[ 2.138153] kvm: Nested Paging enabled
[ 2.138204] KVM PAT: 0x7040600070406.

So the PAT is the value after CPU reset, it's likely PAT is not initialized on
the local CPU.

Could it be a simple AMD/INTEL difference. I'm running a AMD CPU and I
see many !use_intel() in if statements in arch/x86/kernel/cpu/mtrr/main.c...


#define use_intel() (mtrr_if && mtrr_if->use_intel_if == 1)

And i checked your CPU supports "mtrr" /proc/info, so it should use
generic_mtrr_ops and generic_mtrr_ops.use_intel_if = 1. That means AMD CPU
also use "intel" way. :)

Please refer to the initiation of "mtrr_if" in mtrr_bp_init().
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/