Lines Matching refs:pccmd
284 cuse_cmd_lock(struct cuse_client_command *pccmd)
286 sx_xlock(&pccmd->sx);
290 cuse_cmd_unlock(struct cuse_client_command *pccmd)
292 sx_xunlock(&pccmd->sx);
545 struct cuse_client_command *pccmd;
555 pccmd = &pcc->cmds[n];
557 if (pccmd->entry.tqe_prev != NULL) {
558 TAILQ_REMOVE(&pcc->server->head, pccmd, entry);
559 pccmd->entry.tqe_prev = NULL;
561 cv_broadcast(&pccmd->cv);
566 cuse_client_send_command_locked(struct cuse_client_command *pccmd,
584 pccmd->sub.fflags = cuse_fflags;
585 pccmd->sub.data_pointer = data_ptr;
586 pccmd->sub.argument = arg;
588 pcs = pccmd->client->server;
590 if ((pccmd->entry.tqe_prev == NULL) &&
591 (CUSE_CLIENT_CLOSING(pccmd->client) == 0) &&
593 TAILQ_INSERT_TAIL(&pcs->head, pccmd, entry);
599 cuse_client_got_signal(struct cuse_client_command *pccmd)
603 pccmd->got_signal = 1;
605 pccmd = &pccmd->client->cmds[CUSE_CMD_SIGNAL];
607 pcs = pccmd->client->server;
609 if ((pccmd->entry.tqe_prev == NULL) &&
610 (CUSE_CLIENT_CLOSING(pccmd->client) == 0) &&
612 TAILQ_INSERT_TAIL(&pcs->head, pccmd, entry);
618 cuse_client_receive_command_locked(struct cuse_client_command *pccmd,
624 pcs = pccmd->client->server;
627 pccmd->proc_curr = curthread->td_proc;
629 if (CUSE_CLIENT_CLOSING(pccmd->client) || pcs->is_closing) {
633 while (pccmd->command == CUSE_CMD_NONE) {
635 cv_wait(&pccmd->cv, &pcs->mtx);
637 error = cv_wait_sig(&pccmd->cv, &pcs->mtx);
640 cuse_client_got_signal(pccmd);
642 if (CUSE_CLIENT_CLOSING(pccmd->client) || pcs->is_closing) {
648 error = pccmd->error;
649 pccmd->command = CUSE_CMD_NONE;
650 cv_signal(&pccmd->cv);
656 pccmd->proc_curr = NULL;
658 while (pccmd->proc_refs != 0)
659 cv_wait(&pccmd->cv, &pcs->mtx);
839 struct cuse_client_command *pccmd,
857 p_proc = pccmd->proc_curr;
861 if (pccmd->proc_refs < 0)
864 pccmd->proc_refs++;
871 pccmd->client->ioctl_buffer + offset,
875 pccmd->client->ioctl_buffer + offset,
882 pccmd->proc_refs--;
884 if (pccmd->proc_curr == NULL)
885 cv_signal(&pccmd->cv);
946 struct cuse_client_command *pccmd,
952 p_proc = pccmd->proc_curr;
956 if (pccmd->proc_refs < 0)
959 pccmd->proc_refs++;
977 pccmd->proc_refs--;
979 if (pccmd->proc_curr == NULL)
980 cv_signal(&pccmd->cv);
987 struct cuse_client_command *pccmd,
998 offset = pchk->peer_ptr - pccmd->client->write_base;
1000 if (offset < (uintptr_t)pccmd->client->write_length &&
1001 pchk->length <= (unsigned long)pccmd->client->write_length &&
1002 offset + pchk->length <= (uintptr_t)pccmd->client->write_length) {
1004 error = copyout(pccmd->client->write_buffer + offset,
1009 offset = pchk->peer_ptr - pccmd->client->read_base;
1011 if (offset < (uintptr_t)pccmd->client->read_length &&
1012 pchk->length <= (unsigned long)pccmd->client->read_length &&
1013 offset + pchk->length <= (uintptr_t)pccmd->client->read_length) {
1016 pccmd->client->read_buffer + offset, pchk->length);
1022 error = cuse_server_data_copy_locked(pcs, pccmd, pchk, isread);
1109 struct cuse_client_command *pccmd;
1123 while ((pccmd = TAILQ_FIRST(&pcs->head)) == NULL) {
1135 TAILQ_REMOVE(&pcs->head, pccmd, entry);
1136 pccmd->entry.tqe_prev = NULL;
1138 pccmd->entered = curthread;
1140 *pcmd = pccmd->sub;
1149 while ((pccmd = cuse_server_find_command(pcs, curthread)) != NULL) {
1151 pccmd->entered = NULL;
1152 pccmd->error = *(int *)data;
1153 pccmd->command = CUSE_CMD_SYNC;
1156 cv_signal(&pccmd->cv);
1240 pccmd = cuse_server_find_command(pcs, curthread);
1242 if (pccmd != NULL) {
1243 n = pccmd->got_signal;
1244 pccmd->got_signal = 0;
1257 pccmd = cuse_server_find_command(pcs, curthread);
1259 if (pccmd != NULL) {
1260 pcc = pccmd->client;
1348 pccmd = cuse_server_find_command(pcs, curthread);
1350 if (pccmd == NULL) {
1357 error = cuse_server_ioctl_copy_locked(pcs, pccmd,
1361 pcs, pccmd, pchk, cmd == CUSE_IOCTL_READ_DATA);
1457 struct cuse_client_command *pccmd;
1469 pccmd = &pcc->cmds[n];
1471 sx_destroy(&pccmd->sx);
1472 cv_destroy(&pccmd->cv);
1484 struct cuse_client_command *pccmd;
1529 pccmd = &pcc->cmds[n];
1531 pccmd->sub.dev = pcd;
1532 pccmd->sub.command = n;
1533 pccmd->client = pcc;
1535 sx_init(&pccmd->sx, "cuse-client-sx");
1536 cv_init(&pccmd->cv, "cuse-client-cv");
1558 pccmd = &pcc->cmds[CUSE_CMD_OPEN];
1560 cuse_cmd_lock(pccmd);
1563 cuse_client_send_command_locked(pccmd, 0, 0, pcc->fflags, 0);
1565 error = cuse_client_receive_command_locked(pccmd, 0, 0);
1574 cuse_cmd_unlock(pccmd);
1585 struct cuse_client_command *pccmd;
1594 pccmd = &pcc->cmds[CUSE_CMD_CLOSE];
1597 cuse_cmd_lock(pccmd);
1600 cuse_client_send_command_locked(pccmd, 0, 0, pcc->fflags, 0);
1602 error = cuse_client_receive_command_locked(pccmd, 0, 0);
1603 cuse_cmd_unlock(pccmd);
1645 struct cuse_client_command *pccmd;
1656 pccmd = &pcc->cmds[CUSE_CMD_READ];
1664 cuse_cmd_lock(pccmd);
1679 cuse_client_send_command_locked(pccmd,
1683 error = cuse_client_receive_command_locked(pccmd, 0, 0);
1721 cuse_cmd_unlock(pccmd);
1734 struct cuse_client_command *pccmd;
1744 pccmd = &pcc->cmds[CUSE_CMD_WRITE];
1752 cuse_cmd_lock(pccmd);
1774 cuse_client_send_command_locked(pccmd,
1778 error = cuse_client_receive_command_locked(pccmd, 0, 0);
1809 cuse_cmd_unlock(pccmd);
1824 struct cuse_client_command *pccmd;
1838 pccmd = &pcc->cmds[CUSE_CMD_IOCTL];
1841 cuse_cmd_lock(pccmd);
1853 cuse_client_send_command_locked(pccmd,
1858 error = cuse_client_receive_command_locked(pccmd, data, len);
1870 cuse_cmd_unlock(pccmd);
1881 struct cuse_client_command *pccmd;
1904 pccmd = &pcc->cmds[CUSE_CMD_POLL];
1906 cuse_cmd_lock(pccmd);
1913 cuse_client_send_command_locked(pccmd,
1916 error = cuse_client_receive_command_locked(pccmd, 0, 0);
1919 cuse_cmd_unlock(pccmd);