Messages in this thread | | | From | Daniel Colascione <> | Date | Mon, 16 Jul 2018 08:29:47 -0700 | Subject | Re: [RFC] Add BPF_SYNCHRONIZE bpf(2) command |
| |
On Sat, Jul 14, 2018 at 11:18 AM, Joel Fernandes <joel@joelfernandes.org> wrote: > On Tue, Jul 10, 2018 at 08:40:19PM -0700, Alexei Starovoitov wrote: > [..] >> > The kernel program might do: >> > >> > ===== >> > const int current_map_key = 1; >> > void *current_map = bpf_map_lookup_elem(outer_map, ¤t_map_key); >> > >> > int stats_key = 42; >> > uint64_t *stats_value = bpf_map_lookup_elem(current_map, &stats_key); >> > __sync_fetch_and_add(&stats_value, 1); >> > ===== >> > >> > If a userspace does: >> > >> > 1. Write new fd to outer_map[1]. >> > 2. Call BPF_SYNC_MAP_ACCESS. >> > 3. Start deleting everything in the old map. >> > >> > How can we guarantee that the __sync_fetch_and_add will not add to the >> > old map? >> >> without any changes to the kernel sys_membarrier will work. >> And that's what folks use already. >> BPF_SYNC_MAP_ACCESS implemented via synchronize_rcu() will work >> as well whether in the current implementation where rcu_lock/unlock >> is done outside of the program and in the future when >> rcu_lock/unlock are called by the program itself. > > Cool Alexei and Lorenzo, sounds great to me. Daniel want to send a follow up > patch with BPF_SYNC_MAP_ACCESS changes then?
Will do. Mind if I just mine this thread for the doc comment?
| |