With ifuncs, it's possible for multiple FBT probes to resolve to the
same address. For instance, fbt::copyout:entry and
fbt::copyout_nosmap:entry are the same on one of my systems: the former
is an ifunc and resolves to copyout_nosmap().
fbt_invop() isn't prepared to handle this possibility: it returns after
calling dtrace_probe() for the first matching tracepoint it finds. In
my case it always finds fbt::copyout_nosmap:entry first, so if I enable
fbt::copyout:entry, it never fires.
Add a hackish fix: flag tracepoints as having an associated enabling so
that we know we can skip over them in some cases. This has a few
caveats: we need an IPI to synchronize the flag with threads performing
FBT tracepoint hash table lookups, so disabling probes is more expensive
than before, and if one enables multiple probes sharing a tracepoint,
only one of those probes will ever fire. I will try to implement a
better fix, but this is better than nothing for 12.0.