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