All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Neuling <mikey@neuling.org>
To: Balbir Singh <bsingharora@gmail.com>,
	will.deacon@arm.com, kvm@vger.kernel.org
Cc: penberg@kernel.org, mpe@ellerman.id.au, aik@ozlabs.ru
Subject: Re: [PATCH 1/4] Add basic little endian support.
Date: Tue, 22 Mar 2016 08:55:19 +1100	[thread overview]
Message-ID: <1458597319.6622.137.camel@neuling.org> (raw)
In-Reply-To: <1458544650-31416-2-git-send-email-bsingharora@gmail.com>

On Mon, 2016-03-21 at 18:17 +1100, Balbir Singh wrote:

> Currently kvmtool works well/was designed for big endian ppc64 systems.
> This patch adds support for little endian systems
> 
> The system does not yet boot as support for h_set_mode is required to help
> with exceptions in big endian mode -- first page fault. The support comes in
> the next patch of the series

Can we define some of the variables below with the appropriate endian?
pft_size_prop, segment_page_sizes_1, and rtas could all be defined as
big endian.

Mikey



> Signed-off-by: Balbir Singh <bsingharora@gmail.com>
> ---
>  powerpc/kvm.c   | 24 ++++++++++++------------
>  powerpc/spapr.h |  5 +++--
>  2 files changed, 15 insertions(+), 14 deletions(-)
> 
> diff --git a/powerpc/kvm.c b/powerpc/kvm.c
> index b4c3310..d147e0c 100644
> --- a/powerpc/kvm.c
> +++ b/powerpc/kvm.c
> @@ -253,21 +253,21 @@ static void generate_segment_page_sizes(struct kvm_ppc_smu_info *info, struct f
>    	  	  if (sps->page_shift == 0)
>    	  	  	  break;
>  
> -  	  	  *p++ = sps->page_shift;
> -  	  	  *p++ = sps->slb_enc;
> +  	  	  *p++ = cpu_to_be32(sps->page_shift);
> +  	  	  *p++ = cpu_to_be32(sps->slb_enc);
>  
>    	  	  for (j = 0; j < KVM_PPC_PAGE_SIZES_MAX_SZ; j++)
>    	  	  	  if (!info->sps[i].enc[j].page_shift)
>    	  	  	  	  break;
>  
> -  	  	  *p++ = j;  	  /* count of enc */
> +  	  	  *p++ = cpu_to_be32(j);  	  /* count of enc */
>  
>    	  	  for (j = 0; j < KVM_PPC_PAGE_SIZES_MAX_SZ; j++) {
>    	  	  	  if (!info->sps[i].enc[j].page_shift)
>    	  	  	  	  break;
>  
> -  	  	  	  *p++ = info->sps[i].enc[j].page_shift;
> -  	  	  	  *p++ = info->sps[i].enc[j].pte_enc;
> +  	  	  	  *p++ = cpu_to_be32(info->sps[i].enc[j].page_shift);
> +  	  	  	  *p++ = cpu_to_be32(info->sps[i].enc[j].pte_enc);
>    	  	  }
>    	  }
>  }
> @@ -292,7 +292,7 @@ static int setup_fdt(struct kvm *kvm)
>    	  u8  	  	  staging_fdt[FDT_MAX_SIZE];
>    	  struct cpu_info *cpu_info = find_cpu_info(kvm);
>    	  struct fdt_prop segment_page_sizes;
> -  	  u32 segment_sizes_1T[] = {0x1c, 0x28, 0xffffffff, 0xffffffff};
> +  	  u32 segment_sizes_1T[] = {cpu_to_be32(0x1c), cpu_to_be32(0x28), 0xffffffff, 0xffffffff};
>  
>    	  /* Generate an appropriate DT at kvm->arch.fdt_gra */
>    	  void *fdt_dest = guest_flat_to_host(kvm, kvm->arch.fdt_gra);
> @@ -364,7 +364,7 @@ static int setup_fdt(struct kvm *kvm)
>    	  _FDT(fdt_property_cell(fdt, "#size-cells", 0x0));
>  
>    	  for (i = 0; i < smp_cpus; i += SMT_THREADS) {
> -  	  	  int32_t pft_size_prop[] = { 0, HPT_ORDER };
> +  	  	  int32_t pft_size_prop[] = { 0, cpu_to_be32(HPT_ORDER) };
>    	  	  uint32_t servers_prop[SMT_THREADS];
>    	  	  uint32_t gservers_prop[SMT_THREADS * 2];
>    	  	  int threads = (smp_cpus - i) >= SMT_THREADS ? SMT_THREADS :
> @@ -503,11 +503,11 @@ int kvm__arch_setup_firmware(struct kvm *kvm)
>    	   */
>    	  uint32_t *rtas = guest_flat_to_host(kvm, kvm->arch.rtas_gra);
>  
> -  	  rtas[0] = 0x7c641b78;
> -  	  rtas[1] = 0x3c600000;
> -  	  rtas[2] = 0x6063f000;
> -  	  rtas[3] = 0x44000022;
> -  	  rtas[4] = 0x4e800020;
> +  	  rtas[0] = cpu_to_be32(0x7c641b78);
> +  	  rtas[1] = cpu_to_be32(0x3c600000);
> +  	  rtas[2] = cpu_to_be32(0x6063f000);
> +  	  rtas[3] = cpu_to_be32(0x44000022);
> +  	  rtas[4] = cpu_to_be32(0x4e800020);
>    	  kvm->arch.rtas_size = 20;
>  
>    	  pr_info("Set up %ld bytes of RTAS at 0x%lx\n",
> diff --git a/powerpc/spapr.h b/powerpc/spapr.h
> index 7a377d0..8b294d1 100644
> --- a/powerpc/spapr.h
> +++ b/powerpc/spapr.h
> @@ -15,6 +15,7 @@
>  #define __HW_SPAPR_H__
>  
>  #include <inttypes.h>
> +#include <linux/byteorder.h>
>  
>  #include "kvm/kvm.h"
>  #include "kvm/kvm-cpu.h"
> @@ -80,12 +81,12 @@ int spapr_rtas_fdt_setup(struct kvm *kvm, void *fdt);
>  
>  static inline uint32_t rtas_ld(struct kvm *kvm, target_ulong phys, int n)
>  {
> -  	  return *((uint32_t *)guest_flat_to_host(kvm, phys + 4*n));
> +  	  return cpu_to_be32(*((uint32_t *)guest_flat_to_host(kvm, phys + 4*n)));
>  }
>  
>  static inline void rtas_st(struct kvm *kvm, target_ulong phys, int n, uint32_t val)
>  {
> -  	  *((uint32_t *)guest_flat_to_host(kvm, phys + 4*n)) = val;
> +  	  *((uint32_t *)guest_flat_to_host(kvm, phys + 4*n)) = cpu_to_be32(val);
>  }
>  
>  typedef void (*spapr_rtas_fn)(struct kvm_cpu *vcpu, uint32_t token,

  reply	other threads:[~2016-03-21 21:55 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-21  7:17 [KVMTOOL][V1] Implement support for ppc64le Balbir Singh
2016-03-21  7:17 ` [PATCH 1/4] Add basic little endian support Balbir Singh
2016-03-21 21:55   ` Michael Neuling [this message]
2016-03-21 22:30     ` Michael Ellerman
2016-03-21  7:17 ` [PATCH 2/4] Implement H_SET_MODE for ppc64le Balbir Singh
2016-03-30  5:39   ` Michael Ellerman
2016-03-30 11:08     ` Balbir Singh
2016-03-21  7:17 ` [PATCH 3/4] Fix a race during exit processing Balbir Singh
2016-03-21  7:17 ` [PATCH 4/4] Implement spapr pci for little endian systems Balbir Singh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1458597319.6622.137.camel@neuling.org \
    --to=mikey@neuling.org \
    --cc=aik@ozlabs.ru \
    --cc=bsingharora@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=penberg@kernel.org \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.