From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Herrenschmidt Subject: Re: [PATCH 20/27] Split init_new_context and destroy_context Date: Thu, 29 Oct 2009 13:48:07 +1100 Message-ID: <1256784487.26770.22.camel@pasglop> References: <1256137413-15256-1-git-send-email-agraf@suse.de> <1256137413-15256-2-git-send-email-agraf@suse.de> <1256137413-15256-3-git-send-email-agraf@suse.de> <1256137413-15256-4-git-send-email-agraf@suse.de> <1256137413-15256-5-git-send-email-agraf@suse.de> <1256137413-15256-6-git-send-email-agraf@suse.de> <1256137413-15256-7-git-send-email-agraf@suse.de> <1256137413-15256-8-git-send-email-agraf@suse.de> <1256137413-15256-9-git-send-email-agraf@suse.de> <1256137413-15256-10-git-send-email-agraf@suse.de> <1256137413-15256-11-git-send-email-agraf@suse.de> <1256137413-15256-12-git-send-email-agraf@suse.de> <1256137413-15256-13-git-send-email-agraf@suse.de> <1256137413-15256-14-git-send-email-agraf@suse.de> <1256137413-15256-15-git-send-email-agraf@suse.de> <1256137413-15256-16-git-send-email-agraf@suse.de> <1256137413-15256-17-git-send-email-agraf@suse.de> <1256137413-15256-18-git-send-email-agraf@suse.de> <1256137413-15256-19-git-send-email-agraf@suse.de> <1256137413-15256-20-git-send-email-agraf@suse.de> <1256137413-15256-21-git-send-email-agraf@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Avi Kivity , kvm-ppc , Hollis Blanchard , Arnd Bergmann , Kevin Wolf , bphilips-l3A5Bk7waGM@public.gmane.org, Marcelo Tosatti To: Alexander Graf Return-path: In-Reply-To: <1256137413-15256-21-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org> Sender: kvm-ppc-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: kvm.vger.kernel.org On Wed, 2009-10-21 at 17:03 +0200, Alexander Graf wrote: > For KVM we need to allocate a new context id, but don't really care about > all the mm context around it. > > So let's split the alloc and destroy functions for the context id, so we can > grab one without allocating an mm context. No objection. Might have been better calling the low level guys something like __get_mmu_context_id() / __put_mmu_context_id() but we can rename later. > Signed-off-by: Alexander Graf Acked-by: Benjamin Herrenschmidt --- > --- > arch/powerpc/include/asm/mmu_context.h | 5 +++++ > arch/powerpc/mm/mmu_context_hash64.c | 24 +++++++++++++++++++++--- > 2 files changed, 26 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h > index b34e94d..66b35d0 100644 > --- a/arch/powerpc/include/asm/mmu_context.h > +++ b/arch/powerpc/include/asm/mmu_context.h > @@ -23,6 +23,11 @@ extern void switch_slb(struct task_struct *tsk, struct mm_struct *mm); > extern void set_context(unsigned long id, pgd_t *pgd); > > #ifdef CONFIG_PPC_BOOK3S_64 > +extern int __init_new_context(void); > +extern void __destroy_context(int context_id); > +#endif > + > +#ifdef CONFIG_PPC_BOOK3S_64 > static inline void mmu_context_init(void) { } > #else > extern void mmu_context_init(void); > diff --git a/arch/powerpc/mm/mmu_context_hash64.c b/arch/powerpc/mm/mmu_context_hash64.c > index dbeb86a..b9e4cc2 100644 > --- a/arch/powerpc/mm/mmu_context_hash64.c > +++ b/arch/powerpc/mm/mmu_context_hash64.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > #include > > @@ -32,7 +33,7 @@ static DEFINE_IDR(mmu_context_idr); > #define NO_CONTEXT 0 > #define MAX_CONTEXT ((1UL << 19) - 1) > > -int init_new_context(struct task_struct *tsk, struct mm_struct *mm) > +int __init_new_context(void) > { > int index; > int err; > @@ -57,6 +58,18 @@ again: > return -ENOMEM; > } > > + return index; > +} > +EXPORT_SYMBOL_GPL(__init_new_context); > + > +int init_new_context(struct task_struct *tsk, struct mm_struct *mm) > +{ > + int index; > + > + index = __init_new_context(); > + if (index < 0) > + return index; > + > /* The old code would re-promote on fork, we don't do that > * when using slices as it could cause problem promoting slices > * that have been forced down to 4K > @@ -68,11 +81,16 @@ again: > return 0; > } > > -void destroy_context(struct mm_struct *mm) > +void __destroy_context(int context_id) > { > spin_lock(&mmu_context_lock); > - idr_remove(&mmu_context_idr, mm->context.id); > + idr_remove(&mmu_context_idr, context_id); > spin_unlock(&mmu_context_lock); > +} > +EXPORT_SYMBOL_GPL(__destroy_context); > > +void destroy_context(struct mm_struct *mm) > +{ > + __destroy_context(mm->context.id); > mm->context.id = NO_CONTEXT; > }