viona_vring_t
viona_hook(viona_link_t *link, viona_vring_t *ring, mblk_t **mpp, boolean_t out)
VIONA_PROBE3(tx_hook_drop, viona_vring_t *, ring,
VIONA_PROBE3(rx_hook_drop, viona_vring_t *, ring,
viona_vring_t *l_vrings;
VIONA_PROBE2(bad_ring_addr, viona_vring_t *, r, void *, (void *)(a))
void viona_ring_alloc(viona_link_t *, viona_vring_t *);
void viona_ring_free(viona_vring_t *);
int viona_ring_reset(viona_vring_t *, boolean_t);
boolean_t viona_ring_lease_renew(viona_vring_t *);
bool vring_need_bail(const viona_vring_t *);
int viona_ring_pause(viona_vring_t *);
int vq_popchain(viona_vring_t *, struct iovec *, uint_t, uint16_t *,
void vq_pushchain(viona_vring_t *, uint32_t, uint16_t);
void vq_pushchain_many(viona_vring_t *, uint_t, used_elem_t *);
void viona_intr_ring(viona_vring_t *ring, boolean_t);
void viona_ring_set_no_notify(viona_vring_t *, boolean_t);
void viona_ring_disable_notify(viona_vring_t *);
void viona_ring_enable_notify(viona_vring_t *);
uint16_t viona_ring_num_avail(viona_vring_t *);
void viona_ring_stat_accept(viona_vring_t *, size_t, size_t);
void viona_ring_stat_drop(viona_vring_t *, size_t);
void viona_ring_stat_error(viona_vring_t *);
void viona_worker_rx(viona_vring_t *, viona_link_t *);
void viona_worker_tx(viona_vring_t *, viona_link_t *);
void viona_tx_ring_alloc(viona_vring_t *, const uint16_t);
void viona_tx_ring_free(viona_vring_t *, const uint16_t);
int viona_hook(viona_link_t *, viona_vring_t *, mblk_t **, boolean_t);
viona_vring_t *ring;
viona_vring_t *ring;
viona_vring_t *ring = &link->l_vrings[idx];
viona_vring_t *ring;
viona_vring_t *ring = &link->l_vrings[vq];
viona_vring_t *ring = &link->l_vrings[vq];
const viona_vring_t *ring = &link->l_vrings[i];
kmem_free(link->l_vrings, sizeof (viona_vring_t) * VIONA_NRINGS(link));
sizeof (viona_vring_t) * VIONA_NRINGS(link), KM_SLEEP);
vq_map_indir_desc_bufs(viona_vring_t *ring, const struct virtio_desc *desc,
VIONA_PROBE2(indir_bad_len, viona_vring_t *, ring,
VIONA_PROBE1(indir_bad_nest, viona_vring_t *, ring);
VIONA_PROBE2(desc_bad_len, viona_vring_t *, ring,
VIONA_PROBE1(too_many_desc, viona_vring_t *, ring);
VIONA_PROBE3(indir_bad_next, viona_vring_t *, ring,
vq_popchain(viona_vring_t *ring, struct iovec *iov, uint_t niov,
VIONA_PROBE2(ndesc_too_high, viona_vring_t *, ring,
VIONA_PROBE2(bad_idx, viona_vring_t *, ring,
viona_vring_t *, ring,
static bool viona_ring_map(viona_vring_t *, bool);
vq_write_used_ent(viona_vring_t *ring, uint16_t idx, uint16_t cookie,
static void viona_ring_unmap(viona_vring_t *);
static kthread_t *viona_create_worker(viona_vring_t *);
vq_write_used_idx(viona_vring_t *ring, uint16_t idx)
static void viona_ring_consolidate_stats(viona_vring_t *);
vq_pushchain(viona_vring_t *ring, uint32_t len, uint16_t cookie)
vq_pushchain_many(viona_vring_t *ring, uint_t num_bufs, used_elem_t *elem)
vq_page_hold(viona_vring_t *ring, uint64_t gpa, bool writable)
viona_ring_disable_notify(viona_vring_t *ring)
viona_ring_enable_notify(viona_vring_t *ring)
viona_ring_num_avail(viona_vring_t *ring)
viona_ring_stat_accept(viona_vring_t *ring, size_t count, size_t len)
viona_ring_stat_drop(viona_vring_t *ring, size_t count)
viona_ring_stat_error(viona_vring_t *ring)
viona_ring_consolidate_stats(viona_vring_t *ring)
vq_region_hold(viona_vring_t *ring, uint64_t gpa, uint32_t len,
viona_vring_t *ring = arg;
viona_ring_lease_drop(viona_vring_t *ring)
viona_ring_lease_renew(viona_vring_t *ring)
viona_ring_alloc(viona_link_t *link, viona_vring_t *ring)
viona_ring_misc_free(viona_vring_t *ring)
viona_ring_free(viona_vring_t *ring)
viona_ring_layout(viona_vring_t *ring, viona_vring_part_t *vrp,
viona_vring_t *ring;
viona_vring_t *ring;
viona_ring_reset(viona_vring_t *ring, boolean_t heed_signals)
viona_ring_map_part(viona_vring_t *ring, viona_vring_part_t *vrp,
viona_ring_map(viona_vring_t *ring, bool defer_dirty)
viona_ring_mark_dirty_part(viona_vring_t *ring, viona_vring_part_t *vrp)
viona_ring_mark_dirty(viona_vring_t *ring)
viona_ring_unmap_part(viona_vring_t *ring, viona_vring_part_t *vrp)
viona_ring_unmap(viona_vring_t *ring)
viona_intr_ring(viona_vring_t *ring, boolean_t skip_flags_check)
vring_stop_req(const viona_vring_t *ring)
vring_pause_req(const viona_vring_t *ring)
vring_start_req(const viona_vring_t *ring)
vring_need_bail_ext(const viona_vring_t *ring, bool stop_only)
vring_need_bail(const viona_vring_t *ring)
viona_ring_pause(viona_vring_t *ring)
viona_vring_t *ring = (viona_vring_t *)arg;
viona_create_worker(viona_vring_t *ring)
vq_read_desc(viona_vring_t *ring, uint16_t idx, struct virtio_desc *descp)
vq_read_avail(viona_vring_t *ring, uint16_t idx)
vq_map_desc_bufs(viona_vring_t *ring, const struct virtio_desc *desc,
VIONA_PROBE2(desc_bad_len, viona_vring_t *, ring,
VIONA_PROBE1(len_overflow, viona_vring_t *, ring);
VIONA_PROBE1(too_many_desc, viona_vring_t *, ring);
viona_recv_plain(viona_vring_t *ring, const mblk_t *mp, size_t msz)
VIONA_PROBE5(too_short, viona_vring_t *, ring,
VIONA_PROBE3(bad_rx_frame, viona_vring_t *, ring, uint16_t, cookie,
viona_recv_merged(viona_vring_t *ring, const mblk_t *mp, size_t msz)
VIONA_PROBE2(no_space, viona_vring_t *, ring, mblk_t *, mp);
VIONA_PROBE5(too_short, viona_vring_t *, ring,
VIONA_PROBE3(rx_merge_underrun, viona_vring_t *, ring,
VIONA_PROBE3(rx_merge_overrun, viona_vring_t *, ring,
VIONA_PROBE3(bad_rx_frame, viona_vring_t *, ring,
viona_rx_common(viona_vring_t *ring, mblk_t *mp, boolean_t is_loopback)
VIONA_PROBE3(rx_drop_over_mtu, viona_vring_t *,
VIONA_PROBE4(rx_gro_fallback, viona_vring_t *,
VIONA_PROBE3(rx_pad_short, viona_vring_t *, ring,
VIONA_PROBE3(pkt__rx, viona_vring_t *, ring, mblk_t, mp,
static inline viona_vring_t *
viona_vring_t *ring = &link->l_vrings[idx * 2];
static inline viona_vring_t *
viona_rx_ring_deliver(viona_vring_t *ring, mblk_t *mp,
viona_vring_t *ring = NULL;
viona_vring_t *my_ring = viona_rx_pick_ring(link, curr);
viona_vring_t *my_ring =
viona_worker_rx(viona_vring_t *ring, viona_link_t *link)
viona_tx_ring_alloc(viona_vring_t *ring, const uint16_t qsz)
viona_tx_ring_free(viona_vring_t *ring, const uint16_t qsz)
viona_tx_done(viona_vring_t *ring, uint32_t len, uint16_t cookie)
viona_worker_tx(viona_vring_t *ring, viona_link_t *link)
viona_vring_t *ring = dp->d_ring;
viona_tx_offloads(viona_vring_t *ring, const struct virtio_net_mrgrxhdr *hdr,
viona_tx_alloc_headers(viona_vring_t *ring, uint16_t cookie, viona_desb_t **dpp,
viona_tx_copy_headers(viona_vring_t *ring, iov_bunch_t *iob, mblk_t *mp,
viona_tx(viona_link_t *link, viona_vring_t *ring)
VIONA_PROBE1(tx_absent, viona_vring_t *, ring);
viona_vring_t *d_ring;
static size_t viona_tx(viona_link_t *, viona_vring_t *);
VIONA_PROBE3(pkt__tx, viona_vring_t *, ring, mblk_t, mp_head,
viona_tx_wait_outstanding(viona_vring_t *ring)
VIONA_PROBE3(tx_drop, viona_vring_t *, ring, uint32_t, pkt_len,