From: Jordan Crouse Subject: [PATCH 04/16] iommu: sva: Add support for private PASIDs Date: Fri, 18 May 2018 15:34:48 -0600 Message-ID: <20180518213500.31595-5-jcrouse@codeaurora.org> References: <20180518213500.31595-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180518213500.31595-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: dri-devel@lists.freedesktop.org U29tZSBvbGRlciBTTU1VIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCBoYXZlIGEgZnVsbHkg ZmVhdHVyZWQKaGFyZHdhcmUgUEFTSUQgZmVhdHVyZXMgaGF2ZSBhbHRlcm5hdGUgd29ya2Fyb3Vu ZHMgZm9yIHVzaW5nIG11bHRpcGxlCnBhZ2V0YWJsZXMuIEZvciBleGFtcGxlLCBNU00gR1BVcyBo YXZlIGxvZ2ljIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRoZQp1c2VyIHBhZ2V0YWJsZSBmcm9t IGhhcmR3YXJlIGJ5IHdyaXRpbmcgdGhlIGNvbnRleHQgYmFuayBkaXJlY3RseS4KClN1cHBvcnQg cHJpdmF0ZSBQQVNJRHMgYnkgY3JlYXRpbmcgYSBuZXcgaW8tcGd0YWJsZSBpbnN0YW5jZSBtYXAg aXQKdG8gYSBQQVNJRCBhbmQgcHJvdmlkZSB0aGUgQVBJcyBmb3IgZHJpdmVycyB0byBwb3B1bGF0 ZSBpdCBtYW51YWxseS4KClNpZ25lZC1vZmYtYnk6IEpvcmRhbiBDcm91c2UgPGpjcm91c2VAY29k ZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9pb21tdS9pb21tdS1zdmEuYyB8IDEzOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogZHJpdmVycy9pb21tdS9pb21tdS5jICAg ICB8ICA2NiArKysrKysrKysrKysrLS0tLS0KIGluY2x1ZGUvbGludXgvaW9tbXUuaCAgICAgfCAg NzQgKysrKysrKysrKysrKysrKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlvbnMo KyksIDI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW9tbXUtc3Zh LmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LXN2YS5jCmluZGV4IGU5OGI5OTRjMTVmMS4uMjZmMGRh OTY5MmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LXN2YS5jCisrKyBiL2RyaXZl cnMvaW9tbXUvaW9tbXUtc3ZhLmMKQEAgLTE1Niw2ICsxNTYsNyBAQCBpb19tbV9hbGxvYyhzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldiwKIAltbWdyYWIobW0p OwogCiAJaW9fbW0tPmZsYWdzCQk9IGZsYWdzOworCWlvX21tLT50eXBlCQk9IElPX1RZUEVfU0hB UkVEOwogCWlvX21tLT5tbQkJPSBtbTsKIAlpb19tbS0+bm90aWZpZXIub3BzCT0gJmlvbW11X21t dV9ub3RpZmllcjsKIAlpb19tbS0+cmVsZWFzZQkJPSBkb21haW4tPm9wcy0+bW1fZnJlZTsKQEAg LTU0NCwxMyArNTQ1LDEwIEBAIGludCBpb21tdV9zdmFfZGV2aWNlX2luaXQoc3RydWN0IGRldmlj ZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZlYXR1cmVzLAogCQkJICB1bnNpZ25lZCBpbnQgbWF4X3Bh c2lkLAogCQkJICBpb21tdV9tbV9leGl0X2hhbmRsZXJfdCBtbV9leGl0KQogewotCWludCByZXQ7 CisJaW50IHJldCA9IDA7CiAJc3RydWN0IGlvbW11X3N2YV9wYXJhbSAqcGFyYW07CiAJc3RydWN0 IGlvbW11X2RvbWFpbiAqZG9tYWluID0gaW9tbXVfZ2V0X2RvbWFpbl9mb3JfZGV2KGRldik7CiAK LQlpZiAoIWRvbWFpbiB8fCAhZG9tYWluLT5vcHMtPnN2YV9kZXZpY2VfaW5pdCkKLQkJcmV0dXJu IC1FTk9ERVY7Ci0KIAlpZiAoZmVhdHVyZXMgJiB+SU9NTVVfU1ZBX0ZFQVRfSU9QRikKIAkJcmV0 dXJuIC1FSU5WQUw7CiAKQEAgLTU3Niw5ICs1NzQsMTIgQEAgaW50IGlvbW11X3N2YV9kZXZpY2Vf aW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsCiAJICogSU9N TVUgZHJpdmVyIHVwZGF0ZXMgdGhlIGxpbWl0cyBkZXBlbmRpbmcgb24gdGhlIElPTU1VIGFuZCBk ZXZpY2UKIAkgKiBjYXBhYmlsaXRpZXMuCiAJICovCi0JcmV0ID0gZG9tYWluLT5vcHMtPnN2YV9k ZXZpY2VfaW5pdChkZXYsIHBhcmFtKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX3BhcmFt OworCisJaWYgKGRvbWFpbiAmJiBkb21haW4tPm9wcy0+c3ZhX2RldmljZV9pbml0KSB7CisJCXJl dCA9IGRvbWFpbi0+b3BzLT5zdmFfZGV2aWNlX2luaXQoZGV2LCBwYXJhbSk7CisJCWlmIChyZXQp CisJCQlnb3RvIGVycl9mcmVlX3BhcmFtOworCX0KIAogCW11dGV4X2xvY2soJmRldi0+aW9tbXVf cGFyYW0tPmxvY2spOwogCWlmIChkZXYtPmlvbW11X3BhcmFtLT5zdmFfcGFyYW0pCkBAIC03OTAs MyArNzkxLDEyNyBAQCBzdHJ1Y3QgbW1fc3RydWN0ICppb21tdV9zdmFfZmluZChpbnQgcGFzaWQp CiAJcmV0dXJuIG1tOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfc3ZhX2ZpbmQpOworCitp bnQgaW9tbXVfc3ZhX2FsbG9jX3Bhc2lkKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgc3Ry dWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQsIHBhc2lkOworCXN0cnVjdCBpb19tbSAqaW9f bW07CisJc3RydWN0IGlvbW11X3N2YV9wYXJhbSAqcGFyYW0gPSBkZXYtPmlvbW11X3BhcmFtLT5z dmFfcGFyYW07CisKKwlpZiAoIWRvbWFpbi0+b3BzLT5tbV9hdHRhY2ggfHwgIWRvbWFpbi0+b3Bz LT5tbV9kZXRhY2gpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGRvbWFpbi0+b3BzLT5tbV9h bGxvYykKKwkJaW9fbW0gPSBkb21haW4tPm9wcy0+bW1fYWxsb2MoZG9tYWluLCBOVUxMLCAwKTsK KwllbHNlCisJCWlvX21tID0ga3phbGxvYyhzaXplb2YoKmlvX21tKSwgR0ZQX0tFUk5FTCk7CisK KwlpZiAoSVNfRVJSKGlvX21tKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW9fbW0pOworCWlmICghaW9f bW0pCisJCXJldHVybiAtRU5PTUVNOworCisJaW9fbW0tPmRvbWFpbiA9IGRvbWFpbjsKKwlpb19t bS0+dHlwZSA9IElPX1RZUEVfUFJJVkFURTsKKworCWlkcl9wcmVsb2FkKEdGUF9LRVJORUwpOwor CXNwaW5fbG9jaygmaW9tbXVfc3ZhX2xvY2spOworCXBhc2lkID0gaWRyX2FsbG9jX2N5Y2xpYygm aW9tbXVfcGFzaWRfaWRyLCBpb19tbSwgcGFyYW0tPm1pbl9wYXNpZCwKKwkJcGFyYW0tPm1heF9w YXNpZCArIDEsIEdGUF9BVE9NSUMpOworCWlvX21tLT5wYXNpZCA9IHBhc2lkOworCXNwaW5fdW5s b2NrKCZpb21tdV9zdmFfbG9jayk7CisJaWRyX3ByZWxvYWRfZW5kKCk7CisKKwlpZiAocGFzaWQg PCAwKSB7CisJCWtmcmVlKGlvX21tKTsKKwkJcmV0dXJuIHBhc2lkOworCX0KKworCXJldCA9IGRv bWFpbi0+b3BzLT5tbV9hdHRhY2goZG9tYWluLCBkZXYsIGlvX21tLCBmYWxzZSk7CisJaWYgKCFy ZXQpCisJCXJldHVybiBwYXNpZDsKKworCXNwaW5fbG9jaygmaW9tbXVfc3ZhX2xvY2spOworCWlk cl9yZW1vdmUoJmlvbW11X3Bhc2lkX2lkciwgaW9fbW0tPnBhc2lkKTsKKwlzcGluX3VubG9jaygm aW9tbXVfc3ZhX2xvY2spOworCisJaWYgKGRvbWFpbi0+b3BzLT5tbV9mcmVlKQorCQlkb21haW4t Pm9wcy0+bW1fZnJlZShpb19tbSk7CisJZWxzZQorCQlrZnJlZShpb19tbSk7CisKKwlyZXR1cm4g cmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfc3ZhX2FsbG9jX3Bhc2lkKTsKKworc3Rh dGljIHN0cnVjdCBpb19tbSAqZ2V0X2lvX21tKGludCBwYXNpZCkKK3sKKwlzdHJ1Y3QgaW9fbW0g KmlvX21tOworCisJc3Bpbl9sb2NrKCZpb21tdV9zdmFfbG9jayk7CisJaW9fbW0gPSBpZHJfZmlu ZCgmaW9tbXVfcGFzaWRfaWRyLCBwYXNpZCk7CisJc3Bpbl91bmxvY2soJmlvbW11X3N2YV9sb2Nr KTsKKworCXJldHVybiBpb19tbTsKK30KKworaW50IGlvbW11X3N2YV9tYXAoaW50IHBhc2lkLCB1 bnNpZ25lZCBsb25nIGlvdmEsCisJICAgICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXpl LCBpbnQgcHJvdCkKK3sKKwlzdHJ1Y3QgaW9fbW0gKmlvX21tID0gZ2V0X2lvX21tKHBhc2lkKTsK KworCWlmICghaW9fbW0gfHwgaW9fbW0tPnR5cGUgIT0gSU9fVFlQRV9QUklWQVRFKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXJldHVybiBfX2lvbW11X21hcChpb19tbS0+ZG9tYWluLCAmcGFzaWQs IGlvdmEsIHBhZGRyLCBzaXplLCBwcm90KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3N2 YV9tYXApOworCitzaXplX3QgaW9tbXVfc3ZhX21hcF9zZyhpbnQgcGFzaWQsIHVuc2lnbmVkIGxv bmcgaW92YSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJdW5zaWduZWQgaW50IG5lbnRzLCBp bnQgcHJvdCkKK3sKKwlzdHJ1Y3QgaW9fbW0gKmlvX21tID0gZ2V0X2lvX21tKHBhc2lkKTsKKwlz dHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47CisKKwlpZiAoIWlvX21tIHx8IGlvX21tLT50eXBl ICE9IElPX1RZUEVfUFJJVkFURSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb21haW4gPSBpb19t bS0+ZG9tYWluOworCisJcmV0dXJuIGRvbWFpbi0+b3BzLT5tYXBfc2coZG9tYWluLCAmcGFzaWQs IGlvdmEsIHNnLCBuZW50cywgcHJvdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9zdmFf bWFwX3NnKTsKKworc2l6ZV90IGlvbW11X3N2YV91bm1hcChpbnQgcGFzaWQsIHVuc2lnbmVkIGxv bmcgaW92YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGlvX21tICppb19tbSA9IGdldF9pb19t bShwYXNpZCk7CisKKwlpZiAoIWlvX21tIHx8IGlvX21tLT50eXBlICE9IElPX1RZUEVfUFJJVkFU RSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gX19pb21tdV91bm1hcChpb19tbS0+ZG9t YWluLCAmcGFzaWQsIGlvdmEsIHNpemUsIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlv bW11X3N2YV91bm1hcCk7CisKK3ZvaWQgaW9tbXVfc3ZhX2ZyZWVfcGFzaWQoaW50IHBhc2lkLCBz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlvX21tICppb19tbSA9IGdldF9pb19tbShw YXNpZCk7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCisJaWYgKCFpb19tbSB8fCBp b19tbS0+dHlwZSAhPSBJT19UWVBFX1BSSVZBVEUpCisJCXJldHVybjsKKworCWRvbWFpbiA9IGlv X21tLT5kb21haW47CisKKwlkb21haW4tPm9wcy0+bW1fZGV0YWNoKGRvbWFpbiwgZGV2LCBpb19t bSwgZmFsc2UpOworCisJc3Bpbl9sb2NrKCZpb21tdV9zdmFfbG9jayk7CisJaWRyX3JlbW92ZSgm aW9tbXVfcGFzaWRfaWRyLCBpb19tbS0+cGFzaWQpOworCXNwaW5fdW5sb2NrKCZpb21tdV9zdmFf bG9jayk7CisKKwlpZiAoZG9tYWluLT5vcHMtPm1tX2ZyZWUpCisJCWRvbWFpbi0+b3BzLT5tbV9m cmVlKGlvX21tKTsKKwllbHNlCisJCWtmcmVlKGlvX21tKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGlvbW11X3N2YV9mcmVlX3Bhc2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW9tbXUu YyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwppbmRleCAxM2Y3MDVkZjA3MjUuLjBiYTNkMjdmMjMw MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUv aW9tbXUuYwpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgc3RhdGljIHNpemVfdCBpb21tdV9wZ3NpemUo c3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCXJldHVybiBwZ3NpemU7CiB9CiAKLWludCBp b21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEs CitpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBpbnQgKnBhc2lk LCB1bnNpZ25lZCBsb25nIGlvdmEsCiAJICAgICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBz aXplLCBpbnQgcHJvdCkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfaW92YSA9IGlvdmE7CkBAIC0x ODAxLDEwICsxODAxLDE3IEBAIGludCBpb21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCiAJcGh5c19hZGRyX3Qgb3JpZ19wYWRkciA9IHBhZGRy OwogCWludCByZXQgPSAwOwogCi0JaWYgKHVubGlrZWx5KGRvbWFpbi0+b3BzLT5tYXAgPT0gTlVM TCB8fAotCQkgICAgIGRvbWFpbi0+cGdzaXplX2JpdG1hcCA9PSAwVUwpKQorCWlmICh1bmxpa2Vs eShkb21haW4tPnBnc2l6ZV9iaXRtYXAgPT0gMFVMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlp ZiAocGFzaWQpIHsKKwkJaWYgKHVubGlrZWx5KGRvbWFpbi0+b3BzLT5zdmFfbWFwID09IE5VTEwp KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGRvbWFpbi0+ b3BzLT5tYXAgPT0gTlVMTCkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlpZiAodW5saWtl bHkoIShkb21haW4tPnR5cGUgJiBfX0lPTU1VX0RPTUFJTl9QQUdJTkcpKSkKIAkJcmV0dXJuIC1F SU5WQUw7CiAKQEAgLTE4MzAsNyArMTgzNywxMyBAQCBpbnQgaW9tbXVfbWFwKHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQlwcl9kZWJ1ZygibWFwcGlu ZzogaW92YSAweCVseCBwYSAlcGEgcGdzaXplIDB4JXp4XG4iLAogCQkJIGlvdmEsICZwYWRkciwg cGdzaXplKTsKIAotCQlyZXQgPSBkb21haW4tPm9wcy0+bWFwKGRvbWFpbiwgaW92YSwgcGFkZHIs IHBnc2l6ZSwgcHJvdCk7CisJCWlmIChwYXNpZCkKKwkJCXJldCA9IGRvbWFpbi0+b3BzLT5zdmFf bWFwKGRvbWFpbiwgKnBhc2lkLCBpb3ZhLCBwYWRkciwKKwkJCQlwZ3NpemUsIHByb3QpOworCQll bHNlCisJCQlyZXQgPSBkb21haW4tPm9wcy0+bWFwKGRvbWFpbiwgaW92YSwgcGFkZHIsIHBnc2l6 ZSwKKwkJCQlwcm90KTsKKwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKQEAgLTE4NDEsMTYgKzE4 NTQsMjMgQEAgaW50IGlvbW11X21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2ln bmVkIGxvbmcgaW92YSwKIAogCS8qIHVucm9sbCBtYXBwaW5nIGluIGNhc2Ugc29tZXRoaW5nIHdl bnQgd3JvbmcgKi8KIAlpZiAocmV0KQotCQlpb21tdV91bm1hcChkb21haW4sIG9yaWdfaW92YSwg b3JpZ19zaXplIC0gc2l6ZSk7CisJCV9faW9tbXVfdW5tYXAoZG9tYWluLCBwYXNpZCwgb3JpZ19p b3ZhLCBvcmlnX3NpemUgLSBzaXplLAorCQkJcGFzaWQgPyBmYWxzZSA6IHRydWUpOwogCWVsc2UK IAkJdHJhY2VfbWFwKG9yaWdfaW92YSwgb3JpZ19wYWRkciwgb3JpZ19zaXplKTsKIAogCXJldHVy biByZXQ7CiB9CisKK2ludCBpb21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1 bnNpZ25lZCBsb25nIGlvdmEsCisJICAgICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXpl LCBpbnQgcHJvdCkKK3sKKwlyZXR1cm4gX19pb21tdV9tYXAoZG9tYWluLCBOVUxMLCBpb3ZhLCBw YWRkciwgc2l6ZSwgcHJvdCk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9tYXApOwogCi1z dGF0aWMgc2l6ZV90IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAot CQkJICAgIHVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUsCitzaXplX3QgX19pb21tdV91 bm1hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkgICAgaW50ICpwYXNpZCwgdW5z aWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICBib29sIHN5bmMpCiB7CiAJY29u c3Qgc3RydWN0IGlvbW11X29wcyAqb3BzID0gZG9tYWluLT5vcHM7CkBAIC0xODU4LDkgKzE4Nzgs MTYgQEAgc3RhdGljIHNpemVfdCBfX2lvbW11X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRv bWFpbiwKIAl1bnNpZ25lZCBsb25nIG9yaWdfaW92YSA9IGlvdmE7CiAJdW5zaWduZWQgaW50IG1p bl9wYWdlc3o7CiAKLQlpZiAodW5saWtlbHkob3BzLT51bm1hcCA9PSBOVUxMIHx8Ci0JCSAgICAg ZG9tYWluLT5wZ3NpemVfYml0bWFwID09IDBVTCkpCi0JCXJldHVybiAwOworCWlmICh1bmxpa2Vs eShkb21haW4tPnBnc2l6ZV9iaXRtYXAgPT0gMFVMKSkKKwkJcmV0dXJuIC0wOworCisJaWYgKHBh c2lkKSB7CisJCWlmICh1bmxpa2VseShkb21haW4tPm9wcy0+c3ZhX3VubWFwID09IE5VTEwpKQor CQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGRvbWFpbi0+b3BzLT51bm1h cCA9PSBOVUxMKSkKKwkJCXJldHVybiAwOworCX0KIAogCWlmICh1bmxpa2VseSghKGRvbWFpbi0+ dHlwZSAmIF9fSU9NTVVfRE9NQUlOX1BBR0lORykpKQogCQlyZXR1cm4gMDsKQEAgLTE4ODgsNyAr MTkxNSwxMiBAQCBzdGF0aWMgc2l6ZV90IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFp biAqZG9tYWluLAogCXdoaWxlICh1bm1hcHBlZCA8IHNpemUpIHsKIAkJc2l6ZV90IHBnc2l6ZSA9 IGlvbW11X3Bnc2l6ZShkb21haW4sIGlvdmEsIHNpemUgLSB1bm1hcHBlZCk7CiAKLQkJdW5tYXBw ZWRfcGFnZSA9IG9wcy0+dW5tYXAoZG9tYWluLCBpb3ZhLCBwZ3NpemUpOworCQlpZiAocGFzaWQp CisJCQl1bm1hcHBlZF9wYWdlID0gb3BzLT5zdmFfdW5tYXAoZG9tYWluLCAqcGFzaWQsIGlvdmEs CisJCQkJcGdzaXplKTsKKwkJZWxzZQorCQkJdW5tYXBwZWRfcGFnZSA9IG9wcy0+dW5tYXAoZG9t YWluLCBpb3ZhLCBwZ3NpemUpOworCiAJCWlmICghdW5tYXBwZWRfcGFnZSkKIAkJCWJyZWFrOwog CkBAIC0xOTEyLDE5ICsxOTQ0LDIwIEBAIHN0YXRpYyBzaXplX3QgX19pb21tdV91bm1hcChzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiBzaXplX3QgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11 X2RvbWFpbiAqZG9tYWluLAogCQkgICB1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplKQog ewotCXJldHVybiBfX2lvbW11X3VubWFwKGRvbWFpbiwgaW92YSwgc2l6ZSwgdHJ1ZSk7CisJcmV0 dXJuIF9faW9tbXVfdW5tYXAoZG9tYWluLCBOVUxMLCBpb3ZhLCBzaXplLCB0cnVlKTsKIH0KIEVY UE9SVF9TWU1CT0xfR1BMKGlvbW11X3VubWFwKTsKIAogc2l6ZV90IGlvbW11X3VubWFwX2Zhc3Qo c3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJdW5zaWduZWQgbG9uZyBpb3ZhLCBzaXpl X3Qgc2l6ZSkKIHsKLQlyZXR1cm4gX19pb21tdV91bm1hcChkb21haW4sIGlvdmEsIHNpemUsIGZh bHNlKTsKKwlyZXR1cm4gX19pb21tdV91bm1hcChkb21haW4sIE5VTEwsIGlvdmEsIHNpemUsIGZh bHNlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3VubWFwX2Zhc3QpOwogCi1zaXplX3Qg ZGVmYXVsdF9pb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25l ZCBsb25nIGlvdmEsCi0JCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5l bnRzLCBpbnQgcHJvdCkKK3NpemVfdCBkZWZhdWx0X2lvbW11X21hcF9zZyhzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW4sIGludCAqcGFzaWQsCisJCQkgdW5zaWduZWQgbG9uZyBpb3ZhLCBzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpCiB7 CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCXNpemVfdCBtYXBwZWQgPSAwOwpAQCAtMTk0OCw3 ICsxOTgxLDggQEAgc2l6ZV90IGRlZmF1bHRfaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21h aW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQlpZiAoIUlTX0FMSUdORUQocy0+b2Zm c2V0LCBtaW5fcGFnZXN6KSkKIAkJCWdvdG8gb3V0X2VycjsKIAotCQlyZXQgPSBpb21tdV9tYXAo ZG9tYWluLCBpb3ZhICsgbWFwcGVkLCBwaHlzLCBzLT5sZW5ndGgsIHByb3QpOworCQlyZXQgPSBf X2lvbW11X21hcChkb21haW4sIHBhc2lkLCBpb3ZhICsgbWFwcGVkLCBwaHlzLCBzLT5sZW5ndGgs CisJCQlwcm90KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2VycjsKIApkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCmluZGV4IDM2NjI1 NGU0YjA3Zi4uM2Q3MmQ2MzZjMTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbW11LmgK KysrIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCkBAIC0xMDgsNyArMTA4LDEzIEBAIHN0cnVjdCBp b21tdV9kb21haW4gewogCXN0cnVjdCBsaXN0X2hlYWQgbW1fbGlzdDsKIH07CiAKK2VudW0gaW9t bXVfaW9fdHlwZSB7CisJSU9fVFlQRV9TSEFSRUQsCisJSU9fVFlQRV9QUklWQVRFLAorfTsKKwog c3RydWN0IGlvX21tIHsKKwllbnVtIGlvbW11X2lvX3R5cGUJdHlwZTsKIAlpbnQJCQlwYXNpZDsK IAkvKiBJT01NVV9TVkFfRkVBVF8qICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CkBAIC0xMjMs NiArMTI5LDkgQEAgc3RydWN0IGlvX21tIHsKIAl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGlvX21t ICppb19tbSk7CiAJLyogRm9yIHBvc3Rwb25lZCByZWxlYXNlICovCiAJc3RydWN0IHJjdV9oZWFk CQlyY3U7CisKKwkvKiBUaGlzIGlzIHVzZWQgYnkgcHJpdmF0ZSBlbnRyaWVzICovCisJc3RydWN0 IGlvbW11X2RvbWFpbiAqZG9tYWluOwogfTsKIAogZW51bSBpb21tdV9jYXAgewpAQCAtMzE1LDgg KzMyNCw5IEBAIHN0cnVjdCBpb21tdV9vcHMgewogCQkgICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6 ZV90IHNpemUsIGludCBwcm90KTsKIAlzaXplX3QgKCp1bm1hcCkoc3RydWN0IGlvbW11X2RvbWFp biAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCiAJCSAgICAgc2l6ZV90IHNpemUpOwotCXNp emVfdCAoKm1hcF9zZykoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25n IGlvdmEsCi0JCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzLCBp bnQgcHJvdCk7CisJc2l6ZV90ICgqbWFwX3NnKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4s IGludCAqcGFzaWQsCisJCQkgdW5zaWduZWQgbG9uZyBpb3ZhLCBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnLAorCQkJIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpOwogCXZvaWQgKCpmbHVzaF9p b3RsYl9hbGwpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbik7CiAJdm9pZCAoKmlvdGxiX3Jh bmdlX2FkZCkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCXVuc2lnbmVkIGxvbmcg aW92YSwgc2l6ZV90IHNpemUpOwpAQCAtMzU4LDYgKzM2OCwxMiBAQCBzdHJ1Y3QgaW9tbXVfb3Bz IHsKIAkJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGxiX2ludmFsaWRhdGVfaW5mbyAqaW52 X2luZm8pOwogCWludCAoKnBhZ2VfcmVzcG9uc2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IHBhZ2VfcmVzcG9uc2VfbXNnICptc2cpOwogCisJaW50ICgqc3ZhX21hcCkoc3RydWN0IGlvbW11 X2RvbWFpbiAqZG9tYWluLCBpbnQgcGFzaWQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGlvdmEs IHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgIGludCBwcm90KTsKKwlz aXplX3QgKCpzdmFfdW5tYXApKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgaW50IHBhc2lk LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUpOworCiAJdW5zaWduZWQg bG9uZyBwZ3NpemVfYml0bWFwOwogfTsKIApAQCAtNTQ4LDkgKzU2NCw5IEBAIGV4dGVybiBzaXpl X3QgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25n IGlvdmEsCiAJCQkgIHNpemVfdCBzaXplKTsKIGV4dGVybiBzaXplX3QgaW9tbXVfdW5tYXBfZmFz dChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBp b3ZhLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gc2l6ZV90IGRlZmF1bHRfaW9tbXVfbWFwX3NnKHN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAotCQkJCXN0cnVj dCBzY2F0dGVybGlzdCAqc2csdW5zaWduZWQgaW50IG5lbnRzLAotCQkJCWludCBwcm90KTsKK2V4 dGVybiBzaXplX3QgZGVmYXVsdF9pb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLCBpbnQgKnBhc2lkLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW92YSwgc3RydWN0IHNjYXR0 ZXJsaXN0ICpzZywKKwkJCQkgICB1bnNpZ25lZCBpbnQgbmVudHMsIGludCBwcm90KTsKIGV4dGVy biBwaHlzX2FkZHJfdCBpb21tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLCBkbWFfYWRkcl90IGlvdmEpOwogZXh0ZXJuIHZvaWQgaW9tbXVfc2V0X2ZhdWx0X2hhbmRs ZXIoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJaW9tbXVfZmF1bHRfaGFuZGxlcl90 IGhhbmRsZXIsIHZvaWQgKnRva2VuKTsKQEAgLTYzNiw3ICs2NTIsNyBAQCBzdGF0aWMgaW5saW5l IHNpemVfdCBpb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCSAg dW5zaWduZWQgbG9uZyBpb3ZhLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQkJCSAgdW5zaWdu ZWQgaW50IG5lbnRzLCBpbnQgcHJvdCkKIHsKLQlyZXR1cm4gZG9tYWluLT5vcHMtPm1hcF9zZyhk b21haW4sIGlvdmEsIHNnLCBuZW50cywgcHJvdCk7CisJcmV0dXJuIGRvbWFpbi0+b3BzLT5tYXBf c2coZG9tYWluLCBOVUxMLCBpb3ZhLCBzZywgbmVudHMsIHByb3QpOwogfQogCiAvKiBQQ0kgZGV2 aWNlIGdyb3VwaW5nIGZ1bmN0aW9uICovCkBAIC02NzYsNiArNjkyLDE0IEBAIGV4dGVybiBpbnQg aW9tbXVfc3ZhX2JpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1tX3N0cnVj dCAqbW0sCiAJCQkJaW50ICpwYXNpZCwgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqZHJ2ZGF0 YSk7CiBleHRlcm4gaW50IGlvbW11X3N2YV91bmJpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRl diwgaW50IHBhc2lkKTsKIAorLyogQ29tbW9uIG1hcCBhbmQgdW5tYXAgZnVuY3Rpb25zICovCitl eHRlcm4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgaW50ICpw YXNpZCwKKwkJdW5zaWduZWQgbG9uZyBpb3ZhLCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNp emUsIGludCBwcm90KTsKKworZXh0ZXJuIHNpemVfdCBfX2lvbW11X3VubWFwKHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICBpbnQgKnBhc2lkLCB1bnNpZ25lZCBsb25nIGlvdmEs IHNpemVfdCBzaXplLAorCQkJICAgIGJvb2wgc3luYyk7CisKICNlbHNlIC8qIENPTkZJR19JT01N VV9BUEkgKi8KIAogc3RydWN0IGlvbW11X29wcyB7fTsKQEAgLTEwMjcsNiArMTA1MSwxNiBAQCBl eHRlcm4gaW50IF9faW9tbXVfc3ZhX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBp bnQgcGFzaWQpOwogZXh0ZXJuIHZvaWQgX19pb21tdV9zdmFfdW5iaW5kX2Rldl9hbGwoc3RydWN0 IGRldmljZSAqZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmlvbW11X3N2YV9maW5k KGludCBwYXNpZCk7CisKK2V4dGVybiBpbnQgaW9tbXVfc3ZhX2FsbG9jX3Bhc2lkKHN0cnVjdCBp b21tdV9kb21haW4gKmRvbWFpbiwKKwkJc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQg aW9tbXVfc3ZhX21hcChpbnQgcGFzaWQsIHVuc2lnbmVkIGxvbmcgaW92YSwgcGh5c19hZGRyX3Qg cGh5c2FkZHIsCisJCXNpemVfdCBzaXplLCBpbnQgcHJvdCk7CitleHRlcm4gc2l6ZV90IGlvbW11 X3N2YV9tYXBfc2coaW50IHBhc2lkLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCXN0cnVjdCBzY2F0 dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpOworZXh0ZXJuIHNpemVf dCBpb21tdV9zdmFfdW5tYXAoaW50IHBhc2lkLCB1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBz aXplKTsKK2V4dGVybiB2b2lkIGlvbW11X3N2YV9mcmVlX3Bhc2lkKGludCBwYXNpZCwgc3RydWN0 IGRldmljZSAqZGV2KTsKKwogI2Vsc2UgLyogQ09ORklHX0lPTU1VX1NWQSAqLwogc3RhdGljIGlu bGluZSBpbnQgaW9tbXVfc3ZhX2RldmljZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJ dW5zaWduZWQgbG9uZyBmZWF0dXJlcywKQEAgLTEwNjEsNiArMTA5NSwzNCBAQCBzdGF0aWMgaW5s aW5lIHN0cnVjdCBtbV9zdHJ1Y3QgKmlvbW11X3N2YV9maW5kKGludCBwYXNpZCkKIHsKIAlyZXR1 cm4gTlVMTDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgaW9tbXVfc3ZhX2FsbG9jX3Bhc2lkKHN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJc3RydWN0IGRldmljZSAqZGV2KQoreworCXJl dHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW9tbXVfc3ZhX21hcChp bnQgcGFzaWQsIHVuc2lnbmVkIGxvbmcgaW92YSwKKwkJcGh5c19hZGRyX3QgcGh5c2FkZHIsIHNp emVfdCBzaXplLCBpbnQgcHJvdCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworCitzdGF0aWMg aW5saW5lIHNpemVfdCBpb21tdV9zdmFfbWFwX3NnKGludCBwYXNpZCwgdW5zaWduZWQgbG9uZyBp b3ZhLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMsIGludCBw cm90KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBpb21tdV9zdmFf dW5tYXAoaW50IHBhc2lkLCB1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplKQoreworCXJl dHVybiBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfc3ZhX2ZyZWVfcGFzaWQo aW50IHBhc2lkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfQorCisKICNlbmRpZiAvKiBDT05GSUdf SU9NTVVfU1ZBICovCiAKICNpZmRlZiBDT05GSUdfSU9NTVVfUEFHRV9GQVVMVAotLSAKMi4xNy4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJl bm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K