Thread (16 messages) flat view 16 messages, 2 authors, 2014-11-06

Re: [PATCH net-next 3/7] bpf: add array type of eBPF maps

From: Alexei Starovoitov <hidden>
Date: 2014-11-04 23:14:58
Also in: lkml, netdev

On Tue, Nov 4, 2014 at 1:58 AM, Daniel Borkmann [off-list ref] wrote:
quoted
+
+       memcpy(array->value + array->elem_size * index, value,
array->elem_size);
What would protect this from concurrent updates?
nothing.
that's what I meant in commit log:
 - map_update_elem() replaces elements in an non-atomic way
   (for atomic updates hashtable type should be used instead)

The array map is like C array of structures.
Nothing protects concurrent access.
It's used in the cases where accuracy is not needed
or when there is no concurrent access.
To compute a histogram of events in tracing the array
of integers is used. Every integer is a counter. Program
increments it (may be without using xadd) and
user space periodically reads it back.
map_update_elem() is called by userspace once
to initialize it if zero-init is not enough.
Programs do lookup() and modify the values.
For array type update() method is used rarely,
delete() is never used and get_next() is needed
for completeness to browse maps through
common map API.
I'm guessing you're asking, because it may feel
that adding a lock() will help to make it more useful? ;)
It's not, since programs cannot take a lock().
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help