Re: [patch 12/18] x86: vdso: pvclock gettime support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 30, 2012 at 11:49:39AM +0400, Glauber Costa wrote:
> On 10/29/2012 10:42 PM, Marcelo Tosatti wrote:
> > On Mon, Oct 29, 2012 at 06:59:35PM +0400, Glauber Costa wrote:
> >> On 10/24/2012 05:13 PM, Marcelo Tosatti wrote:
> >>> Improve performance of time system calls when using Linux pvclock, 
> >>> by reading time info from fixmap visible copy of pvclock data.
> >>>
> >>> Originally from Jeremy Fitzhardinge.
> >>>
> >>> Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
> >>>
> >>> Index: vsyscall/arch/x86/vdso/vclock_gettime.c
> >>> ===================================================================
> >>> --- vsyscall.orig/arch/x86/vdso/vclock_gettime.c
> >>> +++ vsyscall/arch/x86/vdso/vclock_gettime.c
> >>> @@ -22,6 +22,7 @@
> >>>  #include <asm/hpet.h>
> >>>  #include <asm/unistd.h>
> >>>  #include <asm/io.h>
> >>> +#include <asm/pvclock.h>
> >>>  
> >>>  #define gtod (&VVAR(vsyscall_gtod_data))
> >>>  
> >>> @@ -62,6 +63,69 @@ static notrace cycle_t vread_hpet(void)
> >>>  	return readl((const void __iomem *)fix_to_virt(VSYSCALL_HPET) + 0xf0);
> >>>  }
> >>>  
> >>> +#ifdef CONFIG_PARAVIRT_CLOCK_VSYSCALL
> >>> +
> >>> +static notrace const struct pvclock_vsyscall_time_info *get_pvti(int cpu)
> >>> +{
> >>> +	const aligned_pvti_t *pvti_base;
> >>> +	int idx = cpu / (PAGE_SIZE/PVTI_SIZE);
> >>> +	int offset = cpu % (PAGE_SIZE/PVTI_SIZE);
> >>> +
> >>> +	BUG_ON(PVCLOCK_FIXMAP_BEGIN + idx > PVCLOCK_FIXMAP_END);
> >>> +
> >>> +	pvti_base = (aligned_pvti_t *)__fix_to_virt(PVCLOCK_FIXMAP_BEGIN+idx);
> >>> +
> >>> +	return &pvti_base[offset].info;
> >>> +}
> >>> +
> >>
> >> Unless I am missing something, if gcc decides to not inline get_pvti,
> >> this will break, right? I believe you need to mark that function with
> >> __always_inline.
> > 
> > Can't see why. Please enlighten me.
> > 
> 
> I can be wrong, I don't deal with this vdso code for quite a while - so
> forgive me if my memory tricked me.
> 
> But wasn't it the case that vdso functions could not call functions in
> the kernel address space outside the mapped page? Or does this
> restriction only apply to accessing data?

Only code in the vdso page is executed, but this particular function is
in the vdso so its fine.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux