Call kvm_uncache() from dvma_malloc() where it belongs and make sure

it's called when SUN4M is nor defined.
Merge in changes from Jason to make dvma_mapin() work on (sun4c) machines
with a write-back cache.
This commit is contained in:
pk 1996-10-28 23:02:54 +00:00
parent 0c32bba802
commit 59b640b2fc

View File

@ -1,4 +1,4 @@
/* $NetBSD: vm_machdep.c,v 1.28 1996/08/02 13:44:48 pk Exp $ */
/* $NetBSD: vm_machdep.c,v 1.29 1996/10/28 23:02:54 pk Exp $ */
/*
* Copyright (c) 1996
@ -114,12 +114,20 @@ dvma_malloc(len, kaddr, flags)
{
vm_offset_t kva;
vm_offset_t dva;
#if defined(SUN4M)
extern int has_iocache;
#endif
len = round_page(len);
kva = (vm_offset_t)malloc(len, M_DEVBUF, flags);
if (kva == NULL)
return (NULL);
#if defined(SUN4M)
if (!has_iocache)
#endif
kvm_uncache((caddr_t)kva, len >> PGSHIFT);
*(vm_offset_t *)kaddr = kva;
dva = dvma_mapin(kernel_map, kva, len, (flags & M_NOWAIT) ? 0 : 1);
if (dva == NULL) {
@ -155,20 +163,17 @@ dvma_mapin(map, va, len, canwait)
register int npf, s;
register vm_offset_t pa;
long off, pn;
#if defined(SUN4M)
extern int has_iocache;
#endif
vm_offset_t ova;
int olen;
ova = va;
olen = len;
off = (int)va & PGOFSET;
va -= off;
len = round_page(len + off);
npf = btoc(len);
#if defined(SUN4M)
if (!has_iocache)
kvm_uncache((caddr_t)va, len >> PGSHIFT);
#endif
s = splimp();
for (;;) {
@ -194,7 +199,7 @@ dvma_mapin(map, va, len, canwait)
pa = trunc_page(pa);
#if defined(SUN4M)
if (cputyp == CPU_SUN4M) {
if (CPU_ISSUN4M) {
iommu_enter(tva, pa);
} else
#endif
@ -217,6 +222,13 @@ dvma_mapin(map, va, len, canwait)
tva += PAGE_SIZE;
va += PAGE_SIZE;
}
/*
* XXX Only have to do this on write.
*/
if (vactype == VAC_WRITEBACK) /* XXX */
cache_flush((caddr_t)ova, olen); /* XXX */
return kva + off;
}