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:
parent
73dcea7496
commit
438e7af141
18 changed files with 945 additions and 9 deletions
|
|
@ -198,6 +198,14 @@ lcr3(uint64 val)
|
|||
asm volatile("mov %0,%%cr3" : : "r" (val));
|
||||
}
|
||||
|
||||
static inline uint64
|
||||
rcr3(void)
|
||||
{
|
||||
uint64 val;
|
||||
asm volatile("mov %%cr3,%0" : "=r" (val));
|
||||
return val;
|
||||
}
|
||||
|
||||
// Invalidate the TLB entry for one page. Needed any time a PTE is changed
|
||||
// or cleared for an address space that may still be the active CR3 —
|
||||
// otherwise the CPU can keep translating through the stale entry until the
|
||||
|
|
|
|||
|
|
@ -736,6 +736,16 @@ int net_attach_late(struct device *);
|
|||
int net_eth_poll(void);
|
||||
void net_eth_link_check(void);
|
||||
uint poll_generation(void);
|
||||
// kernel/proc/mapname.c
|
||||
struct mm;
|
||||
void mapname_add(struct mm*, uint64 start, uint64 len, uint64 off, const char *path);
|
||||
void mapname_unmap(struct mm*, uint64 start, uint64 len);
|
||||
void mapname_free(struct mm*);
|
||||
void mapname_copy(struct mm *dst, struct mm *src);
|
||||
int mapname_find(struct mm*, uint64 addr, char *out, int cap, uint64 *off);
|
||||
int mapname_gen(struct mm*, char *buf, int cap);
|
||||
void mapname_report(struct proc*);
|
||||
int proc_maps(int pid, char *buf, int cap);
|
||||
int net_eth_count(void);
|
||||
void net_eth_counts(int i, uint64 *rx, uint64 *tx);
|
||||
struct netif *net_eth_netif(int i);
|
||||
|
|
@ -809,6 +819,13 @@ uint32 inotify_cookie(void);
|
|||
int ev_fionread(struct evobj *o);
|
||||
int pipe_avail(struct pipe *p);
|
||||
int vm_fault(addr_t va);
|
||||
void tlb_init(void);
|
||||
// keyboard lock keys and their lights: kernel/dev/kbd.c
|
||||
void kbd_set_leds(uint locks);
|
||||
void kbd_lock_key(uint lock, int down);
|
||||
uint kbd_lock_state(void);
|
||||
void hid_leds_want(int bits);
|
||||
void lapic_send_ipi(int apicid, int vector);
|
||||
pte_t* walkpte(pml4e_t *pgdir, const void *va);
|
||||
int path_identity(char *path, int follow, int onlydir, uint *dev, uint64 *inum);
|
||||
int memfd_rw(int id, int user, uint64 buf, uint64 off, int n, int writing);
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ struct mm {
|
|||
uint64 mmap_next; // next free mmap VA (bump allocator, see sys_mmap)
|
||||
pml4e_t *pgdir;
|
||||
struct vma vma[NVMA]; // VMA tracking for mmap
|
||||
struct mapname *names; // which file each span came from; mapname.c
|
||||
};
|
||||
|
||||
// The descriptor table, and FD_CLOEXEC beside it.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue