On 11/13/09 20:53, Zhang, Xiantao wrote:
> Hi, Jeremy
> The attached patch should fix the bug:
> http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=1529 which blocked us
> for weeks. Since scale_delta is used in the vsyscall vtime, so it should be
> inlined and linked to vsycall section, otherwise, dom0 should refuse the
> call. But due to GCC's optimization, scale_delta is compiled to a global
> function instead of inline function even if it is declared with inline
> attribute, so the issue occurs. To ensure this function is inlined to
> vsyscall section, a stricter attribute __always_inline should be used in its
> declaration. Thanks!
>
Thanks for tracking that down.
J
> Xiantao
>
>
> From 3290d6e40f6c69ce3edd728f57780f088b7155e3 Mon Sep 17 00:00:00 2001
> From: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
> Date: Fri, 13 Nov 2009 20:33:10 -0500
> Subject: [PATCH] x86: Use __always_inline to ensure scale_delta linked to
> vsyscall section.
>
> scale_delta is called in vsyscall vtime, so it should be linked to vsyscall
> section and use fixmap to access it, otherwise unexpected page fault may raise
> in vsyscall context, and leads to system dom0 panic.
>
> Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
> ---
> arch/x86/kernel/pvclock.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
> index f47f91e..1b5d3e8 100644
> --- a/arch/x86/kernel/pvclock.c
> +++ b/arch/x86/kernel/pvclock.c
> @@ -28,7 +28,8 @@
> * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
> * yielding a 64-bit result.
> */
> -static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift)
> +static __always_inline
> +u64 scale_delta(u64 delta, u32 mul_frac, int shift)
> {
> u64 product;
> #ifdef __i386__
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|