s390/uaccess: simplify control register updates
Always switch to the kernel ASCE in switch_mm. Load the secondary space ASCE in finish_arch_post_lock_switch after checking that any pending page table operations have completed. The primary ASCE is loaded in entry[64].S. With this the update_primary_asce call can be removed from the switch_to macro and from the start of switch_mm function. Remove the load_primary argument from update_user_asce/clear_user_asce, rename update_user_asce to set_user_asce and rename update_primary_asce to load_kernel_asce. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
这个提交包含在:
@@ -53,8 +53,10 @@ static void __crst_table_upgrade(void *arg)
|
||||
{
|
||||
struct mm_struct *mm = arg;
|
||||
|
||||
if (current->active_mm == mm)
|
||||
update_user_asce(mm, 1);
|
||||
if (current->active_mm == mm) {
|
||||
clear_user_asce();
|
||||
set_user_asce(mm);
|
||||
}
|
||||
__tlb_flush_local();
|
||||
}
|
||||
|
||||
@@ -108,7 +110,7 @@ void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)
|
||||
pgd_t *pgd;
|
||||
|
||||
if (current->active_mm == mm) {
|
||||
clear_user_asce(mm, 1);
|
||||
clear_user_asce();
|
||||
__tlb_flush_mm(mm);
|
||||
}
|
||||
while (mm->context.asce_limit > limit) {
|
||||
@@ -134,7 +136,7 @@ void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)
|
||||
crst_table_free(mm, (unsigned long *) pgd);
|
||||
}
|
||||
if (current->active_mm == mm)
|
||||
update_user_asce(mm, 1);
|
||||
set_user_asce(mm);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户