All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: Michael Ellerman <michael@ellerman.id.au>,
	Paul Mackerras <paulus@samba.org>,
	linuxppc-dev@lists.ozlabs.org,
	Gavin Shan <gwshan@linux.vnet.ibm.com>
Subject: Re: [PATCH v4 11/16] powerpc/powernv: Release replaced TCE
Date: Wed, 06 Aug 2014 16:27:02 +1000	[thread overview]
Message-ID: <1407306422.3073.70.camel@pasglop> (raw)
In-Reply-To: <1406712695-9491-12-git-send-email-aik@ozlabs.ru>

On Wed, 2014-07-30 at 19:31 +1000, Alexey Kardashevskiy wrote:
>  
>  static int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
> -                        unsigned long uaddr, enum dma_data_direction direction,
> +                        unsigned long uaddr, unsigned long *old_tces,
> +                        enum dma_data_direction direction,
>                          struct dma_attrs *attrs, bool rm)
>  {
>         u64 proto_tce;
>         __be64 *tcep, *tces;
>         u64 rpn;
> +       long i;
>  
>         proto_tce = TCE_PCI_READ; // Read allowed
>  
> @@ -587,9 +589,13 @@ static int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
>         tces = tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>         rpn = __pa(uaddr) >> tbl->it_page_shift;
>  
> -       while (npages--)
> -               *(tcep++) = cpu_to_be64(proto_tce |
> -                               (rpn++ << tbl->it_page_shift));
> +       for (i = 0; i < npages; i++) {
> +               unsigned long oldtce = xchg(tcep, cpu_to_be64(proto_tce |
> +                               (rpn++ << tbl->it_page_shift)));
> +               if (old_tces)
> +                       old_tces[i] = (unsigned long) __va(oldtce);
> +               tcep++;
> +       }

xchg() is slow, please keep separate implementation for build and
set_and_get() to avoid the performance loss on normal TCE host
operations.

Cheers,
Ben.

>         pnv_tce_invalidate(tbl, tces, tcep - 1, rm);
>  
> @@ -601,8 +607,18 @@ static int pnv_tce_build_vm(struct iommu_table *tbl, long index, long npages,
>                             enum dma_data_direction direction,
>                             struct dma_attrs *attrs)
>  {
> -       return pnv_tce_build(tbl, index, npages, uaddr, direction, attrs,
> -                       false);
> +       return pnv_tce_build(tbl, index, npages, uaddr, NULL, direction,
> +                       attrs, false);
> +}
> +
> +static int pnv_tce_set_and_get_vm(struct iommu_table *tbl, long index,
> +                                 long npages,
> +                                 unsigned long uaddr, unsigned long *old_tces,
> +                                 enum dma_data_direction direction,
> +                                 struct dma_attrs *attrs)
> +{
> +       return pnv_tce_build(tbl, index, npages, uaddr, old_tces, direction,
> +                       attrs, false);
>  }
>  
>  static void pnv_tce_free(struct iommu_table *tbl, long index, long npages,
> @@ -630,6 +646,7 @@ static unsigned long pnv_tce_get(struct iommu_table *tbl, long index)
>  
>  struct iommu_table_ops pnv_iommu_ops = {
>         .set = pnv_tce_build_vm,
> +       .set_and_get = pnv_tce_set_and_get_vm,
>         .clear = pnv_tce_free_vm,
>         .get = pnv_tce_get,

  parent reply	other threads:[~2014-08-06  6:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30  9:31 [PATCH v4 00/16] powernv: vfio: Add Dynamic DMA windows (DDW) Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 01/16] rcu: Define notrace version of list_for_each_entry_rcu and list_entry_rcu Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 02/16] KVM: PPC: Use RCU for arch.spapr_tce_tables Alexey Kardashevskiy
2014-08-21  5:25   ` Paul Mackerras
2014-07-30  9:31 ` [PATCH v4 03/16] mm: Add helpers for locked_vm Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 04/16] KVM: PPC: Account TCE-containing pages in locked_vm Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 05/16] powerpc/iommu: Fix comments with it_page_shift Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 06/16] powerpc/powernv: Make invalidate() a callback Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 07/16] powerpc/spapr: vfio: Implement spapr_tce_iommu_ops Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 08/16] powerpc/powernv: Convert/move set_bypass() callback to take_ownership() Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 09/16] powerpc/iommu: Fix IOMMU ownership control functions Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 10/16] powerpc: Move tce_xxx callbacks from ppc_md to iommu_table Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 11/16] powerpc/powernv: Release replaced TCE Alexey Kardashevskiy
2014-08-06  6:25   ` Benjamin Herrenschmidt
2014-08-06  6:27   ` Benjamin Herrenschmidt [this message]
2014-08-06  6:27   ` Benjamin Herrenschmidt
2014-07-30  9:31 ` [PATCH v4 12/16] powerpc/pseries/lpar: Enable VFIO Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 13/16] powerpc/powernv: Implement Dynamic DMA windows (DDW) for IODA Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 14/16] vfio: powerpc/spapr: Reuse locked_vm accounting helpers Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 15/16] vfio: powerpc/spapr: Use it_page_size Alexey Kardashevskiy
2014-07-30  9:31 ` [PATCH v4 16/16] vfio: powerpc/spapr: Enable Dynamic DMA windows Alexey Kardashevskiy
2014-07-30  9:36   ` Alexey Kardashevskiy

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=1407306422.3073.70.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=aik@ozlabs.ru \
    --cc=gwshan@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=michael@ellerman.id.au \
    --cc=paulus@samba.org \
    /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.