[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-arm-kernel
Subject:    Re: Arm linux software suspend
From:       Hiroki Kaminaga <kaminaga () sm ! sony ! co ! jp>
Date:       2005-08-09 12:54:17
Message-ID: 20050809.215417.41635390.kaminaga () sm ! sony ! co ! jp
[Download RAW message or body]

From: junjie cai <junjiec@gmail.com>
Subject: Re: Arm linux software suspend
Date: Tue, 9 Aug 2005 20:39:22 +0900

> hi,
> i think i forgot something in my patch
> (but i cannot show you now because i am at home now).
> according to this 2.6.11  kernel source:
> http://lxr.linux.no/source/kernel/power/swsusp.c#L867
> 
> 867 asmlinkage int swsusp_restore(void)
> 868 {
> 869         BUG_ON (nr_copy_pages_check != nr_copy_pages);
> 870         BUG_ON (pagedir_order_check != pagedir_order);
> 871         
> 872         /* Even mappings of "global" things (vmalloc) need to be fixed */
> 873         __flush_tlb_global();
> 874         return 0;
> 875 }
> 
> before __flush_tlb_global() , there should be a flush_cache_all()
> to clean the cache, or after the pgd changed , cache incoherent
> problem could happen.
> i dont know what is your version's source looks like,
> please check it.

my version is 2.6.11, and in swsusp_restore(void), there is no
flush_cache_all(). It is exactly same as:
http://lxr.linux.no/source/kernel/power/swsusp.c#L867


> and you may want to print the pgd address in save_processor_state & 
> restore_processor_state respectively, if they dont match and 
> flush_cache_all() is correctly called, then i think there is a great chance
> that your flash has some problem.

I tried again with flush_cache_all() called and print pgd (Translation
Table Base, register c2 of cp15) with your patch.

The result I got was:

* for simple case,
  at hibernate: save_processor_state pgd: 11f58000
                restore_processor_state pgd: 11f58000
  at wakeup (bootup): save_processor_state pgd: 10004000
                      restore_processor_state pgd: 11f58000

* for mmap case, 
  at hibernate: save_processor_state pgd: 11768000
                restore_processor_state pgd: 11768000
  at wakeup (bootup): save_processor_state pgd: 10004000
                      restore_processor_state pgd: 11768000

10004000 is the address of swapper_pg_dir, and is the correct value for 
pgd on bootup, I guess, from the src code: arch/arm/kernel/head.S.


> FYI, my target machines is arm926 + 64M Memory + IDE ...

Is it a custom target machine?

HK.
--

-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic