[PATCH 15/15] lightnvm: pblk: implement 2.0 support
From: Javier González <hidden>
Date: 2018-02-28 17:08:26
Also in:
linux-nvme, lkml
Subsystem:
the rest · Maintainer:
Linus Torvalds
SW1wbGVtZW50IDIuMCBzdXBwb3J0IGluIHBibGsuIFRoaXMgaW5jbHVkZXMgdGhlIGFkZHJlc3Mg Zm9ybWF0dGluZyBhbmQKbWFwcGluZyBwYXRocywgYXMgd2VsbCBhcyB0aGUgc3lzZnMgZW50cmll cyBmb3IgdGhlbS4KClNpZ25lZC1vZmYtYnk6IEphdmllciBHb256w6FsZXogPGphdmllckBjbmV4 bGFicy5jb20+Ci0tLQogZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYyAgfCAgNTcgKysrKysr KysrKy0tCiBkcml2ZXJzL2xpZ2h0bnZtL3BibGstc3lzZnMuYyB8ICAzNiArKysrKystLQogZHJp dmVycy9saWdodG52bS9wYmxrLmggICAgICAgfCAxOTggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDIzMyBpbnNlcnRpb25zKCspLCA1 OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGstaW5pdC5j IGIvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYwppbmRleCBiM2UxNWVmNjNkZjMuLjQ3NGYz ZjA0NzA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYworKysgYi9k cml2ZXJzL2xpZ2h0bnZtL3BibGstaW5pdC5jCkBAIC0yMzEsMjAgKzIzMSw2MyBAQCBzdGF0aWMg aW50IHBibGtfc2V0X2FkZHJmXzEyKHN0cnVjdCBudm1fZ2VvICpnZW8sCiAJcmV0dXJuIGRzdC0+ YmxrX29mZnNldCArIHNyYy0+YmxrX2xlbjsKIH0KIAorc3RhdGljIGludCBwYmxrX3NldF9hZGRy Zl8yMChzdHJ1Y3QgbnZtX2dlbyAqZ2VvLAorCQkJICAgICBzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0 ICphZHN0LAorCQkJICAgICBzdHJ1Y3QgcGJsa19hZGRyX2Zvcm1hdCAqdWRzdCkKK3sKKwlzdHJ1 Y3QgbnZtX2FkZHJfZm9ybWF0ICpzcmMgPSAmZ2VvLT5hZGRyZjsKKworCWFkc3QtPmNoX2xlbiA9 IGdldF9jb3VudF9vcmRlcihnZW8tPm51bV9jaCk7CisJYWRzdC0+bHVuX2xlbiA9IGdldF9jb3Vu dF9vcmRlcihnZW8tPm51bV9sdW4pOworCWFkc3QtPmNoa19sZW4gPSBzcmMtPmNoa19sZW47CisJ YWRzdC0+c2VjX2xlbiA9IHNyYy0+c2VjX2xlbjsKKworCWFkc3QtPnNlY19vZmZzZXQgPSAwOwor CWFkc3QtPmNoX29mZnNldCA9IGFkc3QtPnNlY19sZW47CisJYWRzdC0+bHVuX29mZnNldCA9IGFk c3QtPmNoX29mZnNldCArIGFkc3QtPmNoX2xlbjsKKwlhZHN0LT5jaGtfb2Zmc2V0ID0gYWRzdC0+ bHVuX29mZnNldCArIGFkc3QtPmx1bl9sZW47CisKKwlhZHN0LT5zZWNfbWFzayA9ICgoMVVMTCA8 PCBhZHN0LT5zZWNfbGVuKSAtIDEpIDw8IGFkc3QtPnNlY19vZmZzZXQ7CisJYWRzdC0+Y2hrX21h c2sgPSAoKDFVTEwgPDwgYWRzdC0+Y2hrX2xlbikgLSAxKSA8PCBhZHN0LT5jaGtfb2Zmc2V0Owor CWFkc3QtPmx1bl9tYXNrID0gKCgxVUxMIDw8IGFkc3QtPmx1bl9sZW4pIC0gMSkgPDwgYWRzdC0+ bHVuX29mZnNldDsKKwlhZHN0LT5jaF9tYXNrID0gKCgxVUxMIDw8IGFkc3QtPmNoX2xlbikgLSAx KSA8PCBhZHN0LT5jaF9vZmZzZXQ7CisKKwl1ZHN0LT5zZWNfc3RyaXBlID0gZ2VvLT53c19vcHQ7 CisJdWRzdC0+Y2hfc3RyaXBlID0gZ2VvLT5udW1fY2g7CisJdWRzdC0+bHVuX3N0cmlwZSA9IGdl by0+bnVtX2x1bjsKKworCXVkc3QtPnNlY19sdW5fc3RyaXBlID0gdWRzdC0+c2VjX3N0cmlwZSAq IHVkc3QtPmNoX3N0cmlwZTsKKwl1ZHN0LT5zZWNfd3Nfc3RyaXBlID0gdWRzdC0+c2VjX2x1bl9z dHJpcGUgKiB1ZHN0LT5sdW5fc3RyaXBlOworCisJcmV0dXJuIGFkc3QtPmNoa19vZmZzZXQgKyBh ZHN0LT5jaGtfbGVuOworfQorCiBzdGF0aWMgaW50IHBibGtfc2V0X2FkZHJmKHN0cnVjdCBwYmxr ICpwYmxrKQogewogCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2OwogCXN0cnVj dCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87CiAJaW50IG1vZDsKIAotCWRpdl91NjRfcmVtKGdl by0+Y2xiYSwgcGJsay0+bWluX3dyaXRlX3BncywgJm1vZCk7Ci0JaWYgKG1vZCkgewotCQlwcl9l cnIoInBibGs6IGJhZCBjb25maWd1cmF0aW9uIG9mIHNlY3RvcnMvcGFnZXNcbiIpOworCXN3aXRj aCAoZ2VvLT52ZXJzaW9uKSB7CisJY2FzZSBOVk1fT0NTU0RfU1BFQ18xMjoKKwkJZGl2X3U2NF9y ZW0oZ2VvLT5jbGJhLCBwYmxrLT5taW5fd3JpdGVfcGdzLCAmbW9kKTsKKwkJaWYgKG1vZCkgewor CQkJcHJfZXJyKCJwYmxrOiBiYWQgY29uZmlndXJhdGlvbiBvZiBzZWN0b3JzL3BhZ2VzXG4iKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcGJsay0+YWRkcmZfbGVuID0gcGJsa19zZXRf YWRkcmZfMTIoZ2VvLCAodm9pZCAqKSZwYmxrLT5hZGRyZik7CisJCWJyZWFrOworCWNhc2UgTlZN X09DU1NEX1NQRUNfMjA6CisJCXBibGstPmFkZHJmX2xlbiA9IHBibGtfc2V0X2FkZHJmXzIwKGdl bywgKHZvaWQgKikmcGJsay0+YWRkcmYsCisJCQkJCQkJCSZwYmxrLT51YWRkcmYpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlwcl9lcnIoInBibGs6IE9DU1NEIHJldmlzaW9uIG5vdCBzdXBwb3J0 ZWQgKCVkKVxuIiwKKwkJCQkJCQkJZ2VvLT52ZXJzaW9uKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJ fQogCi0JcGJsay0+YWRkcmZfbGVuID0gcGJsa19zZXRfYWRkcmZfMTIoZ2VvLCAodm9pZCAqKSZw YmxrLT5hZGRyZik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTExNyw3ICsxMTYwLDkgQEAgc3Rh dGljIHZvaWQgKnBibGtfaW5pdChzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiwgc3RydWN0IGdlbmRp c2sgKnRkaXNrLAogCXN0cnVjdCBwYmxrICpwYmxrOwogCWludCByZXQ7CiAKLQlpZiAoZ2VvLT52 ZXJzaW9uICE9IE5WTV9PQ1NTRF9TUEVDXzEyKSB7CisJLyogcGJsayBzdXBwb3J0cyAxLjIgYW5k IDIuMCB2ZXJzaW9ucyAqLworCWlmICghKGdlby0+dmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18x MiB8fAorCQkJCQlnZW8tPnZlcnNpb24gPT0gTlZNX09DU1NEX1NQRUNfMjApKSB7CiAJCXByX2Vy cigicGJsazogT0NTU0QgdmVyc2lvbiBub3Qgc3VwcG9ydGVkICgldSlcbiIsCiAJCQkJCQkJZ2Vv LT52ZXJzaW9uKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2xpZ2h0bnZtL3BibGstc3lzZnMuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1zeXNmcy5j CmluZGV4IGE2NDNkYzYyMzczMS4uMzkxZjg2NWIwMmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xp Z2h0bnZtL3BibGstc3lzZnMuYworKysgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstc3lzZnMuYwpA QCAtMTEzLDE1ICsxMTMsMTYgQEAgc3RhdGljIHNzaXplX3QgcGJsa19zeXNmc19wcGFmKHN0cnVj dCBwYmxrICpwYmxrLCBjaGFyICpwYWdlKQogewogCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0g cGJsay0+ZGV2OwogCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Ci0Jc3RydWN0IG52 bV9hZGRyX2Zvcm1hdF8xMiAqcHBhZjsKLQlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICpnZW9f cHBhZjsKIAlzc2l6ZV90IHN6ID0gMDsKIAotCXBwYWYgPSAoc3RydWN0IG52bV9hZGRyX2Zvcm1h dF8xMiAqKSZwYmxrLT5hZGRyZjsKLQlnZW9fcHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0 XzEyICopJmdlby0+YWRkcmY7CisJaWYgKGdlby0+dmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18x MikgeworCQlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICpwcGFmID0KKwkJCQkoc3RydWN0IG52 bV9hZGRyX2Zvcm1hdF8xMiAqKSZwYmxrLT5hZGRyZjsKKwkJc3RydWN0IG52bV9hZGRyX2Zvcm1h dF8xMiAqZ2VvX3BwYWYgPQorCQkJCShzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICopJmdlby0+ YWRkcmY7CiAKLQlzeiA9IHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwKLQkJInBibGs6KHM6JWQp Y2g6JWQvJWQsbHVuOiVkLyVkLGJsazolZC8lZCxwZzolZC8lZCxwbDolZC8lZCxzZWM6JWQvJWRc biIsCisJCXN6ID0gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLAorCQkJInBibGs6KHM6JWQpY2g6 JWQvJWQsbHVuOiVkLyVkLGJsazolZC8lZCxwZzolZC8lZCxwbDolZC8lZCxzZWM6JWQvJWRcbiIs CiAJCQlwYmxrLT5hZGRyZl9sZW4sCiAJCQlwcGFmLT5jaF9vZmZzZXQsIHBwYWYtPmNoX2xlbiwK IAkJCXBwYWYtPmx1bl9vZmZzZXQsIHBwYWYtPmx1bl9sZW4sCkBAIC0xMzAsMTQgKzEzMSwzMyBA QCBzdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX3BwYWYoc3RydWN0IHBibGsgKnBibGssIGNoYXIg KnBhZ2UpCiAJCQlwcGFmLT5wbG5fb2Zmc2V0LCBwcGFmLT5wbG5fbGVuLAogCQkJcHBhZi0+c2Vj X29mZnNldCwgcHBhZi0+c2VjX2xlbik7CiAKLQlzeiArPSBzbnByaW50ZihwYWdlICsgc3osIFBB R0VfU0laRSAtIHN6LAotCQkiZGV2aWNlOmNoOiVkLyVkLGx1bjolZC8lZCxibGs6JWQvJWQscGc6 JWQvJWQscGw6JWQvJWQsc2VjOiVkLyVkXG4iLAorCQlzeiArPSBzbnByaW50ZihwYWdlICsgc3os IFBBR0VfU0laRSAtIHN6LAorCQkJImRldmljZTpjaDolZC8lZCxsdW46JWQvJWQsYmxrOiVkLyVk LHBnOiVkLyVkLHBsOiVkLyVkLHNlYzolZC8lZFxuIiwKIAkJCWdlb19wcGFmLT5jaF9vZmZzZXQs IGdlb19wcGFmLT5jaF9sZW4sCiAJCQlnZW9fcHBhZi0+bHVuX29mZnNldCwgZ2VvX3BwYWYtPmx1 bl9sZW4sCiAJCQlnZW9fcHBhZi0+YmxrX29mZnNldCwgZ2VvX3BwYWYtPmJsa19sZW4sCiAJCQln ZW9fcHBhZi0+cGdfb2Zmc2V0LCBnZW9fcHBhZi0+cGdfbGVuLAogCQkJZ2VvX3BwYWYtPnBsbl9v ZmZzZXQsIGdlb19wcGFmLT5wbG5fbGVuLAogCQkJZ2VvX3BwYWYtPnNlY19vZmZzZXQsIGdlb19w cGFmLT5zZWNfbGVuKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0ICpwcGFm ID0gJnBibGstPmFkZHJmOworCQlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0ICpnZW9fcHBhZiA9ICZn ZW8tPmFkZHJmOworCisJCXN6ID0gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLAorCQkJInBibGs6 KHM6JWQpY2g6JWQvJWQsbHVuOiVkLyVkLGNoazolZC8lZC9zZWM6JWQvJWRcbiIsCisJCQlwYmxr LT5hZGRyZl9sZW4sCisJCQlwcGFmLT5jaF9vZmZzZXQsIHBwYWYtPmNoX2xlbiwKKwkJCXBwYWYt Pmx1bl9vZmZzZXQsIHBwYWYtPmx1bl9sZW4sCisJCQlwcGFmLT5jaGtfb2Zmc2V0LCBwcGFmLT5j aGtfbGVuLAorCQkJcHBhZi0+c2VjX29mZnNldCwgcHBhZi0+c2VjX2xlbik7CisKKwkJc3ogKz0g c25wcmludGYocGFnZSArIHN6LCBQQUdFX1NJWkUgLSBzeiwKKwkJCSJkZXZpY2U6Y2g6JWQvJWQs bHVuOiVkLyVkLGNoazolZC8lZCxzZWM6JWQvJWRcbiIsCisJCQlnZW9fcHBhZi0+Y2hfb2Zmc2V0 LCBnZW9fcHBhZi0+Y2hfbGVuLAorCQkJZ2VvX3BwYWYtPmx1bl9vZmZzZXQsIGdlb19wcGFmLT5s dW5fbGVuLAorCQkJZ2VvX3BwYWYtPmNoa19vZmZzZXQsIGdlb19wcGFmLT5jaGtfbGVuLAorCQkJ Z2VvX3BwYWYtPnNlY19vZmZzZXQsIGdlb19wcGFmLT5zZWNfbGVuKTsKKwl9CiAKIAlyZXR1cm4g c3o7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaCBiL2RyaXZlcnMvbGln aHRudm0vcGJsay5oCmluZGV4IGVlMTQ5NzY2YjdhMC4uMWRlZGRkMzhjMGFjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaAorKysgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaApA QCAtNTYxLDYgKzU2MSwxOCBAQCBlbnVtIHsKIAlQQkxLX1NUQVRFX1NUT1BQRUQgPSAzLAogfTsK IAorLyogSW50ZXJuYWwgZm9ybWF0IHRvIHN1cHBvcnQgbm90IHBvd2VyLW9mLTIgZGV2aWNlIGZv cm1hdHMgKi8KK3N0cnVjdCBwYmxrX2FkZHJfZm9ybWF0IHsKKwkvKiBnZW4gdG8gZGV2ICovCisJ aW50IHNlY19zdHJpcGU7CisJaW50IGNoX3N0cmlwZTsKKwlpbnQgbHVuX3N0cmlwZTsKKworCS8q IGRldiB0byBnZW4gKi8KKwlpbnQgc2VjX2x1bl9zdHJpcGU7CisJaW50IHNlY193c19zdHJpcGU7 Cit9OworCiBzdHJ1Y3QgcGJsayB7CiAJc3RydWN0IG52bV90Z3RfZGV2ICpkZXY7CiAJc3RydWN0 IGdlbmRpc2sgKmRpc2s7CkBAIC01NzMsNyArNTg1LDggQEAgc3RydWN0IHBibGsgewogCXN0cnVj dCBwYmxrX2xpbmVfbWdtdCBsX21nOwkJLyogTGluZSBtYW5hZ2VtZW50ICovCiAJc3RydWN0IHBi bGtfbGluZV9tZXRhIGxtOwkJLyogTGluZSBtZXRhZGF0YSAqLwogCi0Jc3RydWN0IG52bV9hZGRy X2Zvcm1hdCBhZGRyZjsKKwlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0IGFkZHJmOwkvKiBBbGlnbmVk IGFkZHJlc3MgZm9ybWF0ICovCisJc3RydWN0IHBibGtfYWRkcl9mb3JtYXQgdWFkZHJmOwkvKiBV bmFsaWduZWQgYWRkcmVzcyBmb3JtYXQgKi8KIAlpbnQgYWRkcmZfbGVuOwogCiAJc3RydWN0IHBi bGtfcmIgcndiOwpAQCAtOTU0LDE3ICs5NjcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgcGJsa19w cGFfdG9fcG9zKHN0cnVjdCBudm1fZ2VvICpnZW8sIHN0cnVjdCBwcGFfYWRkciBwKQogc3RhdGlj IGlubGluZSBzdHJ1Y3QgcHBhX2FkZHIgYWRkcl90b19nZW5fcHBhKHN0cnVjdCBwYmxrICpwYmxr LCB1NjQgcGFkZHIsCiAJCQkJCSAgICAgIHU2NCBsaW5lX2lkKQogewotCXN0cnVjdCBudm1fYWRk cl9mb3JtYXRfMTIgKnBwYWYgPQotCQkJCShzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICopJnBi bGstPmFkZHJmOworCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2OworCXN0cnVj dCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87CiAJc3RydWN0IHBwYV9hZGRyIHBwYTsKIAotCXBw YS5wcGEgPSAwOwotCXBwYS5nLmJsayA9IGxpbmVfaWQ7Ci0JcHBhLmcucGcgPSAocGFkZHIgJiBw cGFmLT5wZ19tYXNrKSA+PiBwcGFmLT5wZ19vZmZzZXQ7Ci0JcHBhLmcubHVuID0gKHBhZGRyICYg cHBhZi0+bHVuX21hc2spID4+IHBwYWYtPmx1bl9vZmZzZXQ7Ci0JcHBhLmcuY2ggPSAocGFkZHIg JiBwcGFmLT5jaF9tYXNrKSA+PiBwcGFmLT5jaF9vZmZzZXQ7Ci0JcHBhLmcucGwgPSAocGFkZHIg JiBwcGFmLT5wbG5fbWFzaykgPj4gcHBhZi0+cGxuX29mZnNldDsKLQlwcGEuZy5zZWMgPSAocGFk ZHIgJiBwcGFmLT5zZWNfbWFzaykgPj4gcHBhZi0+c2VjX29mZnNldDsKKwlpZiAoZ2VvLT52ZXJz aW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7CisJCXN0cnVjdCBudm1fYWRkcl9mb3JtYXRfMTIg KnBwYWYgPQorCQkJCShzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICopJnBibGstPmFkZHJmOwor CisJCXBwYS5wcGEgPSAwOworCQlwcGEuZy5ibGsgPSBsaW5lX2lkOworCQlwcGEuZy5wZyA9IChw YWRkciAmIHBwYWYtPnBnX21hc2spID4+IHBwYWYtPnBnX29mZnNldDsKKwkJcHBhLmcubHVuID0g KHBhZGRyICYgcHBhZi0+bHVuX21hc2spID4+IHBwYWYtPmx1bl9vZmZzZXQ7CisJCXBwYS5nLmNo ID0gKHBhZGRyICYgcHBhZi0+Y2hfbWFzaykgPj4gcHBhZi0+Y2hfb2Zmc2V0OworCQlwcGEuZy5w bCA9IChwYWRkciAmIHBwYWYtPnBsbl9tYXNrKSA+PiBwcGFmLT5wbG5fb2Zmc2V0OworCQlwcGEu Zy5zZWMgPSAocGFkZHIgJiBwcGFmLT5zZWNfbWFzaykgPj4gcHBhZi0+c2VjX29mZnNldDsKKwl9 IGVsc2UgeworCQlzdHJ1Y3QgcGJsa19hZGRyX2Zvcm1hdCAqdWFkZHJmID0gJnBibGstPnVhZGRy ZjsKKwkJaW50IHNlY3MsIGNobmxzLCBsdW5zOworCisJCXBwYS5wcGEgPSAwOworCisJCXBwYS5t LmNoayA9IGxpbmVfaWQ7CisKKwkJZGl2X3U2NF9yZW0ocGFkZHIsIHVhZGRyZi0+c2VjX3N0cmlw ZSwgJnNlY3MpOworCQlwcGEubS5zZWMgPSBzZWNzOworCisJCXNlY3Rvcl9kaXYocGFkZHIsIHVh ZGRyZi0+c2VjX3N0cmlwZSk7CisJCWRpdl91NjRfcmVtKHBhZGRyLCB1YWRkcmYtPmNoX3N0cmlw ZSwgJmNobmxzKTsKKwkJcHBhLm0uZ3JwID0gY2hubHM7CisKKwkJc2VjdG9yX2RpdihwYWRkciwg dWFkZHJmLT5jaF9zdHJpcGUpOworCQlkaXZfdTY0X3JlbShwYWRkciwgdWFkZHJmLT5sdW5fc3Ry aXBlLCAmbHVucyk7CisJCXBwYS5tLnB1ID0gbHVuczsKKworCQlzZWN0b3JfZGl2KHBhZGRyLCB1 YWRkcmYtPmx1bl9zdHJpcGUpOworCQlwcGEubS5zZWMgKz0gdWFkZHJmLT5zZWNfc3RyaXBlICog cGFkZHI7CisJfQogCiAJcmV0dXJuIHBwYTsKIH0KQEAgLTk3MiwxNSArMTAxMSwzMiBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCBwcGFfYWRkciBhZGRyX3RvX2dlbl9wcGEoc3RydWN0IHBibGsgKnBi bGssIHU2NCBwYWRkciwKIHN0YXRpYyBpbmxpbmUgdTY0IHBibGtfZGV2X3BwYV90b19saW5lX2Fk ZHIoc3RydWN0IHBibGsgKnBibGssCiAJCQkJCQkJc3RydWN0IHBwYV9hZGRyIHApCiB7Ci0Jc3Ry dWN0IG52bV9hZGRyX2Zvcm1hdF8xMiAqcHBhZiA9Ci0JCQkJKHN0cnVjdCBudm1fYWRkcl9mb3Jt YXRfMTIgKikmcGJsay0+YWRkcmY7CisJc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5k ZXY7CisJc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKIAl1NjQgcGFkZHI7CiAKLQlw YWRkciA9ICh1NjQpcC5nLmNoIDw8IHBwYWYtPmNoX29mZnNldDsKLQlwYWRkciB8PSAodTY0KXAu Zy5sdW4gPDwgcHBhZi0+bHVuX29mZnNldDsKLQlwYWRkciB8PSAodTY0KXAuZy5wZyA8PCBwcGFm LT5wZ19vZmZzZXQ7Ci0JcGFkZHIgfD0gKHU2NClwLmcucGwgPDwgcHBhZi0+cGxuX29mZnNldDsK LQlwYWRkciB8PSAodTY0KXAuZy5zZWMgPDwgcHBhZi0+c2VjX29mZnNldDsKKwlpZiAoZ2VvLT52 ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7CisJCXN0cnVjdCBudm1fYWRkcl9mb3JtYXRf MTIgKnBwYWYgPQorCQkJCShzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICopJnBibGstPmFkZHJm OworCisJCXBhZGRyID0gKHU2NClwLmcuY2ggPDwgcHBhZi0+Y2hfb2Zmc2V0OworCQlwYWRkciB8 PSAodTY0KXAuZy5sdW4gPDwgcHBhZi0+bHVuX29mZnNldDsKKwkJcGFkZHIgfD0gKHU2NClwLmcu cGcgPDwgcHBhZi0+cGdfb2Zmc2V0OworCQlwYWRkciB8PSAodTY0KXAuZy5wbCA8PCBwcGFmLT5w bG5fb2Zmc2V0OworCQlwYWRkciB8PSAodTY0KXAuZy5zZWMgPDwgcHBhZi0+c2VjX29mZnNldDsK Kwl9IGVsc2UgeworCQlzdHJ1Y3QgcGJsa19hZGRyX2Zvcm1hdCAqdWFkZHJmID0gJnBibGstPnVh ZGRyZjsKKwkJdTY0IHNlY3MgPSAodTY0KXAubS5zZWM7CisJCWludCBzZWNfc3RyaXBlOworCisJ CXBhZGRyID0gKHU2NClwLm0uZ3JwICogdWFkZHJmLT5zZWNfc3RyaXBlOworCQlwYWRkciArPSAo dTY0KXAubS5wdSAqIHVhZGRyZi0+c2VjX2x1bl9zdHJpcGU7CisKKwkJZGl2X3U2NF9yZW0oc2Vj cywgdWFkZHJmLT5zZWNfc3RyaXBlLCAmc2VjX3N0cmlwZSk7CisJCXNlY3Rvcl9kaXYoc2Vjcywg dWFkZHJmLT5zZWNfc3RyaXBlKTsKKwkJcGFkZHIgKz0gc2VjcyAqIHVhZGRyZi0+c2VjX3dzX3N0 cmlwZTsKKwkJcGFkZHIgKz0gc2VjX3N0cmlwZTsKKwl9CiAKIAlyZXR1cm4gcGFkZHI7CiB9CkBA IC05OTcsMTUgKzEwNTMsMzcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBhX2FkZHIgcGJsa19w cGEzMl90b19wcGE2NChzdHJ1Y3QgcGJsayAqcGJsaywgdTMyIHBwYTMyKQogCQlwcGE2NC5jLmxp bmUgPSBwcGEzMiAmICgofjBVKSA+PiAxKTsKIAkJcHBhNjQuYy5pc19jYWNoZWQgPSAxOwogCX0g ZWxzZSB7Ci0JCXN0cnVjdCBudm1fYWRkcl9mb3JtYXRfMTIgKnBwYWYgPQorCQlzdHJ1Y3QgbnZt X3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKKwkJc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYt PmdlbzsKKworCQlpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7CisJCQlz dHJ1Y3QgbnZtX2FkZHJfZm9ybWF0XzEyICpwcGFmID0KIAkJCQkoc3RydWN0IG52bV9hZGRyX2Zv cm1hdF8xMiAqKSZwYmxrLT5hZGRyZjsKIAotCQlwcGE2NC5nLmNoID0gKHBwYTMyICYgcHBhZi0+ Y2hfbWFzaykgPj4gcHBhZi0+Y2hfb2Zmc2V0OwotCQlwcGE2NC5nLmx1biA9IChwcGEzMiAmIHBw YWYtPmx1bl9tYXNrKSA+PiBwcGFmLT5sdW5fb2Zmc2V0OwotCQlwcGE2NC5nLmJsayA9IChwcGEz MiAmIHBwYWYtPmJsa19tYXNrKSA+PiBwcGFmLT5ibGtfb2Zmc2V0OwotCQlwcGE2NC5nLnBnID0g KHBwYTMyICYgcHBhZi0+cGdfbWFzaykgPj4gcHBhZi0+cGdfb2Zmc2V0OwotCQlwcGE2NC5nLnBs ID0gKHBwYTMyICYgcHBhZi0+cGxuX21hc2spID4+IHBwYWYtPnBsbl9vZmZzZXQ7Ci0JCXBwYTY0 Lmcuc2VjID0gKHBwYTMyICYgcHBhZi0+c2VjX21hc2spID4+IHBwYWYtPnNlY19vZmZzZXQ7CisJ CQlwcGE2NC5nLmNoID0gKHBwYTMyICYgcHBhZi0+Y2hfbWFzaykgPj4KKwkJCQkJCQlwcGFmLT5j aF9vZmZzZXQ7CisJCQlwcGE2NC5nLmx1biA9IChwcGEzMiAmIHBwYWYtPmx1bl9tYXNrKSA+Pgor CQkJCQkJCXBwYWYtPmx1bl9vZmZzZXQ7CisJCQlwcGE2NC5nLmJsayA9IChwcGEzMiAmIHBwYWYt PmJsa19tYXNrKSA+PgorCQkJCQkJCXBwYWYtPmJsa19vZmZzZXQ7CisJCQlwcGE2NC5nLnBnID0g KHBwYTMyICYgcHBhZi0+cGdfbWFzaykgPj4KKwkJCQkJCQlwcGFmLT5wZ19vZmZzZXQ7CisJCQlw cGE2NC5nLnBsID0gKHBwYTMyICYgcHBhZi0+cGxuX21hc2spID4+CisJCQkJCQkJcHBhZi0+cGxu X29mZnNldDsKKwkJCXBwYTY0Lmcuc2VjID0gKHBwYTMyICYgcHBhZi0+c2VjX21hc2spID4+CisJ CQkJCQkJcHBhZi0+c2VjX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBudm1fYWRkcl9m b3JtYXQgKmxiYWYgPSAmcGJsay0+YWRkcmY7CisKKwkJCXBwYTY0Lm0uZ3JwID0gKHBwYTMyICYg bGJhZi0+Y2hfbWFzaykgPj4KKwkJCQkJCQlsYmFmLT5jaF9vZmZzZXQ7CisJCQlwcGE2NC5tLnB1 ID0gKHBwYTMyICYgbGJhZi0+bHVuX21hc2spID4+CisJCQkJCQkJbGJhZi0+bHVuX29mZnNldDsK KwkJCXBwYTY0Lm0uY2hrID0gKHBwYTMyICYgbGJhZi0+Y2hrX21hc2spID4+CisJCQkJCQkJbGJh Zi0+Y2hrX29mZnNldDsKKwkJCXBwYTY0Lm0uc2VjID0gKHBwYTMyICYgbGJhZi0+c2VjX21hc2sp ID4+CisJCQkJCQkJbGJhZi0+c2VjX29mZnNldDsKKwkJfQogCX0KIAogCXJldHVybiBwcGE2NDsK QEAgLTEwMjEsMTUgKzEwOTksMjcgQEAgc3RhdGljIGlubGluZSB1MzIgcGJsa19wcGE2NF90b19w cGEzMihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyIHBwYTY0KQogCQlwcGEzMiB8 PSBwcGE2NC5jLmxpbmU7CiAJCXBwYTMyIHw9IDFVIDw8IDMxOwogCX0gZWxzZSB7Ci0JCXN0cnVj dCBudm1fYWRkcl9mb3JtYXRfMTIgKnBwYWYgPQorCQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9 IHBibGstPmRldjsKKwkJc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKKworCQlpZiAo Z2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7CisJCQlzdHJ1Y3QgbnZtX2FkZHJf Zm9ybWF0XzEyICpwcGFmID0KIAkJCQkoc3RydWN0IG52bV9hZGRyX2Zvcm1hdF8xMiAqKSZwYmxr LT5hZGRyZjsKIAotCQlwcGEzMiB8PSBwcGE2NC5nLmNoIDw8IHBwYWYtPmNoX29mZnNldDsKLQkJ cHBhMzIgfD0gcHBhNjQuZy5sdW4gPDwgcHBhZi0+bHVuX29mZnNldDsKLQkJcHBhMzIgfD0gcHBh NjQuZy5ibGsgPDwgcHBhZi0+YmxrX29mZnNldDsKLQkJcHBhMzIgfD0gcHBhNjQuZy5wZyA8PCBw cGFmLT5wZ19vZmZzZXQ7Ci0JCXBwYTMyIHw9IHBwYTY0LmcucGwgPDwgcHBhZi0+cGxuX29mZnNl dDsKLQkJcHBhMzIgfD0gcHBhNjQuZy5zZWMgPDwgcHBhZi0+c2VjX29mZnNldDsKKwkJCXBwYTMy IHw9IHBwYTY0LmcuY2ggPDwgcHBhZi0+Y2hfb2Zmc2V0OworCQkJcHBhMzIgfD0gcHBhNjQuZy5s dW4gPDwgcHBhZi0+bHVuX29mZnNldDsKKwkJCXBwYTMyIHw9IHBwYTY0LmcuYmxrIDw8IHBwYWYt PmJsa19vZmZzZXQ7CisJCQlwcGEzMiB8PSBwcGE2NC5nLnBnIDw8IHBwYWYtPnBnX29mZnNldDsK KwkJCXBwYTMyIHw9IHBwYTY0LmcucGwgPDwgcHBhZi0+cGxuX29mZnNldDsKKwkJCXBwYTMyIHw9 IHBwYTY0Lmcuc2VjIDw8IHBwYWYtPnNlY19vZmZzZXQ7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qg bnZtX2FkZHJfZm9ybWF0ICpsYmFmID0gJnBibGstPmFkZHJmOworCisJCQlwcGEzMiB8PSBwcGE2 NC5tLmdycCA8PCBsYmFmLT5jaF9vZmZzZXQ7CisJCQlwcGEzMiB8PSBwcGE2NC5tLnB1IDw8IGxi YWYtPmx1bl9vZmZzZXQ7CisJCQlwcGEzMiB8PSBwcGE2NC5tLmNoayA8PCBsYmFmLT5jaGtfb2Zm c2V0OworCQkJcHBhMzIgfD0gcHBhNjQubS5zZWMgPDwgbGJhZi0+c2VjX29mZnNldDsKKwkJfQog CX0KIAogCXJldHVybiBwcGEzMjsKQEAgLTExNDcsNiArMTIzNyw5IEBAIHN0YXRpYyBpbmxpbmUg aW50IHBibGtfc2V0X3Byb2dyX21vZGUoc3RydWN0IHBibGsgKnBibGssIGludCB0eXBlKQogCXN0 cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87CiAJaW50IGZsYWdzOwogCisJaWYgKGdlby0+ dmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18yMCkKKwkJcmV0dXJuIDA7CisKIAlmbGFncyA9IGdl by0+cGxuX21vZGUgPj4gMTsKIAogCWlmICh0eXBlID09IFBCTEtfV1JJVEUpCkBAIC0xMTY2LDYg KzEyNTksOSBAQCBzdGF0aWMgaW5saW5lIGludCBwYmxrX3NldF9yZWFkX21vZGUoc3RydWN0IHBi bGsgKnBibGssIGludCB0eXBlKQogCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87CiAJ aW50IGZsYWdzOwogCisJaWYgKGdlby0+dmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18yMCkKKwkJ cmV0dXJuIDA7CisKIAlmbGFncyA9IE5WTV9JT19TVVNQRU5EIHwgTlZNX0lPX1NDUkFNQkxFX0VO QUJMRTsKIAlpZiAodHlwZSA9PSBQQkxLX1JFQURfU0VRVUVOVElBTCkKIAkJZmxhZ3MgfD0gZ2Vv LT5wbG5fbW9kZSA+PiAxOwpAQCAtMTE3OSwxNiArMTI3NSwyMSBAQCBzdGF0aWMgaW5saW5lIGlu dCBwYmxrX2lvX2FsaWduZWQoc3RydWN0IHBibGsgKnBibGssIGludCBucl9zZWNzKQogfQogCiAj aWZkZWYgQ09ORklHX05WTV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIHByaW50X3BwYShzdHJ1 Y3QgcHBhX2FkZHIgKnAsIGNoYXIgKm1zZywgaW50IGVycm9yKQorc3RhdGljIGlubGluZSB2b2lk IHByaW50X3BwYShzdHJ1Y3QgbnZtX2dlbyAqZ2VvLCBzdHJ1Y3QgcHBhX2FkZHIgKnAsCisJCQkg ICAgIGNoYXIgKm1zZywgaW50IGVycm9yKQogewogCWlmIChwLT5jLmlzX2NhY2hlZCkgewogCQlw cl9lcnIoInBwYTogKCVzOiAleCkgY2FjaGUgbGluZTogJWxsdVxuIiwKIAkJCQltc2csIGVycm9y LCAodTY0KXAtPmMubGluZSk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGdlby0+dmVyc2lvbiA9 PSBOVk1fT0NTU0RfU1BFQ18xMikgewogCQlwcl9lcnIoInBwYTogKCVzOiAleCk6Y2g6JWQsbHVu OiVkLGJsazolZCxwZzolZCxwbDolZCxzZWM6JWRcbiIsCiAJCQltc2csIGVycm9yLAogCQkJcC0+ Zy5jaCwgcC0+Zy5sdW4sIHAtPmcuYmxrLAogCQkJcC0+Zy5wZywgcC0+Zy5wbCwgcC0+Zy5zZWMp OworCX0gZWxzZSB7CisJCXByX2VycigicHBhOiAoJXM6ICV4KTpjaDolZCxsdW46JWQsY2hrOiVk LHNlYzolZFxuIiwKKwkJCW1zZywgZXJyb3IsCisJCQlwLT5tLmdycCwgcC0+bS5wdSwgcC0+bS5j aGssIHAtPm0uc2VjKTsKIAl9CiB9CiAKQEAgLTExOTgsMTMgKzEyOTksMTMgQEAgc3RhdGljIGlu bGluZSB2b2lkIHBibGtfcHJpbnRfZmFpbGVkX3JxZChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0 IG52bV9ycSAqcnFkLAogCWludCBiaXQgPSAtMTsKIAogCWlmIChycWQtPm5yX3BwYXMgPT0gIDEp IHsKLQkJcHJpbnRfcHBhKCZycWQtPnBwYV9hZGRyLCAicnFkIiwgZXJyb3IpOworCQlwcmludF9w cGEoJnBibGstPmRldi0+Z2VvLCAmcnFkLT5wcGFfYWRkciwgInJxZCIsIGVycm9yKTsKIAkJcmV0 dXJuOwogCX0KIAogCXdoaWxlICgoYml0ID0gZmluZF9uZXh0X2JpdCgodm9pZCAqKSZycWQtPnBw YV9zdGF0dXMsIHJxZC0+bnJfcHBhcywKIAkJCQkJCWJpdCArIDEpKSA8IHJxZC0+bnJfcHBhcykg ewotCQlwcmludF9wcGEoJnJxZC0+cHBhX2xpc3RbYml0XSwgInJxZCIsIGVycm9yKTsKKwkJcHJp bnRfcHBhKCZwYmxrLT5kZXYtPmdlbywgJnJxZC0+cHBhX2xpc3RbYml0XSwgInJxZCIsIGVycm9y KTsKIAl9CiAKIAlwcl9lcnIoImVycm9yOiVkLCBwcGFfc3RhdHVzOiVsbHhcbiIsIGVycm9yLCBy cWQtPnBwYV9zdGF0dXMpOwpAQCAtMTIyMCwxNiArMTMyMSwyNSBAQCBzdGF0aWMgaW5saW5lIGlu dCBwYmxrX2JvdW5kYXJ5X3BwYV9jaGVja3Moc3RydWN0IG52bV90Z3RfZGV2ICp0Z3RfZGV2LAog CWZvciAoaSA9IDA7IGkgPCBucl9wcGFzOyBpKyspIHsKIAkJcHBhID0gJnBwYXNbaV07CiAKLQkJ aWYgKCFwcGEtPmMuaXNfY2FjaGVkICYmCi0JCQkJcHBhLT5nLmNoIDwgZ2VvLT5udW1fY2ggJiYK LQkJCQlwcGEtPmcubHVuIDwgZ2VvLT5udW1fbHVuICYmCi0JCQkJcHBhLT5nLnBsIDwgZ2VvLT5u dW1fcGxuICYmCi0JCQkJcHBhLT5nLmJsayA8IGdlby0+bnVtX2NoayAmJgotCQkJCXBwYS0+Zy5w ZyA8IGdlby0+bnVtX3BnICYmCi0JCQkJcHBhLT5nLnNlYyA8IGdlby0+d3NfbWluKQotCQkJY29u dGludWU7CisJCWlmIChnZW8tPnZlcnNpb24gPT0gTlZNX09DU1NEX1NQRUNfMTIpIHsKKwkJCWlm ICghcHBhLT5jLmlzX2NhY2hlZCAmJgorCQkJCQlwcGEtPmcuY2ggPCBnZW8tPm51bV9jaCAmJgor CQkJCQlwcGEtPmcubHVuIDwgZ2VvLT5udW1fbHVuICYmCisJCQkJCXBwYS0+Zy5wbCA8IGdlby0+ bnVtX3BsbiAmJgorCQkJCQlwcGEtPmcuYmxrIDwgZ2VvLT5udW1fY2hrICYmCisJCQkJCXBwYS0+ Zy5wZyA8IGdlby0+bnVtX3BnICYmCisJCQkJCXBwYS0+Zy5zZWMgPCBnZW8tPndzX21pbikKKwkJ CQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICghcHBhLT5jLmlzX2NhY2hlZCAmJgorCQkJ CQlwcGEtPm0uZ3JwIDwgZ2VvLT5udW1fY2ggJiYKKwkJCQkJcHBhLT5tLnB1IDwgZ2VvLT5udW1f bHVuICYmCisJCQkJCXBwYS0+bS5jaGsgPCBnZW8tPm51bV9jaGsgJiYKKwkJCQkJcHBhLT5tLnNl YyA8IGdlby0+Y2xiYSkKKwkJCQljb250aW51ZTsKKwkJfQogCi0JCXByaW50X3BwYShwcGEsICJi b3VuZGFyeSIsIGkpOworCQlwcmludF9wcGEoZ2VvLCBwcGEsICJib3VuZGFyeSIsIGkpOwogCiAJ CXJldHVybiAxOwogCX0KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5nIGxpc3QKTGludXgtbnZtZUBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtbnZtZQo=