MCPcopy Create free account
hub / github.com/F-Stack/f-stack / make_dev_sv

Function make_dev_sv

freebsd/kern/kern_conf.c:775–840  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

773}
774
775static int
776make_dev_sv(struct make_dev_args *args1, struct cdev **dres,
777 const char *fmt, va_list ap)
778{
779 struct cdev *dev, *dev_new;
780 struct make_dev_args args;
781 int res;
782
783 bzero(&args, sizeof(args));
784 if (sizeof(args) < args1->mda_size)
785 return (EINVAL);
786 bcopy(args1, &args, args1->mda_size);
787 KASSERT((args.mda_flags & MAKEDEV_WAITOK) == 0 ||
788 (args.mda_flags & MAKEDEV_NOWAIT) == 0,
789 ("make_dev_sv: both WAITOK and NOWAIT specified"));
790 dev_new = devfs_alloc(args.mda_flags);
791 if (dev_new == NULL)
792 return (ENOMEM);
793 dev_lock();
794 res = prep_cdevsw(args.mda_devsw, args.mda_flags);
795 if (res != 0) {
796 dev_unlock();
797 devfs_free(dev_new);
798 return (res);
799 }
800 dev = newdev(&args, dev_new);
801 if ((dev->si_flags & SI_NAMED) == 0) {
802 res = prep_devname(dev, fmt, ap);
803 if (res != 0) {
804 if ((args.mda_flags & MAKEDEV_CHECKNAME) == 0) {
805 panic(
806 "make_dev_sv: bad si_name (error=%d, si_name=%s)",
807 res, dev->si_name);
808 }
809 if (dev == dev_new) {
810 LIST_REMOVE(dev, si_list);
811 dev_unlock();
812 devfs_free(dev);
813 } else
814 dev_unlock();
815 return (res);
816 }
817 }
818 if ((args.mda_flags & MAKEDEV_REF) != 0)
819 dev_refl(dev);
820 if ((args.mda_flags & MAKEDEV_ETERNAL) != 0)
821 dev->si_flags |= SI_ETERNAL;
822 KASSERT(!(dev->si_flags & SI_NAMED),
823 ("make_dev() by driver %s on pre-existing device (min=%x, name=%s)",
824 args.mda_devsw->d_name, dev2unit(dev), devtoname(dev)));
825 dev->si_flags |= SI_NAMED;
826 if (args.mda_cr != NULL)
827 dev->si_cred = crhold(args.mda_cr);
828 dev->si_uid = args.mda_uid;
829 dev->si_gid = args.mda_gid;
830 dev->si_mode = args.mda_mode;
831
832 devfs_create(dev);

Callers 2

make_dev_sFunction · 0.85
make_dev_credvFunction · 0.85

Calls 13

bzeroFunction · 0.85
dev_lockFunction · 0.85
prep_cdevswFunction · 0.85
dev_unlockFunction · 0.85
newdevFunction · 0.85
prep_devnameFunction · 0.85
dev_reflFunction · 0.85
clean_unrhdrlFunction · 0.85
dev_unlock_and_freeFunction · 0.85
notify_createFunction · 0.85
panicFunction · 0.70
devtonameFunction · 0.70

Tested by

no test coverage detected