[ovs-dev] [RFC 1/2] datapath: Fix unexported public functions in linux/compat/linux/.

Alex Wang alexw at nicira.com
Mon Apr 20 05:15:43 UTC 2015


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 <alexw at nicira.com>
---
 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




More information about the dev mailing list