freebsd-dev/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 Break out the definition of bus_space_{tag,handle}_t and a few other types 2005-04-18 21:45:34 +00:00
_inttypes.h
_limits.h Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
_regset.h
_stdint.h
_types.h By popular demand, move __HAVE_ACPI and __PCI_REROUTE_INTERRUPT into 2006-01-09 06:05:57 +00:00
acpica_machdep.h Catch up with ACPI-CA 20070320 import. 2007-03-22 18:16:43 +00:00
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 Refactor the bus_dma header files so that the interface is described in 2005-03-14 16:46:28 +00:00
bus.h Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 2005-05-29 04:42:30 +00:00
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 Fix braino in previous commit: Don't redefine OID_AUTO to something 2006-05-11 22:49:31 +00:00
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 Implement functions calls from within DDB on ia64. On ia64 a function 2005-07-02 23:52:37 +00:00
dig64.h
efi.h
elf.h PR: 2006-10-04 21:37:10 +00:00
endian.h
exec.h Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
float.h
floatingpoint.h Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
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 Fixed FP_R*. fp{get_set}round() apparently never worked on ia64, since 2006-07-05 06:10:21 +00:00
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 Fix a comment. 2006-11-13 06:26:57 +00:00
pmc_mdep.h Add stubs to unbreak LINT. 2007-12-07 13:45:47 +00:00
proc.h Improve SMP support: 2005-08-06 20:28:19 +00:00
profile.h
pte.h
ptrace.h
reg.h
reloc.h Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
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 Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
smp.h Improve SMP support: 2005-08-06 20:28:19 +00:00
stdarg.h Use __builtin_va_start instead of __builtin_stdarg_start. GCC4 obsoletes 2006-09-21 01:37:02 +00:00
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