|
@@ -128,7 +128,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
|
|
|
* isn't free.
|
|
|
*/
|
|
|
#ifdef CONFIG_DEBUG_VM
|
|
|
- if (WARN_ON_ONCE(__read_cr3() != build_cr3(real_prev, prev_asid))) {
|
|
|
+ if (WARN_ON_ONCE(__read_cr3() != build_cr3(real_prev->pgd, prev_asid))) {
|
|
|
/*
|
|
|
* If we were to BUG here, we'd be very likely to kill
|
|
|
* the system so hard that we don't see the call trace.
|
|
@@ -195,7 +195,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
|
|
|
if (need_flush) {
|
|
|
this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);
|
|
|
this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);
|
|
|
- write_cr3(build_cr3(next, new_asid));
|
|
|
+ write_cr3(build_cr3(next->pgd, new_asid));
|
|
|
|
|
|
/*
|
|
|
* NB: This gets called via leave_mm() in the idle path
|
|
@@ -208,7 +208,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
|
|
|
trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
|
|
|
} else {
|
|
|
/* The new ASID is already up to date. */
|
|
|
- write_cr3(build_cr3_noflush(next, new_asid));
|
|
|
+ write_cr3(build_cr3_noflush(next->pgd, new_asid));
|
|
|
|
|
|
/* See above wrt _rcuidle. */
|
|
|
trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, 0);
|
|
@@ -288,7 +288,7 @@ void initialize_tlbstate_and_flush(void)
|
|
|
!(cr4_read_shadow() & X86_CR4_PCIDE));
|
|
|
|
|
|
/* Force ASID 0 and force a TLB flush. */
|
|
|
- write_cr3(build_cr3(mm, 0));
|
|
|
+ write_cr3(build_cr3(mm->pgd, 0));
|
|
|
|
|
|
/* Reinitialize tlbstate. */
|
|
|
this_cpu_write(cpu_tlbstate.loaded_mm_asid, 0);
|