Lines Matching refs:asdev

277 #define AUDIT_SDEV_LOCK(asdev)          mtx_lock(&(asdev)->asdev_mtx)  argument
278 #define AUDIT_SDEV_LOCK_ASSERT(asdev) mtx_assert(&(asdev)->asdev_mtx, \ argument
280 #define AUDIT_SDEV_LOCK_DESTROY(asdev) mtx_destroy(&(asdev)->asdev_mtx) argument
281 #define AUDIT_SDEV_LOCK_INIT(asdev) mtx_init(&(asdev)->asdev_mtx, \ argument
283 #define AUDIT_SDEV_UNLOCK(asdev) mtx_unlock(&(asdev)->asdev_mtx) argument
284 #define AUDIT_SDEV_MTX(asdev) (&(asdev)->asdev_mtx) argument
1514 audit_sdev_append(struct audit_sdev *asdev, void *record, u_int record_len) in audit_sdev_append() argument
1518 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_append()
1520 if (asdev->asdev_qlen >= asdev->asdev_qlimit) { in audit_sdev_append()
1521 asdev->asdev_drops++; in audit_sdev_append()
1528 asdev->asdev_drops++; in audit_sdev_append()
1536 asdev->asdev_drops++; in audit_sdev_append()
1544 TAILQ_INSERT_TAIL(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_append()
1545 asdev->asdev_inserts++; in audit_sdev_append()
1546 asdev->asdev_qlen++; in audit_sdev_append()
1547 asdev->asdev_qbyteslen += ase->ase_record_len; in audit_sdev_append()
1548 selwakeup(&asdev->asdev_selinfo); in audit_sdev_append()
1549 if (asdev->asdev_flags & AUDIT_SDEV_ASYNC) { in audit_sdev_append()
1550 pgsigio(asdev->asdev_sigio, SIGIO); in audit_sdev_append()
1553 cv_broadcast(&asdev->asdev_cv); in audit_sdev_append()
1563 struct audit_sdev *asdev; in audit_sdev_submit() local
1574 TAILQ_FOREACH(asdev, &audit_sdev_list, asdev_list) { in audit_sdev_submit()
1575 AUDIT_SDEV_LOCK(asdev); in audit_sdev_submit()
1583 asid == asdev->asdev_asid) || in audit_sdev_submit()
1584 (asdev->asdev_flags & AUDIT_SDEV_ALLSESSIONS) != 0) { in audit_sdev_submit()
1585 audit_sdev_append(asdev, record, record_len); in audit_sdev_submit()
1587 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_submit()
1602 struct audit_sdev *asdev; in audit_sdev_alloc() local
1606 asdev = kalloc_type(struct audit_sdev, Z_ZERO | Z_WAITOK | Z_NOFAIL); in audit_sdev_alloc()
1607 asdev->asdev_qlimit = AUDIT_SDEV_QLIMIT_DEFAULT; in audit_sdev_alloc()
1608 TAILQ_INIT(&asdev->asdev_queue); in audit_sdev_alloc()
1609 AUDIT_SDEV_LOCK_INIT(asdev); in audit_sdev_alloc()
1610 AUDIT_SDEV_SX_LOCK_INIT(asdev); in audit_sdev_alloc()
1611 cv_init(&asdev->asdev_cv, "audit_sdev_cv"); in audit_sdev_alloc()
1616 TAILQ_INSERT_HEAD(&audit_sdev_list, asdev, asdev_list); in audit_sdev_alloc()
1620 return asdev; in audit_sdev_alloc()
1627 audit_sdev_flush(struct audit_sdev *asdev) in audit_sdev_flush() argument
1631 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_flush()
1633 while ((ase = TAILQ_FIRST(&asdev->asdev_queue)) != NULL) { in audit_sdev_flush()
1634 TAILQ_REMOVE(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_flush()
1635 asdev->asdev_qbyteslen -= ase->ase_record_len; in audit_sdev_flush()
1637 asdev->asdev_qlen--; in audit_sdev_flush()
1639 asdev->asdev_qoffset = 0; in audit_sdev_flush()
1641 KASSERT(0 == asdev->asdev_qlen, ("audit_sdev_flush: asdev_qlen")); in audit_sdev_flush()
1642 KASSERT(0 == asdev->asdev_qbyteslen, in audit_sdev_flush()
1650 audit_sdev_free(struct audit_sdev *asdev) in audit_sdev_free() argument
1653 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_free()
1656 audit_sdev_flush(asdev); in audit_sdev_free()
1657 cv_destroy(&asdev->asdev_cv); in audit_sdev_free()
1658 AUDIT_SDEV_SX_LOCK_DESTROY(asdev); in audit_sdev_free()
1659 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_free()
1660 AUDIT_SDEV_LOCK_DESTROY(asdev); in audit_sdev_free()
1662 TAILQ_REMOVE(&audit_sdev_list, asdev, asdev_list); in audit_sdev_free()
1663 kfree_type(struct audit_sdev, asdev); in audit_sdev_free()
1694 struct audit_sdev *asdev; in audit_sdev_open() local
1706 asdev = audit_sdev_dtab[u]; in audit_sdev_open()
1707 if (NULL == asdev) { in audit_sdev_open()
1708 asdev = audit_sdev_alloc(); in audit_sdev_open()
1709 if (NULL == asdev) { in audit_sdev_open()
1713 audit_sdev_dtab[u] = asdev; in audit_sdev_open()
1715 KASSERT(asdev->asdev_open, ("audit_sdev_open: Already open")); in audit_sdev_open()
1719 asdev->asdev_open = 1; in audit_sdev_open()
1720 asdev->asdev_auid = aia.ai_auid; in audit_sdev_open()
1721 asdev->asdev_asid = aia.ai_asid; in audit_sdev_open()
1722 asdev->asdev_flags = 0; in audit_sdev_open()
1736 struct audit_sdev *asdev; in audit_sdev_close() local
1740 asdev = audit_sdev_dtab[u]; in audit_sdev_close()
1742 KASSERT(asdev != NULL, ("audit_sdev_close: asdev == NULL")); in audit_sdev_close()
1743 KASSERT(asdev->asdev_open, ("audit_sdev_close: !asdev_open")); in audit_sdev_close()
1746 AUDIT_SDEV_LOCK(asdev); in audit_sdev_close()
1747 asdev->asdev_open = 0; in audit_sdev_close()
1748 audit_sdev_free(asdev); /* sdev lock unlocked in audit_sdev_free() */ in audit_sdev_close()
1762 struct audit_sdev *asdev; in audit_sdev_ioctl() local
1765 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_ioctl()
1766 KASSERT(asdev != NULL, ("audit_sdev_ioctl: asdev == NULL")); in audit_sdev_ioctl()
1772 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1774 asdev->asdev_flags |= AUDIT_SDEV_NBIO; in audit_sdev_ioctl()
1776 asdev->asdev_flags &= ~AUDIT_SDEV_NBIO; in audit_sdev_ioctl()
1778 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1782 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1783 *(int *)data = asdev->asdev_qbyteslen - asdev->asdev_qoffset; in audit_sdev_ioctl()
1784 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1788 *(u_int *)data = asdev->asdev_qlen; in audit_sdev_ioctl()
1792 *(u_int *)data = asdev->asdev_qlimit; in audit_sdev_ioctl()
1798 asdev->asdev_qlimit = *(u_int *)data; in audit_sdev_ioctl()
1813 if (AUDIT_SDEV_SX_XLOCK_SIG(asdev) != 0) { in audit_sdev_ioctl()
1816 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1817 audit_sdev_flush(asdev); in audit_sdev_ioctl()
1818 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1819 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_ioctl()
1828 *(u_int *)data = asdev->asdev_inserts; in audit_sdev_ioctl()
1832 *(u_int *)data = asdev->asdev_reads; in audit_sdev_ioctl()
1836 *(u_int *)data = asdev->asdev_drops; in audit_sdev_ioctl()
1844 *(u_int *)data = (asdev->asdev_flags & AUDIT_SDEV_ALLSESSIONS) ? in audit_sdev_ioctl()
1854 AUDIT_SDEV_LOCK(asdev); in audit_sdev_ioctl()
1856 asdev->asdev_flags |= AUDIT_SDEV_ALLSESSIONS; in audit_sdev_ioctl()
1858 asdev->asdev_flags &= ~AUDIT_SDEV_ALLSESSIONS; in audit_sdev_ioctl()
1860 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_ioctl()
1877 struct audit_sdev *asdev; in audit_sdev_read() local
1881 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_read()
1882 KASSERT(NULL != asdev, ("audit_sdev_read: asdev == NULL")); in audit_sdev_read()
1888 if (0 != AUDIT_SDEV_SX_XLOCK_SIG(asdev)) { in audit_sdev_read()
1891 AUDIT_SDEV_LOCK(asdev); in audit_sdev_read()
1892 while (TAILQ_EMPTY(&asdev->asdev_queue)) { in audit_sdev_read()
1893 if (asdev->asdev_flags & AUDIT_SDEV_NBIO) { in audit_sdev_read()
1894 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1895 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1898 error = cv_wait_sig(&asdev->asdev_cv, AUDIT_SDEV_MTX(asdev)); in audit_sdev_read()
1900 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1901 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1913 asdev->asdev_reads++; in audit_sdev_read()
1914 while ((ase = TAILQ_FIRST(&asdev->asdev_queue)) != NULL && in audit_sdev_read()
1916 AUDIT_SDEV_LOCK_ASSERT(asdev); in audit_sdev_read()
1918 KASSERT(ase->ase_record_len > asdev->asdev_qoffset, in audit_sdev_read()
1920 toread = MIN((int)(ase->ase_record_len - asdev->asdev_qoffset), in audit_sdev_read()
1922 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1923 error = uiomove((char *) ase->ase_record + asdev->asdev_qoffset, in audit_sdev_read()
1926 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1934 AUDIT_SDEV_LOCK(asdev); in audit_sdev_read()
1935 KASSERT(TAILQ_FIRST(&asdev->asdev_queue) == ase, in audit_sdev_read()
1937 asdev->asdev_qoffset += toread; in audit_sdev_read()
1938 KASSERT(ase->ase_record_len >= asdev->asdev_qoffset, in audit_sdev_read()
1940 if (asdev->asdev_qoffset == ase->ase_record_len) { in audit_sdev_read()
1941 TAILQ_REMOVE(&asdev->asdev_queue, ase, ase_queue); in audit_sdev_read()
1942 asdev->asdev_qbyteslen -= ase->ase_record_len; in audit_sdev_read()
1944 asdev->asdev_qlen--; in audit_sdev_read()
1945 asdev->asdev_qoffset = 0; in audit_sdev_read()
1948 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_read()
1949 AUDIT_SDEV_SX_XUNLOCK(asdev); in audit_sdev_read()
1959 struct audit_sdev *asdev; in audit_sdev_poll() local
1963 asdev = audit_sdev_dtab[minor(dev)]; in audit_sdev_poll()
1964 KASSERT(NULL != asdev, ("audit_sdev_poll: asdev == NULL")); in audit_sdev_poll()
1967 AUDIT_SDEV_LOCK(asdev); in audit_sdev_poll()
1968 if (NULL != TAILQ_FIRST(&asdev->asdev_queue)) { in audit_sdev_poll()
1971 selrecord(p, &asdev->asdev_selinfo, wql); in audit_sdev_poll()
1973 AUDIT_SDEV_UNLOCK(asdev); in audit_sdev_poll()