| 960 | } |
| 961 | |
| 962 | static int |
| 963 | make_dev_alias_v(int flags, struct cdev **cdev, struct cdev *pdev, |
| 964 | const char *fmt, va_list ap) |
| 965 | { |
| 966 | struct cdev *dev; |
| 967 | int error; |
| 968 | |
| 969 | KASSERT(pdev != NULL, ("make_dev_alias_v: pdev is NULL")); |
| 970 | KASSERT((flags & MAKEDEV_WAITOK) == 0 || (flags & MAKEDEV_NOWAIT) == 0, |
| 971 | ("make_dev_alias_v: both WAITOK and NOWAIT specified")); |
| 972 | KASSERT((flags & ~(MAKEDEV_WAITOK | MAKEDEV_NOWAIT | |
| 973 | MAKEDEV_CHECKNAME)) == 0, |
| 974 | ("make_dev_alias_v: invalid flags specified (flags=%02x)", flags)); |
| 975 | |
| 976 | dev = devfs_alloc(flags); |
| 977 | if (dev == NULL) |
| 978 | return (ENOMEM); |
| 979 | dev_lock(); |
| 980 | dev->si_flags |= SI_ALIAS; |
| 981 | error = prep_devname(dev, fmt, ap); |
| 982 | if (error != 0) { |
| 983 | if ((flags & MAKEDEV_CHECKNAME) == 0) { |
| 984 | panic("make_dev_alias_v: bad si_name " |
| 985 | "(error=%d, si_name=%s)", error, dev->si_name); |
| 986 | } |
| 987 | dev_unlock(); |
| 988 | devfs_free(dev); |
| 989 | return (error); |
| 990 | } |
| 991 | dev->si_flags |= SI_NAMED; |
| 992 | devfs_create(dev); |
| 993 | dev_dependsl(pdev, dev); |
| 994 | clean_unrhdrl(devfs_inos); |
| 995 | dev_unlock(); |
| 996 | |
| 997 | notify_create(dev, flags); |
| 998 | *cdev = dev; |
| 999 | |
| 1000 | return (0); |
| 1001 | } |
| 1002 | |
| 1003 | struct cdev * |
| 1004 | make_dev_alias(struct cdev *pdev, const char *fmt, ...) |
no test coverage detected