On 12/15/2015 12:21 PM, Ming Lei wrote: ...
+/* Called from syscall, and the code is borrowed from blk_mq */ +static int htab_pre_alloc_elems(struct bpf_htab *htab) +{ + const unsigned max_order = 4; + unsigned elem_size = htab->elem_size, i; + unsigned nr_entries = htab->map.max_entries; + size_t left = nr_entries * elem_size; + + htab->elems = kzalloc(nr_entries * sizeof(struct htab_elem *), + GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
Should this use GFP_USER (same below)? Also, when having a large number of elements e.g. > 1Mio, should we fall back to vzalloc()?
+ if (!htab->elems) + goto fail; + + INIT_LIST_HEAD(&htab->page_list); + + for (i = 0; i < nr_entries; ) { + int this_order = max_order; + struct page *page; + int j, to_do; + void *p; + + while (left < order_to_size(this_order - 1) && this_order) + this_order--; + + do { + page = alloc_pages(GFP_KERNEL | __GFP_NOWARN | + __GFP_NORETRY | __GFP_ZERO, + this_order); + if (page) + break;
... -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html