On Mon, Mar 09, 2020 at 11:55:50AM +0530, Kajol Jain wrote:

SNIP

> +static int metricgroup__add_metric_runtime_param(struct strbuf *events,
> +                     struct list_head *group_list, struct pmu_event *pe)
> +{
> +     int i, count;
> +     int ret = -EINVAL;
> +
> +     count = arch_get_runtimeparam();
> +
> +     /* This loop is added to create multiple
> +      * events depend on count value and add
> +      * those events to group_list.
> +      */
> +
> +     for (i = 0; i < count; i++) {
> +             const char **ids;
> +             int idnum;
> +             struct egroup *eg;
> +             char value[PATH_MAX];
> +
> +             expr__runtimeparam = i;
> +
> +             if (expr__find_other(pe->metric_expr,
> +                                     NULL, &ids, &idnum) < 0)
> +                     return ret;
> +
> +             if (events->len > 0)
> +                     strbuf_addf(events, ",");
> +
> +             if (metricgroup__has_constraint(pe))
> +                     metricgroup__add_metric_non_group(events, ids, idnum);
> +             else
> +                     metricgroup__add_metric_weak_group(events, ids, idnum);
> +
> +             eg = malloc(sizeof(struct egroup));
> +             if (!eg) {
> +                     ret = -ENOMEM;
> +                     return ret;
> +             }
> +             sprintf(value, "%s%c%d", pe->metric_name, '_', i);
> +             eg->ids = ids;
> +             eg->idnum = idnum;
> +             eg->metric_name = strdup(value);
> +             eg->metric_expr = pe->metric_expr;
> +             eg->metric_unit = pe->unit;
> +             list_add_tail(&eg->nd, group_list);
> +             ret = 0;
> +
> +             if (ret != 0)
> +                     break;

the inside loop is essentialy what you factor out to
metricgroup__add_metric_param right? please nove
addition of metricgroup__add_metric_param function
into separate patch

jirka


> +     }
> +     return ret;
> +}
> +static int metricgroup__add_metric_param(struct strbuf *events,
> +                     struct list_head *group_list, struct pmu_event *pe)
> +{
> +
> +     const char **ids;
> +     int idnum;
> +     struct egroup *eg;
> +     int ret = -EINVAL;
> +
> +     if (expr__find_other(pe->metric_expr,
> +                                          NULL, &ids, &idnum) < 0)
> +             return ret;
> +     if (events->len > 0)
> +             strbuf_addf(events, ",");
> +
> +     if (metricgroup__has_constraint(pe))
> +             metricgroup__add_metric_non_group(events, ids, idnum);
> +     else
> +             metricgroup__add_metric_weak_group(events, ids, idnum);
> +
> +     eg = malloc(sizeof(struct egroup));
> +     if (!eg)
> +             ret = -ENOMEM;
> +
> +     eg->ids = ids;
> +     eg->idnum = idnum;
> +     eg->metric_name = pe->metric_name;
> +     eg->metric_expr = pe->metric_expr;
> +     eg->metric_unit = pe->unit;
> +     list_add_tail(&eg->nd, group_list);
> +     ret = 0;
> +
> +     return ret;
> +}

SNIP

Reply via email to