Subject: Re: powerpc/85xx: Move ePAPR paravirt initialization earlier

From: Scott Wood <[email-masked]>
Date: Tue, 25 Jun 2013 18:14:04 -0500

On Tue, Mar 05, 2013 at 05:52:36PM +0200, Laurentiu TUDOR wrote:
> From: Tudor Laurentiu <[email-masked]>
> 
> The ePAPR para-virtualization needs to happen very early
> otherwise the bytechannel based console will silently
> drop some of the early boot messages.
> 
> Before this patch, this is how the kernel log started:
> -----------------------------------------------------
>  > Brought up 2 CPUs
>  > devtmpfs: initialized
>  > NET: Registered protocol family 16
>  [...]
> -----------------------------------------------------
> 
> After the patch the early messages show up:
> -----------------------------------------------------
>  > Using P5020 DS machine description
>  > MMU: Supported page sizes
>  >          4 KB as direct
>  >       4096 KB as direct
>  [...]
> -----------------------------------------------------
> 
> At console init, the kernel tried to flush the log buffer.
> Since the paravirt was not yet initialized the console write
> function failed silently, thus losing the buffered messages.
[snip]
> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
> index 6da881b..ce092ac 100644
> --- a/arch/powerpc/kernel/setup_64.c
> +++ b/arch/powerpc/kernel/setup_64.c
> @@ -66,6 +66,7 @@
>  #include <asm/code-patching.h>
>  #include <asm/kvm_ppc.h>
>  #include <asm/hugetlb.h>
> +#include <asm/epapr_hcalls.h>
>  
>  #include "setup.h"
>  
> @@ -599,6 +600,8 @@ void __init setup_arch(char **cmdline_p)
>  	/* Initialize the MMU context management stuff */
>  	mmu_context_init();
>  
> +	epapr_paravirt_init();
> +
>  	kvm_linear_init();
>  
>  	/* Interrupt code needs to be 64K-aligned */

Is this early enough?  There's udbg activity before this.  Maybe it
should even go before udbg_early_init...  This would require converting
the code to use the early device tree functions.

-Scott