From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Herrmann Subject: Re: [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Date: Thu, 23 Jan 2014 22:17:49 +0100 Message-ID: <20140123211749.GE26399@alberich> References: <1389876263-25759-1-git-send-email-andreas.herrmann@calxeda.com> <1389876263-25759-6-git-send-email-andreas.herrmann@calxeda.com> <20140122155302.GF14108@mudshark.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20140122155302.GF14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Will Deacon Cc: Andreas Herrmann , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" List-Id: iommu@lists.linux-foundation.org T24gV2VkLCBKYW4gMjIsIDIwMTQgYXQgMDM6NTM6MDJQTSArMDAwMCwgV2lsbCBEZWFjb24gd3Jv dGU6Cj4gT24gVGh1LCBKYW4gMTYsIDIwMTQgYXQgMTI6NDQ6MTdQTSArMDAwMCwgQW5kcmVhcyBI ZXJybWFubiB3cm90ZToKPiA+IENjOiBBbmRyZWFzIEhlcnJtYW5uIDxoZXJybWFubi5kZXIudXNl ckBnb29nbGVtYWlsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEFuZHJlYXMgSGVycm1hbm4gPGFu ZHJlYXMuaGVycm1hbm5AY2FseGVkYS5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2lvbW11L2Fy bS1zbW11LmMgfCAgIDI1ICsrKysrKysrKysrKysrKysrKysrKystLS0KPiA+ICAxIGZpbGUgY2hh bmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwo+ ID4gaW5kZXggMDJhODcxZS4uYTRlMGM5MyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaW9tbXUv YXJtLXNtbXUuYwo+ID4gKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCj4gPiBAQCAtNTYs NiArNTYsOSBAQAo+ID4gIC8qIE1heGltdW0gbnVtYmVyIG9mIHN0cmVhbSBJRHMgYXNzaWduZWQg dG8gYSBzaW5nbGUgZGV2aWNlICovCj4gPiAgI2RlZmluZSBNQVhfTUFTVEVSX1NUUkVBTUlEUwkJ OAo+ID4gIAo+ID4gKy8qIE1heGltdW0gc3RyZWFtIElEICovCj4gPiArI2RlZmluZSBBUk1fU01N VV9NQVhfU1RSRUFNSUQJCShTWl82NEsgLSAxKQo+ID4gKwo+ID4gIC8qIE1heGltdW0gbnVtYmVy IG9mIGNvbnRleHQgYmFua3MgcGVyIFNNTVUgKi8KPiA+ICAjZGVmaW5lIEFSTV9TTU1VX01BWF9D QlMJCTEyOAo+ID4gIAo+ID4gQEAgLTM4Niw2ICszODksOCBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlIHsKPiA+ICAJdTMyCQkJCXNtcl9tYXNrX21hc2s7Cj4gPiAgCXUzMgkJCQlzbXJfaWRfbWFz azsKPiA+ICAKPiA+ICsJdW5zaWduZWQgbG9uZwkJCSpzaWRzOwo+IAo+IERFQ0xBUkVfQklUTUFQ IGluc3RlYWQ/CgpJIHdhbnRlZCB0byBhbGxvY2F0ZSB0aGUgYml0bWFwIHdoaWNoIGJ0dyBhbGxv d3MgdXMgdG8gLi4uIFvihpIgc2VlIGVuZApvZiBtYWlsXQoKPiBIb3dldmVyLCB0aGF0J3MgYW4g OGsgYml0bWFwIGp1c3QgZm9yIHNhbml0eSBjaGVja2luZywgd2hpY2ggSSdtIG5vdAo+IHRvbyBm b25kIG9mLgoKWWVzLCBJIHRob3VnaHQgdGhlIHNhbWUuIEJ1dCBmaW5hbGx5IEkgdGhvdWdodCBp dCdzIHdvcnRoIGl0LgoKPiBHaXZlbiB0aGF0IHRoZSBtb3RpdmF0aW9uIGZvciB0aGUgY2hlY2tp bmcgd2FzIHlvdXIgc21yIGFsbG9jYXRvciwKPiBwZXJoYXBzIGl0J3Mgc3VmZmljaWVudCBqdXN0 IHRvIGRvIHRoZSBjaGVja2luZyBvbiBhIHBlci1tYXN0ZXIKPiBiYXNpcywgd2hpY2ggd2UgY2Fu IGRvIHdpdGggdGhlIGV4aGF1c3RpdmUgc2VhcmNoIGVhY2ggdGltZS4KCkEgcGVyLW1hc3RlciBi YXNpcyBpcyBub3Qgc3VmZmljaWVudC4gSWYgeW91IGFyZ3VlIHRoYXQgc29tZW9uZSBjb3VsZApo YXZlIHNwZWNpZmllZCB0aGUgc2FtZSBzdHJlYW0gSUQgdHdpY2UgZm9yIG9uZSBtYXN0ZXIgaW4g RFQgaG93IGFyZQpjaGFuY2VzIHRoYXQgdGhlIHNhbWUgc3RyZWFtIElEIHNob3dzIHVwIHR3aWNl IGJ1dCBmb3IgZGlmZmVyZW50Cm1hc3RlciBkZXZpY2VzPwoKSSB0aGluayB3ZSBoYXZlIHRvIGNo ZWNrIHRoaXMgKGluZGVwZW5kZW50IG9mIG15IHNtciBhbGxvY2F0b3IpLgpJZiB0d28gbWFzdGVy cyBhY2NpZGVudGlhbGx5IHNoYXJlIHRoZS9hbiBJRDoKCiogU3RyZWFtIElEIG1hdGNoaW5nICh3 L28gYSBtYXNrLCBqdXN0IHVzZSBvbmUgU01SIHRvIG1hcCBvbmUgc3RyZWFtCiAgSUQpOiBJdCBw cm9hYmx5IHdpbGwgY2F1c2UgYSBtdWx0aSBtYXRjaCB3aXRoIHVuZGlmaW5lZCBiZWhhdmlvdXIu CgoqIFN0cmVhbSBJRCBpbmRleGluZzogWW91IHdvdWxkIG92ZXJ3cml0ZSBhbiBhbHJlYWR5IHVz ZWQgUzJDUiAoaWYKICB0aGVyZSBhcmUgbm8gZnVydGhlciBwcmVjYXV0aW9ucykuCgpUaGF0IGlz IHdoeSBJIHRoaW5rIGEgY2hlY2sgdG8gcmVqZWN0IGR1cGxpY2F0ZSBzdHJlYW0gSURzIGFtb25n IGFsbAptYXN0ZXJzIGZvciBvbmUgU01NVSBpcyByZXF1aXJlZC4KCklmIHRoaXMgaXMgbmVlZGVk LCBleGhhdXN0aXZlIHNlYXJjaCBkb2Vzbid0IHNlZW0gdG8gYmUgYSBnb29kIGlkZWEsCmJlY2F1 c2UgaWYgeW91IGhhdmUgYSBkaXN0cmlidXRlZCBTTU1VIC0tIG9uZSBUQ1UgKEkgdGhpbmsgdGhh dCdzCndoZXJlIHRoZSBTTVJzIGFyZSksIGFuZCBtYW55IFRCVXMgLS0geW91IG1pZ2h0IGhhdmUg c2V2ZXJhbCBtYXN0ZXIKZGV2aWNlcyBhdHRhY2hlZCAobWFueSBtb3JlIHRoYW4gaW4gY3VycmVu dCBzeXN0ZW1zKS4gRWFjaCBtYXN0ZXIKcG90ZW50aWFsbHkgaGFzIHNldmVyYWwgc3RyZWFtIElE cyAuLi4gIEVzcC4gaW4gdGhpcyBjYXNlIDhrIGZvciBkb2luZwp0aGUgY2hlY2sgaXNuJ3QgYW4g aXNzdWUuCgpNYXliZSBhIGNvbXByb21pc2UgaXMgdG8gCgouLi4gZnJlZSB0aGUgYml0bWFwIGFm dGVyIHRoZSBjaGVjayBpcyBkb25lLgoKCkFuZHJlYXMKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaW9tbXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxp bnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lvbW11 From mboxrd@z Thu Jan 1 00:00:00 1970 From: herrmann.der.user@googlemail.com (Andreas Herrmann) Date: Thu, 23 Jan 2014 22:17:49 +0100 Subject: [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices In-Reply-To: <20140122155302.GF14108@mudshark.cambridge.arm.com> References: <1389876263-25759-1-git-send-email-andreas.herrmann@calxeda.com> <1389876263-25759-6-git-send-email-andreas.herrmann@calxeda.com> <20140122155302.GF14108@mudshark.cambridge.arm.com> Message-ID: <20140123211749.GE26399@alberich> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Jan 22, 2014 at 03:53:02PM +0000, Will Deacon wrote: > On Thu, Jan 16, 2014 at 12:44:17PM +0000, Andreas Herrmann wrote: > > Cc: Andreas Herrmann > > Signed-off-by: Andreas Herrmann > > --- > > drivers/iommu/arm-smmu.c | 25 ++++++++++++++++++++++--- > > 1 file changed, 22 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > > index 02a871e..a4e0c93 100644 > > --- a/drivers/iommu/arm-smmu.c > > +++ b/drivers/iommu/arm-smmu.c > > @@ -56,6 +56,9 @@ > > /* Maximum number of stream IDs assigned to a single device */ > > #define MAX_MASTER_STREAMIDS 8 > > > > +/* Maximum stream ID */ > > +#define ARM_SMMU_MAX_STREAMID (SZ_64K - 1) > > + > > /* Maximum number of context banks per SMMU */ > > #define ARM_SMMU_MAX_CBS 128 > > > > @@ -386,6 +389,8 @@ struct arm_smmu_device { > > u32 smr_mask_mask; > > u32 smr_id_mask; > > > > + unsigned long *sids; > > DECLARE_BITMAP instead? I wanted to allocate the bitmap which btw allows us to ... [? see end of mail] > However, that's an 8k bitmap just for sanity checking, which I'm not > too fond of. Yes, I thought the same. But finally I thought it's worth it. > Given that the motivation for the checking was your smr allocator, > perhaps it's sufficient just to do the checking on a per-master > basis, which we can do with the exhaustive search each time. A per-master basis is not sufficient. If you argue that someone could have specified the same stream ID twice for one master in DT how are chances that the same stream ID shows up twice but for different master devices? I think we have to check this (independent of my smr allocator). If two masters accidentially share the/an ID: * Stream ID matching (w/o a mask, just use one SMR to map one stream ID): It proably will cause a multi match with undifined behaviour. * Stream ID indexing: You would overwrite an already used S2CR (if there are no further precautions). That is why I think a check to reject duplicate stream IDs among all masters for one SMMU is required. If this is needed, exhaustive search doesn't seem to be a good idea, because if you have a distributed SMMU -- one TCU (I think that's where the SMRs are), and many TBUs -- you might have several master devices attached (many more than in current systems). Each master potentially has several stream IDs ... Esp. in this case 8k for doing the check isn't an issue. Maybe a compromise is to ... free the bitmap after the check is done. Andreas