Commit 6c0c23b9 authored by Yizhen Fan's avatar Yizhen Fan Committed by fanyizhen1995
Browse files

ub: ubcore add advise and unadvise jetty api.



driver inclusion
category: feature
bugzilla: NA
CVE: NA

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

Ubcore add advise and unadvise jetty api.
Advise jetty: construct the transport channel between local jetty
and remote jetty.
Unadvise jetty: deconstruct the transport channel between local jetty
and remote jetty.

Signed-off-by: default avatarGuoxin Qian <qianguoxin@huawei.com>
Signed-off-by: default avatarYizhen Fan <fanyizhen@huawei.com>
parent a64ae4ce
Loading
Loading
Loading
Loading
+69 −0
Original line number Diff line number Diff line
@@ -670,6 +670,25 @@ static int ubcore_advice_jfs_tjfr(struct ubcore_tp_advice *advice, struct ubcore
	return 0;
}

static int ubcore_advice_jetty_tjetty(struct ubcore_tp_advice *advice, struct ubcore_jetty *jetty,
				      struct ubcore_tjetty *tjetty)
{
	(void)memset(advice, 0, sizeof(struct ubcore_tp_advice));
	advice->meta.ht = ubcore_get_tptable(jetty->tptable);
	if (advice->meta.ht == NULL) {
		ubcore_log_err("tp table has already been destroyed");
		return -1;
	}

	advice->ta.type = UBCORE_TA_JETTY_TJETTY;
	advice->ta.jetty = jetty;
	advice->ta.tjetty_id = tjetty->cfg.id;

	ubcore_init_tp_key_jetty_id(&advice->meta.key, &tjetty->cfg.id);
	advice->meta.hash = ubcore_get_jetty_hash(&tjetty->cfg.id);
	return 0;
}

static inline void ubcore_put_advice(const struct ubcore_tp_advice *advice)
{
	ubcore_put_tptable(advice->meta.ht);
@@ -724,6 +743,56 @@ int ubcore_unadvise_jfr(struct ubcore_jfs *jfs, struct ubcore_tjetty *tjfr)
}
EXPORT_SYMBOL(ubcore_unadvise_jfr);

int ubcore_advise_jetty(struct ubcore_jetty *jetty, struct ubcore_tjetty *tjetty,
			struct ubcore_udata *udata)
{
	struct ubcore_tp_advice advice;
	int ret;

	if (jetty == NULL || tjetty == NULL || !ubcore_have_tp_ops(jetty->ub_dev)) {
		ubcore_log_err("invalid parameter.\n");
		return -1;
	}
	if (!ubcore_jetty_tjetty_need_advise(jetty, tjetty)) {
		ubcore_log_err("The transport mode is not rm.\n");
		return -1;
	}

	ret = ubcore_advice_jetty_tjetty(&advice, jetty, tjetty);
	if (ret != 0)
		return ret;

	/* alpha version, IB transport type and RM tp mode */
	ret = ubcore_advise_tp(jetty->ub_dev, &tjetty->cfg.id.eid, &advice, udata);
	ubcore_put_advice(&advice);
	return ret;
}
EXPORT_SYMBOL(ubcore_advise_jetty);

int ubcore_unadvise_jetty(struct ubcore_jetty *jetty, struct ubcore_tjetty *tjetty)
{
	struct ubcore_tp_advice advice;
	int ret;

	if (jetty == NULL || tjetty == NULL || !ubcore_have_tp_ops(jetty->ub_dev)) {
		ubcore_log_err("invalid parameter.\n");
		return -1;
	}
	if (!ubcore_jetty_tjetty_need_advise(jetty, tjetty)) {
		ubcore_log_err("The transport mode is not rm.\n");
		return -1;
	}

	ret = ubcore_advice_jetty_tjetty(&advice, jetty, tjetty);
	if (ret != 0)
		return ret;

	ret = ubcore_unadvise_tp(jetty->ub_dev, &advice);
	ubcore_put_advice(&advice);
	return ret;
}
EXPORT_SYMBOL(ubcore_unadvise_jetty);

struct ubcore_jetty *ubcore_find_jetty(struct ubcore_device *dev, uint32_t jetty_id)
{
	return ubcore_hash_table_lookup(&dev->ht[UBCORE_HT_JETTY], jetty_id, &jetty_id);
+8 −0
Original line number Diff line number Diff line
@@ -60,4 +60,12 @@ static inline bool ubcore_jfs_tjfr_need_advise(const struct ubcore_jfs *jfs,
	       jfs->jfs_cfg.trans_mode == UBCORE_TP_RM && tjfr->cfg.trans_mode == UBCORE_TP_RM;
}

static inline bool ubcore_jetty_tjetty_need_advise(const struct ubcore_jetty *jetty,
						   const struct ubcore_tjetty *tjetty)
{
	return jetty->ub_dev->transport_type == UBCORE_TRANSPORT_IB &&
	       jetty->jetty_cfg.trans_mode == UBCORE_TP_RM &&
	       tjetty->cfg.trans_mode == UBCORE_TP_RM;
}

#endif
+16 −0
Original line number Diff line number Diff line
@@ -343,6 +343,22 @@ int ubcore_advise_jfr(struct ubcore_jfs *jfs, struct ubcore_tjetty *tjfr,
 * @return: 0 on success, other value on error
 */
int ubcore_unadvise_jfr(struct ubcore_jfs *jfs, struct ubcore_tjetty *tjfr);
/**
 * Advise jetty: construct the transport channel between local jetty and remote jetty.
 * @param[in] jetty: local jetty to construct the transport channel;
 * @param[in] tjetty: target jetty to reach imported before;
 * @param[in] udata (optional): ucontext and user space driver data
 * @return: 0 on success, other value on error
 */
int ubcore_advise_jetty(struct ubcore_jetty *jetty, struct ubcore_tjetty *tjetty,
			struct ubcore_udata *udata);
/**
 * Unadvise jetty: deconstruct the transport channel between local jetty and remote jetty.
 * @param[in] jetty: local jetty to destruct the transport channel;
 * @param[in] tjetty: target jetty advised before;
 * @return: 0 on success, other value on error
 */
int ubcore_unadvise_jetty(struct ubcore_jetty *jetty, struct ubcore_tjetty *tjetty);
/**
 * operation of user ioctl cmd.
 * @param[in] k_user_ctl: kdrv user control command pointer;