All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Alex Bennée" <alex.bennee@linaro.org>,
	"Nikunj A Dadhania" <nikunj@linux.vnet.ibm.com>
Cc: qemu-ppc@nongnu.org, david@gibson.dropbear.id.au,
	qemu-devel@nongnu.org, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH RFC v1 1/3] target-ppc: add TLB_NEED_LOCAL_FLUSH flag
Date: Sat, 10 Sep 2016 09:06:29 +1000	[thread overview]
Message-ID: <1473462389.8689.200.camel@kernel.crashing.org> (raw)
In-Reply-To: <87oa3xxj2r.fsf@linaro.org>

On Fri, 2016-09-09 at 15:07 +0100, Alex Bennée wrote:
> Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> writes:
> 
> I think we need a little more detail here. In fact when you post the
> next version of the series could you please include a cover letter to
> cover what the series is trying to achieve?

In the meantime, for the readers, this is about fixing a problem
on TCG today (without MT-TCG) where we fail to properly propagate
TLB invalidations to other CPUs when we should (when the guest uses
boradcast TLB invalidation instructions).

The implementation also provides some ground work to make it easier to
plumb in the necessary MT-TCG additions.

> 
> > 
> > Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> > ---
> >  target-ppc/cpu.h         | 1 +
> >  target-ppc/helper_regs.h | 2 +-
> >  target-ppc/mmu-hash64.c  | 4 ++--
> >  target-ppc/mmu_helper.c  | 6 +++---
> >  4 files changed, 7 insertions(+), 6 deletions(-)
> > 
> > diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> > index 1e808c8..71111dc 100644
> > --- a/target-ppc/cpu.h
> > +++ b/target-ppc/cpu.h
> > @@ -1009,6 +1009,7 @@ struct CPUPPCState {
> >      bool tlb_dirty;   /* Set to non-zero when modifying
> > TLB                  */
> >      bool kvm_sw_tlb;  /* non-zero if KVM SW TLB API is
> > active                */
> >      uint32_t tlb_need_flush; /* Delayed flush needed */
> > +#define TLB_NEED_LOCAL_FLUSH   0x1
> >  #endif
> > 
> >      /* Other registers */
> > diff --git a/target-ppc/helper_regs.h b/target-ppc/helper_regs.h
> > index 3d279f1..4457a30 100644
> > --- a/target-ppc/helper_regs.h
> > +++ b/target-ppc/helper_regs.h
> > @@ -157,7 +157,7 @@ static inline int hreg_store_msr(CPUPPCState
> > *env, target_ulong value,
> >  static inline void check_tlb_flush(CPUPPCState *env)
> >  {
> >      CPUState *cs = CPU(ppc_env_get_cpu(env));
> > -    if (env->tlb_need_flush) {
> > +    if ((env->tlb_need_flush & TLB_NEED_LOCAL_FLUSH) ==
> > TLB_NEED_LOCAL_FLUSH) {
> >          env->tlb_need_flush = 0;
> >          tlb_flush(cs, 1);
> >      }
> > diff --git a/target-ppc/mmu-hash64.c b/target-ppc/mmu-hash64.c
> > index 8118143..4c7ceef 100644
> > --- a/target-ppc/mmu-hash64.c
> > +++ b/target-ppc/mmu-hash64.c
> > @@ -110,7 +110,7 @@ void helper_slbia(CPUPPCState *env)
> >               *      and we still don't have a tlb_flush_mask(env,
> > n, mask)
> >               *      in QEMU, we just invalidate all TLBs
> >               */
> > -            env->tlb_need_flush = 1;
> > +            env->tlb_need_flush = TLB_NEED_LOCAL_FLUSH;
> 
> I'm not sure what we gain here versus just using a straight bool for
> the flag.
> 
> > 
> >          }
> >      }
> >  }
> > @@ -132,7 +132,7 @@ void helper_slbie(CPUPPCState *env,
> > target_ulong addr)
> >           *      and we still don't have a tlb_flush_mask(env, n,
> > mask)
> >           *      in QEMU, we just invalidate all TLBs
> >           */
> > -        env->tlb_need_flush = 1;
> > +        env->tlb_need_flush = TLB_NEED_LOCAL_FLUSH;
> >      }
> >  }
> > 
> > diff --git a/target-ppc/mmu_helper.c b/target-ppc/mmu_helper.c
> > index 696bb03..2498888 100644
> > --- a/target-ppc/mmu_helper.c
> > +++ b/target-ppc/mmu_helper.c
> > @@ -1965,7 +1965,7 @@ void ppc_tlb_invalidate_one(CPUPPCState *env,
> > target_ulong addr)
> >           * we just mark the TLB to be flushed later (context
> > synchronizing
> >           * event or sync instruction on 32-bit).
> >           */
> > -        env->tlb_need_flush = 1;
> > +        env->tlb_need_flush = TLB_NEED_LOCAL_FLUSH;
> >          break;
> >  #if defined(TARGET_PPC64)
> >      case POWERPC_MMU_64B:
> > @@ -1979,7 +1979,7 @@ void ppc_tlb_invalidate_one(CPUPPCState *env,
> > target_ulong addr)
> >           *      and we still don't have a tlb_flush_mask(env, n,
> > mask) in QEMU,
> >           *      we just invalidate all TLBs
> >           */
> > -        env->tlb_need_flush = 1;
> > +        env->tlb_need_flush = TLB_NEED_LOCAL_FLUSH;
> >          break;
> >  #endif /* defined(TARGET_PPC64) */
> >      default:
> > @@ -2065,7 +2065,7 @@ void helper_store_sr(CPUPPCState *env,
> > target_ulong srnum, target_ulong value)
> >              }
> >          }
> >  #else
> > -        env->tlb_need_flush = 1;
> > +        env->tlb_need_flush = TLB_NEED_LOCAL_FLUSH;
> >  #endif
> >      }
> >  }
> 
> 
> --
> Alex Bennée

      parent reply	other threads:[~2016-09-09 23:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-09 10:45 [Qemu-devel] [PATCH RFC v1 1/3] target-ppc: add TLB_NEED_LOCAL_FLUSH flag Nikunj A Dadhania
2016-09-09 10:45 ` [Qemu-devel] [PATCH RFC v1 2/3] target-ppc: add flag in chech_tlb_flush() Nikunj A Dadhania
2016-09-09 11:33   ` Benjamin Herrenschmidt
2016-09-09 10:45 ` [Qemu-devel] [PATCH RFC v1 3/3] target-ppc: tlbie should have global effect Nikunj A Dadhania
2016-09-09 11:35   ` Benjamin Herrenschmidt
2016-09-09 11:57     ` Nikunj A Dadhania
2016-09-09 11:30 ` [Qemu-devel] [PATCH RFC v1 1/3] target-ppc: add TLB_NEED_LOCAL_FLUSH flag Benjamin Herrenschmidt
2016-09-09 14:07 ` Alex Bennée
2016-09-09 15:13   ` Nikunj A Dadhania
2016-09-09 23:06   ` Benjamin Herrenschmidt [this message]

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=1473462389.8689.200.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=alex.bennee@linaro.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=nikunj@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=rth@twiddle.net \
    /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.