/* * Allocate quota master target and initialize it. * * \param env - is the environment passed by the caller * \param ldt - is the device type structure associated with the qmt * \param cfg - is the configuration record used to configure the qmt * * \retval - lu_device structure associated with the qmt on success, * appropriate error on failure */ static struct lu_device *qmt_device_alloc(const struct lu_env *env, struct lu_device_type *ldt, struct lustre_cfg *cfg) { struct qmt_device *qmt; struct lu_device *ld; int rc; ENTRY; /* allocate qmt device */ OBD_ALLOC_PTR(qmt); if (qmt == NULL) RETURN(ERR_PTR(-ENOMEM)); /* configure lu/dt_device */ ld = qmt2lu_dev(qmt); dt_device_init(&qmt->qmt_dt_dev, ldt); ld->ld_ops = &qmt_lu_ops; /* initialize qmt device */ rc = qmt_device_init0(env, qmt, ldt, cfg); if (rc != 0) { qmt_device_free(env, ld); RETURN(ERR_PTR(rc)); } RETURN(ld); }
static struct virtio_device *virtio_mmio_dt_bind(u32 devid) { struct virtio_mmio_device *vm_dev; struct dt_device dt_dev; struct dt_bus dt_bus; struct vm_dt_info info; int node; if (!dt_available()) return NULL; dt_bus_init_defaults(&dt_bus); dt_bus.match = vm_dt_match; info.devid = devid; dt_device_init(&dt_dev, &dt_bus, &info); node = dt_device_find_compatible(&dt_dev, "virtio,mmio"); assert(node >= 0 || node == -FDT_ERR_NOTFOUND); if (node == -FDT_ERR_NOTFOUND) return NULL; vm_dev = calloc(1, sizeof(*vm_dev)); if (!vm_dev) return NULL; vm_dev->base = info.base; vm_device_init(vm_dev); return &vm_dev->vdev; }