diff --git a/arch/arm/configs/vendor/sdxlemur.config b/arch/arm/configs/vendor/sdxlemur.config index 03aa52b8771f..6cf88c6bd371 100644 --- a/arch/arm/configs/vendor/sdxlemur.config +++ b/arch/arm/configs/vendor/sdxlemur.config @@ -329,3 +329,4 @@ CONFIG_IPA_ETH_DEBUG=y CONFIG_QCOM_SHOW_RESUME_IRQ=y CONFIG_HARDENED_USERCOPY=y # CONFIG_HARDENED_USERCOPY_FALLBACK is not set +CONFIG_ENABLE_GSB=y diff --git a/net/Kconfig b/net/Kconfig index 10f50779fa4c..b3cc0a2d59ab 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -462,6 +462,17 @@ config ENABLE_SFE Changes to support Shortcut Forward Engine. Add bridge API to access the bridge slave port. +#Generic-Software-Bridge +config ENABLE_GSB + bool "Enable generic-software-bridge" + depends on QGKI + help + ENABLE_GSB enables software acceleration on the target via gsb. + The change supports generic software bridge. + Helps to include gsb hook on the kernel. + Fulfills requirement of GSB network stack receive. + Change is supposed to go only on targets supporting gsb. + endif # if NET # Used by archs to tell that they support BPF JIT compiler plus which flavour. diff --git a/net/core/dev.c b/net/core/dev.c index b243f21596dd..794526a9e34e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4718,6 +4718,11 @@ static inline int nf_ingress(struct sk_buff *skb, struct packet_type **pt_prev, return 0; } +#ifdef CONFIG_ENABLE_GSB +int (*gsb_nw_stack_recv)(struct sk_buff *skb) __rcu __read_mostly; +EXPORT_SYMBOL(gsb_nw_stack_recv); +#endif + static int (*embms_tm_multicast_recv)(struct sk_buff *skb) __rcu __read_mostly; EXPORT_SYMBOL(embms_tm_multicast_recv); @@ -4751,6 +4756,10 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc, int (*fast_recv)(struct sk_buff *skb, struct packet_type *pt_temp); #endif +#ifdef CONFIG_ENABLE_GSB + int (*gsb_ns_recv)(struct sk_buff *skb); +#endif + net_timestamp_check(!netdev_tstamp_prequeue, skb); trace_netif_receive_skb(skb); @@ -4823,6 +4832,16 @@ skip_taps: process_embms_receive_skb(skb); skip_classify: +#ifdef CONFIG_ENABLE_GSB + gsb_ns_recv = rcu_dereference(gsb_nw_stack_recv); + if (gsb_ns_recv) { + if (gsb_ns_recv(skb)) { + ret = NET_RX_SUCCESS; + goto out; + } + } +#endif + #ifdef CONFIG_ENABLE_SFE fast_recv = rcu_dereference(athrs_fast_nat_recv); if (fast_recv) {