From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V2 7/8] virtio: introduce a mdev based transport Date: Tue, 24 Sep 2019 21:53:31 +0800 Message-ID: <20190924135332.14160-8-jasowang@redhat.com> References: <20190924135332.14160-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190924135332.14160-1-jasowang@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1kZXYgdHJhbnNwb3J0IGZvciB2aXJ0aW8uIFRo aXMgaXMgdXNlZCB0bwp1c2Uga2VybmVsIHZpcnRpbyBkcml2ZXIgdG8gZHJpdmUgdGhlIG1lZGlh dGVkIGRldmljZSB0aGF0IGlzIGNhcGFibGUKb2YgcG9wdWxhdGluZyB2aXJ0cXVldWUgZGlyZWN0 bHkuCgpBIG5ldyB2aXJ0aW8tbWRldiBkcml2ZXIgd2lsbCBiZSByZWdpc3RlcmVkIHRvIHRoZSBt ZGV2IGJ1cywgd2hlbiBhCm5ldyB2aXJ0aW8tbWRldiBkZXZpY2UgaXMgcHJvYmVkLCBpdCB3aWxs IHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aAptZGV2IGJhc2VkIGNvbmZpZyBvcHMuIFRoaXMgbWVh bnMgaXQgaXMgYSBzb2Z0d2FyZSB0cmFuc3BvcnQgYmV0d2VlbgptZGV2IGRyaXZlciBhbmQgbWRl diBkZXZpY2UuIFRoZSB0cmFuc3BvcnQgd2FzIGltcGxlbWVudGVkIHRocm91Z2gKZGV2aWNlIHNw ZWNpZmljIG9wc3doaWNoIGlzIGEgcGFydCBvZiBtZGV2X3BhcmVudF9vcHMgbm93LgoKU2lnbmVk LW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL3Zp cnRpby9LY29uZmlnICAgICAgIHwgICA3ICsKIGRyaXZlcnMvdmlydGlvL01ha2VmaWxlICAgICAg fCAgIDEgKwogZHJpdmVycy92aXJ0aW8vdmlydGlvX21kZXYuYyB8IDQxNyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0MjUgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZGV2LmMKCmRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpcnRpby9LY29uZmlnIGIvZHJpdmVycy92aXJ0aW8vS2NvbmZpZwpp bmRleCAwNzg2MTVjZjJhZmMuLjhkMTg3MjJhYjU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0 aW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCkBAIC00Myw2ICs0MywxMyBA QCBjb25maWcgVklSVElPX1BDSV9MRUdBQ1kKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29u ZmlnIFZJUlRJT19NREVWX0RFVklDRQorCXRyaXN0YXRlICJWSVJUSU8gZHJpdmVyIGZvciBNZWRp YXRlZCBkZXZpY2VzIgorCWRlcGVuZHMgb24gVkZJT19NREVWICYmIFZJUlRJTworCWRlZmF1bHQg bgorCWhlbHAKKwkgIFZJUlRJTyBiYXNlZCBkcml2ZXIgZm9yIE1lZGlhdGVkIGRldmljZXMuCisK IGNvbmZpZyBWSVJUSU9fUE1FTQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB2aXJ0aW8gcG1lbSBk cml2ZXIiCiAJZGVwZW5kcyBvbiBWSVJUSU8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL01h a2VmaWxlIGIvZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUKaW5kZXggM2EyYjVjNWRjZjQ2Li5lYmM3 ZmExNWFlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvdmlydGlvL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQCB2aXJ0aW9fcGNpLXkgOj0gdmlydGlv X3BjaV9tb2Rlcm4ubyB2aXJ0aW9fcGNpX2NvbW1vbi5vCiB2aXJ0aW9fcGNpLSQoQ09ORklHX1ZJ UlRJT19QQ0lfTEVHQUNZKSArPSB2aXJ0aW9fcGNpX2xlZ2FjeS5vCiBvYmotJChDT05GSUdfVklS VElPX0JBTExPT04pICs9IHZpcnRpb19iYWxsb29uLm8KIG9iai0kKENPTkZJR19WSVJUSU9fSU5Q VVQpICs9IHZpcnRpb19pbnB1dC5vCitvYmotJChDT05GSUdfVklSVElPX01ERVZfREVWSUNFKSAr PSB2aXJ0aW9fbWRldi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWRldi5j IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX21kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmMyZjNjYjI3MzhiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv dmlydGlvL3ZpcnRpb19tZGV2LmMKQEAgLTAsMCArMSw0MTcgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBWSVJUSU8gYmFzZWQgZHJpdmVyIGZvciBN ZWRpYXRlZCBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFJlZCBIYXQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgQXV0aG9yOiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRo YXQuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlk Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19tZGV2 Lmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2Nv bmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisKKyNkZWZpbmUgRFJJVkVS X1ZFUlNJT04gICIwLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAiUmVkIEhhdCBDb3Jwb3Jh dGlvbiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICJWSVJUSU8gYmFzZWQgZHJpdmVyIGZvciBN ZWRpYXRlZCBkZXZpY2UiCisKKyNkZWZpbmUgdG9fdmlydGlvX21kZXZfZGV2aWNlKGRldikgXAor CWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2UsIHZkZXYpCisKK3N0 cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2UgeworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlIHZkZXY7CisJ c3RydWN0IG1kZXZfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKKworCXN0 cnVjdCB2aXJ0cXVldWUgKip2cXM7CisJLyogVGhlIGxvY2sgdG8gcHJvdGVjdCB2aXJ0cXVldWUg bGlzdCAqLworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZpcnRxdWV1ZXM7 Cit9OworCitzdHJ1Y3QgdmlydGlvX21kZXZfdnFfaW5mbyB7CisJLyogdGhlIGFjdHVhbCB2aXJ0 cXVldWUgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKworCS8qIHRoZSBsaXN0IG5vZGUgZm9y IHRoZSB2aXJ0cXVldWVzIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitz dGF0aWMgc3RydWN0IG1kZXZfZGV2aWNlICp2bV9nZXRfbWRldihzdHJ1Y3QgdmlydGlvX2Rldmlj ZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlICp2bV9kZXYgPSB0b192aXJ0 aW9fbWRldl9kZXZpY2UodmRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdm1fZGV2 LT5tZGV2OworCisJcmV0dXJuIG1kZXY7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19tZGV2X2dl dChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgb2Zmc2V0LAorCQkJICAgIHZv aWQgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZt X2dldF9tZGV2KHZkZXYpOworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpv cHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCisJb3BzLT5nZXRfY29uZmlnKG1kZXYsIG9m ZnNldCwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fbWRldl9zZXQoc3RydWN0 IHZpcnRpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIG9mZnNldCwKKwkJCSAgICBjb25zdCB2b2lk ICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2bV9n ZXRfbWRldih2ZGV2KTsKKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3Bz ID0gbWRldl9nZXRfZGV2X29wcyhtZGV2KTsKKworCW9wcy0+c2V0X2NvbmZpZyhtZGV2LCBvZmZz ZXQsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHUzMiB2aXJ0aW9fbWRldl9nZW5lcmF0aW9uKHN0 cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9 IHZtX2dldF9tZGV2KHZkZXYpOworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3Bz ICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCisJcmV0dXJuIG9wcy0+Z2V0X2dlbmVy YXRpb24obWRldik7Cit9CisKK3N0YXRpYyB1OCB2aXJ0aW9fbWRldl9nZXRfc3RhdHVzKHN0cnVj dCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZt X2dldF9tZGV2KHZkZXYpOworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpv cHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCisJcmV0dXJuIG9wcy0+Z2V0X3N0YXR1cyht ZGV2KTsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX21kZXZfc2V0X3N0YXR1cyhzdHJ1Y3Qgdmly dGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKQoreworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRl diA9IHZtX2dldF9tZGV2KHZkZXYpOworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vf b3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCisJcmV0dXJuIG9wcy0+c2V0X3N0 YXR1cyhtZGV2LCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fbWRldl9yZXNldChz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYg PSB2bV9nZXRfbWRldih2ZGV2KTsKKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29w cyAqb3BzID0gbWRldl9nZXRfZGV2X29wcyhtZGV2KTsKKworCXJldHVybiBvcHMtPnNldF9zdGF0 dXMobWRldiwgMCk7Cit9CisKK3N0YXRpYyBib29sIHZpcnRpb19tZGV2X25vdGlmeShzdHJ1Y3Qg dmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2bV9nZXRfbWRl dih2cS0+dmRldik7CisJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9 IG1kZXZfZ2V0X2Rldl9vcHMobWRldik7CisKKwlvcHMtPmtpY2tfdnEobWRldiwgdnEtPmluZGV4 KTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX21kZXZf Y29uZmlnX2NiKHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHZpcnRpb19tZGV2X2RldmljZSAq dm1fZGV2ID0gcHJpdmF0ZTsKKworCXZpcnRpb19jb25maWdfY2hhbmdlZCgmdm1fZGV2LT52ZGV2 KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHZpcnRp b19tZGV2X3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB2aXJ0aW9fbWRl dl92cV9pbmZvICppbmZvID0gcHJpdmF0ZTsKKworCXJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwg aW5mby0+dnEpOworfQorCitzdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqCit2aXJ0aW9fbWRldl9z ZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW5kZXgsCisJCSAg ICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSksCisJCSAgICAgY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBjdHgpCit7CisJc3RydWN0IHZpcnRpb19tZGV2X2RldmljZSAqdm1f ZGV2ID0gdG9fdmlydGlvX21kZXZfZGV2aWNlKHZkZXYpOworCXN0cnVjdCBtZGV2X2RldmljZSAq bWRldiA9IHZtX2dldF9tZGV2KHZkZXYpOworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZp Y2Vfb3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCXN0cnVjdCB2aXJ0aW9fbWRl dl92cV9pbmZvICppbmZvOworCXN0cnVjdCB2aXJ0aW9fbWRldl9jYWxsYmFjayBjYjsKKwlzdHJ1 Y3QgdmlydHF1ZXVlICp2cTsKKwl1NjQgZGVzY19hZGRyLCBkcml2ZXJfYWRkciwgZGV2aWNlX2Fk ZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYWxpZ24sIG51bTsKKwlpbnQgZXJyOwor CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFF1ZXVlIHNob3VsZG4ndCBhbHJl YWR5IGJlIHNldCB1cC4gKi8KKwlpZiAob3BzLT5nZXRfdnFfcmVhZHkobWRldiwgaW5kZXgpKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCS8qIEFsbG9jYXRlIGFuZCBmaWxsIG91dCBv dXIgYWN0aXZlIHF1ZXVlIGRlc2NyaXB0aW9uICovCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpp bmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKworCW51bSA9IG9wcy0+Z2V0X3F1ZXVlX21heChtZGV2KTsKKwlpZiAobnVtID09IDApIHsK KwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcl9uZXdfdmlydHF1ZXVlOworCX0KKworCS8q IENyZWF0ZSB0aGUgdnJpbmcgKi8KKwlhbGlnbiA9IG9wcy0+Z2V0X3ZxX2FsaWduKG1kZXYpOwor CXZxID0gdnJpbmdfY3JlYXRlX3ZpcnRxdWV1ZShpbmRleCwgbnVtLCBhbGlnbiwgdmRldiwKKwkJ CQkgICAgdHJ1ZSwgdHJ1ZSwgY3R4LAorCQkJCSAgICB2aXJ0aW9fbWRldl9ub3RpZnksIGNhbGxi YWNrLCBuYW1lKTsKKwlpZiAoIXZxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jf bmV3X3ZpcnRxdWV1ZTsKKwl9CisKKwkvKiBTZXR1cCB2aXJ0cXVldWUgY2FsbGJhY2sgKi8KKwlj Yi5jYWxsYmFjayA9IHZpcnRpb19tZGV2X3ZpcnRxdWV1ZV9jYjsKKwljYi5wcml2YXRlID0gaW5m bzsKKwlvcHMtPnNldF92cV9jYihtZGV2LCBpbmRleCwgJmNiKTsKKwlvcHMtPnNldF92cV9udW0o bWRldiwgaW5kZXgsIHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSkpOworCisJZGVzY19hZGRy ID0gdmlydHF1ZXVlX2dldF9kZXNjX2FkZHIodnEpOworCWRyaXZlcl9hZGRyID0gdmlydHF1ZXVl X2dldF9hdmFpbF9hZGRyKHZxKTsKKwlkZXZpY2VfYWRkciA9IHZpcnRxdWV1ZV9nZXRfdXNlZF9h ZGRyKHZxKTsKKworCWlmIChvcHMtPnNldF92cV9hZGRyZXNzKG1kZXYsIGluZGV4LAorCQkJCWRl c2NfYWRkciwgZHJpdmVyX2FkZHIsCisJCQkJZGV2aWNlX2FkZHIpKSB7CisJCWVyciA9IC1FSU5W QUw7CisJCWdvdG8gZXJyX3ZxOworCX0KKworCW9wcy0+c2V0X3ZxX3JlYWR5KG1kZXYsIGluZGV4 LCAxKTsKKworCXZxLT5wcml2ID0gaW5mbzsKKwlpbmZvLT52cSA9IHZxOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJnZtX2Rldi0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZpbmZvLT5ub2RlLCAm dm1fZGV2LT52aXJ0cXVldWVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bV9kZXYtPmxv Y2ssIGZsYWdzKTsKKworCXJldHVybiB2cTsKKworZXJyX3ZxOgorCXZyaW5nX2RlbF92aXJ0cXVl dWUodnEpOworZXJyb3JfbmV3X3ZpcnRxdWV1ZToKKwlvcHMtPnNldF92cV9yZWFkeShtZGV2LCBp bmRleCwgMCk7CisJV0FSTl9PTihvcHMtPmdldF92cV9yZWFkeShtZGV2LCBpbmRleCkpOworCWtm cmVlKGluZm8pOworCXJldHVybiBFUlJfUFRSKGVycik7CisKK30KKworc3RhdGljIHZvaWQgdmly dGlvX21kZXZfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCB2aXJ0aW9f bWRldl9kZXZpY2UgKnZtX2RldiA9IHRvX3ZpcnRpb19tZGV2X2RldmljZSh2cS0+dmRldik7CisJ c3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdm1fZGV2LT5tZGV2OworCWNvbnN0IHN0cnVjdCB2 aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF9kZXZfb3BzKG1kZXYpOworCXN0 cnVjdCB2aXJ0aW9fbWRldl92cV9pbmZvICppbmZvID0gdnEtPnByaXY7CisJdW5zaWduZWQgaW50 IGluZGV4ID0gdnEtPmluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmdm1fZGV2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmluZm8tPm5vZGUpOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtX2Rldi0+bG9jaywgZmxhZ3MpOworCisJLyogU2Vs ZWN0IGFuZCBkZWFjdGl2YXRlIHRoZSBxdWV1ZSAqLworCW9wcy0+c2V0X3ZxX3JlYWR5KG1kZXYs IGluZGV4LCAwKTsKKwlXQVJOX09OKG9wcy0+Z2V0X3ZxX3JlYWR5KG1kZXYsIGluZGV4KSk7CisK Kwl2cmluZ19kZWxfdmlydHF1ZXVlKHZxKTsKKworCWtmcmVlKGluZm8pOworfQorCitzdGF0aWMg dm9pZCB2aXJ0aW9fbWRldl9kZWxfdnFzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQorewor CXN0cnVjdCB2aXJ0cXVldWUgKnZxLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2 cSwgbiwgJnZkZXYtPnZxcywgbGlzdCkKKwkJdmlydGlvX21kZXZfZGVsX3ZxKHZxKTsKK30KKwor c3RhdGljIGludCB2aXJ0aW9fbWRldl9maW5kX3ZxcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRl diwgdW5zaWduZWQgbnZxcywKKwkJCQlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbXSwKKwkJCQl2cV9j YWxsYmFja190ICpjYWxsYmFja3NbXSwKKwkJCQljb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSwK KwkJCQljb25zdCBib29sICpjdHgsCisJCQkJc3RydWN0IGlycV9hZmZpbml0eSAqZGVzYykKK3sK KwlzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlICp2bV9kZXYgPSB0b192aXJ0aW9fbWRldl9kZXZp Y2UodmRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdm1fZ2V0X21kZXYodmRldik7 CisJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X2Rl dl9vcHMobWRldik7CisJc3RydWN0IHZpcnRpb19tZGV2X2NhbGxiYWNrIGNiOworCWludCBpLCBl cnIsIHF1ZXVlX2lkeCA9IDA7CisKKwl2bV9kZXYtPnZxcyA9IGttYWxsb2NfYXJyYXkocXVldWVf aWR4LCBzaXplb2YoKnZtX2Rldi0+dnFzKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF2 bV9kZXYtPnZxcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZxczsg KytpKSB7CisJCWlmICghbmFtZXNbaV0pIHsKKwkJCXZxc1tpXSA9IE5VTEw7CisJCQljb250aW51 ZTsKKwkJfQorCisJCXZxc1tpXSA9IHZpcnRpb19tZGV2X3NldHVwX3ZxKHZkZXYsIHF1ZXVlX2lk eCsrLAorCQkJCQkgICAgICBjYWxsYmFja3NbaV0sIG5hbWVzW2ldLCBjdHggPworCQkJCQkgICAg ICBjdHhbaV0gOiBmYWxzZSk7CisJCWlmIChJU19FUlIodnFzW2ldKSkgeworCQkJZXJyID0gUFRS X0VSUih2cXNbaV0pOworCQkJZ290byBlcnJfc2V0dXBfdnE7CisJCX0KKwl9CisKKwljYi5jYWxs YmFjayA9IHZpcnRpb19tZGV2X2NvbmZpZ19jYjsKKwljYi5wcml2YXRlID0gdm1fZGV2OworCW9w cy0+c2V0X2NvbmZpZ19jYihtZGV2LCAmY2IpOworCisJcmV0dXJuIDA7CisKK2Vycl9zZXR1cF92 cToKKwlrZnJlZSh2bV9kZXYtPnZxcyk7CisJdmlydGlvX21kZXZfZGVsX3Zxcyh2ZGV2KTsKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTY0IHZpcnRpb19tZGV2X2dldF9mZWF0dXJlcyhzdHJ1 Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2 bV9nZXRfbWRldih2ZGV2KTsKKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAq b3BzID0gbWRldl9nZXRfZGV2X29wcyhtZGV2KTsKKworCXJldHVybiBvcHMtPmdldF9mZWF0dXJl cyhtZGV2KTsKK30KKworc3RhdGljIGludCB2aXJ0aW9fbWRldl9maW5hbGl6ZV9mZWF0dXJlcyhz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYg PSB2bV9nZXRfbWRldih2ZGV2KTsKKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29w cyAqb3BzID0gbWRldl9nZXRfZGV2X29wcyhtZGV2KTsKKworCS8qIEdpdmUgdmlydGlvX3Jpbmcg YSBjaGFuY2UgdG8gYWNjZXB0IGZlYXR1cmVzLiAqLworCXZyaW5nX3RyYW5zcG9ydF9mZWF0dXJl cyh2ZGV2KTsKKworCXJldHVybiBvcHMtPnNldF9mZWF0dXJlcyhtZGV2LCB2ZGV2LT5mZWF0dXJl cyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp2aXJ0aW9fbWRldl9idXNfbmFtZShzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlICp2bV9k ZXYgPSB0b192aXJ0aW9fbWRldl9kZXZpY2UodmRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2ID0gdm1fZGV2LT5tZGV2OworCisJcmV0dXJuIGRldl9uYW1lKG1kZXZfZGV2KG1kZXYpKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fbWRldl9j b25maWdfb3BzID0geworCS5nZXQJCT0gdmlydGlvX21kZXZfZ2V0LAorCS5zZXQJCT0gdmlydGlv X21kZXZfc2V0LAorCS5nZW5lcmF0aW9uCT0gdmlydGlvX21kZXZfZ2VuZXJhdGlvbiwKKwkuZ2V0 X3N0YXR1cwk9IHZpcnRpb19tZGV2X2dldF9zdGF0dXMsCisJLnNldF9zdGF0dXMJPSB2aXJ0aW9f bWRldl9zZXRfc3RhdHVzLAorCS5yZXNldAkJPSB2aXJ0aW9fbWRldl9yZXNldCwKKwkuZmluZF92 cXMJPSB2aXJ0aW9fbWRldl9maW5kX3ZxcywKKwkuZGVsX3Zxcwk9IHZpcnRpb19tZGV2X2RlbF92 cXMsCisJLmdldF9mZWF0dXJlcwk9IHZpcnRpb19tZGV2X2dldF9mZWF0dXJlcywKKwkuZmluYWxp emVfZmVhdHVyZXMgPSB2aXJ0aW9fbWRldl9maW5hbGl6ZV9mZWF0dXJlcywKKwkuYnVzX25hbWUJ PSB2aXJ0aW9fbWRldl9idXNfbmFtZSwKK307CisKK3N0YXRpYyB2b2lkIHZpcnRpb19tZGV2X3Jl bGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQoreworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2 ZGV2ID0KKwkgICAgICAgY29udGFpbmVyX29mKF9kLCBzdHJ1Y3QgdmlydGlvX2RldmljZSwgZGV2 KTsKKwlzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlICp2bV9kZXYgPQorCSAgICAgICBjb250YWlu ZXJfb2YodmRldiwgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZSwgdmRldik7CisKKwlkZXZtX2tm cmVlKF9kLCB2bV9kZXYpOworfQorCitzdGF0aWMgaW50IHZpcnRpb19tZGV2X3Byb2JlKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21f ZGV2KGRldik7CisJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1k ZXZfZ2V0X2Rldl9vcHMobWRldik7CisJc3RydWN0IHZpcnRpb19tZGV2X2RldmljZSAqdm1fZGV2 OworCWludCByYzsKKworCXZtX2RldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdm1fZGV2 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2bV9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdm1f ZGV2LT52ZGV2LmRldi5wYXJlbnQgPSBkZXY7CisJdm1fZGV2LT52ZGV2LmRldi5yZWxlYXNlID0g dmlydGlvX21kZXZfcmVsZWFzZV9kZXY7CisJdm1fZGV2LT52ZGV2LmNvbmZpZyA9ICZ2aXJ0aW9f bWRldl9jb25maWdfb3BzOworCXZtX2Rldi0+bWRldiA9IG1kZXY7CisJdm1fZGV2LT52cXMgPSBO VUxMOworCUlOSVRfTElTVF9IRUFEKCZ2bV9kZXYtPnZpcnRxdWV1ZXMpOworCXNwaW5fbG9ja19p bml0KCZ2bV9kZXYtPmxvY2spOworCisJdm1fZGV2LT52ZXJzaW9uID0gb3BzLT5nZXRfdmVyc2lv bihtZGV2KTsKKwlpZiAodm1fZGV2LT52ZXJzaW9uICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJW ZXJzaW9uICVsZCBub3Qgc3VwcG9ydGVkIVxuIiwKKwkJCXZtX2Rldi0+dmVyc2lvbik7CisJCXJl dHVybiAtRU5YSU87CisJfQorCisJdm1fZGV2LT52ZGV2LmlkLmRldmljZSA9IG9wcy0+Z2V0X2Rl dmljZV9pZChtZGV2KTsKKwlpZiAodm1fZGV2LT52ZGV2LmlkLmRldmljZSA9PSAwKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXZtX2Rldi0+dmRldi5pZC52ZW5kb3IgPSBvcHMtPmdldF92ZW5kb3Jf aWQobWRldik7CisJcmMgPSByZWdpc3Rlcl92aXJ0aW9fZGV2aWNlKCZ2bV9kZXYtPnZkZXYpOwor CWlmIChyYykKKwkJcHV0X2RldmljZShkZXYpOworCWVsc2UKKwkJZGV2X3NldF9kcnZkYXRhKGRl diwgdm1fZGV2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX21kZXZf cmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNl ICp2bV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXVucmVnaXN0ZXJfdmlydGlvX2Rl dmljZSgmdm1fZGV2LT52ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBtZGV2X2NsYXNzX2lkIGlk X3RhYmxlW10gPSB7CisJeyBNREVWX0lEX1ZJUlRJTyB9LAorCXsgMCB9LAorfTsKKworTU9EVUxF X0RFVklDRV9UQUJMRShtZGV2LCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbWRldl9kcml2 ZXIgdmlydGlvX21kZXZfZHJpdmVyID0geworCS5uYW1lCT0gInZpcnRpb19tZGV2IiwKKwkucHJv YmUJPSB2aXJ0aW9fbWRldl9wcm9iZSwKKwkucmVtb3ZlID0gdmlydGlvX21kZXZfcmVtb3ZlLAor CS5pZF90YWJsZSA9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdmlydGlvX21k ZXZfaW5pdCh2b2lkKQoreworCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RyaXZlcigmdmlydGlvX21k ZXZfZHJpdmVyLCBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aXJ0aW9f bWRldl9leGl0KHZvaWQpCit7CisJbWRldl91bnJlZ2lzdGVyX2RyaXZlcigmdmlydGlvX21kZXZf ZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodmlydGlvX21kZXZfaW5pdCkKK21vZHVsZV9leGl0 KHZpcnRpb19tZGV2X2V4aXQpCisKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitN T0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotLSAKMi4xOS4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=