Commit d90f5613 authored by Yu Zhang's avatar Yu Zhang Committed by JiangShui
Browse files

hns3 udma: support config params of multipath function for UM Jetty/JFS

driver inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I85R2F


CVE: NA

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

This patch supports config params of multipath function for UM Jetty/JFS
in kernel mode by module param. These params are contained in the struct
udma_create_tp_resp and pass to user space by copy_to_user, then
different source port numbers be set for each UM sq wqe in user mode.

Signed-off-by: default avatarYu Zhang <zhangyu709@huawei.com>
parent 1f0cdbbc
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -122,11 +122,18 @@ enum udma_qp_cap_flags {
	UDMA_QP_CAP_DIRECT_WQE = 1 << 5,
};

struct udp_srcport {
	bool		um_spray_en;
	uint16_t	um_data_udp_start;
	uint8_t		um_udp_range;
};

struct udma_create_tp_resp {
	uint64_t		cap_flags;
	uint32_t		qpn;
	uint32_t		path_mtu;
	uint8_t			priority;
	struct udp_srcport	um_srcport;
};

struct udma_create_jetty_resp {
+21 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@

#include <linux/compiler.h>
#include <linux/spinlock.h>
#include <linux/module.h>
#include "hns3_udma_abi.h"
#include "hns3_udma_dca.h"
#include "hns3_udma_jfs.h"
@@ -27,6 +28,10 @@
#include "hns3_udma_db.h"
#include "hns3_udma_qp.h"

static bool um_spray_en;
static ushort um_data_udp_start;
static ushort um_udp_range;

static void set_qpc_wqe_cnt(struct udma_qp *qp,
			    struct udma_qp_context *context,
			    struct udma_qp_context *context_mask)
@@ -1900,6 +1905,10 @@ int udma_create_qp_common(struct udma_dev *udma_dev, struct udma_qp *qp,
			resp.qpn = udma_get_jetty_qpn(qp);

		resp.path_mtu = udma_dev->caps.max_mtu;
		resp.um_srcport.um_spray_en = um_spray_en;
		resp.um_srcport.um_data_udp_start = (uint16_t)um_data_udp_start;
		resp.um_srcport.um_udp_range = (uint8_t)um_udp_range +
					       UDP_RANGE_BASE;
		ret = copy_to_user((void *)udata->udrv_data->out_addr, &resp,
				   min(udata->udrv_data->out_len,
				       (uint32_t)sizeof(resp)));
@@ -2065,3 +2074,15 @@ void udma_qp_event(struct udma_dev *udma_dev, uint32_t qpn, int event_type)
	if (refcount_dec_and_test(&qp->refcount))
		complete(&qp->free);
}

module_param(um_spray_en, bool, 0644);
MODULE_PARM_DESC(um_spray_en,
		 "Set whether to enable the multipath function for UM Jetty/Jfs, default: 0(0:off, 1:on)");

module_param(um_data_udp_start, ushort, 0644);
MODULE_PARM_DESC(um_data_udp_start,
		 "Set the Initial source port number for UM Jetty/Jfs, valid when um_spray_en is set 1");

module_param(um_udp_range, ushort, 0644);
MODULE_PARM_DESC(um_udp_range,
		 "Set the variable bits of source port number for UM Jetty/Jfs, valid when um_spray_en is set 1, range:0-8, default: 0. 0 ~ (7 + um_udp_range) bits of source port are variable");