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

Reply via email to