[lkml]   [2012]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Re: [RFC PATCH -tip 1/9] ftrace: Add pt_regs acceptable trace callback
    On Mon, 2012-06-04 at 22:58 +0900, Masami Hiramatsu wrote:

    > Hmm, how about initializing in __init function ?
    > Or we can make func and regs_func in different members,
    > instead of using a union. (in that case, we can remove
    > I just consider passing uninitialized argument to user
    > function can cause unexpected behavior...

    Easy solution:

    As I want all functions to pass the ftrace_ops anyway, we can implement
    the ftrace_ops and the regs passing together. The arch will need to
    update both at the same time.

    But for archs that do not support ftrace_ops (and thus also not regs),
    we can do (and I will do this):

    static inline void
    __global_list_func(unsigned long ip, unsigned long parent_ip,
    struct ftrace_ops *ops, struct pt_regs *regs)
    [do the loop, ignoring ops anyway, but passing in regs]

    static void
    noregs_global_list_func(unsigned long ip, unsigned long parent_ip)
    __global_list_func(ip, parent_ip, NULL, NULL);
    #define global_list_func (ftrace_func_t)noregs_global_list_func
    static void global_list_func(unsigned long ip, unsigned long parent_ip,
    struct ftrace_ops *ops, struct pt_regs *regs)
    __global_list_func(ip, parent_ip, ops, regs);

    Nothing will be passed uninitialized. If an arch does not support
    passing ftrace ops and regs, then it will be calling the
    noregs_global_list_func() (or whatever I name it), which only expects
    the ip and parent_ip as parameters. Then that will be calling the actual
    loop function with NULLs in the parameters.

    When an arch supports passing of ftrace_ops, then it should also support
    passing in the regs (as that should be the trivial part).

    Note, all funcs will get regs, but it may not get the full regs. That
    requires the ftrace_ops setting the special flag. The regs are saved for
    the mcount already. But only a partial set. Those will be sent to all
    function callbacks. If the function call back requires a full set (like
    kprobes does), then it must set the flag before registering.

    Hows this sound?

    -- Steve

     \ /
      Last update: 2012-06-04 17:01    [W:0.026 / U:32.644 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site