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 | |||||