Subject: Re: [PATCH][v2] powerpc/85xx: Move ePAPR paravirt initialization earlier

From: Scott Wood <[email-masked]>
Date: Tue, 2 Jul 2013 12:55:40 -0500

On 07/02/2013 07:46:29 AM, Laurentiu Tudor wrote:
> diff --git a/arch/powerpc/kernel/epapr_paravirt.c =20
> b/arch/powerpc/kernel/epapr_paravirt.c
> index d44a571..d05f9da 100644
> --- a/arch/powerpc/kernel/epapr_paravirt.c
> +++ b/arch/powerpc/kernel/epapr_paravirt.c
> @@ -30,38 +30,45 @@ extern u32 epapr_ev_idle_start[];
>=20
>  bool epapr_paravirt_enabled;
>=20
> -static int __init epapr_paravirt_init(void)
> +static int __init early_init_dt_scan_epapr(unsigned long node,
> +					   const char *uname,
> +					   int depth, void *data)
>  {
> -	struct device_node *hyper_node;
> -	const u32 *insts;
> -	int len, i;
> +	const u32 *instrs;
> +	unsigned long len;
> +	int i;
>=20
> -	hyper_node =3D of_find_node_by_path("/hypervisor");
> -	if (!hyper_node)
> -		return -ENODEV;
> +	if (!of_flat_dt_is_compatible(node, "epapr,hypervisor-1"))
> +		return 0;

QEMU doesn't set "epapr,hypervisor-1" but it still uses the same hcall =20
mechanism.  The compatible that QEMU sets is "linux,kvm".  Perhaps QEMU =20
should change, but we'd still like to be compatible with older QEMUs.

How is this change related to moving initialization earlier?

> -	insts =3D of_get_property(hyper_node, "hcall-instructions", &len);
> -	if (!insts)
> -		return -ENODEV;
> +#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
> +	if (of_get_flat_dt_prop(node, "has-idle", NULL))
> +		ppc_md.power_save =3D epapr_ev_idle;
> +#endif

Why are you doing this before processing hcall-instructions?

-Scott=