Hi Arnd,

On 25/04/16 16:21, Arnd Bergmann wrote:
On Monday 25 April 2016 14:32:42 Will Deacon wrote:

+static inline __u64 hi_lo_readq_relaxed(const volatile void __iomem *addr)
+{
+   const volatile u32 __iomem *p = addr;
+   u32 low, high;
+
+   high = readl_relaxed(p + 1);
+   low = readl_relaxed(p);
+
+   return low + ((u64)high << 32);
+}
+
+static inline void hi_lo_writeq_relaxed(__u64 val, volatile void __iomem *addr)
+{
+   writel_relaxed(val >> 32, addr + 4);
+   writel_relaxed(val, addr);
+}

Could we not generate the _relaxed variants with some macro magic?

We _could_ - indeed I started doing that, but then decided that the
obfuscation of horrible macro-templated functions wasn't worth saving a
couple of hundred bytes in some code that isn't exactly difficult to
maintain and has needed touching once in 4 years.

If you did want to go down the macro route, I may as well also generate both
lo-hi and hi-lo headers all from a single template, it'd be really clever...
<alarm bells>

I certainly wasn't suggesting any more than the obvious macroisation,
but I'll leave it up to Arnd, as I think this falls on his lap.

I'd prefer the open-coded variant as well.

By that, do you mean sticking with the smmu_writeq() implementation in the driver and dropping this patch, or merging this patch as-is without further macro-magic?

Thanks,
Robin.


        Arnd


_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to