Commit Graph

272 Commits

Author SHA1 Message Date
martin 3028e483e4 Convert to new 2 clause license 2008-04-29 06:53:00 +00:00
martin ce099b4099 Remove clause 3 and 4 from TNF licenses 2008-04-28 20:22:51 +00:00
nakayama 99adca9efa Use %xcc for 64-bit comparisons. 2008-04-09 12:49:05 +00:00
tsutsui c3b0f346ec Fix pasto. 2008-04-06 04:01:56 +00:00
tsutsui 7dfcdee2a2 Use .c version atomic ops for m68010. 2008-04-05 22:28:36 +00:00
he 73e50f111b Do like the non-__OPTIMIZE_SIZE__ variant, and compile memset() unless
BZERO is defined, instead of requiring MEMSET to be defined.

Avoids violating the principle of least astonishment, and also fixes
the build of stand/ and kernels for (at least) alpha.
2008-03-29 14:03:22 +00:00
he a58a2cddc0 Make the size-optimized memset() actually conform to the man page
by returning the first arg.
2008-03-29 12:25:32 +00:00
apb f5c2801052 Add /* __OPTIMIZE_SIZE__ */ comments on relevant #else and #endif lines.
Also change some #ifdef to #if defined() for consistency.
2008-03-26 06:19:36 +00:00
christos 9f2bc34fb9 bcopy does not return ptr. 2008-03-25 23:23:34 +00:00
christos 93f951ce0d fix #ifdefs for BCOPY 2008-03-25 23:16:29 +00:00
christos 985a3d11e8 add bcopy and bzero for the benefit of loadfile. 2008-03-25 23:13:15 +00:00
christos 9e32ad04aa add __OPTIMIZE_SIZE__ versions. 2008-03-25 21:22:37 +00:00
kochi 2ead1ed5c4 Add atomic_cas_foo_ni alias. 2008-03-24 14:59:30 +00:00
kochi 473f1b48ee Add ia64 MI atomic ops.
(Not tested at all, just for reference)
2008-03-20 07:10:31 +00:00
ad b0f548e27b oops 2008-03-07 02:18:34 +00:00
ad bb9b5eb92c In libc, use the MI atomic_cas(). The assembly version is faster, but I
think there are PIC issues with it and I don't have a way to fix and test.
2008-03-07 01:18:54 +00:00
phx e6d6e05cb1 Including assym.h is not needed and will break the build, because it does not
exist that early. Deleted it.
Approved by garbled.
2008-03-06 21:17:17 +00:00
cube 5b25d80ca0 Actually implement prop_dictionary_make_immutable. OK'd by thorpej@. 2008-03-05 07:47:09 +00:00
lukem 8346a6360d Use mkstemp() + fchmod() instead of mktemp(), since the latter
results in linker warnings.
2008-02-23 01:26:01 +00:00
garbled 2ba84f0f9e Add tuned powerpc assembler written by IBM and released under a 3-clause
BSD Lisc as part of the perflib project.
http://sourceforge.net/projects/ppcperflib/

