Re: [PATCH v17 14/18] trace-cmd: Add host trace clock as guest trace argument

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 10, 2019 at 5:48 PM Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
>
> On Tue, 10 Dec 2019 10:49:43 +0200
> Tzvetomir Stoyanov <tz.stoyanov@xxxxxxxxx> wrote:
>
> > > > +     if (guest_config) {
> > > > +             /* If -C is specified, prepend clock to all guest VM flags */
> > > > +             for_all_instances(instance) {
> > > > +                     if (top_instance.ftrace->clock) {
> > > > +                             if (is_guest(instance)) {
> > >
> > > We should only append this, if the guest didn't have a clock set
> > > already. As the change log seems to say, if the user states a "-C
> > > clock" for the guest, that should take precedence over the host clock
> > > set. That is, a user may specifically state that they are using a
> > > different clock. If we have frequency and offset set, it should still
> > > work with different clocks.
> >
> > The guest config string is not parsed in the host context, that's why the host
> > doesn't know if a guest has an explicit  "-C clock" argument.
> > I can parse the guest config here, but this will complicate the implementation.
> > Using the current approach still guarantees that the user specified
> > config has higher
> > priority than injected one - add_argv() API prepends to the beginning
> > of the string, so
> > user arguments are always after the injected one. When guest parses
> > the string, in case of
> > duplicated "-C clock" arguments, the last one wins.
>
> I'm confused. I'm looking at this:
>
>
>         for (;;) {
>                 [..]
>                 switch (c) {
>                 [..]
>                 case 'A':
>                         [..]
>                         ctx->instance->flags |= BUFFER_FL_GUEST;
>                 [..]
>                 case 'C':
>                         ctx->instance->ftrace->clock = optarg;
>                         guest_config = true;
>                         break;
>                 [..]
>                 }
>                 [..]
>         }
>         [..]
>         if (guest_config) {
>                 /* If -C is specified, prepend clock to all guest VM flags */
>                 for_all_instances(instance) {
>                         if (top_instance.ftrace->clock) {
>
> Why can't we have here:
>
>  if (top_instance.ftrace->clock && !instance->ftrace->clock)
>
> If the guest instance was given a -C, I would think we don't want to add
> another -C to pass to that guest?
>

In case of a guest ("-A" option), the logic skips the switch(), so the
guest args are not parsed.
There is a check, right before the switch() :

        /*
         * If the current instance is to record a guest, then save
         * all the arguments for this instance.
         */
        if (c != 'B' && c != 'A' && is_guest(ctx->instance)) {
            add_arg(ctx->instance, c, opts, long_options, optarg);
            continue;
        }

I can put inside that if() a check for "-C" guest argument, but it
will look like a hack.

The confusion is that guest_config is set to true for any "-C" host argument,
including those for instances, but only the one from the top instance
is used to inject
guest clock arg.


> -- Steve
>
>                                 if (is_guest(instance)) {
>                                         add_argv(instance,
>                                                  (char *)top_instance.ftrace->clock,
>                                                  true);
>                                         add_argv(instance, "-C", true);
>                                 }
>                         }
>                 }
>         }



-- 
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux