- minor code cleanups
- rename some functions for better consistensy/clarity
- consolidate extended message generation into new function
- a couple of minor code clarifications to eliminate extra return
statements and make absolutely sure actscb is NULL during a reselect
Rather than an "iointr" routine that decomposes a vector into an
IRQ, we maintain a vector table directly, hooking up each "iointr"
routine at the correct vector. This also allows us to hook device
interrupts up to specific vectors (c.f. Jensen).
We can shave even more cycles off, here, and I will, but it requires
some changes to the alpha_shared_intr stuff.
This comes in two parts: riscoscalls.[Sh] provide definitions, and thin
wrappers around RISC OS SWIs (in the style of OsLib) for the use of both the
rest of the library and client code. The rest of the library provides a
compatibility layer for libsa.
Ultra/100 for revs >= 0xC4.
The the generic PCIIDE interupt routine for chipsets rev >= 0xC2 in native
mode, it seems that newer chipsets don't have the ACER_CHIDS register :(
From Linux and FreeBSD.
ctor/dtor feature, it's still faster to allocate from the cache groups
than it is from the pool (cache groups are analogous to "magazines"
in the Solaris SLAB allocator).
data area is not to be written to. This is the case for mbufs with
external storage which is either a non-cluster or a cluster referenced
by multiple mbufs.
Change M_LEADINGSPACE() and M_TRAILINGSPACE() to use M_READONLY(),
rather than their own testing for M_EXT. Previously, M_LEADINGSPACE()
treated all M_EXT mbufs as read-only (which causes an extra mbuf to
be needlessly allocated when sending large TCP packets), and
M_TRAILINGSPACE() previously did not treat any external storage as
read-only (could lead to data corruption of external storage buffers!).
- in replacement malloc(), if sbrk(2) returns (void *)-1, convert to NULL
before returning
- in replacement calloc(), check return value of malloc() before zeroing result