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

Scott Wood scottwood at freescale.com
Wed Jul 3 03:55:40 EST 2013


On 07/02/2013 07:46:29 AM, Laurentiu Tudor wrote:
> diff --git a/arch/powerpc/kernel/epapr_paravirt.c  
> 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[];
> 
>  bool epapr_paravirt_enabled;
> 
> -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;
> 
> -	hyper_node = 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  
mechanism.  The compatible that QEMU sets is "linux,kvm".  Perhaps QEMU  
should change, but we'd still like to be compatible with older QEMUs.

How is this change related to moving initialization earlier?

> -	insts = 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 = epapr_ev_idle;
> +#endif

Why are you doing this before processing hcall-instructions?

-Scott


More information about the Linuxppc-dev mailing list