RE: [PATCH v5 1/4] KVM: PPC: epapr: Factor out the epapr init

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

 




> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Wednesday, February 22, 2012 5:56 AM
> To: Liu Yu-B13201
> Cc: agraf@xxxxxxx; kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx;
> linuxppc-dev@xxxxxxxxxx; Wood Scott-B07421
> Subject: Re: [PATCH v5 1/4] KVM: PPC: epapr: Factor out the epapr init
> 
> On 02/20/2012 10:46 PM, Liu Yu wrote:
> > from the kvm guest paravirt init code.
> >
> > Signed-off-by: Liu Yu <yu.liu@xxxxxxxxxxxxx>
> > ---
> > v5:
> > 1. fix the if test
> > 2. use patch_instruction()
> > 3. code cleanup
> > 4. rename the files
> > 5. make epapr paravirt user-selectable
> >
> >  arch/powerpc/include/asm/epapr_hcalls.h |    2 +
> >  arch/powerpc/kernel/Makefile            |    1 +
> >  arch/powerpc/kernel/epapr_hcalls.S      |   25 ++++++++++++++
> >  arch/powerpc/kernel/epapr_paravirt.c    |   54
> +++++++++++++++++++++++++++++++
> >  arch/powerpc/kernel/kvm.c               |   28 ++--------------
> >  arch/powerpc/kernel/kvm_emul.S          |   10 ------
> >  arch/powerpc/platforms/Kconfig          |    7 ++++
> >  7 files changed, 92 insertions(+), 35 deletions(-)  create mode
> > 100644 arch/powerpc/kernel/epapr_hcalls.S
> >  create mode 100644 arch/powerpc/kernel/epapr_paravirt.c
> >
> > diff --git a/arch/powerpc/include/asm/epapr_hcalls.h
> > b/arch/powerpc/include/asm/epapr_hcalls.h
> > index f3b0c2c..0ff3f24 100644
> > --- a/arch/powerpc/include/asm/epapr_hcalls.h
> > +++ b/arch/powerpc/include/asm/epapr_hcalls.h
> > @@ -148,6 +148,8 @@
> >  #define EV_HCALL_CLOBBERS2 EV_HCALL_CLOBBERS3, "r5"
> >  #define EV_HCALL_CLOBBERS1 EV_HCALL_CLOBBERS2, "r4"
> >
> > +extern bool epapr_para_enabled;
> > +extern u32 epapr_hypercall_start[];
> 
> I asked for s/epapr_para/epapr_paravirt/, at least in anything that is
> exposed beyond a single file.
> 
> >  /*
> >   * We use "uintptr_t" to define a register because it's guaranteed to
> > be a diff --git a/arch/powerpc/kernel/Makefile
> > b/arch/powerpc/kernel/Makefile index ee728e4..ba8fa43 100644
> > --- a/arch/powerpc/kernel/Makefile
> > +++ b/arch/powerpc/kernel/Makefile
> > @@ -136,6 +136,7 @@ ifneq ($(CONFIG_XMON)$(CONFIG_KEXEC),)
> >  obj-y				+= ppc_save_regs.o
> >  endif
> >
> > +obj-$(CONFIG_EPAPR_PARAVIRT)	+= epapr_paravirt.o epapr_hcalls.o
> >  obj-$(CONFIG_KVM_GUEST)		+= kvm.o kvm_emul.o
> >
> >  # Disable GCOV in odd or sensitive code diff --git
> > a/arch/powerpc/kernel/epapr_hcalls.S
> > b/arch/powerpc/kernel/epapr_hcalls.S
> > new file mode 100644
> > index 0000000..697b390
> > --- /dev/null
> > +++ b/arch/powerpc/kernel/epapr_hcalls.S
> > @@ -0,0 +1,25 @@
> > +/*
> > + * Copyright (C) 2012 Freescale Semiconductor, Inc.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License
> > + * as published by the Free Software Foundation; either version
> > + * 2 of the License, or (at your option) any later version.
> > + */
> > +
> > +#include <linux/threads.h>
> > +#include <asm/reg.h>
> > +#include <asm/page.h>
> > +#include <asm/cputable.h>
> > +#include <asm/thread_info.h>
> > +#include <asm/ppc_asm.h>
> > +#include <asm/asm-offsets.h>
> > +
> > +/* Hypercall entry point. Will be patched with device tree
> > +instructions. */ .global epapr_hypercall_start
> > +epapr_hypercall_start:
> > +	li	r3, -1
> > +	nop
> > +	nop
> > +	nop
> > +	blr
> > diff --git a/arch/powerpc/kernel/epapr_paravirt.c
> > b/arch/powerpc/kernel/epapr_paravirt.c
> > new file mode 100644
> > index 0000000..e601da7
> > --- /dev/null
> > +++ b/arch/powerpc/kernel/epapr_paravirt.c
> > @@ -0,0 +1,54 @@
> > +/*
> > + * ePAPR para-virtualization support.
> > + *
> > + * 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.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
> USA.
> > + *
> > + * Copyright (C) 2012 Freescale Semiconductor, Inc.
> > + */
> > +
> > +#include <linux/of.h>
> > +#include <asm/epapr_hcalls.h>
> > +#include <asm/cacheflush.h>
> > +#include <asm/code-patching.h>
> > +
> > +bool epapr_para_enabled = false;
> 
> No need to explicitly initialize to false.

Why not make code more readable?

> 
> > +static int __init epapr_para_init(void) {
> > +	struct device_node *hyper_node;
> > +	const u32 *insts;
> > +	int len, i;
> > +
> > +	hyper_node = of_find_node_by_path("/hypervisor");
> > +	if (!hyper_node) {
> > +		printk(KERN_WARNING
> > +		       "ePAPR paravirt disabled: No hypervisor node found\n");
> > +		return -ENODEV;
> > +	}
> > +
> > +	insts = of_get_property(hyper_node, "hcall-instructions", &len);
> > +	if (insts && !(len % 4) && len <= (4 * 4)) {
> > +		for (i = 0; i < (len / 4); i++)
> > +			patch_instruction(epapr_hypercall_start + i, insts[i]);
> > +
> > +		epapr_para_enabled = true;
> > +	} else {
> > +		printk(KERN_WARNING
> > +		       "ePAPR paravirt disabled: No hypervisor inst found\n");
> > +	}
> 
> Do not warn just because there's no hypervisor or hcall-instructions.
> There's nothing wrong with that.  Only warn if they are present but wrong.
> 

I see that it's not proper to warn in host.
But if user forget to add hypervisor node or inst, how can he know something is wrong?

Thanks,
Yu
��.n��������+%������w��{.n�����o��^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�

[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux