Lines Matching refs:req

39 static void media_request_clean(struct media_request *req)  in media_request_clean()  argument
44 WARN_ON(req->state != MEDIA_REQUEST_STATE_CLEANING); in media_request_clean()
45 WARN_ON(req->updating_count); in media_request_clean()
46 WARN_ON(req->access_count); in media_request_clean()
48 list_for_each_entry_safe(obj, obj_safe, &req->objects, list) { in media_request_clean()
53 req->updating_count = 0; in media_request_clean()
54 req->access_count = 0; in media_request_clean()
55 WARN_ON(req->num_incomplete_objects); in media_request_clean()
56 req->num_incomplete_objects = 0; in media_request_clean()
57 wake_up_interruptible_all(&req->poll_wait); in media_request_clean()
62 struct media_request *req = in media_request_release() local
64 struct media_device *mdev = req->mdev; in media_request_release()
66 dev_dbg(mdev->dev, "request: release %s\n", req->debug_str); in media_request_release()
69 req->state = MEDIA_REQUEST_STATE_CLEANING; in media_request_release()
71 media_request_clean(req); in media_request_release()
74 mdev->ops->req_free(req); in media_request_release()
76 kfree(req); in media_request_release()
79 void media_request_put(struct media_request *req) in media_request_put() argument
81 kref_put(&req->kref, media_request_release); in media_request_put()
87 struct media_request *req = filp->private_data; in media_request_close() local
89 media_request_put(req); in media_request_close()
96 struct media_request *req = filp->private_data; in media_request_poll() local
103 poll_wait(filp, &req->poll_wait, wait); in media_request_poll()
104 spin_lock_irqsave(&req->lock, flags); in media_request_poll()
105 if (req->state == MEDIA_REQUEST_STATE_COMPLETE) { in media_request_poll()
109 if (req->state != MEDIA_REQUEST_STATE_QUEUED) { in media_request_poll()
115 spin_unlock_irqrestore(&req->lock, flags); in media_request_poll()
119 static long media_request_ioctl_queue(struct media_request *req) in media_request_ioctl_queue() argument
121 struct media_device *mdev = req->mdev; in media_request_ioctl_queue()
126 dev_dbg(mdev->dev, "request: queue %s\n", req->debug_str); in media_request_ioctl_queue()
136 media_request_get(req); in media_request_ioctl_queue()
138 spin_lock_irqsave(&req->lock, flags); in media_request_ioctl_queue()
139 if (req->state == MEDIA_REQUEST_STATE_IDLE) in media_request_ioctl_queue()
140 req->state = MEDIA_REQUEST_STATE_VALIDATING; in media_request_ioctl_queue()
141 state = req->state; in media_request_ioctl_queue()
142 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_queue()
146 req->debug_str, media_request_state_str(state)); in media_request_ioctl_queue()
147 media_request_put(req); in media_request_ioctl_queue()
152 ret = mdev->ops->req_validate(req); in media_request_ioctl_queue()
169 spin_lock_irqsave(&req->lock, flags); in media_request_ioctl_queue()
170 req->state = ret ? MEDIA_REQUEST_STATE_IDLE in media_request_ioctl_queue()
172 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_queue()
175 mdev->ops->req_queue(req); in media_request_ioctl_queue()
181 req->debug_str, ret); in media_request_ioctl_queue()
182 media_request_put(req); in media_request_ioctl_queue()
188 static long media_request_ioctl_reinit(struct media_request *req) in media_request_ioctl_reinit() argument
190 struct media_device *mdev = req->mdev; in media_request_ioctl_reinit()
193 spin_lock_irqsave(&req->lock, flags); in media_request_ioctl_reinit()
194 if (req->state != MEDIA_REQUEST_STATE_IDLE && in media_request_ioctl_reinit()
195 req->state != MEDIA_REQUEST_STATE_COMPLETE) { in media_request_ioctl_reinit()
198 req->debug_str); in media_request_ioctl_reinit()
199 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_reinit()
202 if (req->access_count) { in media_request_ioctl_reinit()
205 req->debug_str); in media_request_ioctl_reinit()
206 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_reinit()
209 req->state = MEDIA_REQUEST_STATE_CLEANING; in media_request_ioctl_reinit()
210 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_reinit()
212 media_request_clean(req); in media_request_ioctl_reinit()
214 spin_lock_irqsave(&req->lock, flags); in media_request_ioctl_reinit()
215 req->state = MEDIA_REQUEST_STATE_IDLE; in media_request_ioctl_reinit()
216 spin_unlock_irqrestore(&req->lock, flags); in media_request_ioctl_reinit()
224 struct media_request *req = filp->private_data; in media_request_ioctl() local
228 return media_request_ioctl_queue(req); in media_request_ioctl()
230 return media_request_ioctl_reinit(req); in media_request_ioctl()
249 struct media_request *req; in media_request_get_by_fd() local
261 req = fd_file(f)->private_data; in media_request_get_by_fd()
262 if (req->mdev != mdev) in media_request_get_by_fd()
273 media_request_get(req); in media_request_get_by_fd()
274 return req; in media_request_get_by_fd()
284 struct media_request *req; in media_request_alloc() local
294 req = mdev->ops->req_alloc(mdev); in media_request_alloc()
296 req = kzalloc(sizeof(*req), GFP_KERNEL); in media_request_alloc()
297 if (!req) in media_request_alloc()
312 filp->private_data = req; in media_request_alloc()
313 req->mdev = mdev; in media_request_alloc()
314 req->state = MEDIA_REQUEST_STATE_IDLE; in media_request_alloc()
315 req->num_incomplete_objects = 0; in media_request_alloc()
316 kref_init(&req->kref); in media_request_alloc()
317 INIT_LIST_HEAD(&req->objects); in media_request_alloc()
318 spin_lock_init(&req->lock); in media_request_alloc()
319 init_waitqueue_head(&req->poll_wait); in media_request_alloc()
320 req->updating_count = 0; in media_request_alloc()
321 req->access_count = 0; in media_request_alloc()
325 snprintf(req->debug_str, sizeof(req->debug_str), "%u:%d", in media_request_alloc()
327 dev_dbg(mdev->dev, "request: allocated %s\n", req->debug_str); in media_request_alloc()
338 mdev->ops->req_free(req); in media_request_alloc()
340 kfree(req); in media_request_alloc()
349 struct media_request *req = obj->req; in media_request_object_release() local
351 if (WARN_ON(req)) in media_request_object_release()
357 media_request_object_find(struct media_request *req, in media_request_object_find() argument
368 spin_lock_irqsave(&req->lock, flags); in media_request_object_find()
369 list_for_each_entry(obj, &req->objects, list) { in media_request_object_find()
376 spin_unlock_irqrestore(&req->lock, flags); in media_request_object_find()
390 obj->req = NULL; in media_request_object_init()
398 int media_request_object_bind(struct media_request *req, in media_request_object_bind() argument
409 spin_lock_irqsave(&req->lock, flags); in media_request_object_bind()
411 if (WARN_ON(req->state != MEDIA_REQUEST_STATE_UPDATING && in media_request_object_bind()
412 req->state != MEDIA_REQUEST_STATE_QUEUED)) in media_request_object_bind()
415 obj->req = req; in media_request_object_bind()
420 list_add_tail(&obj->list, &req->objects); in media_request_object_bind()
422 list_add(&obj->list, &req->objects); in media_request_object_bind()
423 req->num_incomplete_objects++; in media_request_object_bind()
427 spin_unlock_irqrestore(&req->lock, flags); in media_request_object_bind()
434 struct media_request *req = obj->req; in media_request_object_unbind() local
438 if (WARN_ON(!req)) in media_request_object_unbind()
441 spin_lock_irqsave(&req->lock, flags); in media_request_object_unbind()
443 obj->req = NULL; in media_request_object_unbind()
445 if (req->state == MEDIA_REQUEST_STATE_COMPLETE) in media_request_object_unbind()
448 if (WARN_ON(req->state == MEDIA_REQUEST_STATE_VALIDATING)) in media_request_object_unbind()
451 if (req->state == MEDIA_REQUEST_STATE_CLEANING) { in media_request_object_unbind()
453 req->num_incomplete_objects--; in media_request_object_unbind()
457 if (WARN_ON(!req->num_incomplete_objects)) in media_request_object_unbind()
460 req->num_incomplete_objects--; in media_request_object_unbind()
461 if (req->state == MEDIA_REQUEST_STATE_QUEUED && in media_request_object_unbind()
462 !req->num_incomplete_objects) { in media_request_object_unbind()
463 req->state = MEDIA_REQUEST_STATE_COMPLETE; in media_request_object_unbind()
465 wake_up_interruptible_all(&req->poll_wait); in media_request_object_unbind()
469 spin_unlock_irqrestore(&req->lock, flags); in media_request_object_unbind()
473 media_request_put(req); in media_request_object_unbind()
479 struct media_request *req = obj->req; in media_request_object_complete() local
483 spin_lock_irqsave(&req->lock, flags); in media_request_object_complete()
487 if (WARN_ON(!req->num_incomplete_objects) || in media_request_object_complete()
488 WARN_ON(req->state != MEDIA_REQUEST_STATE_QUEUED)) in media_request_object_complete()
491 if (!--req->num_incomplete_objects) { in media_request_object_complete()
492 req->state = MEDIA_REQUEST_STATE_COMPLETE; in media_request_object_complete()
493 wake_up_interruptible_all(&req->poll_wait); in media_request_object_complete()
497 spin_unlock_irqrestore(&req->lock, flags); in media_request_object_complete()
499 media_request_put(req); in media_request_object_complete()