From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jacob Pan Subject: Re: [RFC v2] iommu/vt-d: Allow iommu_domain_alloc to allocate IOMMU_DOMAIN_DMA Date: Mon, 7 Jan 2019 12:04:53 -0800 Message-ID: <20190107120453.7bbaa4b2@jacob-builder> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: James Sewart Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Dmitry Safonov List-Id: iommu@lists.linux-foundation.org T24gV2VkLCA1IERlYyAyMDE4IDE3OjE5OjM1ICswMDAwCkphbWVzIFNld2FydCA8amFtZXNzZXdh cnRAYXJpc3RhLmNvbT4gd3JvdGU6Cgo+IEhleSwKPiAKPiBUaGVyZSBleGlzdHMgYW4gaXNzdWUg aW4gdGhlIGxvZ2ljIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbWFpbgo+IGFzc29jaWF0aW9uIHdpdGgg ZGV2aWNlcy4gQ3VycmVudGx5IHRoZSBkcml2ZXIgdXNlcwo+IGZpbmRfb3JfYWxsb2NfZG9tYWlu IHRvIGVpdGhlciByZXVzZSBhbiBleGlzdGluZyBkb21haW4gb3IgYWxsb2NhdGUgYQo+IG5ldyBv bmUgaWYgb25lIGlzbuKAmXQgZm91bmQuIERvbWFpbnMgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVu IGFsbAo+IG1lbWJlcnMgb2YgYW4gSU9NTVUgZ3JvdXAgYXMgdGhpcyBpcyB0aGUgbWluaW11bSBn cmFudWxhcml0eSB0aGF0IHdlCj4gY2FuIGd1YXJhbnRlZSBhZGRyZXNzIHNwYWNlIGlzb2xhdGlv bi4KPiAKPiBUaGUgaW50ZWwgSU9NTVUgZHJpdmVyIGV4cG9zZXMgcGNpX2RldmljZV9ncm91cCBp biBpbnRlbF9pb21tdV9vcHMgYXMKPiB0aGUgZnVuY3Rpb24gdG8gY2FsbCB0byBkZXRlcm1pbmUg dGhlIGdyb3VwIG9mIGEgZGV2aWNlLCB0aGlzIGlzCj4gaW1wbGVtZW50ZWQgaW4gdGhlIGdlbmVy aWMgSU9NTVUgY29kZSBhbmQgY2hlY2tzOiBkbWEgYWxpYXNlcywKPiB1cHN0cmVhbSBwY2llIHN3 aXRjaCBBQ1MsIHBjaSBhbGlhc2VzLCBhbmQgcGNpIGZ1bmN0aW9uIGFsaWFzZXMuIFRoZQo+IGZp bmRfb3JfYWxsb2NfZG9tYWluIGNvZGUgY3VycmVudGx5IG9ubHkgdXNlcyBkbWEgYWxpYXNlcyB0 bwo+IGRldGVybWluZSBpZiBhIGRvbWFpbiBpcyBzaGFyZWQuIFRoaXMgY2F1c2VzIGEgZGlzY29u bmVjdCBiZXR3ZWVuCj4gSU9NTVUgZ3JvdXBzIGFuZCBkb21haW5zLiBXZSBoYXZlIG9ic2VydmVk IGRldmljZXMgdW5kZXIgYSBwY2llCj4gc3dpdGNoIGVhY2ggaGF2aW5nIHRoZWlyIG93biBkb21h aW4gYnV0IGFzc2lnbmVkIHRoZSBzYW1lIGdyb3VwLgo+IAo+IE9uZSBzb2x1dGlvbiB3b3VsZCBi ZSB0byBmaXggdGhlIGxvZ2ljIGluIGZpbmRfb3JfYWxsb2NfZG9tYWluIHRvIGFkZCAKPiBjaGVj a3MgZm9yIHRoZSBvdGhlciBjb25kaXRpb25zIHRoYXQgYSBkZXZpY2UgbWF5IHNoYXJlIGEgZG9t YWluLgo+IEhvd2V2ZXIsIHRoaXMgZHVwbGljYXRlcyBjb2RlIHdoaWNoIHRoZSBnZW5lcmljIElP TU1VIGNvZGUKPiBpbXBsZW1lbnRzLiBJbnN0ZWFkIHRoaXMgaXNzdWUgY2FuIGJlIGZpeGVkIGJ5 IGFsbG93aW5nIHRoZQo+IGFsbG9jYXRpb24gb2YgZGVmYXVsdF9kb21haW4gb24gdGhlIElPTU1V IGdyb3VwLiBUaGlzIGlzIG5vdAo+IGN1cnJlbnRseSBzdXBwb3J0ZWQgYXMgdGhlIGludGVsIGRy aXZlciBkb2VzIG5vdCBhbGxvdyBhbGxvY2F0aW9uIG9mCj4gZG9tYWluIHR5cGUgSU9NTVVfRE9N QUlOX0RNQS4KPiAKPiBBbGxvd2luZyBhbGxvY2F0aW9uIG9mIERNQSBkb21haW5zIGhhcyB0aGUg ZWZmZWN0IHRoYXQgdGhlCj4gZGVmYXVsdF9kb21haW4gaXMgbm9uIE5VTEwgYW5kIGlzIGF0dGFj aGVkIHRvIGEgZGV2aWNlIHdoZW4KPiBpbml0aWFsaXNpbmcuIFRoaXMgZGVsZWdhdGVzIHRoZSBo YW5kbGluZyBvZiBkb21haW5zIHRvIHRoZSBnZW5lcmljCj4gSU9NTVUgY29kZS4gT25jZSB0aGlz IGlzIGltcGxlbWVudGVkIGl0IGlzIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGUKPiBsYXp5IGFsbG9j YXRpb24gb2YgZG9tYWlucyBlbnRpcmVseS4KPiAKVGhpcyBjYW4gYWxzbyBjb25zb2xpZGF0ZSB0 aGUgZG9tYWluIHN0b3JhZ2UsIGkuZS4gbW92ZSBkb21haW4gZnJvbQpkZXZpY2VfZG9tYWluX2lu Zm8gdG8gaW9tbXVfZ3JvdXAuCj4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIERNQSBhbmQgaWRlbnRp dHkgZG9tYWlucyB0byBiZSBhbGxvY2F0ZWQgZm9yIAo+IGV4dGVybmFsIG1hbmFnZW1lbnQuIEFz IGl0IGlzbuKAmXQga25vd24gd2hpY2ggZGV2aWNlIHdpbGwgYmUgYXR0YWNoZWQKPiB0byBhIGRv bWFpbiwgdGhlIGRtYSBkb21haW4gaXMgbm90IGluaXRpYWxpc2VkIGF0IGFsbG9jIHRpbWUuIElu c3RlYWQKPiBpdCBpcyBhbGxvY2F0ZWQgd2hlbiBhdHRhY2hlZC4gQXMgd2UgbWF5IGxvc2UgUk1S UiBtYXBwaW5ncyB3aGVuCj4gYXR0YWNoaW5nIGEgZGV2aWNlIHRvIGEgbmV3IGRvbWFpbiwgd2Ug YWxzbyBlbnN1cmUgdGhlc2UgYXJlIG1hcHBlZAo+IGF0IGF0dGFjaCB0aW1lLgo+IAo+IFRoaXMg d2lsbCBsaWtlbHkgY29uZmxpY3Qgd2l0aCB0aGUgd29yayBkb25lIGZvciBhdXhpbGlhcnkgZG9t YWlucyBieSAKPiBCYW9sdSBidXQgdGhlIGNvZGUgdG8gYWNjb21tb2RhdGUgd29u4oCZdCBjaGFu Z2UgbXVjaC4KPiAKPiBJIGhhZCBhbHNvIHN0YXJ0ZWQgb24gYSBwYXRjaCB0byByZW1vdmUgZmlu ZF9vcl9hbGxvY19kb21haW4gYW5kCj4gdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGJ1 dCBoYWQgaXNzdWVzIHdpdGggZWRnZSBjYXNlcyBzdWNoIGFzIAo+IGlvbW11X3ByZXBhcmVfaXNh IHRoYXQgaXMgZG9pbmcgZG9tYWluIG9wZXJhdGlvbnMgYXQgSU9NTVUgaW5pdCB0aW1lLgo+IAo+ IENoZWVycywKPiBKYW1lcy4KPiAKPiAKPiAtLS0KPiAgZHJpdmVycy9pb21tdS9pbnRlbC1pb21t dS5jIHwgMTU5Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tIDEgZmlsZSBj aGFuZ2VkLCAxMTAKPiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9pbnRlbC1p b21tdS5jCj4gaW5kZXggNDFhNGI4ODA4ODAyLi42NDM3Y2IyZTliMjIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCj4gKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1p b21tdS5jCj4gQEAgLTM1MSw2ICszNTEsMTQgQEAgc3RhdGljIGludCBod19wYXNzX3Rocm91Z2gg PSAxOwo+ICAvKiBzaV9kb21haW4gY29udGFpbnMgbXVsaXRwbGUgZGV2aWNlcyAqLwo+ICAjZGVm aW5lIERPTUFJTl9GTEFHX1NUQVRJQ19JREVOVElUWQkoMSA8PCAxKQo+ICAKPiArLyogRG9tYWlu IG1hbmFnZWQgZXh0ZXJuYWxseSwgZG9uJ3QgY2xlYW51cCBpZiBpdCBpc24ndCBhdHRhY2hlZAo+ ICsgKiB0byBhbnkgZGV2aWNlcy4gKi8KPiArI2RlZmluZSBET01BSU5fRkxBR19OT19DTEVBTlVQ CSgxIDw8IDIpCj4gKwp0aGUgbmFtZSBOT19DTEVBTlVQIGlzIGEgbGl0dGxlIGNvdW50ZXIgaW50 dWl0aXZlIHRvIG1lLCBzaG91bGQgaXQgYmUKY2FsbGVkIFVOSU5JVElBTElTRUQ/Cj4gKy8qIFNl dCBhZnRlciBkb21haW4gaW5pdGlhbGlzYXRpb24uIFVzZWQgd2hlbiBhbGxvY2F0aW5nIGRtYSBk b21haW5zCj4gdG8KPiArICogZGVmZXIgZG9tYWluIGluaXRpYWxpc2F0aW9uIHVudGlsIGl0IGlz IGF0dGFjaGVkIHRvIGEgZGV2aWNlICovCj4gKyNkZWZpbmUgRE9NQUlOX0ZMQUdfSU5JVElBTElT RUQJKDEgPDwgNCkKPiArCj4gICNkZWZpbmUgZm9yX2VhY2hfZG9tYWluX2lvbW11KGlkeCwgZG9t YWluKQkJCVwKPiAgCWZvciAoaWR4ID0gMDsgaWR4IDwgZ19udW1fb2ZfaW9tbXVzOyBpZHgrKykJ CVwKPiAgCQlpZiAoZG9tYWluLT5pb21tdV9yZWZjbnRbaWR4XSkKPiBAQCAtNjI0LDYgKzYzMiwx NiBAQCBzdGF0aWMgaW5saW5lIGludCBkb21haW5fdHlwZV9pc192bV9vcl9zaShzdHJ1Y3QKPiBk bWFyX2RvbWFpbiAqZG9tYWluKSBET01BSU5fRkxBR19TVEFUSUNfSURFTlRJVFkpOwo+ICB9Cj4g IAo+ICtzdGF0aWMgaW5saW5lIGludCBkb21haW5fbWFuYWdlZF9leHRlcm5hbGx5KHN0cnVjdCBk bWFyX2RvbWFpbgo+ICpkb21haW4pICt7Cj4gKwlyZXR1cm4gZG9tYWluLT5mbGFncyAmIERPTUFJ Tl9GTEFHX05PX0NMRUFOVVA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGRvbWFpbl9p c19pbml0aWFsaXNlZChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKPiArewo+ICsJcmV0dXJu IGRvbWFpbi0+ZmxhZ3MgJiBET01BSU5fRkxBR19JTklUSUFMSVNFRDsKPiArfQo+ICsKPiAgc3Rh dGljIGlubGluZSBpbnQgZG9tYWluX3Bmbl9zdXBwb3J0ZWQoc3RydWN0IGRtYXJfZG9tYWluICpk b21haW4sCj4gIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwZm4pCj4gIHsKPiBAQCAtMTcxNyw3 ICsxNzM1LDcgQEAgc3RhdGljIHZvaWQgZGlzYWJsZV9kbWFyX2lvbW11KHN0cnVjdAo+IGludGVs X2lvbW11ICppb21tdSkgCj4gIAkJX19kbWFyX3JlbW92ZV9vbmVfZGV2X2luZm8oaW5mbyk7Cj4g IAo+IC0JCWlmICghZG9tYWluX3R5cGVfaXNfdm1fb3Jfc2koZG9tYWluKSkgewo+ICsJCWlmICgh ZG9tYWluX21hbmFnZWRfZXh0ZXJuYWxseShkb21haW4pKSB7Cj4gIAkJCS8qCj4gIAkJCSAqIFRo ZSBkb21haW5fZXhpdCgpIGZ1bmN0aW9uICBjYW4ndCBiZQo+IGNhbGxlZCB1bmRlcgo+ICAJCQkg KiBkZXZpY2VfZG9tYWluX2xvY2ssIGFzIGl0IHRha2VzIHRoaXMgbG9jawo+IGl0c2VsZi4gQEAg LTE5NTEsNiArMTk2OSw3IEBAIHN0YXRpYyBpbnQgZG9tYWluX2luaXQoc3RydWN0Cj4gZG1hcl9k b21haW4gKmRvbWFpbiwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgZG9tYWluLT5wZ2QgPSAo c3RydWN0Cj4gZG1hX3B0ZSAqKWFsbG9jX3BndGFibGVfcGFnZShkb21haW4tPm5pZCk7IGlmICgh ZG9tYWluLT5wZ2QpCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gKwlkb21haW4tPmZsYWdzIHw9IERP TUFJTl9GTEFHX0lOSVRJQUxJU0VEOwo+ICAJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgZG9t YWluLT5wZ2QsIFBBR0VfU0laRSk7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC0zMjM0LDExICsz MjUzLDkgQEAgc3RhdGljIGludCBjb3B5X3RyYW5zbGF0aW9uX3RhYmxlcyhzdHJ1Y3QKPiBpbnRl bF9pb21tdSAqaW9tbXUpIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZG1hcnModm9pZCkKPiAgewo+ ICAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwo+IC0Jc3RydWN0IGRtYXJfcm1ycl91bml0 ICpybXJyOwo+ICAJYm9vbCBjb3BpZWRfdGFibGVzID0gZmFsc2U7Cj4gLQlzdHJ1Y3QgZGV2aWNl ICpkZXY7Cj4gIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11Owo+IC0JaW50IGksIHJldDsKPiAr CWludCByZXQ7Cj4gIAo+ICAJLyoKPiAgCSAqIGZvciBlYWNoIGRyaGQKPiBAQCAtNDUyOSw3ICs0 NTIyLDcgQEAgc3RhdGljIGludCBkZXZpY2Vfbm90aWZpZXIoc3RydWN0Cj4gbm90aWZpZXJfYmxv Y2sgKm5iLCByZXR1cm4gMDsKPiAgCj4gIAlkbWFyX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWlu LCBkZXYpOwo+IC0JaWYgKCFkb21haW5fdHlwZV9pc192bV9vcl9zaShkb21haW4pICYmCj4gbGlz dF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkKPiArCWlmICghZG9tYWluX21hbmFnZWRfZXh0ZXJu YWxseShkb21haW4pICYmCj4gbGlzdF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkgZG9tYWluX2V4 aXQoZG9tYWluKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtNDkzMCw2ICs0OTIzLDcgQEAgc3Rh dGljIGludCBtZF9kb21haW5faW5pdChzdHJ1Y3QgZG1hcl9kb21haW4KPiAqZG9tYWluLCBpbnQg Z3Vlc3Rfd2lkdGgpIGRvbWFpbi0+cGdkID0gKHN0cnVjdCBkbWFfcHRlCj4gKilhbGxvY19wZ3Rh YmxlX3BhZ2UoZG9tYWluLT5uaWQpOyBpZiAoIWRvbWFpbi0+cGdkKQo+ICAJCXJldHVybiAtRU5P TUVNOwo+ICsJZG9tYWluLT5mbGFncyB8PSBET01BSU5fRkxBR19JTklUSUFMSVNFRDsKPiAgCWRv bWFpbl9mbHVzaF9jYWNoZShkb21haW4sIGRvbWFpbi0+cGdkLCBQQUdFX1NJWkUpOwo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiBAQCAtNDkzOCwyOCArNDkzMiw2NSBAQCBzdGF0aWMgc3RydWN0IGlvbW11 X2RvbWFpbgo+ICppbnRlbF9pb21tdV9kb21haW5fYWxsb2ModW5zaWduZWQgdHlwZSkgewo+ICAJ c3RydWN0IGRtYXJfZG9tYWluICpkbWFyX2RvbWFpbjsKPiAgCXN0cnVjdCBpb21tdV9kb21haW4g KmRvbWFpbjsKPiArCWludCBmbGFncyA9IERPTUFJTl9GTEFHX05PX0NMRUFOVVA7Cj4gKwlpbnQg bmlkOwo+ICAKPiAtCWlmICh0eXBlICE9IElPTU1VX0RPTUFJTl9VTk1BTkFHRUQpCj4gLQkJcmV0 dXJuIE5VTEw7Cj4gLQo+IC0JZG1hcl9kb21haW4gPSBhbGxvY19kb21haW4oRE9NQUlOX0ZMQUdf VklSVFVBTF9NQUNISU5FKTsKPiAtCWlmICghZG1hcl9kb21haW4pIHsKPiAtCQlwcl9lcnIoIkNh bid0IGFsbG9jYXRlIGRtYXJfZG9tYWluXG4iKTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAt CWlmIChtZF9kb21haW5faW5pdChkbWFyX2RvbWFpbiwKPiBERUZBVUxUX0RPTUFJTl9BRERSRVNT X1dJRFRIKSkgewo+IC0JCXByX2VycigiRG9tYWluIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7 Cj4gLQkJZG9tYWluX2V4aXQoZG1hcl9kb21haW4pOwo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwlj YXNlIElPTU1VX0RPTUFJTl9VTk1BTkFHRUQ6Cj4gKwkJZmxhZ3MgfD0gRE9NQUlOX0ZMQUdfVklS VFVBTF9NQUNISU5FIHwKPiBET01BSU5fRkxBR19JTklUSUFMSVNFRDsKPiArCQlkbWFyX2RvbWFp biA9IGFsbG9jX2RvbWFpbihmbGFncyk7Cj4gKwkJaWYgKCFkbWFyX2RvbWFpbikgewo+ICsJCQlw cl9lcnIoIkNhbid0IGFsbG9jYXRlIGRtYXJfZG9tYWluXG4iKTsKPiArCQkJcmV0dXJuIE5VTEw7 Cj4gKwkJfQo+ICsJCWlmIChtZF9kb21haW5faW5pdChkbWFyX2RvbWFpbiwKPiBERUZBVUxUX0RP TUFJTl9BRERSRVNTX1dJRFRIKSkgewo+ICsJCQlwcl9lcnIoIkRvbWFpbiBpbml0aWFsaXphdGlv biBmYWlsZWRcbiIpOwo+ICsJCQlkb21haW5fZXhpdChkbWFyX2RvbWFpbik7Cj4gKwkJCXJldHVy biBOVUxMOwo+ICsJCX0KPiArCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkbWFyX2RvbWFpbik7 Cj4gKwkJZG9tYWluLT5nZW9tZXRyeS5hcGVydHVyZV9zdGFydCA9IDA7Cj4gKwkJZG9tYWluLT5n ZW9tZXRyeS5hcGVydHVyZV9lbmQgICA9Cj4gX19ET01BSU5fTUFYX0FERFIoZG1hcl9kb21haW4t Pmdhdyk7Cj4gKwkJZG9tYWluLT5nZW9tZXRyeS5mb3JjZV9hcGVydHVyZSA9IHRydWU7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIElPTU1VX0RPTUFJTl9ETUE6Cj4gKwkJZG1hcl9kb21haW4gPSBhbGxv Y19kb21haW4oZmxhZ3MpOwo+ICsJCWlmICghZG1hcl9kb21haW4pIHsKPiArCQkJcHJfZXJyKCJD YW4ndCBhbGxvY2F0ZSBkbWFyX2RvbWFpblxuIik7Cj4gKwkJCXJldHVybiBOVUxMOwo+ICsJCX0K PiArCQkvKiBpbml0IGRvbWFpbiBpbiBkZXZpY2UgYXR0YWNoIHdoZW4gd2Uga25vdyBJT01NVQo+ IGNhcGFiaWxpdGllcyAqLwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJT01NVV9ET01BSU5fSURFTlRJ VFk6Cj4gKwkJZmxhZ3MgfD0gRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZIHwKPiBET01BSU5f RkxBR19JTklUSUFMSVNFRDsKPiArCQlkbWFyX2RvbWFpbiA9IGFsbG9jX2RvbWFpbihmbGFncyk7 Cj4gKwkJaWYgKCFkbWFyX2RvbWFpbikgewo+ICsJCQlwcl9lcnIoIkNhbid0IGFsbG9jYXRlIGRt YXJfZG9tYWluXG4iKTsKPiArCQkJcmV0dXJuIE5VTEw7Cj4gKwkJfQo+ICsJCWlmIChtZF9kb21h aW5faW5pdChkbWFyX2RvbWFpbiwKPiBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKSkgewo+ ICsJCQlwcl9lcnIoIkRvbWFpbiBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwo+ICsJCQlkb21h aW5fZXhpdChkbWFyX2RvbWFpbik7Cj4gKwkJCXJldHVybiBOVUxMOwo+ICsJCX0KPiArCQlkb21h aW5fdXBkYXRlX2lvbW11X2NhcChkbWFyX2RvbWFpbik7Cj4gKwkJZm9yX2VhY2hfb25saW5lX25v ZGUobmlkKSB7Cj4gKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwo+ICsJCQlp bnQgaSwgcmV0Owo+ICsKPiArCQkJZm9yX2VhY2hfbWVtX3Bmbl9yYW5nZShpLCBuaWQsICZzdGFy dF9wZm4sCj4gJmVuZF9wZm4sIE5VTEwpIHsKPiArCQkJCXJldCA9Cj4gaW9tbXVfZG9tYWluX2lk ZW50aXR5X21hcChkbWFyX2RvbWFpbiwKPiArCQkJCQkJUEZOX1BIWVMoc3RhcnRfcGZuKSwKPiBQ Rk5fUEhZUyhlbmRfcGZuKSk7Cj4gKwkJCQlpZiAocmV0KQo+ICsJCQkJCXJldHVybiBOVUxMOwo+ ICsJCQl9Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiAgCQlyZXR1cm4gTlVMTDsK PiAgCX0KPiAtCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRtYXJfZG9tYWluKTsKPiAtCj4gLQlk b21haW4gPSAmZG1hcl9kb21haW4tPmRvbWFpbjsKPiAtCWRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1 cmVfc3RhcnQgPSAwOwo+IC0JZG9tYWluLT5nZW9tZXRyeS5hcGVydHVyZV9lbmQgICA9Cj4gX19E T01BSU5fTUFYX0FERFIoZG1hcl9kb21haW4tPmdhdyk7Cj4gLQlkb21haW4tPmdlb21ldHJ5LmZv cmNlX2FwZXJ0dXJlID0gdHJ1ZTsKPiAgCj4gLQlyZXR1cm4gZG9tYWluOwo+ICsJcmV0dXJuICZk bWFyX2RvbWFpbi0+ZG9tYWluOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbnRlbF9pb21tdV9k b21haW5fZnJlZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCj4gQEAgLTQ5NzQsNiArNTAw NSw5IEBAIHN0YXRpYyBpbnQgaW50ZWxfaW9tbXVfYXR0YWNoX2RldmljZShzdHJ1Y3QKPiBpb21t dV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKPiAgCWludCBhZGRy X3dpZHRoOwo+ICAJdTggYnVzLCBkZXZmbjsKPiArCXN0cnVjdCBkbWFyX3JtcnJfdW5pdCAqcm1y cjsKPiArCXN0cnVjdCBkZXZpY2UgKmlfZGV2Owo+ICsJaW50IGksIHJldDsKPiAgCj4gIAlpZiAo ZGV2aWNlX2lzX3JtcnJfbG9ja2VkKGRldikpIHsKPiAgCQlkZXZfd2FybihkZXYsICJEZXZpY2Ug aXMgaW5lbGlnaWJsZSBmb3IgSU9NTVUgZG9tYWluCj4gYXR0YWNoIGR1ZSB0byBwbGF0Zm9ybSBS TVJSIHJlcXVpcmVtZW50LiAgQ29udGFjdCB5b3VyIHBsYXRmb3JtCj4gdmVuZG9yLlxuIik7IEBA IC00OTkwLDggKzUwMjQsOCBAQCBzdGF0aWMgaW50Cj4gaW50ZWxfaW9tbXVfYXR0YWNoX2Rldmlj ZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCj4gZG1hcl9yZW1vdmVfb25lX2Rldl9pbmZv KG9sZF9kb21haW4sIGRldik7IHJjdV9yZWFkX3VubG9jaygpOyAKPiAtCQkJaWYgKCFkb21haW5f dHlwZV9pc192bV9vcl9zaShvbGRfZG9tYWluKSAmJgo+IC0JCQkgICAgIGxpc3RfZW1wdHkoJm9s ZF9kb21haW4tPmRldmljZXMpKQo+ICsJCQlpZiAobGlzdF9lbXB0eSgmb2xkX2RvbWFpbi0+ZGV2 aWNlcykgJiYKPiArCQkJICAgICAhZG9tYWluX21hbmFnZWRfZXh0ZXJuYWxseShvbGRfZG9tYWlu KSkKPiAgCQkJCWRvbWFpbl9leGl0KG9sZF9kb21haW4pOwpJZiB0aGUgb2xkX2RvbWFpbiBpcyBh bGxvY2F0ZWQgYnkgbGF6eSBETUEgbWFwIGNhbGwsIHRoZSBkZWZhdWx0IGRvbWFpbgppcyBub3Qg dXNlZCBpbiBhbnkgY2FzZSwgcmlnaHQ/IHdoeSBjYW4ndCB5b3UgdXNlIHRoZSBkZWZhdWx0IGRv bWFpbgpmb3IgbWFwIGNhbGw/IEkgZ3Vlc3MgdGhhdCBpcyB0aGUgbmV4dCBzdGVwPwo+ICAJCX0K PiAgCX0KPiBAQCAtNTAwMCw2ICs1MDM0LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxfaW9tbXVfYXR0 YWNoX2RldmljZShzdHJ1Y3QKPiBpb21tdV9kb21haW4gKmRvbWFpbiwgaWYgKCFpb21tdSkKPiAg CQlyZXR1cm4gLUVOT0RFVjsKPiAgCj4gKwkvKiBJbml0aWFsaXNlIGRvbWFpbiB3aXRoIElPTU1V IGNhcGFiaWxpdGllcyBpZiBpdCBpc24ndAo+IGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KPiArCWlm ICghZG9tYWluX2lzX2luaXRpYWxpc2VkKGRtYXJfZG9tYWluKSkgewo+ICsJCWlmIChkb21haW5f aW5pdChkbWFyX2RvbWFpbiwgaW9tbXUsCj4gREVGQVVMVF9ET01BSU5fQUREUkVTU19XSURUSCkp Cj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiAgCS8qIGNoZWNrIGlmIHRoaXMgaW9t bXUgYWdhdyBpcyBzdWZmaWNpZW50IGZvciBtYXggbWFwcGVkCj4gYWRkcmVzcyAqLyBhZGRyX3dp ZHRoID0gYWdhd190b193aWR0aChpb21tdS0+YWdhdyk7Cj4gIAlpZiAoYWRkcl93aWR0aCA+IGNh cF9tZ2F3KGlvbW11LT5jYXApKQo+IEBAIC01MDI4LDYgKzUwNjgsMjcgQEAgc3RhdGljIGludCBp bnRlbF9pb21tdV9hdHRhY2hfZGV2aWNlKHN0cnVjdAo+IGlvbW11X2RvbWFpbiAqZG9tYWluLCBk bWFyX2RvbWFpbi0+YWdhdy0tOwo+ICAJfQo+ICAKPiArCWlmIChkb21haW5fdHlwZV9pc192bV9v cl9zaShkbWFyX2RvbWFpbikpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJLyogRW5zdXJlIERNQSBk b21haW4gaGFzIGRldmljZXMgUk1SUiAqLwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICsJZm9yX2Vh Y2hfcm1ycl91bml0cyhybXJyKSB7Cj4gKwkJZm9yX2VhY2hfYWN0aXZlX2Rldl9zY29wZShybXJy LT5kZXZpY2VzLAo+IHJtcnItPmRldmljZXNfY250LAo+ICsJCQkJCSAgaSwgaV9kZXYpIHsKPiAr CQkJaWYgKGlfZGV2ICE9IGRldikKd2h5IGRvIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBhbGwgZGV2 aWNlcywgY2FuIHdlIGRlZHVjZSB0aGUgaW5mb3JtYXRpb24KZnJvbSBkZXZpY2VfZG9tYWluX2lu Zm8/IElmIFJNUlIgaXMgYWxyZWFkeSBtYXBwZWQgZHVyaW5nIGluaXRfZG1hci4KPiArCQkJCWNv bnRpbnVlOwo+ICsKPiArCQkJcmV0ID0gZG9tYWluX3ByZXBhcmVfaWRlbnRpdHlfbWFwKGRldiwK PiBkbWFyX2RvbWFpbiwKPiArCj4gcm1yci0+YmFzZV9hZGRyZXNzLAo+ICsKPiBybXJyLT5lbmRf YWRkcmVzcyk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlkZXZfZXJyKGRldiwgIk1hcHBpbmcgcmVz ZXJ2ZWQKPiByZWdpb24gZmFpbGVkXG4iKTsKPiArCQl9Cj4gKwl9Cj4gKwlyY3VfcmVhZF91bmxv Y2soKTsKPiArCj4gK291dDoKSXNuJ3QgaXQgZHVwbGljYXRlIHdpdGggdGhlIFJNUlIgc2V0dXAg aW4gaW5pdF9kbWFycz8gSSBhbSBndWVzc2luZywKZm9yIGRldmljZSB3aXRoIFJNUlIsIHdlIGNh biByZXVzZSB0aGUgZG9tYWluIHNldHVwIHVwIGR1cmluZyBpbml0CnRpbWUsIGp1c3QgaW5oZXJp dCB0aGUgbWFwcGluZ3MuCgo+ICAJcmV0dXJuIGRvbWFpbl9hZGRfZGV2X2luZm8oZG1hcl9kb21h aW4sIGRldik7Cj4gIH0KPiAgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9p b21tdQ==