diff mbox series

iommu/arm-smmu: Restore naming of driver parameter prefix

Message ID 20200218172756.2131-1-will@kernel.org (mailing list archive)
State Mainlined
Commit ab362fffa0feb0da23191111e60b641d39130053
Headers show
Series iommu/arm-smmu: Restore naming of driver parameter prefix | expand

Commit Message

Will Deacon Feb. 18, 2020, 5:27 p.m. UTC
Extending the Arm SMMU driver to allow for modular builds changed
KBUILD_MODNAME to be "arm_smmu_mod" so that a single module could be
built from the multiple existing object files without the need to rename
any source files.

This inadvertently changed the name of the driver parameters, which may
lead to runtime issues if bootloaders are relying on the old names for
correctness (e.g. "arm-smmu.disable_bypass=0").

Although MODULE_PARAM_PREFIX can be overridden to restore the old naming
for builtin parameters, only the new name is matched by modprobe and so
loading the driver as a module would cause parameters specified on the
kernel command line to be ignored. Instead, rename "arm_smmu_mod" to
"arm_smmu". Whilst it's a bit of a bodge, this allows us to create a
single module without renaming any files and makes use of the fact that
underscores and hyphens can be used interchangeably in parameter names.

Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Reported-by: Li Yang <leoyang.li@nxp.com>
Fixes: cd221bd24ff5 ("iommu/arm-smmu: Allow building as a module")
Signed-off-by: Will Deacon <will@kernel.org>
---
 drivers/iommu/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Robin Murphy Feb. 18, 2020, 5:40 p.m. UTC | #1
On 18/02/2020 5:27 pm, Will Deacon wrote:
> Extending the Arm SMMU driver to allow for modular builds changed
> KBUILD_MODNAME to be "arm_smmu_mod" so that a single module could be
> built from the multiple existing object files without the need to rename
> any source files.
> 
> This inadvertently changed the name of the driver parameters, which may
> lead to runtime issues if bootloaders are relying on the old names for
> correctness (e.g. "arm-smmu.disable_bypass=0").

Indeed, it turns out this also tripped up some Juno setups in our 
internal CI that were bodging around firmware issues.

> Although MODULE_PARAM_PREFIX can be overridden to restore the old naming
> for builtin parameters, only the new name is matched by modprobe and so
> loading the driver as a module would cause parameters specified on the
> kernel command line to be ignored. Instead, rename "arm_smmu_mod" to
> "arm_smmu". Whilst it's a bit of a bodge, this allows us to create a
> single module without renaming any files and makes use of the fact that
> underscores and hyphens can be used interchangeably in parameter names.

That's awful... and thus great :)

Reviewed-by: Robin Murphy <robin.murphy@arm.com>

> Cc: Robin Murphy <robin.murphy@arm.com>
> Cc: Russell King <linux@armlinux.org.uk>
> Reported-by: Li Yang <leoyang.li@nxp.com>
> Fixes: cd221bd24ff5 ("iommu/arm-smmu: Allow building as a module")
> Signed-off-by: Will Deacon <will@kernel.org>
> ---
>   drivers/iommu/Makefile | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
> index 2104fb8afc06..9f33fdb3bb05 100644
> --- a/drivers/iommu/Makefile
> +++ b/drivers/iommu/Makefile
> @@ -14,8 +14,8 @@ obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o
>   obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o amd_iommu_quirks.o
>   obj-$(CONFIG_AMD_IOMMU_DEBUGFS) += amd_iommu_debugfs.o
>   obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
> -obj-$(CONFIG_ARM_SMMU) += arm-smmu-mod.o
> -arm-smmu-mod-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
> +obj-$(CONFIG_ARM_SMMU) += arm_smmu.o
> +arm_smmu-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
>   obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
>   obj-$(CONFIG_DMAR_TABLE) += dmar.o
>   obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o
>
Will Deacon Feb. 19, 2020, 11 a.m. UTC | #2
On Tue, Feb 18, 2020 at 05:40:39PM +0000, Robin Murphy wrote:
> On 18/02/2020 5:27 pm, Will Deacon wrote:
> > Extending the Arm SMMU driver to allow for modular builds changed
> > KBUILD_MODNAME to be "arm_smmu_mod" so that a single module could be
> > built from the multiple existing object files without the need to rename
> > any source files.
> > 
> > This inadvertently changed the name of the driver parameters, which may
> > lead to runtime issues if bootloaders are relying on the old names for
> > correctness (e.g. "arm-smmu.disable_bypass=0").
> 
> Indeed, it turns out this also tripped up some Juno setups in our internal
> CI that were bodging around firmware issues.
> 
> > Although MODULE_PARAM_PREFIX can be overridden to restore the old naming
> > for builtin parameters, only the new name is matched by modprobe and so
> > loading the driver as a module would cause parameters specified on the
> > kernel command line to be ignored. Instead, rename "arm_smmu_mod" to
> > "arm_smmu". Whilst it's a bit of a bodge, this allows us to create a
> > single module without renaming any files and makes use of the fact that
> > underscores and hyphens can be used interchangeably in parameter names.
> 
> That's awful... and thus great :)
> 
> Reviewed-by: Robin Murphy <robin.murphy@arm.com>

Cheers, Robin!

Joerg -- please can you pick this up as a fix for 5.6? I don't have any
other SMMU fixes queued, so it doesn't seem worth sending a pull request
to you just for this.

Thanks,

Will
Joerg Roedel Feb. 19, 2020, 11:03 a.m. UTC | #3
On Wed, Feb 19, 2020 at 11:00:46AM +0000, Will Deacon wrote:
> Joerg -- please can you pick this up as a fix for 5.6? I don't have any
> other SMMU fixes queued, so it doesn't seem worth sending a pull request
> to you just for this.

Applied, thanks.
diff mbox series

Patch

diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index 2104fb8afc06..9f33fdb3bb05 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -14,8 +14,8 @@  obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o
 obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o amd_iommu_quirks.o
 obj-$(CONFIG_AMD_IOMMU_DEBUGFS) += amd_iommu_debugfs.o
 obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
-obj-$(CONFIG_ARM_SMMU) += arm-smmu-mod.o
-arm-smmu-mod-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
+obj-$(CONFIG_ARM_SMMU) += arm_smmu.o
+arm_smmu-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
 obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
 obj-$(CONFIG_DMAR_TABLE) += dmar.o
 obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o