On Mon, Jan 11, 2016 at 11:56:58PM +0800, Ming Lei wrote:
This patch introduces percpu array map so that expensive
atomic operations can be avoided in eBPF prog in case of
ARRAY map.
PERCPU MAP uses the percpu version of update/lookup element
helpers and callbacks to access element in the map, and
the previous update/lookup element helpers and callbacks
don't work at the same time.
Signed-off-by: Ming Lei <tom.leiming@gmail.com>
useful stuff!
+ if (percpu) {
+ if (alloc_percpu_array(array, attr->max_entries,
+ attr->value_size)) {
+ kvfree(array);
+ return ERR_PTR(-ENOMEM);
+ }
+ array->map.pages = round_up(attr->max_entries *
+ attr->value_size * num_possible_cpus(),
+ PAGE_SIZE) >> PAGE_SHIFT;
I think it would be more accurate to add it to array_size instead of
doing page rounding here.
- array->map.pages = round_up(array_size, PAGE_SIZE) >> PAGE_SHIFT;
+ array->map.pages += round_up(array_size, PAGE_SIZE) >> PAGE_SHIFT;
and this line wouldn't need to change...