freebsd-skq/sys/ia64/include
Marcel Moolenaar f9d9182d64 Work-around a compiler optimization bug, that broke libthr. Massive
inlining resulted in constant propagation to the extend that cmpval
was known to the compiler to be URWLOCK_WRITE_OWNER (= 0x80000000U).
Unfortunately, instead of zero-extending the unsigned constant, it
was sign-extended. As such, the cmpxchg instruction was comparing
0x0000000080000000LU to 0xffffffff80000000LU and obviously didn't
perform the exchange.
But, since the value returned by cmpxhg equalled cmpval (when zero-
extended), the _thr_rtld_lock_release() function thought the exchange
did happen and as such returned as if having released the lock. This
was not the case. Subsequent locking requests found rw_state non-zero
and the thread in question entered the kernel and block indefinitely.

The work-around is to zero-extend by casting to uint64_t.
2008-05-28 16:41:02 +00:00
..
pc
_bus.h
_inttypes.h
_limits.h
_regset.h
_stdint.h
_types.h
acpica_machdep.h
asm.h
atomic.h Work-around a compiler optimization bug, that broke libthr. Massive 2008-05-28 16:41:02 +00:00
bootinfo.h
bus_dma.h
bus.h
clock.h The "free-lance" timer in the i8254 is only used for the speaker 2008-03-26 20:09:21 +00:00
cpu.h
cpufunc.h Work around a firmware bug in the HP rx2660, where in ACPI an I/O port 2007-06-10 16:53:01 +00:00
db_machdep.h
dig64.h
efi.h
elf.h
endian.h
exec.h
float.h
floatingpoint.h
fpu.h
frame.h
gdb_machdep.h
ia64_cpu.h In ia64_set_rr(), don't perform data serialization. This allows 2007-08-05 18:19:38 +00:00
ieee.h
ieeefp.h
in_cksum.h
intr.h Rework the interrupt code and add support for interrupt filtering 2007-07-30 22:29:33 +00:00
intrcnt.h
kdb.h Add kdb_cpu_sync_icache(), intended to synchronize instruction 2007-06-09 21:55:17 +00:00
limits.h
mca.h
md_var.h Better implement I-cache invalidation. The previous implementation 2008-03-30 23:09:14 +00:00
memdev.h
mutex.h
nexusvar.h
pal.h
param.h When building a kernel module, define MAXCPU the same as SMP so 2008-03-27 05:03:26 +00:00
pcb.h
pci_cfgreg.h
pcpu.h Rework the PCPU_* (MD) interface: 2007-06-04 21:38:48 +00:00
pmap.h
pmc_mdep.h Add stubs to unbreak LINT. 2007-12-07 13:45:47 +00:00
proc.h
profile.h
pte.h
ptrace.h
reg.h
reloc.h
resource.h
runq.h
sal.h
sapicreg.h
sapicvar.h Rework the interrupt code and add support for interrupt filtering 2007-07-30 22:29:33 +00:00
setjmp.h
sf_buf.h
sigframe.h
signal.h
smp.h
stdarg.h
sysarch.h
ucontext.h Remove kernel support for M:N threading. 2008-03-12 10:12:01 +00:00
unwind.h
varargs.h
vmparam.h Remove cruft we got from Alpha, which was probably inherited 2008-04-18 02:21:11 +00:00