• Stefano Stabellini's avatar
    xen/pvcalls: implement accept command · 6f474e71
    Stefano Stabellini authored
    Implement the accept command by calling inet_accept. To avoid blocking
    in the kernel, call inet_accept(O_NONBLOCK) from a workqueue, which get
    scheduled on sk_data_ready (for a passive socket, it means that there
    are connections to accept).
    
    Use the reqcopy field to store the request. Accept the new socket from
    the delayed work function, create a new sock_mapping for it, map
    the indexes page and data ring, and reply to the other end. Allocate an
    ioworker for the socket.
    
    Only support one outstanding blocking accept request for every socket at
    any time.
    
    Add a field to sock_mapping to remember the passive socket from which an
    active socket was created.
    
    [ boris: fixed whitespaces ]
    Signed-off-by: default avatarStefano Stabellini <stefano@aporeto.com>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    6f474e71
pvcalls-back.c 19.9 KB