Unverified Commit 20971a25 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!9283 hns3 udma: support non share jfr mode in UM

Merge Pull Request from: @zhaoweibo3 
 
driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I93S0P


CVE: NA

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

This patch kernel support non share jfr mode in UM mode.
Rq mode can improve the message rate.

Fixes: 85edae91 ("hns3 udma: add support of UM JFR")
Signed-off-by: default avatarQi Xu <xuqi54@hisilicon.com>
Signed-off-by: default avatarJie Lei <leijie31@huawei.com>
Signed-off-by: default avatarWeibo Zhao <zhaoweibo3@huawei.com>
 
Link:https://gitee.com/openeuler/kernel/pulls/9283

 

Reviewed-by: default avatarChunzhi Hu <huchunzhi@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents dd2c7011 fd35f03d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#define UDMA_HW_PAGE_SHIFT			12
#define UDMA_PAGE_SIZE				(1 << UDMA_HW_PAGE_SHIFT)
#define UDMA_HW_PAGE_ALIGN(x)		ALIGN(x, 1 << UDMA_HW_PAGE_SHIFT)
#define UDMA_PAGE_ALIGN(x)		ALIGN(x, 1 << PAGE_SHIFT)

static inline uint64_t umem_cal_npages(uint64_t va, uint64_t len)
{
+17 −0
Original line number Diff line number Diff line
@@ -809,6 +809,16 @@ struct udma_port {
	struct udma_scc_param	*scc_param;
};

struct udma_num_qp {
	struct attribute attr;
	ssize_t (*show)(struct kobject *kobj,
			struct udma_num_qp *attr,
			char *buf);
	ssize_t (*store)(struct kobject *kobj,
			struct udma_num_qp *attr,
			const char *buf, size_t count);
};

struct udma_dev {
	struct ubcore_device		ub_dev;
	struct pci_dev			*pci_dev;
@@ -863,6 +873,7 @@ struct udma_dev {
	struct udma_dev_debugfs		*dbgfs;
	uint64_t			notify_addr;
	struct udma_bank		bank[UDMA_QP_BANK_NUM];
	struct udma_num_qp		num_qp;
};

struct udma_seg {
@@ -926,6 +937,12 @@ static inline uint32_t to_udma_hem_entries_size(uint32_t count,
	return UDMA_HW_PAGE_ALIGN(count << buf_shift);
}

static inline uint32_t to_hem_entries_size_by_page(uint32_t count,
						uint32_t buf_shift)
{
	return UDMA_PAGE_ALIGN(count << buf_shift);
}

static inline uint32_t to_udma_hw_page_shift(uint32_t page_shift)
{
	return page_shift - UDMA_HW_PAGE_SHIFT;
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ static struct udma_dfx_sys_attr g_sysfs_udma_##file_name##_attr = {\

#define HW_ATTRS_LIST_MEMBER(file_name) (&g_sysfs_udma_##file_name##_attr.attr)
#define UDMA_DFX_FUNC_MAX	37
#define MAX_CHAR_NUM_DEV_NAME	12
#define MAX_CHAR_NUM_DEV_NAME	64
#define UDMA_DFX_STR_LEN_MAX	20

struct udma_dfx_info;
+3 −2
Original line number Diff line number Diff line
@@ -1831,7 +1831,7 @@ static int mtr_map_bufs(struct udma_dev *udma_dev, struct udma_mtr *mtr,
		npage = udma_get_kmem_bufs(udma_dev, pages, page_count,
					   mtr->kmem, page_shift);
	if (npage != page_count) {
		dev_err(dev, "failed to get mtr page %d != %d.\n", npage,
		dev_err(dev, "failed to get mtr page: get pages %d != need pages %d.\n", npage,
			page_count);
		ret = -ENOBUFS;
		goto err_alloc_list;
@@ -1939,7 +1939,8 @@ int udma_mtr_create(struct udma_dev *udma_dev, struct udma_mtr *mtr,
	/* Write buffer's dma address to MTT */
	ret = mtr_map_bufs(udma_dev, mtr, buf_page_cnt, buf_page_shift);
	if (ret)
		dev_err(dev, "failed to map mtr bufs, ret = %d.\n", ret);
		dev_err(dev, "failed to map mtr bufs, ret = %d. buf_page_cnt %d, buf_page_shift %d.\n",
			ret, buf_page_cnt, buf_page_shift);
	else
		return 0;

+13 −4
Original line number Diff line number Diff line
@@ -1792,15 +1792,23 @@ static int __udma_init_instance(struct hnae3_handle *handle)
	if (ret) {
		dev_err(udma_dev->dev,
			"UDMA congest control init failed(%d)!\n", ret);
		if (dfx_switch)
		goto error_failed_scc_init;
		goto error_failed_dfx_init;
	}

	ret = udma_register_num_qp_sysfs(udma_dev);
	if (ret) {
		dev_err(udma_dev->dev,
			"UDMA num_qp sysfs init failed(%d)!\n", ret);
		goto error_failed_num_qp_init;
	}

	udma_init_bank(udma_dev);
	return 0;

error_failed_num_qp_init:
	udma_unregister_cc_sysfs(udma_dev);
error_failed_scc_init:
	if (dfx_switch)
		udma_dfx_uninit(udma_dev);
error_failed_dfx_init:
	udma_hnae_client_exit(udma_dev);
@@ -1820,6 +1828,7 @@ static void __udma_uninit_instance(struct hnae3_handle *handle,
	if (!udma_dev)
		return;

	udma_unregister_num_qp_sysfs(udma_dev);
	udma_unregister_cc_sysfs(udma_dev);
	if (dfx_switch)
		udma_dfx_uninit(handle->priv);
Loading