lkml.org 
[lkml]   [2004]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subjectswsusp: fix swsusp with intel-agp
    Hi!

    swsusp contained rather nasty bug where it killed machine when
    intel-agp or anything else split kernel 4MB mapping. Herbert Xu
    diagnosed this. Fixed by switching to "known good" mapping for during
    suspend/resume.

    Please apply,
    Pavel

    --- tmp/linux/arch/i386/mm/init.c 2004-05-20 23:08:05.000000000 +0200
    +++ linux/arch/i386/mm/init.c 2004-05-20 23:10:50.000000000 +0200
    @@ -331,6 +331,13 @@
    void zap_low_mappings (void)
    {
    int i;
    +
    +#ifdef CONFIG_SOFTWARE_SUSPEND
    + {
    + extern char swsusp_pg_dir[PAGE_SIZE];
    + memcpy(swsusp_pg_dir, swapper_pg_dir, PAGE_SIZE);
    + }
    +#endif
    /*
    * Zap initial low-memory mappings.
    *
    --- tmp/linux/arch/i386/power/cpu.c 2004-05-20 23:08:05.000000000 +0200
    +++ linux/arch/i386/power/cpu.c 2004-05-20 23:10:50.000000000 +0200
    @@ -35,6 +35,10 @@
    unsigned long saved_context_esi, saved_context_edi;
    unsigned long saved_context_eflags;

    +/* Special page directory for resume */
    +char __nosavedata swsusp_pg_dir[PAGE_SIZE]
    + __attribute__ ((aligned (PAGE_SIZE)));
    +
    extern void enable_sep_cpu(void *);

    void save_processor_state(void)
    --- tmp/linux/arch/i386/power/swsusp.S 2004-05-20 23:08:05.000000000 +0200
    +++ linux/arch/i386/power/swsusp.S 2004-05-20 23:11:05.000000000 +0200
    @@ -36,7 +38,7 @@
    jmp .L1449
    .p2align 4,,7
    .L1450:
    - movl $swapper_pg_dir-__PAGE_OFFSET,%ecx
    + movl $swsusp_pg_dir-__PAGE_OFFSET,%ecx
    movl %ecx,%cr3

    call do_magic_resume_1
    @@ -56,8 +58,6 @@
    movl (%ecx,%eax),%eax
    movb (%edx,%eax),%al
    movb %al,(%edx,%ebx)
    - movl %cr3, %eax;
    - movl %eax, %cr3; # flush TLB

    movl loop2,%eax
    leal 1(%eax),%edx
    --- tmp/linux/include/asm-i386/suspend.h 2003-09-28 22:06:36.000000000 +0200
    +++ linux/include/asm-i386/suspend.h 2004-04-27 23:10:24.000000000 +0200
    @@ -9,6 +9,9 @@
    static inline int
    arch_prepare_suspend(void)
    {
    + /* If you want to make non-PSE machine work, turn off paging
    + in do_magic. swsusp_pg_dir should have identity mapping, so
    + it could work... */
    if (!cpu_has_pse)
    return -EPERM;
    return 0;
    --
    934a471f20d6580d5aad759bf0d97ddc
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:03    [W:0.026 / U:29.280 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site