From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [EARLY RFC][PATCH 2/4] dma-buf: pools: Add page-pool for dma-buf pools Date: Wed, 20 Feb 2019 23:40:28 -0800 Message-ID: <1550734830-23499-3-git-send-email-john.stultz@linaro.org> References: <1550734830-23499-1-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id EA2E989364 for ; Thu, 21 Feb 2019 07:40:37 +0000 (UTC) Received: by mail-pg1-x544.google.com with SMTP id m2so11094385pgl.5 for ; Wed, 20 Feb 2019 23:40:37 -0800 (PST) In-Reply-To: <1550734830-23499-1-git-send-email-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laura Abbott Cc: Chenbo Feng , Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIHRoZSBwYWdlLXBvb2wgbG9naWMgdG8gdGhlIGRtYS1idWYgcG9vbHMgd2hpY2gg YWxsb3dzCmEgcG9vbCB0byBrZWVwIHByZS1hbGxvY2F0ZWQvZmx1c2hlZCBwYWdlcyBhcm91bmQg d2hpY2ggY2FuCnNwZWVkIHVwIGFsbG9jYXRpb24gcGVyZm9ybWFuY2UuCgpOT1RFOiBUaGUgcGFn ZS1wb29scyBuYW1lIGlzIHRlcm0gcHJlc2VydmVkIGZyb20gSU9OLCBidXQgaXQgaGFzCnBvdGVu dGlhbCB0byBiZSBlYXNpbHkgY29uZnVzZWQgd2l0aCBkbWEtYnVmIHBvb2xzLiBTdWdnZXN0aW9u cwpmb3IgYWx0ZXJuYXRpdmVzIGhlcmUgd291bGQgYmUgZ3JlYXQuCgpDYzogTGF1cmEgQWJib3R0 IDxsYWJib3R0QHJlZGhhdC5jb20+CkNjOiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2Fp Z25hcmRAbGluYXJvLm9yZz4KQ2M6IFN1bWl0IFNlbXdhbCA8c3VtaXQuc2Vtd2FsQGxpbmFyby5v cmc+CkNjOiBMaWFtIE1hcmsgPGxtYXJrQGNvZGVhdXJvcmEub3JnPgpDYzogQnJpYW4gU3Rhcmtl eSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgpDYzogQW5kcmV3IEYuIERhdmlzIDxhZmRAdGkuY29t PgpDYzogQ2hlbmJvIEZlbmcgPGZlbmdjQGdvb2dsZS5jb20+CkNjOiBBbGlzdGFpciBTdHJhY2hh biA8YXN0cmFjaGFuQGdvb2dsZS5jb20+CkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnClNpZ25lZC1vZmYtYnk6IEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgot LS0KIGRyaXZlcnMvZG1hLWJ1Zi9wb29scy9NYWtlZmlsZSAgICAgICB8ICAgMiArLQogZHJpdmVy cy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5oIHwgIDUxICsrKysrKysrKysrKwogZHJpdmVy cy9kbWEtYnVmL3Bvb2xzL3BhZ2VfcG9vbC5jICAgIHwgMTU3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDIwOSBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL3Bvb2xzL3BhZ2Vf cG9vbC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL01ha2VmaWxlIGIvZHJp dmVycy9kbWEtYnVmL3Bvb2xzL01ha2VmaWxlCmluZGV4IDZjYjEyODQuLmE1MWVjMjUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1i dWYvcG9vbHMvTWFrZWZpbGUKQEAgLTEsMiArMSwyIEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCi1vYmotJChDT05GSUdfRE1BQlVGX1BPT0xTKQkJKz0gZG1hYnVmLXBvb2xz Lm8gcG9vbC1pb2N0bC5vIHBvb2wtaGVscGVycy5vCitvYmotJChDT05GSUdfRE1BQlVGX1BPT0xT KQkJKz0gZG1hYnVmLXBvb2xzLm8gcG9vbC1pb2N0bC5vIHBvb2wtaGVscGVycy5vIHBhZ2VfcG9v bC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvcG9vbHMvZG1hYnVmLXBvb2xzLmggYi9k cml2ZXJzL2RtYS1idWYvcG9vbHMvZG1hYnVmLXBvb2xzLmgKaW5kZXggMTIxMTBmMi4uZTNhMGFh YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5oCisrKyBi L2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMuaApAQCAtMjM4LDYgKzIzOCw1NyBA QCBzaXplX3QgZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2hyaW5rKHN0cnVjdCBkbWFidWZfcG9vbCAq cG9vbCwKICAqLwogc2l6ZV90IGRtYWJ1Zl9wb29sX2ZyZWVsaXN0X3NpemUoc3RydWN0IGRtYWJ1 Zl9wb29sICpwb29sKTsKIAorLyoqCisgKiBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBkZXN0 cm95aW5nIGEgcGFnZSBwb29sIC0tIGFsbG93cyB5b3UKKyAqIHRvIGtlZXAgYSBwYWdlIHBvb2wg b2YgcHJlIGFsbG9jYXRlZCBtZW1vcnkgdG8gdXNlIGZyb20geW91ciBwb29sLiAgS2VlcGluZwor ICogYSBwYWdlIHBvb2wgb2YgbWVtb3J5IHRoYXQgaXMgcmVhZHkgZm9yIGRtYSwgaWUgYW55IGNh Y2hlZCBtYXBwaW5nIGhhdmUgYmVlbgorICogaW52YWxpZGF0ZWQgZnJvbSB0aGUgY2FjaGUsIHBy b3ZpZGVzIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYmVuZWZpdCBvbgorICogbWFueSBzeXN0 ZW1zCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZG1hYnVmX3BhZ2VfcG9vbCAtIHBhZ2Vwb29sIHN0 cnVjdAorICogQGhpZ2hfY291bnQ6CQludW1iZXIgb2YgaGlnaG1lbSBpdGVtcyBpbiB0aGUgcG9v bAorICogQGxvd19jb3VudDoJCW51bWJlciBvZiBsb3dtZW0gaXRlbXMgaW4gdGhlIHBvb2wKKyAq IEBoaWdoX2l0ZW1zOgkJbGlzdCBvZiBoaWdobWVtIGl0ZW1zCisgKiBAbG93X2l0ZW1zOgkJbGlz dCBvZiBsb3dtZW0gaXRlbXMKKyAqIEBtdXRleDoJCWxvY2sgcHJvdGVjdGluZyB0aGlzIHN0cnVj dCBhbmQgZXNwZWNpYWxseSB0aGUgY291bnQKKyAqCQkJaXRlbSBsaXN0CisgKiBAZ2ZwX21hc2s6 CQlnZnBfbWFzayB0byB1c2UgZnJvbSBhbGxvYworICogQG9yZGVyOgkJb3JkZXIgb2YgcGFnZXMg aW4gdGhlIHBvb2wKKyAqIEBsaXN0OgkJcGxpc3Qgbm9kZSBmb3IgbGlzdCBvZiBwb29scworICoK KyAqIEFsbG93cyB5b3UgdG8ga2VlcCBhIHBhZ2UgcG9vbCBvZiBwcmUgYWxsb2NhdGVkIHBhZ2Vz IHRvIHVzZSBmcm9tIHlvdXIgcG9vbC4KKyAqIEtlZXBpbmcgYSBwb29sIG9mIHBhZ2VzIHRoYXQg aXMgcmVhZHkgZm9yIGRtYSwgaWUgYW55IGNhY2hlZCBtYXBwaW5nIGhhdmUKKyAqIGJlZW4gaW52 YWxpZGF0ZWQgZnJvbSB0aGUgY2FjaGUsIHByb3ZpZGVzIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFu Y2UgYmVuZWZpdAorICogb24gbWFueSBzeXN0ZW1zCisgKi8KK3N0cnVjdCBkbWFidWZfcGFnZV9w b29sIHsKKwlpbnQgaGlnaF9jb3VudDsKKwlpbnQgbG93X2NvdW50OworCXN0cnVjdCBsaXN0X2hl YWQgaGlnaF9pdGVtczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxvd19pdGVtczsKKwlzdHJ1Y3QgbXV0 ZXggbXV0ZXg7CisJZ2ZwX3QgZ2ZwX21hc2s7CisJdW5zaWduZWQgaW50IG9yZGVyOworCXN0cnVj dCBwbGlzdF9ub2RlIGxpc3Q7Cit9OworCitzdHJ1Y3QgZG1hYnVmX3BhZ2VfcG9vbCAqZG1hYnVm X3BhZ2VfcG9vbF9jcmVhdGUoZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCQkgdW5zaWduZWQgaW50IG9y ZGVyKTsKK3ZvaWQgZG1hYnVmX3BhZ2VfcG9vbF9kZXN0cm95KHN0cnVjdCBkbWFidWZfcGFnZV9w b29sICpwb29sKTsKK3N0cnVjdCBwYWdlICpkbWFidWZfcGFnZV9wb29sX2FsbG9jKHN0cnVjdCBk bWFidWZfcGFnZV9wb29sICpwb29sKTsKK3ZvaWQgZG1hYnVmX3BhZ2VfcG9vbF9mcmVlKHN0cnVj dCBkbWFidWZfcGFnZV9wb29sICpwb29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKy8qKiBkbWFi dWZfcGFnZV9wb29sX3NocmluayAtIHNocmlua3MgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBjYWNo ZWQgaW4gdGhlIHBvb2wKKyAqIEBwb29sOgkJdGhlIHBhZ2UgcG9vbAorICogQGdmcF9tYXNrOgkJ dGhlIG1lbW9yeSB0eXBlIHRvIHJlY2xhaW0KKyAqIEBucl90b19zY2FuOgkJbnVtYmVyIG9mIGl0 ZW1zIHRvIHNocmluayBpbiBwYWdlcworICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVt cyBmcmVlZCBpbiBwYWdlcworICovCitpbnQgZG1hYnVmX3BhZ2VfcG9vbF9zaHJpbmsoc3RydWN0 IGRtYWJ1Zl9wYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrLAorCQkJICAgIGludCBucl90 b19zY2FuKTsKIAogbG9uZyBkbWFidWZfcG9vbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5z aWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2RtYS1idWYvcG9vbHMvcGFnZV9wb29sLmMgYi9kcml2ZXJzL2RtYS1idWYvcG9vbHMvcGFnZV9w b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmZTk5NAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9wYWdlX3Bvb2wuYwpAQCAtMCwwICsx LDE1NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBkcml2 ZXJzL2RtYS1idWYvcG9vbHMvcGFnZV9wb29sLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg R29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgTGluYXJvIEx0ZC4KKyAqLworCisj aW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRl IDxsaW51eC9zd2FwLmg+CisKKyNpbmNsdWRlICJkbWFidWYtcG9vbHMuaCIKKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgcGFnZSAqZG1hYnVmX3BhZ2VfcG9vbF9hbGxvY19wYWdlcygKKwkJCQkJCXN0 cnVjdCBkbWFidWZfcGFnZV9wb29sICpwb29sKQoreworCXJldHVybiBhbGxvY19wYWdlcyhwb29s LT5nZnBfbWFzaywgcG9vbC0+b3JkZXIpOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfcGFnZV9w b29sX2ZyZWVfcGFnZXMoc3RydWN0IGRtYWJ1Zl9wYWdlX3Bvb2wgKnBvb2wsCisJCQkJCXN0cnVj dCBwYWdlICpwYWdlKQoreworCV9fZnJlZV9wYWdlcyhwYWdlLCBwb29sLT5vcmRlcik7Cit9CisK K3N0YXRpYyB2b2lkIGRtYWJ1Zl9wYWdlX3Bvb2xfYWRkKHN0cnVjdCBkbWFidWZfcGFnZV9wb29s ICpwb29sLAorCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwltdXRleF9sb2NrKCZwb29sLT5t dXRleCk7CisJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCWxpc3RfYWRkX3RhaWwoJnBhZ2Ut PmxydSwgJnBvb2wtPmhpZ2hfaXRlbXMpOworCQlwb29sLT5oaWdoX2NvdW50Kys7CisJfSBlbHNl IHsKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcG9vbC0+bG93X2l0ZW1zKTsKKwkJcG9v bC0+bG93X2NvdW50Kys7CisJfQorCisJbW9kX25vZGVfcGFnZV9zdGF0ZShwYWdlX3BnZGF0KHBh Z2UpLCBOUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSwKKwkJCQkJCQkxIDw8IHBvb2wtPm9yZGVy KTsKKwltdXRleF91bmxvY2soJnBvb2wtPm11dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdl ICpkbWFidWZfcGFnZV9wb29sX3JlbW92ZShzdHJ1Y3QgZG1hYnVmX3BhZ2VfcG9vbCAqcG9vbCwK KwkJCQkJICAgIGJvb2wgaGlnaCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmIChoaWdo KSB7CisJCVdBUk5fT04oIXBvb2wtPmhpZ2hfY291bnQpOworCQlwYWdlID0gbGlzdF9maXJzdF9l bnRyeSgmcG9vbC0+aGlnaF9pdGVtcywgc3RydWN0IHBhZ2UsIGxydSk7CisJCXBvb2wtPmhpZ2hf Y291bnQtLTsKKwl9IGVsc2UgeworCQlXQVJOX09OKCFwb29sLT5sb3dfY291bnQpOworCQlwYWdl ID0gbGlzdF9maXJzdF9lbnRyeSgmcG9vbC0+bG93X2l0ZW1zLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsK KwkJcG9vbC0+bG93X2NvdW50LS07CisJfQorCisJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJbW9k X25vZGVfcGFnZV9zdGF0ZShwYWdlX3BnZGF0KHBhZ2UpLCBOUl9LRVJORUxfTUlTQ19SRUNMQUlN QUJMRSwKKwkJCQkJCQktKDEgPDwgcG9vbC0+b3JkZXIpKTsKKwlyZXR1cm4gcGFnZTsKK30KKwor c3RydWN0IHBhZ2UgKmRtYWJ1Zl9wYWdlX3Bvb2xfYWxsb2Moc3RydWN0IGRtYWJ1Zl9wYWdlX3Bv b2wgKnBvb2wpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCisJV0FSTl9PTighcG9v bCk7CisKKwltdXRleF9sb2NrKCZwb29sLT5tdXRleCk7CisJaWYgKHBvb2wtPmhpZ2hfY291bnQp CisJCXBhZ2UgPSBkbWFidWZfcGFnZV9wb29sX3JlbW92ZShwb29sLCB0cnVlKTsKKwllbHNlIGlm IChwb29sLT5sb3dfY291bnQpCisJCXBhZ2UgPSBkbWFidWZfcGFnZV9wb29sX3JlbW92ZShwb29s LCBmYWxzZSk7CisJbXV0ZXhfdW5sb2NrKCZwb29sLT5tdXRleCk7CisKKwlpZiAoIXBhZ2UpCisJ CXBhZ2UgPSBkbWFidWZfcGFnZV9wb29sX2FsbG9jX3BhZ2VzKHBvb2wpOworCisJcmV0dXJuIHBh Z2U7Cit9CisKK3ZvaWQgZG1hYnVmX3BhZ2VfcG9vbF9mcmVlKHN0cnVjdCBkbWFidWZfcGFnZV9w b29sICpwb29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlXQVJOX09OKHBvb2wtPm9yZGVyICE9 IGNvbXBvdW5kX29yZGVyKHBhZ2UpKTsKKworCWRtYWJ1Zl9wYWdlX3Bvb2xfYWRkKHBvb2wsIHBh Z2UpOworfQorCitzdGF0aWMgaW50IGRtYWJ1Zl9wYWdlX3Bvb2xfdG90YWwoc3RydWN0IGRtYWJ1 Zl9wYWdlX3Bvb2wgKnBvb2wsIGJvb2wgaGlnaCkKK3sKKwlpbnQgY291bnQgPSBwb29sLT5sb3df Y291bnQ7CisKKwlpZiAoaGlnaCkKKwkJY291bnQgKz0gcG9vbC0+aGlnaF9jb3VudDsKKworCXJl dHVybiBjb3VudCA8PCBwb29sLT5vcmRlcjsKK30KKworaW50IGRtYWJ1Zl9wYWdlX3Bvb2xfc2hy aW5rKHN0cnVjdCBkbWFidWZfcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnBfbWFzaywKKwkJCSAg ICBpbnQgbnJfdG9fc2NhbikKK3sKKwlpbnQgZnJlZWQgPSAwOworCWJvb2wgaGlnaDsKKworCWlm IChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQloaWdoID0gdHJ1ZTsKKwllbHNlCisJCWhpZ2ggPSAh IShnZnBfbWFzayAmIF9fR0ZQX0hJR0hNRU0pOworCisJaWYgKG5yX3RvX3NjYW4gPT0gMCkKKwkJ cmV0dXJuIGRtYWJ1Zl9wYWdlX3Bvb2xfdG90YWwocG9vbCwgaGlnaCk7CisKKwl3aGlsZSAoZnJl ZWQgPCBucl90b19zY2FuKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCW11dGV4X2xvY2so JnBvb2wtPm11dGV4KTsKKwkJaWYgKHBvb2wtPmxvd19jb3VudCkgeworCQkJcGFnZSA9IGRtYWJ1 Zl9wYWdlX3Bvb2xfcmVtb3ZlKHBvb2wsIGZhbHNlKTsKKwkJfSBlbHNlIGlmIChoaWdoICYmIHBv b2wtPmhpZ2hfY291bnQpIHsKKwkJCXBhZ2UgPSBkbWFidWZfcGFnZV9wb29sX3JlbW92ZShwb29s LCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCW11dGV4X3VubG9jaygmcG9vbC0+bXV0ZXgpOworCQkJ YnJlYWs7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwb29sLT5tdXRleCk7CisJCWRtYWJ1Zl9wYWdl X3Bvb2xfZnJlZV9wYWdlcyhwb29sLCBwYWdlKTsKKwkJZnJlZWQgKz0gKDEgPDwgcG9vbC0+b3Jk ZXIpOworCX0KKworCXJldHVybiBmcmVlZDsKK30KKworc3RydWN0IGRtYWJ1Zl9wYWdlX3Bvb2wg KmRtYWJ1Zl9wYWdlX3Bvb2xfY3JlYXRlKGdmcF90IGdmcF9tYXNrLAorCQkJCQkJIHVuc2lnbmVk IGludCBvcmRlcikKK3sKKwlzdHJ1Y3QgZG1hYnVmX3BhZ2VfcG9vbCAqcG9vbCA9IGttYWxsb2Mo c2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBvb2wpCisJCXJldHVybiBOVUxM OworCXBvb2wtPmhpZ2hfY291bnQgPSAwOworCXBvb2wtPmxvd19jb3VudCA9IDA7CisJSU5JVF9M SVNUX0hFQUQoJnBvb2wtPmxvd19pdGVtcyk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmhpZ2hf aXRlbXMpOworCXBvb2wtPmdmcF9tYXNrID0gZ2ZwX21hc2sgfCBfX0dGUF9DT01QOworCXBvb2wt Pm9yZGVyID0gb3JkZXI7CisJbXV0ZXhfaW5pdCgmcG9vbC0+bXV0ZXgpOworCXBsaXN0X25vZGVf aW5pdCgmcG9vbC0+bGlzdCwgb3JkZXIpOworCisJcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQgZG1h YnVmX3BhZ2VfcG9vbF9kZXN0cm95KHN0cnVjdCBkbWFidWZfcGFnZV9wb29sICpwb29sKQorewor CWtmcmVlKHBvb2wpOworfQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==