summaryrefslogtreecommitdiff
path: root/net/core/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 647ec24..71d316a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2470,7 +2470,7 @@ static void dev_gso_skb_destructor(struct sk_buff *skb)
* This function segments the given skb and stores the list of segments
* in skb->next.
*/
-static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features)
+int dev_gso_segment(struct sk_buff *skb, netdev_features_t features)
{
struct sk_buff *segs;
@@ -2489,6 +2489,13 @@ static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features)
return 0;
}
+EXPORT_SYMBOL(dev_gso_segment);
+
+void dev_set_skb_destructor(struct sk_buff *skb)
+{
+ skb->destructor = DEV_GSO_CB(skb)->destructor;
+}
+EXPORT_SYMBOL(dev_set_skb_destructor);
static netdev_features_t harmonize_features(struct sk_buff *skb,
const struct net_device *dev,
@@ -2556,9 +2563,10 @@ static inline int skb_needs_linearize(struct sk_buff *skb,
!(features & NETIF_F_SG)));
}
-#ifdef CONFIG_ASF_EGRESS_QOS
+#if defined(CONFIG_ASF_EGRESS_QOS) || defined(CONFIG_ASF_LINUX_QOS)
/* Linux QoS hook to tranfer all packet to ASF QoS */
-static asf_qos_fn_hook *asf_qos_fn;
+asf_qos_fn_hook *asf_qos_fn;
+EXPORT_SYMBOL(asf_qos_fn);
void asf_qos_fn_register(asf_qos_fn_hook *fn)
{
@@ -2848,7 +2856,7 @@ int dev_queue_xmit(struct sk_buff *skb)
skb_update_prio(skb);
-#ifdef CONFIG_ASF_EGRESS_QOS
+#if defined(CONFIG_ASF_EGRESS_QOS) || defined(CONFIG_ASF_LINUX_QOS)
if (asf_qos_fn) {
rc = asf_qos_fn(skb);
if (!rc)
@@ -4445,7 +4453,9 @@ out:
softnet_break:
sd->time_squeeze++;
+#ifndef CONFIG_PREEMPT_RT_FULL
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
+#endif
goto out;
}