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

Function devmem_create_cdev

freebsd/amd64/vmm/vmm_dev.c:1197–1233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1195};
1196
1197static int
1198devmem_create_cdev(const char *vmname, int segid, char *devname)
1199{
1200 struct devmem_softc *dsc;
1201 struct vmmdev_softc *sc;
1202 struct cdev *cdev;
1203 int error;
1204
1205 error = make_dev_p(MAKEDEV_CHECKNAME, &cdev, &devmemsw, NULL,
1206 UID_ROOT, GID_WHEEL, 0600, "vmm.io/%s.%s", vmname, devname);
1207 if (error)
1208 return (error);
1209
1210 dsc = malloc(sizeof(struct devmem_softc), M_VMMDEV, M_WAITOK | M_ZERO);
1211
1212 mtx_lock(&vmmdev_mtx);
1213 sc = vmmdev_lookup(vmname);
1214 KASSERT(sc != NULL, ("%s: vm %s softc not found", __func__, vmname));
1215 if (sc->cdev == NULL) {
1216 /* virtual machine is being created or destroyed */
1217 mtx_unlock(&vmmdev_mtx);
1218 free(dsc, M_VMMDEV);
1219 destroy_dev_sched_cb(cdev, NULL, 0);
1220 return (ENODEV);
1221 }
1222
1223 dsc->segid = segid;
1224 dsc->name = devname;
1225 dsc->cdev = cdev;
1226 dsc->sc = sc;
1227 SLIST_INSERT_HEAD(&sc->devmem, dsc, link);
1228 mtx_unlock(&vmmdev_mtx);
1229
1230 /* The 'cdev' is ready for use after 'si_drv1' is initialized */
1231 cdev->si_drv1 = dsc;
1232 return (0);
1233}
1234
1235static void
1236devmem_destroy(void *arg)

Callers 1

alloc_memsegFunction · 0.85

Calls 7

make_dev_pFunction · 0.85
mallocFunction · 0.85
vmmdev_lookupFunction · 0.85
destroy_dev_sched_cbFunction · 0.85
mtx_lockFunction · 0.50
mtx_unlockFunction · 0.50
freeFunction · 0.50

Tested by

no test coverage detected