rmnet_core: APS hooks
Add APS pre-queue and post-queue hooks. Change-Id: I22be34c2a6bad4119e74ab8146d80eb6439fc585 Signed-off-by: Weiyi Chen <quic_weiyic@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
ca0f1abee9
commit
7e90328aee
@@ -47,6 +47,16 @@ typedef void (*rmnet_perf_egress_hook1_t)(struct sk_buff *skb);
|
||||
rmnet_perf_egress_hook1_t rmnet_perf_egress_hook1 __rcu __read_mostly;
|
||||
EXPORT_SYMBOL(rmnet_perf_egress_hook1);
|
||||
|
||||
typedef void (*rmnet_aps_pre_queue_t)(struct net_device *dev,
|
||||
struct sk_buff *skb);
|
||||
rmnet_aps_pre_queue_t rmnet_aps_pre_queue __read_mostly;
|
||||
EXPORT_SYMBOL(rmnet_aps_pre_queue);
|
||||
|
||||
typedef int (*rmnet_aps_post_queue_t)(struct net_device *dev,
|
||||
struct sk_buff *skb);
|
||||
rmnet_aps_post_queue_t rmnet_aps_post_queue __read_mostly;
|
||||
EXPORT_SYMBOL(rmnet_aps_post_queue);
|
||||
|
||||
/* RX/TX Fixup */
|
||||
|
||||
void rmnet_vnd_rx_fixup(struct net_device *dev, u32 skb_len)
|
||||
@@ -85,10 +95,20 @@ static netdev_tx_t rmnet_vnd_start_xmit(struct sk_buff *skb,
|
||||
u32 mark;
|
||||
unsigned int len;
|
||||
rmnet_perf_tether_egress_hook_t rmnet_perf_tether_egress;
|
||||
rmnet_aps_post_queue_t aps_post_queue;
|
||||
bool low_latency = false;
|
||||
bool need_to_drop = false;
|
||||
|
||||
priv = netdev_priv(dev);
|
||||
|
||||
aps_post_queue = rcu_dereference(rmnet_aps_post_queue);
|
||||
if (aps_post_queue)
|
||||
if (unlikely(aps_post_queue(dev, skb))) {
|
||||
this_cpu_inc(priv->pcpu_stats->stats.tx_drops);
|
||||
kfree_skb(skb);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
if (priv->real_dev) {
|
||||
ip_type = (ip_hdr(skb)->version == 4) ?
|
||||
AF_INET : AF_INET6;
|
||||
@@ -262,9 +282,6 @@ static void rmnet_get_stats64(struct net_device *dev,
|
||||
s->tx_dropped = total_stats.tx_drops;
|
||||
}
|
||||
|
||||
void (*rmnet_aps_set_prio)(struct net_device *dev, struct sk_buff *skb);
|
||||
EXPORT_SYMBOL(rmnet_aps_set_prio);
|
||||
|
||||
static u16 rmnet_vnd_select_queue(struct net_device *dev,
|
||||
struct sk_buff *skb,
|
||||
struct net_device *sb_dev)
|
||||
@@ -274,7 +291,7 @@ static u16 rmnet_vnd_select_queue(struct net_device *dev,
|
||||
int boost_trigger = 0;
|
||||
int txq = 0;
|
||||
rmnet_perf_egress_hook1_t rmnet_perf_egress1;
|
||||
void (*aps_set_prio)(struct net_device *dev, struct sk_buff *skb);
|
||||
rmnet_aps_pre_queue_t aps_pre_queue;
|
||||
|
||||
rmnet_perf_egress1 = rcu_dereference(rmnet_perf_egress_hook1);
|
||||
if (rmnet_perf_egress1) {
|
||||
@@ -439,11 +456,9 @@ skip_trace:
|
||||
(void) boost_period;
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
aps_set_prio = READ_ONCE(rmnet_aps_set_prio);
|
||||
if (aps_set_prio)
|
||||
aps_set_prio(dev, skb);
|
||||
rcu_read_unlock();
|
||||
aps_pre_queue = rcu_dereference(rmnet_aps_pre_queue);
|
||||
if (aps_pre_queue)
|
||||
aps_pre_queue(dev, skb);
|
||||
|
||||
return (txq < dev->real_num_tx_queues) ? txq : 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user