110 lines
3.4 KiB
Diff
110 lines
3.4 KiB
Diff
From 410d1a5b83b161dc189e6df90cbfa4cdeb016b8d Mon Sep 17 00:00:00 2001
|
|
From: Xiang Chen <chenxiang66@hisilicon.com>
|
|
Date: Thu, 21 Apr 2022 21:50:06 +0800
|
|
Subject: [PATCH 087/108] scsi: hisi_sas: Limit users changing debugfs BIST
|
|
count value
|
|
|
|
mainline inclusion
|
|
from mainline-v5.17-rc1
|
|
commit ae9b69e85eb7ecb32ddce7c04a10a3c69ad60e52
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EKNE
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ae9b69e85eb7ecb32ddce7c04a10a3c69ad60e52
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Add a file operation for "cnt" file under bist directory, so users can only
|
|
read "cnt" or clear "cnt" to zero, but cannot randomly modify.
|
|
|
|
Link: https://lore.kernel.org/r/1645703489-87194-6-git-send-email-john.garry@huawei.com
|
|
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
|
|
Signed-off-by: Qi Liu <liuqi115@huawei.com>
|
|
Signed-off-by: John Garry <john.garry@huawei.com>
|
|
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Signed-off-by: Fujai Ni<nifuijia1@hisilicon.com>
|
|
Reviewed-by: Jason Yan <yanaijie@huawei.com>
|
|
Reviewed-by: Qi Liu <liuqi115@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: YunYi Yang <yangyunyi2@huawei.com>
|
|
|
|
Conflicts:
|
|
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
---
|
|
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 52 +++++++++++++++++++++++++-
|
|
1 file changed, 50 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
index 17b078abe2a8..e917d6e9da10 100644
|
|
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
|
|
@@ -4368,6 +4368,54 @@ static const struct file_operations debugfs_bist_phy_v3_hw_fops = {
|
|
.owner = THIS_MODULE,
|
|
};
|
|
|
|
+static ssize_t debugfs_bist_cnt_v3_hw_write(struct file *filp,
|
|
+ const char __user *buf,
|
|
+ size_t count, loff_t *ppos)
|
|
+{
|
|
+ struct seq_file *m = filp->private_data;
|
|
+ struct hisi_hba *hisi_hba = m->private;
|
|
+ unsigned int cnt;
|
|
+ int val;
|
|
+
|
|
+ if (hisi_hba->bist_loopback_enable)
|
|
+ return -EPERM;
|
|
+
|
|
+ val = kstrtouint_from_user(buf, count, 0, &cnt);
|
|
+ if (val)
|
|
+ return val;
|
|
+
|
|
+ if (cnt)
|
|
+ return -EINVAL;
|
|
+
|
|
+ hisi_hba->bist_loopback_cnt = 0;
|
|
+ return count;
|
|
+}
|
|
+
|
|
+static int debugfs_bist_cnt_v3_hw_show(struct seq_file *s, void *p)
|
|
+{
|
|
+ struct hisi_hba *hisi_hba = s->private;
|
|
+
|
|
+ seq_printf(s, "%u\n", hisi_hba->bist_loopback_cnt);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int debugfs_bist_cnt_v3_hw_open(struct inode *inode,
|
|
+ struct file *filp)
|
|
+{
|
|
+ return single_open(filp, debugfs_bist_cnt_v3_hw_show,
|
|
+ inode->i_private);
|
|
+}
|
|
+
|
|
+static const struct file_operations debugfs_bist_cnt_v3_hw_ops = {
|
|
+ .open = debugfs_bist_cnt_v3_hw_open,
|
|
+ .read = seq_read,
|
|
+ .write = debugfs_bist_cnt_v3_hw_write,
|
|
+ .llseek = seq_lseek,
|
|
+ .release = single_release,
|
|
+ .owner = THIS_MODULE,
|
|
+};
|
|
+
|
|
static const struct {
|
|
int value;
|
|
char *name;
|
|
@@ -5006,8 +5054,8 @@ static void debugfs_bist_init_v3_hw(struct hisi_hba *hisi_hba)
|
|
debugfs_create_file("phy_id", 0600, hisi_hba->debugfs_bist_dentry,
|
|
hisi_hba, &debugfs_bist_phy_v3_hw_fops);
|
|
|
|
- debugfs_create_u32("cnt", 0600, hisi_hba->debugfs_bist_dentry,
|
|
- &hisi_hba->bist_loopback_cnt);
|
|
+ debugfs_create_file("cnt", 0600, hisi_hba->debugfs_bist_dentry,
|
|
+ hisi_hba, &debugfs_bist_cnt_v3_hw_ops);
|
|
|
|
debugfs_create_file("loopback_mode", 0600,
|
|
hisi_hba->debugfs_bist_dentry,
|
|
--
|
|
2.27.0
|
|
|