Keyboard lights, TLB shootdowns, battery in sysfs, /proc/pid/maps

Caps, Num and Scroll Lock now light their LEDs on PS/2 and USB keyboards,
share one state between keyboards, and stop toggling on key repeat. X sets
them through evdev writes while it holds the keyboard.

Unmapping memory in a process with threads on other CPUs now flushes their
TLBs with an IPI. Without it a freed page stayed reachable through stale
translations, which corrupted Epiphany's heap on SMP.

ACPI batteries and AC adapters appear under /sys/class/power_supply.
/proc/<pid>/maps lists file mappings, and a process killed by a fault
names the file and offset it died in. r8169 gets a 256-entry RX ring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
This commit is contained in:
Nexoniarz 2026-10-25 13:43:27 +01:00
commit 438e7af141
18 changed files with 945 additions and 9 deletions

View file

@ -32,3 +32,21 @@ void acpi_pci_route(void);
int acpi_poweroff(void); // S5; returns only on failure
void acpi_poweroff_now(void); // S5 from a panic, no AML; returns only on failure
int acpi_reboot(void); // the FADT reset register; ditto
// Batteries and AC adapters, for /sys/class/power_supply. Units are the
// battery's own: unit 0 is mW/mWh, 1 is mA/mAh; ACPI_UNKNOWN where the
// firmware does not say.
#define ACPI_UNKNOWN 0xFFFFFFFFu
struct acpi_psu {
int battery; // else an AC adapter
int present; // battery: in the bay
int online; // adapter: plugged in
int unit;
uint32 state; // _BST: 1 discharging, 2 charging, 4 critical
uint32 rate, remaining, voltage; // _BST, voltage in mV
uint32 design, full, design_voltage, cycles;
int technology; // 0 primary, 1 rechargeable
char model[32], serial[32], kind[16], oem[32];
};
int acpi_psu_count(void);
int acpi_psu_get(int i, struct acpi_psu *out);