Skip to content

Commit 0a6e038

Browse files
Chenghai Huangherbertx
authored andcommitted
crypto: hisilicon - Adjust debugfs creation and release order
There is a scenario where the file directory is created but the file memory is not set. In this case, if a user accesses the file, an error occurs. So during the creation process of debugfs, memory should be allocated first before creating the directory. In the release process, the directory should be deleted first before releasing the memory to avoid the situation where the memory does not exist when accessing the directory. In addition, the directory released by the debugfs is a global variable. When the debugfs of an accelerator fails to be initialized, releasing the directory of the global variable affects the debugfs initialization of other accelerators. The debugfs root directory released by debugfs init should be a member of qm, not a global variable. Signed-off-by: Chenghai Huang <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 56f37ce commit 0a6e038

File tree

3 files changed

+32
-36
lines changed

3 files changed

+32
-36
lines changed

drivers/crypto/hisilicon/hpre/hpre_main.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,41 +1074,40 @@ static int hpre_debugfs_init(struct hisi_qm *qm)
10741074
struct device *dev = &qm->pdev->dev;
10751075
int ret;
10761076

1077-
qm->debug.debug_root = debugfs_create_dir(dev_name(dev),
1078-
hpre_debugfs_root);
1079-
1080-
qm->debug.sqe_mask_offset = HPRE_SQE_MASK_OFFSET;
1081-
qm->debug.sqe_mask_len = HPRE_SQE_MASK_LEN;
10821077
ret = hisi_qm_regs_debugfs_init(qm, hpre_diff_regs, ARRAY_SIZE(hpre_diff_regs));
10831078
if (ret) {
10841079
dev_warn(dev, "Failed to init HPRE diff regs!\n");
1085-
goto debugfs_remove;
1080+
return ret;
10861081
}
10871082

1083+
qm->debug.debug_root = debugfs_create_dir(dev_name(dev),
1084+
hpre_debugfs_root);
1085+
qm->debug.sqe_mask_offset = HPRE_SQE_MASK_OFFSET;
1086+
qm->debug.sqe_mask_len = HPRE_SQE_MASK_LEN;
1087+
10881088
hisi_qm_debug_init(qm);
10891089

10901090
if (qm->pdev->device == PCI_DEVICE_ID_HUAWEI_HPRE_PF) {
10911091
ret = hpre_ctrl_debug_init(qm);
10921092
if (ret)
1093-
goto failed_to_create;
1093+
goto debugfs_remove;
10941094
}
10951095

10961096
hpre_dfx_debug_init(qm);
10971097

10981098
return 0;
10991099

1100-
failed_to_create:
1101-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hpre_diff_regs));
11021100
debugfs_remove:
11031101
debugfs_remove_recursive(qm->debug.debug_root);
1102+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hpre_diff_regs));
11041103
return ret;
11051104
}
11061105

11071106
static void hpre_debugfs_exit(struct hisi_qm *qm)
11081107
{
1109-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hpre_diff_regs));
1110-
11111108
debugfs_remove_recursive(qm->debug.debug_root);
1109+
1110+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hpre_diff_regs));
11121111
}
11131112

11141113
static int hpre_pre_store_cap_reg(struct hisi_qm *qm)

drivers/crypto/hisilicon/sec2/sec_main.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -901,37 +901,36 @@ static int sec_debugfs_init(struct hisi_qm *qm)
901901
struct device *dev = &qm->pdev->dev;
902902
int ret;
903903

904-
qm->debug.debug_root = debugfs_create_dir(dev_name(dev),
905-
sec_debugfs_root);
906-
qm->debug.sqe_mask_offset = SEC_SQE_MASK_OFFSET;
907-
qm->debug.sqe_mask_len = SEC_SQE_MASK_LEN;
908-
909904
ret = hisi_qm_regs_debugfs_init(qm, sec_diff_regs, ARRAY_SIZE(sec_diff_regs));
910905
if (ret) {
911906
dev_warn(dev, "Failed to init SEC diff regs!\n");
912-
goto debugfs_remove;
907+
return ret;
913908
}
914909

