Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Jun 2014 11:45:49 -0500
From:      Alan Cox <alc@rice.edu>
To:        alc@freebsd.org, "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>, ian@FreeBSD.org
Subject:   Re: svn commit: r266850 - in head/sys/arm/xscale: i80321 i8134x ixp425 pxa
Message-ID:  <539887BD.2090408@rice.edu>
In-Reply-To: <20140611074159.GL31367@funkthat.com>
References:  <5395D312.5000302@rice.edu> <20140609163302.GS31367@funkthat.com> <5395E725.7020807@rice.edu> <20140609174431.GT31367@funkthat.com> <9100CDFA-0C40-4BC8-AA9C-1DE37EEA6208@rice.edu> <6DA17B5C-1824-49BF-8192-432135D42C6E@bsdimp.com> <20140609221742.GV31367@funkthat.com> <539730B1.2040900@rice.edu> <20140610170052.GF31367@funkthat.com> <5397F089.90403@rice.edu> <20140611074159.GL31367@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------090707050109010501090800
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

On 06/11/2014 02:41, John-Mark Gurney wrote:
> Alan Cox wrote this message on Wed, Jun 11, 2014 at 01:00 -0500:
>> On 06/10/2014 12:00, John-Mark Gurney wrote:
>>> Alan Cox wrote this message on Tue, Jun 10, 2014 at 11:22 -0500:
>>>> On 06/09/2014 17:17, John-Mark Gurney wrote:
>>>>> Warner Losh wrote this message on Mon, Jun 09, 2014 at 14:08 -0600:
>>>>>> On Jun 9, 2014, at 1:23 PM, Alan Cox <alc@rice.edu> wrote:
>>>>>>
>>>>>>> On Jun 9, 2014, at 12:44 PM, John-Mark Gurney wrote:
>>>>>>>
>>>>>>>> Alan Cox wrote this message on Mon, Jun 09, 2014 at 11:56 -0500:
>>>>>>>>> I made a mistake with the new KASSERT()s in vm_reserv_break().  Try this.
>>>>>>>> No worried, the new patch panics:
>>>>>>>> panic: vm_reserv_break: 2 saved_object=0xc06e6378 x=253 m_tmp->object=0xc06e6378 (1)
>>>>>>>>
>>>>>>> Is your arm processor running in big-endian or little-endian mode?
>>>>>> Big Endian.
>>>>> Specificly, TARGET_ARCH=armeb...  So, ARMv4 in big-endian mode...
>>>>>
>>>> Please try the attached patch.
>>> This patch now boots to multiuser mode and I can log in!
>>>
>>> I can now more easily debug newsyslog segfaulting and stuff... I'll
>>> let you know if I have any more issues...
>>>
>>> Thanks again for tracking this down!
>>>
>> Here is a commit-able patch.  Please tell me if it works.
> So, it worked for a while, but it looks like there are still lingering
> bugs...  Not sure if this is the same, or different...

This is an entirely different problem.  It's also a much simpler problem.

A simple workaround patch is attached.  Go ahead and commit this patch
yourself if it helps.

