Lines Matching refs:pcr
542 struct crypt_priv *pcr = container_of(work, struct crypt_priv, cryptask); in cryptask_routine() local
547 mutex_lock(&pcr->todo.lock); in cryptask_routine()
548 list_cut_position(&tmp, &pcr->todo.list, pcr->todo.list.prev); in cryptask_routine()
549 mutex_unlock(&pcr->todo.lock); in cryptask_routine()
553 item->result = crypto_run(&pcr->fcrypt, &item->kcop); in cryptask_routine()
559 mutex_lock(&pcr->done.lock); in cryptask_routine()
560 list_splice_tail(&tmp, &pcr->done.list); in cryptask_routine()
561 mutex_unlock(&pcr->done.lock); in cryptask_routine()
564 wake_up_interruptible(&pcr->user_waiter); in cryptask_routine()
574 struct crypt_priv *pcr; in cryptodev_open() local
589 pcr = kzalloc(sizeof(*pcr), GFP_KERNEL); in cryptodev_open()
590 if (!pcr) in cryptodev_open()
592 filp->private_data = pcr; in cryptodev_open()
594 mutex_init(&pcr->fcrypt.sem); in cryptodev_open()
595 mutex_init(&pcr->free.lock); in cryptodev_open()
596 mutex_init(&pcr->todo.lock); in cryptodev_open()
597 mutex_init(&pcr->done.lock); in cryptodev_open()
599 INIT_LIST_HEAD(&pcr->fcrypt.list); in cryptodev_open()
600 INIT_LIST_HEAD(&pcr->fcrypt.dma_map_list); in cryptodev_open()
601 INIT_LIST_HEAD(&pcr->free.list); in cryptodev_open()
602 INIT_LIST_HEAD(&pcr->todo.list); in cryptodev_open()
603 INIT_LIST_HEAD(&pcr->done.list); in cryptodev_open()
605 INIT_WORK(&pcr->cryptask, cryptask_routine); in cryptodev_open()
607 init_waitqueue_head(&pcr->user_waiter); in cryptodev_open()
613 pcr->itemcount++; in cryptodev_open()
615 list_add(&tmp->__hook, &pcr->free.list); in cryptodev_open()
624 list_for_each_entry_safe(tmp, tmp_next, &pcr->free.list, __hook) { in cryptodev_open()
628 mutex_destroy(&pcr->done.lock); in cryptodev_open()
629 mutex_destroy(&pcr->todo.lock); in cryptodev_open()
630 mutex_destroy(&pcr->free.lock); in cryptodev_open()
631 mutex_destroy(&pcr->fcrypt.sem); in cryptodev_open()
632 kfree(pcr); in cryptodev_open()
640 struct crypt_priv *pcr = filp->private_data; in cryptodev_release() local
644 if (!pcr) in cryptodev_release()
653 cancel_work_sync(&pcr->cryptask); in cryptodev_release()
655 list_splice_tail(&pcr->todo.list, &pcr->free.list); in cryptodev_release()
656 list_splice_tail(&pcr->done.list, &pcr->free.list); in cryptodev_release()
658 list_for_each_entry_safe(item, item_safe, &pcr->free.list, __hook) { in cryptodev_release()
665 if (items_freed != pcr->itemcount) { in cryptodev_release()
667 items_freed, pcr->itemcount); in cryptodev_release()
670 crypto_finish_all_sessions(&pcr->fcrypt); in cryptodev_release()
672 mutex_destroy(&pcr->done.lock); in cryptodev_release()
673 mutex_destroy(&pcr->todo.lock); in cryptodev_release()
674 mutex_destroy(&pcr->free.lock); in cryptodev_release()
675 mutex_destroy(&pcr->fcrypt.sem); in cryptodev_release()
677 kfree(pcr); in cryptodev_release()
693 static int crypto_async_run(struct crypt_priv *pcr, struct kernel_crypt_op *kcop) in crypto_async_run() argument
700 mutex_lock(&pcr->free.lock); in crypto_async_run()
701 if (likely(!list_empty(&pcr->free.list))) { in crypto_async_run()
702 item = list_first_entry(&pcr->free.list, in crypto_async_run()
705 } else if (pcr->itemcount < MAX_COP_RINGSIZE) { in crypto_async_run()
706 pcr->itemcount++; in crypto_async_run()
708 mutex_unlock(&pcr->free.lock); in crypto_async_run()
711 mutex_unlock(&pcr->free.lock); in crypto_async_run()
717 dinfo(1, "increased item count to %d", pcr->itemcount); in crypto_async_run()
722 mutex_lock(&pcr->todo.lock); in crypto_async_run()
723 list_add_tail(&item->__hook, &pcr->todo.list); in crypto_async_run()
724 mutex_unlock(&pcr->todo.lock); in crypto_async_run()
726 queue_work(cryptodev_wq, &pcr->cryptask); in crypto_async_run()
735 static int crypto_async_fetch(struct crypt_priv *pcr, in crypto_async_fetch() argument
741 mutex_lock(&pcr->done.lock); in crypto_async_fetch()
742 if (list_empty(&pcr->done.list)) { in crypto_async_fetch()
743 mutex_unlock(&pcr->done.lock); in crypto_async_fetch()
746 item = list_first_entry(&pcr->done.list, struct todo_list_item, __hook); in crypto_async_fetch()
748 mutex_unlock(&pcr->done.lock); in crypto_async_fetch()
753 mutex_lock(&pcr->free.lock); in crypto_async_fetch()
754 list_add_tail(&item->__hook, &pcr->free.list); in crypto_async_fetch()
755 mutex_unlock(&pcr->free.lock); in crypto_async_fetch()
758 wake_up_interruptible(&pcr->user_waiter); in crypto_async_fetch()
933 struct crypt_priv *pcr = filp->private_data; in cryptodev_ioctl() local
942 if (unlikely(!pcr)) in cryptodev_ioctl()
945 fcr = &pcr->fcrypt; in cryptodev_ioctl()
1028 return crypto_async_run(pcr, &kcop); in cryptodev_ioctl()
1030 ret = crypto_async_fetch(pcr, &kcop); in cryptodev_ioctl()
1134 struct crypt_priv *pcr = file->private_data; in cryptodev_compat_ioctl() local
1142 if (unlikely(!pcr)) in cryptodev_compat_ioctl()
1145 fcr = &pcr->fcrypt; in cryptodev_compat_ioctl()
1201 return crypto_async_run(pcr, &kcop); in cryptodev_compat_ioctl()
1203 ret = crypto_async_fetch(pcr, &kcop); in cryptodev_compat_ioctl()
1218 struct crypt_priv *pcr = file->private_data; in cryptodev_poll() local
1221 poll_wait(file, &pcr->user_waiter, wait); in cryptodev_poll()
1223 if (!list_empty_careful(&pcr->done.list)) in cryptodev_poll()
1225 if (!list_empty_careful(&pcr->free.list) || pcr->itemcount < MAX_COP_RINGSIZE) in cryptodev_poll()