Lines Matching refs:wq
59 static inline bool is_idxd_wq_dmaengine(struct idxd_wq *wq) in is_idxd_wq_dmaengine() argument
61 if (wq->type == IDXD_WQT_KERNEL && in is_idxd_wq_dmaengine()
62 strcmp(wq->name, "dmaengine") == 0) in is_idxd_wq_dmaengine()
67 static inline bool is_idxd_wq_cdev(struct idxd_wq *wq) in is_idxd_wq_cdev() argument
69 return wq->type == IDXD_WQT_USER; in is_idxd_wq_cdev()
84 struct idxd_wq *wq = confdev_to_wq(dev); in idxd_config_bus_match() local
85 struct idxd_device *idxd = wq->idxd; in idxd_config_bus_match()
90 if (wq->state != IDXD_WQ_DISABLED) { in idxd_config_bus_match()
149 struct idxd_wq *wq = confdev_to_wq(dev); in idxd_config_bus_probe() local
150 struct idxd_device *idxd = wq->idxd; in idxd_config_bus_probe()
152 mutex_lock(&wq->wq_lock); in idxd_config_bus_probe()
155 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
160 if (wq->state != IDXD_WQ_DISABLED) { in idxd_config_bus_probe()
161 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
162 dev_warn(dev, "WQ %d already enabled.\n", wq->id); in idxd_config_bus_probe()
166 if (!wq->group) { in idxd_config_bus_probe()
167 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
172 if (strlen(wq->name) == 0) { in idxd_config_bus_probe()
173 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
178 rc = idxd_wq_alloc_resources(wq); in idxd_config_bus_probe()
180 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
189 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
191 wq->id, rc); in idxd_config_bus_probe()
195 rc = idxd_wq_enable(wq); in idxd_config_bus_probe()
197 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
199 wq->id, rc); in idxd_config_bus_probe()
203 rc = idxd_wq_map_portal(wq); in idxd_config_bus_probe()
206 rc = idxd_wq_disable(wq); in idxd_config_bus_probe()
209 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
213 wq->client_count = 0; in idxd_config_bus_probe()
215 dev_info(dev, "wq %s enabled\n", dev_name(&wq->conf_dev)); in idxd_config_bus_probe()
217 if (is_idxd_wq_dmaengine(wq)) { in idxd_config_bus_probe()
218 rc = idxd_register_dma_channel(wq); in idxd_config_bus_probe()
221 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
224 } else if (is_idxd_wq_cdev(wq)) { in idxd_config_bus_probe()
225 rc = idxd_wq_add_cdev(wq); in idxd_config_bus_probe()
228 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
233 mutex_unlock(&wq->wq_lock); in idxd_config_bus_probe()
240 static void disable_wq(struct idxd_wq *wq) in disable_wq() argument
242 struct idxd_device *idxd = wq->idxd; in disable_wq()
245 mutex_lock(&wq->wq_lock); in disable_wq()
246 dev_dbg(dev, "%s removing WQ %s\n", __func__, dev_name(&wq->conf_dev)); in disable_wq()
247 if (wq->state == IDXD_WQ_DISABLED) { in disable_wq()
248 mutex_unlock(&wq->wq_lock); in disable_wq()
252 if (is_idxd_wq_dmaengine(wq)) in disable_wq()
253 idxd_unregister_dma_channel(wq); in disable_wq()
254 else if (is_idxd_wq_cdev(wq)) in disable_wq()
255 idxd_wq_del_cdev(wq); in disable_wq()
257 if (idxd_wq_refcount(wq)) in disable_wq()
259 wq->id, idxd_wq_refcount(wq)); in disable_wq()
261 idxd_wq_unmap_portal(wq); in disable_wq()
263 idxd_wq_drain(wq); in disable_wq()
264 idxd_wq_reset(wq); in disable_wq()
266 idxd_wq_free_resources(wq); in disable_wq()
267 wq->client_count = 0; in disable_wq()
268 mutex_unlock(&wq->wq_lock); in disable_wq()
270 dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev)); in disable_wq()
281 struct idxd_wq *wq = confdev_to_wq(dev); in idxd_config_bus_remove() local
283 disable_wq(wq); in idxd_config_bus_remove()
291 struct idxd_wq *wq = &idxd->wqs[i]; in idxd_config_bus_remove() local
293 if (wq->state == IDXD_WQ_DISABLED) in idxd_config_bus_remove()
297 device_release_driver(&wq->conf_dev); in idxd_config_bus_remove()
303 struct idxd_wq *wq = &idxd->wqs[i]; in idxd_config_bus_remove() local
305 mutex_lock(&wq->wq_lock); in idxd_config_bus_remove()
306 idxd_wq_disable_cleanup(wq); in idxd_config_bus_remove()
307 mutex_unlock(&wq->wq_lock); in idxd_config_bus_remove()
642 struct idxd_wq *wq = &idxd->wqs[i]; in group_work_queues_show() local
644 if (!wq->group) in group_work_queues_show()
647 if (wq->group->id == group->id) in group_work_queues_show()
649 idxd->id, wq->id); in group_work_queues_show()
767 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_clients_show() local
769 return sprintf(buf, "%d\n", wq->client_count); in wq_clients_show()
778 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_state_show() local
780 switch (wq->state) { in wq_state_show()
796 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_group_id_show() local
798 if (wq->group) in wq_group_id_show()
799 return sprintf(buf, "%u\n", wq->group->id); in wq_group_id_show()
808 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_group_id_store() local
809 struct idxd_device *idxd = wq->idxd; in wq_group_id_store()
821 if (wq->state != IDXD_WQ_DISABLED) in wq_group_id_store()
828 if (wq->group) { in wq_group_id_store()
829 wq->group->num_wqs--; in wq_group_id_store()
830 wq->group = NULL; in wq_group_id_store()
836 prevg = wq->group; in wq_group_id_store()
840 wq->group = group; in wq_group_id_store()
851 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_mode_show() local
854 wq_dedicated(wq) ? "dedicated" : "shared"); in wq_mode_show()
861 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_mode_store() local
862 struct idxd_device *idxd = wq->idxd; in wq_mode_store()
867 if (wq->state != IDXD_WQ_DISABLED) in wq_mode_store()
871 set_bit(WQ_FLAG_DEDICATED, &wq->flags); in wq_mode_store()
872 wq->threshold = 0; in wq_mode_store()
886 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_size_show() local
888 return sprintf(buf, "%u\n", wq->size); in wq_size_show()
897 struct idxd_wq *wq = &idxd->wqs[i]; in total_claimed_wq_size() local
899 wq_size += wq->size; in total_claimed_wq_size()
909 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_size_store() local
911 struct idxd_device *idxd = wq->idxd; in wq_size_store()
924 if (size + total_claimed_wq_size(idxd) - wq->size > idxd->max_wq_size) in wq_size_store()
927 wq->size = size; in wq_size_store()
937 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_priority_show() local
939 return sprintf(buf, "%u\n", wq->priority); in wq_priority_show()
946 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_priority_store() local
948 struct idxd_device *idxd = wq->idxd; in wq_priority_store()
958 if (wq->state != IDXD_WQ_DISABLED) in wq_priority_store()
964 wq->priority = prio; in wq_priority_store()
974 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_type_show() local
976 switch (wq->type) { in wq_type_show()
996 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_type_store() local
999 if (wq->state != IDXD_WQ_DISABLED) in wq_type_store()
1002 old_type = wq->type; in wq_type_store()
1004 wq->type = IDXD_WQT_NONE; in wq_type_store()
1006 wq->type = IDXD_WQT_KERNEL; in wq_type_store()
1008 wq->type = IDXD_WQT_USER; in wq_type_store()
1013 if (wq->type != old_type) in wq_type_store()
1014 memset(wq->name, 0, WQ_NAME_SIZE + 1); in wq_type_store()
1025 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_name_show() local
1027 return sprintf(buf, "%s\n", wq->name); in wq_name_show()
1034 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_name_store() local
1036 if (wq->state != IDXD_WQ_DISABLED) in wq_name_store()
1042 memset(wq->name, 0, WQ_NAME_SIZE + 1); in wq_name_store()
1043 strncpy(wq->name, buf, WQ_NAME_SIZE); in wq_name_store()
1044 strreplace(wq->name, '\n', '\0'); in wq_name_store()
1054 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_cdev_minor_show() local
1057 mutex_lock(&wq->wq_lock); in wq_cdev_minor_show()
1058 if (wq->idxd_cdev) in wq_cdev_minor_show()
1059 minor = wq->idxd_cdev->minor; in wq_cdev_minor_show()
1060 mutex_unlock(&wq->wq_lock); in wq_cdev_minor_show()
1088 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_max_transfer_size_show() local
1090 return sprintf(buf, "%llu\n", wq->max_xfer_bytes); in wq_max_transfer_size_show()
1096 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_max_transfer_size_store() local
1097 struct idxd_device *idxd = wq->idxd; in wq_max_transfer_size_store()
1101 if (wq->state != IDXD_WQ_DISABLED) in wq_max_transfer_size_store()
1111 wq->max_xfer_bytes = xfer_size; in wq_max_transfer_size_store()
1122 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_max_batch_size_show() local
1124 return sprintf(buf, "%u\n", wq->max_batch_size); in wq_max_batch_size_show()
1130 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); in wq_max_batch_size_store() local
1131 struct idxd_device *idxd = wq->idxd; in wq_max_batch_size_store()
1135 if (wq->state != IDXD_WQ_DISABLED) in wq_max_batch_size_store()
1145 wq->max_batch_size = (u32)batch_size; in wq_max_batch_size_store()
1307 struct idxd_wq *wq = &idxd->wqs[i]; in clients_show() local
1309 count += wq->client_count; in clients_show()
1528 struct idxd_wq *wq = &idxd->wqs[i]; in idxd_setup_wq_sysfs() local
1530 wq->conf_dev.parent = &idxd->conf_dev; in idxd_setup_wq_sysfs()
1531 dev_set_name(&wq->conf_dev, "wq%d.%d", idxd->id, wq->id); in idxd_setup_wq_sysfs()
1532 wq->conf_dev.bus = idxd_get_bus_type(idxd); in idxd_setup_wq_sysfs()
1533 wq->conf_dev.groups = idxd_wq_attribute_groups; in idxd_setup_wq_sysfs()
1534 wq->conf_dev.type = &idxd_wq_device_type; in idxd_setup_wq_sysfs()
1536 dev_name(&wq->conf_dev)); in idxd_setup_wq_sysfs()
1537 rc = device_register(&wq->conf_dev); in idxd_setup_wq_sysfs()
1539 put_device(&wq->conf_dev); in idxd_setup_wq_sysfs()
1548 struct idxd_wq *wq = &idxd->wqs[i]; in idxd_setup_wq_sysfs() local
1550 device_unregister(&wq->conf_dev); in idxd_setup_wq_sysfs()
1618 struct idxd_wq *wq = &idxd->wqs[i]; in idxd_cleanup_sysfs() local
1620 device_unregister(&wq->conf_dev); in idxd_cleanup_sysfs()