lkml.org 
[lkml]   [2014]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v9 4/5] arm64: introduce CONFIG_PARAVIRT, PARAVIRT_TIME_ACCOUNTING and pv_time_ops
    On Thu, 9 Jan 2014, Stefano Stabellini wrote:
    > Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM64.
    > Necessary duplication of paravirt.h and paravirt.c with ARM.
    >
    > The only paravirt interface supported is pv_time_ops.steal_clock, so no
    > runtime pvops patching needed.
    >
    > This allows us to make use of steal_account_process_tick for stolen
    > ticks accounting.
    >
    > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
    > CC: will.deacon@arm.com
    > CC: nico@linaro.org
    > CC: marc.zyngier@arm.com
    > CC: cov@codeaurora.org
    > CC: arnd@arndb.de
    > CC: olof@lixom.net
    > CC: Catalin.Marinas@arm.com

    Catalin, Will, are you happy with this patch for 3.15?


    > Changes in v7:
    > - ifdef CONFIG_PARAVIRT the content of paravirt.h.
    > ---
    > arch/arm64/Kconfig | 20 ++++++++++++++++++++
    > arch/arm64/include/asm/paravirt.h | 20 ++++++++++++++++++++
    > arch/arm64/kernel/Makefile | 1 +
    > arch/arm64/kernel/paravirt.c | 25 +++++++++++++++++++++++++
    > 4 files changed, 66 insertions(+)
    > create mode 100644 arch/arm64/include/asm/paravirt.h
    > create mode 100644 arch/arm64/kernel/paravirt.c
    >
    > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
    > index 6d4dd22..d1003ba 100644
    > --- a/arch/arm64/Kconfig
    > +++ b/arch/arm64/Kconfig
    > @@ -212,6 +212,25 @@ config HAVE_ARCH_TRANSPARENT_HUGEPAGE
    >
    > source "mm/Kconfig"
    >
    > +config PARAVIRT
    > + bool "Enable paravirtualization code"
    > + ---help---
    > + This changes the kernel so it can modify itself when it is run
    > + under a hypervisor, potentially improving performance significantly
    > + over full virtualization.
    > +
    > +config PARAVIRT_TIME_ACCOUNTING
    > + bool "Paravirtual steal time accounting"
    > + select PARAVIRT
    > + default n
    > + ---help---
    > + Select this option to enable fine granularity task steal time
    > + accounting. Time spent executing other tasks in parallel with
    > + the current vCPU is discounted from the vCPU power. To account for
    > + that, there can be a small performance impact.
    > +
    > + If in doubt, say N here.
    > +
    > config XEN_DOM0
    > def_bool y
    > depends on XEN
    > @@ -220,6 +239,7 @@ config XEN
    > bool "Xen guest support on ARM64 (EXPERIMENTAL)"
    > depends on ARM64 && OF
    > select SWIOTLB_XEN
    > + select PARAVIRT
    > help
    > Say Y if you want to run Linux in a Virtual Machine on Xen on ARM64.
    >
    > diff --git a/arch/arm64/include/asm/paravirt.h b/arch/arm64/include/asm/paravirt.h
    > new file mode 100644
    > index 0000000..fd5f428
    > --- /dev/null
    > +++ b/arch/arm64/include/asm/paravirt.h
    > @@ -0,0 +1,20 @@
    > +#ifndef _ASM_ARM64_PARAVIRT_H
    > +#define _ASM_ARM64_PARAVIRT_H
    > +
    > +#ifdef CONFIG_PARAVIRT
    > +struct static_key;
    > +extern struct static_key paravirt_steal_enabled;
    > +extern struct static_key paravirt_steal_rq_enabled;
    > +
    > +struct pv_time_ops {
    > + unsigned long long (*steal_clock)(int cpu);
    > +};
    > +extern struct pv_time_ops pv_time_ops;
    > +
    > +static inline u64 paravirt_steal_clock(int cpu)
    > +{
    > + return pv_time_ops.steal_clock(cpu);
    > +}
    > +#endif
    > +
    > +#endif
    > diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
    > index 5ba2fd4..1dee735 100644
    > --- a/arch/arm64/kernel/Makefile
    > +++ b/arch/arm64/kernel/Makefile
    > @@ -18,6 +18,7 @@ arm64-obj-$(CONFIG_SMP) += smp.o smp_spin_table.o
    > arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o
    > arm64-obj-$(CONFIG_HAVE_HW_BREAKPOINT)+= hw_breakpoint.o
    > arm64-obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
    > +arm64-obj-$(CONFIG_PARAVIRT) += paravirt.o
    >
    > obj-y += $(arm64-obj-y) vdso/
    > obj-m += $(arm64-obj-m)
    > diff --git a/arch/arm64/kernel/paravirt.c b/arch/arm64/kernel/paravirt.c
    > new file mode 100644
    > index 0000000..53f371e
    > --- /dev/null
    > +++ b/arch/arm64/kernel/paravirt.c
    > @@ -0,0 +1,25 @@
    > +/*
    > + * This program is free software; you can redistribute it and/or modify
    > + * it under the terms of the GNU General Public License version 2 as
    > + * published by the Free Software Foundation.
    > + *
    > + * This program is distributed in the hope that it will be useful,
    > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    > + * GNU General Public License for more details.
    > + *
    > + * Copyright (C) 2013 Citrix Systems
    > + *
    > + * Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
    > + */
    > +
    > +#include <linux/export.h>
    > +#include <linux/jump_label.h>
    > +#include <linux/types.h>
    > +#include <asm/paravirt.h>
    > +
    > +struct static_key paravirt_steal_enabled;
    > +struct static_key paravirt_steal_rq_enabled;
    > +
    > +struct pv_time_ops pv_time_ops;
    > +EXPORT_SYMBOL_GPL(pv_time_ops);
    > --
    > 1.7.10.4
    >


    \
     
     \ /
      Last update: 2014-02-17 14:01    [W:6.352 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site