limits: 256 PCI functions, 128 sockets and devices, 64 USB interfaces

The fixed tables that a bigger machine than the one they were written
on reaches first, each raised to where it costs little:

  NPCI       64 -> 256   a desktop with cards and Thunderbolt passes 64,
                         and the devices past it -- often the disk or
                         NIC last in bus order -- were ignored; 44 KB
  NSOCK      32 -> 128   Unix sockets, which a desktop session uses by
                         the dozen; 4.9 KB each, 470 KB in all
  NDEVICE    32 -> 128   120 bytes each
  NIFDEV     16 -> 64    one dock is a hub, Ethernet, audio and a card
                         reader at two or three interfaces apiece
  NETIF_MAX   4 -> 8

Device names took one digit and clamped there, so the tenth device of
a kind and every one after it was named "...9". Two digits now.

Checked under QEMU with two bridges of test devices: 68 functions,
all in lspci, /proc/pci and /sys/bus/pci.

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-23 13:54:37 +02:00
commit 4805dbd892
6 changed files with 19 additions and 12 deletions

View file

@ -67,7 +67,7 @@ struct device {
int in_use;
};
#define NDEVICE 32
#define NDEVICE 128
// Register a device. Returns it, or 0 if the table is full. The name is made
// unique by appending an index, so a caller passes "vga" and gets "vga0".

View file

@ -67,5 +67,6 @@
// Network interfaces the stack will attach. Two is already an ordinary machine
// -- a laptop with Ethernet plus a virtual adapter -- and each one costs a
// struct netif, so the limit is about keeping a fixed array honest rather than
// about memory.
#define NETIF_MAX 4
// about memory. Eight, since a dock's Ethernet and a phone tethered over USB
// sit beside the built-in ones.
#define NETIF_MAX 8

View file

@ -53,7 +53,10 @@
#define PCI_ANY 0xFFFF // wildcard in a match table
#define NPCI 64 // devices we will remember
// Devices we will remember. A laptop has 30 to 60 functions, a desktop with
// a couple of cards and Thunderbolt more than 64, and every one past the limit
// was ignored -- including whatever disk or NIC came last in bus order.
#define NPCI 256
struct pci_bar {
uint64 base; // already masked; 0 means "no BAR here"

View file

@ -260,7 +260,7 @@ struct rtattr {
#ifdef _KERNEL_SOCKET_INTERNALS
#define NSOCK 32 // sockets in the system
#define NSOCK 128 // sockets in the system, 4.9 KB each
#define SOCKBUF 4096 // receive buffer per connected socket
#define NBACKLOG 8