On Tue, Nov 3, 2020 at 4:05 PM KP Singh <kpsingh@xxxxxxxxxxxx> wrote: > > On Tue, Nov 3, 2020 at 7:59 PM KP Singh <kpsingh@xxxxxxxxxxxx> wrote: > > > > On Tue, Nov 3, 2020 at 7:47 PM Alexei Starovoitov > > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > > > On Tue, Nov 03, 2020 at 04:31:31PM +0100, KP Singh wrote: > > > > + > > > > +struct storage { > > > > + void *inode; > > > > + unsigned int value; > > > > + /* Lock ensures that spin locked versions of local stoage operations > > > > + * also work, most operations in this tests are still single threaded > > > > + */ > > > > + struct bpf_spin_lock lock; > > > > +}; > > > > > > I think it's a good idea to test spin_lock in local_storage, > > > but it seems the test is not doing it fully. > > > It's only adding it to the storage, but the program is not accessing it. > > > > I added it here just to check if the offset calculations (map->spin_lock_off) > > are correctly happening for these new maps. > > > > As mentioned in the updates, I do intend to generalize > > tools/testing/selftests/bpf/map_tests/sk_storage_map.c which already has > > the threading logic to exercise bpf_spin_lock in storage maps. > > > > Actually, after I added simple bpf_spin_{lock, unlock} to the test programs, I > ended up realizing that we have not exposed spin locks to LSM programs > for now, this is because they inherit the tracing helpers. > > I saw the docs mention that these are not exposed to tracing programs due to > insufficient preemption checks. Do you think it would be okay to allow them > for LSM programs? hmm. Isn't it allowed already? The verifier does: if ((is_tracing_prog_type(prog_type) || prog_type == BPF_PROG_TYPE_SOCKET_FILTER) && map_value_has_spin_lock(map)) { verbose(env, "tracing progs cannot use bpf_spin_lock yet\n"); return -EINVAL; } BPF_PROG_TYPE_LSM is not in this list.