Lines Matching refs:asdev
282 #define AUDIT_SDEV_LOCK(asdev) mtx_lock(&(asdev)->asdev_mtx) argument
283 #define AUDIT_SDEV_LOCK_ASSERT(asdev) mtx_assert(&(asdev)->asdev_mtx, \ argument
285 #define AUDIT_SDEV_LOCK_DESTROY(asdev) mtx_destroy(&(asdev)->asdev_mtx) argument
286 #define AUDIT_SDEV_LOCK_INIT(asdev) mtx_init(&(asdev)->asdev_mtx, \ argument
288 #define AUDIT_SDEV_UNLOCK(asdev) mtx_unlock(&(asdev)->asdev_mtx) argument
289 #define AUDIT_SDEV_MTX(asdev) (&(asdev)->asdev_mtx) argument
1520 audit_sdev_append(struct audit_sdev *asdev, void *record, u_int record_len) in audit_sdev_append() argument
1524 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_append()
1526 if (asdev->asdev_qlen >= asdev->asdev_qlimit) { in audit_sdev_append()
1527 asdev->asdev_drops++; in audit_sdev_append()
1534 asdev->asdev_drops++; in audit_sdev_append()
1542 asdev->asdev_drops++; in audit_sdev_append()
1550 TAILQ_INSERT_TAIL(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_append()
1551 asdev->asdev_inserts++; in audit_sdev_append()
1552 asdev->asdev_qlen++; in audit_sdev_append()
1553 asdev->asdev_qbyteslen += ase->ase_record_len; in audit_sdev_append()
1554 selwakeup(&asdev->asdev_selinfo); in audit_sdev_append()
1555 if (asdev->asdev_flags & AUDIT_SDEV_ASYNC) { in audit_sdev_append()
1556 pgsigio(asdev->asdev_sigio, SIGIO); in audit_sdev_append()
1559 cv_broadcast(&asdev->asdev_cv); in audit_sdev_append()
1569 struct audit_sdev *asdev; in audit_sdev_submit() local
1580 TAILQ_FOREACH(asdev, &audit_sdev_list, asdev_list) { in audit_sdev_submit()
1581 AUDIT_SDEV_LOCK(asdev); in audit_sdev_submit()
1589 asid == asdev->asdev_asid) || in audit_sdev_submit()
1590 (asdev->asdev_flags & AUDIT_SDEV_ALLSESSIONS) != 0) { in audit_sdev_submit()
1591 audit_sdev_append(asdev, record, record_len); in audit_sdev_submit()
1593 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_submit()
1608 struct audit_sdev *asdev; in audit_sdev_alloc() local
1612 asdev = kalloc_type(struct audit_sdev, Z_ZERO | Z_WAITOK | Z_NOFAIL); in audit_sdev_alloc()
1613 asdev->asdev_qlimit = AUDIT_SDEV_QLIMIT_DEFAULT; in audit_sdev_alloc()
1614 TAILQ_INIT(&asdev->asdev_queue); in audit_sdev_alloc()
1615 AUDIT_SDEV_LOCK_INIT(asdev); in audit_sdev_alloc()
1616 AUDIT_SDEV_SX_LOCK_INIT(asdev); in audit_sdev_alloc()
1617 cv_init(&asdev->asdev_cv, "audit_sdev_cv"); in audit_sdev_alloc()
1622 TAILQ_INSERT_HEAD(&audit_sdev_list, asdev, asdev_list); in audit_sdev_alloc()
1626 return asdev; in audit_sdev_alloc()
1633 audit_sdev_flush(struct audit_sdev *asdev) in audit_sdev_flush() argument
1637 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_flush()
1639 while ((ase = TAILQ_FIRST(&asdev->asdev_queue)) != NULL) { in audit_sdev_flush()
1640 TAILQ_REMOVE(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_flush()
1641 asdev->asdev_qbyteslen -= ase->ase_record_len; in audit_sdev_flush()
1643 asdev->asdev_qlen--; in audit_sdev_flush()
1645 asdev->asdev_qoffset = 0; in audit_sdev_flush()
1647 KASSERT(0 == asdev->asdev_qlen, ("audit_sdev_flush: asdev_qlen")); in audit_sdev_flush()
1648 KASSERT(0 == asdev->asdev_qbyteslen, in audit_sdev_flush()
1656 audit_sdev_free(struct audit_sdev *asdev) in audit_sdev_free() argument
1659 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_free()
1662 audit_sdev_flush(asdev); in audit_sdev_free()
1663 cv_destroy(&asdev->asdev_cv); in audit_sdev_free()
1664 AUDIT_SDEV_SX_LOCK_DESTROY(asdev); in audit_sdev_free()
1665 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_free()
1666 AUDIT_SDEV_LOCK_DESTROY(asdev); in audit_sdev_free()
1668 TAILQ_REMOVE(&audit_sdev_list, asdev, asdev_list); in audit_sdev_free()
1669 kfree_type(struct audit_sdev, asdev); in audit_sdev_free()
1700 struct audit_sdev *asdev; in audit_sdev_open() local
1712 asdev = audit_sdev_dtab[u]; in audit_sdev_open()
1713 if (NULL == asdev) { in audit_sdev_open()
1714 asdev = audit_sdev_alloc(); in audit_sdev_open()
1715 if (NULL == asdev) { in audit_sdev_open()
1719 audit_sdev_dtab[u] = asdev; in audit_sdev_open()
1721 KASSERT(asdev->asdev_open, ("audit_sdev_open: Already open")); in audit_sdev_open()
1725 asdev->asdev_open = 1; in audit_sdev_open()
1726 asdev->asdev_auid = aia.ai_auid; in audit_sdev_open()
1727 asdev->asdev_asid = aia.ai_asid; in audit_sdev_open()
1728 asdev->asdev_flags = 0; in audit_sdev_open()
1742 struct audit_sdev *asdev; in audit_sdev_close() local
1746 asdev = audit_sdev_dtab[u]; in audit_sdev_close()
1748 KASSERT(asdev != NULL, ("audit_sdev_close: asdev == NULL")); in audit_sdev_close()
1749 KASSERT(asdev->asdev_open, ("audit_sdev_close: !asdev_open")); in audit_sdev_close()
1752 AUDIT_SDEV_LOCK(asdev); in audit_sdev_close()
1753 asdev->asdev_open = 0; in audit_sdev_close()
1754 audit_sdev_free(asdev); /* sdev lock unlocked in audit_sdev_free() */ in audit_sdev_close()
1768 struct audit_sdev *asdev; in audit_sdev_ioctl() local
1771 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_ioctl()
1772 KASSERT(asdev != NULL, ("audit_sdev_ioctl: asdev == NULL")); in audit_sdev_ioctl()
1778 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1780 asdev->asdev_flags |= AUDIT_SDEV_NBIO; in audit_sdev_ioctl()
1782 asdev->asdev_flags &= ~AUDIT_SDEV_NBIO; in audit_sdev_ioctl()
1784 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1788 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1789 *(int *)data = asdev->asdev_qbyteslen - asdev->asdev_qoffset; in audit_sdev_ioctl()
1790 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1794 *(u_int *)data = asdev->asdev_qlen; in audit_sdev_ioctl()
1798 *(u_int *)data = asdev->asdev_qlimit; in audit_sdev_ioctl()
1804 asdev->asdev_qlimit = *(u_int *)data; in audit_sdev_ioctl()
1819 if (AUDIT_SDEV_SX_XLOCK_SIG(asdev) != 0) { in audit_sdev_ioctl()
1822 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1823 audit_sdev_flush(asdev); in audit_sdev_ioctl()
1824 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1825 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_ioctl()
1834 *(u_int *)data = asdev->asdev_inserts; in audit_sdev_ioctl()
1838 *(u_int *)data = asdev->asdev_reads; in audit_sdev_ioctl()
1842 *(u_int *)data = asdev->asdev_drops; in audit_sdev_ioctl()
1850 *(u_int *)data = (asdev->asdev_flags & AUDIT_SDEV_ALLSESSIONS) ? in audit_sdev_ioctl()
1860 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1862 asdev->asdev_flags |= AUDIT_SDEV_ALLSESSIONS; in audit_sdev_ioctl()
1864 asdev->asdev_flags &= ~AUDIT_SDEV_ALLSESSIONS; in audit_sdev_ioctl()
1866 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1883 struct audit_sdev *asdev; in audit_sdev_read() local
1887 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_read()
1888 KASSERT(NULL != asdev, ("audit_sdev_read: asdev == NULL")); in audit_sdev_read()
1894 if (0 != AUDIT_SDEV_SX_XLOCK_SIG(asdev)) { in audit_sdev_read()
1897 AUDIT_SDEV_LOCK(asdev); in audit_sdev_read()
1898 while (TAILQ_EMPTY(&asdev->asdev_queue)) { in audit_sdev_read()
1899 if (asdev->asdev_flags & AUDIT_SDEV_NBIO) { in audit_sdev_read()
1900 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1901 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1904 error = cv_wait_sig(&asdev->asdev_cv, AUDIT_SDEV_MTX(asdev)); in audit_sdev_read()
1906 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1907 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1919 asdev->asdev_reads++; in audit_sdev_read()
1920 while ((ase = TAILQ_FIRST(&asdev->asdev_queue)) != NULL && in audit_sdev_read()
1922 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_read()
1924 KASSERT(ase->ase_record_len > asdev->asdev_qoffset, in audit_sdev_read()
1926 toread = MIN((int)(ase->ase_record_len - asdev->asdev_qoffset), in audit_sdev_read()
1928 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1929 error = uiomove((char *) ase->ase_record + asdev->asdev_qoffset, in audit_sdev_read()
1932 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1940 AUDIT_SDEV_LOCK(asdev); in audit_sdev_read()
1941 KASSERT(TAILQ_FIRST(&asdev->asdev_queue) == ase, in audit_sdev_read()
1943 asdev->asdev_qoffset += toread; in audit_sdev_read()
1944 KASSERT(ase->ase_record_len >= asdev->asdev_qoffset, in audit_sdev_read()
1946 if (asdev->asdev_qoffset == ase->ase_record_len) { in audit_sdev_read()
1947 TAILQ_REMOVE(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_read()
1948 asdev->asdev_qbyteslen -= ase->ase_record_len; in audit_sdev_read()
1950 asdev->asdev_qlen--; in audit_sdev_read()
1951 asdev->asdev_qoffset = 0; in audit_sdev_read()
1954 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1955 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1965 struct audit_sdev *asdev; in audit_sdev_poll() local
1969 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_poll()
1970 KASSERT(NULL != asdev, ("audit_sdev_poll: asdev == NULL")); in audit_sdev_poll()
1973 AUDIT_SDEV_LOCK(asdev); in audit_sdev_poll()
1974 if (NULL != TAILQ_FIRST(&asdev->asdev_queue)) { in audit_sdev_poll()
1977 selrecord(p, &asdev->asdev_selinfo, wql); in audit_sdev_poll()
1979 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_poll()