diff --git a/core/dfc_qmap.c b/core/dfc_qmap.c index 69dc6e7a0241..e2a7d18620ce 100644 --- a/core/dfc_qmap.c +++ b/core/dfc_qmap.c @@ -486,6 +486,11 @@ int dfc_qmap_client_init(void *port, int index, struct svc_info *psvc, if (!port || !qmi) return -EINVAL; + /* Prevent double init */ + data = rcu_dereference(qmap_dfc_data); + if (data) + return -EINVAL; + data = kzalloc(sizeof(struct dfc_qmi_data), GFP_KERNEL); if (!data) return -ENOMEM; @@ -499,8 +504,7 @@ int dfc_qmap_client_init(void *port, int index, struct svc_info *psvc, atomic_set(&qmap_txid, 0); - if (!rmnet_ctl) - rmnet_ctl = symbol_get(rmnet_ctl_if); + rmnet_ctl = symbol_get(rmnet_ctl_if); if (!rmnet_ctl) { pr_err("rmnet_ctl module not loaded\n"); goto out; diff --git a/core/dfc_qmi.c b/core/dfc_qmi.c index 2b25e7d17aab..9fe29550c2d2 100644 --- a/core/dfc_qmi.c +++ b/core/dfc_qmi.c @@ -1479,16 +1479,10 @@ void dfc_qmi_burst_check(struct net_device *dev, struct qos_info *qos, spin_lock_bh(&qos->qos_lock); - if (dfc_mode == DFC_MODE_MQ_NUM) { - /* Mark is mq num */ - if (likely(mark < MAX_MQ_NUM)) - bearer = qos->mq[mark].bearer; - } else { - /* Mark is flow_id */ - itm = qmi_rmnet_get_flow_map(qos, mark, ip_type); - if (likely(itm)) - bearer = itm->bearer; - } + /* Mark is flow_id */ + itm = qmi_rmnet_get_flow_map(qos, mark, ip_type); + if (likely(itm)) + bearer = itm->bearer; if (unlikely(!bearer)) goto out; diff --git a/core/qmi_rmnet.c b/core/qmi_rmnet.c index dcc02b3488dd..6c4a7d081a0f 100644 --- a/core/qmi_rmnet.c +++ b/core/qmi_rmnet.c @@ -39,14 +39,12 @@ #define FLAG_TO_MODE(f) ((f) & FLAG_DFC_MASK) #define DFC_SUPPORTED_MODE(m) \ - ((m) == DFC_MODE_FLOW_ID || (m) == DFC_MODE_MQ_NUM || \ - (m) == DFC_MODE_SA) + ((m) == DFC_MODE_SA) #define FLAG_TO_QMAP(f) ((f) & FLAG_QMAP_MASK) int dfc_mode; int dfc_qmap; -#define IS_ANCILLARY(type) ((type) != AF_INET && (type) != AF_INET6) unsigned int rmnet_wq_frequency __read_mostly = 1000; @@ -312,10 +310,7 @@ static void __qmi_rmnet_update_mq(struct net_device *dev, bearer->mq_idx = itm->mq_idx; bearer->ack_mq_idx = itm->mq_idx + ACK_MQ_OFFSET; } else { - if (IS_ANCILLARY(itm->ip_type)) - bearer->ack_mq_idx = itm->mq_idx; - else - bearer->mq_idx = itm->mq_idx; + bearer->mq_idx = itm->mq_idx; } qmi_rmnet_flow_control(dev, itm->mq_idx, @@ -855,34 +850,19 @@ int qmi_rmnet_get_queue(struct net_device *dev, struct sk_buff *skb) if (!qos) return 0; - /* If mark is mq num return it */ - if (dfc_mode == DFC_MODE_MQ_NUM) - return mark; - - if (dfc_mode == DFC_MODE_SA) + if (likely(dfc_mode == DFC_MODE_SA)) return qmi_rmnet_get_queue_sa(qos, skb); - /* Default flows */ - if (!mark) { - if (qmi_rmnet_is_tcp_ack(skb)) - return 1; - else - return 0; - } - ip_type = (skb->protocol == htons(ETH_P_IPV6)) ? AF_INET6 : AF_INET; - /* Dedicated flows */ spin_lock_bh(&qos->qos_lock); itm = qmi_rmnet_get_flow_map(qos, mark, ip_type); - if (unlikely(!itm)) - goto done; + if (itm) + txq = itm->mq_idx; - txq = itm->mq_idx; - -done: spin_unlock_bh(&qos->qos_lock); + return txq; } EXPORT_SYMBOL(qmi_rmnet_get_queue); diff --git a/core/qmi_rmnet_i.h b/core/qmi_rmnet_i.h index f478c459503d..e4fe7825dc3a 100644 --- a/core/qmi_rmnet_i.h +++ b/core/qmi_rmnet_i.h @@ -27,8 +27,6 @@ #define ACK_MQ_OFFSET (MAX_MQ_NUM - 1) #define INVALID_MQ 0xFF -#define DFC_MODE_FLOW_ID 2 -#define DFC_MODE_MQ_NUM 3 #define DFC_MODE_SA 4 #define CONFIG_QTI_QMI_RMNET 1