On Fri, Jan 13, 2023 at 5:14 PM Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: > > On Fri, Jan 13, 2023 at 5:06 PM Hao Luo <haoluo@xxxxxxxxxx> wrote: > > > > On Fri, Jan 13, 2023 at 3:41 PM Andrii Nakryiko > > <andrii.nakryiko@xxxxxxxxx> wrote: > > > <...> > > > > > > Have you tried bpf_core_type_matches()? It seems like exactly what you > > > are looking for? See [0] for logic of what constitutes "a match". > > > > > > > It seems bpf_core_type_matches() is for the userspace code. I'm > > It's in the same family as bpf_type_{exists,size}() and > bpf_field_{exists,size,offset}(). It's purely BPF-side. Please grep > for bpf_core_type_matches() in selftests/bpf. > > > looking for type checking in the BPF code. We probably don't need to > > check type equivalence, just comparing the btf_id of the field's type > > and the btf_id of a target type may be sufficient. > > With the example above something like below should work: > > struct rw_semaphore__old { > struct task_struct *owner; > }; > > struct rw_semaphore__new { > atomic_long_t owner; > }; > > u64 owner; > if (bpf_core_type_matches(struct rw_semaphore__old) /* owner is > task_struct pointer */) { > struct rw_semaphore__old *old = (struct rw_semaphore__old *)sem; > owner = (u64)sem->owner; > } else if (bpf_core_type_matches(struct rw_semaphore__old) /* owner > field is atomic_long_t */) { > struct rw_semaphore__new *new = (struct rw_semaphore__new *)sem; > owner = new->owner.counter; > } > > > > > The commit 94a9717b3c (“locking/rwsem: Make rwsem->owner an > > atomic_long_t”) is rare, but the 'owner' field is useful for tracking > > the owner of a kernel lock. > > We implemented bpf_core_type_matches() to detect tracepoint changes, > which is equivalent (if not harder) use case. Give it a try. > Thanks Andrii for the pointer. It's still not working. I got the following error when loading: libbpf: prog 'on_contention_begin': relo #1: parsing [43] struct rw_semaphore__old + 0 failed: -22 libbpf: prog 'on_contention_begin': relo #1: failed to relocate: -22 libbpf: failed to perform CO-RE relocations: -22 I'll dig a little more next week.