Port Bug Report: non-OSF Alpha spin lock code seems to be incorrect

From: Unprivileged user <nobody>
To: pgsql-ports(at)postgresql(dot)org
Subject: Port Bug Report: non-OSF Alpha spin lock code seems to be incorrect
Date: 1999-06-04 05:04:00
Message-ID: 199906040504.BAA28940@hub.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ports


============================================================================
POSTGRESQL BUG REPORT TEMPLATE
============================================================================

Your name : Christopher C. Chimelis
Your email address : chris(at)classnet(dot)med(dot)miami(dot)edu

Category : runtime: back-end
Severity : critical

Summary: non-OSF Alpha spin lock code seems to be incorrect

System Configuration
--------------------
Operating System : Linux 2.2.1 ELF glibc 2.1.1

PostgreSQL version : 6.5beta1

Compiler used : egcs 1.1.2

Hardware:
---------
Linux alpha 2.2.1 #4 Sat Feb 13 03:24:10 CET 1999 alpha unknown
Alpha Multia/UDB 166MHz 128M RAM
Actually does the same thing on all Alphas running Linux from what I can tell

Versions of other tools:
------------------------
gmake 3.77

--------------------------------------------------------------------------

Problem Description:
--------------------
This problem occurs with PostgreSQL 6.4.x as well as the new beta snapshot. It seems that on the initial 'initdb' during setup/installation, initdb dies with:
FATAL: s_lock(202e88c0) at spin.c:114, stuck spinlock. Aborting.

I tried altering the delay timing on the detection of stuck spin locks, but it didn't help. So, I then delved into the spin lock asm code contained in src/include/storage/s_lock.h.

Now, my assembly is VERY rusty (I barely know anything at all), so I figured the best way to approach this was to compare the code contained within (basically it's under the #ifdef gcc and __alpha sections -- NOT the OSF stuff) to the working spin lock implementations within the 2.2.x Linux kernel series (include/asm-alpha/{system.h,spinlock.h} and noticed QUITE a few differences in basic instructions. Granted, they do use slightly different typed elements, but from what I can tell, the kernel's code is correct and pgsql's backend isn't.

If possible, can you take a look at both and maybe we can work on a fix for this together? I would be happy to send you all files involved, but unfortunately cannot help to fix the asm involved (I'm trying to find someone competent on the alphas now).

--------------------------------------------------------------------------

Test Case:
----------
just run initdb on an Alpha running Linux and pgsql 6.4.x or 6.5beta1

--------------------------------------------------------------------------

Solution:
---------
The backend code for handling spin locks on non-OSF (ie. uses gcc) Alphas needs to be compared to the spin lock code in the 2.2.x kernel series and fixed (using the kernel code as a sample of working spin lock handling). I will help test when it's fixed if needed.

--------------------------------------------------------------------------

Browse pgsql-ports by date

  From Date Subject
Next Message Unprivileged user 1999-06-04 20:10:53 Port Bug Report: Include file mismatch: stdio.h, stdlib.h, unistd.h
Previous Message someone 1999-06-04 03:31:05 Redhat 5.2 on alpha-noname