Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 904e52ab authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dfc: Cache grants before flow is added"

parents d6ed9c8f 7ae54d21
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -924,18 +924,11 @@ int dfc_bearer_flow_ctl(struct net_device *dev,
	enable = bearer->grant_size ? true : false;

	qmi_rmnet_flow_control(dev, bearer->mq_idx, enable);
	trace_dfc_qmi_tc(dev->name, bearer->bearer_id,
			 bearer->grant_size,
			 0, bearer->mq_idx, enable);

	/* Do not flow disable tcp ack q in tcp bidir */
	if (bearer->ack_mq_idx != INVALID_MQ &&
	    (enable || !bearer->tcp_bidir)) {
	    (enable || !bearer->tcp_bidir))
		qmi_rmnet_flow_control(dev, bearer->ack_mq_idx, enable);
		trace_dfc_qmi_tc(dev->name, bearer->bearer_id,
				 bearer->grant_size,
				 0, bearer->ack_mq_idx, enable);
	}

	if (!enable && bearer->ack_req)
		dfc_send_ack(dev, bearer->bearer_id,
@@ -976,6 +969,9 @@ static int dfc_update_fc_map(struct net_device *dev, struct qos_info *qos,
	bool action = false;

	itm = qmi_rmnet_get_bearer_map(qos, fc_info->bearer_id);
	if (!itm)
		itm = qmi_rmnet_get_bearer_noref(qos, fc_info->bearer_id);

	if (itm) {
		/* The RAT switch flag indicates the start and end of
		 * the switch. Ignore indications in between.
+16 −13
Original line number Diff line number Diff line
@@ -215,6 +215,8 @@ int qmi_rmnet_flow_control(struct net_device *dev, u32 mq_idx, int enable)
	else
		netif_tx_stop_queue(q);

	trace_dfc_qmi_tc(dev->name, mq_idx, enable);

	return 0;
}

@@ -276,15 +278,11 @@ static void __qmi_rmnet_bearer_put(struct net_device *dev,
			if (reset) {
				qmi_rmnet_reset_txq(dev, i);
				qmi_rmnet_flow_control(dev, i, 1);
				trace_dfc_qmi_tc(dev->name,
					bearer->bearer_id, 0, 0, i, 1);

				if (dfc_mode == DFC_MODE_SA) {
					j = i + ACK_MQ_OFFSET;
					qmi_rmnet_reset_txq(dev, j);
					qmi_rmnet_flow_control(dev, j, 1);
					trace_dfc_qmi_tc(dev->name,
						bearer->bearer_id, 0, 0, j, 1);
				}
			}
		}
@@ -322,18 +320,10 @@ static void __qmi_rmnet_update_mq(struct net_device *dev,

		qmi_rmnet_flow_control(dev, itm->mq_idx,
				       bearer->grant_size > 0 ? 1 : 0);
		trace_dfc_qmi_tc(dev->name, itm->bearer_id,
				 bearer->grant_size, 0, itm->mq_idx,
				 bearer->grant_size > 0 ? 1 : 0);

		if (dfc_mode == DFC_MODE_SA) {
		if (dfc_mode == DFC_MODE_SA)
			qmi_rmnet_flow_control(dev, bearer->ack_mq_idx,
					bearer->grant_size > 0 ? 1 : 0);
			trace_dfc_qmi_tc(dev->name, itm->bearer_id,
					bearer->grant_size, 0,
					bearer->ack_mq_idx,
					bearer->grant_size > 0 ? 1 : 0);
		}
	}
}

@@ -506,6 +496,19 @@ static const struct kernel_param_ops qmi_rmnet_scale_ops = {

module_param_cb(qmi_rmnet_scale_factor, &qmi_rmnet_scale_ops,
		&qmi_rmnet_scale_factor, 0664);

struct rmnet_bearer_map *qmi_rmnet_get_bearer_noref(struct qos_info *qos_info,
						    u8 bearer_id)
{
	struct rmnet_bearer_map *bearer;

	bearer = __qmi_rmnet_bearer_get(qos_info, bearer_id);
	if (bearer)
		bearer->flow_ref--;

	return bearer;
}

#else
static inline void qmi_rmnet_clean_flow_list(struct qos_info *qos)
{
+3 −0
Original line number Diff line number Diff line
@@ -144,6 +144,9 @@ int dfc_qmap_client_init(void *port, int index, struct svc_info *psvc,
void dfc_qmap_client_exit(void *dfc_data);

void dfc_qmap_send_ack(struct qos_info *qos, u8 bearer_id, u16 seq, u8 type);

struct rmnet_bearer_map *qmi_rmnet_get_bearer_noref(struct qos_info *qos_info,
						    u8 bearer_id);
#else
static inline struct rmnet_flow_map *
qmi_rmnet_get_flow_map(struct qos_info *qos_info,
+7 −15
Original line number Diff line number Diff line
@@ -20,33 +20,25 @@

TRACE_EVENT(dfc_qmi_tc,

	TP_PROTO(const char *name, u8 bearer_id, u32 grant,
		 int qlen, u32 tcm_handle, int enable),
	TP_PROTO(const char *name, u32 txq, int enable),

	TP_ARGS(name, bearer_id, grant, qlen, tcm_handle, enable),
	TP_ARGS(name, txq, enable),

	TP_STRUCT__entry(
		__string(dev_name, name)
		__field(u8, bid)
		__field(u32, grant)
		__field(int, qlen)
		__field(u32, tcm_handle)
		__field(u32, txq)
		__field(int, enable)
	),

	TP_fast_assign(
		__assign_str(dev_name, name);
		__entry->bid = bearer_id;
		__entry->grant = grant;
		__entry->qlen = qlen;
		__entry->tcm_handle = tcm_handle;
		__entry->txq = txq;
		__entry->enable = enable;
	),

	TP_printk("dev=%s bearer_id=%u grant=%u len=%d mq=%u %s",
	TP_printk("dev=%s txq=%u %s",
		__get_str(dev_name),
		__entry->bid, __entry->grant, __entry->qlen,
		__entry->tcm_handle,
		__entry->txq,
		__entry->enable ? "enable" : "disable")
);

@@ -139,7 +131,7 @@ TRACE_EVENT(dfc_flow_info,
		__entry->action = add;
	),

	TP_printk("%s: dev=%s bearer_id=%u flow_id=%u ip_type=%d mq=%d",
	TP_printk("%s: dev=%s bearer_id=%u flow_id=%u ip_type=%d txq=%d",
		__entry->action ? "add flow" : "delete flow",
		__get_str(dev_name),
		__entry->bid, __entry->fid, __entry->ip, __entry->handle)