Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Feb 2018 19:43:30 +0000 (11:43 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Feb 2018 19:43:30 +0000 (11:43 -0800)
Pull x86 fixes from Thomas Gleixner:
 "A small set of changes:

   - a fixup for kexec related to 5-level paging mode. That covers most
     of the cases except kexec from a 5-level kernel to a 4-level
     kernel. The latter needs more work and is going to come in 4.17

   - two trivial fixes for build warnings triggered by LTO and gcc-8"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/power: Fix swsusp_arch_resume prototype
  x86/dumpstack: Avoid uninitlized variable
  x86/kexec: Make kexec (mostly) work in 5-level paging mode

arch/x86/kernel/dumpstack.c
arch/x86/kernel/relocate_kernel_64.S
arch/x86/power/hibernate_32.c
arch/x86/power/hibernate_64.c
include/linux/suspend.h
kernel/power/power.h

index afbecff..a2d8a39 100644 (file)
@@ -109,7 +109,7 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
        struct stack_info stack_info = {0};
        unsigned long visit_mask = 0;
        int graph_idx = 0;
-       bool partial;
+       bool partial = false;
 
        printk("%sCall Trace:\n", log_lvl);
 
index 307d3ba..11eda21 100644 (file)
@@ -68,6 +68,9 @@ relocate_kernel:
        movq    %cr4, %rax
        movq    %rax, CR4(%r11)
 
+       /* Save CR4. Required to enable the right paging mode later. */
+       movq    %rax, %r13
+
        /* zero out flags, and disable interrupts */
        pushq $0
        popfq
@@ -126,8 +129,13 @@ identity_mapped:
        /*
         * Set cr4 to a known state:
         *  - physical address extension enabled
+        *  - 5-level paging, if it was enabled before
         */
        movl    $X86_CR4_PAE, %eax
+       testq   $X86_CR4_LA57, %r13
+       jz      1f
+       orl     $X86_CR4_LA57, %eax
+1:
        movq    %rax, %cr4
 
        jmp 1f
index c35fdb5..afc4ed7 100644 (file)
@@ -145,7 +145,7 @@ static inline void resume_init_first_level_page_table(pgd_t *pg_dir)
 #endif
 }
 
-int swsusp_arch_resume(void)
+asmlinkage int swsusp_arch_resume(void)
 {
        int error;
 
index f910c51..0ef5e52 100644 (file)
@@ -174,7 +174,7 @@ out:
        return 0;
 }
 
-int swsusp_arch_resume(void)
+asmlinkage int swsusp_arch_resume(void)
 {
        int error;
 
index cc22a24..440b62f 100644 (file)
@@ -384,6 +384,8 @@ extern int swsusp_page_is_forbidden(struct page *);
 extern void swsusp_set_page_free(struct page *);
 extern void swsusp_unset_page_free(struct page *);
 extern unsigned long get_safe_page(gfp_t gfp_mask);
+extern asmlinkage int swsusp_arch_suspend(void);
+extern asmlinkage int swsusp_arch_resume(void);
 
 extern void hibernation_set_ops(const struct platform_hibernation_ops *ops);
 extern int hibernate(void);
index f29cd17..9e58bdc 100644 (file)
@@ -104,9 +104,6 @@ extern int in_suspend;
 extern dev_t swsusp_resume_device;
 extern sector_t swsusp_resume_block;
 
-extern asmlinkage int swsusp_arch_suspend(void);
-extern asmlinkage int swsusp_arch_resume(void);
-
 extern int create_basic_memory_bitmaps(void);
 extern void free_basic_memory_bitmaps(void);
 extern int hibernate_preallocate_memory(void);