From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030899AbdD0Pmd (ORCPT ); Thu, 27 Apr 2017 11:42:33 -0400 Received: from foss.arm.com ([217.140.101.70]:38818 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967449AbdD0PmZ (ORCPT ); Thu, 27 Apr 2017 11:42:25 -0400 Date: Thu, 27 Apr 2017 16:43:10 +0100 From: Lorenzo Pieralisi To: Arnd Bergmann Cc: Thomas Gleixner , Jason Cooper , Marc Zyngier , Hanjun Guo , Tomasz Nowicki , Will Deacon , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org Subject: Re: [PATCH] irqchip/gicv3-its: use IORT only if IOMMU support is enabled Message-ID: <20170427154310.GA21049@red-moon> References: <20170427142704.3200946-1-arnd@arndb.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170427142704.3200946-1-arnd@arndb.de> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 27, 2017 at 04:26:12PM +0200, Arnd Bergmann wrote: > When the IOMMU subsystem is disabled, we cannot build ARM64 kernels with ACPI: > > drivers/acpi/arm64/iort.c: In function 'iort_iommu_xlate': > drivers/acpi/arm64/iort.c:647:22: error: 'struct iommu_fwspec' has no member named 'ops' Damn it. This is triggered by 5a1bb638d567 ("drivers: acpi: Handle IOMMU lookup failure with deferred probing or error") in -next. There are a couple of things to fix here but not with this patch (it is not correct to add a dependency on IOMMU on GIC V3 ITS). I am not even sure that the series containing the above commit will get merged so it is not easy to decide how to fix it up. The ACPI_IORT Kconfig selection _must_ be reworked but not now, it is too late in the cycle IMO. I suspect the only thing I can do is to send Joerg a fix-up in case the series containing the above commit is actually merged (he will send it upstream through the IOMMU tree). At -rc1 I will definitely have a patch ready to rework the ACPI_IORT Kconfig selection because it is just wrong at the moment. Thanks for the heads-up, Lorenzo > This adds a Kconfig dependency to only enable ACPI_IORT when it acutally > builds, along with addititonal dummy helper functions to make its > users build without IOMMU/IORT. > > Fixes: 3f010cf19732 ("irqchip/gicv3-its: Probe ITS in the ACPI way") > Signed-off-by: Arnd Bergmann > --- > drivers/irqchip/Kconfig | 2 +- > include/linux/acpi_iort.h | 5 ++++- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig > index 478f8ace2664..f0516740c03f 100644 > --- a/drivers/irqchip/Kconfig > +++ b/drivers/irqchip/Kconfig > @@ -39,7 +39,7 @@ config ARM_GIC_V3_ITS > bool > depends on PCI > depends on PCI_MSI > - select ACPI_IORT if ACPI > + select ACPI_IORT if ACPI && IOMMU > > config ARM_NVIC > bool > diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h > index 3ff9acea8616..918906d189d3 100644 > --- a/include/linux/acpi_iort.h > +++ b/include/linux/acpi_iort.h > @@ -26,10 +26,10 @@ > #define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL) > #define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL) > > +#ifdef CONFIG_ACPI_IORT > int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node); > void iort_deregister_domain_token(int trans_id); > struct fwnode_handle *iort_find_domain_token(int trans_id); > -#ifdef CONFIG_ACPI_IORT > void acpi_iort_init(void); > bool iort_node_match(u8 type); > u32 iort_msi_map_rid(struct device *dev, u32 req_id); > @@ -40,6 +40,9 @@ int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id); > void iort_set_dma_mask(struct device *dev); > const struct iommu_ops *iort_iommu_configure(struct device *dev); > #else > +static inline int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node) { return -ENOSYS; } > +static inline void iort_deregister_domain_token(int trans_id) {} > +static inline struct fwnode_handle *iort_find_domain_token(int trans_id) { return NULL;} > static inline void acpi_iort_init(void) { } > static inline bool iort_node_match(u8 type) { return false; } > static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id) > -- > 2.9.0 >