Patchwork [13/15] target-pcc: Convert ppcemb_tlb_t to use fixed 64-bit RPN

login
register
mail settings
Submitter David Gibson
Date Oct. 18, 2012, 5:50 a.m.
Message ID <1350539437-535-14-git-send-email-david@gibson.dropbear.id.au>
Download mbox | patch
Permalink /patch/192200/
State New
Headers show

Comments

David Gibson - Oct. 18, 2012, 5:50 a.m.
Currently the ppcemb_tlb_t struct, used on a number of embedded ppc models
to represent a TLB entry contains a target_phys_addr_t.  That works
reasonably for now, but is troublesome for saving the state, which we'll
want to do in future.  target_phys_addr_t is a large enough type to contain
a physical address for any supported machine - and can thus, in theory at
least, vary depending on what machines are enabled other than the one
we're actually using right now.  This makes it unsuitable for describing
in vmstate.

This patch therefore changes ppcemb_tlb_t to use a fixed 64-bit integer
which we know is sufficient for all the machines which use this structure.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 target-ppc/cpu.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
David Gibson - Oct. 18, 2012, 8:19 a.m.
On Thu, Oct 18, 2012 at 08:37:20AM +0200, Alexander Graf wrote:
> 
> 
> On 18.10.2012, at 07:50, David Gibson <david@gibson.dropbear.id.au> wrote:
> 
> > Currently the ppcemb_tlb_t struct, used on a number of embedded ppc models
> > to represent a TLB entry contains a target_phys_addr_t.  That works
> > reasonably for now, but is troublesome for saving the state, which we'll
> > want to do in future.  target_phys_addr_t is a large enough type to contain
> > a physical address for any supported machine - and can thus, in theory at
> > least, vary depending on what machines are enabled other than the one
> > we're actually using right now.  This makes it unsuitable for describing
> > in vmstate.
> 
> Target_phys_addr_t is actually 64bit for all ppc targets today since
> some 32 bit boards support more than 32 bit address space ;).

Yes, I know.  In fact since recently it's 64bit always on everything.

> The change still is fine though, as it makes that bit explicit.

Yes.  What this is leading to is the new savevm code - there are no
vmstate helpers for target_phys_addr_t and my attempt to add them met
with at least semi-convincing arguments against.

Patch

diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
index cde6da0..f30e0c7 100644
--- a/target-ppc/cpu.h
+++ b/target-ppc/cpu.h
@@ -355,7 +355,7 @@  struct ppc6xx_tlb_t {
 
 typedef struct ppcemb_tlb_t ppcemb_tlb_t;
 struct ppcemb_tlb_t {
-    target_phys_addr_t RPN;
+    uint64_t RPN;
     target_ulong EPN;
     target_ulong PID;
     target_ulong size;