Lines Matching +full:data +full:- +full:ready
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
15 struct completion ready; member
21 static irqreturn_t xterm_interrupt(int irq, void *data) in xterm_interrupt() argument
23 struct xterm_wait *xterm = data; in xterm_interrupt()
24 int fd = -1, n_fds = 1; in xterm_interrupt()
27 ret = os_rcv_fd_msg(xterm->fd, &fd, n_fds, in xterm_interrupt()
28 &xterm->pid, sizeof(xterm->pid)); in xterm_interrupt()
29 if (ret == -EAGAIN) in xterm_interrupt()
34 else if (ret != sizeof(xterm->pid)) in xterm_interrupt()
35 fd = -EMSGSIZE; in xterm_interrupt()
37 xterm->new_fd = fd; in xterm_interrupt()
38 complete(&xterm->ready); in xterm_interrupt()
45 struct xterm_wait *data; in xterm_fd() local
48 data = kmalloc(sizeof(*data), GFP_KERNEL); in xterm_fd()
49 if (data == NULL) { in xterm_fd()
51 return -ENOMEM; in xterm_fd()
55 *data = ((struct xterm_wait) { .fd = socket, in xterm_fd()
56 .pid = -1, in xterm_fd()
57 .new_fd = -1 }); in xterm_fd()
58 init_completion(&data->ready); in xterm_fd()
61 IRQF_SHARED, "xterm", data); in xterm_fd()
73 wait_for_completion(&data->ready); in xterm_fd()
75 um_free_irq(XTERM_IRQ, data); in xterm_fd()
77 ret = data->new_fd; in xterm_fd()
78 *pid_out = data->pid; in xterm_fd()
80 kfree(data); in xterm_fd()