> How would you realize the function of saving/restoring the lbr stack on the > host? > > Here, we create a perf event on the host (please see guest_lbr_event_create > on patch 7), which essentially satisfies all the conditions (e.g. increases > cpuc->lbr_users) that are required to have the lbr stack saved/restored on > the vCPU switching. > > If we want to stop the host side lbr stack save/restore for the vCPU, we need > accordingly to call guest_lbr_event_release (in patch 7) to destroy that perf > event (the host doesn't automatically stop saving the lbr stack for the vCPU > if that perf event is still there). > > When would you call that release function? (we all know that the lbr doesn't > need to be saved when the guest is not using it, but we need to destroy that > perf event to achieve "doesn't need to be saved")
Maybe set a timer on DEBUGCTL LBR=0 ? A timer would provide hysteresis, so that quick toggles (like in a PMI handler) wouldn't do anything expensive. It needs new interfaces for perf anyways because we need to access the LBR state from the last save. -Andi