18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * null_blk device driver tracepoints.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2020 Western Digital Corporation or its affiliates.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
98c2ecf20Sopenharmony_ci#define TRACE_SYSTEM nullb
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#if !defined(_TRACE_NULLB_H) || defined(TRACE_HEADER_MULTI_READ)
128c2ecf20Sopenharmony_ci#define _TRACE_NULLB_H
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
158c2ecf20Sopenharmony_ci#include <linux/trace_seq.h>
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#include "null_blk.h"
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciconst char *nullb_trace_disk_name(struct trace_seq *p, char *name);
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#define __print_disk_name(name) nullb_trace_disk_name(p, name)
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci#ifndef TRACE_HEADER_MULTI_READ
248c2ecf20Sopenharmony_cistatic inline void __assign_disk_name(char *name, struct gendisk *disk)
258c2ecf20Sopenharmony_ci{
268c2ecf20Sopenharmony_ci	if (disk)
278c2ecf20Sopenharmony_ci		memcpy(name, disk->disk_name, DISK_NAME_LEN);
288c2ecf20Sopenharmony_ci	else
298c2ecf20Sopenharmony_ci		memset(name, 0, DISK_NAME_LEN);
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci#endif
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ciTRACE_EVENT(nullb_zone_op,
348c2ecf20Sopenharmony_ci	    TP_PROTO(struct nullb_cmd *cmd, unsigned int zone_no,
358c2ecf20Sopenharmony_ci		     unsigned int zone_cond),
368c2ecf20Sopenharmony_ci	    TP_ARGS(cmd, zone_no, zone_cond),
378c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
388c2ecf20Sopenharmony_ci		__array(char, disk, DISK_NAME_LEN)
398c2ecf20Sopenharmony_ci		__field(enum req_opf, op)
408c2ecf20Sopenharmony_ci		__field(unsigned int, zone_no)
418c2ecf20Sopenharmony_ci		__field(unsigned int, zone_cond)
428c2ecf20Sopenharmony_ci	    ),
438c2ecf20Sopenharmony_ci	    TP_fast_assign(
448c2ecf20Sopenharmony_ci		__entry->op = req_op(cmd->rq);
458c2ecf20Sopenharmony_ci		__entry->zone_no = zone_no;
468c2ecf20Sopenharmony_ci		__entry->zone_cond = zone_cond;
478c2ecf20Sopenharmony_ci		__assign_disk_name(__entry->disk, cmd->rq->rq_disk);
488c2ecf20Sopenharmony_ci	    ),
498c2ecf20Sopenharmony_ci	    TP_printk("%s req=%-15s zone_no=%u zone_cond=%-10s",
508c2ecf20Sopenharmony_ci		      __print_disk_name(__entry->disk),
518c2ecf20Sopenharmony_ci		      blk_op_str(__entry->op),
528c2ecf20Sopenharmony_ci		      __entry->zone_no,
538c2ecf20Sopenharmony_ci		      blk_zone_cond_str(__entry->zone_cond))
548c2ecf20Sopenharmony_ci);
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ciTRACE_EVENT(nullb_report_zones,
578c2ecf20Sopenharmony_ci	    TP_PROTO(struct nullb *nullb, unsigned int nr_zones),
588c2ecf20Sopenharmony_ci	    TP_ARGS(nullb, nr_zones),
598c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
608c2ecf20Sopenharmony_ci		__array(char, disk, DISK_NAME_LEN)
618c2ecf20Sopenharmony_ci		__field(unsigned int, nr_zones)
628c2ecf20Sopenharmony_ci	    ),
638c2ecf20Sopenharmony_ci	    TP_fast_assign(
648c2ecf20Sopenharmony_ci		__entry->nr_zones = nr_zones;
658c2ecf20Sopenharmony_ci		__assign_disk_name(__entry->disk, nullb->disk);
668c2ecf20Sopenharmony_ci	    ),
678c2ecf20Sopenharmony_ci	    TP_printk("%s nr_zones=%u",
688c2ecf20Sopenharmony_ci		      __print_disk_name(__entry->disk), __entry->nr_zones)
698c2ecf20Sopenharmony_ci);
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci#endif /* _TRACE_NULLB_H */
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH
748c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
758c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
768c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci/* This part must be outside protection */
798c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
80