Commit 85d27173 authored by Jie Lei's avatar Jie Lei Committed by JangShui Yang
Browse files

hns3 udma: Code clipping related to RM mode.

driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8V1IQ


CVE: NA

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

This patch tailors the code related to the RM mode.
Due to 1636 udma not supporting RM mode,
the RM related process code in the code will be deleted.

Fixes: efe11e97 ("hns3 udma: init software tables of qp/uar and
others")
Signed-off-by: default avatarJinyong An <anjinyong@huawei.com>
Signed-off-by: default avatarJie Lei <leijie31@huawei.com>
Signed-off-by: default avatarWeibo Zhao <zhaoweibo3@huawei.com>
parent fd37bda1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -188,7 +188,6 @@ struct udma_create_ctx_resp {
	uint8_t chip_id;
	uint8_t die_id;
	uint8_t func_id;
	bool rm_support;
};

struct flush_cqe_param {
+2 −1
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@
#define UDMA_SGE_SHIFT				4
#define UDMA_SGE_SIZE				16
#define UDMA_IDX_QUE_ENTRY_SZ			4

/* The minimum page size is 4K for hardware */
#define UDMA_HW_PAGE_SHIFT			12
#define UDMA_PAGE_SIZE				(1 << UDMA_HW_PAGE_SHIFT)
@@ -854,6 +855,7 @@ struct udma_dev {
	struct xarray			eid_table;
	uint64_t			dwqe_page;
	uint64_t			dfx_cnt[UDMA_DFX_EQ_TOTAL];
	/* record the stored qp under this device */
	struct list_head		qp_list;
	spinlock_t			qp_list_lock;
	struct list_head		dip_list;
@@ -861,7 +863,6 @@ struct udma_dev {
	struct udma_port		port_data[UDMA_MAX_PORTS];
	struct udma_dev_debugfs		*dbgfs;
	uint64_t			notify_addr;
	bool				rm_support;
	struct udma_bank		bank[UDMA_QP_BANK_NUM];
};

+3 −9
Original line number Diff line number Diff line
@@ -178,16 +178,10 @@ static void set_default_jetty_caps(struct udma_dev *dev)
	struct udma_caps *caps = &dev->caps;

	caps->num_jfc_shift = ilog2(caps->num_cqs);
	if (dev->rm_support) {
		caps->num_jfs_shift = UDMA_DEFAULT_MAX_JETTY_X_SHIFT;
		caps->num_jfr_shift = UDMA_DEFAULT_MAX_JETTY_X_SHIFT;
		caps->num_jetty_shift = UDMA_DEFAULT_MAX_JETTY_X_SHIFT;
	} else {
	caps->num_jfs_shift = caps->num_qps_shift;
	caps->num_jfr_shift = caps->num_qps_shift;
	caps->num_jetty_shift = caps->num_qps_shift;
}
}

static void query_hw_speed(struct udma_dev *udma_dev)
{
+5 −65
Original line number Diff line number Diff line
@@ -243,9 +243,7 @@ static int alloc_jetty_buf(struct udma_dev *dev, struct udma_jetty *jetty,
		ret = alloc_jetty_um_qp(dev, jetty, cfg, udata);
		if (ret)
			return ret;
	} else if (cfg->trans_mode == UBCORE_TP_RM) {
		xa_init(&jetty->srm_node_table);
	} else if (cfg->trans_mode == UBCORE_TP_RC) {
	} else {
		ret = udma_db_map_user(dev, ucmd.sdb_addr, &jetty->rc_node.sdb);
		if (ret) {
			dev_err(dev->dev,
@@ -289,33 +287,6 @@ static int alloc_jetty_buf(struct udma_dev *dev, struct udma_jetty *jetty,
	return 0;
}

static int alloc_jetty_id(struct udma_dev *udma_dev, struct udma_jetty *jetty)
{
	struct udma_jetty_table *jetty_table = &udma_dev->jetty_table;
	struct udma_ida *jetty_ida = &jetty_table->jetty_ida;
	int ret;
	int id;

	id = ida_alloc_range(&jetty_ida->ida, jetty_ida->min, jetty_ida->max,
			     GFP_KERNEL);
	if (id < 0) {
		dev_err(udma_dev->dev, "failed to alloc jetty_id(%d).\n", id);
		return id;
	}
	jetty->jetty_id = (uint32_t)id;
	jetty->ubcore_jetty.id = jetty->jetty_id;

	ret = xa_err(xa_store(&jetty_table->xa, jetty->jetty_id, jetty,
			      GFP_KERNEL));
	if (ret) {
		dev_err(udma_dev->dev, "failed to store Jetty, ret = %d.\n",
			ret);
		ida_free(&jetty_ida->ida, id);
	}

	return ret;
}

static int alloc_common_jetty_id(struct udma_dev *udma_dev, struct udma_jetty *jetty)
{
	struct udma_jetty_table *jetty_table = &udma_dev->jetty_table;
@@ -429,15 +400,6 @@ static void delete_jetty_id(struct udma_dev *udma_dev,
	read_unlock(&g_udma_dfx_list[i].rwlock);
}

static void free_jetty_id(struct udma_dev *udma_dev, struct udma_jetty *jetty)
{
	struct udma_jetty_table *jetty_table = &udma_dev->jetty_table;
	struct udma_ida *jetty_ida = &jetty_table->jetty_ida;

	xa_erase(&jetty_table->xa, jetty->jetty_id);
	ida_free(&jetty_ida->ida, (int)jetty->jetty_id);
}

struct ubcore_jetty *udma_create_jetty(struct ubcore_device *dev,
				       struct ubcore_jetty_cfg *cfg,
				       struct ubcore_udata *udata)
@@ -446,28 +408,15 @@ struct ubcore_jetty *udma_create_jetty(struct ubcore_device *dev,
	struct udma_jetty *jetty;
	int ret;

	if (!udma_dev->rm_support && cfg->trans_mode == UBCORE_TP_RM) {
		dev_err(udma_dev->dev, "RM mode jetty is not supported.\n");
		return NULL;
	}

	jetty = kzalloc(sizeof(struct udma_jetty), GFP_KERNEL);
	if (!jetty)
		return NULL;

	init_jetty_cfg(jetty, cfg);
	if (cfg->trans_mode == UBCORE_TP_RM)
		ret = alloc_jetty_id(udma_dev, jetty);
	else
	ret = alloc_common_jetty_id(udma_dev, jetty);
	if (ret)
		goto err_alloc_jetty_id;

	if (cfg->trans_mode == UBCORE_TP_RM)
		init_jetty_x_qpn_bitmap(udma_dev, &jetty->qpn_map,
					udma_dev->caps.num_jetty_shift,
					UDMA_JETTY_QPN_PREFIX, jetty->jetty_id);

	ret = alloc_jetty_buf(udma_dev, jetty, cfg, udata);
	if (ret) {
		dev_err(udma_dev->dev, "alloc Jetty buf failed.\n");
@@ -482,11 +431,6 @@ struct ubcore_jetty *udma_create_jetty(struct ubcore_device *dev,
	return &jetty->ubcore_jetty;

err_alloc_jetty_buf:
	if (cfg->trans_mode == UBCORE_TP_RM)
		clean_jetty_x_qpn_bitmap(&jetty->qpn_map);
	if (cfg->trans_mode == UBCORE_TP_RM)
		free_jetty_id(udma_dev, jetty);
	else
	free_common_jetty_id(udma_dev, jetty);
err_alloc_jetty_id:
	kfree(jetty);
@@ -525,16 +469,12 @@ int udma_destroy_jetty(struct ubcore_jetty *jetty)
	udma_dev = to_udma_dev(jetty->ub_dev);

	ret = free_jetty_buf(udma_dev, udma_jetty);
	if (udma_jetty->tp_mode == UBCORE_TP_RM)
		clean_jetty_x_qpn_bitmap(&udma_jetty->qpn_map);

	if (dfx_switch)
		delete_jetty_id(udma_dev, udma_jetty);

	if (udma_jetty->tp_mode == UBCORE_TP_RM)
		free_jetty_id(udma_dev, udma_jetty);
	else
	free_common_jetty_id(udma_dev, udma_jetty);

	kfree(udma_jetty);

	return ret;
+3 −17
Original line number Diff line number Diff line
@@ -352,7 +352,7 @@ static int alloc_jfrc(struct udma_dev *dev, struct udma_jfr *jfr)
	struct udma_cmd_mailbox *mailbox;
	int ret, id;

	if (jfr->tp_mode != UBCORE_TP_RM && jfr->share_jfr) {
	if (jfr->tp_mode == UBCORE_TP_UM && jfr->share_jfr) {
		ret = alloc_common_qpn(dev, jfr->jfc, &jfr->jfrn);
		if (ret) {
			dev_err(dev->dev, "failed to alloc um qpn for jfr(%d).\n", ret);
@@ -417,7 +417,7 @@ static int alloc_jfrc(struct udma_dev *dev, struct udma_jfr *jfr)
err_ida:
	ida_free(&jfr_ida->ida, id);
free_qpn:
	if (jfr->tp_mode != UBCORE_TP_RM && jfr->share_jfr)
	if (jfr->tp_mode == UBCORE_TP_UM && jfr->share_jfr)
		free_common_qpn(dev, jfr->jfrn);

	return ret;
@@ -526,7 +526,7 @@ static void free_jfrc(struct udma_dev *dev, struct udma_jfr *jfr)
	udma_table_put(dev, &jfr_table->table, jfr->srqn);

	ida_free(&jfr_table->jfr_ida.ida, (int)jfr->srqn);
	if (jfr->tp_mode != UBCORE_TP_RM && jfr->share_jfr)
	if (jfr->tp_mode == UBCORE_TP_UM && jfr->share_jfr)
		free_common_qpn(dev, jfrn);
}

@@ -634,11 +634,6 @@ struct ubcore_jfr *udma_create_jfr(struct ubcore_device *dev, struct ubcore_jfr_
	struct udma_jfr *jfr;
	int ret;

	if (!udma_dev->rm_support && cfg->trans_mode == UBCORE_TP_RM) {
		dev_err(udma_dev->dev, "RM mode jfr is not supported.\n");
		return NULL;
	}

	jfr = kcalloc(1, sizeof(*jfr), GFP_KERNEL);
	if (!jfr)
		return NULL;
@@ -656,10 +651,6 @@ struct ubcore_jfr *udma_create_jfr(struct ubcore_device *dev, struct ubcore_jfr_
		goto err_alloc_buf;

	xa_init(&jfr->tp_table_xa);
	if (cfg->trans_mode == UBCORE_TP_RM)
		init_jetty_x_qpn_bitmap(udma_dev, &jfr->qpn_map,
					udma_dev->caps.num_jfr_shift,
					UDMA_JFR_QPN_PREFIX, jfr->jfrn);
	if (cfg->trans_mode == UBCORE_TP_UM) {
		jfr->ubcore_jfr.uctx = udata->uctx;
		ret = alloc_jfr_um_qp(udma_dev, jfr);
@@ -691,8 +682,6 @@ struct ubcore_jfr *udma_create_jfr(struct ubcore_device *dev, struct ubcore_jfr_
	if (jfr->um_qp)
		destroy_jfr_um_qp(udma_dev, jfr);
err_alloc_jfrc:
	if (cfg->trans_mode == UBCORE_TP_RM)
		clean_jetty_x_qpn_bitmap(&jfr->qpn_map);
	free_jfrc(udma_dev, jfr);
err_alloc_buf:
	free_jfr_buf(udma_dev, jfr);
@@ -710,9 +699,6 @@ int udma_destroy_jfr(struct ubcore_jfr *jfr)
	if (udma_jfr->um_qp)
		destroy_jfr_um_qp(dev, udma_jfr);

	if (udma_jfr->tp_mode == UBCORE_TP_RM)
		clean_jetty_x_qpn_bitmap(&udma_jfr->qpn_map);

	if (dfx_switch)
		delete_jfr_id(dev, udma_jfr);

Loading