159e8b60bSAlan Maguire // SPDX-License-Identifier: GPL-2.0
259e8b60bSAlan Maguire /* Copyright (c) 2020, Oracle and/or its affiliates. */
359e8b60bSAlan Maguire 
459e8b60bSAlan Maguire #include <test_progs.h>
559e8b60bSAlan Maguire 
61a532eb2SAlexei Starovoitov #include "trace_printk.lskel.h"
759e8b60bSAlan Maguire 
859e8b60bSAlan Maguire #define SEARCHMSG	"testing,testing"
959e8b60bSAlan Maguire 
trace_pipe_cb(const char * str,void * data)10*4d4992ffSJiri Olsa static void trace_pipe_cb(const char *str, void *data)
11*4d4992ffSJiri Olsa {
12*4d4992ffSJiri Olsa 	if (strstr(str, SEARCHMSG) != NULL)
13*4d4992ffSJiri Olsa 		(*(int *)data)++;
14*4d4992ffSJiri Olsa }
15*4d4992ffSJiri Olsa 
serial_test_trace_printk(void)16d3f7b166SYucong Sun void serial_test_trace_printk(void)
1759e8b60bSAlan Maguire {
18087cba79SKumar Kartikeya Dwivedi 	struct trace_printk_lskel__bss *bss;
19087cba79SKumar Kartikeya Dwivedi 	struct trace_printk_lskel *skel;
20*4d4992ffSJiri Olsa 	int err = 0, found = 0;
2159e8b60bSAlan Maguire 
22087cba79SKumar Kartikeya Dwivedi 	skel = trace_printk_lskel__open();
23d313d45aSDave Marchevsky 	if (!ASSERT_OK_PTR(skel, "trace_printk__open"))
2459e8b60bSAlan Maguire 		return;
2559e8b60bSAlan Maguire 
26d313d45aSDave Marchevsky 	ASSERT_EQ(skel->rodata->fmt[0], 'T', "skel->rodata->fmt[0]");
27eb0f1e0cSAlexei Starovoitov 	skel->rodata->fmt[0] = 't';
28eb0f1e0cSAlexei Starovoitov 
29087cba79SKumar Kartikeya Dwivedi 	err = trace_printk_lskel__load(skel);
30d313d45aSDave Marchevsky 	if (!ASSERT_OK(err, "trace_printk__load"))
3159e8b60bSAlan Maguire 		goto cleanup;
3259e8b60bSAlan Maguire 
3359e8b60bSAlan Maguire 	bss = skel->bss;
3459e8b60bSAlan Maguire 
35087cba79SKumar Kartikeya Dwivedi 	err = trace_printk_lskel__attach(skel);
36d313d45aSDave Marchevsky 	if (!ASSERT_OK(err, "trace_printk__attach"))
3759e8b60bSAlan Maguire 		goto cleanup;
3859e8b60bSAlan Maguire 
3959e8b60bSAlan Maguire 	/* wait for tracepoint to trigger */
4059e8b60bSAlan Maguire 	usleep(1);
41087cba79SKumar Kartikeya Dwivedi 	trace_printk_lskel__detach(skel);
4259e8b60bSAlan Maguire 
43d313d45aSDave Marchevsky 	if (!ASSERT_GT(bss->trace_printk_ran, 0, "bss->trace_printk_ran"))
4459e8b60bSAlan Maguire 		goto cleanup;
4559e8b60bSAlan Maguire 
46d313d45aSDave Marchevsky 	if (!ASSERT_GT(bss->trace_printk_ret, 0, "bss->trace_printk_ret"))
4759e8b60bSAlan Maguire 		goto cleanup;
4859e8b60bSAlan Maguire 
4959e8b60bSAlan Maguire 	/* verify our search string is in the trace buffer */
50*4d4992ffSJiri Olsa 	ASSERT_OK(read_trace_pipe_iter(trace_pipe_cb, &found, 1000),
51*4d4992ffSJiri Olsa 		 "read_trace_pipe_iter");
5259e8b60bSAlan Maguire 
53d313d45aSDave Marchevsky 	if (!ASSERT_EQ(found, bss->trace_printk_ran, "found"))
5459e8b60bSAlan Maguire 		goto cleanup;
5559e8b60bSAlan Maguire 
5659e8b60bSAlan Maguire cleanup:
57087cba79SKumar Kartikeya Dwivedi 	trace_printk_lskel__destroy(skel);
5859e8b60bSAlan Maguire }
59