On Wed, Dec 16, 2020 at 07:47:29PM -0300, Fabiano Rosas wrote:
> > +static void do_tlb_invalidate(unsigned long rs, unsigned long target,
> > +                         unsigned long type, unsigned long page_size,
> > +                         unsigned long ap, unsigned long start,
> > +                         unsigned long end)
> > +{
> > +   unsigned long rb;
> > +   unsigned long addr = start;
> > +
> > +   if ((type & H_RPTI_TYPE_ALL) == H_RPTI_TYPE_ALL) {
> > +           rb = PPC_BIT(53); /* IS = 1 */
> > +           do_tlb_invalidate_all(rb, rs);
> > +           return;
> > +   }
> > +
> > +   if (type & H_RPTI_TYPE_PWC) {
> > +           rb = PPC_BIT(53); /* IS = 1 */
> > +           do_tlb_invalidate_pwc(rb, rs);
> > +   }
> > +
> > +   if (!addr && end == -1) { /* PID */
> > +           rb = PPC_BIT(53); /* IS = 1 */
> > +           do_tlb_invalidate_tlb(rb, rs);
> > +   } else { /* EA */
> > +           do {
> > +                   rb = addr & ~(PPC_BITMASK(52, 63));
> > +                   rb |= ap << PPC_BITLSHIFT(58);
> > +                   do_tlb_invalidate_tlb(rb, rs);
> > +                   addr += page_size;
> > +           } while (addr < end);
> > +   }
> > +}
> 
> This is all quite similar to _tlbie_pid in mm/book3s64/radix_tlb.c so:
> 
> 1) Shouldn't do_tlb_invalidate be in that file so we could reuse
> __tlbie_pid and __tlbie_va? There are also the tracepoints in that file
> that we might want to reuse.

Will see how much reuse is possible.

> 
> 2) For my own understanding, don't the "fixups" in _tlbie_pid apply to
> this scenario as well?

Yes, I think, will add fixups.

> > +long kvmhv_h_rpti_nested(struct kvm_vcpu *vcpu, unsigned long lpid,
> > +                    unsigned long type, unsigned long pg_sizes,
> > +                    unsigned long start, unsigned long end)
> > +{
> > +   struct kvm_nested_guest *gp;
> > +   long ret;
> > +   unsigned long psize, ap;
> > +
> > +   /*
> > +    * If L2 lpid isn't valid, we need to return H_PARAMETER.
> > +    * Nested KVM issues a L2 lpid flush call when creating
> > +    * partition table entries for L2. This happens even before
> > +    * the corresponding shadow lpid is created in HV. Until
> > +    * this is fixed, ignore such flush requests.
> 
> >From the text, it seems that you are talking about kvmhv_set_ptbl_entry
> in L1 calling kvmhv_flush_lpid, but I'm not sure. Could you clarify that
> scenario a bit?

Yes this is the scenario which I am talking about here.

> 
> Maybe it would be good to have a more concrete hint of the issue here or
> in the commit message, since you mentioned this is something that needs
> fixing.

Hmm let me see if I can make the comment more verbose/concrete in the
next version.

Thanks for your review.

Regards,
Bharata.

Reply via email to