Date: Sat, 11 Aug 2012 09:25:09 +0800 From: Meowthink <meowthink@gmail.com> To: freebsd-x11@freebsd.org Cc: freebsd-emulation@freebsd.org Subject: [CFT]Patch for dri / drm interoperability i386 world / amd64 kernel Message-ID: <CABnABoZKENJqcoQbkw6A0hJY_YY6Y0-FUM6GghtE%2Ba4wH7GwVA@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--e89a8f923ba0d5719b04c6f3547f Content-Type: text/plain; charset=ISO-8859-1 Hello all, So long FreeBSD's DRI implementation lacks of i386/amd64 interoperability, as discussed [0] [1]. This breaks wine, linuxulator etc. drawing using DRI-based OpenGL. Paul Mackerras et al. actually did that part for Linux implementation, so I simply translated their work to FreeBSD. Due to my poor programming skills, there's some limitations: 0. I tried to split compatible codes into separate files, like under Linux. But as a result of the difference between FreeBSD and Linux, the code is integrated in a "#include ...ioc32.c" form which is not so elegant. 1. For same reason, struct drm_driver_info has to be changed. 2. There should be some assertions if a 64-bit pointer failed to fit in a 32-bit space. Linux implementation didn't do this either, but they're guaranteed by user-space ioctl structures. This may result unstable under heavy load. 3. Technically this could be applied to either drm and drm2 module. The patch is for drm2 only because I only translated core drm and intel part. For wine, my setup is based on David Naylor's wine-fbsd64.patch, with xorg-dev ports tree. It works well, with minor manual works: 0. Copy /i386chroot/usr/local/lib/dri/i965_drv.so to /usr/local/lib32/dri/ or somewhere else and setenv LIBGL_DRIVERS_PATH to there(My suggestion is add the following line in /usr/bin/wine:) export LIBGL_DRIVERS_PATH="$LOCALBASE/lib32/dri":"$LIBGL_DRIVERS_PATH" 1. Copy /i386chroot/usr/local/lib/libdrm_intel.so, /i386chroot/usr/local/lib/libpciaccess.so.0 to /usr/local/lib32/ This enables direct rendering of d3d/gl demos under wine on my Intel SNB platform. I didn't test using this with linuxulator, as linux base from port don't have up-to-date libdrm/mesa dri-drivers. [0] http://lists.freebsd.org/pipermail/freebsd-amd64/2005-August/005818.html [1] http://forums.freebsd.org/showthread.php?t=24519 Regards, Meowthink --e89a8f923ba0d5719b04c6f3547f Content-Type: application/octet-stream; name="0001-Add-64-bit-kernel-32-bit-world-compatible-wrappers-t.patch" Content-Disposition: attachment; filename="0001-Add-64-bit-kernel-32-bit-world-compatible-wrappers-t.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5pze6aq0 RnJvbSBiYzg0NDc0MzI3YzZiMGViYjMxOTc1ZWU3Yzk5ZGJiY2UyNTcxNjZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZW93dGhpbmsgPG1lb3d0aGlua0Bnb29nbGVtYWlsLmNvbT4K RGF0ZTogVHVlLCAzMSBKdWwgMjAxMiAxNzozNTowMiArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCA2NC1iaXQga2VybmVsIC8gMzItYml0IHdvcmxkIGNvbXBhdGlibGUgd3JhcHBlcnMgdG8KIGRy bTIvaTkxNWttcwoKLS0tCiBzeXMvZGV2L2RybTIvZHJtUC5oICAgICAgICAgICAgICAgfCAgIDQg Kwogc3lzL2Rldi9kcm0yL2RybV9kcnYuYyAgICAgICAgICAgIHwgIDI0ICsrCiBzeXMvZGV2L2Ry bTIvZHJtX2lvYzMyLmMgICAgICAgICAgfCA3ODEgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIHN5cy9kZXYvZHJtMi9pOTE1L2k5MTVfZG1hLmMgICAgICB8ICAgNyArCiBz eXMvZGV2L2RybTIvaTkxNS9pOTE1X2lvYzMyLmMgICAgfCAxMjQgKysrKysrCiBzeXMvbW9kdWxl cy9kcm0yL2RybTIvTWFrZWZpbGUgICAgfCAgIDIgKy0KIHN5cy9tb2R1bGVzL2RybTIvaTkxNWtt cy9NYWtlZmlsZSB8ICAgMyArLQogNyBmaWxlcyBjaGFuZ2VkLCA5NDMgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L2RybTIvZHJtX2lvYzMy LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvZGV2L2RybTIvaTkxNS9pOTE1X2lvYzMyLmMKCmRp ZmYgLS1naXQgYS9zeXMvZGV2L2RybTIvZHJtUC5oIGIvc3lzL2Rldi9kcm0yL2RybVAuaAppbmRl eCAxNjIyN2I1Li5jM2NiYWNiIDEwMDY0NAotLS0gYS9zeXMvZGV2L2RybTIvZHJtUC5oCisrKyBi L3N5cy9kZXYvZHJtMi9kcm1QLmgKQEAgLTEwNSw2ICsxMDUsNyBAQCBzdHJ1Y3QgZHJtX2ZpbGU7 CiAjaW5jbHVkZSA8ZGV2L2RybTIvZHJtX21tLmg+CiAjaW5jbHVkZSA8ZGV2L2RybTIvZHJtX2hh c2h0YWIuaD4KIAorI2luY2x1ZGUgIm9wdF9jb21wYXQuaCIKICNpbmNsdWRlICJvcHRfZHJtLmgi CiAjaWZkZWYgRFJNX0RFQlVHCiAjdW5kZWYgRFJNX0RFQlVHCkBAIC03NjAsNiArNzYxLDkgQEAg c3RydWN0IGRybV9kcml2ZXJfaW5mbyB7CiAJaW50CSgqZGV2aWNlX2lzX2FncCkgKHN0cnVjdCBk cm1fZGV2aWNlICogZGV2KTsKIAogCWRybV9pb2N0bF9kZXNjX3QgKmlvY3RsczsKKyNpZmRlZiBD T01QQVRfRlJFRUJTRDMyCisJZHJtX2lvY3RsX2Rlc2NfdCAqY29tcGF0X2lvY3RsczsKKyNlbmRp ZgogCWludAltYXhfaW9jdGw7CiAKIAlpbnQJYnVmX3ByaXZfc2l6ZTsKZGlmZiAtLWdpdCBhL3N5 cy9kZXYvZHJtMi9kcm1fZHJ2LmMgYi9zeXMvZGV2L2RybTIvZHJtX2Rydi5jCmluZGV4IDQyZmYx OTQuLmFiNGM4NTAgMTAwNjQ0Ci0tLSBhL3N5cy9kZXYvZHJtMi9kcm1fZHJ2LmMKKysrIGIvc3lz L2Rldi9kcm0yL2RybV9kcnYuYwpAQCAtMTc5LDYgKzE3OSwxMSBAQCBzdGF0aWMgZHJtX2lvY3Rs X2Rlc2NfdAkJICBkcm1faW9jdGxzWzI1Nl0gPSB7CiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExf TU9ERV9ERVNUUk9ZX0RVTUIsIGRybV9tb2RlX2Rlc3Ryb3lfZHVtYl9pb2N0bCwgRFJNX01BU1RF UnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAogfTsKIAorI2lmZGVmIENPTVBBVF9G UkVFQlNEMzIKKyNpbmNsdWRlICJkcm1faW9jMzIuYyIKKyNpbmNsdWRlIDxzeXMvc3lzZW50Lmg+ CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBjZGV2c3cgZHJtX2NkZXZzdyA9IHsKIAkuZF92ZXJz aW9uID0JRF9WRVJTSU9OLAogCS5kX29wZW4gPQlkcm1fb3BlbiwKQEAgLTg0Niw2ICs4NTEsMTkg QEAgaW50IGRybV9pb2N0bChzdHJ1Y3QgY2RldiAqa2RldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBk YXRhLCBpbnQgZmxhZ3MsCiAJCXJldHVybiBFSU5WQUw7CiAJfQogCisjaWZkZWYgQ09NUEFUX0ZS RUVCU0QzMgorCS8qIENhbGxlZCB3aGVuZXZlciBhIDMyLWJpdCBwcm9jZXNzIHJ1bm5pbmcgdW5k ZXIgYSA2NC1iaXQga2VybmVsCisJICogcGVyZm9ybXMgYW4gaW9jdGwgb24gL2Rldi9kcm0uCisJ ICovCisJaWYgKFNWX0NVUlBST0NfRkxBRyhTVl9JTFAzMikKKwkJJiYgZHJtX2NvbXBhdF9pb2N0 bHNbbnJdLmZ1bmMgIT0gTlVMTCkKKwkJLyogQXNzdW1lIHRoYXQgaW9jdGxzIHdpdGhvdXQgYW4g ZXhwbGljaXQgY29tcGF0IHJvdXRpbmUgd2lsbCBqdXN0CisJCSAqIHdvcmsuICBUaGlzIG1heSBu b3QgYWx3YXlzIGJlIGEgZ29vZCBhc3N1bXB0aW9uLCBidXQgaXQncyBiZXR0ZXIKKwkJICogdGhh biBhbHdheXMgZmFpbGluZy4KKwkJICovCisJCWlvY3RsID0gJmRybV9jb21wYXRfaW9jdGxzW25y XTsKKwllbHNlCisjZW5kaWYKIAlpb2N0bCA9ICZkcm1faW9jdGxzW25yXTsKIAkvKiBJdCdzIG5v dCBhIGNvcmUgRFJNIGlvY3RsLCB0cnkgZHJpdmVyLXNwZWNpZmljLiAqLwogCWlmIChpb2N0bC0+ ZnVuYyA9PSBOVUxMICYmIG5yID49IERSTV9DT01NQU5EX0JBU0UpIHsKQEAgLTg1Niw2ICs4NzQs MTIgQEAgaW50IGRybV9pb2N0bChzdHJ1Y3QgY2RldiAqa2RldiwgdV9sb25nIGNtZCwgY2FkZHJf dCBkYXRhLCBpbnQgZmxhZ3MsCiAJCQkgICAgbnIsIGRldi0+ZHJpdmVyLT5tYXhfaW9jdGwpOwog CQkJcmV0dXJuIEVJTlZBTDsKIAkJfQorI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKwkJaWYgKFNW X0NVUlBST0NfRkxBRyhTVl9JTFAzMikKKwkJCSYmIGRldi0+ZHJpdmVyLT5jb21wYXRfaW9jdGxz W25yXS5mdW5jICE9IE5VTEwpCisJCQlpb2N0bCA9ICZkZXYtPmRyaXZlci0+Y29tcGF0X2lvY3Rs c1tucl07CisJCWVsc2UKKyNlbmRpZgogCQlpb2N0bCA9ICZkZXYtPmRyaXZlci0+aW9jdGxzW25y XTsKIAkJaXNfZHJpdmVyX2lvY3RsID0gMTsKIAl9CmRpZmYgLS1naXQgYS9zeXMvZGV2L2RybTIv ZHJtX2lvYzMyLmMgYi9zeXMvZGV2L2RybTIvZHJtX2lvYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOTA2MTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvZHJt Mi9kcm1faW9jMzIuYwpAQCAtMCwwICsxLDc4MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIFBh dWwgTWFja2VycmFzIDIwMDUuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBQYXVsIE1hY2tlcnJhcyA8cGF1bHVz QHNhbWJhLm9yZz4KKyAqLworCitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qKiBAZmlsZSBk cm1faW9jMzIuYworICogMzItYml0IGlvY3RsIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIHRo ZSBEUk0uCisgKi8KKyAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbWFs bG9jLmg+CisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZFUlNJT04zMgkJRFJNX0lPV1IoMHgwMCwgZHJt X3ZlcnNpb24zMl90KQorI2RlZmluZSBEUk1fSU9DVExfR0VUX1VOSVFVRTMyCQlEUk1fSU9XUigw eDAxLCBkcm1fdW5pcXVlMzJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9NQVAzMgkJRFJNX0lP V1IoMHgwNCwgZHJtX21hcDMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9HRVRfQ0xJRU5UMzIJCURS TV9JT1dSKDB4MDUsIGRybV9jbGllbnQzMl90KQorI2RlZmluZSBEUk1fSU9DVExfR0VUX1NUQVRT MzIJCURSTV9JT1IoIDB4MDYsIGRybV9zdGF0czMyX3QpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1NF VF9VTklRVUUzMgkJRFJNX0lPVyggMHgxMCwgZHJtX3VuaXF1ZTMyX3QpCisjZGVmaW5lIERSTV9J T0NUTF9BRERfTUFQMzIJCURSTV9JT1dSKDB4MTUsIGRybV9tYXAzMl90KQorI2RlZmluZSBEUk1f SU9DVExfQUREX0JVRlMzMgkJRFJNX0lPV1IoMHgxNiwgZHJtX2J1Zl9kZXNjMzJfdCkKKyNkZWZp bmUgRFJNX0lPQ1RMX01BUktfQlVGUzMyCQlEUk1fSU9XKCAweDE3LCBkcm1fYnVmX2Rlc2MzMl90 KQorI2RlZmluZSBEUk1fSU9DVExfSU5GT19CVUZTMzIJCURSTV9JT1dSKDB4MTgsIGRybV9idWZf aW5mbzMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9NQVBfQlVGUzMyCQlEUk1fSU9XUigweDE5LCBk cm1fYnVmX21hcDMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9GUkVFX0JVRlMzMgkJRFJNX0lPVygg MHgxYSwgZHJtX2J1Zl9mcmVlMzJfdCkKKworI2RlZmluZSBEUk1fSU9DVExfUk1fTUFQMzIJCURS TV9JT1coIDB4MWIsIGRybV9tYXAzMl90KQorCisjZGVmaW5lIERSTV9JT0NUTF9TRVRfU0FSRUFf Q1RYMzIJRFJNX0lPVyggMHgxYywgZHJtX2N0eF9wcml2X21hcDMyX3QpCisjZGVmaW5lIERSTV9J T0NUTF9HRVRfU0FSRUFfQ1RYMzIJRFJNX0lPV1IoMHgxZCwgZHJtX2N0eF9wcml2X21hcDMyX3Qp CisKKyNkZWZpbmUgRFJNX0lPQ1RMX1JFU19DVFgzMgkJRFJNX0lPV1IoMHgyNiwgZHJtX2N0eF9y ZXMzMl90KQorI2RlZmluZSBEUk1fSU9DVExfRE1BMzIJCQlEUk1fSU9XUigweDI5LCBkcm1fZG1h MzJfdCkKKworI2RlZmluZSBEUk1fSU9DVExfQUdQX0VOQUJMRTMyCQlEUk1fSU9XKCAweDMyLCBk cm1fYWdwX21vZGUzMl90KQorI2RlZmluZSBEUk1fSU9DVExfQUdQX0lORk8zMgkJRFJNX0lPUigg MHgzMywgZHJtX2FncF9pbmZvMzJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0FHUF9BTExPQzMyCQlE Uk1fSU9XUigweDM0LCBkcm1fYWdwX2J1ZmZlcjMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9BR1Bf RlJFRTMyCQlEUk1fSU9XKCAweDM1LCBkcm1fYWdwX2J1ZmZlcjMyX3QpCisjZGVmaW5lIERSTV9J T0NUTF9BR1BfQklORDMyCQlEUk1fSU9XKCAweDM2LCBkcm1fYWdwX2JpbmRpbmczMl90KQorI2Rl ZmluZSBEUk1fSU9DVExfQUdQX1VOQklORDMyCQlEUk1fSU9XKCAweDM3LCBkcm1fYWdwX2JpbmRp bmczMl90KQorCisjZGVmaW5lIERSTV9JT0NUTF9TR19BTExPQzMyCQlEUk1fSU9XKCAweDM4LCBk cm1fc2NhdHRlcl9nYXRoZXIzMl90KQorI2RlZmluZSBEUk1fSU9DVExfU0dfRlJFRTMyCQlEUk1f SU9XKCAweDM5LCBkcm1fc2NhdHRlcl9nYXRoZXIzMl90KQorCisjZGVmaW5lIERSTV9JT0NUTF9V UERBVEVfRFJBVzMyCQlEUk1fSU9XKCAweDNmLCBkcm1fdXBkYXRlX2RyYXczMl90KQorCisjZGVm aW5lIERSTV9JT0NUTF9XQUlUX1ZCTEFOSzMyCQlEUk1fSU9XUigweDNhLCBkcm1fd2FpdF92Ymxh bmszMl90KQorCit0eXBlZGVmIHN0cnVjdCBkcm1fdmVyc2lvbl8zMiB7CisJaW50IHZlcnNpb25f bWFqb3I7CSAgLyoqPCBNYWpvciB2ZXJzaW9uICovCisJaW50IHZlcnNpb25fbWlub3I7CSAgLyoq PCBNaW5vciB2ZXJzaW9uICovCisJaW50IHZlcnNpb25fcGF0Y2hsZXZlbDsJICAgLyoqPCBQYXRj aCBsZXZlbCAqLworCXUzMiBuYW1lX2xlbjsJCSAgLyoqPCBMZW5ndGggb2YgbmFtZSBidWZmZXIg Ki8KKwl1MzIgbmFtZTsJCSAgLyoqPCBOYW1lIG9mIGRyaXZlciAqLworCXUzMiBkYXRlX2xlbjsJ CSAgLyoqPCBMZW5ndGggb2YgZGF0ZSBidWZmZXIgKi8KKwl1MzIgZGF0ZTsJCSAgLyoqPCBVc2Vy LXNwYWNlIGJ1ZmZlciB0byBob2xkIGRhdGUgKi8KKwl1MzIgZGVzY19sZW47CQkgIC8qKjwgTGVu Z3RoIG9mIGRlc2MgYnVmZmVyICovCisJdTMyIGRlc2M7CQkgIC8qKjwgVXNlci1zcGFjZSBidWZm ZXIgdG8gaG9sZCBkZXNjICovCit9IGRybV92ZXJzaW9uMzJfdDsKKworc3RhdGljIGludCBjb21w YXRfZHJtX3ZlcnNpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3ZlcnNpb24zMl90ICp2MzIgPSBkYXRhOwor CXN0cnVjdCBkcm1fdmVyc2lvbiB2ZXJzaW9uOworCWludCBlcnI7CisKKwl2ZXJzaW9uLm5hbWVf bGVuID0gdjMyLT5uYW1lX2xlbjsKKwl2ZXJzaW9uLm5hbWUgPSAodm9pZCAqKSh1bnNpZ25lZCBs b25nKXYzMi0+bmFtZTsKKwl2ZXJzaW9uLmRhdGVfbGVuID0gdjMyLT5kYXRlX2xlbjsKKwl2ZXJz aW9uLmRhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXYzMi0+ZGF0ZTsKKwl2ZXJzaW9uLmRl c2NfbGVuID0gdjMyLT5kZXNjX2xlbjsKKwl2ZXJzaW9uLmRlc2MgPSAodm9pZCAqKSh1bnNpZ25l ZCBsb25nKXYzMi0+ZGVzYzsKKwkKKwllcnIgPSBkcm1fdmVyc2lvbihkZXYsICh2b2lkICopJnZl cnNpb24sIGZpbGVfcHJpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXYzMi0+dmVy c2lvbl9tYWpvciA9IHZlcnNpb24udmVyc2lvbl9tYWpvcjsKKwl2MzItPnZlcnNpb25fbWlub3Ig PSB2ZXJzaW9uLnZlcnNpb25fbWlub3I7CisJdjMyLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSB2ZXJz aW9uLnZlcnNpb25fcGF0Y2hsZXZlbDsKKwl2MzItPm5hbWVfbGVuID0gdmVyc2lvbi5uYW1lX2xl bjsKKwl2MzItPmRhdGVfbGVuID0gdmVyc2lvbi5kYXRlX2xlbjsKKwl2MzItPmRlc2NfbGVuID0g dmVyc2lvbi5kZXNjX2xlbjsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1f dW5pcXVlMzIgeworCXUzMiB1bmlxdWVfbGVuOwkvKio8IExlbmd0aCBvZiB1bmlxdWUgKi8KKwl1 MzIgdW5pcXVlOwkvKio8IFVuaXF1ZSBuYW1lIGZvciBkcml2ZXIgaW5zdGFudGlhdGlvbiAqLwor fSBkcm1fdW5pcXVlMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfZHJtX2dldHVuaXF1ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dikKK3sKKwlkcm1fdW5pcXVlMzJfdCAqdXEzMiA9IGRhdGE7CisJc3RydWN0IGRybV91bmlxdWUg dTsKKwlpbnQgZXJyOworCisJdS51bmlxdWVfbGVuID0gdXEzMi0+dW5pcXVlX2xlbjsKKwl1LnVu aXF1ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpdXEzMi0+dW5pcXVlOworCisJZXJyID0gZHJt X2dldHVuaXF1ZShkZXYsICh2b2lkICopJnUsIGZpbGVfcHJpdik7CisJaWYgKGVycikKKwkJcmV0 dXJuIGVycjsKKworCXVxMzItPnVuaXF1ZV9sZW4gPSB1LnVuaXF1ZV9sZW47CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBjb21wYXRfZHJtX3NldHVuaXF1ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1f dW5pcXVlMzJfdCAqdXEzMiA9IGRhdGE7CisJc3RydWN0IGRybV91bmlxdWUgdTsKKworCXUudW5p cXVlX2xlbiA9IHVxMzItPnVuaXF1ZV9sZW47CisJdS51bmlxdWUgPSAodm9pZCAqKSh1bnNpZ25l ZCBsb25nKXVxMzItPnVuaXF1ZTsKKworCXJldHVybiBkcm1fc2V0dW5pcXVlKGRldiwgKHZvaWQg KikmdSwgZmlsZV9wcml2KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX21hcDMyIHsKKwl1MzIg b2Zmc2V0OwkJLyoqPCBSZXF1ZXN0ZWQgcGh5c2ljYWwgYWRkcmVzcyAoMCBmb3IgU0FSRUEpKi8K Kwl1MzIgc2l6ZTsJCS8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWVu dW0gZHJtX21hcF90eXBlIHR5cGU7CS8qKjwgVHlwZSBvZiBtZW1vcnkgdG8gbWFwICovCisJZW51 bSBkcm1fbWFwX2ZsYWdzIGZsYWdzOwkvKio8IEZsYWdzICovCisJdTMyIGhhbmRsZTsJCS8qKjwg VXNlci1zcGFjZTogIkhhbmRsZSIgdG8gcGFzcyB0byBtbWFwKCkgKi8KKwlpbnQgbXRycjsJCS8q KjwgTVRSUiBzbG90IHVzZWQgKi8KK30gZHJtX21hcDMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0 X2RybV9nZXRtYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX21hcDMyX3QgKm0zMiA9IGRhdGE7CisJc3RydWN0 IGRybV9tYXAgbWFwOworCWludCBlcnI7CisJdm9pZCAqaGFuZGxlOworCisJbWFwLm9mZnNldCA9 ICh1bnNpZ25lZCBsb25nKW0zMi0+b2Zmc2V0OworCisJZXJyID0gZHJtX2dldG1hcChkZXYsICh2 b2lkICopJm1hcCwgZmlsZV9wcml2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbTMy LT5vZmZzZXQgPSBtYXAub2Zmc2V0OworCW0zMi0+c2l6ZSA9IG1hcC5zaXplOworCW0zMi0+dHlw ZSA9IG1hcC50eXBlOworCW0zMi0+ZmxhZ3MgPSBtYXAuZmxhZ3M7CisJaGFuZGxlID0gbWFwLmhh bmRsZTsKKwltMzItPm10cnIgPSBtYXAubXRycjsKKworCW0zMi0+aGFuZGxlID0gKHVuc2lnbmVk IGxvbmcpaGFuZGxlOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBjb21wYXRfZHJt X2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fbWFwMzJfdCAqbTMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJt X21hcCBtYXA7CisJaW50IGVycjsKKwl2b2lkICpoYW5kbGU7CisJCisJbWFwLm9mZnNldCA9ICh1 bnNpZ25lZCBsb25nKW0zMi0+b2Zmc2V0OworCW1hcC5zaXplID0gKHVuc2lnbmVkIGxvbmcpbTMy LT5zaXplOworCW1hcC50eXBlID0gbTMyLT50eXBlOworCW1hcC5mbGFncyA9IG0zMi0+ZmxhZ3M7 CisKKwllcnIgPSBkcm1fYWRkbWFwX2lvY3RsKGRldiwgKHZvaWQgKikmbWFwLCBmaWxlX3ByaXYp OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltMzItPm9mZnNldCA9IG1hcC5vZmZzZXQ7 CisJbTMyLT5tdHJyID0gbWFwLm10cnI7CisJaGFuZGxlID0gbWFwLmhhbmRsZTsKKwkKKwltMzIt PmhhbmRsZSA9ICh1bnNpZ25lZCBsb25nKWhhbmRsZTsKKwlpZiAobTMyLT5oYW5kbGUgIT0gKHVu c2lnbmVkIGxvbmcpaGFuZGxlKQorCQlEUk1fREVCVUcoImNvbXBhdF9kcm1fYWRkbWFwIHRydW5j YXRlZCBoYW5kbGUiCisJCQkJICAgIiAlcCBmb3IgdHlwZSAlZCBvZmZzZXQgJXhcbiIsCisJCQkJ ICAgaGFuZGxlLCBtMzItPnR5cGUsIG0zMi0+b2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNvbXBhdF9kcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX21hcDMyX3QgKm0zMiA9 IGRhdGE7CisJc3RydWN0IGRybV9tYXAgbWFwOworCisJbWFwLmhhbmRsZSA9ICh2b2lkICopKHVu c2lnbmVkIGxvbmcpbTMyLT5oYW5kbGU7CisKKwlyZXR1cm4gZHJtX3JtbWFwX2lvY3RsKGRldiwg KHZvaWQgKikmbWFwLCBmaWxlX3ByaXYpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fY2xpZW50 MzIgeworCWludCBpZHg7CS8qKjwgV2hpY2ggY2xpZW50IGRlc2lyZWQ/ICovCisJaW50IGF1dGg7 CS8qKjwgSXMgY2xpZW50IGF1dGhlbnRpY2F0ZWQ/ICovCisJdTMyIHBpZDsJLyoqPCBQcm9jZXNz IElEICovCisJdTMyIHVpZDsJLyoqPCBVc2VyIElEICovCisJdTMyIG1hZ2ljOwkvKio8IE1hZ2lj ICovCisJdTMyIGlvY3M7CS8qKjwgSW9jdGwgY291bnQgKi8KK30gZHJtX2NsaWVudDMyX3Q7CisK K3N0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRjbGllbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2NsaWVudDMy X3QgKmMzMiA9IGRhdGE7CisJc3RydWN0IGRybV9jbGllbnQgY2xpZW50OworCWludCBlcnI7CisK KwljbGllbnQuaWR4ID0gYzMyLT5pZHg7CisKKwllcnIgPSBkcm1fZ2V0Y2xpZW50KGRldiwgKHZv aWQgKikmY2xpZW50LCBmaWxlX3ByaXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlj MzItPmlkeCA9IGNsaWVudC5pZHg7CisJYzMyLT5hdXRoID0gY2xpZW50LmF1dGg7CisJYzMyLT5w aWQgPSBjbGllbnQucGlkOworCWMzMi0+dWlkID0gY2xpZW50LnVpZDsKKwljMzItPm1hZ2ljID0g Y2xpZW50Lm1hZ2ljOworCWMzMi0+aW9jcyA9IGNsaWVudC5pb2NzOworCisJcmV0dXJuIDA7Cit9 CisKK3R5cGVkZWYgc3RydWN0IGRybV9zdGF0czMyIHsKKwl1MzIgY291bnQ7CisJc3RydWN0IHsK KwkJdTMyIHZhbHVlOworCQllbnVtIGRybV9zdGF0X3R5cGUgdHlwZTsKKwl9IGRhdGFbMTVdOwor fSBkcm1fc3RhdHMzMl90OworCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fZ2V0c3RhdHMoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp Cit7CisJZHJtX3N0YXRzMzJfdCAqczMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX3N0YXRzIHN0YXRz OworCWludCBpLCBlcnI7CisKKwllcnIgPSBkcm1fZ2V0c3RhdHMoZGV2LCAodm9pZCAqKSZzdGF0 cywgZmlsZV9wcml2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJczMyLT5jb3VudCA9 IHN0YXRzLmNvdW50OworCWZvciAoaSA9IDA7IGkgPCBzdGF0cy5jb3VudDsgaSsrKSB7CisJCXMz Mi0+ZGF0YVtpXS52YWx1ZSA9IHN0YXRzLmRhdGFbaV0udmFsdWU7CisJCXMzMi0+ZGF0YVtpXS50 eXBlID0gc3RhdHMuZGF0YVtpXS50eXBlOworCX0KKworCXJldHVybiAwOworfQorCit0eXBlZGVm IHN0cnVjdCBkcm1fYnVmX2Rlc2MzMiB7CisJaW50IGNvdW50OwkJIC8qKjwgTnVtYmVyIG9mIGJ1 ZmZlcnMgb2YgdGhpcyBzaXplICovCisJaW50IHNpemU7CQkgLyoqPCBTaXplIGluIGJ5dGVzICov CisJaW50IGxvd19tYXJrOwkJIC8qKjwgTG93IHdhdGVyIG1hcmsgKi8KKwlpbnQgaGlnaF9tYXJr OwkJIC8qKjwgSGlnaCB3YXRlciBtYXJrICovCisJaW50IGZsYWdzOworCXUzMiBhZ3Bfc3RhcnQ7 CQkgLyoqPCBTdGFydCBhZGRyZXNzIGluIHRoZSBBR1AgYXBlcnR1cmUgKi8KK30gZHJtX2J1Zl9k ZXNjMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfZHJtX2FkZGJ1ZnMoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJt X2J1Zl9kZXNjMzJfdCAqYjMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2J1Zl9kZXNjIGJ1ZjsKKwlp bnQgZXJyOworCisJYnVmLmNvdW50ID0gYjMyLT5jb3VudDsKKwlidWYuc2l6ZSA9IGIzMi0+c2l6 ZTsKKwlidWYubG93X21hcmsgPSBiMzItPmxvd19tYXJrOworCWJ1Zi5oaWdoX21hcmsgPSBiMzIt PmhpZ2hfbWFyazsKKwlidWYuZmxhZ3MgPSBiMzItPmZsYWdzOworCWJ1Zi5hZ3Bfc3RhcnQgPSAo dW5zaWduZWQgbG9uZyliMzItPmFncF9zdGFydDsKKworCWVyciA9IGRybV9hZGRidWZzKGRldiwg KHZvaWQgKikmYnVmLCBmaWxlX3ByaXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwli MzItPmNvdW50ID0gYnVmLmNvdW50OworCWIzMi0+c2l6ZSA9IGJ1Zi5zaXplOworCWIzMi0+bG93 X21hcmsgPSBidWYubG93X21hcms7CisJYjMyLT5oaWdoX21hcmsgPSBidWYuaGlnaF9tYXJrOwor CWIzMi0+ZmxhZ3MgPSBidWYuZmxhZ3M7CisJYjMyLT5hZ3Bfc3RhcnQgPSBidWYuYWdwX3N0YXJ0 OworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fbWFya2J1ZnMoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpCit7CisJZHJtX2J1Zl9kZXNjMzJfdCAqYjMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2J1Zl9k ZXNjIGJ1ZjsKKworCWJ1Zi5zaXplID0gYjMyLT5zaXplOworCWJ1Zi5sb3dfbWFyayA9IGIzMi0+ bG93X21hcms7CisJYnVmLmhpZ2hfbWFyayA9IGIzMi0+aGlnaF9tYXJrOworCQorCXJldHVybiBk cm1fbWFya2J1ZnMoZGV2LCAodm9pZCAqKSZidWYsIGZpbGVfcHJpdik7Cit9CisKK3R5cGVkZWYg c3RydWN0IGRybV9idWZfaW5mbzMyIHsKKwlpbnQgY291bnQ7CQkvKio8IEVudHJpZXMgaW4gbGlz dCAqLworCXUzMiBsaXN0OworfSBkcm1fYnVmX2luZm8zMl90OworCitzdGF0aWMgaW50IGNvbXBh dF9kcm1faW5mb2J1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2J1Zl9pbmZvMzJfdCAqcmVxMzIgPSBkYXRh OworCWRybV9idWZfZGVzYzMyX3QgKnRvOworCXN0cnVjdCBkcm1fYnVmX2luZm8gKnJlcXVlc3Q7 CisJc3RydWN0IGRybV9idWZfZGVzYyAqbGlzdDsKKwlzaXplX3QgbmJ5dGVzOworCWludCBpLCBl cnI7CisJaW50IGNvdW50LCBhY3R1YWw7CisKKwljb3VudCA9IHJlcTMyLT5jb3VudDsKKwl0byA9 IChkcm1fYnVmX2Rlc2MzMl90ICopKHVuc2lnbmVkIGxvbmcpcmVxMzItPmxpc3Q7CisJaWYgKGNv dW50IDwgMCkKKwkJY291bnQgPSAwOworCisJbmJ5dGVzID0gc2l6ZW9mKCpyZXF1ZXN0KSArIGNv dW50ICogc2l6ZW9mKHN0cnVjdCBkcm1fYnVmX2Rlc2MpOworCXJlcXVlc3QgPSBtYWxsb2MobmJ5 dGVzLCBEUk1fTUVNX0JVRkxJU1RTLCBNX1pFUk8gfCBNX05PV0FJVCk7CisJaWYgKCFyZXF1ZXN0 KQorCQlyZXR1cm4gLUVGQVVMVDsKKwlsaXN0ID0gKHN0cnVjdCBkcm1fYnVmX2Rlc2MgKikgKHJl cXVlc3QgKyAxKTsKKworCXJlcXVlc3QtPmNvdW50ID0gY291bnQ7CisJcmVxdWVzdC0+bGlzdCA9 IGxpc3Q7CisKKwllcnIgPSBkcm1faW5mb2J1ZnMoZGV2LCAodm9pZCAqKXJlcXVlc3QsIGZpbGVf cHJpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFjdHVhbCA9IHJlcXVlc3QtPmNv dW50OworCWlmIChjb3VudCA+PSBhY3R1YWwpCisJCWZvciAoaSA9IDA7IGkgPCBhY3R1YWw7ICsr aSkgeworCQkJdG9baV0uY291bnQgPSBsaXN0W2ldLmNvdW50OworCQkJdG9baV0uc2l6ZSA9IGxp c3RbaV0uc2l6ZTsKKwkJCXRvW2ldLmxvd19tYXJrID0gbGlzdFtpXS5sb3dfbWFyazsKKwkJCXRv W2ldLmhpZ2hfbWFyayA9IGxpc3RbaV0uaGlnaF9tYXJrOworCQkJdG9baV0uZmxhZ3MgPSBsaXN0 W2ldLmZsYWdzOworCQl9CisKKwlyZXEzMi0+Y291bnQgPSBhY3R1YWw7CisKKwlyZXR1cm4gMDsK K30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9wdWIzMiB7CisJaW50IGlkeDsJCS8qKjwgSW5k ZXggaW50byB0aGUgbWFzdGVyIGJ1ZmZlciBsaXN0ICovCisJaW50IHRvdGFsOwkJLyoqPCBCdWZm ZXIgc2l6ZSAqLworCWludCB1c2VkOwkJLyoqPCBBbW91bnQgb2YgYnVmZmVyIGluIHVzZSAoZm9y IERNQSkgKi8KKwl1MzIgYWRkcmVzczsJCS8qKjwgQWRkcmVzcyBvZiBidWZmZXIgKi8KK30gZHJt X2J1Zl9wdWIzMl90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX21hcDMyIHsKKwlpbnQgY291 bnQ7CQkvKio8IExlbmd0aCBvZiB0aGUgYnVmZmVyIGxpc3QgKi8KKwl1MzIgdmlydHVhbDsJCS8q KjwgTW1hcCdkIGFyZWEgaW4gdXNlci12aXJ0dWFsICovCisJdTMyIGxpc3Q7CQkvKio8IEJ1ZmZl ciBpbmZvcm1hdGlvbiAqLworfSBkcm1fYnVmX21hcDMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0 X2RybV9tYXBidWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9idWZfbWFwMzJfdCAqcmVxMzIgPSBkYXRhOwor CWRybV9idWZfcHViMzJfdCAqbGlzdDMyOworCXN0cnVjdCBkcm1fYnVmX21hcCAqcmVxdWVzdDsK KwlzdHJ1Y3QgZHJtX2J1Zl9wdWIgKmxpc3Q7CisJaW50IGksIGVycjsKKwlpbnQgY291bnQsIGFj dHVhbDsKKwlzaXplX3QgbmJ5dGVzOworCisJY291bnQgPSByZXEzMi0+Y291bnQ7CisJbGlzdDMy ID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylyZXEzMi0+bGlzdDsKKworCWlmIChjb3VudCA8IDAp CisJCXJldHVybiAtRUlOVkFMOworCW5ieXRlcyA9IHNpemVvZigqcmVxdWVzdCkgKyBjb3VudCAq IHNpemVvZihzdHJ1Y3QgZHJtX2J1Zl9wdWIpOworCXJlcXVlc3QgPSBtYWxsb2MobmJ5dGVzLCBE Uk1fTUVNX0JVRkxJU1RTLCBNX1pFUk8gfCBNX05PV0FJVCk7CisJaWYgKCFyZXF1ZXN0KQorCQly ZXR1cm4gLUVGQVVMVDsKKwlsaXN0ID0gKHN0cnVjdCBkcm1fYnVmX3B1YiAqKSAocmVxdWVzdCAr IDEpOworCisJcmVxdWVzdC0+Y291bnQgPSBjb3VudDsKKwlyZXF1ZXN0LT5saXN0ID0gbGlzdDsK KworCWVyciA9IGRybV9tYXBidWZzKGRldiwgKHZvaWQgKilyZXF1ZXN0LCBmaWxlX3ByaXYpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhY3R1YWwgPSByZXF1ZXN0LT5jb3VudDsKKwlp ZiAoY291bnQgPj0gYWN0dWFsKQorCQlmb3IgKGkgPSAwOyBpIDwgYWN0dWFsOyArK2kpIHsKKwkJ CWxpc3QzMltpXS5pZHggPSBsaXN0W2ldLmlkeDsKKwkJCWxpc3QzMltpXS50b3RhbCA9IGxpc3Rb aV0udG90YWw7CisJCQlsaXN0MzJbaV0udXNlZCA9IGxpc3RbaV0udXNlZDsKKwkJCWxpc3QzMltp XS5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpbGlzdFtpXS5hZGRyZXNzOworCQl9CisKKwlyZXEz Mi0+Y291bnQgPSBhY3R1YWw7CisJcmVxMzItPnZpcnR1YWwgPSAodW5zaWduZWQgbG9uZylyZXF1 ZXN0LT52aXJ0dWFsOworCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IGRybV9idWZf ZnJlZTMyIHsKKwlpbnQgY291bnQ7CisJdTMyIGxpc3Q7Cit9IGRybV9idWZfZnJlZTMyX3Q7CisK K3N0YXRpYyBpbnQgY29tcGF0X2RybV9mcmVlYnVmcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fYnVmX2ZyZWUz Ml90ICpyZXEzMiA9IGRhdGE7CisJc3RydWN0IGRybV9idWZfZnJlZSByZXF1ZXN0OworCisJcmVx dWVzdC5jb3VudCA9IHJlcTMyLT5jb3VudDsKKwlyZXF1ZXN0Lmxpc3QgPSAoaW50ICopKHVuc2ln bmVkIGxvbmcpcmVxMzItPmxpc3Q7CisKKwlyZXR1cm4gZHJtX2ZyZWVidWZzKGRldiwgKHZvaWQg KikmcmVxdWVzdCwgZmlsZV9wcml2KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2 X21hcDMyIHsKKwl1bnNpZ25lZCBpbnQgY3R4X2lkOwkgLyoqPCBDb250ZXh0IHJlcXVlc3Rpbmcg cHJpdmF0ZSBtYXBwaW5nICovCisJdTMyIGhhbmRsZTsJCS8qKjwgSGFuZGxlIG9mIG1hcCAqLwor fSBkcm1fY3R4X3ByaXZfbWFwMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfZHJtX3NldHNhcmVh Y3R4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2KQoreworCWRybV9jdHhfcHJpdl9tYXAzMl90ICpyZXEzMiA9IGRhdGE7CisJc3Ry dWN0IGRybV9jdHhfcHJpdl9tYXAgcmVxdWVzdDsKKworCXJlcXVlc3QuY3R4X2lkID0gcmVxMzIt PmN0eF9pZDsKKwlyZXF1ZXN0LmhhbmRsZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcmVxMzIt PmhhbmRsZTsKKworCXJldHVybiBkcm1fc2V0c2FyZWFjdHgoZGV2LCAodm9pZCAqKSZyZXF1ZXN0 LCBmaWxlX3ByaXYpOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fZ2V0c2FyZWFjdHgoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpCit7CisJZHJtX2N0eF9wcml2X21hcDMyX3QgKnJlcTMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJt X2N0eF9wcml2X21hcCByZXF1ZXN0OworCWludCBlcnI7CisKKwlyZXF1ZXN0LmN0eF9pZCA9IHJl cTMyLT5jdHhfaWQ7CisKKwllcnIgPSBkcm1fZ2V0c2FyZWFjdHgoZGV2LCAodm9pZCAqKSZyZXF1 ZXN0LCBmaWxlX3ByaXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXEzMi0+aGFu ZGxlID0gKHVuc2lnbmVkIGxvbmcpcmVxdWVzdC5oYW5kbGU7CisKKwlyZXR1cm4gMDsKK30KKwor dHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9yZXMzMiB7CisJaW50IGNvdW50OworCXUzMiBjb250ZXh0 czsKK30gZHJtX2N0eF9yZXMzMl90OworCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fcmVzY3R4KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQoreworCWRybV9jdHhfcmVzMzJfdCAqcmVzMzIgPSBkYXRhOworCXN0cnVjdCBkcm1fY3R4 X3JlcyByZXM7CisJaW50IGVycjsKKworCXJlcy5jb3VudCA9IHJlczMyLT5jb3VudDsKKwlyZXMu Y29udGV4dHMgPSAoc3RydWN0IGRybV9jdHggX191c2VyICopKHVuc2lnbmVkIGxvbmcpcmVzMzIt PmNvbnRleHRzOworCisJZXJyID0gZHJtX3Jlc2N0eChkZXYsICh2b2lkICopJnJlcywgZmlsZV9w cml2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmVzMzItPmNvdW50ID0gcmVzLmNv dW50OworCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IGRybV9kbWEzMiB7CisJaW50 IGNvbnRleHQ7CQkgIC8qKjwgQ29udGV4dCBoYW5kbGUgKi8KKwlpbnQgc2VuZF9jb3VudDsJCSAg LyoqPCBOdW1iZXIgb2YgYnVmZmVycyB0byBzZW5kICovCisJdTMyIHNlbmRfaW5kaWNlczsJICAv Kio8IExpc3Qgb2YgaGFuZGxlcyB0byBidWZmZXJzICovCisJdTMyIHNlbmRfc2l6ZXM7CQkgIC8q KjwgTGVuZ3RocyBvZiBkYXRhIHRvIHNlbmQgKi8KKwllbnVtIGRybV9kbWFfZmxhZ3MgZmxhZ3M7 CQkgIC8qKjwgRmxhZ3MgKi8KKwlpbnQgcmVxdWVzdF9jb3VudDsJICAvKio8IE51bWJlciBvZiBi dWZmZXJzIHJlcXVlc3RlZCAqLworCWludCByZXF1ZXN0X3NpemU7CSAgLyoqPCBEZXNpcmVkIHNp emUgZm9yIGJ1ZmZlcnMgKi8KKwl1MzIgcmVxdWVzdF9pbmRpY2VzOwkgIC8qKjwgQnVmZmVyIGlu Zm9ybWF0aW9uICovCisJdTMyIHJlcXVlc3Rfc2l6ZXM7CisJaW50IGdyYW50ZWRfY291bnQ7CSAg LyoqPCBOdW1iZXIgb2YgYnVmZmVycyBncmFudGVkICovCit9IGRybV9kbWEzMl90OworCitzdGF0 aWMgaW50IGNvbXBhdF9kcm1fZG1hKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9kbWEzMl90ICpkMzIgPSBkYXRh OworCXN0cnVjdCBkcm1fZG1hIGQ7CisJaW50IGVycjsKKworCWQuY29udGV4dCA9IGQzMi0+Y29u dGV4dDsKKwlkLnNlbmRfY291bnQgPSBkMzItPnNlbmRfY291bnQ7CisJZC5zZW5kX2luZGljZXMg PSAoaW50ICopKHVuc2lnbmVkIGxvbmcpZDMyLT5zZW5kX2luZGljZXM7CisJZC5zZW5kX3NpemVz ID0gKGludCAqKSh1bnNpZ25lZCBsb25nKWQzMi0+c2VuZF9zaXplczsKKwlkLmZsYWdzID0gZDMy LT5mbGFnczsKKwlkLnJlcXVlc3RfY291bnQgPSBkMzItPnJlcXVlc3RfY291bnQ7CisJZC5yZXF1 ZXN0X2luZGljZXMgPSAoaW50ICopKHVuc2lnbmVkIGxvbmcpZDMyLT5yZXF1ZXN0X2luZGljZXM7 CisJZC5yZXF1ZXN0X3NpemVzID0gKGludCAqKSh1bnNpZ25lZCBsb25nKWQzMi0+cmVxdWVzdF9z aXplczsKKworCWVyciA9IGRybV9kbWEoZGV2LCAodm9pZCAqKSZkLCBmaWxlX3ByaXYpOworCWlm IChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkMzItPnJlcXVlc3Rfc2l6ZSA9IGQucmVxdWVzdF9z aXplOworCWQzMi0+Z3JhbnRlZF9jb3VudCA9IGQuZ3JhbnRlZF9jb3VudDsKKworCXJldHVybiAw OworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX21vZGUzMiB7CisJdTMyIG1vZGU7CS8qKjwg QUdQIG1vZGUgKi8KK30gZHJtX2FncF9tb2RlMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfZHJt X2FncF9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2FncF9tb2RlMzJfdCAqbTMyID0gZGF0YTsKKwlz dHJ1Y3QgZHJtX2FncF9tb2RlIG1vZGU7CisKKwltb2RlLm1vZGUgPSBtMzItPm1vZGU7CisKKwly ZXR1cm4gZHJtX2FncF9lbmFibGVfaW9jdGwoZGV2LCAodm9pZCAqKSZtb2RlLCBmaWxlX3ByaXYp OworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2luZm8zMiB7CisJaW50IGFncF92ZXJzaW9u X21ham9yOworCWludCBhZ3BfdmVyc2lvbl9taW5vcjsKKwl1MzIgbW9kZTsKKwl1MzIgYXBlcnR1 cmVfYmFzZTsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCXUzMiBhcGVydHVyZV9zaXplOwkvKiBi eXRlcyAqLworCXUzMiBtZW1vcnlfYWxsb3dlZDsJLyogYnl0ZXMgKi8KKwl1MzIgbWVtb3J5X3Vz ZWQ7CisKKwkvKiBQQ0kgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCBpZF92ZW5kb3I7 CisJdW5zaWduZWQgc2hvcnQgaWRfZGV2aWNlOworfSBkcm1fYWdwX2luZm8zMl90OworCitzdGF0 aWMgaW50IGNvbXBhdF9kcm1fYWdwX2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2FncF9pbmZvMzJfdCAq aTMyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2FncF9pbmZvIGluZm87CisJaW50IGVycjsKKworCWVy ciA9IGRybV9hZ3BfaW5mb19pb2N0bChkZXYsICh2b2lkICopJmluZm8sIGZpbGVfcHJpdik7CisJ aWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWkzMi0+YWdwX3ZlcnNpb25fbWFqb3IgPSBpbmZv LmFncF92ZXJzaW9uX21ham9yOworCWkzMi0+YWdwX3ZlcnNpb25fbWlub3IgPSBpbmZvLmFncF92 ZXJzaW9uX21pbm9yOworCWkzMi0+bW9kZSA9IGluZm8ubW9kZTsKKwlpMzItPmFwZXJ0dXJlX2Jh c2UgPSBpbmZvLmFwZXJ0dXJlX2Jhc2U7CisJaTMyLT5hcGVydHVyZV9zaXplID0gaW5mby5hcGVy dHVyZV9zaXplOworCWkzMi0+bWVtb3J5X2FsbG93ZWQgPSBpbmZvLm1lbW9yeV9hbGxvd2VkOwor CWkzMi0+bWVtb3J5X3VzZWQgPSBpbmZvLm1lbW9yeV91c2VkOworCWkzMi0+aWRfdmVuZG9yID0g aW5mby5pZF92ZW5kb3I7CisJaTMyLT5pZF9kZXZpY2UgPSBpbmZvLmlkX2RldmljZTsKKworCXJl dHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2J1ZmZlcjMyIHsKKwl1MzIgc2l6 ZTsJLyoqPCBJbiBieXRlcyAtLSB3aWxsIHJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KKwl1MzIg aGFuZGxlOwkvKio8IFVzZWQgZm9yIGJpbmRpbmcgLyB1bmJpbmRpbmcgKi8KKwl1MzIgdHlwZTsJ LyoqPCBUeXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZSAqLworCXUzMiBwaHlzaWNhbDsJLyoqPCBQ aHlzaWNhbCB1c2VkIGJ5IGk4MTAgKi8KK30gZHJtX2FncF9idWZmZXIzMl90OworCitzdGF0aWMg aW50IGNvbXBhdF9kcm1fYWdwX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9hZ3BfYnVmZmVyMzJfdCAq cmVxMzIgPSBkYXRhOworCXN0cnVjdCBkcm1fYWdwX2J1ZmZlciByZXF1ZXN0OworCWludCBlcnI7 CisKKwlyZXF1ZXN0LnNpemUgPSByZXEzMi0+c2l6ZTsKKwlyZXF1ZXN0LnR5cGUgPSByZXEzMi0+ dHlwZTsKKworCWVyciA9IGRybV9hZ3BfYWxsb2NfaW9jdGwoZGV2LCAodm9pZCAqKSZyZXF1ZXN0 LCBmaWxlX3ByaXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXEzMi0+aGFuZGxl ID0gcmVxdWVzdC5oYW5kbGU7CisJcmVxMzItPnBoeXNpY2FsID0gcmVxdWVzdC5waHlzaWNhbDsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX2ZyZWUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp Cit7CisJZHJtX2FncF9idWZmZXIzMl90ICpyZXEzMiA9IGRhdGE7CisJc3RydWN0IGRybV9hZ3Bf YnVmZmVyIHJlcXVlc3Q7CisKKwlyZXF1ZXN0LmhhbmRsZSA9IHJlcTMyLT5oYW5kbGU7CisKKwly ZXR1cm4gZHJtX2FncF9mcmVlX2lvY3RsKGRldiwgKHZvaWQgKikmcmVxdWVzdCwgZmlsZV9wcml2 KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9iaW5kaW5nMzIgeworCXUzMiBoYW5kbGU7 CS8qKjwgRnJvbSBkcm1fYWdwX2J1ZmZlciAqLworCXUzMiBvZmZzZXQ7CS8qKjwgSW4gYnl0ZXMg LS0gd2lsbCByb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCit9IGRybV9hZ3BfYmluZGluZzMyX3Q7 CisKK3N0YXRpYyBpbnQgY29tcGF0X2RybV9hZ3BfYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fYWdwX2Jp bmRpbmczMl90ICpyZXEzMiA9IGRhdGE7CisJc3RydWN0IGRybV9hZ3BfYmluZGluZyByZXF1ZXN0 OworCisJcmVxdWVzdC5oYW5kbGUgPSByZXEzMi0+aGFuZGxlOworCXJlcXVlc3Qub2Zmc2V0ID0g cmVxMzItPm9mZnNldDsKKworCXJldHVybiBkcm1fYWdwX2JpbmRfaW9jdGwoZGV2LCAodm9pZCAq KSZyZXF1ZXN0LCBmaWxlX3ByaXYpOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX3Vu YmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdikKK3sKKwlkcm1fYWdwX2JpbmRpbmczMl90ICpyZXEzMiA9IGRhdGE7CisJc3Ry dWN0IGRybV9hZ3BfYmluZGluZyByZXF1ZXN0OworCQorCXJlcXVlc3QuaGFuZGxlID0gcmVxMzIt PmhhbmRsZTsKKwkKKwlyZXR1cm4gZHJtX2FncF91bmJpbmRfaW9jdGwoZGV2LCAodm9pZCAqKSZy ZXF1ZXN0LCBmaWxlX3ByaXYpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRo ZXIzMiB7CisJdTMyIHNpemU7CS8qKjwgSW4gYnl0ZXMgLS0gd2lsbCByb3VuZCB0byBwYWdlIGJv dW5kYXJ5ICovCisJdTMyIGhhbmRsZTsJLyoqPCBVc2VkIGZvciBtYXBwaW5nIC8gdW5tYXBwaW5n ICovCit9IGRybV9zY2F0dGVyX2dhdGhlcjMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X2RybV9z Z19hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fc2NhdHRlcl9nYXRoZXIzMl90ICpyZXEzMiA9IGRhdGE7 CisJc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlciByZXF1ZXN0OworCWludCBlcnI7CisKKwlyZXF1 ZXN0LnNpemUgPSAodW5zaWduZWQgbG9uZylyZXEzMi0+c2l6ZTsKKworCWVyciA9IGRybV9zZ19h bGxvY19pb2N0bChkZXYsICh2b2lkICopJnJlcXVlc3QsIGZpbGVfcHJpdik7CisJaWYgKGVycikK KwkJcmV0dXJuIGVycjsKKworCS8qIFhYWCBub3Qgc3VyZSBhYm91dCB0aGUgaGFuZGxlIGNvbnZl cnNpb24gaGVyZS4uLiAqLworCXJlcTMyLT5oYW5kbGUgPSAodW5zaWduZWQgbG9uZylyZXF1ZXN0 LmhhbmRsZSA+PiBQQUdFX1NISUZUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29t cGF0X2RybV9zZ19mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9zY2F0dGVyX2dhdGhlcjMyX3QgKnJlcTMy ID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX3NjYXR0ZXJfZ2F0aGVyIHJlcXVlc3Q7CisKKwlyZXF1ZXN0 LmhhbmRsZSA9ICh1bnNpZ25lZCBsb25nKXJlcTMyLT5oYW5kbGUgPDwgUEFHRV9TSElGVDsKKwor CXJldHVybiBkcm1fc2dfZnJlZShkZXYsICh2b2lkICopJnJlcXVlc3QsIGZpbGVfcHJpdik7Cit9 CisKK3R5cGVkZWYgc3RydWN0IGRybV91cGRhdGVfZHJhdzMyIHsKKwlkcm1fZHJhd2FibGVfdCBo YW5kbGU7CisJdW5zaWduZWQgaW50IHR5cGU7CisJdW5zaWduZWQgaW50IG51bTsKKwkvKiA2NC1i aXQgdmVyc2lvbiBoYXMgYSAzMi1iaXQgcGFkIGhlcmUgKi8KKwl1NjQgZGF0YTsJLyoqPCBQb2lu dGVyICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGRybV91cGRhdGVfZHJhdzMyX3Q7CisK K3N0YXRpYyBpbnQgY29tcGF0X2RybV91cGRhdGVfZHJhdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1fdXBkYXRl X2RyYXczMl90ICp1cGRhdGUzMiA9IGRhdGE7CisJc3RydWN0IGRybV91cGRhdGVfZHJhdyByZXF1 ZXN0OworCWludCBlcnI7CisKKwlyZXF1ZXN0LmhhbmRsZSA9IHVwZGF0ZTMyLT5oYW5kbGU7CisJ cmVxdWVzdC50eXBlID0gdXBkYXRlMzItPnR5cGU7CisJcmVxdWVzdC5udW0gPSB1cGRhdGUzMi0+ bnVtOworCXJlcXVlc3QuZGF0YSA9IHVwZGF0ZTMyLT5kYXRhOworCisJZXJyID0gZHJtX3VwZGF0 ZV9kcmF3KGRldiwgKHZvaWQgKikmcmVxdWVzdCwgZmlsZV9wcml2KTsKKwlyZXR1cm4gZXJyOwor fQorCitzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcXVlc3QzMiB7CisJZW51bSBkcm1fdmJsYW5r X3NlcV90eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHNlcXVlbmNlOworCXUzMiBzaWduYWw7Cit9 OworCitzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5MzIgeworCWVudW0gZHJtX3ZibGFua19z ZXFfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKwlzMzIgdHZhbF9zZWM7CisJ czMyIHR2YWxfdXNlYzsKK307CisKK3R5cGVkZWYgdW5pb24gZHJtX3dhaXRfdmJsYW5rMzIgewor CXN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdDMyIHJlcXVlc3Q7CisJc3RydWN0IGRybV93 YWl0X3ZibGFua19yZXBseTMyIHJlcGx5OworfSBkcm1fd2FpdF92YmxhbmszMl90OworCitzdGF0 aWMgaW50IGNvbXBhdF9kcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3dhaXRfdmJsYW5r MzJfdCAqcmVxMzIgPSBkYXRhOworCXVuaW9uIGRybV93YWl0X3ZibGFuayByZXF1ZXN0OworCWlu dCBlcnI7CisKKwlyZXF1ZXN0LnJlcXVlc3QudHlwZSA9IHJlcTMyLT5yZXF1ZXN0LnR5cGU7CisJ cmVxdWVzdC5yZXF1ZXN0LnNlcXVlbmNlID0gcmVxMzItPnJlcXVlc3Quc2VxdWVuY2U7CisJcmVx dWVzdC5yZXF1ZXN0LnNpZ25hbCA9IHJlcTMyLT5yZXF1ZXN0LnNpZ25hbDsKKworCWVyciA9IGRy bV93YWl0X3ZibGFuayhkZXYsICh2b2lkICopJnJlcXVlc3QsIGZpbGVfcHJpdik7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCXJlcTMyLT5yZXBseS50eXBlID0gcmVxdWVzdC5yZXBseS50 eXBlOworCXJlcTMyLT5yZXBseS5zZXF1ZW5jZSA9IHJlcXVlc3QucmVwbHkuc2VxdWVuY2U7CisJ cmVxMzItPnJlcGx5LnR2YWxfc2VjID0gcmVxdWVzdC5yZXBseS50dmFsX3NlYzsKKwlyZXEzMi0+ cmVwbHkudHZhbF91c2VjID0gcmVxdWVzdC5yZXBseS50dmFsX3VzZWM7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGRybV9pb2N0bF9kZXNjX3QgZHJtX2NvbXBhdF9pb2N0bHNbMjU2XSA9IHsK KwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9WRVJTSU9OMzIsIGNvbXBhdF9kcm1fdmVyc2lvbiwg MCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX1VOSVFVRTMyLCBjb21wYXRfZHJtX2dl dHVuaXF1ZSwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX01BUDMyLCBjb21wYXRf ZHJtX2dldG1hcCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX0NMSUVOVDMyLCBj b21wYXRfZHJtX2dldGNsaWVudCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VUX1NU QVRTMzIsIGNvbXBhdF9kcm1fZ2V0c3RhdHMsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RM X1NFVF9VTklRVUUzMiwgY29tcGF0X2RybV9zZXR1bmlxdWUsIERSTV9BVVRIfERSTV9NQVNURVJ8 RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfQUREX01BUDMyLCBjb21w YXRfZHJtX2FkZG1hcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1f SU9DVExfREVGKERSTV9JT0NUTF9BRERfQlVGUzMyLCBjb21wYXRfZHJtX2FkZGJ1ZnMsIERSTV9B VVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExf TUFSS19CVUZTMzIsIGNvbXBhdF9kcm1fbWFya2J1ZnMsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJN X1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfSU5GT19CVUZTMzIsIGNvbXBh dF9kcm1faW5mb2J1ZnMsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NQVBf QlVGUzMyLCBjb21wYXRfZHJtX21hcGJ1ZnMsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERS TV9JT0NUTF9GUkVFX0JVRlMzMiwgY29tcGF0X2RybV9mcmVlYnVmcywgRFJNX0FVVEgpLAorCURS TV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1JNX01BUDMyLCBjb21wYXRfZHJtX3JtbWFwLCBEUk1fQVVU SCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfU0VUX1NBUkVBX0NUWDMyLCBjb21wYXRfZHJt X3NldHNhcmVhY3R4LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9J T0NUTF9ERUYoRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgzMiwgY29tcGF0X2RybV9nZXRzYXJlYWN0 eCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1JFU19DVFgzMiwgY29tcGF0 X2RybV9yZXNjdHgsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9ETUEzMiwg Y29tcGF0X2RybV9kbWEsIERSTV9BVVRIKSwKKwkKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9B R1BfRU5BQkxFMzIsIGNvbXBhdF9kcm1fYWdwX2VuYWJsZSwgRFJNX0FVVEh8RFJNX01BU1RFUnxE Uk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9BR1BfSU5GTzMyLCBjb21w YXRfZHJtX2FncF9pbmZvLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfQUdQ X0FMTE9DMzIsIGNvbXBhdF9kcm1fYWdwX2FsbG9jLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9S T09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0FHUF9GUkVFMzIsIGNvbXBhdF9k cm1fYWdwX2ZyZWUsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lP Q1RMX0RFRihEUk1fSU9DVExfQUdQX0JJTkQzMiwgY29tcGF0X2RybV9hZ3BfYmluZCwgRFJNX0FV VEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9B R1BfVU5CSU5EMzIsIGNvbXBhdF9kcm1fYWdwX3VuYmluZCwgRFJNX0FVVEh8RFJNX01BU1RFUnxE Uk1fUk9PVF9PTkxZKSwKKwkKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9TR19BTExPQzMyLCBj b21wYXRfZHJtX3NnX2FsbG9jLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAor CURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NHX0ZSRUUzMiwgY29tcGF0X2RybV9zZ19mcmVlLCBE Uk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCQorCURSTV9JT0NUTF9ERUYoRFJN X0lPQ1RMX1VQREFURV9EUkFXMzIsIGNvbXBhdF9kcm1fdXBkYXRlX2RyYXcsIERSTV9BVVRIfERS TV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfV0FJ VF9WQkxBTkszMiwgY29tcGF0X2RybV93YWl0X3ZibGFuaywgRFJNX1VOTE9DS0VEKSwKK307CmRp ZmYgLS1naXQgYS9zeXMvZGV2L2RybTIvaTkxNS9pOTE1X2RtYS5jIGIvc3lzL2Rldi9kcm0yL2k5 MTUvaTkxNV9kbWEuYwppbmRleCBmNzg1NTNlLi41NjQ0YWQ2IDEwMDY0NAotLS0gYS9zeXMvZGV2 L2RybTIvaTkxNS9pOTE1X2RtYS5jCisrKyBiL3N5cy9kZXYvZHJtMi9pOTE1L2k5MTVfZG1hLmMK QEAgLTE0OTMsNiArMTQ5MywxMCBAQCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNb XSA9IHsKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFVF9TUFJJVEVfQ09MT1JLRVksIGludGVs X3Nwcml0ZV9nZXRfY29sb3JrZXksIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VO TE9DS0VEKSwKIH07CiAKKyNpZmRlZiBDT01QQVRfRlJFRUJTRDMyCisjaW5jbHVkZSAiaTkxNV9p b2MzMi5jIgorI2VuZGlmCisKIHN0cnVjdCBkcm1fZHJpdmVyX2luZm8gaTkxNV9kcml2ZXJfaW5m byA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0gICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9SRVFV SVJFX0FHUCB8CiAJICAgIERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZF Ul9MT0NLTEVTU19JUlEgfApAQCAtMTUxNiw2ICsxNTIwLDkgQEAgc3RydWN0IGRybV9kcml2ZXJf aW5mbyBpOTE1X2RyaXZlcl9pbmZvID0gewogCS5zeXNjdGxfY2xlYW51cAk9IGk5MTVfc3lzY3Rs X2NsZWFudXAsCiAKIAkuaW9jdGxzCQk9IGk5MTVfaW9jdGxzLAorI2lmZGVmIENPTVBBVF9GUkVF QlNEMzIKKwkuY29tcGF0X2lvY3RscyAgPSBpOTE1X2NvbXBhdF9pb2N0bHMsCisjZW5kaWYKIAku bWF4X2lvY3RsCT0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpLAogCiAJLm5hbWUJCT0gRFJJ VkVSX05BTUUsCmRpZmYgLS1naXQgYS9zeXMvZGV2L2RybTIvaTkxNS9pOTE1X2lvYzMyLmMgYi9z eXMvZGV2L2RybTIvaTkxNS9pOTE1X2lvYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMzFmODFlNgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvZHJtMi9pOTE1L2k5 MTVfaW9jMzIuYwpAQCAtMCwwICsxLDEyNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIFBhdWwg TWFja2VycmFzIDIwMDUKKyAqIENvcHlyaWdodCAoQykgQWxhbiBIb3VyaWhhbmUgMjAwNQorICog QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUiBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg RlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOgorICogICAgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKiAgICBBbGFu IEhvdXJpaGFuZSA8YWxhbmhAZmFpcmxpdGUuZGVtb24uY28udWs+CisgKi8KKworX19GQlNESUQo IiRGcmVlQlNEJCIpOworCisvKiogQGZpbGUgaTkxNV9pb2MzMi5jCisgKiAzMi1iaXQgaW9jdGwg Y29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgdGhlIGk5MTUgRFJNLgorICovCisKK3R5cGVkZWYg c3RydWN0IF9kcm1faTkxNV9iYXRjaGJ1ZmZlcjMyIHsKKwlpbnQgc3RhcnQ7CQkvKiBhZ3Agb2Zm c2V0ICovCisJaW50IHVzZWQ7CQkvKiBuciBieXRlcyBpbiB1c2UgKi8KKwlpbnQgRFIxOwkJLyog aHcgZmxhZ3MgZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IERSNDsJCS8qIHdpbmRv dyBvcmlnaW4gZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCisJaW50IG51bV9jbGlwcmVjdHM7 CS8qIG11bGl0cGFzcyB3aXRoIG11bHRpcGxlIGNsaXByZWN0cz8gKi8KKwl1MzIgY2xpcHJlY3Rz OwkJLyogcG9pbnRlciB0byB1c2Vyc3BhY2UgY2xpcHJlY3RzICovCit9IGRybV9pOTE1X2JhdGNo YnVmZmVyMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfaTkxNV9iYXRjaGJ1ZmZlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikK K3sKKwlkcm1faTkxNV9iYXRjaGJ1ZmZlcjMyX3QgKmJhdGNoYnVmZmVyMzIgPSBkYXRhOworCWRy bV9pOTE1X2JhdGNoYnVmZmVyX3QgYmF0Y2hidWZmZXI7CisKKwliYXRjaGJ1ZmZlci5zdGFydCA9 IGJhdGNoYnVmZmVyMzItPnN0YXJ0OworCWJhdGNoYnVmZmVyLnVzZWQgPSBiYXRjaGJ1ZmZlcjMy LT51c2VkOworCWJhdGNoYnVmZmVyLkRSMSA9IGJhdGNoYnVmZmVyMzItPkRSMTsKKwliYXRjaGJ1 ZmZlci5EUjQgPSBiYXRjaGJ1ZmZlcjMyLT5EUjQ7CisJYmF0Y2hidWZmZXIubnVtX2NsaXByZWN0 cyA9IGJhdGNoYnVmZmVyMzItPm51bV9jbGlwcmVjdHM7CisJYmF0Y2hidWZmZXIuY2xpcHJlY3Rz ID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyliYXRjaGJ1ZmZlcjMyLT5jbGlwcmVjdHM7CisKKwly ZXR1cm4gaTkxNV9iYXRjaGJ1ZmZlcihkZXYsICh2b2lkICopJmJhdGNoYnVmZmVyLCBmaWxlX3By aXYpOworfQorCit0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfY21kYnVmZmVyMzIgeworCXUzMiBi dWY7CQkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjb21tYW5kIGJ1ZmZlciAqLworCWludCBzejsJ CQkvKiBuciBieXRlcyBpbiBidWYgKi8KKwlpbnQgRFIxOwkJLyogaHcgZmxhZ3MgZm9yIEdGWF9P UF9EUkFXUkVDVF9JTkZPICovCisJaW50IERSNDsJCS8qIHdpbmRvdyBvcmlnaW4gZm9yIEdGWF9P UF9EUkFXUkVDVF9JTkZPICovCisJaW50IG51bV9jbGlwcmVjdHM7CS8qIG11bGl0cGFzcyB3aXRo IG11bHRpcGxlIGNsaXByZWN0cz8gKi8KKwl1MzIgY2xpcHJlY3RzOwkJLyogcG9pbnRlciB0byB1 c2Vyc3BhY2UgY2xpcHJlY3RzICovCit9IGRybV9pOTE1X2NtZGJ1ZmZlcjMyX3Q7CisKK3N0YXRp YyBpbnQgY29tcGF0X2k5MTVfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X2NtZGJ1ZmZl cjMyX3QgKmNtZGJ1ZmZlcjMyID0gZGF0YTsKKwlkcm1faTkxNV9jbWRidWZmZXJfdCBjbWRidWZm ZXI7CisKKwljbWRidWZmZXIuc3ogPSBjbWRidWZmZXIzMi0+c3o7CisJY21kYnVmZmVyLkRSMSA9 IGNtZGJ1ZmZlcjMyLT5EUjE7CisJY21kYnVmZmVyLkRSNCA9IGNtZGJ1ZmZlcjMyLT5EUjQ7CisJ Y21kYnVmZmVyLm51bV9jbGlwcmVjdHMgPSBjbWRidWZmZXIzMi0+bnVtX2NsaXByZWN0czsKKwlj bWRidWZmZXIuY2xpcHJlY3RzID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyljbWRidWZmZXIzMi0+ Y2xpcHJlY3RzOworCisJcmV0dXJuIGk5MTVfY21kYnVmZmVyKGRldiwgKHZvaWQgKikmY21kYnVm ZmVyLCBmaWxlX3ByaXYpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdDMy IHsKKwl1MzIgaXJxX3NlcTsKK30gZHJtX2k5MTVfaXJxX2VtaXQzMl90OworCitzdGF0aWMgaW50 IGNvbXBhdF9pOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X2lycV9lbWl0MzJfdCAq cmVxMzIgPSBkYXRhOworCWRybV9pOTE1X2lycV9lbWl0X3QgcmVxdWVzdDsKKworCXJlcXVlc3Qu aXJxX3NlcSA9IChpbnQgKikodW5zaWduZWQgbG9uZylyZXEzMi0+aXJxX3NlcTsKKworCXJldHVy biBpOTE1X2lycV9lbWl0KGRldiwgKHZvaWQgKikmcmVxdWVzdCwgZmlsZV9wcml2KTsKK30KK3R5 cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtMzIgeworCWludCBwYXJhbTsKKwl1MzIgdmFs dWU7Cit9IGRybV9pOTE1X2dldHBhcmFtMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfaTkxNV9n ZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9nZXRwYXJhbTMyX3QgKnJlcTMyID0gZGF0YTsK Kwlkcm1faTkxNV9nZXRwYXJhbV90IHJlcXVlc3Q7CisKKwlyZXF1ZXN0LnBhcmFtID0gcmVxMzIt PnBhcmFtOworCXJlcXVlc3QudmFsdWUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJlcTMyLT52 YWx1ZTsKKworCXJldHVybiBpOTE1X2dldHBhcmFtKGRldiwgKHZvaWQgKikmcmVxdWVzdCwgZmls ZV9wcml2KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2FsbG9jMzIgeworCWlu dCByZWdpb247CisJaW50IGFsaWdubWVudDsKKwlpbnQgc2l6ZTsKKwl1MzIgcmVnaW9uX29mZnNl dDsJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZmIgb3IgYWdwICovCit9IGRybV9pOTE1X21lbV9h bGxvYzMyX3Q7CisKK2RybV9pb2N0bF9kZXNjX3QgaTkxNV9jb21wYXRfaW9jdGxzW0RSTV9BUlJB WV9TSVpFKGk5MTVfaW9jdGxzKV0gPSB7CisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9CQVRDSEJV RkZFUiwgY29tcGF0X2k5MTVfYmF0Y2hidWZmZXIsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVG KERSTV9JOTE1X0NNREJVRkZFUiwgY29tcGF0X2k5MTVfY21kYnVmZmVyLCBEUk1fQVVUSCksCisJ RFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRVRQQVJBTSwgY29tcGF0X2k5MTVfZ2V0cGFyYW0sIERS TV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0lSUV9FTUlULCBjb21wYXRfaTkxNV9p cnFfZW1pdCwgRFJNX0FVVEgpCit9OwpkaWZmIC0tZ2l0IGEvc3lzL21vZHVsZXMvZHJtMi9kcm0y L01ha2VmaWxlIGIvc3lzL21vZHVsZXMvZHJtMi9kcm0yL01ha2VmaWxlCmluZGV4IGU3MzUyOGIu LjQ4ZWE0MWEgMTAwNjQ0Ci0tLSBhL3N5cy9tb2R1bGVzL2RybTIvZHJtMi9NYWtlZmlsZQorKysg Yi9zeXMvbW9kdWxlcy9kcm0yL2RybTIvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDYgQEAgU1JDUwk9 IFwKIAlkcm1fdm0uYwogCiBTUkNTCSs9ZGV2aWNlX2lmLmggYnVzX2lmLmggcGNpX2lmLmggZGV2 aWNlX2lmLmggaWljYnVzX2lmLmggb3B0X2RybS5oIFwKLQlvcHRfdm0uaAorCW9wdF92bS5oIG9w dF9jb21wYXQuaAogCiAuaW5jbHVkZSA8YnNkLmttb2QubWs+CmRpZmYgLS1naXQgYS9zeXMvbW9k dWxlcy9kcm0yL2k5MTVrbXMvTWFrZWZpbGUgYi9zeXMvbW9kdWxlcy9kcm0yL2k5MTVrbXMvTWFr ZWZpbGUKaW5kZXggNjExZDMxZi4uNmI1NDhjNiAxMDA2NDQKLS0tIGEvc3lzL21vZHVsZXMvZHJt Mi9pOTE1a21zL01ha2VmaWxlCisrKyBiL3N5cy9tb2R1bGVzL2RybTIvaTkxNWttcy9NYWtlZmls ZQpAQCAtMjksNiArMjksNyBAQCBTUkNTCT0gXAogCWludGVsX3Nkdm8uYyBcCiAJaW50ZWxfc3By aXRlLmMgXAogCWludGVsX3R2LmMKLVNSQ1MJKz0gZGV2aWNlX2lmLmggYnVzX2lmLmggcGNpX2lm LmggaWljYnVzX2lmLmggaWljYmJfaWYuaCBvcHRfZHJtLmgKK1NSQ1MJKz0gZGV2aWNlX2lmLmgg YnVzX2lmLmggcGNpX2lmLmggaWljYnVzX2lmLmggaWljYmJfaWYuaCBvcHRfZHJtLmggXAorCSBv cHRfY29tcGF0LmgKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgo= --e89a8f923ba0d5719b04c6f3547f--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABnABoZKENJqcoQbkw6A0hJY_YY6Y0-FUM6GghtE%2Ba4wH7GwVA>