]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
x86/IBRS/IBPB: Set sysctl_ibrs/ibpb_enabled properly
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>
Wed, 10 Jan 2018 00:08:44 +0000 (19:08 -0500)
committerKirtikar Kashyap <kirtikar.kashyap@oracle.com>
Fri, 12 Jan 2018 18:33:04 +0000 (10:33 -0800)
init_scattered_cpuid_features() is called twice, first time from
early_cpu_init(), before 'noibrs' or 'noibpb' option are parsed.
This results in setting of sysctl_* variables. When we call
init_scattered_cpuid_features() the second time, after the boot options
have been parsed, init_scattered_cpuid_features() will leave sysctl_*
parameters unchanged (i.e. already set).

To avoid this, always set those variables based on ibrs/pb_inuse.

Orabug: 27382723

Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Signed-off-by: Kirtikar Kashyap <kirtikar.kashyap@oracle.com>
arch/x86/kernel/cpu/scattered.c

index 1dd9a5b09e0179ac1af9ebd9eddb9f2bf5155250..887580fdbc0f209edaa73e7a96745060c0a8a596 100644 (file)
@@ -97,17 +97,14 @@ void init_scattered_cpuid_features(struct cpuinfo_x86 *c)
                                return;
                        set_ibrs_supported();
                        set_ibpb_supported();
-                       if (ibrs_inuse)
-                               sysctl_ibrs_enabled = 1;
-                       if (ibpb_inuse)
-                               sysctl_ibpb_enabled = 1;
+                       sysctl_ibrs_enabled = ibrs_inuse ? 1 : 0;
+                       sysctl_ibpb_enabled = ibpb_inuse ? 1 : 0;
                } else if (boot_cpu_has(X86_FEATURE_IBPB)) {
                        printk_once(KERN_INFO "FEATURE IBPB Present%s\n", ignore ? " but ignored (Xen)": "");
                        if (ignore)
                                return;
                        set_ibpb_supported();
-                       if (ibpb_inuse)
-                               sysctl_ibpb_enabled = 1;
+                       sysctl_ibpb_enabled = ibpb_inuse ? 1 : 0;
                } else {
                        printk(KERN_INFO "FEATURE SPEC_CTRL Not Present\n");
                }