With the latest change of separating vports into their own modules, it is necessary to export all public functions in linux/compat/linux/. This will prevent the linker error when vport modules use those functions in the future. e.g., the to be merged vport-stt module will use the flex_array_* functions which are not currently exported.
Signed-off-by: Alex Wang <[email protected]> --- datapath/linux/compat/dev-openvswitch.c | 3 +++ datapath/linux/compat/flex_array.c | 9 +++++++++ datapath/linux/compat/gso.c | 1 + datapath/linux/compat/reciprocal_div.c | 2 ++ datapath/linux/compat/skbuff-openvswitch.c | 4 ++++ datapath/linux/compat/utils.c | 1 + 6 files changed, 20 insertions(+) diff --git a/datapath/linux/compat/dev-openvswitch.c b/datapath/linux/compat/dev-openvswitch.c index 1035fe8..ecb3ef4 100644 --- a/datapath/linux/compat/dev-openvswitch.c +++ b/datapath/linux/compat/dev-openvswitch.c @@ -50,6 +50,7 @@ int netdev_rx_handler_register(struct net_device *dev, rcu_assign_pointer(openvswitch_handle_frame_hook, hook); return 0; } +EXPORT_SYMBOL_GPL(netdev_rx_handler_register); #else int netdev_rx_handler_register(struct net_device *dev, @@ -67,6 +68,7 @@ int netdev_rx_handler_register(struct net_device *dev, br_handle_frame_hook = hook; return 0; } +EXPORT_SYMBOL_GPL(netdev_rx_handler_register); #endif void netdev_rx_handler_unregister(struct net_device *dev) @@ -88,4 +90,5 @@ void netdev_rx_handler_unregister(struct net_device *dev) br_handle_frame_hook = NULL; #endif } +EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); #endif diff --git a/datapath/linux/compat/flex_array.c b/datapath/linux/compat/flex_array.c index c39dd1b..ed29924 100644 --- a/datapath/linux/compat/flex_array.c +++ b/datapath/linux/compat/flex_array.c @@ -118,6 +118,7 @@ struct flex_array *flex_array_alloc(int element_size, unsigned int total, FLEX_ARRAY_BASE_BYTES_LEFT); return ret; } +EXPORT_SYMBOL_GPL(flex_array_alloc); static int fa_element_to_part_nr(struct flex_array *fa, unsigned int element_nr) @@ -141,12 +142,14 @@ void flex_array_free_parts(struct flex_array *fa) for (part_nr = 0; part_nr < FLEX_ARRAY_NR_BASE_PTRS; part_nr++) kfree(fa->parts[part_nr]); } +EXPORT_SYMBOL_GPL(flex_array_free_parts); void flex_array_free(struct flex_array *fa) { flex_array_free_parts(fa); kfree(fa); } +EXPORT_SYMBOL_GPL(flex_array_free); static unsigned int index_inside_part(struct flex_array *fa, unsigned int element_nr, @@ -214,6 +217,7 @@ int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src, memcpy(dst, src, fa->element_size); return 0; } +EXPORT_SYMBOL_GPL(flex_array_put); /** * flex_array_clear - clear element in array at @element_nr @@ -244,6 +248,7 @@ int flex_array_clear(struct flex_array *fa, unsigned int element_nr) memset(dst, FLEX_ARRAY_FREE, fa->element_size); return 0; } +EXPORT_SYMBOL_GPL(flex_array_clear); /** * flex_array_prealloc - guarantee that array space exists @@ -293,6 +298,7 @@ int flex_array_prealloc(struct flex_array *fa, unsigned int start, } return 0; } +EXPORT_SYMBOL_GPL(flex_array_prealloc); /** * flex_array_get - pull data back out of the array @@ -325,6 +331,7 @@ void *flex_array_get(struct flex_array *fa, unsigned int element_nr) } return &part->elements[index_inside_part(fa, element_nr, part_nr)]; } +EXPORT_SYMBOL_GPL(flex_array_get); /** * flex_array_get_ptr - pull a ptr back out of the array @@ -345,6 +352,7 @@ void *flex_array_get_ptr(struct flex_array *fa, unsigned int element_nr) return *tmp; } +EXPORT_SYMBOL_GPL(flex_array_get_ptr); static int part_is_free(struct flex_array_part *part) { @@ -387,5 +395,6 @@ int flex_array_shrink(struct flex_array *fa) } return ret; } +EXPORT_SYMBOL_GPL(flex_array_shrink); #endif /* Linux version < 3.0.0 */ diff --git a/datapath/linux/compat/gso.c b/datapath/linux/compat/gso.c index cad9b18..1a40f7f 100644 --- a/datapath/linux/compat/gso.c +++ b/datapath/linux/compat/gso.c @@ -167,6 +167,7 @@ drop: kfree_skb(skb); return err; } +EXPORT_SYMBOL_GPL(rpl_dev_queue_xmit); #endif /* 3.16 */ #if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) diff --git a/datapath/linux/compat/reciprocal_div.c b/datapath/linux/compat/reciprocal_div.c index 90ce7b1..f8aacef 100644 --- a/datapath/linux/compat/reciprocal_div.c +++ b/datapath/linux/compat/reciprocal_div.c @@ -1,5 +1,6 @@ #include <linux/kernel.h> #include <asm/div64.h> +#include <linux/module.h> #include <linux/reciprocal_div.h> /* @@ -23,3 +24,4 @@ struct reciprocal_value reciprocal_value(u32 d) return R; } +EXPORT_SYMBOL_GPL(reciprocal_value); diff --git a/datapath/linux/compat/skbuff-openvswitch.c b/datapath/linux/compat/skbuff-openvswitch.c index 23d8d29..c54d839 100644 --- a/datapath/linux/compat/skbuff-openvswitch.c +++ b/datapath/linux/compat/skbuff-openvswitch.c @@ -125,6 +125,7 @@ skb_zerocopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen) return 0; } +EXPORT_SYMBOL_GPL(skb_zerocopy); #endif #endif @@ -139,6 +140,7 @@ int skb_ensure_writable(struct sk_buff *skb, int write_len) return pskb_expand_head(skb, 0, 0, GFP_ATOMIC); } +EXPORT_SYMBOL_GPL(skb_ensure_writable); #endif #ifndef HAVE_SKB_VLAN_POP @@ -207,6 +209,7 @@ int skb_vlan_pop(struct sk_buff *skb) __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci); return 0; } +EXPORT_SYMBOL_GPL(skb_vlan_pop); #endif #ifndef HAVE_SKB_VLAN_PUSH @@ -235,6 +238,7 @@ int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci) __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci); return 0; } +EXPORT_SYMBOL_GPL(skb_vlan_push); #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) diff --git a/datapath/linux/compat/utils.c b/datapath/linux/compat/utils.c index 9404e20..3d4245d 100644 --- a/datapath/linux/compat/utils.c +++ b/datapath/linux/compat/utils.c @@ -60,4 +60,5 @@ bool __net_get_random_once(void *buf, int nbytes, bool *done, return true; } +EXPORT_SYMBOL_GPL(__net_get_random_once); #endif -- 1.7.9.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
