Messages in this thread |  | | Date | Mon, 16 Dec 2013 12:19:37 -0700 | From | Stephen Warren <> | Subject | Re: [PATCHv7 10/12] iommu/tegra: smmu: allow duplicate ASID wirte |
| |
On 12/12/2013 12:57 AM, Hiroshi Doyu wrote: > The device, which belongs to the same ASID, can try to enable the same > ASID as the other swgroup devices. This should be allowed but just > skip the actual register write. If the write value is different, it > will return -EINVAL.
I guess this simplifies the body of the code a lot. Given this, I would revise the code I suggested in response to a previous patch, to something more like:
offs = HWGRP_ASID_REG(i); val = smmu_read(smmu, offs); if (on) { if (WARN_ON(val && val != new_val)) return -ENODEV; memcpy(c->hwgrp, map, sizeof(u64)); } else { WARN_ON(val); } smmu_write(smmu, val, offs);
> + if (val) { > + if (WARN_ON(val != mask)) > + return -EINVAL; > + goto skip;
That means that:
a) No error is returned when the ASIDs don't match. Surely you still want to return an error?
b) "skip" skips setting up all HWGRP IDs for the device, whereas perhaps only 1 was shared yet the rest still need to be set up. If you really do want to ignore the error, then surely you want "continue;" here not "goto skip;"?
> + } ... > +skip: > return 0;
|  |