Tested the new functions with microbenchmarks on a number of different
CPU types, and  found that most cpus either benefited greatly, or were
unaffected.  Primarily G4 CPU's were unaffected, and all others showed
speedups.  My 7044 (POWER3) went from a 70.6 to a 73.2 (thats good) in
bytebench with a complete release built with these.  Also passed
regression tests.
2008-02-21 17:35:47 +00:00
apb 267197ec1e For all files under src/common, as well as related man pages under
src/lib/libc, or related headers under src/sys/sys: change u_intNN_t to
uintNN_t.
2008-02-16 17:37:13 +00:00
apb cf01a0f8c8 C99 is no longer "very recent". Adjust a comment accordingly, and
start using uintNN_t instead of u_intNN_t in the definitions of
sha2_{byte,word32,word64}.
2008-02-16 17:15:32 +00:00
dogcow 26a84bff72 add missing %. (hi matt!) 2008-02-13 03:55:54 +00:00
ad 2d0314d313 Always enable memory barriers in userspace, otherwise libpthread won't
work correctly on MP systems.
2008-02-12 18:40:28 +00:00
ad b86eac67c4 Correct a dodgy alias. 2008-02-12 18:35:38 +00:00
matt 360e0475e3 Use %rN as all new code is supposed to. 2008-02-12 07:58:01 +00:00
matt 131790b421 Fix pthread problem. (export membar* to userland) 2008-02-12 07:35:04 +00:00
ad eff625dc0e Put back a __predict_false removed during testing and fix atomic_cas_mp(). 2008-02-11 23:48:23 +00:00
ad a3fb849dfc Clarify what membar_enter/membar_exit provide. 2008-02-11 15:12:07 +00:00
ad 1b2aff1f03 Note many of the restrictions, and clarify the section on global
visibility.
2008-02-11 15:01:24 +00:00
ad b3193dc791 Only build atomic ops for libkern/libc. 2008-02-11 14:21:11 +00:00
ad b5b3e9fb51 Enable the atomic ops in userspace. 2008-02-10 18:45:40 +00:00
ad 12190eee54 Fix name of the init function. 2008-02-10 13:41:02 +00:00
ad 646fc3baa9 Add atomic_cas_foo_ni(). 2008-02-10 13:40:31 +00:00
ad cc655ebd16 Add atomic_cas_foo_ni(). 2008-02-10 13:25:46 +00:00
ad a180c2a1f7 membar_enter was doing the wrong thing. For x86 we can alias:
membar_enter -> membar_consumer
	membar_exit -> membar_producer
2008-02-09 13:42:21 +00:00
ad d418b9fe8b Some glue for atomic ops in userspace. 2008-02-09 13:30:54 +00:00
matt 350555cd1f Add the .C versions for the atomic ops. 2008-02-03 07:46:38 +00:00
nakayama da1555e6a7 Search files in arch/sparc64/atomic before arch/sparc/atomic in case of
sparc64 32-bit kernel.

Make sparc64 32-bit kernel works again.
2008-01-22 12:34:58 +00:00
nakayama b4ed00a22d Use __arch64__ instead of __sparc64__, since -D__sparc64__ is appended
to build option of sparc64 32-bit kernel.
2008-01-22 12:32:07 +00:00
christos 428727f47f PR/37838: Stathis Kamperis: proplib documentation enhancements 2008-01-21 22:15:03 +00:00
ad 607fd8ae21 atomic_and/atomic_or don't operate on pointers, so don't copy the return
to a0. From thorpej@.
2008-01-12 17:29:03 +00:00
ad f6c08490ef Don't put membar in the delay slot. thorpej@ says it may be problematic. 2008-01-12 17:27:28 +00:00
simonb d8de5b102b Remove support for NetBSD/pc532. 2008-01-09 11:25:58 +00:00
martin ececdb7913 When passing char (or unsigned char) arguments as int, assign them to a
temporary char (resp. unsigned char) before comparing, to force truncation
to the proper domain. This makes the coresponding regression tests succeed.
2008-01-08 21:57:06 +00:00
ad 9324487752 Include sys/simplelock.h in prop_object_impl.h. 2008-01-05 01:15:02 +00:00
mjf 83535b7f11 Nuke prop_dictionary_capacity, there was no implementation for it.
No objections on tech-kern.
2008-01-05 00:23:46 +00:00
xtraeme 0f546319ca sys/simplelock.h is required now. 2008-01-04 21:33:17 +00:00
mrg 97e461c633 - provide 32 bit versions of the sparc v9 atomic ops.
- use them on sparc64 32 bit kernels.

