--- /dev/null
+Required missing symbols for FC11 kernels (2.6.29.4-167.fc11.x86_64)
+
+* get_vmalloc_info()
+There is no clean API in the kernel for modules to check the virtual
+memory state of the system. This information is available in user
+space under /proc/meminfo and the details for every virtual memory
+node are available under /proc/vmallocinfo.
+
+* groups_search()
+This support is easily replicated if the symbol is not provided by the
+kernel. However exporting the symbol from the kernel is preferable.
+This is required by the solaris credential API.
+
+* task_curr()
+This symbol is used by the solaris adaptive mutex implementation. If
+unavailable then all solaris mutexs behave strictly like linux style
+semaphones. If available then the mutex may spin for a short while,
+rather than sleep, if the holder of the lock is currently executing.
+
+* first_online_pgdat()
+* next_online_pgdat()
+* next_zone()
+Required helper functions for the zone iterators for_each_zone() and
+for_each_populated_zone(). These symbols were previously available
+in 2.6.17 kernels, marked unused in 2.6.18 kernels, and removed as
+of the 2.6.19 kernel series. The information is available in user
+space under /proc/zoneinfo.
+
+diff --git a/fs/proc/mmu.c b/fs/proc/mmu.c
+index 8ae221d..081c7b5 100644
+--- a/fs/proc/mmu.c
++++ b/fs/proc/mmu.c
+@@ -58,3 +58,4 @@ void get_vmalloc_info(struct vmalloc_info *vmi)
+ read_unlock(&vmlist_lock);
+ }
+ }
++EXPORT_SYMBOL(get_vmalloc_info);
+diff --git a/kernel/groups.c b/kernel/groups.c
+index 2b45b2e..24b62f8 100644
+--- a/kernel/groups.c
++++ b/kernel/groups.c
+@@ -153,6 +153,7 @@ int groups_search(const struct group_info *group_info, gid_t grp)
+ }
+ return 0;
+ }
++EXPORT_SYMBOL(groups_search);
+
+ /**
+ * set_groups - Change a group subscription in a set of credentials
+diff --git a/kernel/sched.c b/kernel/sched.c
+index 1b59e26..8728c52 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -1883,10 +1883,11 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep)
+ * task_curr - is this task currently executing on a CPU?
+ * @p: the task in question.
+ */
+-inline int task_curr(const struct task_struct *p)
++task_curr(const struct task_struct *p)
+ {
+ return cpu_curr(task_cpu(p)) == p;
+ }
++EXPORT_SYMBOL(task_curr);
+
+ static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
+ {
+diff --git a/mm/mmzone.c b/mm/mmzone.c
+index f5b7d17..1468a22 100644
+--- a/mm/mmzone.c
++++ b/mm/mmzone.c
+@@ -14,6 +14,7 @@ struct pglist_data *first_online_pgdat(void)
+ {
+ return NODE_DATA(first_online_node);
+ }
++EXPORT_SYMBOL(first_online_pgdat);
+
+ struct pglist_data *next_online_pgdat(struct pglist_data *pgdat)
+ {
+@@ -23,6 +24,7 @@ struct pglist_data *next_online_pgdat(struct pglist_data *pgdat)
+ return NULL;
+ return NODE_DATA(nid);
+ }
++EXPORT_SYMBOL(next_online_pgdat);
+
+ /*
+ * next_zone - helper magic for for_each_zone()
+@@ -42,6 +44,7 @@ struct zone *next_zone(struct zone *zone)
+ }
+ return zone;
+ }
++EXPORT_SYMBOL(next_zone);
+
+ static inline int zref_in_nodemask(struct zoneref *zref, nodemask_t *nodes)
+ {