PERFORCE change 106744 for review
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Tue Sep 26 13:50:34 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=106744
Change 106744 by gonzo at gonzo_hq on 2006/09/26 20:50:17
o Make tlb_update and tlb_invalidate_page ASID-aware.
o Add some *very* initial ASID initialization.
Affected files ...
.. //depot/projects/mips2/src/sys/mips/include/tlb.h#5 edit
.. //depot/projects/mips2/src/sys/mips/mips/pmap.c#11 edit
.. //depot/projects/mips2/src/sys/mips/mips/tlb.c#9 edit
.. //depot/projects/mips2/src/sys/mips/mips/trap.c#8 edit
Differences ...
==== //depot/projects/mips2/src/sys/mips/include/tlb.h#5 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $P4: //depot/projects/mips2/src/sys/mips/include/tlb.h#4 $
+ * $P4: //depot/projects/mips2/src/sys/mips/include/tlb.h#5 $
*/
#ifndef _MACHINE_TLB_H_
@@ -39,11 +39,11 @@
void tlb_enter(pmap_t, vm_offset_t, vm_paddr_t, pt_entry_t);
void tlb_invalidate_all(void);
void tlb_invalidate_one(int);
-void tlb_invalidate_page(vm_offset_t);
+void tlb_invalidate_page(vm_offset_t, uint32_t);
void tlb_modified(pmap_t, void *);
void tlb_remove(pmap_t, vm_offset_t);
void tlb_remove_pages(pmap_t, vm_offset_t, int);
void tlb_remove_range(pmap_t, vm_offset_t, vm_offset_t);
-void tlb_update(vm_offset_t, pt_entry_t, pt_entry_t);
+void tlb_update(vm_offset_t, uint32_t, pt_entry_t, pt_entry_t);
#endif /* _MACHINE_TLB_H_ */
==== //depot/projects/mips2/src/sys/mips/mips/pmap.c#11 (text+ko) ====
@@ -455,7 +455,7 @@
{
if (pmap->pm_active) {
- tlb_invalidate_page(va);
+ tlb_invalidate_page(va, pmap->pm_asid);
/* XXX ensure coherency? */
} else {
pmap_invalidate_asid(pmap);
@@ -758,8 +758,9 @@
pmap->pm_ptphint = NULL;
pmap->pm_active = 0;
- pmap->pm_asid = 0;
- pmap->pm_asidgen = 0;
+ /* XXXMIPS: put proper asid generation here */
+ pmap->pm_asid = 1;
+ pmap->pm_asidgen = 1;
TAILQ_INIT(&pmap->pm_pvlist);
bzero(&pmap->pm_stats, sizeof pmap->pm_stats);
mtx_lock_spin(&allpmaps_lock);
==== //depot/projects/mips2/src/sys/mips/mips/tlb.c#9 (text+ko) ====
@@ -136,7 +136,7 @@
pte = pmap_pte(pmap, va);
if (pte_valid(pte))
- tlb_invalidate_page(va);
+ tlb_invalidate_page(va, pmap->pm_asid);
else
mips_dcache_wbinv_range_index(va, PAGE_SIZE);
if ((bits & PG_V) == 0)
@@ -147,9 +147,9 @@
*pte |= PG_C_UNCACHED;
if ((va >> PAGE_SHIFT) & 1)
- tlb_update(va, pte[-1], pte[0]);
+ tlb_update(va, pmap->pm_asid, pte[-1], pte[0]);
else
- tlb_update(va, pte[0], pte[1]);
+ tlb_update(va, pmap->pm_asid, pte[0], pte[1]);
}
void
@@ -161,7 +161,7 @@
pte = pmap_pte(pmap, va);
pte_clear(pte, PG_V);
- tlb_invalidate_page(va);
+ tlb_invalidate_page(va, pmap->pm_asid);
}
void
@@ -181,13 +181,13 @@
}
void
-tlb_update(vm_offset_t va, pt_entry_t pte0, pt_entry_t pte1)
+tlb_update(vm_offset_t va, uint32_t asid, pt_entry_t pte0, pt_entry_t pte1)
{
u_long ehi;
int i;
va &= ~PAGE_MASK;
- ehi = MIPS_HI_ENTRY(va, /*asid*/0);
+ ehi = MIPS_HI_ENTRY(va, asid);
mips_wr_entryhi(ehi);
mips_tlbp();
i = mips_rd_index();
@@ -227,13 +227,13 @@
}
void
-tlb_invalidate_page(vm_offset_t va)
+tlb_invalidate_page(vm_offset_t va, uint32_t asid)
{
u_long ehi;
int i;
va &= ~PAGE_MASK;
- ehi = MIPS_HI_ENTRY(va, /*asid*/0);
+ ehi = MIPS_HI_ENTRY(va, asid);
mips_wr_entryhi(ehi);
mips_tlbp();
i = mips_rd_index();
@@ -270,8 +270,8 @@
*pte |= PG_D;
if ((va >> PAGE_SHIFT) & 1) {
- tlb_update(va, pte[-1], pte[0]);
+ tlb_update(va, pmap->pm_asid, pte[-1], pte[0]);
} else {
- tlb_update(va, pte[0], pte[1]);
+ tlb_update(va, pmap->pm_asid, pte[0], pte[1]);
}
}
==== //depot/projects/mips2/src/sys/mips/mips/trap.c#8 (text+ko) ====
@@ -144,9 +144,11 @@
}
if ((va >> PAGE_SHIFT) & 1)
- tlb_update(va, pte[-1], pte[0]);
+ tlb_update(va, kernel_pmap->pm_asid,
+ pte[-1], pte[0]);
else
- tlb_update(va, pte[0], pte[1]);
+ tlb_update(va, kernel_pmap->pm_asid,
+ pte[0], pte[1]);
goto done;
} else
map = &td->td_proc->p_vmspace->vm_map;
More information about the p4-projects
mailing list