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>