910+
qm->debug.debug_root = debugfs_create_dir(dev_name(dev),
911+
sec_debugfs_root);
912+
qm->debug.sqe_mask_offset = SEC_SQE_MASK_OFFSET;
913+
qm->debug.sqe_mask_len = SEC_SQE_MASK_LEN;
914+
915915
hisi_qm_debug_init(qm);
916916

917917
ret = sec_debug_init(qm);
918918
if (ret)
919-
goto failed_to_create;
919+
goto debugfs_remove;
920920

921921
return 0;
922922

923-
failed_to_create:
924-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(sec_diff_regs));
925923
debugfs_remove:
926-
debugfs_remove_recursive(sec_debugfs_root);
924+
debugfs_remove_recursive(qm->debug.debug_root);
925+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(sec_diff_regs));
927926
return ret;
928927
}
929928

930929
static void sec_debugfs_exit(struct hisi_qm *qm)
931930
{
932-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(sec_diff_regs));
933-
934931
debugfs_remove_recursive(qm->debug.debug_root);
932+
933+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(sec_diff_regs));
935934
}
936935

937936
static int sec_show_last_regs_init(struct hisi_qm *qm)

drivers/crypto/hisilicon/zip/zip_main.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -887,36 +887,34 @@ static int hisi_zip_ctrl_debug_init(struct hisi_qm *qm)
887887
static int hisi_zip_debugfs_init(struct hisi_qm *qm)
888888
{
889889
struct device *dev = &qm->pdev->dev;
890-
struct dentry *dev_d;
891890
int ret;
892891

893-
dev_d = debugfs_create_dir(dev_name(dev), hzip_debugfs_root);
894-
895-
qm->debug.sqe_mask_offset = HZIP_SQE_MASK_OFFSET;
896-
qm->debug.sqe_mask_len = HZIP_SQE_MASK_LEN;
897-
qm->debug.debug_root = dev_d;
898892
ret = hisi_qm_regs_debugfs_init(qm, hzip_diff_regs, ARRAY_SIZE(hzip_diff_regs));
899893
if (ret) {
900894
dev_warn(dev, "Failed to init ZIP diff regs!\n");
901-
goto debugfs_remove;
895+
return ret;
902896
}
903897

898+
qm->debug.sqe_mask_offset = HZIP_SQE_MASK_OFFSET;
899+
qm->debug.sqe_mask_len = HZIP_SQE_MASK_LEN;
900+
qm->debug.debug_root = debugfs_create_dir(dev_name(dev),
901+
hzip_debugfs_root);
902+
904903
hisi_qm_debug_init(qm);
905904

906905
if (qm->fun_type == QM_HW_PF) {
907906
ret = hisi_zip_ctrl_debug_init(qm);
908907
if (ret)
909-
goto failed_to_create;
908+
goto debugfs_remove;
910909
}
911910

912911
hisi_zip_dfx_debug_init(qm);
913912

914913
return 0;
915914

916-
failed_to_create:
917-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hzip_diff_regs));
918915
debugfs_remove:
919-
debugfs_remove_recursive(hzip_debugfs_root);
916+
debugfs_remove_recursive(qm->debug.debug_root);
917+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hzip_diff_regs));
920918
return ret;
921919
}
922920

@@ -940,10 +938,10 @@ static void hisi_zip_debug_regs_clear(struct hisi_qm *qm)
940938

941939
static void hisi_zip_debugfs_exit(struct hisi_qm *qm)
942940
{
943-
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hzip_diff_regs));
944-
945941
debugfs_remove_recursive(qm->debug.debug_root);
946942

943+
hisi_qm_regs_debugfs_uninit(qm, ARRAY_SIZE(hzip_diff_regs));
944+
947945
if (qm->fun_type == QM_HW_PF) {
948946
hisi_zip_debug_regs_clear(qm);
949947
qm->debug.curr_qm_qp_num = 0;

0 commit comments

Comments
 (0)