From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Gavin Shan <gwshan@linux.vnet.ibm.com>
Cc: Wei Yang <weiyang@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org,
Alex Williamson <alex.williamson@redhat.com>,
Paul Mackerras <paulus@samba.org>,
linuxppc-dev@lists.ozlabs.org,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH kernel v10 15/34] powerpc/powernv/ioda/ioda2: Rework TCE invalidation in tce_build()/tce_free()
Date: Thu, 14 May 2015 13:19:38 +1000 [thread overview]
Message-ID: <5554144A.50701@ozlabs.ru> (raw)
In-Reply-To: <20150514004824.GA18437@gwshan>
On 05/14/2015 10:48 AM, Gavin Shan wrote:
> On Tue, May 12, 2015 at 01:39:04AM +1000, Alexey Kardashevskiy wrote:
>> The pnv_pci_ioda_tce_invalidate() helper invalidates TCE cache. It is
>> supposed to be called on IODA1/2 and not called on p5ioc2. It receives
>> start and end host addresses of TCE table.
>>
>> IODA2 actually needs PCI addresses to invalidate the cache. Those
>> can be calculated from host addresses but since we are going
>> to implement multi-level TCE tables, calculating PCI address from
>> a host address might get either tricky or ugly as TCE table remains flat
>> on PCI bus but not in RAM.
>>
>> This moves pnv_pci_ioda_tce_invalidate() from generic pnv_tce_build/
>> pnt_tce_free and defines IODA1/2-specific callbacks which call generic
>> ones and do PHB-model-specific TCE cache invalidation. P5IOC2 keeps
>> using generic callbacks as before.
>>
>> This changes pnv_pci_ioda2_tce_invalidate() to receives TCE index and
>> number of pages which are PCI addresses shifted by IOMMU page shift.
>>
>> No change in behaviour is expected.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>
> Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>
>> ---
>> Changes:
>> v10:
>> * moved before "Switch from iommu_table to new iommu_table_group" as it adds
>> list of groups to iommu_table and tce invalidation depends on it
>>
>> v9:
>> * removed confusing comment from commit log about unintentional calling of
>> pnv_pci_ioda_tce_invalidate()
>> * moved mechanical changes away to "powerpc/iommu: Move tce_xxx callbacks from ppc_md to iommu_table"
>> * fixed bug with broken invalidation in pnv_pci_ioda2_tce_invalidate -
>> @index includes @tbl->it_offset but old code added it anyway which later broke
>> DDW
>> ---
>> arch/powerpc/platforms/powernv/pci-ioda.c | 81 ++++++++++++++++++++++---------
>> arch/powerpc/platforms/powernv/pci.c | 17 ++-----
>> 2 files changed, 61 insertions(+), 37 deletions(-)
>>
>> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
>> index 2924abe..1b43e25 100644
>> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
>> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
>> @@ -1678,18 +1678,19 @@ static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe,
>> }
>> }
>>
>> -static void pnv_pci_ioda1_tce_invalidate(struct pnv_ioda_pe *pe,
>> - struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static void pnv_pci_ioda1_tce_invalidate(struct iommu_table *tbl,
>> + unsigned long index, unsigned long npages, bool rm)
>> {
>> + struct pnv_ioda_pe *pe = tbl->data;
>> __be64 __iomem *invalidate = rm ?
>> (__be64 __iomem *)pe->tce_inval_reg_phys :
>> (__be64 __iomem *)tbl->it_index;
>> unsigned long start, end, inc;
>> const unsigned shift = tbl->it_page_shift;
>>
>> - start = __pa(startp);
>> - end = __pa(endp);
>> + start = __pa(((__be64 *)tbl->it_base) + index - tbl->it_offset);
>> + end = __pa(((__be64 *)tbl->it_base) + index - tbl->it_offset +
>> + npages - 1);
>
> Platform is the only one knowing the TCE table layout and iommu_table_ops->get()
> helps to retrieve TCE entry for the given index. If iommu_table_ops->get() had
> returned the address of the TCE entry, not the content. Here, iommu_table_ops->get()
> can be reused and we hide the platform specific TCE table layout in iommu_table_ops->get()
> backend. However, it's not a big deal and it probably introduces more changes
> than expected. You judge it's worthy to do it or improve it later :-)
This will require a separate patch to convert tce_get() from returning
value to returning address. I could do that, yes. Furthermore there is even
pnv_tce() helper added later in this patchset which can be used for this in
this patch (if I moved that patch earlier). But this would be a bigger
change which is not very much related to what the patch does -
cut-n-pasting invalidate() bits. May be later. The patchset is way too big
already :(
>>
>> /* BML uses this case for p6/p7/galaxy2: Shift addr and put in node */
>> if (tbl->it_busno) {
>> @@ -1725,16 +1726,39 @@ static void pnv_pci_ioda1_tce_invalidate(struct pnv_ioda_pe *pe,
>> */
>> }
>>
>> +static int pnv_ioda1_tce_build(struct iommu_table *tbl, long index,
>> + long npages, unsigned long uaddr,
>> + enum dma_data_direction direction,
>> + struct dma_attrs *attrs)
>> +{
>> + long ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
>> + attrs);
>
> The return value from pnv_tce_build() is "int" :-)
Oops.
>> +
>> + if (!ret && (tbl->it_type & TCE_PCI_SWINV_CREATE))
>> + pnv_pci_ioda1_tce_invalidate(tbl, index, npages, false);
>> +
>> + return ret;
>> +}
>> +
>> +static void pnv_ioda1_tce_free(struct iommu_table *tbl, long index,
>> + long npages)
>> +{
>> + pnv_tce_free(tbl, index, npages);
>> +
>> + if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> + pnv_pci_ioda1_tce_invalidate(tbl, index, npages, false);
>> +}
>> +
>> static struct iommu_table_ops pnv_ioda1_iommu_ops = {
>> - .set = pnv_tce_build,
>> - .clear = pnv_tce_free,
>> + .set = pnv_ioda1_tce_build,
>> + .clear = pnv_ioda1_tce_free,
>> .get = pnv_tce_get,
>> };
>>
>> -static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> - struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static void pnv_pci_ioda2_tce_invalidate(struct iommu_table *tbl,
>> + unsigned long index, unsigned long npages, bool rm)
>> {
>> + struct pnv_ioda_pe *pe = tbl->data;
>> unsigned long start, end, inc;
>> __be64 __iomem *invalidate = rm ?
>> (__be64 __iomem *)pe->tce_inval_reg_phys :
>> @@ -1747,10 +1771,8 @@ static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> end = start;
>>
>> /* Figure out the start, end and step */
>> - inc = tbl->it_offset + (((u64)startp - tbl->it_base) / sizeof(u64));
>> - start |= (inc << shift);
>> - inc = tbl->it_offset + (((u64)endp - tbl->it_base) / sizeof(u64));
>> - end |= (inc << shift);
>> + start |= (index << shift);
>> + end |= ((index + npages - 1) << shift);
>> inc = (0x1ull << shift);
>> mb();
>>
>> @@ -1763,21 +1785,32 @@ static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> }
>> }
>>
>> -void pnv_pci_ioda_tce_invalidate(struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static int pnv_ioda2_tce_build(struct iommu_table *tbl, long index,
>> + long npages, unsigned long uaddr,
>> + enum dma_data_direction direction,
>> + struct dma_attrs *attrs)
>> {
>> - struct pnv_ioda_pe *pe = tbl->data;
>> - struct pnv_phb *phb = pe->phb;
>> + long ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
>> + attrs);
>
> s/long/int
I better make them all long.
>
>>
>> - if (phb->type == PNV_PHB_IODA1)
>> - pnv_pci_ioda1_tce_invalidate(pe, tbl, startp, endp, rm);
>> - else
>> - pnv_pci_ioda2_tce_invalidate(pe, tbl, startp, endp, rm);
>> + if (!ret && (tbl->it_type & TCE_PCI_SWINV_CREATE))
>> + pnv_pci_ioda2_tce_invalidate(tbl, index, npages, false);
>> +
>> + return ret;
>> +}
>> +
>> +static void pnv_ioda2_tce_free(struct iommu_table *tbl, long index,
>> + long npages)
>> +{
>> + pnv_tce_free(tbl, index, npages);
>> +
>> + if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> + pnv_pci_ioda2_tce_invalidate(tbl, index, npages, false);
>> }
>>
>> static struct iommu_table_ops pnv_ioda2_iommu_ops = {
>> - .set = pnv_tce_build,
>> - .clear = pnv_tce_free,
>> + .set = pnv_ioda2_tce_build,
>> + .clear = pnv_ioda2_tce_free,
>> .get = pnv_tce_get,
>> };
>>
>> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
>> index 4c3bbb1..84b4ea4 100644
>> --- a/arch/powerpc/platforms/powernv/pci.c
>> +++ b/arch/powerpc/platforms/powernv/pci.c
>> @@ -577,37 +577,28 @@ int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
>> struct dma_attrs *attrs)
>> {
>> u64 proto_tce = iommu_direction_to_tce_perm(direction);
>> - __be64 *tcep, *tces;
>> + __be64 *tcep;
>> u64 rpn;
>>
>> - tces = tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>> + 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));
>>
>> - /* Some implementations won't cache invalid TCEs and thus may not
>> - * need that flush. We'll probably turn it_type into a bit mask
>> - * of flags if that becomes the case
>> - */
>> - if (tbl->it_type & TCE_PCI_SWINV_CREATE)
>> - pnv_pci_ioda_tce_invalidate(tbl, tces, tcep - 1, false);
>>
>> return 0;
>> }
>>
>> void pnv_tce_free(struct iommu_table *tbl, long index, long npages)
>> {
>> - __be64 *tcep, *tces;
>> + __be64 *tcep;
>>
>> - tces = tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>> + tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>>
>> while (npages--)
>> *(tcep++) = cpu_to_be64(0);
>> -
>> - if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> - pnv_pci_ioda_tce_invalidate(tbl, tces, tcep - 1, false);
>> }
>>
>> unsigned long pnv_tce_get(struct iommu_table *tbl, long index)
>> --
>> 2.4.0.rc3.8.gfb3e7d5
>>
>
--
Alexey
WARNING: multiple messages have this Message-ID (diff)
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Gavin Shan <gwshan@linux.vnet.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org,
David Gibson <david@gibson.dropbear.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Alex Williamson <alex.williamson@redhat.com>,
Wei Yang <weiyang@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH kernel v10 15/34] powerpc/powernv/ioda/ioda2: Rework TCE invalidation in tce_build()/tce_free()
Date: Thu, 14 May 2015 13:19:38 +1000 [thread overview]
Message-ID: <5554144A.50701@ozlabs.ru> (raw)
In-Reply-To: <20150514004824.GA18437@gwshan>
On 05/14/2015 10:48 AM, Gavin Shan wrote:
> On Tue, May 12, 2015 at 01:39:04AM +1000, Alexey Kardashevskiy wrote:
>> The pnv_pci_ioda_tce_invalidate() helper invalidates TCE cache. It is
>> supposed to be called on IODA1/2 and not called on p5ioc2. It receives
>> start and end host addresses of TCE table.
>>
>> IODA2 actually needs PCI addresses to invalidate the cache. Those
>> can be calculated from host addresses but since we are going
>> to implement multi-level TCE tables, calculating PCI address from
>> a host address might get either tricky or ugly as TCE table remains flat
>> on PCI bus but not in RAM.
>>
>> This moves pnv_pci_ioda_tce_invalidate() from generic pnv_tce_build/
>> pnt_tce_free and defines IODA1/2-specific callbacks which call generic
>> ones and do PHB-model-specific TCE cache invalidation. P5IOC2 keeps
>> using generic callbacks as before.
>>
>> This changes pnv_pci_ioda2_tce_invalidate() to receives TCE index and
>> number of pages which are PCI addresses shifted by IOMMU page shift.
>>
>> No change in behaviour is expected.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>
> Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>
>> ---
>> Changes:
>> v10:
>> * moved before "Switch from iommu_table to new iommu_table_group" as it adds
>> list of groups to iommu_table and tce invalidation depends on it
>>
>> v9:
>> * removed confusing comment from commit log about unintentional calling of
>> pnv_pci_ioda_tce_invalidate()
>> * moved mechanical changes away to "powerpc/iommu: Move tce_xxx callbacks from ppc_md to iommu_table"
>> * fixed bug with broken invalidation in pnv_pci_ioda2_tce_invalidate -
>> @index includes @tbl->it_offset but old code added it anyway which later broke
>> DDW
>> ---
>> arch/powerpc/platforms/powernv/pci-ioda.c | 81 ++++++++++++++++++++++---------
>> arch/powerpc/platforms/powernv/pci.c | 17 ++-----
>> 2 files changed, 61 insertions(+), 37 deletions(-)
>>
>> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
>> index 2924abe..1b43e25 100644
>> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
>> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
>> @@ -1678,18 +1678,19 @@ static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe,
>> }
>> }
>>
>> -static void pnv_pci_ioda1_tce_invalidate(struct pnv_ioda_pe *pe,
>> - struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static void pnv_pci_ioda1_tce_invalidate(struct iommu_table *tbl,
>> + unsigned long index, unsigned long npages, bool rm)
>> {
>> + struct pnv_ioda_pe *pe = tbl->data;
>> __be64 __iomem *invalidate = rm ?
>> (__be64 __iomem *)pe->tce_inval_reg_phys :
>> (__be64 __iomem *)tbl->it_index;
>> unsigned long start, end, inc;
>> const unsigned shift = tbl->it_page_shift;
>>
>> - start = __pa(startp);
>> - end = __pa(endp);
>> + start = __pa(((__be64 *)tbl->it_base) + index - tbl->it_offset);
>> + end = __pa(((__be64 *)tbl->it_base) + index - tbl->it_offset +
>> + npages - 1);
>
> Platform is the only one knowing the TCE table layout and iommu_table_ops->get()
> helps to retrieve TCE entry for the given index. If iommu_table_ops->get() had
> returned the address of the TCE entry, not the content. Here, iommu_table_ops->get()
> can be reused and we hide the platform specific TCE table layout in iommu_table_ops->get()
> backend. However, it's not a big deal and it probably introduces more changes
> than expected. You judge it's worthy to do it or improve it later :-)
This will require a separate patch to convert tce_get() from returning
value to returning address. I could do that, yes. Furthermore there is even
pnv_tce() helper added later in this patchset which can be used for this in
this patch (if I moved that patch earlier). But this would be a bigger
change which is not very much related to what the patch does -
cut-n-pasting invalidate() bits. May be later. The patchset is way too big
already :(
>>
>> /* BML uses this case for p6/p7/galaxy2: Shift addr and put in node */
>> if (tbl->it_busno) {
>> @@ -1725,16 +1726,39 @@ static void pnv_pci_ioda1_tce_invalidate(struct pnv_ioda_pe *pe,
>> */
>> }
>>
>> +static int pnv_ioda1_tce_build(struct iommu_table *tbl, long index,
>> + long npages, unsigned long uaddr,
>> + enum dma_data_direction direction,
>> + struct dma_attrs *attrs)
>> +{
>> + long ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
>> + attrs);
>
> The return value from pnv_tce_build() is "int" :-)
Oops.
>> +
>> + if (!ret && (tbl->it_type & TCE_PCI_SWINV_CREATE))
>> + pnv_pci_ioda1_tce_invalidate(tbl, index, npages, false);
>> +
>> + return ret;
>> +}
>> +
>> +static void pnv_ioda1_tce_free(struct iommu_table *tbl, long index,
>> + long npages)
>> +{
>> + pnv_tce_free(tbl, index, npages);
>> +
>> + if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> + pnv_pci_ioda1_tce_invalidate(tbl, index, npages, false);
>> +}
>> +
>> static struct iommu_table_ops pnv_ioda1_iommu_ops = {
>> - .set = pnv_tce_build,
>> - .clear = pnv_tce_free,
>> + .set = pnv_ioda1_tce_build,
>> + .clear = pnv_ioda1_tce_free,
>> .get = pnv_tce_get,
>> };
>>
>> -static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> - struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static void pnv_pci_ioda2_tce_invalidate(struct iommu_table *tbl,
>> + unsigned long index, unsigned long npages, bool rm)
>> {
>> + struct pnv_ioda_pe *pe = tbl->data;
>> unsigned long start, end, inc;
>> __be64 __iomem *invalidate = rm ?
>> (__be64 __iomem *)pe->tce_inval_reg_phys :
>> @@ -1747,10 +1771,8 @@ static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> end = start;
>>
>> /* Figure out the start, end and step */
>> - inc = tbl->it_offset + (((u64)startp - tbl->it_base) / sizeof(u64));
>> - start |= (inc << shift);
>> - inc = tbl->it_offset + (((u64)endp - tbl->it_base) / sizeof(u64));
>> - end |= (inc << shift);
>> + start |= (index << shift);
>> + end |= ((index + npages - 1) << shift);
>> inc = (0x1ull << shift);
>> mb();
>>
>> @@ -1763,21 +1785,32 @@ static void pnv_pci_ioda2_tce_invalidate(struct pnv_ioda_pe *pe,
>> }
>> }
>>
>> -void pnv_pci_ioda_tce_invalidate(struct iommu_table *tbl,
>> - __be64 *startp, __be64 *endp, bool rm)
>> +static int pnv_ioda2_tce_build(struct iommu_table *tbl, long index,
>> + long npages, unsigned long uaddr,
>> + enum dma_data_direction direction,
>> + struct dma_attrs *attrs)
>> {
>> - struct pnv_ioda_pe *pe = tbl->data;
>> - struct pnv_phb *phb = pe->phb;
>> + long ret = pnv_tce_build(tbl, index, npages, uaddr, direction,
>> + attrs);
>
> s/long/int
I better make them all long.
>
>>
>> - if (phb->type == PNV_PHB_IODA1)
>> - pnv_pci_ioda1_tce_invalidate(pe, tbl, startp, endp, rm);
>> - else
>> - pnv_pci_ioda2_tce_invalidate(pe, tbl, startp, endp, rm);
>> + if (!ret && (tbl->it_type & TCE_PCI_SWINV_CREATE))
>> + pnv_pci_ioda2_tce_invalidate(tbl, index, npages, false);
>> +
>> + return ret;
>> +}
>> +
>> +static void pnv_ioda2_tce_free(struct iommu_table *tbl, long index,
>> + long npages)
>> +{
>> + pnv_tce_free(tbl, index, npages);
>> +
>> + if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> + pnv_pci_ioda2_tce_invalidate(tbl, index, npages, false);
>> }
>>
>> static struct iommu_table_ops pnv_ioda2_iommu_ops = {
>> - .set = pnv_tce_build,
>> - .clear = pnv_tce_free,
>> + .set = pnv_ioda2_tce_build,
>> + .clear = pnv_ioda2_tce_free,
>> .get = pnv_tce_get,
>> };
>>
>> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
>> index 4c3bbb1..84b4ea4 100644
>> --- a/arch/powerpc/platforms/powernv/pci.c
>> +++ b/arch/powerpc/platforms/powernv/pci.c
>> @@ -577,37 +577,28 @@ int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
>> struct dma_attrs *attrs)
>> {
>> u64 proto_tce = iommu_direction_to_tce_perm(direction);
>> - __be64 *tcep, *tces;
>> + __be64 *tcep;
>> u64 rpn;
>>
>> - tces = tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>> + 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));
>>
>> - /* Some implementations won't cache invalid TCEs and thus may not
>> - * need that flush. We'll probably turn it_type into a bit mask
>> - * of flags if that becomes the case
>> - */
>> - if (tbl->it_type & TCE_PCI_SWINV_CREATE)
>> - pnv_pci_ioda_tce_invalidate(tbl, tces, tcep - 1, false);
>>
>> return 0;
>> }
>>
>> void pnv_tce_free(struct iommu_table *tbl, long index, long npages)
>> {
>> - __be64 *tcep, *tces;
>> + __be64 *tcep;
>>
>> - tces = tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>> + tcep = ((__be64 *)tbl->it_base) + index - tbl->it_offset;
>>
>> while (npages--)
>> *(tcep++) = cpu_to_be64(0);
>> -
>> - if (tbl->it_type & TCE_PCI_SWINV_FREE)
>> - pnv_pci_ioda_tce_invalidate(tbl, tces, tcep - 1, false);
>> }
>>
>> unsigned long pnv_tce_get(struct iommu_table *tbl, long index)
>> --
>> 2.4.0.rc3.8.gfb3e7d5
>>
>
--
Alexey
next prev parent reply other threads:[~2015-05-14 3:19 UTC|newest]
Thread overview: 163+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-11 15:38 [PATCH kernel v10 00/34] powerpc/iommu/vfio: Enable Dynamic DMA windows Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-11 15:38 ` [PATCH kernel v10 01/34] powerpc/eeh/ioda2: Use device::iommu_group to check IOMMU group Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-12 1:51 ` Gavin Shan
2015-05-12 1:51 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 02/34] powerpc/iommu/powernv: Get rid of set_iommu_table_base_and_group Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 5:18 ` Gavin Shan
2015-05-13 5:18 ` Gavin Shan
2015-05-13 7:26 ` Alexey Kardashevskiy
2015-05-13 7:26 ` Alexey Kardashevskiy
2015-05-11 15:38 ` [PATCH kernel v10 03/34] powerpc/powernv/ioda: Clean up IOMMU group registration Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 5:21 ` Gavin Shan
2015-05-13 5:21 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 04/34] powerpc/iommu: Put IOMMU group explicitly Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 5:27 ` Gavin Shan
2015-05-13 5:27 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 05/34] powerpc/iommu: Always release iommu_table in iommu_free_table() Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 5:33 ` Gavin Shan
2015-05-13 5:33 ` Gavin Shan
2015-05-13 6:30 ` Alexey Kardashevskiy
2015-05-13 6:30 ` Alexey Kardashevskiy
2015-05-13 12:51 ` Thomas Huth
2015-05-13 12:51 ` Thomas Huth
2015-05-13 23:27 ` Gavin Shan
2015-05-13 23:27 ` Gavin Shan
2015-05-14 2:34 ` Alexey Kardashevskiy
2015-05-14 2:53 ` Alex Williamson
2015-05-14 2:53 ` Alex Williamson
2015-05-14 6:29 ` Alexey Kardashevskiy
2015-05-14 6:29 ` Alexey Kardashevskiy
2015-05-11 15:38 ` [PATCH kernel v10 06/34] vfio: powerpc/spapr: Move page pinning from arch code to VFIO IOMMU driver Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 5:58 ` Gavin Shan
2015-05-13 5:58 ` Gavin Shan
2015-05-13 6:32 ` Alexey Kardashevskiy
2015-05-13 6:32 ` Alexey Kardashevskiy
2015-05-11 15:38 ` [PATCH kernel v10 07/34] vfio: powerpc/spapr: Check that IOMMU page is fully contained by system page Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 6:06 ` Gavin Shan
2015-05-13 6:06 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 08/34] vfio: powerpc/spapr: Use it_page_size Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 6:12 ` Gavin Shan
2015-05-13 6:12 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 09/34] vfio: powerpc/spapr: Move locked_vm accounting to helpers Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 6:18 ` Gavin Shan
2015-05-13 6:18 ` Gavin Shan
2015-05-11 15:38 ` [PATCH kernel v10 10/34] vfio: powerpc/spapr: Disable DMA mappings on disabled container Alexey Kardashevskiy
2015-05-11 15:38 ` Alexey Kardashevskiy
2015-05-13 6:20 ` Gavin Shan
2015-05-13 6:20 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 11/34] vfio: powerpc/spapr: Moving pinning/unpinning to helpers Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 6:32 ` Gavin Shan
2015-05-13 6:32 ` Gavin Shan
2015-05-13 7:30 ` Alexey Kardashevskiy
2015-05-13 7:30 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 12/34] vfio: powerpc/spapr: Rework groups attaching Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 23:35 ` Gavin Shan
2015-05-13 23:35 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 13/34] powerpc/powernv: Do not set "read" flag if direction==DMA_NONE Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 0:00 ` Gavin Shan
2015-05-14 0:00 ` Gavin Shan
2015-05-14 2:51 ` Alexey Kardashevskiy
2015-05-14 2:51 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 14/34] powerpc/iommu: Move tce_xxx callbacks from ppc_md to iommu_table Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 0:23 ` Gavin Shan
2015-05-14 0:23 ` Gavin Shan
2015-05-14 3:07 ` Alexey Kardashevskiy
2015-05-14 3:07 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 15/34] powerpc/powernv/ioda/ioda2: Rework TCE invalidation in tce_build()/tce_free() Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 0:48 ` Gavin Shan
2015-05-14 0:48 ` Gavin Shan
2015-05-14 3:19 ` Alexey Kardashevskiy [this message]
2015-05-14 3:19 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 16/34] powerpc/spapr: vfio: Replace iommu_table with iommu_table_group Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 21:30 ` Alex Williamson
2015-05-13 21:30 ` Alex Williamson
2015-05-14 1:21 ` Gavin Shan
2015-05-14 1:21 ` Gavin Shan
2015-05-14 3:31 ` Alexey Kardashevskiy
2015-05-14 3:31 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 17/34] powerpc/spapr: vfio: Switch from iommu_table to new iommu_table_group Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 1:52 ` Gavin Shan
2015-05-14 1:52 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 18/34] vfio: powerpc/spapr/iommu/powernv/ioda2: Rework IOMMU ownership control Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 2:01 ` Gavin Shan
2015-05-14 2:01 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 19/34] powerpc/iommu: Fix IOMMU ownership control functions Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 3:36 ` Gavin Shan
2015-05-14 3:36 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 20/34] powerpc/powernv/ioda2: Move TCE kill register address to PE Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 2:10 ` Gavin Shan
2015-05-14 2:10 ` Gavin Shan
2015-05-14 3:39 ` Alexey Kardashevskiy
2015-05-14 3:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 21/34] powerpc/powernv/ioda2: Add TCE invalidation for all attached groups Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 2:22 ` Gavin Shan
2015-05-14 2:22 ` Gavin Shan
2015-05-14 3:50 ` Alexey Kardashevskiy
2015-05-14 3:50 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 22/34] powerpc/powernv: Implement accessor to TCE entry Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 2:34 ` Gavin Shan
2015-05-14 2:34 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 23/34] powerpc/iommu/powernv: Release replaced TCE Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 15:00 ` Thomas Huth
2015-05-13 15:00 ` Thomas Huth
2015-05-14 3:53 ` Alexey Kardashevskiy
2015-05-14 3:53 ` Alexey Kardashevskiy
2015-05-15 8:09 ` Thomas Huth
2015-05-15 8:09 ` Thomas Huth
2015-05-11 15:39 ` [PATCH kernel v10 24/34] powerpc/powernv/ioda2: Rework iommu_table creation Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 4:14 ` Gavin Shan
2015-05-14 4:14 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 25/34] powerpc/powernv/ioda2: Introduce helpers to allocate TCE pages Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 4:31 ` Gavin Shan
2015-05-14 4:31 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 26/34] powerpc/powernv/ioda2: Introduce pnv_pci_ioda2_set_window Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-14 5:01 ` Gavin Shan
2015-05-14 5:01 ` Gavin Shan
2015-05-11 15:39 ` [PATCH kernel v10 27/34] powerpc/powernv: Implement multilevel TCE tables Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 28/34] vfio: powerpc/spapr: powerpc/powernv/ioda: Define and implement DMA windows API Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 21:30 ` Alex Williamson
2015-05-13 21:30 ` Alex Williamson
2015-05-11 15:39 ` [PATCH kernel v10 29/34] powerpc/powernv/ioda2: Use new helpers to do proper cleanup on PE release Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 30/34] powerpc/iommu/ioda2: Add get_table_size() to calculate the size of future table Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 31/34] vfio: powerpc/spapr: powerpc/powernv/ioda2: Use DMA windows API in ownership control Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 32/34] powerpc/mmu: Add userspace-to-physical addresses translation cache Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 33/34] vfio: powerpc/spapr: Register memory and define IOMMU v2 Alexey Kardashevskiy
2015-05-11 15:39 ` Alexey Kardashevskiy
2015-05-13 21:30 ` Alex Williamson
2015-05-13 21:30 ` Alex Williamson
2015-05-14 6:08 ` Alexey Kardashevskiy
2015-05-14 6:08 ` Alexey Kardashevskiy
2015-05-11 15:39 ` [PATCH kernel v10 34/34] vfio: powerpc/spapr: Support Dynamic DMA windows Alexey Kardashevskiy
2015-05-11 15:39 ` 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=5554144A.50701@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=gwshan@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=paulus@samba.org \
--cc=weiyang@linux.vnet.ibm.com \
/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.