From bd323b07e49644efdb1890ef53232ad32925dd2d Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Sun, 24 Apr 2022 09:54:30 +0800
Subject: [PATCH 123/183] uadk: qm: optimize sgl copy function

1.Reduce the number of variables and optimize memcpy statements.
2.A single line contains more than 80 characters, fix it.

Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
 drv/hisi_qm_udrv.c     | 81 +++++++++++++++++++++---------------------
 include/hisi_qm_udrv.h |  4 +--
 2 files changed, 43 insertions(+), 42 deletions(-)

diff --git a/drv/hisi_qm_udrv.c b/drv/hisi_qm_udrv.c
index 53d5a55..3cb6ffb 100644
--- a/drv/hisi_qm_udrv.c
+++ b/drv/hisi_qm_udrv.c
@@ -262,15 +262,18 @@ static int his_qm_set_qp_ctx(handle_t h_ctx, struct hisi_qm_priv *config,
 static int hisi_qm_get_qfrs_offs(handle_t h_ctx,
 				 struct hisi_qm_queue_info *q_info)
 {
-	q_info->region_size[UACCE_QFRT_DUS] = wd_ctx_get_region_size(h_ctx,
-								UACCE_QFRT_DUS);
-	if (!q_info->region_size[UACCE_QFRT_DUS]) {
+	enum uacce_qfrt type;
+
+	type = UACCE_QFRT_DUS;
+	q_info->region_size[type] = wd_ctx_get_region_size(h_ctx, type);
+	if (!q_info->region_size[type]) {
 		WD_ERR("failed to get DUS qfrs offset!\n");
 		return -WD_EINVAL;
 	}
-	q_info->region_size[UACCE_QFRT_MMIO] = wd_ctx_get_region_size(h_ctx,
-								UACCE_QFRT_MMIO);
-	if (!q_info->region_size[UACCE_QFRT_MMIO]) {
+
+	type = UACCE_QFRT_MMIO;
+	q_info->region_size[type] = wd_ctx_get_region_size(h_ctx, type);
+	if (!q_info->region_size[type]) {
 		WD_ERR("failed to get MMIO qfrs offset!\n");
 		return -WD_EINVAL;
 	}
@@ -629,7 +632,8 @@ handle_t hisi_qm_create_sglpool(__u32 sgl_num, __u32 sge_num)
 		if (!sgl_pool->sgl[i])
 			goto err_out;
 
-		sgl_pool->sgl_align[i] = hisi_qm_align_sgl(sgl_pool->sgl[i], sge_num);
+		sgl_pool->sgl_align[i] = hisi_qm_align_sgl(sgl_pool->sgl[i],
+							   sge_num);
 	}
 
 	sgl_pool->sgl_num = sgl_num;
@@ -808,35 +812,33 @@ handle_t hisi_qm_get_sglpool(handle_t h_qp)
 	return qp->h_sgl_pool;
 }
 
-static void hisi_qm_sgl_copy_inner(void *dst_buff, struct hisi_sgl *hw_sgl,
+static void hisi_qm_sgl_copy_inner(void *pbuff, struct hisi_sgl *hw_sgl,
 				   int begin_sge, __u32 sge_offset, __u32 size)
 {
 	struct hisi_sgl *tmp = hw_sgl;
-	__u32 offset = 0;
-	__u32 len;
-	int i;
+	int i = begin_sge + 1;
+	__u32 offset;
+	void *src;
 
-	len = tmp->sge_entries[begin_sge].len - sge_offset;
+	src = (void *)tmp->sge_entries[begin_sge].buff + sge_offset;
+	offset = tmp->sge_entries[begin_sge].len - sge_offset;
 	/* the first one is enough for copy size, copy and return */
-	if (len >= size) {
-		memcpy(dst_buff,
-			(void *)tmp->sge_entries[begin_sge].buff + sge_offset, size);
+	if (offset >= size) {
+		memcpy(pbuff, src, size);
 		return;
 	}
 
-	memcpy(dst_buff, (void *)tmp->sge_entries[begin_sge].buff + sge_offset, len);
-	offset += len;
-
-	i = begin_sge + 1;
+	memcpy(pbuff, src, offset);
 
 	while (tmp) {
 		for (; i < tmp->entry_sum_in_sgl; i++) {
+			src = (void *)tmp->sge_entries[i].buff;
 			if (offset + tmp->sge_entries[i].len >= size) {
-				memcpy(dst_buff + offset, (void *)tmp->sge_entries[i].buff, size - offset);
+				memcpy(pbuff + offset, src, size - offset);
 				return;
 			}
 
-			memcpy(dst_buff + offset, (void *)tmp->sge_entries[i].buff, tmp->sge_entries[i].len);
+			memcpy(pbuff + offset, src, tmp->sge_entries[i].len);
 			offset += tmp->sge_entries[i].len;
 		}
 
@@ -845,32 +847,30 @@ static void hisi_qm_sgl_copy_inner(void *dst_buff, struct hisi_sgl *hw_sgl,
 	}
 }
 
-static void hisi_qm_pbuff_copy_inner(const void *buff, struct hisi_sgl *hw_sgl,
-				int begin_sge, __u32 sge_offset, __u32 size)
+static void hisi_qm_pbuff_copy_inner(void *pbuff, struct hisi_sgl *hw_sgl,
+				     int begin_sge, __u32 sge_offset,
+				     __u32 size)
 {
 	struct hisi_sgl *tmp = hw_sgl;
+	int i = begin_sge + 1;
 	__u32 offset = 0;
-	__u32 len;
-	int i;
+	void *dst;
 
-	len = tmp->sge_entries[begin_sge].len - sge_offset;
-	if (len >= size) {
-		memcpy((void *)tmp->sge_entries[begin_sge].buff + sge_offset,
-			buff, size);
+	if (tmp->sge_entries[begin_sge].len - sge_offset >= size) {
+		dst = (void *)tmp->sge_entries[begin_sge].buff + sge_offset;
+		memcpy(dst, pbuff, size);
 		return;
 	}
 
-	i = begin_sge + 1;
 	while (tmp) {
 		for (; i < tmp->entry_sum_in_sgl; i++) {
+			dst = (void *)tmp->sge_entries[i].buff;
 			if (offset + tmp->sge_entries[i].len >= size) {
-				memcpy((void *)tmp->sge_entries[i].buff,
-					buff + offset, size - offset);
+				memcpy(dst, pbuff + offset, size - offset);
 				return;
 			}
 
-			memcpy((void *)tmp->sge_entries[i].buff,
-				buff + offset, tmp->sge_entries[i].len);
+			memcpy(dst, pbuff + offset, tmp->sge_entries[i].len);
 			offset += tmp->sge_entries[i].len;
 		}
 
@@ -879,16 +879,16 @@ static void hisi_qm_pbuff_copy_inner(const void *buff, struct hisi_sgl *hw_sgl,
 	}
 }
 
-void hisi_qm_sgl_copy(void *dst_buff, void *hw_sgl, __u32 offset, __u32 size,
-			__u8 direct)
+void hisi_qm_sgl_copy(void *pbuff, void *hw_sgl, __u32 offset, __u32 size,
+		      __u8 direct)
 {
 	struct hisi_sgl *tmp = hw_sgl;
-	__u32 len = 0;
 	__u32 sge_offset = 0;
+	__u32 len = 0;
 	int begin_sge = 0;
 	int i;
 
-	if (!dst_buff || !size || !tmp)
+	if (!pbuff || !size || !tmp)
 		return;
 
 	while (len + tmp->entry_size_in_sgl <= offset) {
@@ -916,9 +916,10 @@ void hisi_qm_sgl_copy(void *dst_buff, void *hw_sgl, __u32 offset, __u32 size,
 	}
 
 	if (direct == COPY_SGL_TO_PBUFF)
-		hisi_qm_sgl_copy_inner(dst_buff, tmp, begin_sge, sge_offset, size);
+		hisi_qm_sgl_copy_inner(pbuff, tmp, begin_sge, sge_offset, size);
 	else
-		hisi_qm_pbuff_copy_inner(dst_buff, tmp, begin_sge, sge_offset, size);
+		hisi_qm_pbuff_copy_inner(pbuff, tmp, begin_sge, sge_offset,
+					 size);
 }
 
 void hisi_qm_dump_sgl(void *sgl)
diff --git a/include/hisi_qm_udrv.h b/include/hisi_qm_udrv.h
index 773f57b..2395fd7 100644
--- a/include/hisi_qm_udrv.h
+++ b/include/hisi_qm_udrv.h
@@ -170,7 +170,7 @@ handle_t hisi_qm_get_sglpool(handle_t h_qp);
 
 /**
  * hisi_qm_sgl_copy: Buffer copying from hw sgl to pbuff or pbuff to sgl
- * @dst_buff: Dst pbuff point
+ * @pbuff: pbuff point
  * @hw_sgl: Src hw sgl point
  * @offset: Offset in hw sgl chain
  * @size: Copy size
@@ -179,7 +179,7 @@ handle_t hisi_qm_get_sglpool(handle_t h_qp);
  * If the len of sgl is not enough, will copy much as soon as
  * possible before the offset to end of the sgl.
  */
-void hisi_qm_sgl_copy(void *dst_buff, void *hw_sgl, __u32 offset,
+void hisi_qm_sgl_copy(void *pbuff, void *hw_sgl, __u32 offset,
 	__u32 size, __u8 direct);
 
 /**
-- 
2.27.0