> While doing portsnap extract, I got the following panic:
> panic: Lock vm object not exclusively locked @ /usr/src.avila/sys/arm/arm/pmap.c:4474
>
> w/ the bt:
> [lots of boiler plate panic backtrace deleted]
> kassert_panic() at kassert_panic
>          pc = 0xc03ac2d4  lr = 0xc03a9980 (__rw_assert+0x168)
>          sp = 0xcd157d78  fp = 0x00000000
>          r0 = 0xc05e41f8  r1 = 0xc0617ab0
>          r2 = 0xc061c818  r3 = 0x0000117a
>          r4 = 0x00000000
> __rw_assert() at __rw_assert+0x168
>          pc = 0xc03a9980  lr = 0xc05736a4 (pmap_remove_write+0x3c)
>          sp = 0xcd157d88  fp = 0x00000000
>          r4 = 0xc0845a50
> pmap_remove_write() at pmap_remove_write+0x3c
>          pc = 0xc05736a4  lr = 0xc0574890 (pmap_remove_all+0x4c)
>          sp = 0xcd157d90  fp = 0x00000000
>          r4 = 0xc0845a50
> pmap_remove_all() at pmap_remove_all+0x4c
>          pc = 0xc0574890  lr = 0xc055abf8 (vm_pageout_grow_cache+0x8b0)
>          sp = 0xcd157dc0  fp = 0x00000000
>          r4 = 0xc0845a50  r5 = 0xc184dd20
>          r6 = 0xc14b8a9c  r7 = 0x00000000
>          r8 = 0xc06ea5d0  r9 = 0xc14b89e0
>         r10 = 0xc184dd20
> vm_pageout_grow_cache() at vm_pageout_grow_cache+0x8b0
>          pc = 0xc055abf8  lr = 0xc055af9c (vm_pageout_grow_cache+0xc54)
>          sp = 0xcd157df0  fp = 0x00000000
>          r4 = 0xc14b89e0  r5 = 0xc1853320
>          r6 = 0xc0618cd8  r7 = 0xc184dd20
>          r8 = 0xc14ea320  r9 = 0xc14b89e0
>         r10 = 0xc14b89e0
> vm_pageout_grow_cache() at vm_pageout_grow_cache+0xc54
>          pc = 0xc055af9c  lr = 0xc037fa30 (fork_exit+0x94)
>          sp = 0xcd157e48  fp = 0x00000000
>          r4 = 0xc0f83960  r5 = 0xc0e58000
>          r6 = 0xc055ac9c  r7 = 0x00000000
>          r8 = 0xcd157e60  r9 = 0x19999990
>         r10 = 0x00000000
> fork_exit() at fork_exit+0x94
>          pc = 0xc037fa30  lr = 0xc056c4e4 (swi_exit)
>          sp = 0xcd157e60  fp = 0x00000000
>          r4 = 0xc055ac9c  r5 = 0x00000000
>          r6 = 0x1284378c  r7 = 0x00000104
>          r8 = 0x00000104
> swi_exit() at swi_exit
>          pc = 0xc056c4e4  lr = 0xc056c4e4 (swi_exit)
>          sp = 0xcd157e60  fp = 0x00000000
> Unable to unwind further
>
> Let me know if there is any thing else you need to collect... I've
> rebooted the machine, and I'll be doing the same command to see if
> it's reproducable...
>


--------------090707050109010501090800
Content-Type: text/plain; charset=ISO-8859-15;
 name="arm_pmap_remove_all.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="arm_pmap_remove_all.patch"

Index: arm/arm/pmap.c
===================================================================
--- arm/arm/pmap.c	(revision 267282)
+++ arm/arm/pmap.c	(working copy)
@@ -3034,7 +3034,14 @@ pmap_remove_all(vm_page_t m)
 	if (TAILQ_EMPTY(&m->md.pv_list))
 		return;
 	rw_wlock(&pvh_global_lock);
-	pmap_remove_write(m);
+
+	/*
+	 * XXX This call shouldn't exist.  Iterating over the PV list twice,
+	 * once in pmap_clearbit() and again below, is both unnecessary and
+	 * inefficient.  The below code should itself write back the cache
+	 * entry before it destroys the mapping.
+	 */
+	pmap_clearbit(m, PVF_WRITE);
 	curpm = vmspace_pmap(curproc->p_vmspace);
 	while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) {
 		if (flush == FALSE && (pv->pv_pmap == curpm ||
@@ -3043,7 +3050,7 @@ pmap_remove_all(vm_page_t m)
 
 		PMAP_LOCK(pv->pv_pmap);
 		/*
-		 * Cached contents were written-back in pmap_remove_write(),
+		 * Cached contents were written-back in pmap_clearbit(),
 		 * but we still have to invalidate the cache entry to make
 		 * sure stale data are not retrieved when another page will be
 		 * mapped under this virtual address.

--------------090707050109010501090800--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?539887BD.2090408>