From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulina Szubarczyk Subject: [PATCH v2 2/2] qdisk - hw/block/xen_disk: grant copy implementation Date: Mon, 13 Jun 2016 11:43:56 +0200 Message-ID: <1465811036-17026-3-git-send-email-paulinaszubarczyk@gmail.com> References: <1465811036-17026-1-git-send-email-paulinaszubarczyk@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bCOR9-0003Go-Gi for xen-devel@lists.xenproject.org; Mon, 13 Jun 2016 09:45:39 +0000 Received: by mail-lf0-f65.google.com with SMTP id l184so939293lfl.1 for ; Mon, 13 Jun 2016 02:45:38 -0700 (PDT) In-Reply-To: <1465811036-17026-1-git-send-email-paulinaszubarczyk@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, roger.pau@citrix.com Cc: sstabellini@kernel.org, wei.liu2@citrix.com, Paulina Szubarczyk , ian.jackson@eu.citrix.com, P.Gawkowski@ii.pw.edu.pl, dvrabel@cantab.net, anthony.perard@citrix.com List-Id: xen-devel@lists.xenproject.org Q29weSBkYXRhIG9wZXJhdGVkIG9uIGR1cmluZyByZXF1ZXN0IGZyb20vdG8gbG9jYWwgYnVmZmVy cyB0by9mcm9tIAp0aGUgZ3JhbnQgcmVmZXJlbmNlcy4gCgpCZWZvcmUgZ3JhbnQgY29weSBvcGVy YXRpb24gbG9jYWwgYnVmZmVycyBtdXN0IGJlIGFsbG9jYXRlZCB3aGF0IGlzIApkb25lIGJ5IGNh bGxpbmcgaW9yZXFfaW5pdF9jb3B5X2J1ZmZlcnMuIEZvciB0aGUgJ3JlYWQnIG9wZXJhdGlvbiwg CmZpcnN0LCB0aGUgcWVtdSBkZXZpY2UgaW52b2tlcyB0aGUgcmVhZCBvcGVyYXRpb24gb24gbG9j YWwgYnVmZmVycyAKYW5kIG9uIHRoZSBjb21wbGV0aW9uIGdyYW50IGNvcHkgaXMgY2FsbGVkIGFu ZCBidWZmZXJzIGFyZSBmcmVlZC4gCkZvciB0aGUgJ3dyaXRlJyBvcGVyYXRpb24gZ3JhbnQgY29w eSBpcyBwZXJmb3JtZWQgYmVmb3JlIGludm9raW5nIAp3cml0ZSBieSBxZW11IGRldmljZS4gCgpB IG5ldyB2YWx1ZSAnZmVhdHVyZV9ncmFudF9jb3B5JyBpcyBhZGRlZCB0byByZWNvZ25pemUgd2hl biB0aGUgCmdyYW50IGNvcHkgb3BlcmF0aW9uIGlzIHN1cHBvcnRlZCBieSBhIGd1ZXN0LiAKVGhl IGJvZHkgb2YgdGhlIGZ1bmN0aW9uICdpb3JlcV9ydW5pb19xZW11X2FpbycgaXMgbW92ZWQgdG8g Cidpb3JlcV9ydW5pb19xZW11X2Fpb19ibGsnIGFuZCBpbiB0aGUgJ2lvcmVxX3J1bmlvX3FlbXVf YWlvJyBkZXBlbmRpbmcKb24gdGhlIHN1cHBvcnQgZm9yIGdyYW50IGNvcHkgYWNjb3JkaW5nIGNo ZWNrcywgaW5pdGlhbGl6YXRpb24sIGdyYW50IApvcGVyYXRpb24gYXJlIG1hZGUsIHRoZW4gdGhl ICdpb3JlcV9ydW5pb19xZW11X2Fpb19ibGsnIGZ1bmN0aW9uIGlzIApjYWxsZWQuIAoKU2lnbmVk LW9mZi1ieTogUGF1bGluYSBTenViYXJjenlrIDxwYXVsaW5hc3p1YmFyY3p5a0BnbWFpbC5jb20+ Ci0tLQpDaGFuZ2VzIHNpbmNlIHYxOgotIHJlbW92ZWQgdGhlICdpb3JlcV93cml0ZScsJ2lvcmVx X3JlYWRfaW5pdCcsJ2lvcmVxX3JlYWQnIGZ1bmN0aW9ucyAKLSBpbXBsZW1lbnRlZCAnaW9yZXFf aW5pdF9jb3B5X2J1ZmZlcnMnLCAnaW9yZXFfY29weScgCi0gcmV2ZXJ0ZWQgdGhlIHJlbW92YWwg b2YgZ3JhbnQgbWFwIGFuZCBpbnRyb2R1Y2VkIGNvbmRpdGlvbmFsIGludm9raW5nCiAgZ3JhbnQg Y29weSBvciBncmFudCBtYXAKLSByZXNpZ25lZCBmcm9tIGNhY2hpbmcgdGhlIGxvY2FsIGJ1ZmZl cnMgb24gYmVoYWxmIG9mIGFsbG9jYXRpbmcgdGhlIAogIHJlcXVpcmVkIGFtb3VudCBvZiBwYWdl cyBhdCBvbmNlLiBUaGUgY2FjaGVkIHN0cnVjdHVyZSB3b3VsZCByZXF1aXJlIAogIHRvIGhhdmUg YW4gbG9jayBndWFyZCBhbmQgSSBzdXBwb3NlIHRoYXQgdGhlIHBlcmZvcm1hbmNlIGltcHJvdmVt ZW50IAogIHdvdWxkIGRlZ3JhZGVkLiAKCiBody9ibG9jay94ZW5fZGlzay5jIHwgMTc1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAxNjMgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv aHcvYmxvY2sveGVuX2Rpc2suYyBiL2h3L2Jsb2NrL3hlbl9kaXNrLmMKaW5kZXggMzdlMTRkMS4u YWY2YjhjNyAxMDA2NDQKLS0tIGEvaHcvYmxvY2sveGVuX2Rpc2suYworKysgYi9ody9ibG9jay94 ZW5fZGlzay5jCkBAIC0xMzEsNiArMTMxLDkgQEAgc3RydWN0IFhlbkJsa0RldiB7CiAgICAgdW5z aWduZWQgaW50ICAgICAgICBwZXJzaXN0ZW50X2dudF9jb3VudDsKICAgICB1bnNpZ25lZCBpbnQg ICAgICAgIG1heF9ncmFudHM7CiAKKyAgICAvKiBHcmFudCBjb3B5ICovCisgICAgZ2Jvb2xlYW4g ICAgICAgICAgICBmZWF0dXJlX2dyYW50X2NvcHk7CisKICAgICAvKiBxZW11IGJsb2NrIGRyaXZl ciAqLwogICAgIERyaXZlSW5mbyAgICAgICAgICAgKmRpbmZvOwogICAgIEJsb2NrQmFja2VuZCAg ICAgICAgKmJsazsKQEAgLTUwMCw2ICs1MDMsMTAwIEBAIHN0YXRpYyBpbnQgaW9yZXFfbWFwKHN0 cnVjdCBpb3JlcSAqaW9yZXEpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkKiBnZXRf YnVmZmVyKGludCBjb3VudCkgCit7CisgICAgcmV0dXJuIHhjX21lbWFsaWduKHhlbl94YywgWENf UEFHRV9TSVpFLCBjb3VudCpYQ19QQUdFX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1 ZmZlcnMoc3RydWN0IGlvcmVxICppb3JlcSkgCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkg PSAwOyBpIDwgaW9yZXEtPnYubmlvdjsgaSsrKSB7IAorICAgICAgICBpb3JlcS0+cGFnZVtpXSA9 IE5VTEw7CisgICAgfQorCisgICAgZnJlZShpb3JlcS0+cGFnZXMpOworfQorCitzdGF0aWMgaW50 IGlvcmVxX2luaXRfY29weV9idWZmZXJzKHN0cnVjdCBpb3JlcSAqaW9yZXEpIHsKKyAgICBpbnQg aTsKKworICAgIGlmIChpb3JlcS0+di5uaW92ID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfQorCisgICAgaW9yZXEtPnBhZ2VzID0gZ2V0X2J1ZmZlcihpb3JlcS0+di5uaW92KTsKKyAg ICBpZiAoIWlvcmVxLT5wYWdlcykgeyAKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICB9CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgaW9yZXEtPnYubmlvdjsgaSsrKSB7CisgICAgICAgIGlvcmVxLT5w YWdlW2ldID0gaW9yZXEtPnBhZ2VzICsgaSpYQ19QQUdFX1NJWkU7CisgICAgICAgIGlvcmVxLT52 LmlvdltpXS5pb3ZfYmFzZSArPSAodWludHB0cl90KWlvcmVxLT5wYWdlW2ldOworICAgIH0KKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvcmVxX2NvcHkoc3RydWN0IGlvcmVxICpp b3JlcSkgCit7CisgICAgWGVuR250dGFiIGdudCA9IGlvcmVxLT5ibGtkZXYtPnhlbmRldi5nbnR0 YWJkZXY7CisgICAgeGNfZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90IHNlZ3NbQkxLSUZfTUFY X1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKKyAgICBpbnQgaSwgY291bnQgPSAwLCByLCByYzsKKyAg ICBpbnQ2NF90IGZpbGVfYmxrID0gaW9yZXEtPmJsa2Rldi0+ZmlsZV9ibGs7CisKKyAgICBpZiAo aW9yZXEtPnYubmlvdiA9PSAwKSB7CisgICAgICAgIHIgPSAwOyBnb3RvIG91dDsKKyAgICB9CisK KyAgICBjb3VudCA9IGlvcmVxLT52Lm5pb3Y7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7 IGkrKykgeworCisgICAgICAgIHhjX2dudHRhYl9ncmFudF9jb3B5X3B0cl90ICpmcm9tLCAqdG87 CisKKyAgICAgICAgaWYgKGlvcmVxLT5yZXEub3BlcmF0aW9uID09IEJMS0lGX09QX1JFQUQpIHsK KyAgICAgICAgICAgIHNlZ3NbaV0uZmxhZ3MgPSBHTlRDT1BZX2Rlc3RfZ3JlZjsKKyAgICAgICAg ICAgIGZyb20gPSAmKHNlZ3NbaV0uZGVzdCk7CisgICAgICAgICAgICB0byA9ICYoc2Vnc1tpXS5z b3VyY2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2Vnc1tpXS5mbGFncyA9IEdO VENPUFlfc291cmNlX2dyZWY7CisgICAgICAgICAgICBmcm9tID0gJihzZWdzW2ldLnNvdXJjZSk7 CisgICAgICAgICAgICB0byA9ICYoc2Vnc1tpXS5kZXN0KTsKKyAgICAgICAgfQorICAgICAgICBz ZWdzW2ldLmxlbiA9IChpb3JlcS0+cmVxLnNlZ1tpXS5sYXN0X3NlY3QgCisgICAgICAgICAgICAg ICAgICAgICAgIC0gaW9yZXEtPnJlcS5zZWdbaV0uZmlyc3Rfc2VjdCArIDEpICogZmlsZV9ibGs7 CisgICAgICAgIGZyb20tPmZvcmVpZ24ucmVmID0gaW9yZXEtPnJlZnNbaV07CisgICAgICAgIGZy b20tPmZvcmVpZ24uZG9taWQgPSBpb3JlcS0+ZG9taWRzW2ldOworICAgICAgICBmcm9tLT5mb3Jl aWduLm9mZnNldCA9IGlvcmVxLT5yZXEuc2VnW2ldLmZpcnN0X3NlY3QgKiBmaWxlX2JsazsKKyAg ICAgICAgdG8tPnZpcnQgPSBpb3JlcS0+di5pb3ZbaV0uaW92X2Jhc2U7CisgICAgfQorCisgICAg cmMgPSB4Y19nbnR0YWJfZ3JhbnRfY29weShnbnQsIGNvdW50LCBzZWdzKTsKKworICAgIGlmIChy YykgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKCZpb3JlcS0+YmxrZGV2LT54ZW5kZXYsIDAsIAor ICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gY29weSBkYXRhICVkIFxuIiwgcmMpOwor ICAgICAgICBpb3JlcS0+YWlvX2Vycm9ycysrOworICAgICAgICByID0gLTE7IGdvdG8gb3V0Owor ICAgIH0gZWxzZSB7CisgICAgICAgIHIgPSAwOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChzZWdzW2ldLnN0YXR1cyAhPSBHTlRTVF9va2F5 KSB7CisgICAgICAgICAgICB4ZW5fYmVfcHJpbnRmKCZpb3JlcS0+YmxrZGV2LT54ZW5kZXYsIDAs IAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGNvcHkgZGF0YSAlZCBmb3Ig Z3JlZiAlZCwgZG9taWQgJWRcbiIsIHJjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW9y ZXEtPnJlZnNbaV0sIGlvcmVxLT5kb21pZHNbaV0pOyAKKyAgICAgICAgICAgIGlvcmVxLT5haW9f ZXJyb3JzKys7CisgICAgICAgICAgICByID0gLTE7CisgICAgICAgIH0KKyAgICB9CitvdXQ6Cisg ICAgcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgaW9yZXFfcnVuaW9fcWVtdV9haW8oc3RydWN0 IGlvcmVxICppb3JlcSk7CiAKIHN0YXRpYyB2b2lkIHFlbXVfYWlvX2NvbXBsZXRlKHZvaWQgKm9w YXF1ZSwgaW50IHJldCkKQEAgLTUyMSw2ICs2MTgsNyBAQCBzdGF0aWMgdm9pZCBxZW11X2Fpb19j b21wbGV0ZSh2b2lkICpvcGFxdWUsIGludCByZXQpCiAgICAgaWYgKGlvcmVxLT5haW9faW5mbGln aHQgPiAwKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKICAgICBpZiAoaW9yZXEtPnBvc3Rz eW5jKSB7CiAgICAgICAgIGlvcmVxLT5wb3N0c3luYyA9IDA7CiAgICAgICAgIGlvcmVxLT5haW9f aW5mbGlnaHQrKzsKQEAgLTUyOCw4ICs2MjYsMzIgQEAgc3RhdGljIHZvaWQgcWVtdV9haW9fY29t cGxldGUodm9pZCAqb3BhcXVlLCBpbnQgcmV0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisg ICAgaWYgKGlvcmVxLT5ibGtkZXYtPmZlYXR1cmVfZ3JhbnRfY29weSkgeworICAgICAgICBzd2l0 Y2ggKGlvcmVxLT5yZXEub3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgQkxLSUZfT1BfUkVBRDoK KyAgICAgICAgICAgIC8qIGluIGNhc2Ugb2YgZmFpbHVyZSBpb3JlcS0+YWlvX2Vycm9ycyBpcyBp bmNyZWFzZWQKKyAgICAgICAgICAgICAqIGFuZCBpdCBpcyBsb2dnZWQgKi8KKyAgICAgICAgICAg IGlvcmVxX2NvcHkoaW9yZXEpOworICAgICAgICAgICAgZnJlZV9idWZmZXJzKGlvcmVxKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJMS0lGX09QX1dSSVRFOgorICAgICAgICBj YXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToKKyAgICAgICAgICAgIGlmICghaW9yZXEtPnJl cS5ucl9zZWdtZW50cykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZnJlZV9idWZmZXJzKGlvcmVxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAg ICBpb3JlcS0+c3RhdHVzID0gaW9yZXEtPmFpb19lcnJvcnMgPyBCTEtJRl9SU1BfRVJST1IgOiBC TEtJRl9SU1BfT0tBWTsKLSAgICBpb3JlcV91bm1hcChpb3JlcSk7CisgICAgCisgICAgaWYgKCFp b3JlcS0+YmxrZGV2LT5mZWF0dXJlX2dyYW50X2NvcHkpIHsKKyAgICAgICAgaW9yZXFfdW5tYXAo aW9yZXEpOworICAgIH0KKwogICAgIGlvcmVxX2ZpbmlzaChpb3JlcSk7CiAgICAgc3dpdGNoIChp b3JlcS0+cmVxLm9wZXJhdGlvbikgewogICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6CkBAIC01NDcs MTQgKzY2OSw0MiBAQCBzdGF0aWMgdm9pZCBxZW11X2Fpb19jb21wbGV0ZSh2b2lkICpvcGFxdWUs IGludCByZXQpCiAgICAgcWVtdV9iaF9zY2hlZHVsZShpb3JlcS0+YmxrZGV2LT5iaCk7CiB9CiAK K3N0YXRpYyBpbnQgaW9yZXFfcnVuaW9fcWVtdV9haW9fYmxrKHN0cnVjdCBpb3JlcSAqaW9yZXEp OworCiBzdGF0aWMgaW50IGlvcmVxX3J1bmlvX3FlbXVfYWlvKHN0cnVjdCBpb3JlcSAqaW9yZXEp CiB7Ci0gICAgc3RydWN0IFhlbkJsa0RldiAqYmxrZGV2ID0gaW9yZXEtPmJsa2RldjsKKyAgICBp ZiAoaW9yZXEtPmJsa2Rldi0+ZmVhdHVyZV9ncmFudF9jb3B5KSB7CisKKyAgICAgICAgaW9yZXFf aW5pdF9jb3B5X2J1ZmZlcnMoaW9yZXEpOworICAgICAgICBpZiAoaW9yZXEtPnJlcS5ucl9zZWdt ZW50cyAmJiAoaW9yZXEtPnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUgfHwKKyAgICAg ICAgICAgIGlvcmVxLT5yZXEub3BlcmF0aW9uID09IEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRSkp IHsKKyAgICAgICAgICAgIGlmIChpb3JlcV9jb3B5KGlvcmVxKSkgeworICAgICAgICAgICAgICAg IGZyZWVfYnVmZmVycyhpb3JlcSk7CisgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlvcmVxX3J1bmlvX3FlbXVfYWlvX2Jsayhp b3JlcSkpIGdvdG8gZXJyOwogCi0gICAgaWYgKGlvcmVxLT5yZXEubnJfc2VnbWVudHMgJiYgaW9y ZXFfbWFwKGlvcmVxKSA9PSAtMSkgewotICAgICAgICBnb3RvIGVycl9ub19tYXA7CisgICAgfSBl bHNlIHsKKyAgICAgICAgCisgICAgICAgIGlmIChpb3JlcS0+cmVxLm5yX3NlZ21lbnRzICYmIGlv cmVxX21hcChpb3JlcSkpIGdvdG8gZXJyOworICAgICAgICBpZiAoaW9yZXFfcnVuaW9fcWVtdV9h aW9fYmxrKGlvcmVxKSkgeworICAgICAgICAgICAgaW9yZXFfdW5tYXAoaW9yZXEpOworICAgICAg ICAgICAgZ290byBlcnI7CisgICAgICAgIH0KICAgICB9CiAKKyAgICByZXR1cm4gMDsKK2VycjoK KyAgICBpb3JlcV9maW5pc2goaW9yZXEpOworICAgIGlvcmVxLT5zdGF0dXMgPSBCTEtJRl9SU1Bf RVJST1I7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlvcmVxX3J1bmlvX3FlbXVf YWlvX2JsayhzdHJ1Y3QgaW9yZXEgKmlvcmVxKSAKK3sKKyAgICBzdHJ1Y3QgWGVuQmxrRGV2ICpi bGtkZXYgPSBpb3JlcS0+YmxrZGV2OworCiAgICAgaW9yZXEtPmFpb19pbmZsaWdodCsrOwogICAg IGlmIChpb3JlcS0+cHJlc3luYykgewogICAgICAgICBibGtfYWlvX2ZsdXNoKGlvcmVxLT5ibGtk ZXYtPmJsaywgcWVtdV9haW9fY29tcGxldGUsIGlvcmVxKTsKQEAgLTU5NCwxOSArNzQ0LDEyIEBA IHN0YXRpYyBpbnQgaW9yZXFfcnVuaW9fcWVtdV9haW8oc3RydWN0IGlvcmVxICppb3JlcSkKICAg ICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogdW5rbm93biBvcGVyYXRpb24gKHNob3VsZG4n dCBoYXBwZW4gLS0gcGFyc2UgY2F0Y2hlcyB0aGlzKSAqLwotICAgICAgICBnb3RvIGVycjsKKyAg ICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHFlbXVfYWlvX2NvbXBsZXRlKGlvcmVxLCAw KTsKIAogICAgIHJldHVybiAwOwotCi1lcnI6Ci0gICAgaW9yZXFfdW5tYXAoaW9yZXEpOwotZXJy X25vX21hcDoKLSAgICBpb3JlcV9maW5pc2goaW9yZXEpOwotICAgIGlvcmVxLT5zdGF0dXMgPSBC TEtJRl9SU1BfRVJST1I7Ci0gICAgcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGJsa19zZW5k X3Jlc3BvbnNlX29uZShzdHJ1Y3QgaW9yZXEgKmlvcmVxKQpAQCAtMTAyMCwxMCArMTE2MywxOCBA QCBzdGF0aWMgaW50IGJsa19jb25uZWN0KHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldikKIAogICAg IHhlbl9iZV9iaW5kX2V2dGNobigmYmxrZGV2LT54ZW5kZXYpOwogCisgICAgeGNfZ250dGFiX2dy YW50X2NvcHlfc2VnbWVudF90IHNlZzsKKyAgICBibGtkZXYtPmZlYXR1cmVfZ3JhbnRfY29weSA9 IAorICAgICAgICAgICAgICAgICh4Y19nbnR0YWJfZ3JhbnRfY29weShibGtkZXYtPnhlbmRldi5n bnR0YWJkZXYsIDAsICZzZWcpID09IDApOworCisgICAgeGVuX2JlX3ByaW50ZigmYmxrZGV2LT54 ZW5kZXYsIDMsICJHUkFOVCBDT1BZICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgIGJsa2Rldi0+ ZmVhdHVyZV9ncmFudF9jb3B5ID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIik7CisKICAgICB4ZW5f YmVfcHJpbnRmKCZibGtkZXYtPnhlbmRldiwgMSwgIm9rOiBwcm90byAlcywgcmluZy1yZWYgJWQs ICIKICAgICAgICAgICAgICAgICAgICJyZW1vdGUgcG9ydCAlZCwgbG9jYWwgcG9ydCAlZFxuIiwK ICAgICAgICAgICAgICAgICAgIGJsa2Rldi0+eGVuZGV2LnByb3RvY29sLCBibGtkZXYtPnJpbmdf cmVmLAogICAgICAgICAgICAgICAgICAgYmxrZGV2LT54ZW5kZXYucmVtb3RlX3BvcnQsIGJsa2Rl di0+eGVuZGV2LmxvY2FsX3BvcnQpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKLS0gCjEuOS4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK