On Mon, Mar 29, 2021 at 01:41:29PM +0800, Like Xu wrote: > @@ -3869,10 +3876,12 @@ static struct perf_guest_switch_msr *intel_guest_get_msrs(int *nr, void *data) > > if (arr[1].guest) > arr[0].guest |= arr[1].guest; > - else > + else { > arr[1].guest = arr[1].host; > + arr[2].guest = arr[2].host; > + } What's all this gibberish? The way I read that it says: if guest has PEBS_ENABLED guest GLOBAL_CTRL |= PEBS_ENABLED otherwise guest PEBS_ENABLED = host PEBS_ENABLED guest DS_AREA = host DS_AREA which is just completely random garbage afaict. Why would you leak host msrs into the guest? Why would you change guest GLOBAL_CTRL implicitly; guest had better wrmsr that himself to control when stuff is enabled. This just cannot be right.