Date: Wed, 3 Sep 2014 14:09:48 -0700 From: Shrikanth Kamath <shrikanth07@gmail.com> To: avg@freebsd.org, markj@freebsd.org, freebsd-hackers@freebsd.org, freebsd-dtrace@freebsd.org Subject: Re: Usage of DTRACE_PROBE macro from sdt.h in kernel modules Message-ID: <CAEOAkMXbn_jeLru4THvtnpj4EsEDLutgK=gOkAciYkgWCYBEJg@mail.gmail.com> In-Reply-To: <540711ED.2050909@FreeBSD.org> References: <CAEOAkMWw07D-XTx8JXvVjU%2BOjUQbKcOZmYoLvzSGA=80B8q-tw@mail.gmail.com> <20140902204413.GC59246@charmander.home> <540711ED.2050909@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Thanks Mark/Andriy for helping with this query. I checked the define KDTRACE_HOOKS define that is set. Rather I tried this, I defined a fake provider just to check if that prompts sdt_kld_load to create the SDT probes from my kernel module. + SDT_PROVIDER_DEFINE(fake); And it does help load the SDT probes I created, even though I am not using the fake provider I defined. I feel that sdt_kld_load is flawed when it is looking for sdt_providers_set in the module. It expects at least a provider define and cannot use one of the defined ones in kernel by just declaring it. if (linker_file_lookup_set(lf, "sdt_providers_set", &begin, &end, NULL)) return; I intended to use DTRACE_PROBE() instead of the conventional SDT_PROBE_DEFINE/SDT_PROBE usage because I wanted to create probes which have probe names based on __LINE__ macro...disclaimer...this was just for experiment sakes... E.g func_foo() { .... if () return EINVAL; ... if () return EINVAL; ... if () return EINVAL; } which I replaced with func_foo() { ... if () RETSDT(func_foo, EINVAL); ... if () RETSDT(func_foo, EINVAL); ... if () RETSDT(func_foo, EINVAL); } where RETSDT macro and other macros are defined as #define PROBENAME1(func, __LINE__) func ## __LINE__ #define PROBENAME(func, line) PROBENAME1(func, line) #define RETSDT(func, error_code) \ do { \ DTRACE_PROBE(PROBENAME(func, __LINE__));\ return (error_code); \ } while (0) With the fake provider I defined I get to see and execute my SDT probes % dtrace -l | grep func_foo 56455 sdt netstack func_foo1592 Here netstack is my module, and I have a probe name based on __LINE__ which is 1592. Don't know if that is good way to do it but using SDT_PROBE_DEFINE looks like a problem because of the presence of __LINE__ in the probename. Thanks for reaching out... -- Shrikanth R K On Wed, Sep 3, 2014 at 6:04 AM, Andriy Gapon <avg@freebsd.org> wrote: > on 02/09/2014 23:44 Mark Johnston said the following: >> Somewhat confusingly, DTRACE_PROBE* shouldn't be used in the kernel. > > But it can be used. > > Shrikanth, please double check that KDTRACE_HOOKS is defined when you compile > your module. > > -- > Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAEOAkMXbn_jeLru4THvtnpj4EsEDLutgK=gOkAciYkgWCYBEJg>