summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohn cooper <john.cooper@redhat.com>2009-06-04 13:15:53 -0400
committerEduardo Habkost <ehabkost@redhat.com>2009-06-08 08:59:57 -0300
commit7a6cf633acf9a685cacbc1a38cf07f439c678780 (patch)
treea5892933038c9ead41d329c98eac1adb899cf11e
parent6b5382a68731b9531eb37ebec9487028bf358ffb (diff)
kvm doesn't build on newer RHEL-5.4 kernels because of get_user_pages_fast(), AKA BZ #504047, V2
[Bug fix of prior version where gupf() compat conversion was broken for !rhel5.4] This patch reverts the interim suboptimal work-around for get_user_pages_fast() and smp_send_reschedule() under RHEL5.4 kernels where both symbols are now exported to module linkage (ref: BZ #504038). Test: kernel modules should build successfully and load under a rhel5.4 kernel patched per BZ #504038. Additionally no related external-module-compat symbols should be built into modules nor referenced under a rhel5.4 host, eg: U get_user_pages_fast U smp_send_reschedule Signed-off-by: john cooper <john.cooper@redhat.com> Message-ID: <4A280149.7020807@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Bugzilla: 504047 RH-Upstream-status: pending Obsoletes: <4A27182E.2020701@redhat.com> Acked-by: Eduardo Habkost <ehabkost@redhat.com> Acked-by: Don Dutile <ddutile@redhat.com> Acked-by: Dor Laor <dlaor@redhat.com>
-rw-r--r--kernel/external-module-compat-comm.h14
-rw-r--r--kernel/external-module-compat.c5
2 files changed, 18 insertions, 1 deletions
diff --git a/kernel/external-module-compat-comm.h b/kernel/external-module-compat-comm.h
index 3899535a..bd57d16a 100644
--- a/kernel/external-module-compat-comm.h
+++ b/kernel/external-module-compat-comm.h
@@ -226,6 +226,10 @@ int kvm_smp_call_function_mask(cpumask_t mask, void (*func) (void *info),
#define smp_call_function_mask kvm_smp_call_function_mask
+#if (!defined(RHEL_RELEASE_CODE) || \
+ RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5,4) || \
+ !defined(CONFIG_X86_64))
+
void kvm_smp_send_reschedule(int cpu);
#else
@@ -233,6 +237,7 @@ void kvm_smp_send_reschedule(int cpu);
#define kvm_smp_send_reschedule smp_send_reschedule
#endif
+#endif
/* empty_zero_page isn't exported in all kernels */
#include <asm/pgtable.h>
@@ -572,7 +577,11 @@ struct rchan *kvm_relay_open(const char *base_filename,
#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) && \
+ (!defined(RHEL_RELEASE_CODE) || \
+ RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5,4) || \
+ !defined(CONFIG_X86_64)))
+
static inline int kvm_get_user_pages_fast(unsigned long start, int nr_pages,
int write, struct page **pages)
{
@@ -585,6 +594,9 @@ static inline int kvm_get_user_pages_fast(unsigned long start, int nr_pages,
return npages;
}
+#else
+
+#define kvm_get_user_pages_fast get_user_pages_fast
#endif
diff --git a/kernel/external-module-compat.c b/kernel/external-module-compat.c
index cdcce480..29414731 100644
--- a/kernel/external-module-compat.c
+++ b/kernel/external-module-compat.c
@@ -252,6 +252,9 @@ void kvm_queue_smp_call_function(int cpu)
schedule_work(&kvm_kick->work);
}
+#if (!defined(RHEL_RELEASE_CODE) || \
+ RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5,4) || \
+ !defined(CONFIG_X86_64))
void kvm_smp_send_reschedule(int cpu)
{
if (irqs_disabled()) {
@@ -262,6 +265,8 @@ void kvm_smp_send_reschedule(int cpu)
}
#endif
+#endif
+
/* manually export hrtimer_init/start/cancel */
void (*hrtimer_init_p)(struct hrtimer *timer, clockid_t which_clock,
enum hrtimer_mode mode);