[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