This is an old revision of the document!


SMP General TODO List

This page lists some general locking/basic SMP todo items that have thus far slipped through the cracks; some are more relevant to the real world than others. For these purposes, we consider a component to be not MPSAFE if it either entirely relies on the Giant lock to operate correctly, or if its required dependencies rely on the Giant lock to operate correctly. Depending on the subsystem, the impact may be significant or limited with respect to other components simultaneously operating in the kernel. Some have owners, some don't.

Subsystem Dependencies Owner
Some TTY drivers override the per-TTY mutex: syscons (Giant), si (Giant), nmdm and usb_serial ed
syscons is not MPSAFE ed
Some CAM SCSI drivers are not mpsafe (XXX need list)
KAME IPv6 ND6 and MLD6 are not MPSAFE. More details on IPv6TODO.
Network address lists are insufficiently locked rwatson
Many pseudo-devices are not yet marked as MPSAFE, even though many are in fact MPSAFE. (i.e. mem) (maybe) ed
Giant is still acquired at some points in VM swap handling, MPSAFE VFS alc
Giant is still acquired in System V SHM wkoszek
Some filesystems are not mpsafe. These are (that do not set MNTK_MPSAFE as mount flag): hpfs, ntfs, nwfs, smbfs, coda, portalfs.
Mounting and unmounting of filesystems acquires Giant
The non-MPSAFE timeout() API is used in the following kernel systems: acpi, scsi_low, ipfilter, advansys, amr, atkbdc, dpt, sbp, hptmv, hptrr, iir, ips, isp, mcd, mly, mn, scd, syscons, twa, sysbeep, if_slowtimo, netatalk, ng_btsocket, ng_fec, netipsec, netncp, ncr
netatalk uses the non-MPSAFE timeout() API rwatson
The netncp and netsmb code unconditionally acquire Giant
ALTQ uses non-mpsafe callouts
The following drivers use non-mpsafe callouts: dev/mpt/mpt_raid.c dev/esp/ncr53c9x.c dev/kbdmux/kbdmux.c dev/lmc/if_lmc.c dev/rc/rc.c dev/uart/uart_kbd_sun.c
Module event handlers run under Giant
linux_getcwd_common() (should use LK_SHARED and MPSAFEVFS)
Linux compat ioctl() handlers
SVR4 compat streams
start_init()
SYSINIT() routines
ntp system calls and settime()
reboot()

Excluded from this list are a large number of post-SMPng optimization tasks relating to scheduling, locking strategy, etc, that are described elsewhere.


CategoryTODO

  • smptodo.1350317733.txt.gz
  • Last modified: 2012/10/15 16:15
  • by RomanDivacky