[PATCH 2/2] powerpc/hibernate: add restore mmu context after resume
Scott Wood
scottwood at freescale.com
Thu Jul 11 07:42:57 EST 2013
On 07/10/2013 05:11:54 AM, Wang Dongsheng-B40534 wrote:
> Hi scott & ben,
>
> About this patch do you have any suggestions?
>
> Thanks
>
> - dongsheng
>
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Sunday, June 09, 2013 6:38 PM
> > To: benh at kernel.crashing.org
> > Cc: johannes at sipsolutions.net; anton at enomsg.org; Wood Scott-B07421;
> > galak at kernel.crashing.org; linuxppc-dev at lists.ozlabs.org; Wang
> Dongsheng-
> > B40534
> > Subject: [PATCH 2/2] powerpc/hibernate: add restore mmu context
> after
> > resume
> >
> > add restore_mmu_context to replace switch_mmu_context in
> > restore_processor_state, because the switch_mmu_context will do
> > a whole pile of stuff that are probably completely unnecessary.
> >
> > There just need to restore the existing process context, and
> > invalidate TLB for boot core.
> >
> > Signed-off-by: Wang Dongsheng <dongsheng.wang at freescale.com>
> > ---
> > arch/powerpc/include/asm/tlbflush.h | 2 ++
> > arch/powerpc/kernel/swsusp.c | 4 +---
> > arch/powerpc/mm/tlb_nohash.c | 12 ++++++++++++
> > 3 files changed, 15 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/tlbflush.h
> > b/arch/powerpc/include/asm/tlbflush.h
> > index 61a5927..c401fe3 100644
> > --- a/arch/powerpc/include/asm/tlbflush.h
> > +++ b/arch/powerpc/include/asm/tlbflush.h
> > @@ -44,6 +44,8 @@ extern void local_flush_tlb_page(struct
> vm_area_struct
> > *vma, unsigned long vmadd
> > extern void __local_flush_tlb_page(struct mm_struct *mm, unsigned
> long
> > vmaddr,
> > int tsize, int ind);
> >
> > +extern void restore_mmu_context(void);
> > +
> > #ifdef CONFIG_SMP
> > extern void flush_tlb_mm(struct mm_struct *mm);
> > extern void flush_tlb_page(struct vm_area_struct *vma, unsigned
> long
> > vmaddr);
> > diff --git a/arch/powerpc/kernel/swsusp.c
> b/arch/powerpc/kernel/swsusp.c
> > index eae33e1..0b104d7 100644
> > --- a/arch/powerpc/kernel/swsusp.c
> > +++ b/arch/powerpc/kernel/swsusp.c
> > @@ -32,7 +32,5 @@ void save_processor_state(void)
> >
> > void restore_processor_state(void)
> > {
> > -#ifdef CONFIG_PPC32
> > - switch_mmu_context(current->active_mm, current->active_mm);
> > -#endif
> > + restore_mmu_context();
> > }
> > diff --git a/arch/powerpc/mm/tlb_nohash.c
> b/arch/powerpc/mm/tlb_nohash.c
> > index df32a83..a5a0708 100644
> > --- a/arch/powerpc/mm/tlb_nohash.c
> > +++ b/arch/powerpc/mm/tlb_nohash.c
> > @@ -39,10 +39,12 @@
> > #include <linux/of_fdt.h>
> > #include <linux/hugetlb.h>
> >
> > +#include <asm/current.h>
> > #include <asm/tlbflush.h>
> > #include <asm/tlb.h>
> > #include <asm/code-patching.h>
> > #include <asm/hugetlb.h>
> > +#include <asm/mmu_context.h>
> >
> > #include "mmu_decl.h"
> >
> > @@ -193,6 +195,16 @@ void local_flush_tlb_page(struct
> vm_area_struct *vma,
> > unsigned long vmaddr)
> > }
> > EXPORT_SYMBOL(local_flush_tlb_page);
> >
> > +void restore_mmu_context(void)
> > +{
> > + struct mm_struct *mm = current->active_mm;
> > +
> > + set_context(mm->context.id, mm->pgd);
> > +
> > + _tlbil_all();
> > +}
> > +EXPORT_SYMBOL(restore_mmu_context);
What about targets that don't use tlb_nohash.c?
-Scott
More information about the Linuxppc-dev
mailing list