Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1382727 > unrolled thread

[PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested

Started byEric Auger <eric.auger@linaro.org>
First post2016-04-19 19:20 +0200
Last post2016-04-20 11:50 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested Eric Auger <eric.auger@linaro.org> - 2016-04-19 19:20 +0200
    Re: [PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when  requested Marc Zyngier <marc.zyngier@arm.com> - 2016-04-20 11:50 +0200

#1382727 — [PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested

FromEric Auger <eric.auger@linaro.org>
Date2016-04-19 19:20 +0200
Subject[PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested
Message-ID<rpHtE-1RO-11@gated-at.bofh.it>
On MSI message composition we now use the MSI doorbell's IOVA in
place of the doorbell's PA in case the device is upstream to an
IOMMU that requires MSI addresses to be mapped. The doorbell's
allocation and mapping happened on an early stage (pci_enable_msi).

Signed-off-by: Eric Auger <eric.auger@linaro.org>

---
v6 -> v7:
- allocation/mapping is done at an earlier stage. We now just perform
  the iova lookup. So it is safe now to be called in a code that cannot
  sleep. iommu_msi_set_doorbell_iova is moved in the dma-reserved-iommu
  API: I think it cleans things up with respect to various #ifdef CONFIGS.

v5:
- use macros to increase the readability
- add comments
- fix a typo that caused a compilation error if CONFIG_IOMMU_API
  is not set
---
 kernel/irq/msi.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index e45907e..0ebb2d8 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -19,6 +19,7 @@
 
 /* Temparory solution for building, will be removed later */
 #include <linux/pci.h>
+#include <linux/dma-reserved-iommu.h>
 
 struct msi_desc *alloc_msi_entry(struct device *dev)
 {
@@ -64,8 +65,12 @@ static int msi_compose(struct irq_data *irq_data,
 
 	if (erase)
 		memset(msg, 0, sizeof(*msg));
-	else
+	else {
 		ret = irq_chip_compose_msi_msg(irq_data, msg);
+		if (ret)
+			return ret;
+		iommu_msi_mapping_translate_msg(irq_data, msg);
+	}
 
 	return ret;
 }
-- 
1.9.1

[toc] | [next] | [standalone]


#1383222 — Re: [PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested

FromMarc Zyngier <marc.zyngier@arm.com>
Date2016-04-20 11:50 +0200
SubjectRe: [PATCH v7 8/8] genirq/msi: use the MSI doorbell's IOVA when requested
Message-ID<rpWVI-5LM-11@gated-at.bofh.it>
In reply to#1382727
On 19/04/16 18:13, Eric Auger wrote:
> On MSI message composition we now use the MSI doorbell's IOVA in
> place of the doorbell's PA in case the device is upstream to an
> IOMMU that requires MSI addresses to be mapped. The doorbell's
> allocation and mapping happened on an early stage (pci_enable_msi).
> 
> Signed-off-by: Eric Auger <eric.auger@linaro.org>
> 
> ---
> v6 -> v7:
> - allocation/mapping is done at an earlier stage. We now just perform
>   the iova lookup. So it is safe now to be called in a code that cannot
>   sleep. iommu_msi_set_doorbell_iova is moved in the dma-reserved-iommu
>   API: I think it cleans things up with respect to various #ifdef CONFIGS.
> 
> v5:
> - use macros to increase the readability
> - add comments
> - fix a typo that caused a compilation error if CONFIG_IOMMU_API
>   is not set
> ---
>  kernel/irq/msi.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
> index e45907e..0ebb2d8 100644
> --- a/kernel/irq/msi.c
> +++ b/kernel/irq/msi.c
> @@ -19,6 +19,7 @@
>  
>  /* Temparory solution for building, will be removed later */
>  #include <linux/pci.h>
> +#include <linux/dma-reserved-iommu.h>
>  
>  struct msi_desc *alloc_msi_entry(struct device *dev)
>  {
> @@ -64,8 +65,12 @@ static int msi_compose(struct irq_data *irq_data,
>  
>  	if (erase)
>  		memset(msg, 0, sizeof(*msg));
> -	else
> +	else {
>  		ret = irq_chip_compose_msi_msg(irq_data, msg);
> +		if (ret)
> +			return ret;
> +		iommu_msi_mapping_translate_msg(irq_data, msg);

I've just commented on this function in its respective series. I really
think it deals with the wrong data structure. Id rather see something like:

struct device *dev = msi_desc_to_dev(irq_data_get_msi_desc(irq_data));
iommu_msi_msg_pa_to_va(dev, msg);

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web