From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754098AbcEDPTH (ORCPT ); Wed, 4 May 2016 11:19:07 -0400 Received: from mail-wm0-f42.google.com ([74.125.82.42]:35054 "EHLO mail-wm0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753412AbcEDPSn (ORCPT ); Wed, 4 May 2016 11:18:43 -0400 From: Eric Auger To: eric.auger@st.com, eric.auger@linaro.org, robin.murphy@arm.com, alex.williamson@redhat.com, will.deacon@arm.com, joro@8bytes.org, tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com, christoffer.dall@linaro.org, linux-arm-kernel@lists.infradead.org Cc: patches@linaro.org, linux-kernel@vger.kernel.org, Bharat.Bhushan@freescale.com, pranav.sawargaonkar@gmail.com, p.fedin@samsung.com, iommu@lists.linux-foundation.org, Jean-Philippe.Brucker@arm.com, julien.grall@arm.com, yehuday@marvell.com Subject: [PATCH v9 8/8] genirq/msi: use the MSI doorbell's IOVA when requested Date: Wed, 4 May 2016 15:18:14 +0000 Message-Id: <1462375094-2390-9-git-send-email-eric.auger@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1462375094-2390-1-git-send-email-eric.auger@linaro.org> References: <1462375094-2390-1-git-send-email-eric.auger@linaro.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- v8 -> v9: - Braces on both sides of the 'else' in msi_compose v7 -> v8: - use iommu_msi_msg_pa_to_va - add WARN_ON 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 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index d654524..082e6de 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -62,10 +62,18 @@ static int msi_compose(struct irq_data *irq_data, { int ret = 0; - if (erase) + if (erase) { memset(msg, 0, sizeof(*msg)); - else + } else { + struct device *dev; + ret = irq_chip_compose_msi_msg(irq_data, msg); + if (ret) + return ret; + + dev = msi_desc_to_dev(irq_data_get_msi_desc(irq_data)); + WARN_ON(iommu_msi_msg_pa_to_va(dev, msg)); + } return ret; } -- 1.9.1