Lines Matching refs:subsys
102 static void nvme_put_subsystem(struct nvme_subsystem *subsys);
375 ida_simple_remove(&head->subsys->ns_ida, head->instance); in nvme_free_ns_head()
378 nvme_put_subsystem(head->subsys); in nvme_free_ns_head()
2071 static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ctrl, in nvme_init_subnqn() argument
2079 strncpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE); in nvme_init_subnqn()
2087 off = snprintf(subsys->subnqn, NVMF_NQN_SIZE, in nvme_init_subnqn()
2090 memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn)); in nvme_init_subnqn()
2092 memcpy(subsys->subnqn + off, id->mn, sizeof(id->mn)); in nvme_init_subnqn()
2094 memset(subsys->subnqn + off, 0, sizeof(subsys->subnqn) - off); in nvme_init_subnqn()
2097 static void __nvme_release_subsystem(struct nvme_subsystem *subsys) in __nvme_release_subsystem() argument
2099 ida_simple_remove(&nvme_subsystems_ida, subsys->instance); in __nvme_release_subsystem()
2100 kfree(subsys); in __nvme_release_subsystem()
2110 struct nvme_subsystem *subsys = in nvme_destroy_subsystem() local
2114 list_del(&subsys->entry); in nvme_destroy_subsystem()
2117 ida_destroy(&subsys->ns_ida); in nvme_destroy_subsystem()
2118 device_del(&subsys->dev); in nvme_destroy_subsystem()
2119 put_device(&subsys->dev); in nvme_destroy_subsystem()
2122 static void nvme_put_subsystem(struct nvme_subsystem *subsys) in nvme_put_subsystem() argument
2124 kref_put(&subsys->ref, nvme_destroy_subsystem); in nvme_put_subsystem()
2129 struct nvme_subsystem *subsys; in __nvme_find_get_subsystem() local
2133 list_for_each_entry(subsys, &nvme_subsystems, entry) { in __nvme_find_get_subsystem()
2134 if (strcmp(subsys->subnqn, subsysnqn)) in __nvme_find_get_subsystem()
2136 if (!kref_get_unless_zero(&subsys->ref)) in __nvme_find_get_subsystem()
2138 return subsys; in __nvme_find_get_subsystem()
2152 struct nvme_subsystem *subsys = in nvme_subsys_show_nqn() local
2155 return snprintf(buf, PAGE_SIZE, "%s\n", subsys->subnqn); in nvme_subsys_show_nqn()
2163 struct nvme_subsystem *subsys = \
2166 (int)sizeof(subsys->field), subsys->field); \
2191 static int nvme_active_ctrls(struct nvme_subsystem *subsys) in nvme_active_ctrls() argument
2196 mutex_lock(&subsys->lock); in nvme_active_ctrls()
2197 list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { in nvme_active_ctrls()
2202 mutex_unlock(&subsys->lock); in nvme_active_ctrls()
2209 struct nvme_subsystem *subsys, *found; in nvme_init_subsystem() local
2212 subsys = kzalloc(sizeof(*subsys), GFP_KERNEL); in nvme_init_subsystem()
2213 if (!subsys) in nvme_init_subsystem()
2217 kfree(subsys); in nvme_init_subsystem()
2220 subsys->instance = ret; in nvme_init_subsystem()
2221 mutex_init(&subsys->lock); in nvme_init_subsystem()
2222 kref_init(&subsys->ref); in nvme_init_subsystem()
2223 INIT_LIST_HEAD(&subsys->ctrls); in nvme_init_subsystem()
2224 INIT_LIST_HEAD(&subsys->nsheads); in nvme_init_subsystem()
2225 nvme_init_subnqn(subsys, ctrl, id); in nvme_init_subsystem()
2226 memcpy(subsys->serial, id->sn, sizeof(subsys->serial)); in nvme_init_subsystem()
2227 memcpy(subsys->model, id->mn, sizeof(subsys->model)); in nvme_init_subsystem()
2228 memcpy(subsys->firmware_rev, id->fr, sizeof(subsys->firmware_rev)); in nvme_init_subsystem()
2229 subsys->vendor_id = le16_to_cpu(id->vid); in nvme_init_subsystem()
2230 subsys->cmic = id->cmic; in nvme_init_subsystem()
2232 subsys->dev.class = nvme_subsys_class; in nvme_init_subsystem()
2233 subsys->dev.release = nvme_release_subsystem; in nvme_init_subsystem()
2234 subsys->dev.groups = nvme_subsys_attrs_groups; in nvme_init_subsystem()
2235 dev_set_name(&subsys->dev, "nvme-subsys%d", subsys->instance); in nvme_init_subsystem()
2236 device_initialize(&subsys->dev); in nvme_init_subsystem()
2239 found = __nvme_find_get_subsystem(subsys->subnqn); in nvme_init_subsystem()
2255 __nvme_release_subsystem(subsys); in nvme_init_subsystem()
2256 subsys = found; in nvme_init_subsystem()
2258 ret = device_add(&subsys->dev); in nvme_init_subsystem()
2264 ida_init(&subsys->ns_ida); in nvme_init_subsystem()
2265 list_add_tail(&subsys->entry, &nvme_subsystems); in nvme_init_subsystem()
2268 ctrl->subsys = subsys; in nvme_init_subsystem()
2271 if (sysfs_create_link(&subsys->dev.kobj, &ctrl->device->kobj, in nvme_init_subsystem()
2279 mutex_lock(&subsys->lock); in nvme_init_subsystem()
2280 list_add_tail(&ctrl->subsys_entry, &subsys->ctrls); in nvme_init_subsystem()
2281 mutex_unlock(&subsys->lock); in nvme_init_subsystem()
2287 put_device(&subsys->dev); in nvme_init_subsystem()
2625 struct nvme_subsystem *subsys = head->subsys; in wwid_show() local
2626 int serial_len = sizeof(subsys->serial); in wwid_show()
2627 int model_len = sizeof(subsys->model); in wwid_show()
2638 while (serial_len > 0 && (subsys->serial[serial_len - 1] == ' ' || in wwid_show()
2639 subsys->serial[serial_len - 1] == '\0')) in wwid_show()
2641 while (model_len > 0 && (subsys->model[model_len - 1] == ' ' || in wwid_show()
2642 subsys->model[model_len - 1] == '\0')) in wwid_show()
2645 return sprintf(buf, "nvme.%04x-%*phN-%*phN-%08x\n", subsys->vendor_id, in wwid_show()
2646 serial_len, subsys->serial, model_len, subsys->model, in wwid_show()
2743 (int)sizeof(ctrl->subsys->field), ctrl->subsys->field); \
2814 return snprintf(buf, PAGE_SIZE, "%s\n", ctrl->subsys->subnqn); in nvme_sysfs_show_subsysnqn()
2867 static struct nvme_ns_head *__nvme_find_ns_head(struct nvme_subsystem *subsys, in __nvme_find_ns_head() argument
2872 lockdep_assert_held(&subsys->lock); in __nvme_find_ns_head()
2874 list_for_each_entry(h, &subsys->nsheads, entry) { in __nvme_find_ns_head()
2882 static int __nvme_check_ids(struct nvme_subsystem *subsys, in __nvme_check_ids() argument
2887 lockdep_assert_held(&subsys->lock); in __nvme_check_ids()
2889 list_for_each_entry(h, &subsys->nsheads, entry) { in __nvme_check_ids()
2908 ret = ida_simple_get(&ctrl->subsys->ns_ida, 1, 0, GFP_KERNEL); in nvme_alloc_ns_head()
2916 head->subsys = ctrl->subsys; in nvme_alloc_ns_head()
2922 ret = __nvme_check_ids(ctrl->subsys, head); in nvme_alloc_ns_head()
2933 list_add_tail(&head->entry, &ctrl->subsys->nsheads); in nvme_alloc_ns_head()
2935 kref_get(&ctrl->subsys->ref); in nvme_alloc_ns_head()
2941 ida_simple_remove(&ctrl->subsys->ns_ida, head->instance); in nvme_alloc_ns_head()
2956 mutex_lock(&ctrl->subsys->lock); in nvme_init_ns_head()
2958 head = __nvme_find_ns_head(ctrl->subsys, nsid); in nvme_init_ns_head()
2982 mutex_unlock(&ctrl->subsys->lock); in nvme_init_ns_head()
3117 mutex_lock(&ctrl->subsys->lock); in nvme_alloc_ns()
3119 mutex_unlock(&ctrl->subsys->lock); in nvme_alloc_ns()
3145 mutex_lock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
3148 mutex_unlock(&ns->ctrl->subsys->lock); in nvme_ns_remove()
3495 struct nvme_subsystem *subsys = ctrl->subsys; in nvme_free_ctrl() local
3501 if (subsys) { in nvme_free_ctrl()
3502 mutex_lock(&subsys->lock); in nvme_free_ctrl()
3504 mutex_unlock(&subsys->lock); in nvme_free_ctrl()
3505 sysfs_remove_link(&subsys->dev.kobj, dev_name(ctrl->device)); in nvme_free_ctrl()
3510 if (subsys) in nvme_free_ctrl()
3511 nvme_put_subsystem(subsys); in nvme_free_ctrl()