Patch accepted.

Commit title is:

Eliminate redundant and incorrect function booke206_page_size_to_tlb

** Changed in: qemu
       Status: New => Fix Committed

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1587535

Title:
  Incorrect MAS1_TSIZE_SHIFT in ppce500_spin.c causes incorrectly sized
  TLB.

Status in QEMU:
  Fix Committed

Bug description:
  When e500 PPC is booted multi-core, the non-boot cores are started via
  the spin table.  ppce500_spin.c:spin_kick() calls
  mmubooke_create_initial_mapping() to allocate a 64MB TLB entry, but
  the created TLB entry is only 256KB.

  The root cause is that the function computing the size of the TLB
  entry, namely booke206_page_size_to_tlb assumes MAS1.TSIZE as defined
  by latter PPC cores, specifically n to the power of FOUR * 1KB.  The
  result is then used by mmubooke_create_initial_mapping using
  MAS1_TSIZE_SHIFT, but MAS1_TSIZE_SHIFT is defined assuming TLB entries
  are n to the power of TWO * 1KB.  I.e., a difference of shift=7 or
  shift=8.

  Simply changing MAS1_TSIZE_SHIFT from 7 to 8 is not appropriate since
  the macro is used elsewhere.

  Removing the ">>1" from:

  > static inline hwaddr booke206_page_size_to_tlb(uint64_t size)
  > {
  >     return ctz32(size >> 10) >> 1;

  and adding an appropriate comment is what I used as a work around:

  > static inline hwaddr booke206_page_size_to_tlb(uint64_t size)
  > {
  >     // resulting size is based on MAS1_TSIZE_SHIFT=7 TLB size.
  >     return ctz32(size >> 10);

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1587535/+subscriptions

Reply via email to