Lines Matching full:cdp
86 struct cdev_priv *cdp; in sysctl_devname() local
103 TAILQ_FOREACH(cdp, &cdevp_list, cdp_list) in sysctl_devname()
104 if (cdp->cdp_inode == ud) { in sysctl_devname()
105 dev = &cdp->cdp_c; in sysctl_devname()
130 struct cdev_priv *cdp; in devfs_alloc() local
134 cdp = malloc(sizeof *cdp, M_CDEVP, M_ZERO | in devfs_alloc()
136 if (cdp == NULL) in devfs_alloc()
139 mtx_init(&cdp->cdp_threadlock, "devthrd", NULL, MTX_DEF); in devfs_alloc()
141 cdp->cdp_dirents = &cdp->cdp_dirent0; in devfs_alloc()
143 cdev = &cdp->cdp_c; in devfs_alloc()
154 struct cdev_priv *cdp; in devfs_dev_exists() local
158 TAILQ_FOREACH(cdp, &cdevp_list, cdp_list) { in devfs_dev_exists()
159 if ((cdp->cdp_flags & CDP_ACTIVE) == 0) in devfs_dev_exists()
161 if (devfs_pathpath(cdp->cdp_c.si_name, name) != 0) in devfs_dev_exists()
163 if (devfs_pathpath(name, cdp->cdp_c.si_name) != 0) in devfs_dev_exists()
175 struct cdev_priv *cdp; in devfs_free() local
177 cdp = cdev2priv(cdev); in devfs_free()
178 KASSERT((cdp->cdp_flags & (CDP_ACTIVE | CDP_ON_ACTIVE_LIST)) == 0, in devfs_free()
179 ("%s: cdp %p (%s) still on active list", in devfs_free()
180 __func__, cdp, cdev->si_name)); in devfs_free()
183 devfs_free_cdp_inode(cdp->cdp_inode); in devfs_free()
184 if (cdp->cdp_maxdirent > 0) in devfs_free()
185 free(cdp->cdp_dirents, M_DEVFS2); in devfs_free()
186 mtx_destroy(&cdp->cdp_threadlock); in devfs_free()
187 free(cdp, M_CDEVP); in devfs_free()
479 devfs_metoo(struct cdev_priv *cdp, struct devfs_mount *dm) in devfs_metoo() argument
487 if (dm->dm_idx <= cdp->cdp_maxdirent) { in devfs_metoo()
493 memcpy(dep, cdp->cdp_dirents, (cdp->cdp_maxdirent + 1) * sizeof *dep); in devfs_metoo()
494 olddep = cdp->cdp_maxdirent > 0 ? cdp->cdp_dirents : NULL; in devfs_metoo()
495 cdp->cdp_dirents = dep; in devfs_metoo()
500 cdp->cdp_maxdirent = dm->dm_idx; in devfs_metoo()
511 struct cdev_priv *cdp; in devfs_populate_loop() local
520 TAILQ_FOREACH(cdp, &cdevp_list, cdp_list) { in devfs_populate_loop()
521 KASSERT(cdp->cdp_dirents != NULL, ("NULL cdp_dirents")); in devfs_populate_loop()
522 KASSERT((cdp->cdp_flags & CDP_ON_ACTIVE_LIST) != 0, in devfs_populate_loop()
523 ("%s: cdp %p (%s) should not be on active list", in devfs_populate_loop()
524 __func__, cdp, cdp->cdp_c.si_name)); in devfs_populate_loop()
530 if ((cleanup || !(cdp->cdp_flags & CDP_ACTIVE)) && in devfs_populate_loop()
531 dm->dm_idx <= cdp->cdp_maxdirent && in devfs_populate_loop()
532 cdp->cdp_dirents[dm->dm_idx] != NULL) { in devfs_populate_loop()
533 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
534 cdp->cdp_dirents[dm->dm_idx] = NULL; in devfs_populate_loop()
535 KASSERT(cdp == de->de_cdp, in devfs_populate_loop()
537 cdp->cdp_c.si_name, cdp, de->de_cdp)); in devfs_populate_loop()
546 cdp->cdp_inuse--; in devfs_populate_loop()
553 if (!(cdp->cdp_flags & CDP_ACTIVE)) { in devfs_populate_loop()
554 if (cdp->cdp_inuse > 0) in devfs_populate_loop()
556 cdp->cdp_flags &= ~CDP_ON_ACTIVE_LIST; in devfs_populate_loop()
557 TAILQ_REMOVE(&cdevp_list, cdp, cdp_list); in devfs_populate_loop()
559 dev_rel(&cdp->cdp_c); in devfs_populate_loop()
567 KASSERT((cdp->cdp_flags & CDP_ACTIVE), ("Bogons, I tell ya'!")); in devfs_populate_loop()
569 if (dm->dm_idx <= cdp->cdp_maxdirent && in devfs_populate_loop()
570 cdp->cdp_dirents[dm->dm_idx] != NULL) { in devfs_populate_loop()
571 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
572 KASSERT(cdp == de->de_cdp, ("inconsistent cdp")); in devfs_populate_loop()
576 cdp->cdp_inuse++; in devfs_populate_loop()
579 if (dm->dm_idx > cdp->cdp_maxdirent) in devfs_populate_loop()
580 devfs_metoo(cdp, dm); in devfs_populate_loop()
583 s = cdp->cdp_c.si_name; in devfs_populate_loop()
603 __func__, cdp->cdp_c.si_name)); in devfs_populate_loop()
611 if (cdp->cdp_c.si_flags & SI_ALIAS) { in devfs_populate_loop()
616 pdev = cdp->cdp_c.si_parent; in devfs_populate_loop()
629 de->de_uid = cdp->cdp_c.si_uid; in devfs_populate_loop()
630 de->de_gid = cdp->cdp_c.si_gid; in devfs_populate_loop()
631 de->de_mode = cdp->cdp_c.si_mode; in devfs_populate_loop()
635 de->de_inode = cdp->cdp_inode; in devfs_populate_loop()
636 de->de_cdp = cdp; in devfs_populate_loop()
638 mac_devfs_create_device(cdp->cdp_c.si_cred, dm->dm_mount, in devfs_populate_loop()
639 &cdp->cdp_c, de); in devfs_populate_loop()
645 /* XXX: could check that cdp is still active here */ in devfs_populate_loop()
646 KASSERT(cdp->cdp_dirents[dm->dm_idx] == NULL, in devfs_populate_loop()
648 cdp->cdp_dirents[dm->dm_idx] = de; in devfs_populate_loop()
704 struct cdev_priv *cdp; in devfs_create() local
707 cdp = cdev2priv(dev); in devfs_create()
708 KASSERT((cdp->cdp_flags & CDP_ON_ACTIVE_LIST) == 0, in devfs_create()
709 ("%s: cdp %p (%s) already on active list", in devfs_create()
710 __func__, cdp, dev->si_name)); in devfs_create()
711 cdp->cdp_flags |= (CDP_ACTIVE | CDP_ON_ACTIVE_LIST); in devfs_create()
712 cdp->cdp_inode = alloc_unrl(devfs_inos); in devfs_create()
714 TAILQ_INSERT_TAIL(&cdevp_list, cdp, cdp_list); in devfs_create()
721 struct cdev_priv *cdp; in devfs_destroy() local
724 cdp = cdev2priv(dev); in devfs_destroy()
725 cdp->cdp_flags &= ~CDP_ACTIVE; in devfs_destroy()