• Pavel Begunkov's avatar
    io_uring: add zc notification infrastructure · eb42cebb
    Pavel Begunkov authored
    Add internal part of send zerocopy notifications. There are two main
    structures, the first one is struct io_notif, which carries inside
    struct ubuf_info and maps 1:1 to it. io_uring will be binding a number
    of zerocopy send requests to it and ask to complete (aka flush) it. When
    flushed and all attached requests and skbs complete, it'll generate one
    and only one CQE. There are intended to be passed into the network layer
    as struct msghdr::msg_ubuf.
    
    The second concept is notification slots. The userspace will be able to
    register an array of slots and subsequently addressing them by the index
    in the array. Slots are independent of each other. Each slot can have
    only one notifier at a time (called active notifier) but many notifiers
    during the lifetime. When active, a notifier not going to post any
    completion but the userspace can attach requests to it by specifying
    the corresponding slot while issueing send zc requests. Eventually, the
    userspace will want to "flush" the notifier losing any way to attach
    new requests to it, however it can use the next atomatically added
    notifier of this slot or of any other slot.
    
    When the network layer is done with all enqueued skbs attached to a
    notifier and doesn't need the specified in them user data, the flushed
    notifier will post a CQE.
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/3ecf54c31a85762bf679b0a432c9f43ecf7e61cc.1657643355.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    eb42cebb
notif.h 1.53 KB