Commit 52db4eac authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

nfp: abm: save RED's parameters



Use the new driver Qdisc structure to keep track of parameters
of RED Qdiscs.  This way as the Qdisc moves around in the hierarchy
we will be able to configure the HW appropriately.

Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarJohn Hurley <john.hurley@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6c5dbda0
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -89,6 +89,11 @@ enum nfp_qdisc_type {
 * @use_cnt:		number of attachment points in the hierarchy
 * @num_children:	current size of the @children array
 * @children:		pointers to children
 *
 * @params_ok:		parameters of this Qdisc are OK for offload
 *
 * @red:		RED Qdisc specific parameters and state
 * @red.threshold:	ECN marking threshold
 */
struct nfp_qdisc {
	struct net_device *netdev;
@@ -98,6 +103,15 @@ struct nfp_qdisc {
	unsigned int use_cnt;
	unsigned int num_children;
	struct nfp_qdisc **children;

	bool params_ok;

	union {
		/* TC_SETUP_QDISC_RED */
		struct {
			u32 threshold;
		} red;
	};
};

/**
+4 −1
Original line number Diff line number Diff line
@@ -375,7 +375,10 @@ nfp_abm_red_replace(struct net_device *netdev, struct nfp_abm_link *alink,
			qdisc->children[0] = NFP_QDISC_UNTRACKED;
	}

	if (!nfp_abm_red_check_params(alink, opt)) {
	qdisc->params_ok = nfp_abm_red_check_params(alink, opt);
	if (qdisc->params_ok) {
		qdisc->red.threshold = opt->set.min;
	} else {
		err = -EINVAL;
		goto err_destroy;
	}