Hi, On Tue, Sep 17, 2019 at 7:45 AM Robin Murphy <robin.mur...@arm.com> wrote: > > Although CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is a welcome tool > for smoking out inadequate firmware, the failure mode is non-obvious > and can be confusing for end users. Add some special-case reporting of > Unidentified Stream Faults to help clarify this particular symptom. > Since we're adding yet another print to the mix, also break out an > explicit ratelimit state to make sure everything stays together (and > reduce the static storage footprint a little). > > CC: Douglas Anderson <diand...@chromium.org>
nit: Cc, not CC. > Signed-off-by: Robin Murphy <robin.mur...@arm.com> > --- > drivers/iommu/arm-smmu.c | 21 ++++++++++++++++----- > drivers/iommu/arm-smmu.h | 2 ++ > 2 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > index b7cf24402a94..b27020fd6c90 100644 > --- a/drivers/iommu/arm-smmu.c > +++ b/drivers/iommu/arm-smmu.c > @@ -36,6 +36,7 @@ > #include <linux/pci.h> > #include <linux/platform_device.h> > #include <linux/pm_runtime.h> > +#include <linux/ratelimit.h> > #include <linux/slab.h> > > #include <linux/amba/bus.h> > @@ -485,6 +486,8 @@ static irqreturn_t arm_smmu_global_fault(int irq, void > *dev) > { > u32 gfsr, gfsynr0, gfsynr1, gfsynr2; > struct arm_smmu_device *smmu = dev; > + static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, > + DEFAULT_RATELIMIT_BURST); > > gfsr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSR); > gfsynr0 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR0); > @@ -494,11 +497,19 @@ static irqreturn_t arm_smmu_global_fault(int irq, void > *dev) > if (!gfsr) > return IRQ_NONE; > > - dev_err_ratelimited(smmu->dev, > - "Unexpected global fault, this could be serious\n"); > - dev_err_ratelimited(smmu->dev, > - "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 > 0x%08x\n", > - gfsr, gfsynr0, gfsynr1, gfsynr2); > + if (__ratelimit(&rs)) { > + if (IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT) && > + (gfsr & sGFSR_USF)) > + dev_err(smmu->dev, > + "Blocked unknown Stream ID 0x%hx; boot with > \"arm-smmu.disable_bypass=0\" to allow, but this may have security > implications\n", optional nit: "%#hx" instead of "0x%hx" Reviewed-by: Douglas Anderson <diand...@chromium.org> _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu