Lines Matching refs:wq
35 struct idxd_wq *wq; member
46 struct idxd_wq *wq = idxd_cdev->wq; in idxd_cdev_dev_release() local
48 cdev_ctx = &ictx[wq->idxd->data->type]; in idxd_cdev_dev_release()
69 return idxd_cdev->wq; in inode_wq()
76 struct idxd_wq *wq; in idxd_cdev_open() local
82 wq = inode_wq(inode); in idxd_cdev_open()
83 idxd = wq->idxd; in idxd_cdev_open()
86 dev_dbg(dev, "%s called: %d\n", __func__, idxd_wq_refcount(wq)); in idxd_cdev_open()
92 mutex_lock(&wq->wq_lock); in idxd_cdev_open()
94 if (idxd_wq_refcount(wq) > 0 && wq_dedicated(wq)) { in idxd_cdev_open()
99 ctx->wq = wq; in idxd_cdev_open()
120 if (wq_dedicated(wq)) { in idxd_cdev_open()
121 rc = idxd_wq_set_pasid(wq, pasid); in idxd_cdev_open()
130 idxd_wq_get(wq); in idxd_cdev_open()
131 mutex_unlock(&wq->wq_lock); in idxd_cdev_open()
135 mutex_unlock(&wq->wq_lock); in idxd_cdev_open()
143 struct idxd_wq *wq = ctx->wq; in idxd_cdev_release() local
144 struct idxd_device *idxd = wq->idxd; in idxd_cdev_release()
152 if (wq_shared(wq)) { in idxd_cdev_release()
157 rc = idxd_wq_disable_pasid(wq); in idxd_cdev_release()
161 idxd_wq_drain(wq); in idxd_cdev_release()
168 mutex_lock(&wq->wq_lock); in idxd_cdev_release()
169 idxd_wq_put(wq); in idxd_cdev_release()
170 mutex_unlock(&wq->wq_lock); in idxd_cdev_release()
174 static int check_vma(struct idxd_wq *wq, struct vm_area_struct *vma, in check_vma() argument
177 struct device *dev = &wq->idxd->pdev->dev; in check_vma()
193 struct idxd_wq *wq = ctx->wq; in idxd_cdev_mmap() local
194 struct idxd_device *idxd = wq->idxd; in idxd_cdev_mmap()
201 rc = check_vma(wq, vma, __func__); in idxd_cdev_mmap()
206 pfn = (base + idxd_get_wq_portal_full_offset(wq->id, in idxd_cdev_mmap()
219 struct idxd_wq *wq = ctx->wq; in idxd_cdev_poll() local
220 struct idxd_device *idxd = wq->idxd; in idxd_cdev_poll()
223 poll_wait(filp, &wq->err_queue, wait); in idxd_cdev_poll()
245 int idxd_wq_add_cdev(struct idxd_wq *wq) in idxd_wq_add_cdev() argument
247 struct idxd_device *idxd = wq->idxd; in idxd_wq_add_cdev()
259 idxd_cdev->wq = wq; in idxd_wq_add_cdev()
262 cdev_ctx = &ictx[wq->idxd->data->type]; in idxd_wq_add_cdev()
271 dev->parent = wq_confdev(wq); in idxd_wq_add_cdev()
276 rc = dev_set_name(dev, "%s/wq%u.%u", idxd->data->name_prefix, idxd->id, wq->id); in idxd_wq_add_cdev()
280 wq->idxd_cdev = idxd_cdev; in idxd_wq_add_cdev()
284 dev_dbg(&wq->idxd->pdev->dev, "cdev_add failed: %d\n", rc); in idxd_wq_add_cdev()
292 wq->idxd_cdev = NULL; in idxd_wq_add_cdev()
296 void idxd_wq_del_cdev(struct idxd_wq *wq) in idxd_wq_del_cdev() argument
300 idxd_cdev = wq->idxd_cdev; in idxd_wq_del_cdev()
301 wq->idxd_cdev = NULL; in idxd_wq_del_cdev()
308 struct idxd_wq *wq = idxd_dev_to_wq(idxd_dev); in idxd_user_drv_probe() local
309 struct idxd_device *idxd = wq->idxd; in idxd_user_drv_probe()
333 mutex_lock(&wq->wq_lock); in idxd_user_drv_probe()
334 wq->type = IDXD_WQT_USER; in idxd_user_drv_probe()
335 rc = drv_enable_wq(wq); in idxd_user_drv_probe()
339 rc = idxd_wq_add_cdev(wq); in idxd_user_drv_probe()
346 mutex_unlock(&wq->wq_lock); in idxd_user_drv_probe()
350 drv_disable_wq(wq); in idxd_user_drv_probe()
352 wq->type = IDXD_WQT_NONE; in idxd_user_drv_probe()
353 mutex_unlock(&wq->wq_lock); in idxd_user_drv_probe()
359 struct idxd_wq *wq = idxd_dev_to_wq(idxd_dev); in idxd_user_drv_remove() local
361 mutex_lock(&wq->wq_lock); in idxd_user_drv_remove()
362 idxd_wq_del_cdev(wq); in idxd_user_drv_remove()
363 drv_disable_wq(wq); in idxd_user_drv_remove()
364 wq->type = IDXD_WQT_NONE; in idxd_user_drv_remove()
365 mutex_unlock(&wq->wq_lock); in idxd_user_drv_remove()