]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/x86/kernel/reboot.c
x86/cpu/AMD: Fix erratum 1076 (CPB bit)
[mirror_ubuntu-artful-kernel.git] / arch / x86 / kernel / reboot.c
index a56bf6051f4e3707594b1b5ddab9711da9c27117..32677fe5b284389482db976f1d4a51032260fee6 100644 (file)
@@ -31,6 +31,7 @@
 #include <asm/realmode.h>
 #include <asm/x86_init.h>
 #include <asm/efi.h>
+#include <asm/nospec-branch.h>
 
 /*
  * Power off function, if any
@@ -111,11 +112,11 @@ void __noreturn machine_real_restart(unsigned int type)
 
        /* Jump to the identity-mapped low memory code */
 #ifdef CONFIG_X86_32
-       asm volatile("jmpl *%0" : :
+       asm volatile(ANNOTATE_RETPOLINE_SAFE "jmpl *%0" : :
                     "rm" (real_mode_header->machine_real_restart_asm),
                     "a" (type));
 #else
-       asm volatile("ljmpl *%0" : :
+       asm volatile(ANNOTATE_RETPOLINE_SAFE "ljmpl *%0" : :
                     "m" (real_mode_header->machine_real_restart_asm),
                     "D" (type));
 #endif
@@ -454,7 +455,46 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"),
                },
        },
-
+       {       /* Handle problems with rebooting on the Latitude E6520. */
+               .callback = set_pci_reboot,
+               .ident = "Dell Latitude E6520",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6520"),
+               },
+       },
+       {       /* Handle problems with rebooting on the OptiPlex 790. */
+               .callback = set_pci_reboot,
+               .ident = "Dell OptiPlex 790",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 790"),
+               },
+       },
+       {       /* Handle problems with rebooting on the OptiPlex 990. */
+               .callback = set_pci_reboot,
+               .ident = "Dell OptiPlex 990",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"),
+               },
+       },
+       {       /* Handle problems with rebooting on the Latitude E6220. */
+               .callback = set_pci_reboot,
+               .ident = "Dell Latitude E6220",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6220"),
+               },
+       },
+       {       /* Handle problems with rebooting on the OptiPlex 390. */
+               .callback = set_pci_reboot,
+               .ident = "Dell OptiPlex 390",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 390"),
+               },
+       },
        { }
 };