/* * Space allocation routines. * These are also available as macros * for critical paths. */ struct vmm_mbuf *m_get(int nowait, int flags) { struct vmm_mbuf *m; /* TODO: implement non-blocking variant */ m = mempool_zalloc(mbpctrl.mpool); if (m) { m->m_freefn = mbuf_pool_free; } else if (NULL != (m = vmm_zalloc(sizeof(struct vmm_mbuf)))) { m->m_freefn = mbuf_heap_free; } else { return NULL; } INIT_LIST_HEAD(&m->m_list); m->m_next = NULL; m->m_data = NULL; m->m_len = 0; m->m_flags = flags; if (flags & M_PKTHDR) { m->m_pktlen = 0; } m->m_ref = 1; return m; }
/* * Space allocation routines. * These are also available as macros * for critical paths. */ struct vmm_mbuf *m_get(int nowait, int flags) { struct vmm_mbuf *m; /* TODO: implement non-blocking variant */ m = mempool_zalloc(mbpctrl.mpool); if (!m) { return NULL; } INIT_LIST_HEAD(&m->m_list); m->m_next = NULL; m->m_data = NULL; m->m_len = 0; m->m_flags = flags; if (flags & M_PKTHDR) { m->m_pktlen = 0; } m->m_ref = 1; return m; }