diff mbox

use __pa_symbol to calculate the address of a C symbol.

Message ID 1251702271-4797-1-git-send-email-glommer@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Glauber Costa Aug. 31, 2009, 7:04 a.m. UTC
The use of __pa() to calculate the address of a C-visible symbol
is wrong, and can lead to unpredictable results. See arch/x86/include/asm/page.h
for details.

It should be replaced with __pa_symbol(), that does the correct math here,
by taking relocations into account.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 arch/x86/kernel/kvmclock.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Avi Kivity Aug. 31, 2009, 11:24 a.m. UTC | #1
On 08/31/2009 10:04 AM, Glauber Costa wrote:
> The use of __pa() to calculate the address of a C-visible symbol
> is wrong, and can lead to unpredictable results. See arch/x86/include/asm/page.h
> for details.
>
> It should be replaced with __pa_symbol(), that does the correct math here,
> by taking relocations into account.
>    

Applied, thanks.

I note that the changelog entry says nothing about what component is 
involved and what the effect of the bug is.  This reduces its usefulness 
for someone looking over the log and trying to see if a particular bug 
is fixed.
diff mbox

Patch

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 223af43..e5efcdc 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -50,8 +50,8 @@  static unsigned long kvm_get_wallclock(void)
 	struct timespec ts;
 	int low, high;
 
-	low = (int)__pa(&wall_clock);
-	high = ((u64)__pa(&wall_clock) >> 32);
+	low = (int)__pa_symbol(&wall_clock);
+	high = ((u64)__pa_symbol(&wall_clock) >> 32);
 	native_write_msr(MSR_KVM_WALL_CLOCK, low, high);
 
 	vcpu_time = &get_cpu_var(hv_clock);