Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * QLogic iSCSI Offload Driver
0004  * Copyright (c) 2016 Cavium Inc.
0005  */
0006 
0007 #include "qedi_dbg.h"
0008 #include <linux/vmalloc.h>
0009 
0010 void
0011 qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0012          const char *fmt, ...)
0013 {
0014     va_list va;
0015     struct va_format vaf;
0016 
0017     va_start(va, fmt);
0018 
0019     vaf.fmt = fmt;
0020     vaf.va = &va;
0021 
0022     if (likely(qedi) && likely(qedi->pdev))
0023         pr_err("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0024                func, line, qedi->host_no, &vaf);
0025     else
0026         pr_err("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0027 
0028     va_end(va);
0029 }
0030 
0031 void
0032 qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0033           const char *fmt, ...)
0034 {
0035     va_list va;
0036     struct va_format vaf;
0037 
0038     va_start(va, fmt);
0039 
0040     vaf.fmt = fmt;
0041     vaf.va = &va;
0042 
0043     if (!(qedi_dbg_log & QEDI_LOG_WARN))
0044         goto ret;
0045 
0046     if (likely(qedi) && likely(qedi->pdev))
0047         pr_warn("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0048             func, line, qedi->host_no, &vaf);
0049     else
0050         pr_warn("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0051 
0052 ret:
0053     va_end(va);
0054 }
0055 
0056 void
0057 qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0058         const char *fmt, ...)
0059 {
0060     va_list va;
0061     struct va_format vaf;
0062 
0063     va_start(va, fmt);
0064 
0065     vaf.fmt = fmt;
0066     vaf.va = &va;
0067 
0068     if (!(qedi_dbg_log & QEDI_LOG_NOTICE))
0069         goto ret;
0070 
0071     if (likely(qedi) && likely(qedi->pdev))
0072         pr_notice("[%s]:[%s:%d]:%d: %pV",
0073               dev_name(&qedi->pdev->dev), func, line,
0074               qedi->host_no, &vaf);
0075     else
0076         pr_notice("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0077 
0078 ret:
0079     va_end(va);
0080 }
0081 
0082 void
0083 qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0084           u32 level, const char *fmt, ...)
0085 {
0086     va_list va;
0087     struct va_format vaf;
0088 
0089     va_start(va, fmt);
0090 
0091     vaf.fmt = fmt;
0092     vaf.va = &va;
0093 
0094     if (!(qedi_dbg_log & level))
0095         goto ret;
0096 
0097     if (likely(qedi) && likely(qedi->pdev))
0098         pr_info("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0099             func, line, qedi->host_no, &vaf);
0100     else
0101         pr_info("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0102 
0103 ret:
0104     va_end(va);
0105 }
0106 
0107 int
0108 qedi_create_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
0109 {
0110     int ret = 0;
0111 
0112     for (; iter->name; iter++) {
0113         ret = sysfs_create_bin_file(&shost->shost_gendev.kobj,
0114                         iter->attr);
0115         if (ret)
0116             pr_err("Unable to create sysfs %s attr, err(%d).\n",
0117                    iter->name, ret);
0118     }
0119     return ret;
0120 }
0121 
0122 void
0123 qedi_remove_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
0124 {
0125     for (; iter->name; iter++)
0126         sysfs_remove_bin_file(&shost->shost_gendev.kobj, iter->attr);
0127 }