Re: [PATCH 05/27] PPC: Split context init/destroy functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2010-04-16 at 00:11 +0200, Alexander Graf wrote:
> We need to reserve a context from KVM to make sure we have our own
> segment space. While we did that split for Book3S_64 already, 32 bit
> is still outstanding.
> 
> So let's split it now.
> 
> Signed-off-by: Alexander Graf <agraf@xxxxxxx>

Acked-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>


> ---
>  arch/powerpc/include/asm/mmu_context.h |    2 ++
>  arch/powerpc/mm/mmu_context_hash32.c   |   29 ++++++++++++++++++++++-------
>  2 files changed, 24 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h
> index 26383e0..81fb412 100644
> --- a/arch/powerpc/include/asm/mmu_context.h
> +++ b/arch/powerpc/include/asm/mmu_context.h
> @@ -27,6 +27,8 @@ extern int __init_new_context(void);
>  extern void __destroy_context(int context_id);
>  static inline void mmu_context_init(void) { }
>  #else
> +extern unsigned long __init_new_context(void);
> +extern void __destroy_context(unsigned long context_id);
>  extern void mmu_context_init(void);
>  #endif
>  
> diff --git a/arch/powerpc/mm/mmu_context_hash32.c b/arch/powerpc/mm/mmu_context_hash32.c
> index 0dfba2b..d0ee554 100644
> --- a/arch/powerpc/mm/mmu_context_hash32.c
> +++ b/arch/powerpc/mm/mmu_context_hash32.c
> @@ -60,11 +60,7 @@
>  static unsigned long next_mmu_context;
>  static unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1];
>  
> -
> -/*
> - * Set up the context for a new address space.
> - */
> -int init_new_context(struct task_struct *t, struct mm_struct *mm)
> +unsigned long __init_new_context(void)
>  {
>  	unsigned long ctx = next_mmu_context;
>  
> @@ -74,19 +70,38 @@ int init_new_context(struct task_struct *t, struct mm_struct *mm)
>  			ctx = 0;
>  	}
>  	next_mmu_context = (ctx + 1) & LAST_CONTEXT;
> -	mm->context.id = ctx;
> +
> +	return ctx;
> +}
> +EXPORT_SYMBOL_GPL(__init_new_context);
> +
> +/*
> + * Set up the context for a new address space.
> + */
> +int init_new_context(struct task_struct *t, struct mm_struct *mm)
> +{
> +	mm->context.id = __init_new_context();
>  
>  	return 0;
>  }
>  
>  /*
> + * Free a context ID. Make sure to call this with preempt disabled!
> + */
> +void __destroy_context(unsigned long ctx)
> +{
> +	clear_bit(ctx, context_map);
> +}
> +EXPORT_SYMBOL_GPL(__destroy_context);
> +
> +/*
>   * We're finished using the context for an address space.
>   */
>  void destroy_context(struct mm_struct *mm)
>  {
>  	preempt_disable();
>  	if (mm->context.id != NO_CONTEXT) {
> -		clear_bit(mm->context.id, context_map);
> +		__destroy_context(mm->context.id);
>  		mm->context.id = NO_CONTEXT;
>  	}
>  	preempt_enable();


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux