linux/drivers/scsi/qedi/qedi_dbg.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * QLogic iSCSI Offload Driver
   4 * Copyright (c) 2016 Cavium Inc.
   5 */
   6
   7#include "qedi_dbg.h"
   8#include <linux/vmalloc.h>
   9
  10void
  11qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
  12             const char *fmt, ...)
  13{
  14        va_list va;
  15        struct va_format vaf;
  16
  17        va_start(va, fmt);
  18
  19        vaf.fmt = fmt;
  20        vaf.va = &va;
  21
  22        if (likely(qedi) && likely(qedi->pdev))
  23                pr_err("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
  24                       func, line, qedi->host_no, &vaf);
  25        else
  26                pr_err("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
  27
  28        va_end(va);
  29}
  30
  31void
  32qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
  33              const char *fmt, ...)
  34{
  35        va_list va;
  36        struct va_format vaf;
  37
  38        va_start(va, fmt);
  39
  40        vaf.fmt = fmt;
  41        vaf.va = &va;
  42
  43        if (!(qedi_dbg_log & QEDI_LOG_WARN))
  44                goto ret;
  45
  46        if (likely(qedi) && likely(qedi->pdev))
  47                pr_warn("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
  48                        func, line, qedi->host_no, &vaf);
  49        else
  50                pr_warn("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
  51
  52ret:
  53        va_end(va);
  54}
  55
  56void
  57qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
  58                const char *fmt, ...)
  59{
  60        va_list va;
  61        struct va_format vaf;
  62
  63        va_start(va, fmt);
  64
  65        vaf.fmt = fmt;
  66        vaf.va = &va;
  67
  68        if (!(qedi_dbg_log & QEDI_LOG_NOTICE))
  69                goto ret;
  70
  71        if (likely(qedi) && likely(qedi->pdev))
  72                pr_notice("[%s]:[%s:%d]:%d: %pV",
  73                          dev_name(&qedi->pdev->dev), func, line,
  74                          qedi->host_no, &vaf);
  75        else
  76                pr_notice("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
  77
  78ret:
  79        va_end(va);
  80}
  81
  82void
  83qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
  84              u32 level, const char *fmt, ...)
  85{
  86        va_list va;
  87        struct va_format vaf;
  88
  89        va_start(va, fmt);
  90
  91        vaf.fmt = fmt;
  92        vaf.va = &va;
  93
  94        if (!(qedi_dbg_log & level))
  95                goto ret;
  96
  97        if (likely(qedi) && likely(qedi->pdev))
  98                pr_info("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
  99                        func, line, qedi->host_no, &vaf);
 100        else
 101                pr_info("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
 102
 103ret:
 104        va_end(va);
 105}
 106
 107int
 108qedi_create_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
 109{
 110        int ret = 0;
 111
 112        for (; iter->name; iter++) {
 113                ret = sysfs_create_bin_file(&shost->shost_gendev.kobj,
 114                                            iter->attr);
 115                if (ret)
 116                        pr_err("Unable to create sysfs %s attr, err(%d).\n",
 117                               iter->name, ret);
 118        }
 119        return ret;
 120}
 121
 122void
 123qedi_remove_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
 124{
 125        for (; iter->name; iter++)
 126                sysfs_remove_bin_file(&shost->shost_gendev.kobj, iter->attr);
 127}
 128