Re-work AST processing, eliminating the global "astpending" variable.
The need for an AST is now tracked on a per-LWP basis (patterned after
the Alpha port).
The elimination of the "astpending" global necessitated an overhaul
of the code flow for checking for them. The old rei code block leveraged
that "astpending" could be checked without having to use a register.
Now, a register must be used, so the check for pending ASTs needs to
be done before registers are restored after a trap. So, a couple of
new asm macros are introduced to aid in this split-duty regime:
- CHECK_ASTPENDING() uses the specified scratch register to check for
pending ASTs and sets the Z flag accordingly (Z set == no pending AST).
- RTE_AST replaces the old pattern of unconditionally branching to the
rei code block and instead conditionally branches to the now-renamed-to-
rte_ast code block and perfors an RTE if the branch is not taken. This
makes the code ever so slightly larger, but actually eliminates a branch
in the case where an AST was not pending.
[21 lines not shown]
Allocate display rows on demand (Hua Zhong)
libedit (unlike readline) allocates a buffer for the entire terminal width *
height from the beginning, which is often wasteful as most of the time very
few rows are needed. This change introduces delayed allocation for row buffers.
Initially, the row-pointer array is allocated with NULL pointers. When we need
row N, we allocate all row buffers up to that row.
Display buffer allocation failures are reported through existing API errors.
A subsequent API call such as el_gets() retries the allocation if needed.
Add rescan functions for obio(4) bus.
Allows obio attachments to be modules.
Patch and testing by Ray Tran.
Addreses PR/60694.
Next thing to do is to make modules of non-critical obio devices...
g->charjump was adjusted to &g->charjump[-(CHAR_MIN)] in computejumps() so
that it can be indexed by signed chars (all archs except arm); undo the
adjustment before freeing it, same as regfree() does.
Start laying the foundation for MP support:
- curlwp does into struct cpu_info
- cpu_info gets cache line aware layout based on field access patterns
(with some reserved slots for future work).
- cpu_number() and curlwp are now implemented in terms of curcpu().
- curcpu() remains streamlined for UP systems, and an ABI-stable
version is provided if _MODULE so that modules will work with UP or MP.
Optimize cpu_switchto()'s handling of restartable atomic sequences:
- We can us any callee-saved register we want, since we've already
saved them in the outgoing PCB, so so this to avoid having to
re-load curlwp, etc. from memory. This let's us to eliminate a
branch target.
- ras_lookup() returns a pointer in %a0, but also returns the same
value in %d0. We don't care about the pointer-ness of the return
value, so just use the %d0 return and shave off several insns.
G/C the curpcb global on m68k. It's redundant (the current PCB can always
be accessed via the current LWP) and its presence means wasted work in
cpu_switchto().
For cases where asm code does need to get to to it, add a GET_CURPCB()
macro that places curlwp's PCB pointer into the specified register.
Change pte_update() to return the actual-pte rather than a bool. When
they don't match, we need to re-load the old PTE anyway, so this saves
a redundant load.
Import pppd-2.5.5 (previous was 2.5.2)
Release 2.5.5
=============
This is a bug-fix and security release, with no new features. Changes include:
* Fix bugs where hook scripts such as /etc/ppp/ip-up were not being run.
* Fix bugs causing PPP_SCRIPT_INSTANCE to be set incorrectly for some
scripts.
* Fix validation of received frames in the RADIUS plugin, along with some
further hardening against incorrect received frames.
* Fix generation of MPPE keys when EAP-TLS is being used with TLS 1.3.
* This makes it work with Windows clients, but breaks compatibility with
earlier versions of pppd (but only in the case where EAP-TLS and MPPE and
the 'max-tls-version 1.3' option are all being used).
* Various cases existed in the MPPE code where the link could come up without
MPPE encryption despite it being requested via one or more of the 'require-
mppe', 'require-mppe-40' or 'require-mppe-128' options. This is now fixed.
Also, pppd will now accept an MPPE CCP configuration option requesting no
encryption from the peer if MPPE is not required (rather than rejecting
[116 lines not shown]