diff options
author | john cooper <john.cooper@redhat.com> | 2009-06-04 13:15:53 -0400 |
---|---|---|
committer | Eduardo Habkost <ehabkost@redhat.com> | 2009-06-08 08:59:57 -0300 |
commit | 7a6cf633acf9a685cacbc1a38cf07f439c678780 (patch) | |
tree | a5892933038c9ead41d329c98eac1adb899cf11e | |
parent | 6b5382a68731b9531eb37ebec9487028bf358ffb (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.h | 14 | ||||
-rw-r--r-- | 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 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); |