Hi Magnus, On Wed, Mar 8, 2017 at 12:01 PM, Magnus Damm <magnus.damm@xxxxxxxxx> wrote: > From: Magnus Damm <damm+renesas@xxxxxxxxxxxxx> > > Add root device handling to the IPMMU driver by allowing certain > DT compat strings to enable has_cache_leaf_nodes that in turn will > support both root devices with interrupts and leaf devices that > face the actual IPMMU consumer devices. > > Signed-off-by: Magnus Damm <damm+renesas@xxxxxxxxxxxxx> > --- 0011/drivers/iommu/ipmmu-vmsa.c > +++ work/drivers/iommu/ipmmu-vmsa.c 2017-03-08 17:56:51.770607110 +0900 > @@ -216,6 +219,44 @@ static void set_archdata(struct device * > #define IMUASID_ASID0_SHIFT 0 > > /* ----------------------------------------------------------------------------- > + * Root device handling > + */ > + > +static bool ipmmu_is_root(struct ipmmu_vmsa_device *mmu) > +{ > + if (mmu->features->has_cache_leaf_nodes) > + return mmu->is_leaf ? false : true; Expressions using the ternary operator are sometimes hard to read. In this case, you want negation, so why not use that? return !mmu->is_leaf; > + else I'd drop the else. > + return true; /* older IPMMU hardware treated as single root */ > +} > + > +static struct ipmmu_vmsa_device *__ipmmu_find_root(void) > +{ > + struct ipmmu_vmsa_device *mmu; > + bool found = false; struct ipmmu_vmsa_device *root = NULL; > + > + spin_lock(&ipmmu_devices_lock); > + > + list_for_each_entry(mmu, &ipmmu_devices, list) { > + if (ipmmu_is_root(mmu)) { > + found = true; root = mmu; > + break; > + } > + } > + > + spin_unlock(&ipmmu_devices_lock); > + return found ? mmu : NULL; return root; > +} Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds