summaryrefslogtreecommitdiffstats
path: root/sys/dev/snp
Commit message (Collapse)AuthorAgeFilesLines
* Slightly improve the design of the TTY buffer.ed2009-02-031-1/+0
| | | | | | | | | | | | | | | | | | | The TTY buffers used the standard <sys/queue.h> lists. Unfortunately they have a big shortcoming. If you want to have a double linked list, but no tail pointer, it's still not possible to obtain the previous element in the list. Inside the buffers we don't need them. This is why I switched to custom linked list macros. The macros will also keep track of the amount of items in the list. Because it doesn't use a sentinel, we can just initialize the queues with zero. In its simplest form (the output queue), we will only keep two references to blocks in the queue, namely the head of the list and the last block in use. All free blocks are stored behind the last block in use. I noticed there was a very subtle bug in the previous code: in a very uncommon corner case, it would uma_zfree() a block in the queue before calling memcpy() to extract the data from the block.
* Change ttyhook_register() second argument from thread to process pointer.mav2008-12-131-1/+2
| | | | | Thread was not really needed there, while previous ng_tty implementation that used thread pointer had locking issues (using sx while holding mutex).
* Reintroduce the snp(4) driver.ed2008-11-051-517/+231
| | | | | | | | | | | | Because the TTY hooks interface was not finished when I imported the MPSAFE TTY layer, I had to disconnect the snp(4) driver. This snp(4) implementation has been sitting in my P4 branch for some time now. Unfortunately it still doesn't use the same error handling as snp(4) (returning codes through FIONREAD), but it should already be usable. I'm committing this to SVN, hoping someone else could polish off its rough edges. It's always better than having a broken driver sitting in the tree.
* Even though snp(4) in SVN is still broken, remove the unneeded D_NEEDMINOR.ed2008-09-191-1/+1
| | | | | | | | | kib@ and I have decided we will MFC the bpf(4)/snp(4) fixes after we've released 7.1. Make sure the code in HEAD doesn't refer to a flag we don't need anyway. snp(4) in the MPSAFE TTY P4 branch already works, but still needs some polishing before it can be integrated to SVN.
* Convert the snp(4) driver to use cdevpriv.ed2008-08-151-66/+46
| | | | | | | | | | | | | Now we have a single /dev/snp device node, which can be opened by watch(8) multiple times. Even though snp(4) will be dead as of next week, it's nice having this in SVN, because: - We may want to MFC it to RELENG_7. - By the time we fix snp(4) again, it's already there, existing watch(8) binaries should already work. Just like bpf(4), I'm adding a symlink from snp0 to snp to remain binary compatible.
* Don't enforce unique device minor number policy anymore.ed2008-06-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | Except for the case where we use the cloner library (clone_create() and friends), there is no reason to enforce a unique device minor number policy. There are various drivers in the source tree that allocate unr pools and such to provide minor numbers, without using them themselves. Because we still need to support unique device minor numbers for the cloner library, introduce a new flag called D_NEEDMINOR. All cdevsw's that are used in combination with the cloner library should be marked with this flag to make the cloning work. This means drivers can now freely use si_drv0 to store their own flags and state, making it effectively the same as si_drv1 and si_drv2. We still keep the minor() and dev2unit() routines around to make drivers happy. The NTFS code also used the minor number in its hash table. We should not do this anymore. If the si_drv0 field would be changed, it would no longer end up in the same list. Approved by: philip (mentor)
* Move the check for the snp device being already attached after thekib2007-12-241-11/+6
| | | | | | | | | | | | | | | | fget() call, that is sleeping point, and possibly dropping Giant. The snp_target == NULL implies the snp_tty == NULL. Remove the code that is put under snp_target == NULL and snp_tty != NULL clause. In snpclose(), do the snp_detach() before scheduling the snp device destruction. Otherwise, after the return from snpclose(), the snp device is already removed from the snp_list, but tty is still in snooped state. Any attempt to do i/o on such tty cause panic because ttytosnp() returns NULL. Tested by: Peter Holm MFC after: 1 week
* Do not allow the SNPSTTY ioctl for the snoop device that has a ttykib2007-12-031-0/+3
| | | | | | | | attached. Otherwise, the snp->snp_tty would be overwritten, while the tty line discipline still set to the snpdisc. Then snplwrite() causes panic because ttytosnp() cannot find the snp. MFC after: 1 week
* Adopt snp to the destroy_dev_sched() KPI after reverting of destroy_dev()kib2007-07-051-8/+9
| | | | | | | to not call destroy_dev_sched(). Tested by: Peter Holm Approved by: re (kensmith)
* Use make_dev_credf(MAKEDEV_REF) instead of make_dev() from snp clone handler.kib2007-07-031-3/+4
| | | | | | | Drain clone events and cdev destruction from the module unload handler. Debugging help and testing by: Peter Holm Approved by: re (kensmith)
* Switch to ANSI function declarations.rodrigc2007-03-231-54/+16
|
* Restore the ability to detach from a tty via SIOCSTTY and documentru2005-09-191-5/+5
| | | | | | recent changes in a manpage. Reviewed by: cognet
* Slightly change the API for the SNPSTTY ioctl so that the userland nowcognet2005-09-181-5/+14
| | | | | | | provides a file descriptor instead of a dev_t. Discussed with: phk MFC after: 3 days
* Merge the dev_clone and dev_clone_cred event handlers into a singlerwatson2005-08-081-2/+3
| | | | | | | | | | | | | event handler, dev_clone, which accepts a credential argument. Implementors of the event can ignore it if they're not interested, and most do. This avoids having multiple event handler types and fall-back/precedence logic in devfs. This changes the kernel API for /dev cloning, and may affect third party packages containg cloning kernel modules. Requested by: phk MFC after: 3 days
* Explicitly hold a reference to the cdev we have just cloned. Thisphk2005-03-311-1/+3
| | | | | closes the race where the cdev was reclaimed before it ever made it back to devfs lookup.
* Disable two users of findcdev. They do the wrong thing now and willphk2005-03-151-0/+4
| | | | | need to be fixed. In both cases the API should be reengineered to do something (more) sensible.
* Start each of the license/copyright comments with /*-, minor shuffle of linesimp2005-01-061-1/+1
|
* Include fcntl.h not vnode.h.phk2004-12-221-2/+3
| | | | | Include uio.h instead of relying on vnode.h to do so. Check O_NONBLOCK not IO_NDELAY.
* Walk through the snp softc list instead of abusing tp->ts_c to find thecognet2004-11-051-8/+17
| | | | | snp attached to a tty. This fixes the panic that happens when using snp.
* Hold thread reference while we frob cdevsw.phk2004-09-241-3/+9
|
* Preparation commit for the tty cleanups that will follow in the nearphk2004-07-151-1/+1
| | | | | | | | | future: rename ttyopen() -> tty_open() and ttyclose() -> tty_close(). We need the ttyopen() and ttyclose() for the new generic cdevsw functions for tty devices in order to have consistent naming.
* Do a pass over all modules in the kernel and make them return EOPNOTSUPPphk2004-07-151-0/+1
| | | | | | | | for unknown events. A number of modules return EINVAL in this instance, and I have left those alone for now and instead taught MOD_QUIESCE to accept this as "didn't do anything".
* Switch snoop device to using C99 initialization for struct linesw.rwatson2004-07-141-2/+8
|
* Second half of the dev_t cleanup.phk2004-06-171-7/+7
| | | | | | | | | | | The big lines are: NODEV -> NULL NOUDEV -> NODEV udev_t -> dev_t udev2dev() -> findcdev() Various minor adjustments including handling of userland access to kernel space struct cdev etc.
* Do the dreaded s/dev_t/struct cdev */phk2004-06-161-12/+12
| | | | Bump __FreeBSD_version accordingly.
* Add missing <sys/module.h> includesphk2004-05-301-0/+1
|
* Add clone_setup() function rather than rely on lazy initialization.phk2004-03-111-0/+1
| | | | Requested by: rwatson
* Don't set d_flags twice. The second setting clobbered D_NOGIANT.bde2004-02-241-2/+1
|
* Device megapatch 5/6:phk2004-02-211-1/+1
| | | | | | | | | | | | Remove the unused second argument from udev2dev(). Convert all remaining users of makedev() to use udev2dev(). The semantic difference is that udev2dev() will only locate a pre-existing dev_t, it will not line makedev() create a new one. Apart from the tiny well controlled windown in D_PSEUDO drivers, there should no longer be any "anonymous" dev_t's in the system now, only dev_t's created with make_dev() and make_dev_alias()
* Device megapatch 4/6:phk2004-02-211-0/+2
| | | | | | | | Introduce d_version field in struct cdevsw, this must always be initialized to D_VERSION. Flip sense of D_NOGIANT flag to D_NEEDGIANT, this involves removing four D_NOGIANT flags and adding 145 D_NEEDGIANT flags.
* Device megapatch 2/6:phk2004-02-211-18/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a couple of functions for pseudodrivers to use for implementing cloning in a manner we will be able to lock down (shortly). Basically what happens is that pseudo drivers get a way to ask for "give me the dev_t with this unit number" or alternatively "give me a dev_t with the lowest guaranteed free unit number" (there is unfortunately a lot of non-POLA in the exact numeric value of this number, just live with it for now) Managing the unit number space this way removes the need to use rman(9) to do so in the drivers this greatly simplifies the code in the drivers because even using rman(9) they still needed to manage their dev_t's anyway. I have taken the if_tun, if_tap, snp and nmdm drivers through the mill, partly because they (ab)used makedev(), but mostly because together they represent three different problems for device-cloning: if_tun and snp is the plain case: just give me a device. if_tap has two kinds of devices, with a flag for device type. nmdm has paired devices (ala pty) can you can clone either of them.
* - Implement selwakeuppri() which allows raising the priority of atanimura2003-11-091-2/+2
| | | | | | | | | | | | | thread being waken up. The thread waken up can run at a priority as high as after tsleep(). - Replace selwakeup()s with selwakeuppri()s and pass appropriate priorities. - Add cv_broadcastpri() which raises the priority of the broadcast threads. Used by selwakeuppri() if collision occurs. Not objected in: -arch, -current
* Use __FBSDID().obrien2003-08-241-1/+3
| | | | Also some minor style cleanups.
* Gigacommit to improve device-driver source compatibility betweenphk2003-03-031-13/+8
| | | | | | | | | | | | | branches: Initialize struct cdevsw using C99 sparse initializtion and remove all initializations to default values. This patch is automatically generated and has been tested by compiling LINT with all the fields in struct cdevsw in reverse order on alpha, sparc64 and i386. Approved by: re(scottl)
* More low-hanging fruit: kill caddr_t in calls to wakeup(9) / [mt]sleep(9).des2003-03-021-3/+3
|
* msgphk2003-02-261-2/+0
|
* Back out M_* changes, per decision of the TRB.imp2003-02-191-4/+4
| | | | Approved by: trb
* Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0.alfred2003-01-211-4/+4
| | | | Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
* Declare the snp ioctl()s to work on udev_t, since that is what theytmm2002-11-111-1/+1
| | | | | | | really do and dev_t is defined differently in kernel and userland. Return a correctly formed udev from SNPGTTY. Reviewed by: dd
* Treat input on the snp device as an `unsigned char'. According to thedd2002-04-101-1/+1
| | | | | | | | submitter, this permits Russian (and probably other locales') characters to be entered via watch(8). PR: 35636 Submitted by: Gleb Smirnoff <glebius@rinet.ru>
* Remove __P.alfred2002-03-201-7/+7
|
* Fixes to make select/poll mpsafe.alfred2002-03-141-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: selwakeup required calling pfind which would cause lock order reversals with the allproc_lock and the per-process filedesc lock. Solution: Instead of recording the pid of the select()'ing process into the selinfo structure, actually record a pointer to the thread. To avoid dereferencing a bad address all the selinfo structures that are in use by a thread are kept in a list hung off the thread (protected by sellock). When a selwakeup occurs the selinfo is removed from that threads list, it is also removed on the way out of select or poll where the thread will traverse its list removing all the selinfos from its own list. Problem: Previously the PROC_LOCK was used to provide the mutual exclusion needed to ensure proper locking, this couldn't work because there was a single condvar used for select and poll and condvars can only be used with a single mutex. Solution: Introduce a global mutex 'sellock' which is used to provide mutual exclusion when recording events to wait on as well as performing notification when an event occurs. Interesting note: schedlock is required to manipulate the per-thread TDF_SELECT flag, however if given its own field it would not need schedlock, also because TDF_SELECT is only manipulated under sellock one doesn't actually use schedlock for syncronization, only to protect against corruption. Proc locks are no longer used in select/poll. Portions contributed by: davidc
* Make the diagnostics printfs less ugly.dd2002-03-111-4/+6
|
* Check the return value of tsleep() in snpread(). This may bedd2001-11-241-1/+4
| | | | | | | | important, since our sleep is interruptable (PCATCH flag). PR: 30985 Discovered by: Vladimir Jakovenko <vovik@lucky.net> Submitted by: Valentin Nechayev <netch@segfault.kiev.ua>
* Return EBUSY if we try to attach to a tty that is already beingdd2001-11-241-0/+2
| | | | | | | | snooped on. This causes all kinds of Bad Things(tm) to happen since closing one session will clobber state that's needed for the other one. This could theoretically be supported if the code was careful, but until somebody implements that, preventing this will stop people from unknowingly shooting themselves in the foot.
* Create a snpbasedev variable which holds a reference to the first snpdd2001-11-241-3/+9
| | | | | | | | | | | | | | | | device cloned, and assign all further devices to depend on it. This allows us to call dev_depends() on it at module unload time to get rid of /dev/snp* (in the devfs case, anyway). For this to work, we must not destroy the device at close time. [Idea stolen from if_tun.] The above has the following sideaffects: (a) The snp device used by watch(8) will remain after watch(8) exits. This is probably how it should have been all along, and how it was before devfs came along. (b) Module unload doesn't panic if there are any /dev/snp* devices which haven't been used (and thus previously destroyed). Thus, we can reenable the unload functionality disabled in rev. 1.65. PR: 32012
* 'error' is now unused, since its only purpose was to catch therwatson2001-11-151-1/+0
| | | | results of suser_td().
* Temporarily disable unloading, as it appears to be broken (read: causesrwatson2001-11-151-0/+2
| | | | panics)
* o Rely on /dev/snp* permissions, rather than using suser() in snpopen()rwatson2001-11-151-3/+0
| | | | | | to prevent inappropriate use of the snoop device. This means that, with appropriate chmod'ing, arbitrary users may make use of the snoop device.
* KSE Milestone 2julian2001-09-121-11/+11
| | | | | | | | | | | | | | Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
OpenPOWER on IntegriCloud