From 7a6cf633acf9a685cacbc1a38cf07f439c678780 Mon Sep 17 00:00:00 2001 From: john cooper <john.cooper@redhat.com> Date: Thu, 4 Jun 2009 13:15:53 -0400 Subject: [PATCH] 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> --- kernel/external-module-compat-comm.h | 14 +++++++++++++- kernel/external-module-compat.c | 5 +++++ 2 files changed, 18 insertions(+), 1 deletions(-) diff --git a/kernel/external-module-compat-comm.h b/kernel/external-module-compat-comm.h index 3899535..bd57d16 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 cdcce48..2941473 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); -- 1.6.3.rc4.29.g8146