All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
To: Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
Cc: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Shaik Ameer Basha
	<shaik.ameer-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Joonyoung Shim
	<jy0922.shim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Inki Dae <inki.dae-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Seung-Woo Kim
	<sw0312.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	Tomasz Figa <tomasz.figa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	Kukjin Kim <kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Laurent Pinchart
	<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
	Kyungmin Park
	<kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Javier Martinez Canillas
	<javier-0uQlZySMnqxg9hUCZPvPmw@public.gmane.org>,
	Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	David Wodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH v6 08/25] iommu: exynos: refactor function parameters to simplify code
Date: Mon, 18 May 2015 14:58:14 +0200	[thread overview]
Message-ID: <5559E1E6.8090407@samsung.com> (raw)
In-Reply-To: <20150510222712.a955a6d326698ba5a09c6fe7-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>

Hello,

On 2015-05-10 15:27, Cho KyongHo wrote:
> On Mon, 04 May 2015 10:16:03 +0200 Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote:
>
>> This patch simplifies the code by:
>> - refactoring function parameters from struct device pointer to direct
>>    pointer to struct sysmmu drvdata
>> - moving list_head enteries from struct exynos_iommu_owner directly to
>>    struct sysmmu_drvdata
>>
>> Signed-off-by: Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> ---
>>   drivers/iommu/exynos-iommu.c | 93 ++++++++++++++++++++++----------------------
>>   1 file changed, 46 insertions(+), 47 deletions(-)
>>
>> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
>> index c307c400613c..0c23b69022cd 100644
>> --- a/drivers/iommu/exynos-iommu.c
>> +++ b/drivers/iommu/exynos-iommu.c
>> @@ -186,8 +186,6 @@ static char *sysmmu_fault_name[SYSMMU_FAULTS_NUM] = {
>>   
>>   /* attached to dev.archdata.iommu of the master device */
>>   struct exynos_iommu_owner {
>> -	struct list_head client; /* entry of exynos_iommu_domain.clients */
>> -	struct device *dev;
>>   	struct device *sysmmu;
>>   };
>>   
>> @@ -209,6 +207,7 @@ struct sysmmu_drvdata {
>>   	int activations;
>>   	spinlock_t lock;
>>   	struct iommu_domain *domain;
>> +	struct list_head domain_node;
>>   	phys_addr_t pgtable;
>>   	int version;
>>   };
>> @@ -514,12 +513,10 @@ static void __sysmmu_tlb_invalidate_flpdcache(struct sysmmu_drvdata *data,
>>   		__raw_writel(iova | 0x1, data->sfrbase + REG_MMU_FLUSH_ENTRY);
>>   }
>>   
>> -static void sysmmu_tlb_invalidate_flpdcache(struct device *dev,
>> +static void sysmmu_tlb_invalidate_flpdcache(struct sysmmu_drvdata *data,
>>   					    sysmmu_iova_t iova)
>>   {
>>   	unsigned long flags;
>> -	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>> -	struct sysmmu_drvdata *data = dev_get_drvdata(owner->sysmmu);
>>   
>>   	if (!IS_ERR(data->clk_master))
>>   		clk_enable(data->clk_master);
>> @@ -533,14 +530,10 @@ static void sysmmu_tlb_invalidate_flpdcache(struct device *dev,
>>   		clk_disable(data->clk_master);
>>   }
>>   
>> -static void sysmmu_tlb_invalidate_entry(struct device *dev, sysmmu_iova_t iova,
>> -					size_t size)
>> +static void sysmmu_tlb_invalidate_entry(struct sysmmu_drvdata *data,
>> +					sysmmu_iova_t iova, size_t size)
>>   {
>> -	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>>   	unsigned long flags;
>> -	struct sysmmu_drvdata *data;
>> -
>> -	data = dev_get_drvdata(owner->sysmmu);
>>   
>>   	spin_lock_irqsave(&data->lock, flags);
>>   	if (is_sysmmu_active(data)) {
>> @@ -570,8 +563,8 @@ static void sysmmu_tlb_invalidate_entry(struct device *dev, sysmmu_iova_t iova,
>>   		if (!IS_ERR(data->clk_master))
>>   			clk_disable(data->clk_master);
>>   	} else {
>> -		dev_dbg(dev, "disabled. Skipping TLB invalidation @ %#x\n",
>> -			iova);
>> +		dev_dbg(data->master,
>> +			"disabled. Skipping TLB invalidation @ %#x\n", iova);
>>   	}
>>   	spin_unlock_irqrestore(&data->lock, flags);
>>   }
>> @@ -711,7 +704,7 @@ err_pgtable:
>>   static void exynos_iommu_domain_free(struct iommu_domain *domain)
>>   {
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>> -	struct exynos_iommu_owner *owner;
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>>   	int i;
>>   
>> @@ -719,14 +712,12 @@ static void exynos_iommu_domain_free(struct iommu_domain *domain)
>>   
>>   	spin_lock_irqsave(&priv->lock, flags);
>>   
>> -	list_for_each_entry(owner, &priv->clients, client) {
>> -		while (!exynos_sysmmu_disable(owner->dev))
>> -			; /* until System MMU is actually disabled */
>> +	list_for_each_entry(data, &priv->clients, domain_node) {
> Use list_for_each_entry_safe() or you will get panic.

Right.

>
>> +		if (__sysmmu_disable(data))
>> +			data->master = NULL;
>> +		list_del_init(&data->domain_node);
>>   	}
>>   
>> -	while (!list_empty(&priv->clients))
>> -		list_del_init(priv->clients.next);
>> -
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   
>>   	for (i = 0; i < NUM_LV1ENTRIES; i++)
>> @@ -744,20 +735,26 @@ static int exynos_iommu_attach_device(struct iommu_domain *domain,
>>   {
>>   	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>> +	struct sysmmu_drvdata *data;
>>   	phys_addr_t pagetable = virt_to_phys(priv->pgtable);
>>   	unsigned long flags;
>> -	int ret;
>> +	int ret = -ENODEV;
>>   
>> -	spin_lock_irqsave(&priv->lock, flags);
>> +	if (!has_sysmmu(dev))
>> +		return -ENODEV;
>>   
>> -	ret = __exynos_sysmmu_enable(dev, pagetable, domain);
>> -	if (ret == 0) {
>> -		list_add_tail(&owner->client, &priv->clients);
>> -		owner->domain = domain;
>> +	data = dev_get_drvdata(owner->sysmmu);
>> +	if (data) {
> Is there a case that a probed System MMU without driver data?

It is better to have one more safety check than to debug strange issues 
later in
the future.

>
>> +		ret = __sysmmu_enable(data, pagetable, domain);
>> +		if (ret >= 0) {
>> +			data->master = dev;
>> +
>> +			spin_lock_irqsave(&priv->lock, flags);
>> +			list_add_tail(&data->domain_node, &priv->clients);
>> +			spin_unlock_irqrestore(&priv->lock, flags);
>> +		}
>>   	}
>>   
>> -	spin_unlock_irqrestore(&priv->lock, flags);
>> -
>>   	if (ret < 0) {
>>   		dev_err(dev, "%s: Failed to attach IOMMU with pgtable %pa\n",
>>   					__func__, &pagetable);
>> @@ -773,26 +770,29 @@ static int exynos_iommu_attach_device(struct iommu_domain *domain,
>>   static void exynos_iommu_detach_device(struct iommu_domain *domain,
>>   				    struct device *dev)
>>   {
>> -	struct exynos_iommu_owner *owner;
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>>   	phys_addr_t pagetable = virt_to_phys(priv->pgtable);
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>> +	bool found = false;
>>   
>> -	spin_lock_irqsave(&priv->lock, flags);
>> +	if (!has_sysmmu(dev))
>> +		return;
>>   
>> -	list_for_each_entry(owner, &priv->clients, client) {
>> -		if (owner == dev->archdata.iommu) {
>> -			if (exynos_sysmmu_disable(dev)) {
>> -				list_del_init(&owner->client);
>> -				owner->domain = NULL;
>> +	spin_lock_irqsave(&priv->lock, flags);
>> +	list_for_each_entry(data, &priv->clients, domain_node) {
>> +		if (data->master == dev) {
>> +			if (__sysmmu_disable(data)) {
>> +				data->master = NULL;
>> +				list_del_init(&data->domain_node);
>>   			}
>> +			found = true;
>>   			break;
>>   		}
>>   	}
>> -
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   
>> -	if (owner == dev->archdata.iommu)
>> +	if (found)
>>   		dev_dbg(dev, "%s: Detached IOMMU with pgtable %pa\n",
>>   					__func__, &pagetable);
>>   	else
>> @@ -839,12 +839,11 @@ static sysmmu_pte_t *alloc_lv2entry(struct exynos_iommu_domain *priv,
>>   		 * not currently mapped.
>>   		 */
>>   		if (need_flush_flpd_cache) {
>> -			struct exynos_iommu_owner *owner;
>> +			struct sysmmu_drvdata *data;
>>   
>>   			spin_lock(&priv->lock);
>> -			list_for_each_entry(owner, &priv->clients, client)
>> -				sysmmu_tlb_invalidate_flpdcache(
>> -							owner->dev, iova);
>> +			list_for_each_entry(data, &priv->clients, domain_node)
>> +				sysmmu_tlb_invalidate_flpdcache(data, iova);
>>   			spin_unlock(&priv->lock);
>>   		}
>>   	}
>> @@ -879,13 +878,13 @@ static int lv1set_section(struct exynos_iommu_domain *priv,
>>   
>>   	spin_lock(&priv->lock);
>>   	if (lv1ent_page_zero(sent)) {
>> -		struct exynos_iommu_owner *owner;
>> +		struct sysmmu_drvdata *data;
>>   		/*
>>   		 * Flushing FLPD cache in System MMU v3.3 that may cache a FLPD
>>   		 * entry by speculative prefetch of SLPD which has no mapping.
>>   		 */
>> -		list_for_each_entry(owner, &priv->clients, client)
>> -			sysmmu_tlb_invalidate_flpdcache(owner->dev, iova);
>> +		list_for_each_entry(data, &priv->clients, domain_node)
>> +			sysmmu_tlb_invalidate_flpdcache(data, iova);
>>   	}
>>   	spin_unlock(&priv->lock);
>>   
>> @@ -990,13 +989,13 @@ static int exynos_iommu_map(struct iommu_domain *domain, unsigned long l_iova,
>>   static void exynos_iommu_tlb_invalidate_entry(struct exynos_iommu_domain *priv,
>>   						sysmmu_iova_t iova, size_t size)
>>   {
>> -	struct exynos_iommu_owner *owner;
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>>   
>>   	spin_lock_irqsave(&priv->lock, flags);
>>   
>> -	list_for_each_entry(owner, &priv->clients, client)
>> -		sysmmu_tlb_invalidate_entry(owner->dev, iova, size);
>> +	list_for_each_entry(data, &priv->clients, domain_node)
>> +		sysmmu_tlb_invalidate_entry(data, iova, size);
>>   
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   }
>> -- 
>> 1.9.2
>>
>

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

WARNING: multiple messages have this Message-ID (diff)
From: m.szyprowski@samsung.com (Marek Szyprowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 08/25] iommu: exynos: refactor function parameters to simplify code
Date: Mon, 18 May 2015 14:58:14 +0200	[thread overview]
Message-ID: <5559E1E6.8090407@samsung.com> (raw)
In-Reply-To: <20150510222712.a955a6d326698ba5a09c6fe7@samsung.com>

Hello,

On 2015-05-10 15:27, Cho KyongHo wrote:
> On Mon, 04 May 2015 10:16:03 +0200 Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
>> This patch simplifies the code by:
>> - refactoring function parameters from struct device pointer to direct
>>    pointer to struct sysmmu drvdata
>> - moving list_head enteries from struct exynos_iommu_owner directly to
>>    struct sysmmu_drvdata
>>
>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>> ---
>>   drivers/iommu/exynos-iommu.c | 93 ++++++++++++++++++++++----------------------
>>   1 file changed, 46 insertions(+), 47 deletions(-)
>>
>> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
>> index c307c400613c..0c23b69022cd 100644
>> --- a/drivers/iommu/exynos-iommu.c
>> +++ b/drivers/iommu/exynos-iommu.c
>> @@ -186,8 +186,6 @@ static char *sysmmu_fault_name[SYSMMU_FAULTS_NUM] = {
>>   
>>   /* attached to dev.archdata.iommu of the master device */
>>   struct exynos_iommu_owner {
>> -	struct list_head client; /* entry of exynos_iommu_domain.clients */
>> -	struct device *dev;
>>   	struct device *sysmmu;
>>   };
>>   
>> @@ -209,6 +207,7 @@ struct sysmmu_drvdata {
>>   	int activations;
>>   	spinlock_t lock;
>>   	struct iommu_domain *domain;
>> +	struct list_head domain_node;
>>   	phys_addr_t pgtable;
>>   	int version;
>>   };
>> @@ -514,12 +513,10 @@ static void __sysmmu_tlb_invalidate_flpdcache(struct sysmmu_drvdata *data,
>>   		__raw_writel(iova | 0x1, data->sfrbase + REG_MMU_FLUSH_ENTRY);
>>   }
>>   
>> -static void sysmmu_tlb_invalidate_flpdcache(struct device *dev,
>> +static void sysmmu_tlb_invalidate_flpdcache(struct sysmmu_drvdata *data,
>>   					    sysmmu_iova_t iova)
>>   {
>>   	unsigned long flags;
>> -	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>> -	struct sysmmu_drvdata *data = dev_get_drvdata(owner->sysmmu);
>>   
>>   	if (!IS_ERR(data->clk_master))
>>   		clk_enable(data->clk_master);
>> @@ -533,14 +530,10 @@ static void sysmmu_tlb_invalidate_flpdcache(struct device *dev,
>>   		clk_disable(data->clk_master);
>>   }
>>   
>> -static void sysmmu_tlb_invalidate_entry(struct device *dev, sysmmu_iova_t iova,
>> -					size_t size)
>> +static void sysmmu_tlb_invalidate_entry(struct sysmmu_drvdata *data,
>> +					sysmmu_iova_t iova, size_t size)
>>   {
>> -	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>>   	unsigned long flags;
>> -	struct sysmmu_drvdata *data;
>> -
>> -	data = dev_get_drvdata(owner->sysmmu);
>>   
>>   	spin_lock_irqsave(&data->lock, flags);
>>   	if (is_sysmmu_active(data)) {
>> @@ -570,8 +563,8 @@ static void sysmmu_tlb_invalidate_entry(struct device *dev, sysmmu_iova_t iova,
>>   		if (!IS_ERR(data->clk_master))
>>   			clk_disable(data->clk_master);
>>   	} else {
>> -		dev_dbg(dev, "disabled. Skipping TLB invalidation @ %#x\n",
>> -			iova);
>> +		dev_dbg(data->master,
>> +			"disabled. Skipping TLB invalidation @ %#x\n", iova);
>>   	}
>>   	spin_unlock_irqrestore(&data->lock, flags);
>>   }
>> @@ -711,7 +704,7 @@ err_pgtable:
>>   static void exynos_iommu_domain_free(struct iommu_domain *domain)
>>   {
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>> -	struct exynos_iommu_owner *owner;
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>>   	int i;
>>   
>> @@ -719,14 +712,12 @@ static void exynos_iommu_domain_free(struct iommu_domain *domain)
>>   
>>   	spin_lock_irqsave(&priv->lock, flags);
>>   
>> -	list_for_each_entry(owner, &priv->clients, client) {
>> -		while (!exynos_sysmmu_disable(owner->dev))
>> -			; /* until System MMU is actually disabled */
>> +	list_for_each_entry(data, &priv->clients, domain_node) {
> Use list_for_each_entry_safe() or you will get panic.

Right.

>
>> +		if (__sysmmu_disable(data))
>> +			data->master = NULL;
>> +		list_del_init(&data->domain_node);
>>   	}
>>   
>> -	while (!list_empty(&priv->clients))
>> -		list_del_init(priv->clients.next);
>> -
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   
>>   	for (i = 0; i < NUM_LV1ENTRIES; i++)
>> @@ -744,20 +735,26 @@ static int exynos_iommu_attach_device(struct iommu_domain *domain,
>>   {
>>   	struct exynos_iommu_owner *owner = dev->archdata.iommu;
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>> +	struct sysmmu_drvdata *data;
>>   	phys_addr_t pagetable = virt_to_phys(priv->pgtable);
>>   	unsigned long flags;
>> -	int ret;
>> +	int ret = -ENODEV;
>>   
>> -	spin_lock_irqsave(&priv->lock, flags);
>> +	if (!has_sysmmu(dev))
>> +		return -ENODEV;
>>   
>> -	ret = __exynos_sysmmu_enable(dev, pagetable, domain);
>> -	if (ret == 0) {
>> -		list_add_tail(&owner->client, &priv->clients);
>> -		owner->domain = domain;
>> +	data = dev_get_drvdata(owner->sysmmu);
>> +	if (data) {
> Is there a case that a probed System MMU without driver data?

It is better to have one more safety check than to debug strange issues 
later in
the future.

>
>> +		ret = __sysmmu_enable(data, pagetable, domain);
>> +		if (ret >= 0) {
>> +			data->master = dev;
>> +
>> +			spin_lock_irqsave(&priv->lock, flags);
>> +			list_add_tail(&data->domain_node, &priv->clients);
>> +			spin_unlock_irqrestore(&priv->lock, flags);
>> +		}
>>   	}
>>   
>> -	spin_unlock_irqrestore(&priv->lock, flags);
>> -
>>   	if (ret < 0) {
>>   		dev_err(dev, "%s: Failed to attach IOMMU with pgtable %pa\n",
>>   					__func__, &pagetable);
>> @@ -773,26 +770,29 @@ static int exynos_iommu_attach_device(struct iommu_domain *domain,
>>   static void exynos_iommu_detach_device(struct iommu_domain *domain,
>>   				    struct device *dev)
>>   {
>> -	struct exynos_iommu_owner *owner;
>>   	struct exynos_iommu_domain *priv = to_exynos_domain(domain);
>>   	phys_addr_t pagetable = virt_to_phys(priv->pgtable);
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>> +	bool found = false;
>>   
>> -	spin_lock_irqsave(&priv->lock, flags);
>> +	if (!has_sysmmu(dev))
>> +		return;
>>   
>> -	list_for_each_entry(owner, &priv->clients, client) {
>> -		if (owner == dev->archdata.iommu) {
>> -			if (exynos_sysmmu_disable(dev)) {
>> -				list_del_init(&owner->client);
>> -				owner->domain = NULL;
>> +	spin_lock_irqsave(&priv->lock, flags);
>> +	list_for_each_entry(data, &priv->clients, domain_node) {
>> +		if (data->master == dev) {
>> +			if (__sysmmu_disable(data)) {
>> +				data->master = NULL;
>> +				list_del_init(&data->domain_node);
>>   			}
>> +			found = true;
>>   			break;
>>   		}
>>   	}
>> -
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   
>> -	if (owner == dev->archdata.iommu)
>> +	if (found)
>>   		dev_dbg(dev, "%s: Detached IOMMU with pgtable %pa\n",
>>   					__func__, &pagetable);
>>   	else
>> @@ -839,12 +839,11 @@ static sysmmu_pte_t *alloc_lv2entry(struct exynos_iommu_domain *priv,
>>   		 * not currently mapped.
>>   		 */
>>   		if (need_flush_flpd_cache) {
>> -			struct exynos_iommu_owner *owner;
>> +			struct sysmmu_drvdata *data;
>>   
>>   			spin_lock(&priv->lock);
>> -			list_for_each_entry(owner, &priv->clients, client)
>> -				sysmmu_tlb_invalidate_flpdcache(
>> -							owner->dev, iova);
>> +			list_for_each_entry(data, &priv->clients, domain_node)
>> +				sysmmu_tlb_invalidate_flpdcache(data, iova);
>>   			spin_unlock(&priv->lock);
>>   		}
>>   	}
>> @@ -879,13 +878,13 @@ static int lv1set_section(struct exynos_iommu_domain *priv,
>>   
>>   	spin_lock(&priv->lock);
>>   	if (lv1ent_page_zero(sent)) {
>> -		struct exynos_iommu_owner *owner;
>> +		struct sysmmu_drvdata *data;
>>   		/*
>>   		 * Flushing FLPD cache in System MMU v3.3 that may cache a FLPD
>>   		 * entry by speculative prefetch of SLPD which has no mapping.
>>   		 */
>> -		list_for_each_entry(owner, &priv->clients, client)
>> -			sysmmu_tlb_invalidate_flpdcache(owner->dev, iova);
>> +		list_for_each_entry(data, &priv->clients, domain_node)
>> +			sysmmu_tlb_invalidate_flpdcache(data, iova);
>>   	}
>>   	spin_unlock(&priv->lock);
>>   
>> @@ -990,13 +989,13 @@ static int exynos_iommu_map(struct iommu_domain *domain, unsigned long l_iova,
>>   static void exynos_iommu_tlb_invalidate_entry(struct exynos_iommu_domain *priv,
>>   						sysmmu_iova_t iova, size_t size)
>>   {
>> -	struct exynos_iommu_owner *owner;
>> +	struct sysmmu_drvdata *data;
>>   	unsigned long flags;
>>   
>>   	spin_lock_irqsave(&priv->lock, flags);
>>   
>> -	list_for_each_entry(owner, &priv->clients, client)
>> -		sysmmu_tlb_invalidate_entry(owner->dev, iova, size);
>> +	list_for_each_entry(data, &priv->clients, domain_node)
>> +		sysmmu_tlb_invalidate_entry(data, iova, size);
>>   
>>   	spin_unlock_irqrestore(&priv->lock, flags);
>>   }
>> -- 
>> 1.9.2
>>
>

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

  parent reply	other threads:[~2015-05-18 12:58 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-04  8:15 [PATCH v6 00/25] Exynos SYSMMU (IOMMU) integration with DT and DMA-mapping subsystem Marek Szyprowski
2015-05-04  8:15 ` Marek Szyprowski
2015-05-04  8:15 ` [PATCH v6 02/25] arm: exynos: pm_domains: register power domain driver from core_initcall Marek Szyprowski
2015-05-04  8:15   ` Marek Szyprowski
2015-05-04  8:15 ` [PATCH v6 03/25] drm/exynos: iommu: detach from default dma-mapping domain on init Marek Szyprowski
2015-05-04  8:15   ` Marek Szyprowski
2015-05-04  8:15 ` [PATCH v6 04/25] drm/exynos: fimd: ensure proper hw state in fimd_clear_channel() Marek Szyprowski
2015-05-04  8:15   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 05/25] iommu: exynos: don't read version register on every tlb operation Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-10 12:59   ` Cho KyongHo
2015-05-10 12:59     ` Cho KyongHo
2015-05-04  8:16 ` [PATCH v6 07/25] iommu: exynos: remove useless spinlock Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 08/25] iommu: exynos: refactor function parameters to simplify code Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
     [not found]   ` <1430727380-10912-9-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-05 14:52     ` Joerg Roedel
2015-05-05 14:52       ` Joerg Roedel
2015-05-10 13:27     ` Cho KyongHo
2015-05-10 13:27       ` Cho KyongHo
     [not found]       ` <20150510222712.a955a6d326698ba5a09c6fe7-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-18 12:58         ` Marek Szyprowski [this message]
2015-05-18 12:58           ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 09/25] iommu: exynos: remove unused functions, part 2 Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
     [not found]   ` <1430727380-10912-10-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-05 14:53     ` Joerg Roedel
2015-05-05 14:53       ` Joerg Roedel
2015-05-04  8:16 ` [PATCH v6 10/25] iommu: exynos: remove useless device_add/remove callbacks Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
     [not found]   ` <1430727380-10912-11-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-05 14:55     ` Joerg Roedel
2015-05-05 14:55       ` Joerg Roedel
     [not found]       ` <20150505145538.GL15736-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-05-18 12:09         ` Marek Szyprowski
2015-05-18 12:09           ` Marek Szyprowski
2015-05-18 17:04           ` Joerg Roedel
2015-05-18 17:04             ` Joerg Roedel
     [not found]             ` <20150518170430.GK20611-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-05-18 19:37               ` Laurent Pinchart
2015-05-18 19:37                 ` Laurent Pinchart
2015-05-04  8:16 ` [PATCH v6 11/25] iommu: exynos: add support for binding more than one sysmmu to master device Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-10 13:34   ` Cho KyongHo
2015-05-10 13:34     ` Cho KyongHo
     [not found]     ` <20150510223437.b651f6d2f3f0ead49eb72488-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-18 13:03       ` Marek Szyprowski
2015-05-18 13:03         ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 12/25] iommu: exynos: add support for runtime_pm Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-10 13:38   ` Cho KyongHo
2015-05-10 13:38     ` Cho KyongHo
2015-05-18 12:25     ` Marek Szyprowski
2015-05-18 12:25       ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 13/25] iommu: exynos: rename variables to reflect their purpose Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 14/25] iommu: exynos: use struct exynos_iommu_domain in internal structures Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 15/25] iommu: exynos: document " Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
     [not found]   ` <1430727380-10912-16-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-05 15:00     ` Joerg Roedel
2015-05-05 15:00       ` Joerg Roedel
2015-05-04  8:16 ` [PATCH v6 16/25] iommu: exynos: remove excessive includes and sort others alphabetically Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 17/25] iommu: exynos: init from dt-specific callback instead of initcall Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 18/25] iommu: exynos: add callback for initializing devices from device tree Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 19/25] iommu: exynos: remove unneeded code Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-04  8:16 ` [PATCH v6 20/25] ARM: dts: exynos4: add sysmmu nodes Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-05  4:08   ` Krzysztof Kozłowski
2015-05-05  4:08     ` Krzysztof Kozłowski
2015-05-04  8:16 ` [PATCH v6 21/25] ARM: dts: exynos3250: " Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-05  4:10   ` Krzysztof Kozłowski
2015-05-05  4:10     ` Krzysztof Kozłowski
2015-05-04  8:16 ` [PATCH v6 22/25] ARM: dts: exynos4415: " Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-05  4:09   ` Krzysztof Kozłowski
2015-05-05  4:09     ` Krzysztof Kozłowski
2015-05-04  8:16 ` [PATCH v6 23/25] ARM: dts: exynos5250: " Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-05  4:04   ` Krzysztof Kozłowski
2015-05-05  4:04     ` Krzysztof Kozłowski
2015-05-04  8:16 ` [PATCH v6 24/25] ARM: dts: exynos5420: " Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
2015-05-05  4:10   ` Krzysztof Kozłowski
2015-05-05  4:10     ` Krzysztof Kozłowski
2015-05-04  8:16 ` [PATCH v6 25/25] ARM: dts: exynos: add iommu reserved regions for bootloader's splash screen Marek Szyprowski
2015-05-04  8:16   ` Marek Szyprowski
     [not found]   ` <1430727380-10912-26-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-05  5:50     ` Krzysztof Kozłowski
2015-05-05  5:50       ` Krzysztof Kozłowski
     [not found] ` <1430727380-10912-1-git-send-email-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-04  8:15   ` [PATCH v6 01/25] arm: dma-mapping: add support for creating reserved mappings in iova space Marek Szyprowski
2015-05-04  8:15     ` Marek Szyprowski
2015-05-04 22:12     ` Rob Herring
2015-05-04 22:12       ` Rob Herring
     [not found]       ` <CAL_JsqKB4F8tspydBFrL-PH3gXcyu-pwQwBETMizJzTpAF3yzg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-18 12:09         ` Marek Szyprowski
2015-05-18 12:09           ` Marek Szyprowski
2015-05-06 14:01     ` Robin Murphy
2015-05-06 14:01       ` Robin Murphy
2015-05-19 10:49       ` Marek Szyprowski
2015-05-19 10:49         ` Marek Szyprowski
2015-05-04  8:16   ` [PATCH v6 06/25] iommu: exynos: remove unused functions Marek Szyprowski
2015-05-04  8:16     ` Marek Szyprowski
2015-05-10 13:01     ` Cho KyongHo
2015-05-10 13:01       ` Cho KyongHo
2015-05-04 10:30   ` [PATCH v6 27/26] iommu: exynos: add system suspend/resume support Marek Szyprowski
2015-05-04 10:30     ` Marek Szyprowski
2015-05-05 15:05   ` [PATCH v6 00/25] Exynos SYSMMU (IOMMU) integration with DT and DMA-mapping subsystem Joerg Roedel
2015-05-05 15:05     ` Joerg Roedel
2015-05-18 12:16     ` Marek Szyprowski
2015-05-18 12:16       ` Marek Szyprowski
2015-05-11 16:00 ` Javier Martinez Canillas
2015-05-11 16:00   ` Javier Martinez Canillas
2015-05-12 15:35   ` Javier Martinez Canillas
2015-05-12 15:35     ` Javier Martinez Canillas
2015-05-18 13:26   ` Marek Szyprowski
2015-05-18 13:26     ` Marek Szyprowski
     [not found]     ` <5559E88E.9050108-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-05-18 13:32       ` Javier Martinez Canillas
2015-05-18 13:32         ` Javier Martinez Canillas

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=5559E1E6.8090407@samsung.com \
    --to=m.szyprowski-sze3o3uu22jbdgjk7y7tuq@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
    --cc=inki.dae-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=javier-0uQlZySMnqxg9hUCZPvPmw@public.gmane.org \
    --cc=jy0922.shim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=shaik.ameer-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=sw0312.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=tomasz.figa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=will.deacon-5wv7dgnIgG8@public.gmane.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.