Обсуждение: Solaris ASM problem
Kris Jurka wrote: > Bruce Momjian wrote: > > Log Message: > > ----------- > > Modify Solaris compiler build rules to use the cpp preprocessor, the the > > x86 file. > > > > Well it compiles now, but it doesn't seem to work: > > http://pgbuildfarm.org/cgi-bin/show_log.pl?nm=kudu&dt=2006-04-28%2016:30:01 > > selecting default max_connections ... Abort - core dumped > > creating template1 database in > /export/home/pgfarm/forte/HEAD/pgsql.5120/src/test/regress/./tmp_check/data/base/1 > ... PANIC: stuck spinlock (dd0000b0) detected at lwlock.c:358 OK, now that I have modified the build system to properly handle the preprocessing, it seems we have a problem with the ASM instructions. Theo? Comments? -- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > What platform is that? (OS rev, architecture and word size)? I tested the > changes I submitted on Solaris 10 amd64. > $ uname -a SunOS albert 5.9 Generic_112234-03 i86pc i386 i86pc $ cc -V cc: Sun WorkShop 6 update 2 C 5.3 Patch 111680-09 2003/05/18 Kris Jurka
On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > The file that uses the spinlocks: > /src/backend/storage/lmgr/s_lock.c > > can be compiled standalone with -DS_LOCK_TEST > To get the test to compile I had to link in tas.o as the attached patch shows. Unfortunately this doesn't work for platforms that don't have a tas.o, bailing out with file not found. Perhaps it's not important to fix this test, but I thought I'd mention it. Anyway the test exits with Stuck spinlock (80618e9) detected at ./s_lock.c:355. on a linux gcc build this exits with Stuck spinlock (0x5013ad) detected at ./s_lock.c:402. Kris Jurka
On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > Kris Jurka wrote: > >> Anyway the test exits with >> Stuck spinlock (80618e9) detected at ./s_lock.c:355. >> >> on a linux gcc build this exits with >> Stuck spinlock (0x5013ad) detected at ./s_lock.c:402. > > This seems like a different problem, no? The patch I sent in didn't touch > any of the linux assembly bits. The linux test should pass to the end > without an issue right? > No, that's the desired ending. It prints: S_LOCK_TEST: this will print 1000 stars and then exit with a 'stuck spinlock' message if S_LOCK()and TAS() are working. The solaris version is just getting stuck before at another point before the expected stuck point. Kris Jurka
Theo Schlossnagle wrote:
> Kris Jurka wrote:
>
> >
> >
> > On Fri, 28 Apr 2006, Theo Schlossnagle wrote:
> >
> >> Kris Jurka wrote:
> >>
> >>> Anyway the test exits with
> >>> Stuck spinlock (80618e9) detected at ./s_lock.c:355.
> >>>
> >>> on a linux gcc build this exits with
> >>> Stuck spinlock (0x5013ad) detected at ./s_lock.c:402.
> >>
> >>
> >> This seems like a different problem, no? The patch I sent in didn't
> >> touch any of the linux assembly bits. The linux test should pass to
> >> the end without an issue right?
> >>
> >
> > No, that's the desired ending. It prints:
> >
> > S_LOCK_TEST: this will print 1000 stars and then
> > exit with a 'stuck spinlock' message
> > if S_LOCK() and TAS() are working.
> >
> > The solaris version is just getting stuck before at another point before
> > the expected stuck point.
>
> I downloaded and tested this on my box. The first thing I noticed is
> that when compiling tas.s on Solaris 10 the -P flag was omitted (which
> is needed to have the #ifdef's process correctly). I did an: as -P
> tas.s by hand and then was able to repeat your problem.
You should see in backend/port/Makfile:
$(CC) $(CFLAGS) -c -P $<
Perhaps you didn't get that version yet.
> Looks like part of my patch wasn't applied (or I neglected to send it
> all). The cas operations are all word operations so the slock_t _MUST_
> be changed to a word.
Sorry, yes, that is my fault. I had to modify the macro test you
defined from __amd64 to __x86_64__, and didn't see the change in the
typedef. Fix applied.
---------------------------------------------------------------------------
>
> In src/include/storage/s_lock.h in the sun section, the slock_t must be
> an unsigned int:
>
> ; cvs diff -u src/include/storage/s_lock.h
> Index: src/include/storage/s_lock.h
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/include/storage/s_lock.h,v
> retrieving revision 1.151
> diff -u -r1.151 s_lock.h
> --- src/include/storage/s_lock.h 28 Apr 2006 03:43:19 -0000
> 1.151
> +++ src/include/storage/s_lock.h 29 Apr 2006 02:48:45 -0000
> @@ -765,7 +765,7 @@
>
> #if defined(__sun) && (defined(__i386) || defined(__x86_64__) ||
> defined(__sparc__) || defined(__sparc))
> #define HAS_TEST_AND_SET
> -typedef unsigned char slock_t;
> +typedef unsigned int slock_t;
>
> extern slock_t pg_atomic_cas(volatile slock_t *lock, slock_t with,
>
> slock_t cmp);
>
>
-- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +
Bruce Momjian wrote: >Kris Jurka wrote: > > >>Bruce Momjian wrote: >> >> >>>Log Message: >>>----------- >>>Modify Solaris compiler build rules to use the cpp preprocessor, the the >>>x86 file. >>> >>> >>> >>Well it compiles now, but it doesn't seem to work: >> >>http://pgbuildfarm.org/cgi-bin/show_log.pl?nm=kudu&dt=2006-04-28%2016:30:01 >> >>selecting default max_connections ... Abort - core dumped >> >>creating template1 database in >>/export/home/pgfarm/forte/HEAD/pgsql.5120/src/test/regress/./tmp_check/data/base/1 >>... PANIC: stuck spinlock (dd0000b0) detected at lwlock.c:358 >> >> > >OK, now that I have modified the build system to properly handle the >preprocessing, it seems we have a problem with the ASM instructions. > >Theo? Comments? > > What platform is that? (OS rev, architecture and word size)? I tested the changes I submitted on Solaris 10 amd64. -- // Theo Schlossnagle // Principal Engineer -- http://www.omniti.com/~jesus/ // Ecelerity: Run with it. -- http://www.omniti.com/
Kris Jurka wrote: > > > On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > >> Kris Jurka wrote: >> >>> Anyway the test exits with >>> Stuck spinlock (80618e9) detected at ./s_lock.c:355. >>> >>> on a linux gcc build this exits with >>> Stuck spinlock (0x5013ad) detected at ./s_lock.c:402. >> >> >> This seems like a different problem, no? The patch I sent in didn't >> touch any of the linux assembly bits. The linux test should pass to >> the end without an issue right? >> > > No, that's the desired ending. It prints: > > S_LOCK_TEST: this will print 1000 stars and then > exit with a 'stuck spinlock' message > if S_LOCK() and TAS() are working. > > The solaris version is just getting stuck before at another point before > the expected stuck point. My workstation is running 32bit solaris.. I can build and debug it here... I'll give that a spin (hehe). -- // Theo Schlossnagle // Principal Engineer -- http://www.omniti.com/~jesus/ // Ecelerity: Run with it. -- http://www.omniti.com/
Kris Jurka wrote: > > > On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > >> What platform is that? (OS rev, architecture and word size)? I >> tested the changes I submitted on Solaris 10 amd64. >> > > $ uname -a > SunOS albert 5.9 Generic_112234-03 i86pc i386 i86pc > $ cc -V > cc: Sun WorkShop 6 update 2 C 5.3 Patch 111680-09 2003/05/18 > > Kris Jurka The file that uses the spinlocks: /src/backend/storage/lmgr/s_lock.c can be compiled standalone with -DS_LOCK_TEST Can you compile that and run the test. I'd be happy to troubleshoot it hands-on, but I don't have access to that box. Best regards, Theo -- // Theo Schlossnagle // Principal Engineer -- http://www.omniti.com/~jesus/ // Ecelerity: Run with it. -- http://www.omniti.com/
Kris Jurka wrote: > > > On Fri, 28 Apr 2006, Theo Schlossnagle wrote: > >> The file that uses the spinlocks: >> /src/backend/storage/lmgr/s_lock.c >> >> can be compiled standalone with -DS_LOCK_TEST >> > > To get the test to compile I had to link in tas.o as the attached > patch shows. Unfortunately this doesn't work for platforms that don't > have a tas.o, bailing out with file not found. Perhaps it's not > important to fix this test, but I thought I'd mention it. > > Anyway the test exits with > > Stuck spinlock (80618e9) detected at ./s_lock.c:355. > > on a linux gcc build this exits with > > Stuck spinlock (0x5013ad) detected at ./s_lock.c:402. This seems like a different problem, no? The patch I sent in didn't touch any of the linux assembly bits. The linux test should pass to the end without an issue right? -- // Theo Schlossnagle // Principal Engineer -- http://www.omniti.com/~jesus/ // Ecelerity: Run with it. -- http://www.omniti.com/