Blackfin/ipipe: introduce support for CONFIG_MPU
Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Li Yi <yi.li@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
7d4a005c43
commit
4815b883ed
1 changed files with 31 additions and 2 deletions
|
@ -66,8 +66,8 @@ activate_l1stack(struct mm_struct *mm, unsigned long sp_base)
|
||||||
|
|
||||||
#define activate_mm(prev, next) switch_mm(prev, next, NULL)
|
#define activate_mm(prev, next) switch_mm(prev, next, NULL)
|
||||||
|
|
||||||
static inline void switch_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm,
|
static inline void __switch_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm,
|
||||||
struct task_struct *tsk)
|
struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MPU
|
#ifdef CONFIG_MPU
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
|
@ -95,7 +95,24 @@ static inline void switch_mm(struct mm_struct *prev_mm, struct mm_struct *next_m
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_IPIPE
|
||||||
|
#define lock_mm_switch(flags) local_irq_save_hw_cond(flags)
|
||||||
|
#define unlock_mm_switch(flags) local_irq_restore_hw_cond(flags)
|
||||||
|
#else
|
||||||
|
#define lock_mm_switch(flags) do { (void)(flags); } while (0)
|
||||||
|
#define unlock_mm_switch(flags) do { (void)(flags); } while (0)
|
||||||
|
#endif /* CONFIG_IPIPE */
|
||||||
|
|
||||||
#ifdef CONFIG_MPU
|
#ifdef CONFIG_MPU
|
||||||
|
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
|
struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
lock_mm_switch(flags);
|
||||||
|
__switch_mm(prev, next, tsk);
|
||||||
|
unlock_mm_switch(flags);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void protect_page(struct mm_struct *mm, unsigned long addr,
|
static inline void protect_page(struct mm_struct *mm, unsigned long addr,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
|
@ -128,6 +145,12 @@ static inline void update_protections(struct mm_struct *mm)
|
||||||
set_mask_dcplbs(mm->context.page_rwx_mask, cpu);
|
set_mask_dcplbs(mm->context.page_rwx_mask, cpu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else /* !CONFIG_MPU */
|
||||||
|
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
|
struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
__switch_mm(prev, next, tsk);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
||||||
|
@ -173,4 +196,10 @@ static inline void destroy_context(struct mm_struct *mm)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ipipe_mm_switch_protect(flags) \
|
||||||
|
local_irq_save_hw_cond(flags)
|
||||||
|
|
||||||
|
#define ipipe_mm_switch_unprotect(flags) \
|
||||||
|
local_irq_restore_hw_cond(flags)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue