struct work_struct work;
 };
 
+/* 'size != 0' is for bpf_mem_alloc which manages fixed-size objects.
+ * Alloc and free are done with bpf_mem_cache_{alloc,free}().
+ *
+ * 'size = 0' is for bpf_mem_alloc which manages many fixed-size objects.
+ * Alloc and free are done with bpf_mem_{alloc,free}() and the size of
+ * the returned object is given by the size argument of bpf_mem_alloc().
+ */
 int bpf_mem_alloc_init(struct bpf_mem_alloc *ma, int size, bool percpu);
 void bpf_mem_alloc_destroy(struct bpf_mem_alloc *ma);
 
 
        /* cpumask must be the first element so struct bpf_cpumask be cast to struct cpumask. */
        BUILD_BUG_ON(offsetof(struct bpf_cpumask, cpumask) != 0);
 
-       cpumask = bpf_mem_alloc(&bpf_cpumask_ma, sizeof(*cpumask));
+       cpumask = bpf_mem_cache_alloc(&bpf_cpumask_ma);
        if (!cpumask)
                return NULL;
 
 
        if (refcount_dec_and_test(&cpumask->usage)) {
                migrate_disable();
-               bpf_mem_free(&bpf_cpumask_ma, cpumask);
+               bpf_mem_cache_free(&bpf_cpumask_ma, cpumask);
                migrate_enable();
        }
 }
                },
        };
 
-       ret = bpf_mem_alloc_init(&bpf_cpumask_ma, 0, false);
+       ret = bpf_mem_alloc_init(&bpf_cpumask_ma, sizeof(struct bpf_cpumask), false);
        ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &cpumask_kfunc_set);
        ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS, &cpumask_kfunc_set);
        return  ret ?: register_btf_id_dtor_kfuncs(cpumask_dtors,