All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Martin KaFai Lau <martin.lau@linux.dev>,
	bpf@vger.kernel.org, Sven Schnelle <svens@linux.ibm.com>,
	Alexei Starovoitov <ast@kernel.org>
Subject: Re: [PATCH v5 3/9] tracing/probes: Add a function to search a member of a struct/union
Date: Tue, 22 Aug 2023 23:36:29 +0900	[thread overview]
Message-ID: <20230822233629.669b3a891a0155addf52f461@kernel.org> (raw)
In-Reply-To: <20230822093720.016c3554@rorschach.local.home>

On Tue, 22 Aug 2023 09:37:20 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Mon,  7 Aug 2023 11:54:58 +0900
> "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:
> 
> > --- a/kernel/trace/trace_btf.c
> > +++ b/kernel/trace/trace_btf.c
> > @@ -50,3 +50,60 @@ const struct btf_param *btf_get_func_param(const struct btf_type *func_proto, s3
> >  		return NULL;
> >  }
> >  
> > +#define BTF_ANON_STACK_MAX	16
> > +
> > +/*
> > + * Find a member of data structure/union by name and return it.
> > + * Return NULL if not found, or -EINVAL if parameter is invalid.
> > + * If the member is an member of anonymous union/structure, the offset
> > + * of that anonymous union/structure is stored into @anon_offset. Caller
> > + * can calculate the correct offset from the root data structure by
> > + * adding anon_offset to the member's offset.
> > + */
> > +const struct btf_member *btf_find_struct_member(struct btf *btf,
> > +						const struct btf_type *type,
> > +						const char *member_name,
> > +						u32 *anon_offset)
> > +{
> > +	struct {
> > +		u32 tid;
> > +		u32 offset;
> > +	} anon_stack[BTF_ANON_STACK_MAX];
> 
> Where is this called as the above is 128 bytes, which is a bit large
> for the stack. It may not be bad if it's not that generic of a
> function. But if the stack is getting tight, this could still be an
> issue.

OK, let me allocate an array then.

Thank you,

> 
> -- Steve
> 
> 
> > +	const struct btf_member *member;
> > +	u32 tid, cur_offset = 0;
> > +	const char *name;
> > +	int i, top = 0;
> > +
> > +retry:
> > +	if (!btf_type_is_struct(type))
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	for_each_member(i, type, member) {
> > +		if (!member->name_off) {
> > +			/* Anonymous union/struct: push it for later use */
> > +			type = btf_type_skip_modifiers(btf, member->type, &tid);
> > +			if (type && top < BTF_ANON_STACK_MAX) {
> > +				anon_stack[top].tid = tid;
> > +				anon_stack[top++].offset =
> > +					cur_offset + member->offset;
> > +			}
> > +		} else {
> > +			name = btf_name_by_offset(btf, member->name_off);
> > +			if (name && !strcmp(member_name, name)) {
> > +				if (anon_offset)
> > +					*anon_offset = cur_offset;
> > +				return member;
> > +			}
> > +		}
> > +	}
> > +	if (top > 0) {
> > +		/* Pop from the anonymous stack and retry */
> > +		tid = anon_stack[--top].tid;
> > +		cur_offset = anon_stack[top].offset;
> > +		type = btf_type_by_id(btf, tid);
> > +		goto retry;
> > +	}
> > +
> > +	return NULL;
> > +}
> > +


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>

  reply	other threads:[~2023-08-22 14:36 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-07  2:54 [PATCH v5 0/9] tracing: Improbe BTF support on probe events Masami Hiramatsu (Google)
2023-08-07  2:54 ` [PATCH v5 1/9] tracing/probes: Support BTF argument on module functions Masami Hiramatsu (Google)
2023-08-07  2:54 ` [PATCH v5 2/9] tracing/probes: Move finding func-proto API and getting func-param API to trace_btf Masami Hiramatsu (Google)
2023-08-07  2:54 ` [PATCH v5 3/9] tracing/probes: Add a function to search a member of a struct/union Masami Hiramatsu (Google)
2023-08-22 13:37   ` Steven Rostedt
2023-08-22 14:36     ` Masami Hiramatsu [this message]
2023-08-07  2:55 ` [PATCH v5 4/9] tracing/probes: Support BTF based data structure field access Masami Hiramatsu (Google)
2023-08-07  2:55 ` [PATCH v5 5/9] tracing/probes: Support BTF field access from $retval Masami Hiramatsu (Google)
2023-08-07  2:55 ` [PATCH v5 6/9] tracing/probes: Add string type check with BTF Masami Hiramatsu (Google)
2023-08-07  2:55 ` [PATCH v5 7/9] tracing/fprobe-event: Assume fprobe is a return event by $retval Masami Hiramatsu (Google)
2023-08-07  2:55 ` [PATCH v5 8/9] selftests/ftrace: Add BTF fields access testcases Masami Hiramatsu (Google)
2023-08-07  2:55 ` [PATCH v5 9/9] Documentation: tracing: Update fprobe event example with BTF field Masami Hiramatsu (Google)
2023-08-21 15:09 ` [PATCH v5 0/9] tracing: Improbe BTF support on probe events Masami Hiramatsu
2023-08-22 14:07   ` Steven Rostedt
2023-08-22 14:38     ` Masami Hiramatsu
2023-08-22 14:46     ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230822233629.669b3a891a0155addf52f461@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=rostedt@goodmis.org \
    --cc=svens@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.