Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > aadbe78a25743146bb784eee19f007c5 > files > 260

kvm-83-164.el5_5.9.src.rpm

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