fixes issues on 32 bit sparc64 kernels that were using sparc v8 ops.
tested by rjs@.
2007-12-22 23:19:40 +00:00
joerg 45f2572a92 Add virtual i8254 for x86emu. 2007-12-21 17:45:50 +00:00
ad e16a661bf3 - Make __cpu_simple_lock and similar real functions and patch at runtime.
- Remove old x86 atomic ops.
- Drop text alignment back to 16 on i386 (really, this time).
- Minor cleanup.
2007-12-20 23:46:10 +00:00
ad 163e94a67e 64-bit atomic ops for i386. 2007-12-20 01:27:24 +00:00
joerg 823959a6b2 Refactor interrupt dispatching. 2007-12-13 16:41:59 +00:00
ad 9e9c09c30a Fix _atomic_cas_64. Noted by bouyer@. 2007-12-10 14:13:12 +00:00
ad 164992f1a5 Add missing strong aliases. 2007-12-09 17:38:51 +00:00
ad 6260baac6e Add missing strong aliases; sure I did this before? 2007-12-09 17:33:56 +00:00
ad 1206a8cb5c Add some goo to make this work in userspace. 2007-12-08 22:53:33 +00:00
ad 96f5ce86b9 objdump -d to the rescue. I think this should work now. 2007-12-08 22:42:46 +00:00
joerg e982f87297 Expect that src/common/include is in include path and use x86emu/* for
the includes.
2007-12-04 17:32:22 +00:00
he 1e962f25f7 Correct what must obviously be a cut+paste-induced set of typos. 2007-12-04 01:13:38 +00:00
wiz 7b371a343f Typo fixes. 2007-12-02 18:57:56 +00:00
joerg 00487473b9 Move x86emu's include files to src/common/include/x86emu. 2007-12-01 20:14:09 +00:00
ad 234aa6237e Memory barriers for MIPS. 2007-11-30 22:50:44 +00:00
joerg 22ac6fc0fb Add x86emu for in-kernel use. This is a 386 real mode emulator that can
be used to run ROM code inside the kernel without having to setup vm86
and without having a x86 CPU at hand.

This code was originally written by SciTech and released under MIT/X11
license for XFree86. It has been refactored be less than half of the
original size, the compiled code being around a third of the former
size. The interface was changed to be a real library, e.g. no global
variables are used.
2007-11-30 20:02:49 +00:00
ad 4d460dc055 This is atomic_dec, not atomic_inc! 2007-11-30 17:11:48 +00:00
ad f377e7f907 Fix ia32 -> amd64 thinko. 2007-11-29 21:59:47 +00:00
ad 7243d328e1 Atomic ops for sh3. 2007-11-29 17:33:38 +00:00
ad 6f3a041727 atomic_add_* takes signed integers, the others take unsigned. 2007-11-29 17:29:40 +00:00
ad 29d1edb61b Apparently pointers are also returned in %a0. 2007-11-29 17:12:21 +00:00
ad 935eacf351 Pull in m68k atomic ops from the thorpej-atomic branch. 2007-11-29 17:09:31 +00:00
ad 6b0ff77038 Atomic ops for hppa. 2007-11-29 16:14:56 +00:00
ad 881b1b699e Use the CAS-based inc/dec variants, since these CPUs don't have atomic
add in hardware (does arm?).
2007-11-29 15:29:46 +00:00
ad fe803ab0ed Add inc/dec variants that use atomic_cas in preference to atomic_add. 2007-11-29 15:27:57 +00:00
ad 5c5043b187 membar_read/write are gone. 2007-11-29 15:20:43 +00:00
ad 11f83d35dd Atomic ops for arm. 2007-11-29 15:19:54 +00:00
ad 2da5f5559a Fix the aliases. 2007-11-29 02:16:00 +00:00
ad ebe806aa11 sparc atomic ops 2007-11-29 02:01:22 +00:00
ad c69c0e0f91 Make the 64-bit operations available when possible. 2007-11-29 01:04:57 +00:00
ad 695c2bc225 Only build the 64-bit versions if __HAVE_ATOMIC64_OPS. 2007-11-29 01:02:40 +00:00
ad 7b3b1e0427 Atomic ops for MIPS. Use the CAS functions already provided by the kernel,
and use the generic C code to provide the rest. Unfortunatley the C code
assembles up pretty badly on MIPS but at least it will work.
2007-11-29 00:16:23 +00:00
ad 2f827ecd6a ppc64 atomic ops. 2007-11-28 21:47:00 +00:00
ad bc7bf35c36 Atomic ops for powerpc. Please review. 2007-11-28 21:39:48 +00:00
ad 44fc0a18e5 A lock prefix on xchg is meaningless. 2007-11-28 18:02:29 +00:00
ad fb900ec918 Pull in alpha atomic ops from the thorpej-atomic branch. 2007-11-28 17:39:06 +00:00
ad f1d10eab90 Pull in sparc64 atomic ops from the thorpej-atomic branch. 2007-11-28 17:29:31 +00:00
ad 77ca26a240 Memory barriers for sparc64. XXX Can the 'membar' go in retl delay slot? 2007-11-28 17:29:13 +00:00
ad 0df165c04d Use xchgb, bswapl and not rotate/shift. 2007-11-28 17:03:35 +00:00
ad 13c86772e9 Memory barrier in respect of the CAS isn't necessary. 2007-11-28 16:59:09 +00:00
ad 79085586b9 Support files from the thorpej-atomic branch. 2007-11-28 16:54:57 +00:00
ad db42e14f44 Hook the atomic ops in. Right now they are only built into libkern, and
only if available.
2007-11-28 15:25:44 +00:00
ad b47fc5f5e0 Fix up a few minor problems. 2007-11-28 15:24:38 +00:00
ad 65728ed419 x86 atomic ops. 2007-11-28 01:33:47 +00:00
ad 51a2159851 Don't unconditionally clear the direction flag. The ABI says it must always
be clear when making a function call, and 'cld' takes about 50 clock cyles
on the P4.
2007-11-12 18:41:59 +00:00
mjf c05cd035e3 Fix typo 2007-11-06 11:41:35 +00:00
christos 2f1af36850 use the ffs32 from bitops.h which is faster 2007-11-02 21:05:06 +00:00
xtraeme d7ef1da684 Fix a typo that has been there forever. prop_dictionary_set:
the object will be retained by the dictionary not array.
2007-10-11 03:10:28 +00:00
he 2a0ce8a57f Improve consistency between <sys/bswap.h> and what's actually
defined by the C library for the various m68k ports by borrowing
some #ifs from the i386 port.

Also, align sun2 with the other m68k ports as to whether they
define __bswap{16,32} or bswap{16,32} in their C library (all
now define the __ variants).

This should make the m68k ports build sys/rump again, except
for sun2 which hits another problem later on.
2007-09-19 20:31:34 +00:00
xtraeme ed504658f5 tyop: guaranty -> guarantee. 2007-08-30 19:12:32 +00:00
joerg 4deb593145 Avoid using unbound amount of stack frames in prop_object_equal
by using a dynamic stack as well. Reorder arguments for the internalizer
as the iteration is always present and should go before possibly
NULL arguments.

Reviewed by mjf@ and adrianp@
2007-08-30 12:23:53 +00:00
joerg e835604c26 libprop is currently using a recursive parser. While this is fine for
userland, deeply nested arrays and dictionaries can easily overflow
the kernel stack and thereby force a panic.

Fix the internalizer and prop_object_release to use a separate call
stack and alter the dictionary and array handling to not recurse on
the C stack. The default stack has an inline depth of 16 elements,
which should keep the overhead reasonable.

This issue was found by Pavel Cahyna and Jachym Holecek.

Additionally add a limit for prop_object_copyin_ioctl to prevent user
programs from temporary allocating unbound amount of kernel memory.
Allow malloc to fail so that tight loops of userland processes can't
force panics by exhausting the kernel map.

Tested with the sample exploit of Jachym, his test suite and reviewed
by himself (initial patch), Christos Zoulas and Jason Thorpe.
2007-08-16 21:44:06 +00:00