[PATCH 0/3] perf tools: Enable strict JSON parsing

James Clark james.clark at arm.com
Fri Oct 8 03:02:18 PDT 2021



On 08/10/2021 08:43, kajoljain wrote:
> 
> 
> On 10/7/21 4:35 PM, James Clark wrote:
>> After a discussion on "[PATCH 1/4] perf vendor events: Syntax corrections in Neoverse N1 json",
>> John Garry suggested that we can just modify the parser to make it more strict. Hopefully this will
>> remove the need to apply any future JSON comma fixup commits.
>>
>> Applies on top of "[PATCH v2 1/3] perf vendor events: Syntax corrections in Neoverse N1 json" on
>> perf/core.
>>
>> Also available at:
>>   git clone --branch james-json-parse-fix git at git.gitlab.arm.com:linux-arm/linux-jc.git
> 
> Hi James,
>    Do we have any dependency patches on top of this patch series. I am
> reviewing and testing it, but in both powerpc and x86 system I am
> getting build issue. Not sure if I am missing something> 
> I am trying your changes on top of upstream perf.
> 
> pmu-events/arch/test/test_soc/sys/uncore.json: json error Invalid
> character inside JSON string

Hi Kajol,

A trailing comma was fixed in this file 3 weeks ago at b8b350a. Can you
confirm if you have updated to get this commit on perf core?

Alternately you could pull from my branch above which is up to date enough
to include it.

The file is in pmu-events/arch/test/ so I would expect it to fail on all platforms.

> make[3]: *** [pmu-events/Build:18: pmu-events/pmu-events.c] Error 1
> make[3]: *** Deleting file 'pmu-events/pmu-events.c'
> make[2]: *** [Makefile.perf:667: pmu-events/pmu-events-in.o] Error 2
> make[2]: *** Waiting for unfinished jobs....
> make[1]: *** [Makefile.perf:238: sub-make] Error 2
> make: *** [Makefile:70: all] Error 2
> 
> Also, Is it possible to add line number along with file name while
> showing this error `json error Invalid character inside JSON string`.
> It might make it easy to fix.

I can add a character number with the following fix if you think that would
be good enough? A line number might be a bigger change and involve keeping
track of newline characters.

diff --git a/tools/perf/pmu-events/json.c b/tools/perf/pmu-events/json.c
index 0544398d6e2d..41a14e1543bf 100644
--- a/tools/perf/pmu-events/json.c
+++ b/tools/perf/pmu-events/json.c
@@ -99,7 +99,7 @@ jsmntok_t *parse_json(const char *fn, char **map, size_t *size, int *len)
        res = jsmn_parse(&parser, *map, *size, tokens,
                         sz / sizeof(jsmntok_t));
        if (res != JSMN_SUCCESS) {
-               pr_err("%s: json error %s\n", fn, jsmn_strerror(res));
+               pr_err("%s: json error at character %u '%s'\n", fn, parser.pos, jsmn_strerror(res));
                goto error_free;
        }
        if (len)


It prints this for the same error you have above:

pmu-events/arch/test/test_soc/sys/uncore.json: json error at character 213 'Invalid character inside JSON string'

Although funnily enough after re-introducing that extra comma it doesn't fail the build for me,
it just prints the error message. But I may have noticed some dependency tracking issues around
the json files.

James



More information about the linux-arm-kernel mailing list