| 1 | ## Fri 03 August 2007 |
| 2 | |
| 3 | * **NATA is now the default ata driver.** |
| 4 | * **Major changes made to the disk abstraction layer.** |
| 5 | * **Significant changes made to disk device minor numbers in /dev.** |
| 6 | * **GPT and 64 bit disklabel support added (non booting).** |
| 7 | * **The LWP (Userland threading work) is now essentially done.** |
| 8 | * **Major work on vinum to remove its roll-your-own disklabel layer and to remove its assumptions about the device layer's DMA capabilities.** |
| 9 | * **Introduce libpthread as a softlink allowing libthread_xu or libc_r to be selected. All multithreaded programs are now linked against libpthread. libc_r is the default as there are still a few issues that need to be worked out with libthread_xu.** |
| 10 | * **Major improvements to wireless networking drivers.** |
| 11 | * **Many new USB and PCI devices added.** |
| 12 | * **Numerous new PCI drivers added, particularly w/ networking.** |
| 13 | * Userland syslink API is now finished. |
| 14 | * Link state changes are now reported through the routing socket. |
| 15 | * Signal and proper stop/continue support added to LWPs |
| 16 | * Entire kernel is now LWP and thread centric instead of process |
| 17 | and thread centric. |
| 18 | * Bind 9.3.4 integrated |
| 19 | * GCC 4.1.2 integrated, selectable with CCVER. GCC-3 is still |
| 20 | the default. |
| 21 | * Add an abstraction layer to vn_strategy() to hide DMA limitations |
| 22 | of underlying devices. |
| 23 | * Fix symbol resolution issues with loaded modules. |
| 24 | * Both GCC-3 and GCC-4 are now built by default. |
| 25 | * Improve virtual kernel disk and networking support. Multiple |
| 26 | disks and network interfaces are now supported. |
| 27 | * Implement SMP support for virtual kernels (mainly as a testbed). |
| 28 | * Many documentation updates. |
| 29 | * Enhance kinfo_proc to return LWP info. |
| 30 | * Enhance the virtual kernel's console. |
| 31 | * Replace gnu tar with BSD tar. |
| 32 | * Fix a single stepping bug that could lead to a panic. |
| 33 | * Allow multiple kernels to be supplied on the release ISO and |
| 34 | supply a VKERNEL kernel in addition to the normal kernel. |
| 35 | * Get rid of the UAREA for good. |
| 36 | * Synchronize zoneinfo changes with recent standards changes. |
| 37 | * Fix a mbuf leak in sbappendcontrol(). |
| 38 | * Fix an exec*() syscall memory leak that can lock a machine up |
| 39 | when the exec temporary argument space becomes exhausted. |
| 40 | * Bring in the latest libarchive, bsdtar, sendmail, awk, |
| 41 | ping, file, less, and openssh. |
| 42 | * Bring in binutils 2.17. |
| 43 | * Support MBs that do not have keyboard controllers by placing |
| 44 | an upper limit on the keyboard controller probe timeout. |
| 45 | * Remove IPV6 type 0 router header support entirely. |
| 46 | * Implement SYSREF for the kernel - this structure and API |
| 47 | implements MP-safe reference counting and also associates a |
| 48 | unique 64 bit id with the structure allowing the structure to |
| 49 | be referenced off-machine. SYSREF is part of the clustering work. |
| 50 | * Use SYSREF for struct vmspace and struct vnode, including doing |
| 51 | a major revamping of the vnode reference handling code. |
| 52 | * Do a major reordering of many SYSINITs and a major reordering |
| 53 | of where device configuration occurs in the boot sequence. |
| 54 | Device configuration now occurs far later in the boot sequence |
| 55 | and has access to most major subsystems including threading |
| 56 | and major memory subsystems. Interrupts are now enabled during |
| 57 | device configuration. This is somewhat experimental but works |
| 58 | great in allowing us to locate ordering issues in various device |
| 59 | init functions related to their interrupts. |
| 60 | * Implement asynchronous device attachment but default to |
| 61 | disabled for 1.10. |
| 62 | * Reformulate disk management layer ioctls and remove data |
| 63 | pollution. Do not store filesystem-specific data such as |
| 64 | the fragment size in the disklabel any more. |
| 65 | * Expand the SCSI subsystem to handle 16-byte commands, |
| 66 | allowing > 32 bit block addressing for devices that support |
| 67 | it. |
| 68 | * Change the 'make upgrade' target to attempt to rebuild the |
| 69 | devices found in /dev instead of just rebuilding base devices. |
| 70 | * Distributions now include a Makefile in /usr with easy-to-use |
| 71 | targets for creating and synchronizing /usr/src and /usr/pkgsrc. |
| 72 | * Greatly simplify LWKT messaging within the kernel. |
| 73 | * Add virtual CDROM support to the virtual kernel. |
| 74 | * Add halt and reboot support to the virtual kernel. |
| 75 | * Fix a bug in bus_dmamap_load() that was not properly following |
| 76 | boundary and maximum segment size limits. |
| 77 | * Save and restore a USB keyboard's translation mode, allowing |
| 78 | the keyboard to be un-plugged and re-plugged. |
| 79 | * Remove the last source of major SMP TLB invalidations in the |
| 80 | fork/exec/exit/wait critical paths, significantly reducing IPI |
| 81 | traffic and improving fork/exec performance. |
| 82 | * ktrdump now has an option to loop waiting for new input. |
| 83 | * Fix mouse jumpiness when emergency interrupts are enabled by |
| 84 | not polling PS/2 mouse interrupts. |
| 85 | * Fix numerous CAM/USB issues so we do not panic or crash if |
| 86 | a USB mass storage device is pulled while still mounted. Make |
| 87 | sure umount -f works on pulled devices. |
| 88 | * Synchronize the sound subsystem with FreeBSD. |
| 89 | * Timeout positive hits in the namecache as well as negative hits |
| 90 | for NFS mounts. Otherwise rename-over's can result in a stale |
| 91 | namecache that doesn't auto recover. |
| 92 | * Add MPLS support to traceroute and add a protocol entry in |
| 93 | /etc/protocols for MPLS-in-ip. |
| 94 | * Bring in a number of math library fixes from FreeBSD. |
| 95 | * **dntpd now properly handles DNS failures, supports DNS pools, |
| 96 | and does a quorum consistency check when told to use more then |
| 97 | one source.** |
| 98 | |
| 99 | * Fix a bug in the checkpointing code that was preventing a |
| 100 | program from being re-checkpointed properly. |
| 101 | * Major USB code cleanup. |
| 102 | * Adjust dynamic objcache sizing to handle certain degenerate |
| 103 | conditions. |
| 104 | * Synchronize with the Adaptec SCSI code from FreeBSD. |
| 105 | * Retire the original ports packaging tools. |
| 106 | |
| 107 | |
| 108 | ## Tue 30 January 2007 |
| 109 | |
| 110 | * **Implement Virtual Kernel support and add a VKERNEL target.** |
| 111 | Virtual kernels are run as userland processes and provide a |
| 112 | complete (minus hardware drivers) working kernel environment. |
| 113 | A simulated disk driver is included and a simulated network |
| 114 | driver using the TAP interface is included, allowing network |
| 115 | access. See the vkernel(7) manual page for more information. |
| 116 | * Introduce getcontext(3), setcontext(3), and friends |
| 117 | * **Release 1.8.0!** |
| 118 | |
| 119 | |
| 120 | ## Mon 1 January 2007 |
| 121 | |
| 122 | * Jails are now IPv6 aware and support multiple IP addresses. |
| 123 | * Bridging support has been greatly improved. |
| 124 | * Many, Many new network drivers and chipsets have been added. |
| 125 | * Major infrastructure for 802.x wireless support added (WPA, |
| 126 | TX rate control, major API layer for all wireless network |
| 127 | devices, better ifconfig integration, and more). |
| 128 | * The cpdup program has been greatly enhanced and now supports |
| 129 | remote copies via ssh.. |
| 130 | * Improved support for old-style disklabels. |
| 131 | * Kernel sources are now included on release CDs. |
| 132 | * Major rewrite of the vnode operations infrastructure, greatly |
| 133 | simplifying the layer. |
| 134 | * Fix a bug related to POSIX locking. |
| 135 | * Tons of documentation updates and code readability cleanups. |
| 136 | * Restructure the kernel build to accomodate multiple architectures. |
| 137 | Start separting platform components from cpu components. |
| 138 | * Synchronize a bunch of AMD64 related items (but we don't support |
| 139 | 64 bit mode yet). |
| 140 | * Major rewrite of the mount glue infrastructure and NULLFS which |
| 141 | allows the namecache topology to be shared for multiple NULLFS |
| 142 | mounts and also allows arbitrary stacking of read-only and |
| 143 | read-write NULLFS mounts with basically zero kernel overhead. |
| 144 | * Unconditionally associate a namecache reference with all |
| 145 | file descriptors, allowing us to share vnodes across different |
| 146 | mounts (NULLFS). |
| 147 | * NULLFS mounts may now be arbitrarily stacked and distinct paths |
| 148 | are no longer required. |
| 149 | * Properly dereference mount point roots when unmounting. Raise |
| 150 | hell if unmounting a filesystem which still has references. |
| 151 | * Do a massive reorganization of the device operations vector and |
| 152 | remove many instances where devops functions were dependant on |
| 153 | the calling process or thread to obtain cred information. |
| 154 | * Do a run through of all system header files to make sure they |
| 155 | include any dependancies themselves, instead of requiring the |
| 156 | originating source file to include the dependancies first. |
| 157 | This greatly reduces the effort required to use kernel header |
| 158 | files in new sources. |
| 159 | * Synchronize MII support with NetBSD and OpenBSD, including adding |
| 160 | standard conforming GMII support. Er. In otherwords, improve |
| 161 | driver support for physical network interfaces (phys's). |
| 162 | * Remove VOP locking vectors. Make VOP locking functions direct |
| 163 | calls (and thus mandatory). |
| 164 | * Control access to vnode ref count fields with a spinlock |
| 165 | * Fix a dubious construct in usr.bin/tail (no, really! That's |
| 166 | what the commit message said!). |
| 167 | * Add support for %j to the kernel printf. |
| 168 | * Major symbol separation for most kernel functions which |
| 169 | inexactly mimic libc functions. e.g. printf -> kprintf, |
| 170 | in order to allow user-mode kernels to be linked against libc. |
| 171 | * Update to sendmail to 8.13.8. |
| 172 | * Update to OpenSSL to 0.9.8d |
| 173 | * Update to OpenSSH 4.5p1 |
| 174 | * Update to Bind 9.3.2-P1 |
| 175 | * Update to less 3.9.4 |
| 176 | * Update to awk 20050424 |
| 177 | * Update to file 4.19 |
| 178 | * Update to tcpdump 3.9.5 |
| 179 | * Update to libpcap 0.9.5 |
| 180 | * Synchronize m4 with FreeBSD |
| 181 | * Import libarchive |
| 182 | * Import bsdtar 1.3.1 and make bsdtar our default tar. GNU tar |
| 183 | is still installed as gtar. |
| 184 | * Import NetBSD's ftp client under its new name (tnftp). |
| 185 | * Bring in GCC-4.1 (setenv CCVER GCC41 to use). |
| 186 | * Significant code cleanups to make the world and kernel compile |
| 187 | under GCC-4.1. Note that the default compiler is still GCC 3.4 |
| 188 | (GCC-4.x will probably become the default sometime in 2007). |
| 189 | * More work on LWP/THREAD/PROC separation for 1:1 threading support. |
| 190 | * Fix a major bug in /bin/make that can cause make (or some child |
| 191 | make in a large build) to ignore ^C. make temporarily installs |
| 192 | SIG_IGN when polling whether a signal is being ignored or not. |
| 193 | Fix the code to not do this. |
| 194 | * Fix a long standing signal/fork race that could cause a process |
| 195 | group signal to not make it to a newly fork child if it occurs |
| 196 | while the fork is in progress. |
| 197 | * Synchronize the zoneinfo database with tzdata2006p. |
| 198 | * Add an ECC detection device, currently supporting AMD64's memory |
| 199 | controller. |
| 200 | * Greatly reduce the memory allocated by fsck when fscking |
| 201 | filesytems with a huge number of directories (primarily mirors |
| 202 | with lots of hardlinked files). Otherwise fsck can run out |
| 203 | of memory on such filesystems. |
| 204 | * Adjust RCNG to support 'blah=YES/NO' as well as |
| 205 | 'blah_enable=YES/NO', giving us better compatibility with |
| 206 | PkgSrc based RC scripts. |
| 207 | * Fix a bug related to ALTQ when setting the algorithm for a queue |
| 208 | on which packets are already present. |
| 209 | * Do a major clean up of the BUSDMA header file architecture. |
| 210 | * We have a new web site layout! |
| 211 | * Use spinlocks in the objcache instead of tokens (the critical |
| 212 | path is still lockless). |
| 213 | * Replace the global VM page hash table with a per-VM-object |
| 214 | Red-Black tree. |
| 215 | * A considerable amount of work on IPSEC support has been done. |
| 216 | * NATA has been ported from FreeBSD and is currently being tested. |
| 217 | * Sync USB support with FreeBSD6 - use task queues to handle |
| 218 | operations that cannot be handled from an interrupt thread. |
| 219 | * Explore low-speed USB busses during cold boot so the USB keyboard |
| 220 | starts working earlier in the boot sequence. |
| 221 | |
| 222 | |
| 223 | |
| 224 | * Start introducing glue for the SYSLINK and CCMS infrastructures. |
| 225 | (system link protocol and cache coherency management subsystems). |
| 226 | * Introduce a system call skeleton and test code for SYSLINK. |
| 227 | * Introduce the algorithm and structural topology that will be |
| 228 | used for cache coherency into the VFS path. |
| 229 | * Introduce a user-managed virtuallized page table infrastructure |
| 230 | which can be accessed via mmap(), as part of the infrastructure |
| 231 | to support virtual kernels running in userland (MAP_VPAGETABLE). |
| 232 | * Introduce vmspace_*() system calls which allows a user process |
| 233 | to manage and control multiple VM spaces, as part of the |
| 234 | virtualization support effort. |
| 235 | |
| 236 | |
| 237 | |
| 238 | |
| 239 | ## Wed 12 July 2006 |
| 240 | |
| 241 | * Continued work on LWP/PROC separation. |
| 242 | * Continued pkgsrc integration. |
| 243 | * Fix refcount bugs in the kernel module loader and unloader. |
| 244 | * Lots of netif and serializer cleanups and fixes. |
| 245 | * Lots of softupdates, filesystem, and buffer cache related fixes. |
| 246 | * Remove more of the old ports-related infrastructure. |
| 247 | * Major documentation cleanups. |
| 248 | * Major code cleanups, ansification. |
| 249 | * Change the system #include topology so that each include file |
| 250 | is responsible for #include'ing any dependant include files. |
| 251 | * Fix a bug in the PF fragment cache. |
| 252 | * Random number generator: Instead of generating entropy from |
| 253 | selected interrupts (and none by default), we now generate |
| 254 | entropy from all interrupts by default and rate limit it to |
| 255 | not interfere with high performance interrupts. Completely |
| 256 | * Random number generator: Completely replace the algorithms, |
| 257 | remove limitations on returned bytes from /dev/random (which |
| 258 | only served to cause programs to not use /dev/random due to its |
| 259 | lack of dependability). Add the ability to seed the RNG. |
| 260 | Do some automatic initial seeding at boot. |
| 261 | * Adjust ssh to find the pkgsrc X11BASE instead of the old ports |
| 262 | X11BASE. |
| 263 | * Fix some compatibility issues in /bin/sh. |
| 264 | * Fix a small number of critical section enter/exit mismatches. |
| 265 | * Bring in a bunch of new malloc() features from OpenBSD |
| 266 | (guard pages, free page protection, pointer guard, etc). |
| 267 | * Clean up the DragonFly build system's automatic .patch handling. |
| 268 | * Bring in openssh 4.3p2. |
| 269 | * Retire libmsun. It was replaced by NetBSD's libm. |
| 270 | * Fix a bug in the NFS timer/retry code. |
| 271 | * Fix issues related to wide-char support. |
| 272 | * <B>Fix a number of private TSS bugs related to threaded programs.</B> |
| 273 | |
| 274 | * <B>Completely rewrite the user process scheduler and usched APIs.</B> |
| 275 | * <B>Add system calls that allow a blocking/non-blocking flag to be |
| 276 | passed independant of the O_NONBLOCK state of the descriptor.</B> |
| 277 | * <B>Remove all fcntl(... O_NONBLOCK) calls from libc_r, use the |
| 278 | new system calls instead. This solves numerous problems with |
| 279 | file descriptors shared between threaded and non-threaded |
| 280 | programs getting their non-blocking flag set, and then blowing |
| 281 | up the non-threaded program.</B> |
| 282 | * Add additional red-black (RB) tree function support for ranged |
| 283 | searches. |
| 284 | * Get rid of gdb -k, replace with a separately built kgdb, and |
| 285 | build a separate libgdb as well. |
| 286 | * Implement a VM load heuristic. Remove the full-process SWAP |
| 287 | code which never worked well and replace with page-fault |
| 288 | rate-limiting code based on the VM load. |
| 289 | * Fix a serious bug in adjtime()'s microseconds calculation. |
| 290 | * Fix a serious bug in libc's strnstr() function. The function |
| 291 | was testing one byte beyond the specified length limit. This |
| 292 | can cause a seg-fault when, e.g. using strnstr() on a memory |
| 293 | mapped file whos last byte abuts the end of the VM page. |
| 294 | * Bring in sendmail 8.13.7. |
| 295 | * Bring in SHA256 support from FreeBSD. |
| 296 | * Implement a hardlink-mirroring option (-H) in cpdup. |
| 297 | * Add missing code needed to detect IPSEC packet replays. |
| 298 | * Enable TCP wrappers in sshd. |
| 299 | * Restrict recursive DNS queries to localhost by default. |
| 300 | * <B>Massive reorganization and rewrite of the 802_11 subsystem, |
| 301 | with many pieces taken from FreeBSD.</B> |
| 302 | |
| 303 | * Fix a number of issues with user-supplied directory offsets |
| 304 | blowing up readdir/getdirentries for NFS and UFS. |
| 305 | * Normalize internal kernel I/O byte lengths to 'int' and remove |
| 306 | a ton of crazy casts to and from unsigned int or size_t. |
| 307 | * Remove NQNFS support. The mechanisms are too crude to co-exist |
| 308 | with upcoming cache coherency management work and the original |
| 309 | implementation hacked up the NFS code pretty severely. |
| 310 | * Remove VOP_GETVOBJECT, VOP_DESTROYVOBJECT, and VOP_CREATEVOBJECT. |
| 311 | They never lived up to their billing and DragonFly doesn't |
| 312 | need them since DragonFly is capable of aliasing vnodes via |
| 313 | the namecache. Rearrange the VFS code such that VOP_OPEN is |
| 314 | now responsible for assocating a VM object with a vnode. |
| 315 | * Formalize open/close counting for the vnode and assert that |
| 316 | they are correct. |
| 317 | * Remove the thread_t argument from most VOP and VFS calls. |
| 318 | Remove the thread_t argument from many other kernel procedures. |
| 319 | * Integrate FreeBSD's new ifconfig(8) utility. |
| 320 | * Fix a race condition in the floating point fault code that |
| 321 | could sometimes result in a kernel assertion. |
| 322 | * Fix a crash in the TCP code when the MTU is too small to |
| 323 | support required TCP/IP/IPSEC options and headers. |
| 324 | * Separate EXT2 conditionals from the UFS code, copying the files |
| 325 | in question to the EXT2 directory instead of trying to |
| 326 | conditionalize them. Also remove function hooks and other code |
| 327 | mess that had been implemented to allow the UFS code to be |
| 328 | used by EXT2. |
| 329 | * Greatly simplify the lockmgr() API. Remove LK_DRAIN, |
| 330 | LK_INTERLOCK, and many other flags. Remove the interlock |
| 331 | argument. |
| 332 | * Fix a bug in the POSIX locking code (lockf). Actually, completely |
| 333 | rewrite the POSIX locking code. The previous code was too |
| 334 | complex and mostly unreadable. |
| 335 | * Do a major clean up of all *read*() and *write*() system calls, |
| 336 | and iovec handling. |
| 337 | * Replace many instances where LWKT tokens are used with spinlocks. |
| 338 | * Make spinlocks panic-friendly. Properly handle the detection |
| 339 | of indefinite waits and other deadlock issues. |
| 340 | * Improve network performance by embedding the netmsg directly in |
| 341 | the mbuf instead of allocating a separate netmsg structure for |
| 342 | each packet. |
| 343 | * <B>Implement both shared and exclusive spinlocks. |
| 344 | Implement a much faster shared spinlock. Cache the shared |
| 345 | state such that no locked bus cycle operation is required in |
| 346 | the common case.</B> |
| 347 | |
| 348 | * Implement msleep(). Use a novel approach to handling the |
| 349 | interlock that greatly improves performance over other |
| 350 | implementations. |
| 351 | * Add cpu-binding support to the scheduler and add a system call |
| 352 | to access it. A user process can be bound to a subset of cpus. |
| 353 | * <B>Prefix all syscall functions in the kernel with 'sys_' |
| 354 | to reduce function prototype pollution and incompatibilities, |
| 355 | and to eventually support virtualized kernels running in |
| 356 | userland.</B> |
| 357 | * Port the enhanced SpeedStep driver (EST) for cpu frequency control. |
| 358 | * Remove the asynchronous syscall interface. It was an idea before |
| 359 | its time. However, keep the formalization of the syscall |
| 360 | arguments structures. |
| 361 | * Add a facility which statistically records and dumps program |
| 362 | counter tracking data for the kernel. |
| 363 | * Improve kernel SSE2-based bcopies by calling fnclex instead of |
| 364 | fninit. |
| 365 | * Major BUF/BIO work - <B>make the entire BUF/BIO subsystem BIO |
| 366 | centric.</B> |
| 367 | * Major BUF/BIO work - <B>get rid of block numbers, use 64 bit |
| 368 | byte offsets only.</B> |
| 369 | |
| 370 | * Major BUF/BIO work - Clean up structures and compartmentalize |
| 371 | driver-specific private fields. Rewrite and simplify device |
| 372 | and vnode strategy APIs. |
| 373 | * Major BUF/BIO work - Remove B_PHYS. There is no longer any |
| 374 | differentiation between physical and non-physical I/O at |
| 375 | the strategy layer. |
| 376 | * Major BUF/BIO work - Replace the global buffer cache hash table |
| 377 | with a per-vnode RB tree. Add sanity checks. Require that all |
| 378 | vnode-based buffers be VMIO backed. |
| 379 | * MPSAFE work - <B>Implement the parallel route table algorith.</B> |
| 380 | * MPSAFE work - <B>Make the user process scheduler MPSAFE.</B> |
| 381 | * MPSAFE work - <B>File descriptor access is now MPSAFE. Many |
| 382 | fd related functions, like dup(), close(), etc, are either MPSAFE |
| 383 | or mostly MPSAFE.</B> |
| 384 | * MPSAFE work - <B>Push the BGL deeper into the kernel call stack |
| 385 | for many system calls.</B> |
| 386 | |
| 387 | * MPSAFE work - <B>Make the process list MPSAFE.</B> |
| 388 | * MPSAFE work - <B>Make all cred functions MPSAFE.</B> |
| 389 | * NRELEASE - compilable kernel sources are now included on the ISO. |
| 390 | |
| 391 | |
| 392 | ## Sat 7 January 2006 |
| 393 | |
| 394 | * Add the closefrom() system call. |
| 395 | * GCC 3.4 is now the default compiler. 2.95.x is no longer |
| 396 | supported (it can't handle the new threading storage classes |
| 397 | properly). |
| 398 | * Import Citrus from NetBSD. |
| 399 | * Implement direct TLS support for programs, whether threaded or not. |
| 400 | * Major library and user-visible system structure changes |
| 401 | (dirent, stat, errno, etc), and other work requires a major |
| 402 | library bump for libc and other libraries. libc is now |
| 403 | libc.so.6. |
| 404 | * stat: inode size now 64 bits, nlink now 32 bits. new fields, |
| 405 | added pad. |
| 406 | * dirent: inode size now 64 bits, various fields disentangled from |
| 407 | the UFS dirent. |
| 408 | * statfs: new fields, added pad. |
| 409 | * Clean up RC scripts that are not used by DragonFly. |
| 410 | * Remove the OS keyword requirement for RC scripts. |
| 411 | * Add support for unsigned quads to sysctl. |
| 412 | * Implement DNTPD, DragonFly's own NTP client time synchronization |
| 413 | demon. |
| 414 | * Correct a large number of bugs in the third party ntpd code, but |
| 415 | for client-side operations we now recommend you use dntpd. |
| 416 | * Add a framework for aggregating per-cpu structures for user |
| 417 | reporting. |
| 418 | * Userland TLS (data spaces for threads) support added. |
| 419 | * Create a binary library compatibility infrastructure that |
| 420 | allows us to install and/or upgrade older revs of shared |
| 421 | libraries on newer machines to maintain compatibility with |
| 422 | older programs. |
| 423 | * Fix issues related to the expansion of symbolic links by the |
| 424 | bourne shell. |
| 425 | * Many, many mdoc cleanups and fixes. |
| 426 | * Update cvs, openssl, ssh, sendmail, groff, |
| 427 | and other numerous contributed applications. |
| 428 | * Bring in a brand new PAM infrastructure. |
| 429 | * Introduce pkgsrc support. |
| 430 | * Get rid of libmsun. |
| 431 | * Implement backwards scanning and partial-transaction handling |
| 432 | features in jscan. |
| 433 | |
| 434 | * FreeBSD-SA-05:06.iir - major disk access vulnerability for IIR |
| 435 | * FreeBSD-SA-05:04.ifconf - memory disclosure vulnerability |
| 436 | * FreeBSD-SA-05:08.kmem - memory disclosure vulnerability |
| 437 | * FreeBSD-SA-05:16.zlib - possible buffer overflow in zlib |
| 438 | * FreeBSD-SA-05:18.zlib - possible buffer overflow in zlib |
| 439 | * FreeBSD-SA-05:15.tcp - fix TCP RESET window check |
| 440 | (DOS attack vulnerability) |
| 441 | * ? - a bzip2 vulnerability |
| 442 | |
| 443 | * Fix a bug in the TCP NewReno algorithm which could result in |
| 444 | a large amount of data being unnecessarily retransmitted. |
| 445 | * Fix numerous TCP buffering issues. |
| 446 | * Implement TCP Appropriate Byte Counting |
| 447 | * Bring in ALTQ and reorganize the IF queueing code to remove |
| 448 | per-driver dependencies on ALTQ. |
| 449 | * Strip away numerous TCP hidden indirections that make code hard |
| 450 | to read and understand. |
| 451 | * Introduce BPF_MTAP which includes an address family parameter. |
| 452 | * Reimplement network polling with a systimer, allowing the |
| 453 | frequency to be adjusted on the fly. |
| 454 | * Remove the really bad hack that was calling the network polling |
| 455 | code from the trap code. |
| 456 | * Completely rewrite network polling support. |
| 457 | * Make the network IF serializer mandatory for all network device |
| 458 | driver interrupts, ioctl's, and if_ callbacks. |
| 459 | * Implement a very fast memory object caching infrastructure. This |
| 460 | will eventually replace zalloc() (but not yet). |
| 461 | * Rewrite the mbuf allocator using the new memory object caching |
| 462 | infrastructure. Remove many crazily-large mbuf macros in favor |
| 463 | of the new infrastructure. |
| 464 | * Convert all remaining uses of the old mbuf m_ext API to the new |
| 465 | API. Remove support for the old API. |
| 466 | * Reorder the detach sequence in all network drivers. Unhook the |
| 467 | interrupt first rather then last. |
| 468 | * Fix all instances where an mbuf packet header and mbuf data |
| 469 | buffer were being referenced by the wrong name and all instances |
| 470 | where the packet header flag was being improperly set or cleared. |
| 471 | * Fix a number of mbuf statistics counting bugs. |
| 472 | * Fix numerous bugs in ipfw/ipfw2 where m_tag data was not being |
| 473 | stored in the right place, resulting in a panic. |
| 474 | * Add support for the experimental SCTP protocol. |
| 475 | * Fix an issue with cloned interfaces being added twice. |
| 476 | |
| 477 | * Add a passive IPIQ call for non-time-critical events such as |
| 478 | memory free() calls. |
| 479 | * Add TLS support for threads using the GDT instead of the LDT. |
| 480 | * Greatly simplify and demystify the NTP kernel interface. Convert |
| 481 | most aspects of the interface over to sysctls. |
| 482 | * Implement ranged fsync's in-kernel. This capability will |
| 483 | eventually replace the write-behind heuristic. |
| 484 | |
| 485 | * Introduce MP-safe mountlist scanning code. |
| 486 | * Introduce rip-out-safe red-black tree scanning code. |
| 487 | * Use the new RB scanning code to get rid of VPLACEMARKER and |
| 488 | generally use the new RB scanning code to handle all RB tree |
| 489 | scanning in a safe way (allowing the scan code callback to block). |
| 490 | * Zoneinfo upgrades |
| 491 | * Rename cpu_mb*() functions to cpu_mfence(), cpu_lfence(), and |
| 492 | cpu_sfence() to make their function more apparent. |
| 493 | * Fix bugs in the LWKT token code related to token references |
| 494 | being lost due to a preemption or blocking condition. |
| 495 | * Fix bugs in the LWKT rwlock code relating to preemption occuring |
| 496 | during token acquisition. |
| 497 | * Fix a bug in the LWKT thread queueing and dequeueing code |
| 498 | related to a preemption. |
| 499 | * Increase the size of the physmap[] array to accomodate newer |
| 500 | PCs which have a larger number of memory segments and fix |
| 501 | an overflow bug. |
| 502 | * Use the ACPI timer if present instead of one of the other 8254 |
| 503 | timers (which are not dependable because BIOS calls might |
| 504 | manipulate them). |
| 505 | * Change cpu statistics to be accounted for on a per-cpu basis. |
| 506 | * Make network routing statistics per-cpu. |
| 507 | * Extend the interrupt vector code to pass a frame as a pointer. |
| 508 | * Remove the last vestiges of the old mbuf tagging code. |
| 509 | * Add a serializer API and code (basically blockable mutexes). |
| 510 | * Add interrupt enablement and disablement features to the new |
| 511 | serializer module to deal with races against blocked serializer |
| 512 | locks when e.g. removing a driver. |
| 513 | * Remove bus_{disable,enable}_intr(), it was not generic enough |
| 514 | for our needs. |
| 515 | * Remove all spl*() procedures and convert all uses to critical |
| 516 | sections. |
| 517 | * Do not try to completely halt all cpus when panic()ing as this |
| 518 | will likely leave the machine in a state that prevents it from |
| 519 | being able to do a dump. |
| 520 | * Try to unwind certain conditions when panic()ing from a trap |
| 521 | in order to give the machine a better chance to dump its core. |
| 522 | * A number of malloc()'s using M_NOWAIT really needed to be |
| 523 | using M_WAITOK. |
| 524 | * Attempt to avoid a livelocked USB interrupt during boot by |
| 525 | delaying the enablement of the EHCI interrupt until after all |
| 526 | companion controllers have been attached. |
| 527 | * Reimplement the kernel tracepoint facility (KTR) to greatly |
| 528 | reduce the complexity of the API as well as remove all hardwired |
| 529 | flags and values. In addition, record two levels of call |
| 530 | backtrace for each entry, if enabled. |
| 531 | * Beef up ktrdump to display symbolic results when possible. |
| 532 | * Beef up the slab allocator build with INVARINTS by adding a |
| 533 | bitmap to detect duplicate frees and such. |
| 534 | * Remove the 16 bit count limit for file descriptors. |
| 535 | * Replace the file descriptor allocator with an O(log N) |
| 536 | full-on in-place binary search tree. |
| 537 | * Allow the initial stack pointer for a use process to be |
| 538 | randomized. |
| 539 | * Fix numerous scheduling issues that could cause the scheduler |
| 540 | to lose track of a reschedule request, resulting in poor |
| 541 | interactive performance. Rewrite the interactive/batch |
| 542 | heuristic. |
| 543 | * Begin to implement a management system to allow multiple |
| 544 | userland schedulers to be configured in a system. |
| 545 | * Add rm -I and add an alias for interactive shells to use it |
| 546 | by default. -I is a less invasive -i. |
| 547 | * Fix a bug in the pipe code that was not handling kernel-space |
| 548 | writes correctly. Such writes can occur whenever the kernel |
| 549 | writes KVM-referenced data to a descriptor, such as that |
| 550 | journaling code might do. |
| 551 | * Fix many issues with the high level filesystem journaling code. |
| 552 | High level journal records are now considered fairly solid. |
| 553 | * Implement the transactional features of the high level journaling |
| 554 | subsystem by allowing a journaling record to be written prior to |
| 555 | the VFS operation being executed, then aborted if the VFS operation |
| 556 | fails. |
| 557 | * Implement UNDO records for most journaling transaction types. |
| 558 | * Implement the journaling code's full-duplex ack protocol feature |
| 559 | which allows journals to be broken and restarted without losing |
| 560 | data. |
| 561 | * Implement a stat-visible FSMID (filesystem modification id). This |
| 562 | identifier changes whenever any modifying operation on the file |
| 563 | or directory occurs, and for directories this identifier also |
| 564 | changes if anything in the sub-tree under the directory is |
| 565 | modified (recursively). The FSMID is synthesized for filesystems |
| 566 | which do not implement it directly in order to guarantee its |
| 567 | usefulness for at least a subset of operations. |
| 568 | * Implement pesistent storage of the FSMID for UFS. |
| 569 | * Implement shutdown() support for pipes. |
| 570 | * Implement a low level spinlock facility. Basically the |
| 571 | implementation gives us an MP-safe critical section type of |
| 572 | vehicle. However, being a spinlock the facility may only be |
| 573 | used for very short sections of code. |
| 574 | * Fix a bug with USB<->CAM communication for USB mass storage |
| 575 | devices. |
| 576 | * Fix numerous bugs in USB, primarily EHCI. |
| 577 | * Fix multiple panics when a fatal trap occurs from an IPI or |
| 578 | FAST interrupt. Interlock panics on multiple cpus so only the |
| 579 | first is recognized as the 'real' panic. |
| 580 | * Add a large number of assertions to the scheduler and interrupt |
| 581 | subsystems. |
| 582 | * Fix a critical IPI messaging bug (SMP only). |
| 583 | * Do not compile the kernel with the stack protector. The stack |
| 584 | protector generates weird incorrect or unexpected code in some |
| 585 | cases which interfere with the C<->assembly interactions in the |
| 586 | kernel build |
| 587 | * Various bug fixes to softupdates. |
| 588 | * Fix a bitmap scanning bug in UFS which could sometimes result |
| 589 | in a sanity check panic, but no data corruption. |
| 590 | * Fix a deadlock in UFS's ffs_balloc() related to an incorrect |
| 591 | buffer locking order. |
| 592 | * Continued work on the buffer cache. |
| 593 | * Separate out APIC and ICU interrupt management. |
| 594 | * Rewrite the interrupt setup code. |
| 595 | * Major rewriting of the VFS directory scanning code. Add a new |
| 596 | function vop_write_dirent() to create the dirent for return to |
| 597 | userland. The new API is mandatory and filesystem code (not |
| 598 | even UFS) may not make assumptions about the size of the |
| 599 | userland-returned dirent. |
| 600 | * Major cleanup of the device identification method. |
| 601 | * Lots of driver updates. |
| 602 | * ANSIfy a great deal more of the codebase. |
| 603 | * Remove the now obsolete smp_rendezvous() mechanism. |
| 604 | * Compile up both the TFTP and the NFS PXE bootp code rather |
| 605 | then the (previous) make.conf option to select one or the other. |
| 606 | * Convert the lockmgr interlock from a token to a spinlock, also |
| 607 | incidently fixing an issue where non-blocking locks would |
| 608 | still potentially issue a thread switch. |
| 609 | * Fix bugs in the interrupt livelock code. |
| 610 | * Rewrite the code handling stopped user processes. |
| 611 | * Rewrite tsleep()/wakeup() to be per-cpu and MPSAFE. Reorganize |
| 612 | the process states (p_stat), removing a number of states but |
| 613 | resynthesizing them in eproc for 'ps'. |
| 614 | * Integrate the new if_bridge code from Open/Net/FreeBSD. |
| 615 | * Add an emergency interrupt polling feature that can be used |
| 616 | to get an otherwise non-working system working. |
| 617 | |
| 618 | |
| 619 | |
| 620 | ## Thu 7 April 2005 |
| 621 | |
| 622 | * Fix numerous issues in the new namecache code. The new code is |
| 623 | now considered to be solid (Matt). |
| 624 | * Fix numerous issues in the NFS code related to cache timeouts |
| 625 | not working properly, truncate operations not working properly |
| 626 | in certain circumstances, and TCP disconnections due to |
| 627 | races in accessing the streamed data. NFS was also not properly |
| 628 | setting TCP_NODELAY which resulted in poor performance over |
| 629 | TCP connections (Matt). |
| 630 | * Split out kernel information access abstraction into libkcore |
| 631 | and libkinfo (joerg). |
| 632 | * Optimize the interrupt processing code a bit (Matt). |
| 633 | * Significant progress in the journaling layer has been made, |
| 634 | but it isn't ready for production use yet. The journaling |
| 635 | layer is now capable of encoding a forward journaling stream |
| 636 | (the undo data is not yet being encoded). Still TODO: undo |
| 637 | data, two-way transaction acknowledgement protocol, and |
| 638 | emergency swap backing to allow system operation to proceed |
| 639 | in the event of a long-term journaling stream stall. (Matt) |
| 640 | * Fix numerous issues related to SMP-distributed wildcard |
| 641 | listen sockets for TCP. (Jeff, Matt) |
| 642 | * Major cleanup of the route table code in preparation for |
| 643 | SMP replication work (Jeff) |
| 644 | * ALTQ Integration (Joerg) |
| 645 | * Fix MTU discovery which appears to have been broken |
| 646 | forever (Jeff). |
| 647 | * Miscellanious driver updates. (Various) |
| 648 | * Miscellanious ACPI updates. |
| 649 | * Fix a security issue with sendfile() (Various) |
| 650 | * Lots of work on the make program (Max) |
| 651 | * Add TLS support calls to the kernel to create segments suitable |
| 652 | for loading into %gs. (Matt, David Xu) |
| 653 | * Add TLS support to the dynamic linker (David Xu, Joerg) |
| 654 | * Add kernel support for mmap-based userland mutexes |
| 655 | * Continuing work on a new threading library (David Xu) |
| 656 | * Add jail support for varsyms (Joerg) |
| 657 | * Incorporate the Minix MINED editor into the /bin build for use |
| 658 | as an emergency editor while in single-user. |
| 659 | * Fix an issue with PCMCIA card removal. |
| 660 | * Replace the VM map lookup data structures with a red-black tree. |
| 661 | * Fix a potentially serious issue with inodes being reused before |
| 662 | their associated vnodes have been entirely recycled. This also |
| 663 | prevents unnecessary stalls on recycle flushing against new |
| 664 | file creation that would otherwise have to block waiting for |
| 665 | the inode it chose to finish cycling. |
| 666 | * Fix some minor issues with /dev/tty operations. |
| 667 | * Fix an issue with the vnode recycler. Certain types of file |
| 668 | extractions could cause it to stop oprating due to not being |
| 669 | able to clean out the namecache topology. This most often |
| 670 | occured when extracting archives with a large number of |
| 671 | hard links. |
| 672 | * Fix two issues that caused the system's time of day tracking to |
| 673 | either stop operating or operate incorrectly. |
| 674 | * Enhance the checkpointing code to save and restore the |
| 675 | signal mask. |
| 676 | * Major work on the XIO and MSFBUF infrastructures as we begin to |
| 677 | use them in the kernel more. (Hiten, Matt) |
| 678 | * Implement CLOCK_MONOTONIC for the clock_*() system calls. |
| 679 | * Fix a bug in the TCP limited transmit code. |
| 680 | * Fix a crash that sometimes occurs when using the firewire |
| 681 | console. |
| 682 | |
| 683 | |
| 684 | |
| 685 | |
| 686 | ## Mon 20 December 2004 |
| 687 | |
| 688 | * The old timeout() API has been completely ripped out and replaced |
| 689 | with the newer callout_*() API. |
| 690 | * USB support has been synchronized with FreeBSD and NetBSD |
| 691 | * USB keyboard detachment and reattachment while X is active no |
| 692 | longer messes up the translation mode. |
| 693 | * Fix a keyboard lockup issue (the new callout code was not being |
| 694 | properly called in an ATKBD hack to deal with lost interrupts). |
| 695 | * **TCP SACK support is now considered production stable (Jeff).** |
| 696 | * A TCP connection closing bug has been fixed, related to changes |
| 697 | we've made to the TCPS state values. |
| 698 | * **Expand TCP's header prediction case to handle common |
| 699 | window updates (Jeff), greatly improving cpu efficiency.** |
| 700 | * **Implement tail-append to sockbufs for the TCP stack, greatly |
| 701 | improving cpu efficiencies when dealing with large TCP buffers.** |
| 702 | |
| 703 | * Lots of miscellanious network layer cleanups (Joerg). |
| 704 | * Fix an IPv6 pcb replication issue that was creating problems |
| 705 | with e.g. Apache-2.0. |
| 706 | * kernel event logging ported from FreeBSD (eirikn). |
| 707 | * DCONS (console over firewire) support added (simokawa/from FreeBSD) |
| 708 | * Additional GigE drivers added. |
| 709 | * Major VFS messaging and interfacing progress. The old namei() |
| 710 | and lookup() API has been completely removed. All high level |
| 711 | layers now use the new API and run through a compatibility layer |
| 712 | to talk to VFSs which still for the most part implement the old |
| 713 | VOP calls. Use locked namespaces to protect RENAME, REMOVE, |
| 714 | MKDIR, and other calls rather then depending on locked vnodes |
| 715 | for those protections. |
| 716 | * More VFS work. Keep track of the current directory with a |
| 717 | namecache pointer rather then a vnode pointer. |
| 718 | * More VFS work. Rewrite the vnode interlock code during |
| 719 | deactivation and disposal. Begin consolidating v_lock. |
| 720 | * Adjust the boot code to operate more deterministically by always |
| 721 | using EDD (linear block number) mode first, only falling back |
| 722 | to CHS if EDD fails. Before it would try to use CHS for |
| 723 | cylinders < 1024, resulting in non-deterministic operation on |
| 724 | modern machines. |
| 725 | * Separate out loader configuration files for BOOTP vs non-BOOTP |
| 726 | boots. |
| 727 | * IPSEC code moved to netproto/ipsec, update, and cleanups |
| 728 | (Pawel Biernacki). |
| 729 | * Minor fixes to PPP. |
| 730 | * Performance cleanup of if_em. Fix alignment requirements to |
| 731 | reduce instances where bounce buffers are allocated (from FreeBSD). |
| 732 | * Kernels built with debug info are now installed with debug info, |
| 733 | greatly improving normal enduser's ability to provide useable |
| 734 | bug reports. The backup copy of the kernel is stripped when |
| 735 | the copy is made. |
| 736 | * **A number of bug fixes to the VM system seem to have fixed the few |
| 737 | remaining long-term panics in DragonFly. In particular, a very |
| 738 | serious bug in contigmalloc() inherited from FreeBSD-4.x has been |
| 739 | fixed We now consider DragonFly as stable as FreeBSD-4.x.** |
| 740 | |
| 741 | * Many minor driver bug fixes here and there, including one to the |
| 742 | serial driver which was responsible for machine lockups in |
| 743 | certain cases. |
| 744 | * **Major expansion of the checkpoint code API. You can now |
| 745 | re-checkpoint programs that have been checkpoint-restored. |
| 746 | The system call for checkpointing and checkpoint restore |
| 747 | functions is now official. Certain VM area issues have been |
| 748 | fixed. And it is now possible (and easy!) to write |
| 749 | checkpoint-aware programs.** |
| 750 | * Abstract kernel structure access via libkinfo (joerg). |
| 751 | * Fix a number of timer issues related to the 8254, sleep/wakeup, |
| 752 | and recovery from clock jumps due to high latencies. |
| 753 | * Do better ESTALE checking for NFS clients to reduce instances |
| 754 | where ESTALE makes it all the way back to the application layer. |
| 755 | * Improved polling support for UHCI USB (drhodus). |
| 756 | * Fix /boot/loader's handling of extended DOS partitions. There was |
| 757 | an off-by-one issue that prevented the boot loader from passing |
| 758 | the proper slice number to the kernel in certain cases (walt). |
| 759 | * Integration of PF as third firewall (joerg, corecode, Devon O'Dell, |
| 760 | from FreeBSD/OpenBSD) |
| 761 | |
| 762 | |
| 763 | ## Sat 18 September 2004 |
| 764 | |
| 765 | * DragonFly has adopted the 3-clause BSD license as its official |
| 766 | license. |
| 767 | * NFS - increase the size of the nfsheur hash table as per a |
| 768 | Freenix track paper. nfsheur is used for sequential I/O |
| 769 | heuristic in NFS. The increase greatly improves clustering |
| 770 | under parallel NFS loads. |
| 771 | * More VFS work: make vnode locks mandatory, get rid of nolock |
| 772 | kludges in NFS, procfs, nullfs, and many other filesystems. |
| 773 | Remove the vnode_if.m dynamic dispatch algorithms and replace |
| 774 | with a fixed structure (in preparation for upcoming VFS work). |
| 775 | Rewrite the VOP table parsing code. Redo vnode/inode hash table |
| 776 | interactions to close race conditions (Matt). |
| 777 | * Reorganize the boot code to consolidate all fixed ORG directives |
| 778 | and other dependancies into a single header file, allowing us |
| 779 | to re position the boot code and eventually (not yet) move it |
| 780 | out of low BIOS memory. Change the way the BTX code clears BSS |
| 781 | |
| 782 | to make it more deterministic and more gcc3 compatible. |
| 783 | * A major cleanup of ipfilter has been done (Hiten). |
| 784 | * Fix a very old but serious bug in the VM system that could result |
| 785 | in corrupt user memory when MADV_FREE is used (from Alan Cox). |
| 786 | * Rewrite most of the MBUF allocator and support code. Get rid |
| 787 | of mb_map and back the mbuf allocator with malloc. Get rid of |
| 788 | the old-style m_ext support and replace with new style m_ext |
| 789 | support (which is somewhat different then FreeBSD's new code). |
| 790 | Cleanup sendfile() to use the new m_ext callback scheme. |
| 791 | * Lots minor/major bug fixes, cleanups, new driver support, etc. |
| 792 | * More GCC3 work. The system mostly compiles and runs GCC3 builds |
| 793 | but the boot/loader code still has some issues (Various people). |
| 794 | * Work on the userland schedule. Introduce an 'interactivity' |
| 795 | measure in an attempt to do a better job assigning time slices. |
| 796 | Fix some scheduler interaction bugs which were sometimes resulting |
| 797 | in processes being given a full 1/10 second time slice when they |
| 798 | shouldn't be. |
| 799 | * A major import of the FreeBSD-5 802_11 infrastructure has been |
| 800 | accomplished (Joerg). |
| 801 | * NDis has been ported from FreeBSD, giving DragonFly access to |
| 802 | many more 802.11 devices via windoz device drivers (Matt). |
| 803 | * Add thermal control circuit support (Asmodai). |
| 804 | * Generally add throttling support to the system. |
| 805 | * **Add TCP SACK support (Jeffrey Hsu). This is still considered |
| 806 | experimental.** |
| 807 | |
| 808 | * Make the syncache per-cpu and dispatch syncache timer events |
| 809 | via LWKT messages directly to the appropriate protocol thread |
| 810 | (Jeffrey Hsu). This removes all race conditions from the syncache |
| 811 | code and makes it 95% MP safe. |
| 812 | * **Greatly reduce the number of ACKs generated on a TCP connection |
| 813 | going full-out over a GigE (or other fast) interface by delaying |
| 814 | the sending of the ACK until all protocol stack packets have been |
| 815 | processed. Since GiGE interfaces tend to aggregate 8-12(+) |
| 816 | received packets per interrupt, this can cut the ACK rate by 75% |
| 817 | (one ack per 8-12 packets instead of one ack per 2 packets), and |
| 818 | it does it without violating the TCP spec. The code takes |
| 819 | advantage of the protocol thread abstraction used to process |
| 820 | TCP packets. (Matt)** |
| 821 | * **Greatly reduce the number of pure window updates that occur over |
| 822 | a high speed (typ GigE) TCP connection by recognizing that a |
| 823 | pure window update is not always necessary when userland has |
| 824 | drained the TCP socket buffer. (Jeffrey Hsu)** |
| 825 | * Rewrite the callout_*() core infrastructure and rip out the old |
| 826 | [un]timeout() API (saving ~800K+ of KVM in the process). The new |
| 827 | callout infrastructure uses a DragonFly-friendly per-cpu |
| 828 | implementation and is able to guarantee that callouts will occur |
| 829 | on the same cpu they were registered on, a feature that the TCP |
| 830 | protocol stack threads are going to soon take major advantage of. |
| 831 | * Cleanup the link layer broadcast address, consolidating many |
| 832 | separate implementations into one ifnet-based implementation |
| 833 | (Joerg). |
| 834 | * BUF/BIO progress - start working the XIO vm_page mapping code |
| 835 | into the system buffer cache (Hiten). Remove b_caller2 and |
| 836 | b_driver2 field members from the BUF structure (Hiten) (generally |
| 837 | we are trying to remove the non-recursive-friendly driver |
| 838 | specific fields from struct buf and friends). |
| 839 | * The release went well! There were a few gotchas, such as trying |
| 840 | to run dual console output to the serial port causing problems on |
| 841 | laptops which did not have serial ports. A bug in the installer |
| 842 | was serious enough to have to go to an '1.0A' release a day or two |
| 843 | after the 1.0 release. But, generally speaking, the release did its |
| 844 | job! |
| 845 | * More USB fixes. Clean up some timer races in USB/CAM interactions |
| 846 | related to pulling out USB mass storage cards. Fix a serious bug |
| 847 | that could lead to lost transactions and create confusion between |
| 848 | the USB code and the device. |
| 849 | * Async syscall work: clean up the sendsys2() syscall API into |
| 850 | something that's a bit more reasonable (Eirik Nygaard) |
| 851 | * Add a generic framework for IOCTL mapping (Simon). |
| 852 | * Add VESA mode support, giving us access to bitmapped VESA video |
| 853 | modes (Sascha Wildner). |
| 854 | * Fix USB keyboard support by giving the USB keyboard preference |
| 855 | even if a normal keyboard is detected earlier in the boot process. |
| 856 | This is necessary due to hardware/firmware level PS/2 keyboard |
| 857 | emulation that many USB chipsets and BIOSes offer. |
| 858 | * **Installer Updated: Lots of bug fixes have been made.** |
| 859 | |
| 860 | * Stability: Spend two weeks stabilizing recent work in preparation |
| 861 | for another big push. |
| 862 | |
| 863 | |
| 864 | ## Sun 11 July 2004 |
| 865 | |
| 866 | * Master ISO for the 1.0-RELEASE is now on the FTP site, we |
| 867 | release on Monday 12-July-2004. |
| 868 | * **Major revamping of the boot code. Support dual-console mode |
| 869 | (video and serial). Properly detect missing serial ports |
| 870 | (common for laptops). Initialize the serial port to 96008N1.** |
| 871 | * Bring ACPICA5 uptodate and integrate it into the build as a |
| 872 | KLD, just like FreeBSD-5. Fix additional issues as well. |
| 873 | Nearly all of this work was done by YONETANI Tomokazu. Use |
| 874 | the latest INTEL code (20040527). This greatly improves |
| 875 | our laptop support. |
| 876 | * Make the kernel check both CDRom drives for a root filesystem |
| 877 | when booted with -C, which allows the boot CD to work in either |
| 878 | drive on systems with two drives. |
| 879 | * **Integrate the DragonFly Installer into the release build. The |
| 880 | DragonFly Installer is a from-scratch design by Chris Pressey, |
| 881 | Devon O'Dell, Eirik Nygaard, Hiten Pandya & GeekGod (aka |
| 882 | Scott Ullrich). The design incorporates a worker backend and |
| 883 | multiply targetable frontends. Currently the console frontend |
| 884 | is enabled, but there is also a CGI/WWW frontend which is on the |
| 885 | CD but still considered highly experimental.** |
| 886 | |
| 887 | * Fix a bug in the polling backoff code for the VR device |
| 888 | * Implement interrupt livelock detection. When an interrupt |
| 889 | livelock is detected the interrupt thread automatically |
| 890 | throttles itself to a (sysctl settable) rate. When the interrupt |
| 891 | rate drops to half the throttle limit the throttling is removed. |
| 892 | This greatly improves debugability, especially on laptops with |
| 893 | misrouted interrupts. While it doesn't necessarily fix the |
| 894 | broken devices it does tend to allow the system to continue to |
| 895 | operate with those devices that *do* still work. |
| 896 | * Properly probe for the existance of the serial port in the |
| 897 | kernel, which allows us to run a getty on ttyd0 by default for |
| 898 | the release CD. Prior to this fix attempting to use ttyd0 would |
| 899 | result in a system deadlock. |
| 900 | * Bring in some pccard driver improvements from FreeBSD, including |
| 901 | increasing the CIS area buffer from 1K to 4K and properly |
| 902 | range-checking the CIS parser (which avoids panics and crashes). |
| 903 | * Update our DragonFly Copyright and update date specifications |
| 904 | on a number of copyrights. |
| 905 | * Add support for randomized ephermal source ports. |
| 906 | * Do some network driver cleanups.. basically move some common code |
| 907 | out of the driver and into ether_ifattach() (work by Joerg). |
| 908 | * Try to be more compatible with laptop touchpads whose aux ports |
| 909 | return normally illegal values (Eirik Nygaard). |
| 910 | * Add common functions for computing the ethernet CRC, work |
| 911 | by Joerg, taken from NetBSD. |
| 912 | * Add support for additional AGP bridges - taken from FreeBSD-5. |
| 913 | * Add support for the 're' network device. |
| 914 | * Bring OHCI and EHCI up-to-date with NetBSD. |
| 915 | * Miscellaneous driver fixes to ips, usb (ugen), sound support. |
| 916 | * Miscellaneous Linux emulation work, by David Rhodus, taken |
| 917 | from FreeBSD-SA-04:13.linux. |
| 918 | |
| 919 | |
| 920 | ## Sun 27 June 2004 |
| 921 | |
| 922 | * We are going to release 1.0RC1 tonight. |
| 923 | * Implement interrupt livelock detection and rate limiting. It's |
| 924 | still a bit raw, but it does the job (easily testable by plugging |
| 925 | and unplugging cardbus cards at a high rate). The intent is to |
| 926 | try to make the system more survivable from interrupt routing and |
| 927 | other boot-time configuration issues, and badly written drivers. |
| 928 | * Implement an emergency polling mode for the VR device if its |
| 929 | interrupt does not appear to be working. |
| 930 | * Implement dual console (screen and serial port) support by |
| 931 | default for boot2 and the loader. |
| 932 | |
| 933 | |
| 934 | ## Mon 21 June 2004 |
| 935 | |
| 936 | * Joerg has brought GCC-3.4-20040618 in and it is now hooked up |
| 937 | to the build. GCC-3.3 will soon be removed. To use GCC-3.4 |
| 938 | 'setenv CCVER gcc34'. |
| 939 | * The world and kernel now builds with gcc-3.4. The kernel builds |
| 940 | and runs with gcc-3.4 -O3, but this is not an officially supported |
| 941 | configuration. |
| 942 | * More M_NOWAIT -> M_INTWAIT work. Most of the drivers inherited |
| 943 | from FreeBSD make aweful assumptions about M_NOWAIT mallocs |
| 944 | which cause them to break under DragonFly. |
| 945 | * /usr/bin/ps now reports system thread startup times as the boot |
| 946 | time instead of as Jan-1-1970. The p_start field in pstats has |
| 947 | been moved to the thread structure so threads can have a start |
| 948 | time in the future - Hiten. |
| 949 | * Zero the itimers on fork() - Hiten / SUSv3 compliance. |
| 950 | * MMX/XMM kernel optimizations are now on by default, greatly |
| 951 | improving bcopy/bzero/copyin/copyout performance for large (>4K) |
| 952 | buffers. |
| 953 | * A number of revoke() related panics have been fixed, in particular |
| 954 | related to 'script' and other pty-using programs. |
| 955 | * The initial MSFBUF scheme (multi-page cached linear buffers) |
| 956 | has been committed and is now used for NFS requests. This is |
| 957 | part of the continuing work to eventually make I/O devices |
| 958 | responsible for any KVM mappings (because most just set up DMA |
| 959 | and don't actually have to make any) - Hiten. |
| 960 | * Continuing ANSIfication work by several people - Chris Pressey. |
| 961 | * Continuing work on the LWKT messaging system. A number of bugs |
| 962 | in the lwkt_abortmsg() path have been fixed. |
| 963 | * The load average is now calculated properly. Thread sleeps were |
| 964 | not being accounted for properly. |
| 965 | * Bring in a number of changes from FreeBSD-5: try the elf image |
| 966 | activator first. |
| 967 | * Fix a number of serious ref-counting and ref holding bugs in |
| 968 | procfs as part of our use of XIO in procfs - GeekGod and Matt |
| 969 | * Use network predicates for accept() and connect() (using the |
| 970 | new message abort functionality to handle PCATCH) - Jeff. |
| 971 | * Convert netproto/ns to use the pr_usrreqs structure. |
| 972 | * Implement markers for traversing PCB lists to fix concurrency |
| 973 | problems with sysctl. |
| 974 | * Implement a lwkt_setcpu() API function which moves a thread |
| 975 | to a particular cpu. This will be used by sysctl to iterate |
| 976 | across cpus when collecting per-cpu structural information. |
| 977 | * Redo netstat to properly iterate the pcb's across all cpus. |
| 978 | * Significant mbuf cleanup - dtom() has now been removed, and |
| 979 | a normal malloc() is used for PCB allocations and in other places |
| 980 | where mbufs were being abused for structural allocations. |
| 981 | * dup_sockaddr() now unconditionally uses M_INTWAIT instead of |
| 982 | conditionally using M_NOWAIT, making it more reliable. |
| 983 | * Fix a number of USB device ref counting issues and fix issues |
| 984 | related to UMASS detaching from CAM while CAM is still active, |
| 985 | and vice-versa. |
| 986 | * Optimize kern_getcwd() some to avoid a string shifting bcopy(). |
| 987 | * Continued work on asynch syscalls - track pending system calls |
| 988 | and make exit1() wait for them (abort support will be forthcoming). |
| 989 | * **Add a negative lookup cache for NFS.** This makes a huge |
| 990 | difference for things like buildworlds where /usr/src is NFS |
| 991 | mounted, reducing (post cached) network bandwidth to 1/10 what |
| 992 | it was before. |
| 993 | * Add the '-l' option to the 'resident' command, listing all |
| 994 | residented programs and their full paths (if available). -Hiten. |
| 995 | * **Implement the 'rconfig' utility (see the manual page)** - for |
| 996 | automatic search/config-script downloading and execution, which |
| 997 | makes installing a new DFly box from CDBoot a whole lot easier |
| 998 | when you are in a multi-machine environment. |
| 999 | * Revamp the BIO b_dev assignment and revamp the 'disk' layer. |
| 1000 | Instead of overloading the raw disk device the disk layer now |
| 1001 | creates a new device on top of the raw disk device and takes over |
| 1002 | the (user accessible) CDEV (major,minor). The disk layer does |
| 1003 | its work and reassigned b_dev to the raw device. biodone() now |
| 1004 | unconditionally setes b_dev to NODEV and all I/O ops are required |
| 1005 | to initialize b_dev prior to initiating the op. This is |
| 1006 | precursor work to our DEV layering and messaging goal. |
| 1007 | * Fix the rootfs search to specify the correct unit number rather |
| 1008 | then using unit 0, because CDEVSW lookups now require a valid |
| 1009 | minor number (CDEVSW's are now registered with a minor number |
| 1010 | range and the same major number can be overloaded as long as the |
| 1011 | minor ranges do not conflict). Fix by Hiroki Sato. |
| 1012 | * Fix a wiring related page table memory leak in the VM system. |
| 1013 | * Fix a number of ^T related panics. |
| 1014 | * Properly ref-count all devices. |
| 1015 | |
| 1016 | |
| 1017 | |
| 1018 | ## Sun 2 May 2004 |
| 1019 | |
| 1020 | * NEWTOKENs replace old tokens. The new token abstraction provides |
| 1021 | a serialization mechanism that persists across blocking conditions. |
| 1022 | This is not a lock, but more like an MP-capable SPL, in that |
| 1023 | if you block you will lose serialization but then regain it when |
| 1024 | you wakeup again. This means that newtokens can be used for |
| 1025 | serialization without having to make lower level subsystems |
| 1026 | aware of tokens held by higher level subsystems in the call |
| 1027 | stack. This represents a huge simplification over the FreeBSD-5 |
| 1028 | mutex model. |
| 1029 | * Support added for the Silicon Image SATA controller. |
| 1030 | * DragonFly now supports 16 partitions per slice (up from 8). |
| 1031 | * Wildcarded sockets have been split from the TCP/UDP connection |
| 1032 | hash table, and the listen table is now replicated across |
| 1033 | cpus for lockless access. |
| 1034 | * UDP sendto() without a connect no longer needs to make a |
| 1035 | temporary connect inside the kernel, greatly improving UDP |
| 1036 | performance in this case. |
| 1037 | * NFS performance has been greatly improved. |
| 1038 | * Fix some major bugs in the USB/SIM code, greatly improving |
| 1039 | the reliability of USB disk keys and related devices. |
| 1040 | * NEWCARD has been brought in from FreeBSD-5. |
| 1041 | * A bunch of userland scheduler performance issues have been fixed. |
| 1042 | * Major syscall procedural separation has been completed, separating |
| 1043 | the user interfacing portion of a syscall from the in-kernel |
| 1044 | core support, allowing the core support functions to be directly |
| 1045 | called from emulation code instead of using the stackgap junk. |
| 1046 | * An optimized MMX and XMM kernel bcopy has been implemented and |
| 1047 | tested. Most of i386/i386/support.s has been rewritten and a |
| 1048 | number of FP races in that and npxdna() have been closed. |
| 1049 | * Brought in the SFBUF facility from FreeBSD-5, including all of |
| 1050 | Alan Cox's (the FBsd Alan Cox) improvements, plus additional |
| 1051 | improvements for cpu-localized invlpg calls (and the ability |
| 1052 | to avoid such calls when they aren't needed). |
| 1053 | * A major PIPE code revamp has occured, augmenting the SFBUF |
| 1054 | direct-copy feature with a linear map. Peak standard pipe |
| 1055 | throughput with 32KB buffers on an AMD64 3200+ now exceeds |
| 1056 | 4GBytes/sec. |
| 1057 | * Implement XIO, which is a multi-page buffer wrapper for SFBUFs |
| 1058 | and will eventually replace linear buffer management in the |
| 1059 | buffer cache as well as provide linear buffer mappings for other |
| 1060 | parts of the system. |
| 1061 | * Added a localized cpu pmap_qenter() called pmap_qenter2() which |
| 1062 | is capable of maintaining a cpumask, to avoid unnecessary invlpg's |
| 1063 | on target-side linear maps. It is currently used by the PIPE |
| 1064 | code and the CAPS code. |
| 1065 | * Joerg has brought in most of the KOBJ extensions from FreeBSD-5. |
| 1066 | * Major continuing work by Jeff on the threading and partitioning |
| 1067 | of the network stack. Nearly the whole stack is now |
| 1068 | theoretically MP safe, with only a few niggling issues before we |
| 1069 | can actually start turning off the MP lock. |
| 1070 | * The last major element of the LWKT messaging system, |
| 1071 | lwkt_abortmsg() support, is now in place. Also it is now possible |
| 1072 | to wait on a port with PCATCH. |
| 1073 | * Hiten has revamped the TCP protocol statistics, making them |
| 1074 | per-cpu along the same lines that we have made vmstats per-cpu. |
| 1075 | * propolice has been turned on by default in GCC3. |
| 1076 | * CAPS (DragonFly userland IPC messaging) has been revamped to |
| 1077 | use SFBUFs. |
| 1078 | * acpica5 now compiles, still needs testing. |
| 1079 | * SYSTIMERS added, replacing the original hardclock(), statclock(), |
| 1080 | and other clocks, and is now used as a basis for timing in the |
| 1081 | system. SYSTIMERS provide a fine-grained, MP-capable, |
| 1082 | cpu-localizable and distributable timer interrupt abstraction. |
| 1083 | * Fix RTC write-back issues that were preventing 'ntpdate' changes |
| 1084 | from being written to the RTC in certain cases. |
| 1085 | * Finish most of the namecache topology work. We no longer need |
| 1086 | the v_dd and v_ddid junk. The namecache topology is almost |
| 1087 | ready for the next major step, which will be namespace locking |
| 1088 | via namecache rather then via vnode locks. |
| 1089 | * Add ENOENT caching for NFS, greatly reducing the network overhead |
| 1090 | (by a factor of 5x!!!) required to support things like |
| 1091 | buildworld's using an NFS-mounted /usr/src. |
| 1092 | * Jeff has added predicate messaging requests to the network |
| 1093 | subsystem, which allows us to convert situations which normally |
| 1094 | block, like connect(), to use LWKT messages. |
| 1095 | * Lots of style cleanups, primarily by Chris Pressey. |
| 1096 | |
| 1097 | |
| 1098 | |
| 1099 | ## Sun 15 February 2004 |
| 1100 | |
| 1101 | * Newcard is being integrated. |
| 1102 | * A longstanding bug in PCI bus assignments which affects larger |
| 1103 | servers has been fixed. |
| 1104 | * The IP checksum code has been rewritten and most of it has been |
| 1105 | moved to machine-independent sections. |
| 1106 | * A general machine-independent CPU synchronization and rendezvous |
| 1107 | API has been implemented. Older hardwired IPIs are slowly being |
| 1108 | moved to the new API. |
| 1109 | |
| 1110 | * A new 'SysTimer' API has been built which is both MP capable |
| 1111 | and fine-grained. 8254 Timer 0 is now being used for fine-grained |
| 1112 | timing, while Timer 2 is being used for timebase. Various |
| 1113 | hardwired clock distribution code is being slowly moved to the |
| 1114 | new API. hardclock and statclock have already been moved. |
| 1115 | * A long standing bug in the NTP synchronization code has been fixed. |
| 1116 | NTPD should now lock much more quickly. |
| 1117 | * Clock interrupt distribution has been rewritten. Along with this, |
| 1118 | IPI messaging now has the ability to pass an interrupt frame |
| 1119 | pointer to the target function. Most of the old hardwired |
| 1120 | clock distribution code has been ripped out. |
| 1121 | * nanosleep() is now a fine-grained sleep. After all, what's the |
| 1122 | point of having a nanosleep() system call which is only capable |
| 1123 | of tick granularity? |
| 1124 | * Critical fixes from FreeBSD RELENG_4 integrated by Hiten Pandya. |
| 1125 | * Firewire subsystem updated by a patchset from Hidetoshi Shimokawa. |
| 1126 | |
| 1127 | * USB subsystem has been synced with FreeBSD 5 and NetBSD. |
| 1128 | * GCC 3.3.3 and Binutils 2.14 have been integrated into base. |
| 1129 | * An aggregated Client/Server Directory Services syscall API has |
| 1130 | been completed. |
| 1131 | * An amiga-style 'resident' utility program + kernel support has |
| 1132 | been implemented, and prelinking support has been removed |
| 1133 | (because the resident utility is much better). You can make any |
| 1134 | dynamically loaded ELF binary resident with this utility. The |
| 1135 | system will load the program and do all shared library mappings |
| 1136 | and relocations, then will snapshot the vmspace. All future |
| 1137 | executions of the program simply make a copy of the saved |
| 1138 | vmspace and skip almost right to main(). Kernel overhead is |
| 1139 | fairly low, also. It still isn't as fast as a static binary |
| 1140 | but it is considerably faster then non-resident dynamic binaries. |
| 1141 | |
| 1142 | |
| 1143 | ## Mon 1 December 2003 |
| 1144 | |
| 1145 | A great deal of new infrastructure is starting to come to fruition. |
| 1146 | |
| 1147 | |
| 1148 | * We have a new CD release framework (/usr/src/nrelease) in. |
| 1149 | Development on the new framework is proceeding. Basically the |
| 1150 | framework is based on a fully functioning live CD system |
| 1151 | and will allow us to build a new installation infrastructure |
| 1152 | that is capable of leveraging all the features available in |
| 1153 | a fully functioning system rather then being forced to use |
| 1154 | a lobotomized set. |
| 1155 | * A new IPC framework to reliably handle things like password |
| 1156 | file lookups is proceeding. This framework is intended to |
| 1157 | remove the need for DLL or statically-linked PAM/NSS and at |
| 1158 | the same time make maintainance and upgrades easier and more |
| 1159 | portable. |
| 1160 | * The FreeBSD-5 boot infrastructure has been ported and is now |
| 1161 | the default. |
| 1162 | * RCNG from FreeBSD-5 has been ported and is now the default. |
| 1163 | * Work is proceeding on bringing in ATAng from FreeBSD-4, with |
| 1164 | additional modifications required to guarantee I/O in low |
| 1165 | memory situations. That is, it isn't going to be a straight |
| 1166 | port. The original ATA code from FreeBSD-4.8, which we call |
| 1167 | ATAold, has been given interim fixes to deal with the low memory |
| 1168 | and PIO backoff issues so we don't have to rush ATAng. |
| 1169 | |
| 1170 | |
| 1171 | ## Sat 18 October 2003 |
| 1172 | |
| 1173 | Wow, October already! Good progress is being made on several fronts. |
| 1174 | |
| 1175 | * K&R function removal. |
| 1176 | * VM function cleanups by Hiten Pandya. |
| 1177 | * General kernel API cleanups by David Rhodus. |
| 1178 | * Syscall Separation work by David Reese. |
| 1179 | |
| 1180 | * Removal of stackgap code in the Linux Emulation by David Reese. |
| 1181 | * Networking work by Jeffrey Hsu. |
| 1182 | * Interrupt, Slab Allocator stabilization. |
| 1183 | * Introduction of _KERNEL_STRUCTURES ... a better way for |
| 1184 | userland programs to access kernel header files rather |
| 1185 | then them setting _KERNEL. |
| 1186 | * Bring the system uptodate on security issues (David Rhodus, others) |
| 1187 | * NFS peformance improvements by David Rhodus and Hiten Pandya. |
| 1188 | |
| 1189 | * GUPROF and kldload work in the kernel by Hiten Pandya. |
| 1190 | * Major progress on the checkpointing code in the kernel |
| 1191 | primarily by Kip Macy. |
| 1192 | * All work through this moment has been stabilized with major |
| 1193 | input from David Rhodus. |
| 1194 | |
| 1195 | |
| 1196 | Matt's current focus continues to be on rewriting the namecache code. |
| 1197 | Several intermediate commits have already been made but the big changes |
| 1198 | are still ahead. |
| 1199 | |
| 1200 | Galen has started experimenting with userland threads, by porting the |
| 1201 | LWKT subsystem (which is mostly self contained) to userland. |
| 1202 | |
| 1203 | ## Wed 27 August 2003 - Slab Allocator, __P removal |
| 1204 | |
| 1205 | |
| 1206 | * DragonFly now has slab allocator for the kernel! The allocator is |
| 1207 | about 1/3 the size of FreeBSD-5's slab allocator and features per-cpu |
| 1208 | isolation, mutexless operation, cache sensitivity (locality of reference), |
| 1209 | and optimized zeroing code. |
| 1210 | |
| 1211 | * The core of the slab allocator is MP safe but at the moment we still |
| 1212 | use the malloc_type structure for statistics reporting which is not |
| 1213 | yet MP safe, and the backing store (KVM routines) are not MP safe. |
| 1214 | Even, so making the whole thing MP safe is not expected to be difficult. |
| 1215 | |
| 1216 | |
| 1217 | * Robert Garrett has made great process removing __P(), Jeffrey has been |
| 1218 | working on the nework stack, David has been backporting bug fixes from |
| 1219 | FreeBSD and doing other cleanups, and Hiten and Jeroen have been |
| 1220 | investigating documentation and source code reorganization. |
| 1221 | |
| 1222 | |
| 1223 | ## Sun 10 August 2003 - Source Reorganization |
| 1224 | |
| 1225 | * A major source tree reorganization has been accomplished, including |
| 1226 | separation of device drivers by functionality, moving filesystems into |
| 1227 | a vfs/ subdirectory, and the removal of the modules/ subdirectory with |
| 1228 | an intent to integrate the module makefiles into the normal sys/ |
| 1229 | tree structure. |
| 1230 | |
| 1231 | * Work on syscall messaging is ongoing and we will soon hopefully have |
| 1232 | a fully working demonstration of asynch messaging. |
| 1233 | |
| 1234 | |
| 1235 | ## 09 July 2003 to 22 July 2003 - Misc work, DEV messaging |
| 1236 | |
| 1237 | * A large number of commits related to the messaging infrastructure have |
| 1238 | been made, and DEV has been message encapsulated (though it still runs |
| 1239 | synchronously). |
| 1240 | |
| 1241 | * Announced the official start of work on the userland threading API: |
| 1242 | <a href="misc/uthread.txt">misc/uthread.txt</a> |
| 1243 | |
| 1244 | |
| 1245 | |
| 1246 | ## 27 June 2003 to 09 July 2003 - MP operation |
| 1247 | |
| 1248 | This section contains work completed so far. Some items have not yet |
| 1249 | been integrated into the next section up. |
| 1250 | |
| 1251 | * **(done)** Get it so user processes can run simultaniously |
| 1252 | on multiple cpus. User processes are MP, the kernel is still |
| 1253 | mostly UP via the MP lock. |
| 1254 | * **(done)** Run normal interrupts and software interrupts |
| 1255 | in their own threads. |
| 1256 | |
| 1257 | * **(done)** Implement interrupt preemption with a |
| 1258 | block-return-to-original-thread feature (which is more |
| 1259 | like BSDI and less like 5.x). |
| 1260 | * **(done)** Finish separating the userland scheduler |
| 1261 | from LWKT. The userland scheduler now schedules one LWKT |
| 1262 | thread per cpu. Additionally, the realtime, normal, and |
| 1263 | idle priority queues work as expected and do not create |
| 1264 | priority inversions in the kernel. Implement a strict |
| 1265 | priority+rr model for LWKTs and assign priorities to |
| 1266 | interrupts, software interrupts, and user processes running |
| 1267 | in kernel mode. Deal with ps, systat, and top. Fix |
| 1268 | bugs in the sysctl used to retrieve processes. Add threads |
| 1269 | to the information returned by said sysctl. |
| 1270 | * Replace the UIO structure with a linked list of VM objects, |
| 1271 | offsets, and ranges, which will serve for both system and |
| 1272 | user I/O requests. |
| 1273 | * Move kernel memory management into its own thread(s), |
| 1274 | then pull in the SLAB allocator from DUX3, implement a |
| 1275 | per-cpu cache, and get rid of zalloc*(). |
| 1276 | * Implement virtual cpus, primarily for testing purposes. |
| 1277 | |
| 1278 | * (done) Separate scheduling of user processes from the |
| 1279 | LWKT scheduler. |
| 1280 | i.e. only schedule one user process in the LWKT scheduler at |
| 1281 | a time per cpu. |
| 1282 | * Change over to a flat 64 bit I/O path. |
| 1283 | * (done) Get real SMP working again... implement the token |
| 1284 | transfer matrix between cpus, keep the BGL for the moment but |
| 1285 | physically move the count into the thread structure so it |
| 1286 | doesn't add (much) to our switching overhead. |
| 1287 | * Fix BUF/BIO and turn I/O initiation into a message-passing |
| 1288 | subsystem. Move all DEVices to their own threads and |
| 1289 | implement as message-passing. VFS needs a major overhaul |
| 1290 | before VFS devices can be moved into their own threads to |
| 1291 | the reentrant nature of VFS. |
| 1292 | |
| 1293 | |
| 1294 | ## 17 June 2003 to 26 June 2003 |
| 1295 | |
| 1296 | * Add light weight kernel threads to the tree. |
| 1297 | |
| 1298 | This work has been completed. It involved creating a clearly defined |
| 1299 | thread/process abstraction. |
| 1300 | |
| 1301 | * **(done)** embed a thread structure in the proc structure. |
| 1302 | * **(done)** replace the curproc global with curthread, create |
| 1303 | macros to mimic the old curproc in C code. |
| 1304 | * **(done)** Add idlethread. curthread is never NULL now. |
| 1305 | * **(done)** replace the npxproc global with npxthread. |
| 1306 | |
| 1307 | * **(done)** Separate the thread structure from the proc structure. |
| 1308 | * **(done)** remove the curpcb global. Access it via curthread. |
| 1309 | ('curthread' will be the only global that needs to be |
| 1310 | changed when switching threads. Move the PCB to the end |
| 1311 | of the thread stack. |
| 1312 | * **(done)** npxproc becomes npxthread. |
| 1313 | * **(done)** cleanup globaldata access. |
| 1314 | |
| 1315 | * **(done)** Separate the heavy weight scheduler from the thread |
| 1316 | scheduler and make the low level switching function operate |
| 1317 | directly on threads and only threads. Heavy weight process |
| 1318 | switching (involving things like user_ret, timestamps, |
| 1319 | and so forth) will occur as an abstraction on top of the |
| 1320 | LWKT scheduler. swtch.s is almost there already. |
| 1321 | The LWKT switcher only messes with basic registers and |
| 1322 | ignores the things that are only required by full blown |
| 1323 | processes ( debug regs, FP, common_tss, and CR3 ). The heavy |
| 1324 | weight scheduler that deals with full blown process contexts |
| 1325 | handles all save/restore elements. LWKT switch times are |
| 1326 | extremely fast. |
| 1327 | * **(done)** change all system cals from (proc,uap) to (uap). |
| 1328 | * **(done)** change the device interface to take threads instead of |
| 1329 | procs (d_thread_t is now a thread pointer). Change the |
| 1330 | select interface to take thread arguments instead of procs |
| 1331 | (interface itself still needs to be fixed). Consolidate |
| 1332 | p_cred into p_ucred. Consolidate p_prison into p_ucred. |
| 1333 | Change suser*() to take ucreds instead of processes. |
| 1334 | * **(done)** Move kernel stack management to the thread structure. |
| 1335 | Note: the kernel stack may not be swapped. Move the pcb to |
| 1336 | the top of the kernel stack and point to it from |
| 1337 | the thread via td_pcb (similar to FreeBSD-5). |
| 1338 | |
| 1339 | * **(done)** Get rid of the idiotic microuptime and related |
| 1340 | crap from the critical path in the switching code. |
| 1341 | Implement statistical time statistics from the stat clock |
| 1342 | interrupt that works for both threads and processes without |
| 1343 | ruining switching performance (very necessary since there |
| 1344 | is going to be far more kernel->kernel done with this |
| 1345 | design, but it also gets rid of a serious eyesore that |
| 1346 | has been in the FreeBSD tree for a long time). |
| 1347 | * **(done)** Translate most proc pointers into thread pointers |
| 1348 | in the VFS and DEV subsystems (which took all day to do). |
| 1349 | * **(done)** Cleanup VFS and BUF. Remove creds from calls that should |
| 1350 | not pass them, such as close, getattr, vtruncbuf, fsync, and |
| 1351 | createvobject. Remove creds from struct buf. All of the |
| 1352 | above operations can be run in any context, passing the |
| 1353 | originator's cred makes no sense. |
| 1354 | * **(95% done and tested)** Remove all use of **curproc** and |
| 1355 | **curthread** from the VFS |
| 1356 | and DEV subsystems in preparation for moving them to |
| 1357 | serializable threads. Add thread arguments as necessary. |
| 1358 | |
| 1359 | * **(95% done and tested)** Finish up using thread references |
| 1360 | for all subsystems that |
| 1361 | have no business talking to a process. e.g. VM, BIO. |
| 1362 | Deal with UIO_COPY. |
| 1363 | * **(done)**Make tsleep/wakeup work with pure threads. |
| 1364 | * **(done, needs more testing. buildworld succeeds on test box)** |
| 1365 | Move kernel threads (which are implemented as heavy-weight |
| 1366 | processes to LWKT threads). |
| 1367 | |
| 1368 | |
| 1369 | ## 16 June 2003 - |
| 1370 | |
| 1371 | * Completed repository fork, $Tag change, and various cleanup. |
| 1372 | |
| 1373 | * Creating a new repository required a bit of work. First the RELENG_4 |
| 1374 | tree had to be checked out. Then a new cvs repository was created |
| 1375 | with a new cvs tag. Then a combination of scripts and manual work |
| 1376 | (taking all day) was used to move the $FreeBSD tags into comments |
| 1377 | and add a new tag to all the source files to represent the new |
| 1378 | repository. I decided to cleanup a large number of FBSDID and |
| 1379 | rcsid[] declarations at the same time, basically moving all tag |
| 1380 | descriptions into comments with the intent that a linking support |
| 1381 | program would be written later to collect tags for placement in |
| 1382 | binaries. Third party tags in static declarations which contained |
| 1383 | copyright information were retained as static declarations. |
| 1384 | |
| 1385 | * Some minor adjustments to the syscall generator was required, and |
| 1386 | I also decided to physically remove UUCP from the tree. |
| 1387 | |
| 1388 | * Finally, buildworld and buildkernel were made to work again and |
| 1389 | the result was checked in as rev 1.2 (rev 1.1 being the original |
| 1390 | RELENG_4 code). |
| 1391 | |
| 1392 | |
| 1393 | |
| 1394 | |