freebsd-dev/sys/sys
Kenneth D. Merry cb32189e23 Move dynamic sysctl(8) variable creation for the cd(4) and da(4) drivers
out of cdregister() and daregister(), which are run from interrupt context.

The sysctl code does blocking mallocs (M_WAITOK), which causes problems
if malloc(9) actually needs to sleep.

The eventual fix for this issue will involve moving the CAM probe process
inside a kernel thread.  For now, though, I have fixed the issue by moving
dynamic sysctl variable creation for these two drivers to a task queue
running in a kernel thread.

The existing task queues (taskqueue_swi and taskqueue_swi_giant) run in
software interrupt handlers, which wouldn't fix the problem at hand.  So I
have created a new task queue, taskqueue_thread, that runs inside a kernel
thread.  (It also runs outside of Giant -- clients must explicitly acquire
and release Giant in their taskqueue functions.)

scsi_cd.c:	Remove sysctl variable creation code from cdregister(), and
		move it to a new function, cdsysctlinit().  Queue
		cdsysctlinit() to the taskqueue_thread taskqueue once we
		have fully registered the cd(4) driver instance.

scsi_da.c:	Remove sysctl variable creation code from daregister(), and
		move it to move it to a new function, dasysctlinit().
		Queue dasysctlinit() to the taskqueue_thread taskqueue once
		we have fully registered the da(4) instance.

taskqueue.h:	Declare the new taskqueue_thread taskqueue, update some
		comments.

subr_taskqueue.c:
		Create the new kernel thread taskqueue.  This taskqueue
		runs outside of Giant, so any functions queued to it would
		need to explicitly acquire/release Giant if they need it.

cd.4:		Update the cd(4) man page to talk about the minimum command
		size sysctl/loader tunable.  Also note that the changer
		variables are available as loader tunables as well.

da.4:		Update the da(4) man page to cover the retry_count,
		default_timeout and minimum_cmd_size sysctl variables/loader
		tunables.  Remove references to /dev/r???, they aren't used
		any longer.

cd.9:		Update the cd(9) man page to describe the CD_Q_10_BYTE_ONLY
		quirk.

taskqueue.9:	Update the taskqueue(9) man page to describe the new thread
		task queue, and the taskqueue_swi_giant queue.

MFC after:	3 days
2003-09-03 04:46:28 +00:00
..
_iovec.h Move the typedef for size_t into _iovec.h, so that size_t is available 2003-02-26 20:16:58 +00:00
_label.h Rename MAC_MAX_POLICIES to MAC_MAX_SLOTS, since the variables and 2003-05-08 19:49:42 +00:00
_lock.h Renamed the idempotency identifier to match the file name. 2002-06-07 14:37:09 +00:00
_mutex.h Save 16 bytes per mutex if MUTEX_PROFILING is not defined. 2002-12-29 11:14:41 +00:00
_semaphore.h Add the rest of the kernel support for the sem_ API in kern/uipc_sem.c. 2002-09-19 00:43:32 +00:00
_sigset.h Split 4.x and 5.x signal handling so that we can keep 4.x signal 2002-10-25 19:10:58 +00:00
_timespec.h Simplify struct __timespec, fix style bugs, add an XXX comment. 2003-02-26 16:50:01 +00:00
_timeval.h Move struct timeval to its own header so that it can be shared between 2002-12-31 04:08:41 +00:00
_types.h Move details of dev_t (and udev_t) to <sys/_types.h>. 2003-03-28 15:27:30 +00:00
aac_ioctl.h
acct.h Move details of dev_t (and udev_t) to <sys/_types.h>. 2003-03-28 15:27:30 +00:00
acl.h Move more ACL logic from the UFS code (ufs_acl.c) to the central POSIX.1e 2003-08-04 02:13:05 +00:00
agpio.h Document a few acronyms. 2003-02-08 20:42:26 +00:00
aio.h
alq.h Add an explicit credential argument to alq_open() to allow the caller to 2003-06-22 22:28:56 +00:00
assym.h
ata.h This is a major rework of the ATA driver (ATAng) 2003-08-24 09:22:26 +00:00
bio.h Retire the experimental bio_taskqueue(), it was not quite as usable as 2003-04-12 09:13:01 +00:00
bitstring.h Finish the repocopy of bitstring.h to sys so it can be used 2003-06-13 19:40:13 +00:00
blist.h Expand inline the relevant parts of src/COPYRIGHT for Matt Dillon's 2003-08-12 23:24:05 +00:00
buf.h - Define a new flag for getblk(): GB_NOCREAT. This flag causes getblk() to 2003-08-31 08:50:11 +00:00
bus_dma.h - Introduce a new busdma flag BUS_DMA_ZERO to request for zero'ed 2003-07-27 13:52:10 +00:00
bus.h Add a resource_disabled() helper function that returns true (non-zero) if 2003-07-02 16:01:38 +00:00
callout.h
cdefs.h Discussions on src-committers with alfred and bde pointed out that 2003-07-25 18:40:36 +00:00
cdio.h Make bitfields plain old u_int. u_int16_t makes no sense. 2003-04-30 12:07:32 +00:00
cdrio.h * Add CDRIOC{READ,WRITE}SPEED ioctls to cd(4). Units are in KB/sec. 2002-10-18 22:03:39 +00:00
chio.h Use symbolic constants instead of "4". 2003-05-31 16:54:37 +00:00
clist.h
clock.h
condvar.h Part 1 of KSE-III 2002-06-29 17:26:22 +00:00
conf.h - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
cons.h Change the console interface to pass a "struct consdev *" instead of a 2003-02-20 20:54:45 +00:00
consio.h 1. Allow information about current history size be retrieved using ioctl(2); 2002-08-19 16:32:09 +00:00
copyright.h We've had something like this file since 1992, so therefore this file 2003-01-07 04:37:40 +00:00
ctype.h Resolve conflicts arising from the ACPI CA 20021118 import. 2002-11-27 18:09:20 +00:00
dataacq.h
device_port.h
devicestat.h Add an XXX comment with a TODO item for next time we run a revision 2003-05-31 21:10:01 +00:00
digiio.h
dir.h
dirent.h Fix namespace issues by using the relatively new visibility 2002-09-10 18:12:16 +00:00
disk.h I think the divorce successed, so stop #including <geom/geom_disk.h> 2003-04-01 18:55:04 +00:00
disklabel.h Sanitize the LABELSECTOR & LABELOFFSET definitions: 2003-06-07 09:06:39 +00:00
diskmbr.h Add definitions for location of the magic sequence and the length 2003-04-13 21:52:22 +00:00
diskpc98.h Remove DIOCGPC98 ioctl. 2003-05-01 14:40:16 +00:00
dkstat.h #include <sys/resource.h> to limit ports damage. 2003-05-07 15:26:43 +00:00
domain.h
dvdio.h
elf32.h Move the definition of ElfN_Hashelt to common headers. The only platform 2002-05-30 08:32:18 +00:00
elf64.h Move the definition of ElfN_Hashelt to common headers. The only platform 2002-05-30 08:32:18 +00:00
elf_common.h Add defines required for TLS support. 2003-06-18 16:38:22 +00:00
elf_generic.h Infrastructure tweaks to allow having both an Elf32 and an Elf64 executable 2002-07-20 02:56:12 +00:00
endian.h Pointy hat commit: 2003-04-03 11:32:01 +00:00
errno.h Copyin and copyout are only possible from a process-native thread, 2002-10-07 06:25:26 +00:00
event.h Tweak the definition of the EV_SET macro so that it evaluates each 2003-02-02 19:39:51 +00:00
eventhandler.h Oops, SHUTDOWN_PRI_LAST should be EVENTHANDLER_PRI_LAST, not 2003-03-24 21:24:37 +00:00
eventvar.h
exec.h Use __CONCAT and __XSTRING when concatenating or stringifying arguments to 2003-01-04 08:17:27 +00:00
extattr.h Userspace prototypes for the extattr_list_*() system calls. 2003-06-04 04:04:24 +00:00
fbio.h Add FBTYPEs used by the sbus bus support in XFree86. This uses some of 2003-06-18 17:49:52 +00:00
fcntl.h Move FMARK and FDEFER til sys/file.h where they belong. 2003-06-20 07:59:59 +00:00
fdcio.h
file.h Add a f_vnode field to struct file. 2003-06-22 08:41:43 +00:00
filedesc.h Add tracking of process leaders sharing a file descriptor table and 2003-06-02 16:05:32 +00:00
filio.h
fnv_hash.h
gmon.h
gpt.h o Include <sys/uuid.h>. This avoids that applications such as 2002-11-10 20:13:58 +00:00
iconv.h Convert GNU variadic macros to the ISO 9X variety. 2002-07-15 13:34:50 +00:00
imgact_aout.h Forward declare struct vnode so that <sys/vnode.h> or some other header 2002-09-05 07:54:03 +00:00
imgact_elf.h - Provide backwards compatibility for kern.fallback_elf_brand. 2003-01-05 03:48:14 +00:00
imgact.h Bring in two sets of changes: 2002-11-05 17:51:56 +00:00
inflate.h
interrupt.h Introduce a new taskqueue that runs completely free of Giant, and in 2003-02-26 03:15:42 +00:00
ioccom.h I've fixed the X11 port, so I can remove the (ioctl) hack. 2002-04-10 04:53:37 +00:00
ioctl_bt848.h
ioctl_compat.h
ioctl_meteor.h
ioctl.h
ipc.h It is possible for an active aio to prevent shared memory from being 2003-01-13 23:04:32 +00:00
jail.h o In struct prison, add an allprison linked list of prisons (protected 2003-04-09 02:55:18 +00:00
joystick.h Fix typo in the BSD copyright: s/withough/without/ 2002-06-02 20:05:59 +00:00
jumbo.h Fix 2 vm_offset_t -> vm_paddr_t missed in previous commit. 2003-03-25 01:47:29 +00:00
kbio.h
kenv.h Rework the kernel environment subsystem. We now convert the static 2002-04-17 13:06:36 +00:00
kernel.h Rearrange the SYSINIT order to call lockmgr_init() earlier so that 2003-07-16 01:00:39 +00:00
kerneldump.h Add kernel dump support, based on the ia64 version (which was committed 2002-10-20 17:03:15 +00:00
kobj.h Convert hit and miss counters to unsigned values. Surely negative values 2002-06-10 22:40:26 +00:00
kse.h Introduce a thread mailbox flag TMF_NOUPCALL. On some architectures other 2003-08-05 12:00:55 +00:00
kthread.h Some kernel threads try to do significant work, and the default KSTACK_PAGES 2002-10-02 07:44:29 +00:00
ktr.h Retire the KTR_LOCKMGR bit and use it to log eventhandler messages 2003-03-11 20:07:22 +00:00
ktrace.h - Add a td_pflags field to struct thread for private flags accessed only by 2003-06-09 17:38:32 +00:00
libkern.h Pass a malloc type into the libkern strdup() implementation explicitly, 2003-02-25 22:11:39 +00:00
limits.h sys/sys/limits.h: 2003-05-19 20:29:07 +00:00
linedisc.h - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
link_aout.h Repo copy link.h to sys/link_elf.h and sys/link_aout.h since they are 2002-08-22 20:35:23 +00:00
link_elf.h Implement dlinfo() function. 2003-02-13 17:47:44 +00:00
linker_set.h Add a __section(x) macro as well. Use this in linker_set.h. ie: 2002-09-23 06:11:29 +00:00
linker.h Slight reorg and added AMD64 support. A couple of the MODINFOMD_* values 2003-05-01 03:31:18 +00:00
lock.h Add a new function to look for a spinlock's instance when it is held by 2003-07-31 18:50:58 +00:00
lockf.h
lockmgr.h - Add an interlock argument to BUF_LOCK and BUF_TIMELOCK. 2003-02-25 03:37:48 +00:00
mac_policy.h Introduce two new MAC Framework and MAC policy entry points: 2003-08-21 18:21:22 +00:00
mac.h Remove extra tabs indenting MAC library calls; they were there to 2003-08-29 02:43:57 +00:00
malloc.h correct typo in comment 2003-08-19 16:41:12 +00:00
mbpool.h Add a facility for devices, specifically network interfaces, that require 2003-07-15 08:59:38 +00:00
mbuf.h Implement MBUF_STRESS_TEST mark II. 2003-09-01 05:55:37 +00:00
mchain.h Some style fixes. 2003-02-21 16:24:49 +00:00
md4.h
md5.h Oops, this should have been part of my previous commit. 2002-06-24 14:18:39 +00:00
mdioctl.h Add a couple of undocumented test options to MD(4) to aid in regression 2003-04-09 11:59:29 +00:00
memrange.h Some BIOSs are using MTRR values that are only documented under NDA 2002-09-15 15:07:55 +00:00
mman.h Add the mlockall() and munlockall() system calls. 2003-08-11 07:14:08 +00:00
module.h
mount.h Add a new mount flag MNT_BYFSID that can be used to unmount a file 2003-07-01 17:40:23 +00:00
mouse.h
msg.h Add const qualifier to data argument for msgsnd. 2003-01-26 20:09:34 +00:00
msgbuf.h Replace the code for reading and writing the kernel message buffer 2003-06-22 02:18:31 +00:00
mtio.h Make the mtio data structures explicitly sized. 2002-05-14 07:30:13 +00:00
mutex.h Nuke the declaration of a function which was not implemented. 2003-07-16 08:13:13 +00:00
namei.h Consistently use the BSD u_int and u_short instead of the SYSV uint and 2003-08-07 15:04:27 +00:00
nlist_aout.h Pad after "char *n_name;" in the !_AOUT_INCLUDE_ case so that struct nlist 2002-09-05 08:03:02 +00:00
param.h Bump __FreeBSD_version due to movement of libraries to /lib and rtld to 2003-08-17 09:10:13 +00:00
pciio.h
pcpu.h Unbreak the KSE code. Keep track of zobie threads using the Per-CPU storage 2002-12-10 02:33:45 +00:00
pioctl.h Kernel modifications necessary to allow to follow fork()ed children. 2002-08-04 01:07:02 +00:00
pipe.h - The vm_object pointer in pipe_buffer is unused. Remove it. 2003-08-13 20:01:38 +00:00
poll.h Reconnect a comment with its code. 2002-07-10 04:47:25 +00:00
posix4.h Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
power.h Very minor warns fix. Add a declaration for an unused parameter. 2002-07-15 14:06:03 +00:00
priority.h
proc.h In vm_thread_swap{in|out}(), remove the alpha specific conditional 2003-08-16 23:15:15 +00:00
procfs.h
protosw.h Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
ptio.h
ptrace.h Add or finish support for machine dependent ptrace requests. When we 2003-08-15 05:25:06 +00:00
queue.h Add safe _FOREACH iterators to the rest of the queue.h types. 2003-08-14 14:49:26 +00:00
random.h add RANDOM_PURE for use by crypto drivers that harvest data from h/w RNG's 2002-10-04 20:34:08 +00:00
reboot.h Libdisk does not need to include <sys/diskslice.h> any more. 2003-04-04 16:35:16 +00:00
regression.h
resource.h Move cp_time[CPUSTATES] and related #defines to <sys/resource.h> 2003-02-16 13:30:29 +00:00
resourcevar.h Use u_int for the struct uidinfo reference count rather than u_short; 2003-04-20 13:54:04 +00:00
rman.h Implement rman_get_device 2003-02-12 07:00:59 +00:00
rtprio.h
runq.h Make the run queue parameters machine dependent. Optimize 64 bit 2002-05-25 01:12:23 +00:00
sbuf.h Add the new function "sbuf_done()" which returns non-zero if the sbuf is 2002-10-04 09:58:17 +00:00
sched.h - Adjust sched hooks for fork and exec to take processes as arguments instead 2003-04-11 03:39:07 +00:00
select.h Add complete struct timeval by including <sys/_timeval.h>. 2002-12-31 04:13:50 +00:00
selinfo.h
sem.h s/u_short/unsigned short/ to make this compile if _POSIX_C_SOURCE=200112 2003-06-02 17:23:37 +00:00
sema.h
semaphore.h o Adjust the SEM_VALUE_MAX macro so that <machine/limits.h> isn't 2002-10-04 21:31:33 +00:00
shm.h Bring shm functions closer the the opengroup standards. 2003-01-25 21:33:05 +00:00
sigio.h When compiling the kernel do not implicitly include filedesc.h from proc.h, 2003-01-01 01:56:19 +00:00
signal.h - According to mike@FreeBSD.org SIGTHR should be hiden by 2003-03-31 23:31:50 +00:00
signalvar.h Signals sent specifically to a particular thread must 2003-07-03 19:09:59 +00:00
smp.h - Add structures for defining cpu topologies more complex than SMP. 2003-06-28 22:06:19 +00:00
snoop.h Declare the snp ioctl()s to work on udev_t, since that is what they 2002-11-11 10:45:31 +00:00
socket.h Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
socketvar.h Make the second argument to sooptcopyout() constant in order to 2003-08-05 00:27:54 +00:00
sockio.h
soundcard.h add a few missing bits for future use 2003-08-15 01:24:36 +00:00
stat.h Fix two misuses of __BSD_VISIBLE. 2003-05-22 17:07:57 +00:00
statvfs.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
stddef.h Add the sys/stddef.h header, so that we can have ptrdiff_t 2002-11-13 15:14:57 +00:00
stdint.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
sun_disklabel.h Introduce a #define for the length of the bootloader code. 2003-04-23 08:04:30 +00:00
sx.h
syscall.h o Refine kse_thr_interrupt to allow it to handle different commands. 2003-07-17 22:45:33 +00:00
syscall.mk o Refine kse_thr_interrupt to allow it to handle different commands. 2003-07-17 22:45:33 +00:00
syscallsubr.h Split sendit into two parts. The first part, still called sendit, that 2003-05-05 20:33:38 +00:00
sysctl.h Replace 'OS release date' with 'kernel release date' here, too. 2003-08-21 16:36:54 +00:00
sysent.h SCARGS removal take II. 2002-12-14 01:56:26 +00:00
syslimits.h Add the POSIX sanctioned "LOGIN_NAME_MAX" -- Maximum length of a login name. 2003-01-06 04:33:47 +00:00
syslog.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
sysproto.h o Refine kse_thr_interrupt to allow it to handle different commands. 2003-07-17 22:45:33 +00:00
systm.h Remove __nonnull() on the second argument of strto[u]l() which I used 2003-07-22 06:01:11 +00:00
taskqueue.h Move dynamic sysctl(8) variable creation for the cd(4) and da(4) drivers 2003-09-03 04:46:28 +00:00
termios.h
thr.h - Add two files to support the thr threading interface. 2003-04-01 00:30:30 +00:00
tiio.h At long last, commit the zero copy sockets code. 2002-06-26 03:37:47 +00:00
time.h Implement CLOCK_MONOTONIC. 2003-02-23 10:18:31 +00:00
timeb.h
timepps.h Brucifixion ? Yes, out that door, row on the left, one patch each. 2002-04-30 19:48:45 +00:00
timers.h
times.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
timespec.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
timetc.h Give timecounters a numeric quality field. 2003-08-16 08:23:53 +00:00
timex.h Removed unused forward struct declaration. 2002-04-28 09:51:45 +00:00
tree.h Import OpenBSD's <sys/tree.h>, needed by OpenSSH. 2002-06-23 14:38:51 +00:00
tty.h Use a new message buffer `consmsgbuf' to forward messages to a 2003-06-22 02:54:33 +00:00
ttychars.h
ttycom.h
ttydefaults.h
ttydev.h
types.h Move details of dev_t (and udev_t) to <sys/_types.h>. 2003-03-28 15:27:30 +00:00
ucontext.h Add an argument to get_mcontext() which specified whether the 2003-04-25 01:50:30 +00:00
ucred.h o Fix a comment. 2003-03-27 11:35:45 +00:00
uio.h Remove ENABLE_VFS_IOOPT. It is a long unfinished work-in-progress. 2003-03-06 03:41:02 +00:00
umtx.h - Remove the blocked pointer from the umtx structure. 2003-06-03 05:24:46 +00:00
un.h o Merge <machine/ansi.h> and <machine/types.h> into a new header 2002-08-21 16:20:02 +00:00
unistd.h Update limits and configuration parameters for 1003.1/TC1/D6. 2002-10-27 18:03:02 +00:00
unpcb.h Remove vestiges of no longer needed unp_rvnode field. 2003-02-06 01:34:43 +00:00
user.h - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
utsname.h
uuid.h Introduce {be,le}_uuid_{enc,dec}() functions for explicitly encoding 2003-05-31 16:47:07 +00:00
vmmeter.h - It's more accurate to say that vm_paging_needed() returns TRUE 2003-02-02 07:16:40 +00:00
vnode.h Add fdidx argument to vn_open() and vn_open_cred() and pass -1 throughout. 2003-07-27 17:04:56 +00:00
wait.h Remove the deprecated 4.2/4.3BSD wait union. 2002-06-05 02:21:01 +00:00
watchdog.h Remove an '_' which was surplus to requirements. 2003-06-25 08:30:45 +00:00
xrpuio.h