Commit 231ee390 authored by Yizhen Fan's avatar Yizhen Fan Committed by fanyizhen1995
Browse files

ub: ubcore add attr queried of query res cmd.



driver inclusion
category: feature
bugzilla: NA
CVE: NA

--------------------------------

Ubcore add attr queried of query res cmd.

The added attributes queried are:
- tp_cnt
- tpg_cnt
- utp_cnt
- seg_cnt

These attributes are queried from drivers.

Signed-off-by: default avatarGuoxin Qian <qianguoxin@huawei.com>
Signed-off-by: default avatarYizhen Fan <fanyizhen@huawei.com>
parent 84019dd8
Loading
Loading
Loading
Loading
+73 −0
Original line number Diff line number Diff line
@@ -274,6 +274,14 @@ static int ubcore_cmd_query_stats(struct ubcore_cmd_hdr *hdr)
static uint32_t ubcore_get_query_res_len(uint32_t type)
{
	switch (type) {
	case UBCORE_RES_KEY_UPI:
		return (uint32_t)sizeof(struct ubcore_res_upi_val);
	case UBCORE_RES_KEY_TP:
		return (uint32_t)sizeof(struct ubcore_res_tp_val);
	case UBCORE_RES_KEY_TPG:
		return (uint32_t)sizeof(struct ubcore_res_tpg_val);
	case UBCORE_RES_KEY_UTP:
		return (uint32_t)sizeof(struct ubcore_res_utp_val);
	case UBCORE_RES_KEY_JFS:
		return (uint32_t)sizeof(struct ubcore_res_jfs_val);
	case UBCORE_RES_KEY_JFR:
@@ -284,6 +292,8 @@ static uint32_t ubcore_get_query_res_len(uint32_t type)
		return (uint32_t)sizeof(struct ubcore_res_jetty_group_val);
	case UBCORE_RES_KEY_JFC:
		return (uint32_t)sizeof(struct ubcore_res_jfc_val);
	case UBCORE_RES_KEY_SEG:
		return (uint32_t)sizeof(struct ubcore_res_seg_val);
	case UBCORE_RES_KEY_URMA_DEV:
		return (uint32_t)sizeof(struct ubcore_res_dev_val);
	default:
@@ -294,6 +304,10 @@ static uint32_t ubcore_get_query_res_len(uint32_t type)

static void ubcore_dealloc_res_dev(struct ubcore_res_dev_val *ubcore_addr)
{
	if (ubcore_addr->seg_list != NULL) {
		vfree(ubcore_addr->seg_list);
		ubcore_addr->seg_list = NULL;
	}
	if (ubcore_addr->jfs_list != NULL) {
		vfree(ubcore_addr->jfs_list);
		ubcore_addr->jfs_list = NULL;
@@ -314,10 +328,26 @@ static void ubcore_dealloc_res_dev(struct ubcore_res_dev_val *ubcore_addr)
		vfree(ubcore_addr->jetty_group_list);
		ubcore_addr->jetty_group_list = NULL;
	}
	if (ubcore_addr->tp_list != NULL) {
		vfree(ubcore_addr->tp_list);
		ubcore_addr->tp_list = NULL;
	}
	if (ubcore_addr->tpg_list != NULL) {
		vfree(ubcore_addr->tpg_list);
		ubcore_addr->tpg_list = NULL;
	}
	if (ubcore_addr->utp_list != NULL) {
		vfree(ubcore_addr->utp_list);
		ubcore_addr->utp_list = NULL;
	}
}

static int ubcore_fill_res_addr(struct ubcore_res_dev_val *ubcore_addr)
{
	ubcore_addr->seg_list = vmalloc(sizeof(struct ubcore_seg_info) * ubcore_addr->seg_cnt);
	if (ubcore_addr->seg_list == NULL)
		return -ENOMEM;

	ubcore_addr->jfs_list = vmalloc(sizeof(uint32_t) * ubcore_addr->jfs_cnt);
	if (ubcore_addr->jfs_list == NULL)
		goto free_seg_list;
@@ -338,7 +368,25 @@ static int ubcore_fill_res_addr(struct ubcore_res_dev_val *ubcore_addr)
	if (ubcore_addr->jetty_group_list == NULL)
		goto free_jetty_list;

	ubcore_addr->tp_list = vmalloc(sizeof(uint32_t) * ubcore_addr->tp_cnt);
	if (ubcore_addr->tp_list == NULL)
		goto free_jetty_group_list;

	ubcore_addr->tpg_list = vmalloc(sizeof(uint32_t) * ubcore_addr->tpg_cnt);
	if (ubcore_addr->tpg_list == NULL)
		goto free_tp_list;

	ubcore_addr->utp_list = vmalloc(sizeof(uint32_t) * ubcore_addr->utp_cnt);
	if (ubcore_addr->utp_list == NULL)
		goto free_tpg_list;

	return 0;
free_tpg_list:
	vfree(ubcore_addr->tpg_list);
free_tp_list:
	vfree(ubcore_addr->tp_list);
free_jetty_group_list:
	vfree(ubcore_addr->jetty_group_list);
free_jetty_list:
	vfree(ubcore_addr->jetty_list);
free_jfc_list:
@@ -357,6 +405,13 @@ static int ubcore_fill_user_res_dev(struct ubcore_res_dev_val *dev_val,
{
	int ret;

	dev_val->seg_cnt = ubcore_addr->seg_cnt;
	ret = ubcore_copy_to_user((void __user *)(uintptr_t)(uint64_t)dev_val->seg_list,
				  ubcore_addr->seg_list,
				  dev_val->seg_cnt * sizeof(struct ubcore_seg_info));
	if (ret != 0)
		return ret;

	dev_val->jfs_cnt = ubcore_addr->jfs_cnt;
	ret = ubcore_copy_to_user((void __user *)(uintptr_t)(uint64_t)dev_val->jfs_list,
				  ubcore_addr->jfs_list, dev_val->jfs_cnt * sizeof(uint32_t));
@@ -388,6 +443,24 @@ static int ubcore_fill_user_res_dev(struct ubcore_res_dev_val *dev_val,
	if (ret != 0)
		return ret;

	dev_val->tp_cnt = ubcore_addr->tp_cnt;
	ret = ubcore_copy_to_user((void __user *)(uintptr_t)(uint64_t)dev_val->tp_list,
				  ubcore_addr->tp_list, dev_val->tp_cnt * sizeof(uint32_t));
	if (ret != 0)
		return ret;

	dev_val->tpg_cnt = ubcore_addr->tpg_cnt;
	ret = ubcore_copy_to_user((void __user *)(uintptr_t)(uint64_t)dev_val->tpg_list,
				  ubcore_addr->tpg_list, dev_val->tpg_cnt * sizeof(uint32_t));
	if (ret != 0)
		return ret;

	dev_val->utp_cnt = ubcore_addr->utp_cnt;
	ret = ubcore_copy_to_user((void __user *)(uintptr_t)(uint64_t)dev_val->utp_list,
				  ubcore_addr->utp_list, dev_val->utp_cnt * sizeof(uint32_t));
	if (ret != 0)
		return ret;

	return 0;
}