Date: Mon, 25 Jan 2010 12:41:33 -0800 (PST) From: Neelkanth Natu <neelnatu@yahoo.com> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-mips@FreeBSD.org Subject: Re: AR71XX RTC Message-ID: <832529.2466.qm@web34404.mail.mud.yahoo.com> In-Reply-To: <20100125.093125.200754749998835802.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Warner, The patch looks good. Please commit it. The reason we started seeing this recently is because of this: http://svn.freebsd.org/viewvc/base/head/sys/kern/sched_4bsd.c?r1=202889&r2=202888&pathrev=202889 In particular the call to thread_block_lock() will point 'td_lock' to 'blocked_lock' and if we don't switch it back in cpu_switch() then anybody trying to call thread_lock() on the thread will panic. best Neel --- On Mon, 1/25/10, M. Warner Losh <imp@bsdimp.com> wrote: > From: M. Warner Losh <imp@bsdimp.com> > Subject: Re: AR71XX RTC > To: neelnatu@yahoo.com > Cc: gonzo@bluezbox.com, smeagle@bsdler.de, freebsd-mips@FreeBSD.org > Date: Monday, January 25, 2010, 8:31 AM > In message: <434364.57659.qm@web34405.mail.mud.yahoo.com> > Neelkanth Natu > <neelnatu@yahoo.com> > writes: > : Hi Flo, > : > : Can you try the following patch and see if it helps with > the > : hang-followed-by-trap problem? > : > : I am seeing a similar problem on the Sibyte and this > patch gets me > : past it. > : > : best > : Neel > : > : Index: swtch.S > : > =================================================================== > : --- swtch.S (revision 202961) > : +++ swtch.S (working copy) > : @@ -323,7 +323,7 @@ > : * to be saved with > the other registers do so here. > : */ > : > : - sw a3, > TD_LOCK(a0) > # Switchout td_lock > : + sw a2, > TD_LOCK(a3) > # Switchout td_lock > : > : mips_sw1: > : #if defined(SMP) && defined(SCHED_ULE) > > I really like this patch. For the OCTEON I went from > having all kinds > of head-scratcher problems on boot that I was about to look > at > instruction traces in the simulator to try to track down to > an > immediate mountroot> prompt. So after reading the > code, my first > reaction is "how the heck did the old code work as well as > it did?" > and my second reaction is "This is obviously the right fix > since a3 is > a saved copy of a0, and a0 points to the pcb at this point, > not the > old thread." > > I've touched up the comments a bit. Maybe the > register assignments is > a bit of overkill, but this is a complicated function > that's very > tricky. What do you think of this patch: > > Index: sys/mips/mips/swtch.S > =================================================================== > --- sys/mips/mips/swtch.S (revision > 202867) > +++ sys/mips/mips/swtch.S (working copy) > @@ -282,9 +282,10 @@ > END(mips_cpu_throw) > > /* > - *XXX Fixme: should be written to new > interface that requires lock > - * storage. We > fake it for now. > - * cpu_switch(struct thread *old, struct thread *new); > + * cpu_switch(struct thread *old, struct thread *new, > struct mutex *mtx); > + * a0 - old > + * a1 - new > + * a2 - mtx > * Find the highest priority process and resume it. > */ > NON_LEAF(cpu_switch, STAND_FRAME_SIZE, ra) > @@ -323,7 +324,7 @@ > * to be saved with the other > registers do so here. > */ > > - sw a3, > TD_LOCK(a0) > # Switchout td_lock > + sw a2, > TD_LOCK(a3) > # Switchout td_lock > > mips_sw1: > #if defined(SMP) && defined(SCHED_ULE) > > > Thanks for saving me hours of debugging. :) > > Warner > > > : --- On Sun, 1/24/10, Florian Kruegl <smeagle@bsdler.de> > wrote: > : > : > From: Florian Kruegl <smeagle@bsdler.de> > : > Subject: Re: AR71XX RTC > : > To: "Oleksandr Tymoshenko" <gonzo@bluezbox.com> > : > Cc: freebsd-mips@freebsd.org > : > Date: Sunday, January 24, 2010, 8:52 AM > : > Hi, > : > > : > On Sun, 2010-01-24 at 02:41 +0100, Florian Kruegl > wrote: > : > > On Sat, 2010-01-23 at 16:53 -0800, Oleksandr > : > Tymoshenko wrote: > : > > > On 2010-01-23, at 4:44 PM, Florian Kruegl > wrote: > : > > > > : > > > > Hi, > : > > > > > : > > > > On Sat, 2010-01-23 at 16:21 -0800, > Oleksandr > : > Tymoshenko wrote: > : > > > >> On 2010-01-23, at 4:00 PM, > Florian > : > Kruegl wrote: > : > > > >> > : > > > >>> Hi, > : > > > >>> > : > > > >>> anyone working on pfc2123 > driver for > : > RouterStation Pro? > : > > > >>> Seems quite well documented, > one > : > issue might be CS hack, but the rest > : > > > >>> should be straight. > : > > > >> Driver was commited > : > yesterday: > : > > > >> http://svn.freebsd.org/viewvc/base?view=revision&revision=202839 > : > > > >> > : > > > >> And yes, CS hack is the problem. > I'm > : > trying to figure out how to fit it into FreeBSD > : > > > >> SPI framework. > : > > > > > : > > > > sounds good, will do an update as > soon as i > : > removed me work from code. > : > > > > My CS "solution" was more than crude, > but > : > the frames simply didn't > : > > > > fit... so I am looking forward for a > : > different one :) > : > > > > : > > > Yeah, my CS solution was > : > dirty hack too. If for "didn't fit" you mean missing > last > : > > > byte of frame then this problem was solved > to. > : > Bug was in AR71XX SPI code: falling > : > > > edge was not provided for last byte in > transfer > : > in time and RTC chip acts of falling edge. > : > > > Fix was committed before driver. > : > > > > : > > > > : > > > > : > > > : > > code looks similar, can't tell much about > result as > : > kernel hangs for a > : > > while before getting this: > : > > > : > > <<<<<<<<<<<<<<<<<<<<<<<<<<< > : > schnipp > : > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > : > > Trap cause = 2 (TLB miss (load or instr. fetch) > - > : > kernel mode) > : > > [thread pid 4 tid 100009 ] > : > > Stopped at > : > _thread_lock_flags+0x150: > : > lw v0,60(a3) > : > > db> bt > : > > Tracing pid 4 tid 100009 td 0xc0c47270 > : > > db_trace_thread+30 (?,?,?,?) ra 800a6c10 sz 24 > : > > 800a6af4+11c (0,?,ffffffff,?) ra 800a6604 sz > 32 > : > > 800a6270+394 (?,?,?,?) ra 800a6794 sz 168 > : > > db_command_loop+78 (?,?,?,?) ra 800a8e68 sz 24 > : > > 800a8d60+108 (?,?,?,?) ra 80215ff8 sz 424 > : > > kdb_trap+f8 (?,?,?,?) ra 80474350 sz 32 > : > > trap+134c (?,?,?,?) ra 8046b7fc sz 176 > : > > MipsKernGenException+100 > (b,173,804d5de8,deadc0d8) ra > : > 801c593c sz 200 > : > > _thread_lock_flags+130 (?,?,?,?) ra 80221f18 sz > 56 > : > > sleepq_broadcast+ac (?,?,?,?) ra 801e5f20 sz > 40 > : > > wakeup+2c (?,?,?,?) ra 8016de18 sz 32 > : > > g_io_deliver+198 (?,?,?,?) ra 8016bbd4 sz 80 > : > > 8016b590+644 (?,?,?,?) ra 8016e184 sz 104 > : > > g_io_schedule_down+2ec (?,?,?,?) ra 8016eb94 sz > 64 > : > > 8016eb18+7c (?,?,?,?) ra 801a331c sz 24 > : > > fork_exit+a0 (?,?,?,?) ra 80478f10 sz 48 > : > > fork_trampoline+10 (?,?,?,?) ra 0 sz 0 > : > > pid 4 > : > > > : > > <<<<<<<<<<<<<<<<<<<<<<<<<<< > : > schnapp > : > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > : > > > : > > will use AR71XX as config file tomorrow, mine > has many > : > additional devs > : > > configured for booting from usb devices. > : > > > : > [...] > : > > : > seems to make no difference. removed all mini pci > : > devs and most code > : > changes. kernel hangs during bootup for a while. > then gets > : > a trap. > : > > : > Source Info: > : > > : > -------------------------- schnipp > : > -------------------------- > : > brain:head> svn info > : > Path: . > : > URL: svn://svn.freebsd.org/base/head > : > Repository Root: svn://svn.freebsd.org/base > : > Repository UUID: > ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f > : > Revision: 202904 > : > Node Kind: directory > : > Schedule: normal > : > Last Changed Author: marcel > : > Last Changed Rev: 202904 > : > Last Changed Date: 2010-01-24 00:16:50 +0100 (Sun, > 24 Jan > : > 2010) > : > -------------------------- schnapp > : > -------------------------- > : > > : > -------------------------- schnipp > : > -------------------------- > : > brain:head> svn stat > : > ? GRTAGS > : > ? GSYMS > : > ? GTAGS > : > ? GPATH > : > M sys/kern/vfs_mount.c > : > M sys/mips/conf/AR71XX > : > ? sys/dev/pfc2123 > : > -------------------------- schnapp > : > -------------------------- > : > > : > - vfs_mount should be far away. > : > - sys/dev/pfc2123 is no longer used. > : > - sys/mips/conf/AR71XX altered to include > pfc2123_rtc > : > > : > > : > -------------------------- schnipp > : > -------------------------- > : > FreeBSD 9.0-CURRENT #1: Sun Jan 24 15:58:37 UTC > 2010 > : > > : > root@pinky.lan.terror.local:/home/smeagle/obj/mips/mips/home/smeagle/src/freebsd/head/sys/AR71XX > : > mips > : > real memory = 134217728 (131072K bytes) > : > avail memory = 125689856 (119MB) > : > nexus0: <MIPS32 root nexus> > : > clock0: <Generic MIPS32 ticker> on nexus0 > : > clock0: [FILTER] > : > apb0 at irq 4 on nexus0 > : > apb0: [FILTER] > : > uart0: <16550 or compatible> on apb0 > : > uart0: [FILTER] > : > uart0: console (115200,n,8,1) > : > pcib0 at irq 0 on nexus0 > : > pcib0: [FILTER] > : > pci0: <PCI bus> on pcib0 > : > pci0: <old, non-VGA display device> at device > 0.0 (no > : > driver attached) > : > pci0: <processor> at device 17.0 (no driver > : > attached) > : > arge0: <Atheros AR71xx built-in ethernet > interface> > : > at mem > : > 0x19000000-0x19000fff irq 2 on nexus0 > : > miibus0: <MII bus> on arge0 > : > ukphy0: <Generic IEEE 802.3u media interface> > PHY 4 > : > on miibus0 > : > ukphy0: 10baseT, 10baseT-FDX, 100baseTX, > : > 100baseTX-FDX, 1000baseT-FDX, > : > auto > : > arge0: Ethernet address: 00:00:00:00:46:61 > : > arge0: [FILTER+ITHREAD] > : > arge1: <Atheros AR71xx built-in ethernet > interface> > : > at mem > : > 0x1a000000-0x1a000fff irq 3 on nexus0 > : > arge1: Ethernet address: 00:00:00:00:46:62 > : > arge1: [FILTER+ITHREAD] > : > spi0: <AR71XX SPI> at mem > 0x1f000000-0x1f00000f on > : > nexus0 > : > spibus0: <spibus bus> on spi0 > : > mx25l0: <M25Pxx Flash Family> at cs 0 on > spibus0 > : > mx25l0: mx25ll128, sector 65536 bytes, 256 sectors > : > ar71xx_wdog0: <Atheros AR71XX watchdog timer> > on > : > nexus0 > : > Timecounter "MIPS32" frequency 360000000 Hz quality > 800 > : > Timecounters tick every 1.000 msec > : > bootpc_init: wired to interface 'arge0' > : > Sending DHCP Discover packet from interface arge0 > : > (00:00:00:00:46:61) > : > arge0: link state changed to DOWN > : > Trap cause = 2 (TLB miss (load or instr. fetch) - > kernel > : > mode) > : > [thread pid 4 tid 100008 ] > : > Stopped at > : > _thread_lock_flags+0x150: > : > lw v0,60(a3) > : > db> bt > : > Tracing pid 4 tid 100008 td 0xc0c414e0 > : > db_trace_thread+30 (?,?,?,?) ra 80055900 sz 24 > : > 800557e4+11c (0,?,ffffffff,?) ra 800552f4 sz 32 > : > 80054f60+394 (?,?,?,?) ra 80055484 sz 168 > : > db_command_loop+78 (?,?,?,?) ra 80057b58 sz 24 > : > 80057a50+108 (?,?,?,?) ra 8017b7d8 sz 424 > : > kdb_trap+f8 (?,?,?,?) ra 8035ab40 sz 32 > : > trap+134c (?,?,?,?) ra 80351fec sz 176 > : > MipsKernGenException+100 (b,173,8039ce74,deadc0d8) > ra > : > 8012c92c sz 200 > : > _thread_lock_flags+130 (?,?,?,?) ra 801876f8 sz 56 > : > sleepq_broadcast+ac (?,?,?,?) ra 8014b700 sz 40 > : > wakeup+2c (?,?,?,?) ra 800d6ba8 sz 32 > : > g_io_deliver+198 (?,?,?,?) ra 800d4964 sz 80 > : > 800d4320+644 (?,?,?,?) ra 800d6f14 sz 104 > : > g_io_schedule_down+2ec (?,?,?,?) ra 800d7924 sz 64 > : > 800d78a8+7c (?,?,?,?) ra 8010c0ac sz 24 > : > fork_exit+a0 (?,?,?,?) ra 8035f700 sz 48 > : > fork_trampoline+10 (?,?,?,?) ra 0 sz 0 > : > pid 4 > : > -------------------------- schnapp > : > -------------------------- > : > > : > > : > > : > > : > Flo > : > > : > _______________________________________________ > : > freebsd-mips@freebsd.org > : > mailing list > : > http://lists.freebsd.org/mailman/listinfo/freebsd-mips > : > To unsubscribe, send any mail to "freebsd-mips-unsubscribe@freebsd.org" > : > > : > : > : > : _______________________________________________ > : freebsd-mips@freebsd.org > mailing list > : http://lists.freebsd.org/mailman/listinfo/freebsd-mips > : To unsubscribe, send any mail to "freebsd-mips-unsubscribe@freebsd.org" > : > : >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?832529.2466.qm>