kernel - Make filters able to be marked MPSAFE
authorSamuel J. Greear <sjg@thesjg.com>
Tue, 3 Aug 2010 15:11:21 +0000 (15:11 +0000)
committerSamuel J. Greear <sjg@thesjg.com>
Tue, 3 Aug 2010 17:44:29 +0000 (17:44 +0000)
commit4c91dbc92f2298fa9a4c90d45e468a667fc2d75f
tree6381c559754bd6bb2124d084a6d2f6bfd50ba794
parent5b22f1a7302b644c8e417d0bf1192e953e27d3b6
kernel - Make filters able to be marked MPSAFE

* Change struct filterops f_isfd field to f_flags, taking FILTEROP_ISFD and/or
  FILTEROP_MPSAFE.

* Convert all existing filter definitions to use new flags.

* Create filter_attach/detach/event wrapper functions for calling through the
  struct filterops vector that grab the MPLOCK as necessary.

* kern_event() uses kq->kq_count to determine whether or not to sleep,
  kqueue_scan() removes events from the TAILQ and can possibly sleep, releasing
  the global kq token, before updating kq->kq_count.
50 files changed:
sys/bus/cam/scsi/scsi_target.c
sys/bus/firewire/fwdev.c
sys/bus/usb/usb.c
sys/dev/drm/drm_fops.c
sys/dev/misc/cmx/cmx.c
sys/dev/misc/hotplug/hotplug.c
sys/dev/misc/kbd/kbd.c
sys/dev/misc/mse/mse.c
sys/dev/misc/psm/psm.c
sys/dev/misc/snp/snp.c
sys/dev/misc/spic/spic.c
sys/dev/misc/tw/tw.c
sys/dev/raid/aac/aac.c
sys/dev/raid/vinum/vinum.c
sys/dev/sound/pcm/dsp.c
sys/dev/usbmisc/ugen/ugen.c
sys/dev/usbmisc/uhid/uhid.c
sys/dev/usbmisc/ums/ums.c
sys/dev/usbmisc/uscanner/uscanner.c
sys/dev/video/bktr/bktr_os.c
sys/dev/video/cxm/cxm.c
sys/kern/kern_event.c
sys/kern/kern_memio.c
sys/kern/kern_sig.c
sys/kern/kern_udev.c
sys/kern/subr_bus.c
sys/kern/subr_log.c
sys/kern/sys_mqueue.c
sys/kern/sys_pipe.c
sys/kern/tty.c
sys/kern/tty_pty.c
sys/kern/tty_tty.c
sys/kern/uipc_socket.c
sys/net/bpf.c
sys/net/i4b/driver/i4b_rbch.c
sys/net/i4b/driver/i4b_tel.c
sys/net/i4b/layer4/i4b_i4bdrv.c
sys/net/tap/if_tap.c
sys/net/tun/if_tun.c
sys/platform/pc32/acpica5/acpi_machdep.c
sys/platform/pc32/apm/apm.c
sys/platform/pc32/isa/asc.c
sys/platform/pc64/acpica5/acpi_machdep.c
sys/platform/pc64/apm/apm.c
sys/platform/pc64/isa/asc.c
sys/sys/event.h
sys/vfs/fifofs/fifo_vnops.c
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/hammer/hammer_vnops.c
sys/vfs/ufs/ufs_vnops.c