xref: /openbmc/linux/tools/perf/trace/beauty/flock.c (revision 597473720f4dc69749542bfcfed4a927a43d935e)
1794f594eSArnaldo Carvalho de Melo // SPDX-License-Identifier: LGPL-2.1
2c19d0847SArnaldo Carvalho de Melo 
3c19d0847SArnaldo Carvalho de Melo #include "trace/beauty/beauty.h"
4c19d0847SArnaldo Carvalho de Melo #include <linux/kernel.h>
5c19d0847SArnaldo Carvalho de Melo #include <uapi/linux/fcntl.h>
68bf382ceSArnaldo Carvalho de Melo 
74c7c224aSArnaldo Carvalho de Melo #ifndef LOCK_MAND
84c7c224aSArnaldo Carvalho de Melo #define LOCK_MAND	 32
94c7c224aSArnaldo Carvalho de Melo #endif
104c7c224aSArnaldo Carvalho de Melo 
114c7c224aSArnaldo Carvalho de Melo #ifndef LOCK_READ
124c7c224aSArnaldo Carvalho de Melo #define LOCK_READ	 64
134c7c224aSArnaldo Carvalho de Melo #endif
144c7c224aSArnaldo Carvalho de Melo 
154c7c224aSArnaldo Carvalho de Melo #ifndef LOCK_WRITE
164c7c224aSArnaldo Carvalho de Melo #define LOCK_WRITE	128
174c7c224aSArnaldo Carvalho de Melo #endif
184c7c224aSArnaldo Carvalho de Melo 
194c7c224aSArnaldo Carvalho de Melo #ifndef LOCK_RW
204c7c224aSArnaldo Carvalho de Melo #define LOCK_RW		192
214c7c224aSArnaldo Carvalho de Melo #endif
224c7c224aSArnaldo Carvalho de Melo 
syscall_arg__scnprintf_flock(char * bf,size_t size,struct syscall_arg * arg)23c19d0847SArnaldo Carvalho de Melo size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg)
248bf382ceSArnaldo Carvalho de Melo {
25*c65c83ffSArnaldo Carvalho de Melo 	bool show_prefix = arg->show_string_prefix;
26*c65c83ffSArnaldo Carvalho de Melo 	const char *prefix = "LOCK_";
278bf382ceSArnaldo Carvalho de Melo 	int printed = 0, op = arg->val;
288bf382ceSArnaldo Carvalho de Melo 
298bf382ceSArnaldo Carvalho de Melo 	if (op == 0)
308bf382ceSArnaldo Carvalho de Melo 		return scnprintf(bf, size, "NONE");
318bf382ceSArnaldo Carvalho de Melo #define	P_CMD(cmd) \
328bf382ceSArnaldo Carvalho de Melo 	if ((op & LOCK_##cmd) == LOCK_##cmd) { \
33*c65c83ffSArnaldo Carvalho de Melo 		printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \
348bf382ceSArnaldo Carvalho de Melo 		op &= ~LOCK_##cmd; \
358bf382ceSArnaldo Carvalho de Melo 	}
368bf382ceSArnaldo Carvalho de Melo 
378bf382ceSArnaldo Carvalho de Melo 	P_CMD(SH);
388bf382ceSArnaldo Carvalho de Melo 	P_CMD(EX);
398bf382ceSArnaldo Carvalho de Melo 	P_CMD(NB);
408bf382ceSArnaldo Carvalho de Melo 	P_CMD(UN);
418bf382ceSArnaldo Carvalho de Melo 	P_CMD(MAND);
428bf382ceSArnaldo Carvalho de Melo 	P_CMD(RW);
438bf382ceSArnaldo Carvalho de Melo 	P_CMD(READ);
448bf382ceSArnaldo Carvalho de Melo 	P_CMD(WRITE);
458bf382ceSArnaldo Carvalho de Melo #undef P_OP
468bf382ceSArnaldo Carvalho de Melo 
478bf382ceSArnaldo Carvalho de Melo 	if (op)
488bf382ceSArnaldo Carvalho de Melo 		printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", op);
498bf382ceSArnaldo Carvalho de Melo 
508bf382ceSArnaldo Carvalho de Melo 	return printed;
518bf382ceSArnaldo Carvalho de Melo }
52