summaryrefslogtreecommitdiff
path: root/sysdep
AgeCommit message (Collapse)Author
2023-05-11Fix use-after free in thread stopping codeMaria Matejka
2023-05-11Threads take loops fasterMaria Matejka
2023-05-07IO Loop / Thread Groups Lock moved to level -attrs- to allow for page ↵Maria Matejka
allocation while locked
2023-05-07Fixed loop movement to not collide on LTT_MOVEMaria Matejka
2023-05-07Fix loop dropping routinesMaria Matejka
2023-05-06Fixed a bug in hot page global storageMaria Matejka
The original algorithm was suffering from an ABA race condition: A: fp = page_stack B: completely allocates the same page and writes into it some data A: unsuspecting, loads (invalid) next = fp->next B: finishes working with the page and returns it back to page_stack A: compare-exchange page_stack: fp => next succeeds and writes garbage to page_stack Fixed this by using an implicit spinlock in hot page allocator.
2023-05-06Debug: keep a circular log of memory page operationsMaria Matejka
2023-05-06Fixed cold page cache leakMaria Matejka
The empty_pages pointer wasn't being propagated into the ->next pointer when more empty_pages were to be stored
2023-05-06Debug: Explicit mprotect() on freed pages to better locate use-after-free bugsMaria Matejka
2023-05-06Page allocator: indentation of messy ifdef blocksMaria Matejka
2023-05-06First try of loop balancingMaria Matejka
If a thread encounters timeout == 0 for poll, it considers itself "busy" and with some hysteresis it tries to drop loops for others to pick and thus better distribute work between threads.
2023-05-03Show threads: Fixed problems with CLI buffer reallocationMaria Matejka
... by allocating all the output locally and then sending it out at once.
2023-05-03Explicitly counting loops and threadsMaria Matejka
2023-05-03Loop spent time refactored to separate structures and functionsMaria Matejka
2023-04-26Loops track also locking timeMaria Matejka
2023-04-26IO loops now actually measuring their time (show threads all works)Maria Matejka
2023-04-25Refactoring of domains connected to poolsMaria Matejka
2023-04-24Fix of failing show threads commandMaria Matejka
2023-04-24Merge commit 'd61505b039bf0aa6697e28b2a4e07907c89ba1fb' into thread-nextMaria Matejka
2023-04-24Resource pools are now bound with domains.Maria Matejka
Memory allocation is a fragile part of BIRD and we need checking that everybody is using the resource pools in an appropriate way. To assure this, all the resource pools are associated with locking domains and every resource manipulation is thoroughly checked whether the appropriate locking domain is locked. With transitive resource manipulation like resource dumping or mass free operations, domains are locked and unlocked on the go, thus we require pool domains to have higher order than their parent to allow for this transitive operations. Adding pool locking revealed some cases of insecure memory manipulation and this commit fixes that as well.
2023-04-22Protocols and tables now use the birdloop pools as primaryMaria Matejka
2023-04-22Resource pool closing has its dedicated functionMaria Matejka
2023-04-22Socket closing has its dedicated functionMaria Matejka
2023-04-21BSD: IPv4 over IPv6 nexthop support on FreeBSDLuiz Amaral
The support for IPv4 routes with IPv6 nexthops was implemented in FreeBSD 13.1, this patch allows to import and export such routes from/to kernel. Minor change from committer.
2023-04-18Updated the version number to not include dash (breaks RPM)Maria Matejka
2023-04-18NEWS and version updateMaria Matejka
2023-04-17IO: added a specific loop pickup group for BFD; to be done better in futureMaria Matejka
2023-04-14Merge commit '231c6385' into thread-next-ifaceMaria Matejka
2023-04-06Loop: keep running the same loop for some time if there is work to doMaria Matejka
2023-04-04Sockets: Unified API for main and other loopsMaria Matejka
Now sk_open() requires an explicit IO loop to open the socket in. Also specific functions for socket RX pause / resume are added to allow for BGP corking. And last but not least, socket reloop is now synchronous to resolve weird cases of the target loop stopping before actually picking up the relooped socket. Now the caller must ensure that both loops are locked while relooping, and this way all sockets always have their respective loop.
2023-04-04More efficient IO loop event execution to avoid long loopsMaria Matejka
If there are lots of loops in a single thread and only some of the loops are actually active, the other loops are now kept aside and not checked until they actually get some timers, events or active sockets. This should help with extreme loads like 100k tables and protocols. Also ping and loop pickup mechanism was allowing subtle race conditions. Now properly handling collisions between loop ping and pickup.
2023-04-04Resource dumps also write out block addressesMaria Matejka
2023-04-04Misc allocator fixesMaria Matejka
2023-04-04Allocator fix: thread local kept pages counter must be thread localMaria Matejka
2023-04-04Propagated const through route feed routinesMaria Matejka
2023-04-04Temporarily switching off time annotations of debug logMaria Matejka
The "dump *" commands are totally garbled by the time annotations.
2023-04-04Interface subsystem lockingMaria Matejka
2023-03-06Net: Replace runtime checks with STATIC_ASSERT()Ondrej Zajicek
2023-02-07Merge commit '0bb04d5390f21b0c96fc4894ba5d5510c541f0ef' into HEADMaria Matejka
2023-02-02Interface updates are asynchronousMaria Matejka
Instead of propagating interface updates as they are loaded from kernel, they are enqueued and all the notifications are called from a protocol-specific event. This change allows to break the locking loop between protocols and interfaces. Anyway, this change is based on v2 branch to keep the changes between v2 and v3 smaller.
2023-02-02Moved interface list flush to device protocol cleanup hook.Maria Matejka
The interface list must be flushed when device protocol is stopped. This was done in a hardcoded specific hook inside generic protocol routines. The cleanup hook was originally used for table reference counting late cleanup, yet it can be also simply used for prettier interface list flush.
2023-01-24Merge v2.0.12 into thread-nextMaria Matejka
2023-01-24Merge commit '3186ffe79714a48542d5ad61a94c81216b522fd0' into thread-nextMaria Matejka
2023-01-24Merge commit '6bb992cb04926895be57dc97e7d569ea15a07db1' into thread-nextMaria Matejka
2023-01-23Merge commit '928a1cb034e6f9e8edcdd1dc07264cd703e00827' into thread-nextMaria Matejka
2023-01-23Merge commit '7fb23041a52d01754c53ba963e2282e524813364' into thread-nextMaria Matejka
2023-01-23NEWS and version updatev2.0.12Ondrej Zajicek
2023-01-22Merge commit '2b7643e1f8ecb0bd4cf9af4183b4fd53b655d19c' into thread-nextMaria Matejka
2023-01-21Merge commit '1e47b9f203aaaad0fb658d40a1670f1d0437f1f8' into thread-nextMaria Matejka
2023-01-21Merge commit 'a80cd4707464cedb526eb72e7704b097af20beb7' into thread-nextMaria Matejka