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

TTYs are not MPSAFE

ed

TTY consumers in the network stack are not MPSAFE (PPP, SLIP, ng_tty,...)

TTYs

rwatson

Some CAM SCSI drivers are not mpsafe (XXX need list)

Newbus is not MPSAFE

scottl,imp

USB is not MPSAFE

hps

KAME IPv6 ND6 and MLD6 are not MPSAFE

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. io, mem, ctty)

Giant is unconditionally acquired before entering VFS via UNIX domain sockets, but doesn't need to be

wkoszek

Giant is still acquired at some points in VM

alc

Giant is still acquired in System V SHM

wkoszek

sysctls are Giant-locked. csjp and kris have a prototype patch allowing for (and partially implementing) pushdown.

csjp, kris

When pseudofs is mounted then every process exit acquires two extra mutexes including Giant. See pfs_exit(). This code is also incredibly inefficient.

des

Some filesystems are not mpsafe. The most important of these is probably msdosfs. Others (that do not set MNTK_MPSAFE as mount flag): cd9660, deadfs, fdescfs, hpfs, ntfs, nwfs, procfs, smbfs, udf, coda, fifofs, portalfs, unionfs.

lulf(fdescfs)

Mounting and unmounting of filesystems acquires Giant

/dev/mem is marked as requiring Giant but it is unclear why

The NFSv4 client code unconditionally acquires Giant

The non-MPSAFE timeout() API is used in the following kernel systems: ipfilter, netgraph/ng_fec.c, if_slowtimo(), various drivers, and speaker beeping ;)

netatalk uses the non-MPSAFE timeout() API

rwatson

The netncp and netsmb code unconditionally acquire Giant

kern/subr_log.c is not mpsafe

TTY?

ALTQ uses non-mpsafe callouts

The following drivers use non-mpsafe callouts: dev/mpt/mpt_raid.c dev/dcons/dcons_os.c dev/esp/ncr53c9x.c dev/kbdmux/kbdmux.c dev/lmc/if_lmc.c dev/nmdm/nmdm.c dev/rc/rc.c dev/uart/uart_kbd_sun.c

TTY(dcons)

The following network drivers are not mpsafe: an arl awi cnw ce cp cs ctau cx en ex fe hfa idt ie if_ic oltr mn pcf pdq ppbus ray sbni sbsh snc sr tx wl xe. They are threatened with removal in 7.0.

rwatson (danish axe)

These drivers are not mpsafe: ichsmb, ipmi, intpm

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

SMPTODO (last edited 2008-04-17 11:23:18 by UlfLilleengen)