diff --git a/drivers/misc/sdma-dae/sdma_auth.c b/drivers/misc/sdma-dae/sdma_auth.c index 1cfbc6fe1c7be8e18d9c324cc7cbe474ac3b381c..6b6585a2e807ec47030d93f65a491355bec0353e 100644 --- a/drivers/misc/sdma-dae/sdma_auth.c +++ b/drivers/misc/sdma-dae/sdma_auth.c @@ -137,7 +137,7 @@ static int sdma_add_authority_ht(struct hisi_sdma_own_pid_hte *entry, u32 count, if (sub_entry) continue; - sub_entry = kzalloc(sizeof(struct hisi_sdma_sub_pid_hte), GFP_ATOMIC); + sub_entry = kzalloc(sizeof(struct hisi_sdma_sub_pid_hte), GFP_KERNEL); if (!sub_entry) { sdma_clear_residual_auth_ht(entry, list, j); return -ENOMEM; @@ -164,7 +164,10 @@ static int sdma_create_authority_ht(u32 pid, u32 pasid, u32 num, u32 *list) entry->pasid = pasid; hash_init(entry->sdma_submitter_pid_ht); ret = sdma_add_authority_ht(entry, num, list); - hash_add(g_authority->sdma_owner_pid_ht, &entry->node, entry->pid); + if (ret != 0) + kfree(entry); + else + hash_add(g_authority->sdma_owner_pid_ht, &entry->node, entry->pid); return ret; } @@ -209,7 +212,7 @@ int sdma_check_authority(u32 pasid, u32 owner_pid, u32 submitter_pid, u32 *owner } sub_entry = sdma_search_submitter_pid(entry, submitter_pid); if (!sub_entry) { - pr_err("The submitter[%u] not authorithed\n", submitter_pid); + pr_err("The submitter[%u] not authorized\n", submitter_pid); read_unlock(&g_authority->owner_pid_lock); return -ENODATA; } diff --git a/drivers/misc/sdma-dae/sdma_dbg.c b/drivers/misc/sdma-dae/sdma_dbg.c index 17097e84a89226ad79f023bd3680d40fd918daaa..36920d8713ef08143327ae77184062fe71d7d59a 100644 --- a/drivers/misc/sdma-dae/sdma_dbg.c +++ b/drivers/misc/sdma-dae/sdma_dbg.c @@ -36,6 +36,9 @@ static struct hisi_sdma_chn_num sdma_chn_info(struct seq_file *f, struct hisi_sd seq_printf(f, "SDMA[%u] Total channel num = %u,", dev->idx, chn_num.total_chn_num); seq_printf(f, "share channel num = %u, exclusive channel num = %u\n", chn_num.share_chn_num, chn_num.total_chn_num - chn_num.share_chn_num); + seq_puts(f, "\n"); + seq_printf(f, "SDMA[%u] channel send queue depth = %u, completion queue depth = %u\n", + dev->idx, HISI_SDMA_SQ_LENGTH, HISI_SDMA_CQ_LENGTH); split_line(f); return chn_num; @@ -86,8 +89,6 @@ static int sdma_debugfs_stats_show(struct seq_file *f, void *data SDMA_UNUSED) split_line(f); seq_printf(f, "SDMA Devices Num = %u\n", num); - if (num == 0) - return 0; for (i = 0; i < num; i++) { spin_lock(&dbg_g_info.core_dev->device_lock); @@ -240,8 +241,6 @@ static int sdma_debugfs_error_show(struct seq_file *f, void *data SDMA_UNUSED) split_line(f); seq_printf(f, "SDMA Devices Num = %u\n", num); - if (num == 0) - return 0; for (i = 0; i < num; i++) { spin_lock(&dbg_g_info.core_dev->device_lock); diff --git a/drivers/misc/sdma-dae/sdma_main.c b/drivers/misc/sdma-dae/sdma_main.c index 2e01ba5715e41678676dce9adaf99487f47452a5..a28a28f0f78bebccfd5966e6a17b5e8f7a1a8ab8 100644 --- a/drivers/misc/sdma-dae/sdma_main.c +++ b/drivers/misc/sdma-dae/sdma_main.c @@ -19,7 +19,7 @@ #define BASE_DIR "sdma" /* Subdir in /sys/kernel/debug/ */ #define UPPER_SHIFT 32 #define MAX_INPUT_LENGTH 128 -#define SDMA_VERSION "1.0.5" +#define SDMA_VERSION "1.0.6" u32 share_chns = 16; module_param(share_chns, uint, RW_R_R); @@ -144,11 +144,11 @@ static void sdma_free_all_sq_cq(struct hisi_sdma_device *psdma_dev) { struct hisi_sdma_channel *pchan; int sync_size; - int i; + u16 i; sync_size = sizeof(struct hisi_sdma_queue_info); - for (i = psdma_dev->nr_channel - 1; i >= 0; i--) { + for (i = 0; i < psdma_dev->nr_channel; i++) { pchan = psdma_dev->channels + i; if (pchan->io_base) sdma_channel_reset(pchan);