Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/gve/gve_rx.c
Show First 20 Lines • Show All 404 Lines • ▼ Show 20 Lines | else if ((flag & GVE_RXF_UDP) != 0) | ||||
M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV6); | M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV6); | ||||
else | else | ||||
M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV6); | M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV6); | ||||
return; | return; | ||||
} | } | ||||
} | } | ||||
static void | static void | ||||
gve_mextadd_free(struct mbuf *mbuf) | |||||
{ | |||||
vm_page_t page = (vm_page_t)mbuf->m_ext.ext_arg1; | |||||
vm_offset_t va = (vm_offset_t)mbuf->m_ext.ext_arg2; | |||||
/* | |||||
* Free the page only if this is the last ref. | |||||
* The interface might no longer exist by the time | |||||
* this callback is called, see gve_free_qpl. | |||||
*/ | |||||
if (__predict_false(vm_page_unwire_noq(page))) { | |||||
pmap_qremove(va, 1); | |||||
kva_free(va, PAGE_SIZE); | |||||
vm_page_free(page); | |||||
} | |||||
} | |||||
static void | |||||
gve_rx_flip_buff(struct gve_rx_slot_page_info *page_info, __be64 *slot_addr) | gve_rx_flip_buff(struct gve_rx_slot_page_info *page_info, __be64 *slot_addr) | ||||
{ | { | ||||
const __be64 offset = htobe64(GVE_DEFAULT_RX_BUFFER_OFFSET); | const __be64 offset = htobe64(GVE_DEFAULT_RX_BUFFER_OFFSET); | ||||
page_info->page_offset ^= GVE_DEFAULT_RX_BUFFER_OFFSET; | page_info->page_offset ^= GVE_DEFAULT_RX_BUFFER_OFFSET; | ||||
*(slot_addr) ^= offset; | *(slot_addr) ^= offset; | ||||
} | } | ||||
static struct mbuf * | static struct mbuf * | ||||
▲ Show 20 Lines • Show All 295 Lines • Show Last 20 Lines |