From: Alex Williamson <alex.williamson@redhat.com> To: Alexey Kardashevskiy <aik@ozlabs.ru> Cc: linuxppc-dev@lists.ozlabs.org, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, Michael Ellerman <mpe@ellerman.id.au>, Gavin Shan <gwshan@linux.vnet.ibm.com>, Alexander Graf <agraf@suse.de>, Alexander Gordeev <agordeev@redhat.com>, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 08/24] powerpc/spapr: vfio: Switch from iommu_table to new powerpc_iommu Date: Mon, 02 Feb 2015 17:12:45 -0700 [thread overview] Message-ID: <1422922365.22865.448.camel@redhat.com> (raw) In-Reply-To: <1422523325-1389-9-git-send-email-aik@ozlabs.ru> On Thu, 2015-01-29 at 20:21 +1100, Alexey Kardashevskiy wrote: > Modern IBM POWERPC systems support multiple (currently two) TCE tables > per IOMMU group (a.k.a. PE). This adds a powerpc_iommu container > for TCE tables. Right now just one table is supported. > > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> > --- > arch/powerpc/include/asm/iommu.h | 18 ++-- > arch/powerpc/kernel/eeh.c | 2 +- > arch/powerpc/kernel/iommu.c | 34 ++++---- > arch/powerpc/platforms/powernv/pci-ioda.c | 37 +++++--- > arch/powerpc/platforms/powernv/pci-p5ioc2.c | 16 ++-- > arch/powerpc/platforms/powernv/pci.c | 2 +- > arch/powerpc/platforms/powernv/pci.h | 4 +- > arch/powerpc/platforms/pseries/iommu.c | 9 +- > drivers/vfio/vfio_iommu_spapr_tce.c | 131 ++++++++++++++++++++-------- > 9 files changed, 170 insertions(+), 83 deletions(-) [snip] > diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c > index 29d5708..28909e1 100644 > --- a/drivers/vfio/vfio_iommu_spapr_tce.c > +++ b/drivers/vfio/vfio_iommu_spapr_tce.c > @@ -84,7 +84,7 @@ static void decrement_locked_vm(long npages) > */ > struct tce_container { > struct mutex lock; > - struct iommu_table *tbl; > + struct iommu_group *grp; > bool enabled; > }; > > @@ -104,16 +104,40 @@ static bool tce_check_page_size(struct page *page, unsigned page_shift) > return false; > } > > +static struct iommu_table *spapr_tce_find_table( > + struct tce_container *container, > + phys_addr_t ioba) > +{ > + long i; > + struct iommu_table *ret = NULL; > + struct powerpc_iommu *iommu = iommu_group_get_iommudata(container->grp); > + > + mutex_lock(&container->lock); > + for (i = 0; i < POWERPC_IOMMU_MAX_TABLES; ++i) { > + struct iommu_table *tbl = &iommu->tables[i]; > + unsigned long entry = ioba >> tbl->it_page_shift; > + unsigned long start = tbl->it_offset; > + unsigned long end = start + tbl->it_size; > + > + if ((start <= entry) && (entry < end)) { > + ret = tbl; > + break; > + } > + } > + mutex_unlock(&container->lock); > + > + return ret; > +} > + > static int tce_iommu_enable(struct tce_container *container) > { > int ret = 0; > + struct powerpc_iommu *iommu; > + struct iommu_table *tbl; > > - if (!container->tbl) > + if (!container->grp) > return -ENXIO; > > - if (!current->mm) > - return -ESRCH; /* process exited */ > - > if (container->enabled) > return -EBUSY; > > @@ -142,7 +166,12 @@ static int tce_iommu_enable(struct tce_container *container) > * as this information is only available from KVM and VFIO is > * KVM agnostic. > */ > - ret = try_increment_locked_vm(IOMMU_TABLE_PAGES(container->tbl)); > + iommu = iommu_group_get_iommudata(container->grp); > + if (!iommu) > + return -EFAULT; > + > + tbl = &iommu->tables[0]; There should probably be a comment somewhere documenting that tables[0] is the small window and presumably [1] will be the DDW.
WARNING: multiple messages have this Message-ID (diff)
From: Alex Williamson <alex.williamson@redhat.com> To: Alexey Kardashevskiy <aik@ozlabs.ru> Cc: Alexander Graf <agraf@suse.de>, Gavin Shan <gwshan@linux.vnet.ibm.com>, Alexander Gordeev <agordeev@redhat.com>, Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 08/24] powerpc/spapr: vfio: Switch from iommu_table to new powerpc_iommu Date: Mon, 02 Feb 2015 17:12:45 -0700 [thread overview] Message-ID: <1422922365.22865.448.camel@redhat.com> (raw) In-Reply-To: <1422523325-1389-9-git-send-email-aik@ozlabs.ru> On Thu, 2015-01-29 at 20:21 +1100, Alexey Kardashevskiy wrote: > Modern IBM POWERPC systems support multiple (currently two) TCE tables > per IOMMU group (a.k.a. PE). This adds a powerpc_iommu container > for TCE tables. Right now just one table is supported. > > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> > --- > arch/powerpc/include/asm/iommu.h | 18 ++-- > arch/powerpc/kernel/eeh.c | 2 +- > arch/powerpc/kernel/iommu.c | 34 ++++---- > arch/powerpc/platforms/powernv/pci-ioda.c | 37 +++++--- > arch/powerpc/platforms/powernv/pci-p5ioc2.c | 16 ++-- > arch/powerpc/platforms/powernv/pci.c | 2 +- > arch/powerpc/platforms/powernv/pci.h | 4 +- > arch/powerpc/platforms/pseries/iommu.c | 9 +- > drivers/vfio/vfio_iommu_spapr_tce.c | 131 ++++++++++++++++++++-------- > 9 files changed, 170 insertions(+), 83 deletions(-) [snip] > diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c > index 29d5708..28909e1 100644 > --- a/drivers/vfio/vfio_iommu_spapr_tce.c > +++ b/drivers/vfio/vfio_iommu_spapr_tce.c > @@ -84,7 +84,7 @@ static void decrement_locked_vm(long npages) > */ > struct tce_container { > struct mutex lock; > - struct iommu_table *tbl; > + struct iommu_group *grp; > bool enabled; > }; > > @@ -104,16 +104,40 @@ static bool tce_check_page_size(struct page *page, unsigned page_shift) > return false; > } > > +static struct iommu_table *spapr_tce_find_table( > + struct tce_container *container, > + phys_addr_t ioba) > +{ > + long i; > + struct iommu_table *ret = NULL; > + struct powerpc_iommu *iommu = iommu_group_get_iommudata(container->grp); > + > + mutex_lock(&container->lock); > + for (i = 0; i < POWERPC_IOMMU_MAX_TABLES; ++i) { > + struct iommu_table *tbl = &iommu->tables[i]; > + unsigned long entry = ioba >> tbl->it_page_shift; > + unsigned long start = tbl->it_offset; > + unsigned long end = start + tbl->it_size; > + > + if ((start <= entry) && (entry < end)) { > + ret = tbl; > + break; > + } > + } > + mutex_unlock(&container->lock); > + > + return ret; > +} > + > static int tce_iommu_enable(struct tce_container *container) > { > int ret = 0; > + struct powerpc_iommu *iommu; > + struct iommu_table *tbl; > > - if (!container->tbl) > + if (!container->grp) > return -ENXIO; > > - if (!current->mm) > - return -ESRCH; /* process exited */ > - > if (container->enabled) > return -EBUSY; > > @@ -142,7 +166,12 @@ static int tce_iommu_enable(struct tce_container *container) > * as this information is only available from KVM and VFIO is > * KVM agnostic. > */ > - ret = try_increment_locked_vm(IOMMU_TABLE_PAGES(container->tbl)); > + iommu = iommu_group_get_iommudata(container->grp); > + if (!iommu) > + return -EFAULT; > + > + tbl = &iommu->tables[0]; There should probably be a comment somewhere documenting that tables[0] is the small window and presumably [1] will be the DDW.
next prev parent reply other threads:[~2015-02-03 0:15 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-01-29 9:21 [PATCH v3 00/24] powerpc/iommu/vfio: Enable Dynamic DMA windows Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 01/24] vfio: powerpc/spapr: Move page pinning from arch code to VFIO IOMMU driver Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 02/24] vfio: powerpc/iommu: Check that TCE page size is equal to it_page_size Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-02-02 21:45 ` Alex Williamson 2015-02-02 21:45 ` Alex Williamson 2015-01-29 9:21 ` [PATCH v3 03/24] powerpc/powernv: Do not set "read" flag if direction==DMA_NONE Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 04/24] vfio: powerpc/spapr: Use it_page_size Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 05/24] vfio: powerpc/spapr: Move locked_vm accounting to helpers Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-02-03 0:12 ` Alex Williamson 2015-02-03 0:12 ` Alex Williamson 2015-01-29 9:21 ` [PATCH v3 06/24] powerpc/iommu: Move tce_xxx callbacks from ppc_md to iommu_table Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 07/24] powerpc/iommu: Introduce iommu_table_alloc() helper Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 08/24] powerpc/spapr: vfio: Switch from iommu_table to new powerpc_iommu Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-02-03 0:12 ` Alex Williamson [this message] 2015-02-03 0:12 ` Alex Williamson 2015-02-04 13:32 ` Alexander Graf 2015-02-04 13:32 ` Alexander Graf 2015-02-05 4:58 ` Alexey Kardashevskiy 2015-02-05 4:58 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 09/24] powerpc/iommu: Fix IOMMU ownership control functions Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 10/24] powerpc/powernv/ioda2: Rework IOMMU ownership control Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 11/24] powerpc/powernv/ioda/ioda2: Rework tce_build()/tce_free() Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 12/24] powerpc/iommu/powernv: Release replaced TCE Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-02-04 6:08 ` Paul Mackerras 2015-02-04 6:08 ` Paul Mackerras 2015-02-05 4:57 ` Alexey Kardashevskiy 2015-02-05 4:57 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 13/24] powerpc/pseries/lpar: Enable VFIO Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 14/24] vfio: powerpc/spapr: Register memory Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-02-03 0:11 ` Alex Williamson 2015-02-03 0:11 ` Alex Williamson 2015-02-03 5:51 ` Alexey Kardashevskiy 2015-02-03 5:51 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 15/24] poweppc/powernv/ioda2: Rework iommu_table creation Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 16/24] powerpc/powernv/ioda2: Introduce pnv_pci_ioda2_create_table Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 17/24] powerpc/powernv/ioda2: Introduce pnv_pci_ioda2_set_window Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:21 ` [PATCH v3 18/24] powerpc/iommu: Split iommu_free_table into 2 helpers Alexey Kardashevskiy 2015-01-29 9:21 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 19/24] powerpc/powernv: Implement multilevel TCE tables Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 20/24] powerpc/powernv: Change prototypes to receive iommu Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 21/24] powerpc/powernv/ioda: Define and implement DMA table/window management callbacks Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 22/24] powerpc/iommu: Get rid of ownership helpers Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 23/24] vfio/spapr: Enable multiple groups in a container Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-01-29 9:22 ` [PATCH v3 24/24] vfio: powerpc/spapr: Support Dynamic DMA windows Alexey Kardashevskiy 2015-01-29 9:22 ` Alexey Kardashevskiy 2015-02-03 2:53 ` Alex Williamson 2015-02-03 2:53 ` Alex Williamson
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=1422922365.22865.448.camel@redhat.com \ --to=alex.williamson@redhat.com \ --cc=agordeev@redhat.com \ --cc=agraf@suse.de \ --cc=aik@ozlabs.ru \ --cc=benh@kernel.crashing.org \ --cc=gwshan@linux.vnet.ibm.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mpe@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: linkBe 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.