Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1487369
| From | Magnus Damm <magnus.damm@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v5 03/07] iommu/ipmmu-vmsa: Break out utlb parsing code |
| Date | 2016-09-20 16:00 +0200 |
| Message-ID | <sjtKy-3DJ-31@gated-at.bofh.it> (permalink) |
| References | <sjtKy-3DJ-13@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
From: Magnus Damm <damm+renesas@opensource.se>
Break out the utlb parsing code and dev_data allocation into a
separate function. This is preparation for future code sharing.
Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
---
Changes since V4:
- Dropped hunk with fix to apply on top of:
b1e2afc iommu/ipmmu-vmsa: Fix wrong error handle of ipmmu_add_device
Changes since V3:
- Initialize "mmu" to NULL, check before accessing
- Removed group parameter from ipmmu_init_platform_device()
Changes since V2:
- Included this new patch from the following series:
[PATCH 00/04] iommu/ipmmu-vmsa: IPMMU CONFIG_IOMMU_DMA update
- Reworked code to fit on top on previous two patches in current series.
drivers/iommu/ipmmu-vmsa.c | 58 ++++++++++++++++++++++++++++----------------
1 file changed, 37 insertions(+), 21 deletions(-)
--- 0006/drivers/iommu/ipmmu-vmsa.c
+++ work/drivers/iommu/ipmmu-vmsa.c 2016-09-20 21:49:34.580607110 +0900
@@ -647,22 +647,15 @@ static int ipmmu_find_utlbs(struct ipmmu
return 0;
}
-static int ipmmu_add_device(struct device *dev)
+static int ipmmu_init_platform_device(struct device *dev)
{
struct ipmmu_vmsa_archdata *archdata;
struct ipmmu_vmsa_device *mmu;
- struct iommu_group *group = NULL;
unsigned int *utlbs;
unsigned int i;
int num_utlbs;
int ret = -ENODEV;
- if (dev->archdata.iommu) {
- dev_warn(dev, "IOMMU driver already assigned to device %s\n",
- dev_name(dev));
- return -EINVAL;
- }
-
/* Find the master corresponding to the device. */
num_utlbs = of_count_phandle_with_args(dev->of_node, "iommus",
@@ -699,6 +692,36 @@ static int ipmmu_add_device(struct devic
}
}
+ archdata = kzalloc(sizeof(*archdata), GFP_KERNEL);
+ if (!archdata) {
+ ret = -ENOMEM;
+ goto error;
+ }
+
+ archdata->mmu = mmu;
+ archdata->utlbs = utlbs;
+ archdata->num_utlbs = num_utlbs;
+ dev->archdata.iommu = archdata;
+ return 0;
+
+error:
+ kfree(utlbs);
+ return ret;
+}
+
+static int ipmmu_add_device(struct device *dev)
+{
+ struct ipmmu_vmsa_archdata *archdata;
+ struct ipmmu_vmsa_device *mmu = NULL;
+ struct iommu_group *group;
+ int ret;
+
+ if (dev->archdata.iommu) {
+ dev_warn(dev, "IOMMU driver already assigned to device %s\n",
+ dev_name(dev));
+ return -EINVAL;
+ }
+
/* Create a device group and add the device to it. */
group = iommu_group_alloc();
if (IS_ERR(group)) {
@@ -716,16 +739,9 @@ static int ipmmu_add_device(struct devic
goto error;
}
- archdata = kzalloc(sizeof(*archdata), GFP_KERNEL);
- if (!archdata) {
- ret = -ENOMEM;
+ ret = ipmmu_init_platform_device(dev);
+ if (ret < 0)
goto error;
- }
-
- archdata->mmu = mmu;
- archdata->utlbs = utlbs;
- archdata->num_utlbs = num_utlbs;
- dev->archdata.iommu = archdata;
/*
* Create the ARM mapping, used by the ARM DMA mapping core to allocate
@@ -736,6 +752,8 @@ static int ipmmu_add_device(struct devic
* - Make the mapping size configurable ? We currently use a 2GB mapping
* at a 1GB offset to ensure that NULL VAs will fault.
*/
+ archdata = dev->archdata.iommu;
+ mmu = archdata->mmu;
if (!mmu->mapping) {
struct dma_iommu_mapping *mapping;
@@ -760,10 +778,8 @@ static int ipmmu_add_device(struct devic
return 0;
error:
- arm_iommu_release_mapping(mmu->mapping);
-
- kfree(dev->archdata.iommu);
- kfree(utlbs);
+ if (mmu)
+ arm_iommu_release_mapping(mmu->mapping);
dev->archdata.iommu = NULL;
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v5 00/07] iommu/ipmmu-vmsa: IPMMU multi-arch update V5 Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 [PATCH v5 06/07] iommu/ipmmu-vmsa: ARM and ARM64 archdata access Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 [PATCH v5 02/07] iommu/ipmmu-vmsa: Rework interrupt code and use bitmap for context Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 [PATCH v5 04/07] iommu/ipmmu-vmsa: Break out domain allocation code Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 [PATCH v5 03/07] iommu/ipmmu-vmsa: Break out utlb parsing code Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 [PATCH v5 01/07] iommu/ipmmu-vmsa: Remove platform data handling Magnus Damm <magnus.damm@gmail.com> - 2016-09-20 16:00 +0200 Re: [PATCH v5 00/07] iommu/ipmmu-vmsa: IPMMU multi-arch update V5 Joerg Roedel <joro@8bytes.org> - 2016-09-22 16:50 +0200
csiph-web