On Mon, May 4, 2015 at 8:02 AM, Boris Ostrovsky
<boris.ostrovsky@xxxxxxxxxx> wrote:
Commit 61f01dd941ba ("x86_64, asm: Work around AMD SYSRET SS descriptorLooks good to me, but:
attribute issue") makes AMD processors set SS to __KERNEL_DS in
__switch_to() to deal with cases when SS is NULL.
This breaks Xen PV guests who do not want to load SS with__KERNEL_DS.
Since the problem that the commit is trying to address would have to be
fixed in the hypervisor (if it in fact exists under Xen) there is no
reason to set X86_BUG_SYSRET_SS_ATTRS flag for PV VPCUs here.
This can be easily achieved by adding x86_hyper_xen_hvm.set_cpu_features
op which will clear this flag. (And since this structure is no longer
HVM-specific we should do some renaming).
static void __init xen_hvm_guest_init(void)How can a platform be "hvm" and "pv"? Is that the PVHVM thing?
{
+ if (xen_pv_domain())
+ return;
+
+static void xen_set_cpu_features(struct cpuinfo_x86 *c)I haven't followed all the twists and turns, but, if the guest
+{
+ if (xen_pv_domain())
+ clear_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS);
+}
platform is such that the guest kernel is really executing SYSRET and
we're on AMD, then we have the sysret_ss_attrs bug. If PVHVM has
xen_pv_domain() returning true but also uses SYSRET for real, then
this looks wrong.