On Mon, 04 May 2020 18:16:21 +0300
Konstantin Khlebnikov <khlebni...@yandex-team.ru> wrote:

> +/* Request operations, see enum req_opf */
> +
> +TRACE_DEFINE_ENUM(REQ_OP_READ);
> +TRACE_DEFINE_ENUM(REQ_OP_WRITE);
> +TRACE_DEFINE_ENUM(REQ_OP_FLUSH);
> +TRACE_DEFINE_ENUM(REQ_OP_DISCARD);
> +TRACE_DEFINE_ENUM(REQ_OP_SECURE_ERASE);
> +TRACE_DEFINE_ENUM(REQ_OP_ZONE_RESET);
> +TRACE_DEFINE_ENUM(REQ_OP_WRITE_SAME);
> +TRACE_DEFINE_ENUM(REQ_OP_ZONE_RESET_ALL);
> +TRACE_DEFINE_ENUM(REQ_OP_WRITE_ZEROES);
> +TRACE_DEFINE_ENUM(REQ_OP_ZONE_OPEN);
> +TRACE_DEFINE_ENUM(REQ_OP_ZONE_CLOSE);
> +TRACE_DEFINE_ENUM(REQ_OP_ZONE_FINISH);
> +TRACE_DEFINE_ENUM(REQ_OP_SCSI_IN);
> +TRACE_DEFINE_ENUM(REQ_OP_SCSI_OUT);
> +TRACE_DEFINE_ENUM(REQ_OP_DRV_IN);
> +TRACE_DEFINE_ENUM(REQ_OP_DRV_OUT);
> +
> +#define BLOCK_REQ_OP_STRINGS                                 \
> +     { REQ_OP_READ,          "READ" },                       \
> +     { REQ_OP_WRITE,         "WRITE" },                      \
> +     { REQ_OP_FLUSH,         "FLUSH" },                      \
> +     { REQ_OP_DISCARD,       "DISCARD" },                    \
> +     { REQ_OP_SECURE_ERASE,  "SECURE_ERASE" },               \
> +     { REQ_OP_ZONE_RESET,    "ZONE_RESET" },                 \
> +     { REQ_OP_WRITE_SAME,    "WRITE_SAME" },                 \
> +     { REQ_OP_ZONE_RESET_ALL,"ZONE_RESET_ALL" },             \
> +     { REQ_OP_WRITE_ZEROES,  "WRITE_ZEROES" },               \
> +     { REQ_OP_ZONE_OPEN,     "ZONE_OPEN" },                  \
> +     { REQ_OP_ZONE_CLOSE,    "ZONE_CLOSE" },                 \
> +     { REQ_OP_ZONE_FINISH,   "ZONE_FINISH" },                \
> +     { REQ_OP_SCSI_IN,       "SCSI_IN" },                    \
> +     { REQ_OP_SCSI_OUT,      "SCSI_OUT" },                   \
> +     { REQ_OP_DRV_IN,        "DRV_IN" },                     \
> +     { REQ_OP_DRV_OUT,       "DRV_OUT" }
> +
> +#define show_block_req_op(req)                                       \
> +     __print_symbolic((req) & REQ_OP_MASK, BLOCK_REQ_OP_STRINGS)
> +

A common trick to avoid the duplication from above is to do this:

#define BLOCK_REQ_OP_STRINGS                                    \
        EM( REQ_OP_READ,        "READ" )                        \
        EM( REQ_OP_WRITE,       "WRITE" )                       \
        EM( REQ_OP_FLUSH,       "FLUSH" )                       \
        EM( REQ_OP_DISCARD,     "DISCARD" )                     \
        EM( REQ_OP_SECURE_ERASE, "SECURE_ERASE" )               \
        EM( REQ_OP_ZONE_RESET,  "ZONE_RESET" )                  \
        EM( REQ_OP_WRITE_SAME,  "WRITE_SAME" )                  \
        EM( REQ_OP_ZONE_RESET_ALL,"ZONE_RESET_ALL" )            \
        EM( REQ_OP_WRITE_ZEROES, "WRITE_ZEROES" )               \
        EM( REQ_OP_ZONE_OPEN,   "ZONE_OPEN" )                   \
        EM( REQ_OP_ZONE_CLOSE,  "ZONE_CLOSE" )                  \
        EM( REQ_OP_ZONE_FINISH, "ZONE_FINISH" )                 \
        EM( REQ_OP_SCSI_IN,     "SCSI_IN" )                     \
        EM( REQ_OP_SCSI_OUT,    "SCSI_OUT" )                    \
        EM( REQ_OP_DRV_IN,      "DRV_IN" )                      \
        EMe( REQ_OP_DRV_OUT,    "DRV_OUT" )

#undef EM
#undef EMe

#define EM(a, b) TRACE_DEFINE_ENUM(a);
#define EMe(a, b) TRACE_DEFINE_ENUM(a);

BLOCK_REQ_OP_STRINGS

#undef EM
#undef EMe

#define EM(a, b) { a, b },
#define EMe(a, b)  { a , b }

#define show_block_req_op(req)
        __print_symbolic((req) & REQ_OP_MASK, BLOCK_REQ_OP_STRINGS)


Several other event files in include/trace/events do this.

-- Steve

Reply via email to