Lines Matching refs:mm

74 	struct mm_struct *mm = tb->mm;  in flush_tsb_user()  local
77 spin_lock_irqsave(&mm->context.lock, flags); in flush_tsb_user()
80 base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; in flush_tsb_user()
81 nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; in flush_tsb_user()
87 if (tb->huge && mm->context.tsb_block[MM_TSB_HUGE].tsb) { in flush_tsb_user()
88 base = (unsigned long) mm->context.tsb_block[MM_TSB_HUGE].tsb; in flush_tsb_user()
89 nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; in flush_tsb_user()
95 spin_unlock_irqrestore(&mm->context.lock, flags); in flush_tsb_user()
98 void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr, bool huge) in flush_tsb_user_page() argument
102 spin_lock_irqsave(&mm->context.lock, flags); in flush_tsb_user_page()
105 base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; in flush_tsb_user_page()
106 nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; in flush_tsb_user_page()
112 if (huge && mm->context.tsb_block[MM_TSB_HUGE].tsb) { in flush_tsb_user_page()
113 base = (unsigned long) mm->context.tsb_block[MM_TSB_HUGE].tsb; in flush_tsb_user_page()
114 nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; in flush_tsb_user_page()
120 spin_unlock_irqrestore(&mm->context.lock, flags); in flush_tsb_user_page()
131 static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsigned long tsb_bytes) in setup_tsb_params() argument
136 mm->context.tsb_block[tsb_idx].tsb_nentries = in setup_tsb_params()
153 tsb_paddr = __pa(mm->context.tsb_block[tsb_idx].tsb); in setup_tsb_params()
214 mm->context.tsb_block[tsb_idx].tsb_reg_val = tsb_reg; in setup_tsb_params()
215 mm->context.tsb_block[tsb_idx].tsb_map_vaddr = 0; in setup_tsb_params()
216 mm->context.tsb_block[tsb_idx].tsb_map_pte = 0; in setup_tsb_params()
222 mm->context.tsb_block[tsb_idx].tsb_reg_val = tsb_reg; in setup_tsb_params()
223 mm->context.tsb_block[tsb_idx].tsb_map_vaddr = base; in setup_tsb_params()
224 mm->context.tsb_block[tsb_idx].tsb_map_pte = tte; in setup_tsb_params()
229 struct hv_tsb_descr *hp = &mm->context.tsb_descr[tsb_idx]; in setup_tsb_params()
333 void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss) in tsb_grow() argument
369 if (mm->context.tsb_block[tsb_index].tsb == NULL && in tsb_grow()
380 if (mm->context.tsb_block[tsb_index].tsb != NULL) in tsb_grow()
381 mm->context.tsb_block[tsb_index].tsb_rss_limit = ~0UL; in tsb_grow()
410 spin_lock_irqsave(&mm->context.lock, flags); in tsb_grow()
412 old_tsb = mm->context.tsb_block[tsb_index].tsb; in tsb_grow()
414 (mm->context.tsb_block[tsb_index].tsb_reg_val & 0x7UL); in tsb_grow()
415 old_size = (mm->context.tsb_block[tsb_index].tsb_nentries * in tsb_grow()
424 (rss < mm->context.tsb_block[tsb_index].tsb_rss_limit))) { in tsb_grow()
425 spin_unlock_irqrestore(&mm->context.lock, flags); in tsb_grow()
431 mm->context.tsb_block[tsb_index].tsb_rss_limit = new_rss_limit; in tsb_grow()
448 mm->context.tsb_block[tsb_index].tsb = new_tsb; in tsb_grow()
449 setup_tsb_params(mm, tsb_index, new_size); in tsb_grow()
451 spin_unlock_irqrestore(&mm->context.lock, flags); in tsb_grow()
458 tsb_context_switch(mm); in tsb_grow()
462 smp_tsb_sync(mm); in tsb_grow()
470 int init_new_context(struct task_struct *tsk, struct mm_struct *mm) in init_new_context() argument
477 spin_lock_init(&mm->context.lock); in init_new_context()
479 mm->context.sparc64_ctx_val = 0UL; in init_new_context()
486 huge_pte_count = mm->context.huge_pte_count; in init_new_context()
487 mm->context.huge_pte_count = 0; in init_new_context()
495 mm->context.tsb_block[i].tsb = NULL; in init_new_context()
500 tsb_grow(mm, MM_TSB_BASE, get_mm_rss(mm)); in init_new_context()
504 tsb_grow(mm, MM_TSB_HUGE, huge_pte_count); in init_new_context()
507 if (unlikely(!mm->context.tsb_block[MM_TSB_BASE].tsb)) in init_new_context()
525 void destroy_context(struct mm_struct *mm) in destroy_context() argument
530 tsb_destroy_one(&mm->context.tsb_block[i]); in destroy_context()
534 if (CTX_VALID(mm->context)) { in destroy_context()
535 unsigned long nr = CTX_NRBITS(mm->context); in destroy_context()