Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jul 2009 10:27:30 +0200
From:      Michal Hajduk <mih@semihalf.com>
To:        Mark Tinguely <tinguely@casselton.net>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: pmap problem in FreeBSD current
Message-ID:  <4A56FB72.9040807@semihalf.com>
In-Reply-To: <200907081551.n68FpFeM073177@casselton.net>
References:  <200907081551.n68FpFeM073177@casselton.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Mark,
We've diagnosed the problem and it was related to arm_nocache_remap().
When the page was remaped into non-cacheable virtual memory region
there was no dcache write-back operation, so count of free items in
slab had differ value then should had.
This write-back operation should have been done in pmap_set_cache_entry()
but PVF_REF flag was missing so this part of code was omitted.

I think that we should enable PVF_REF flag in pmap_enter_pv().

================================================

diff --git a/sys/arm/arm/pmap.c b/sys/arm/arm/pmap.c
index 3cdab65..133dc6d 100644
--- a/sys/arm/arm/pmap.c
+++ b/sys/arm/arm/pmap.c
@@ -1683,7 +1683,7 @@ pmap_enter_pv(struct vm_page *pg, struct pv_entry 
*pve, pmap_t pm,
/* PMAP_ASSERT_LOCKED(pmap_kernel()); */
pve->pv_pmap = pmap_kernel();
pve->pv_va = pg->md.pv_kva;
- pve->pv_flags = PVF_WRITE | PVF_UNMAN;
+ pve->pv_flags = PVF_WRITE | PVF_UNMAN | PVF_REF;
pg->md.pv_kva = 0;

TAILQ_INSERT_HEAD(&pg->md.pv_list, pve, pv_list);

=================================================

With this patch I've had no panics.

Many thanks,
MichaƂ Hajduk



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A56FB72.9040807>