From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCH 4/9] xen: credit2: group the runq manipulating functions. Date: Thu, 26 Jan 2017 01:30:14 +0100 Message-ID: <148539061397.5464.1056583005783258880.stgit@Solace.fritz.box> References: <148539008889.5464.5896389113741708672.stgit@Solace.fritz.box> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cWXxC-0005nG-Mc for xen-devel@lists.xenproject.org; Thu, 26 Jan 2017 00:30:18 +0000 Received: by mail-wm0-f68.google.com with SMTP id r144so46496211wme.0 for ; Wed, 25 Jan 2017 16:30:16 -0800 (PST) In-Reply-To: <148539008889.5464.5896389113741708672.stgit@Solace.fritz.box> 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 Cc: George Dunlap , Anshul Makkar List-Id: xen-devel@lists.xenproject.org U28gdGhhdCB0aGV5J3JlIGFsbCBjbG9zZSBhbW9uZyBlYWNoIG90aGVyLCBhbmQKYWxzbyBuZWFy IHRvIHRoZSBjb21tZW50IGRlc2NyaWJpbmQgdGhlIHJ1bnF1ZXVlCm9yZ2FuaXphdGlvbiAod2hp Y2ggaXMgYWxzbyBtb3ZlZCkuCgpObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZC4KClNpZ25l ZC1vZmYtYnk6IERhcmlvIEZhZ2dpb2xpIDxkYXJpby5mYWdnaW9saUBjaXRyaXguY29tPgotLS0K Q2M6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAZXUuY2l0cml4LmNvbT4KQ2M6IEFuc2h1 bCBNYWtrYXIgPGFuc2h1bC5tYWtrYXJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vY29tbW9uL3NjaGVk X2NyZWRpdDIuYyB8ICA1NzIgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyODYgaW5zZXJ0aW9ucygrKSwgMjg2IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0Mi5jIGIveGVuL2NvbW1vbi9z Y2hlZF9jcmVkaXQyLmMKaW5kZXggYjc2NGNmOS4uZjRjMGFlNCAxMDA2NDQKLS0tIGEveGVuL2Nv bW1vbi9zY2hlZF9jcmVkaXQyLmMKKysrIGIveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMKQEAg LTI5NSw2MyArMjk1LDYgQEAgc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IG9wdF9vdmVybG9hZF9i YWxhbmNlX3RvbGVyYW5jZSA9IC0zOwogaW50ZWdlcl9wYXJhbSgiY3JlZGl0Ml9iYWxhbmNlX292 ZXIiLCBvcHRfb3ZlcmxvYWRfYmFsYW5jZV90b2xlcmFuY2UpOwogCiAvKgotICogUnVucXVldWUg b3JnYW5pemF0aW9uLgotICoKLSAqIFRoZSB2YXJpb3VzIGNwdXMgYXJlIHRvIGJlIGFzc2lnbmVk IGVhY2ggb25lIHRvIGEgcnVucXVldWUsIGFuZCB3ZQotICogd2FudCB0aGF0IHRvIGhhcHBlbiBi YXNpbmcgb24gdG9wb2xvZ3kuIEF0IHRoZSBtb21lbnQsIGl0IGlzIHBvc3NpYmxlCi0gKiB0byBj aG9vc2UgdG8gYXJyYW5nZSBydW5xdWV1ZXMgdG8gYmU6Ci0gKgotICogLSBwZXItY29yZTogbWVh bmluZyB0aGF0IHRoZXJlIHdpbGwgYmUgb25lIHJ1bnF1ZXVlIHBlciBlYWNoIHBoeXNpY2FsCi0g KiAgICAgICAgICAgICBjb3JlIG9mIHRoZSBob3N0LiBUaGlzIHdpbGwgaGFwcGVuIGlmIHRoZSBv cHRfcnVucXVldWUKLSAqICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBzZXQgdG8gJ2NvcmUnOwot ICoKLSAqIC0gcGVyLXNvY2tldDogbWVhbmluZyB0aGF0IHRoZXJlIHdpbGwgYmUgb25lIHJ1bnF1 ZXVlIHBlciBlYWNoIHBoeXNpY2FsCi0gKiAgICAgICAgICAgICAgIHNvY2tldCAoQUtBIHBhY2th Z2UsIHdoaWNoIG9mdGVuLCBidXQgbm90IGFsd2F5cywgYWxzbwotICogICAgICAgICAgICAgICBt YXRjaGVzIGEgTlVNQSBub2RlKSBvZiB0aGUgaG9zdDsgVGhpcyB3aWxsIGhhcHBlbiBpZgotICog ICAgICAgICAgICAgICB0aGUgb3B0X3J1bnF1ZXVlIHBhcmFtZXRlciBpcyBzZXQgdG8gJ3NvY2tl dCc7Ci0gKgotICogLSBwZXItbm9kZTogbWVhbmluZyB0aGF0IHRoZXJlIHdpbGwgYmUgb25lIHJ1 bnF1ZXVlIHBlciBlYWNoIHBoeXNpY2FsCi0gKiAgICAgICAgICAgICBOVU1BIG5vZGUgb2YgdGhl IGhvc3QuIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlIG9wdF9ydW5xdWV1ZQotICogICAgICAgICAg ICAgcGFyYW1ldGVyIGlzIHNldCB0byAnbm9kZSc7Ci0gKgotICogLSBnbG9iYWw6IG1lYW5pbmcg dGhhdCB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIHJ1bnF1ZXVlIHRvIHdoaWNoIGFsbCB0aGUKLSAq ICAgICAgICAgICAobG9naWNhbCkgcHJvY2Vzc29ycyBvZiB0aGUgaG9zdCBiZWxvbmcuIFRoaXMg d2lsbCBoYXBwZW4gaWYKLSAqICAgICAgICAgICB0aGUgb3B0X3J1bnF1ZXVlIHBhcmFtZXRlciBp cyBzZXQgdG8gJ2FsbCcuCi0gKgotICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBvcHRfcnVu cXVldWUsIHRoZXJlZm9yZSwgY3B1cyB0aGF0IGFyZSBwYXJ0IG9mCi0gKiBlaXRoZXIgdGhlIHNh bWUgcGh5c2ljYWwgY29yZSwgdGhlIHNhbWUgcGh5c2ljYWwgc29ja2V0LCB0aGUgc2FtZSBOVU1B Ci0gKiBub2RlLCBvciBqdXN0IGFsbCBvZiB0aGVtLCB3aWxsIGJlIHB1dCB0b2dldGhlciB0byBm b3JtIHJ1bnF1ZXVlcy4KLSAqLwotI2RlZmluZSBPUFRfUlVOUVVFVUVfQ09SRSAgIDAKLSNkZWZp bmUgT1BUX1JVTlFVRVVFX1NPQ0tFVCAxCi0jZGVmaW5lIE9QVF9SVU5RVUVVRV9OT0RFICAgMgot I2RlZmluZSBPUFRfUlVOUVVFVUVfQUxMICAgIDMKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBv cHRfcnVucXVldWVfc3RyW10gPSB7Ci0gICAgW09QVF9SVU5RVUVVRV9DT1JFXSA9ICJjb3JlIiwK LSAgICBbT1BUX1JVTlFVRVVFX1NPQ0tFVF0gPSAic29ja2V0IiwKLSAgICBbT1BUX1JVTlFVRVVF X05PREVdID0gIm5vZGUiLAotICAgIFtPUFRfUlVOUVVFVUVfQUxMXSA9ICJhbGwiCi19Owotc3Rh dGljIGludCBfX3JlYWRfbW9zdGx5IG9wdF9ydW5xdWV1ZSA9IE9QVF9SVU5RVUVVRV9TT0NLRVQ7 Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX2NyZWRpdDJfcnVucXVldWUoY29uc3QgY2hhciAqcykKLXsK LSAgICB1bnNpZ25lZCBpbnQgaTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShv cHRfcnVucXVldWVfc3RyKTsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICggIXN0cmNtcChzLCBv cHRfcnVucXVldWVfc3RyW2ldKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9wdF9ydW5xdWV1 ZSA9IGk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcmlu dGsoIldBUk5JTkcsIHVucmVjb2duaXplZCB2YWx1ZSBvZiBjcmVkaXQyX3J1bnF1ZXVlIG9wdGlv biFcbiIpOwotfQotY3VzdG9tX3BhcmFtKCJjcmVkaXQyX3J1bnF1ZXVlIiwgcGFyc2VfY3JlZGl0 Ml9ydW5xdWV1ZSk7Ci0KLS8qCiAgKiBQZXItcnVucXVldWUgZGF0YQogICovCiBzdHJ1Y3QgY3Nj aGVkMl9ydW5xdWV1ZV9kYXRhIHsKQEAgLTU2Myw0NSArNTA2LDMwNCBAQCBzdGF0aWMgaW50IGdl dF9mYWxsYmFja19jcHUoc3RydWN0IGNzY2hlZDJfdmNwdSAqc3ZjKQogICAgICAgICByZXR1cm4g Y3B1bWFza19maXJzdChjcHVtYXNrX3NjcmF0Y2hfY3B1KGNwdSkpOwogICAgIH0KIAotICAgIEFT U0VSVCghY3B1bWFza19lbXB0eShjcHVtYXNrX3NjcmF0Y2hfY3B1KGNwdSkpKTsKLQotICAgIHJl dHVybiBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfc2NyYXRjaF9jcHUoY3B1KSk7CisgICAgQVNTRVJU KCFjcHVtYXNrX2VtcHR5KGNwdW1hc2tfc2NyYXRjaF9jcHUoY3B1KSkpOworCisgICAgcmV0dXJu IGNwdW1hc2tfZmlyc3QoY3B1bWFza19zY3JhdGNoX2NwdShjcHUpKTsKK30KKworLyoKKyAqIFRp bWUtdG8tY3JlZGl0LCBjcmVkaXQtdG8tdGltZS4KKyAqCisgKiBXZSBrZWVwIHRyYWNrIG9mIHRo ZSAicmVzaWR1YWwiIHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgZnJlcXVlbnQgc2hvcnQKKyAqIHNj aGVkdWxlcyBzdGlsbCBnZXQgYWNjb3VudGVkIGZvciBpbiB0aGUgZW5kLgorICoKKyAqIEZJWE1F OiBEbyBwcmUtY2FsY3VsYXRlZCBkaXZpc2lvbj8KKyAqLworc3RhdGljIHZvaWQgdDJjX3VwZGF0 ZShzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQsIHNfdGltZV90IHRpbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKnN2YykKK3sKKyAgICB1 aW50NjRfdCB2YWwgPSB0aW1lICogcnFkLT5tYXhfd2VpZ2h0ICsgc3ZjLT5yZXNpZHVhbDsKKwor ICAgIHN2Yy0+cmVzaWR1YWwgPSBkb19kaXYodmFsLCBzdmMtPndlaWdodCk7CisgICAgc3ZjLT5j cmVkaXQgLT0gdmFsOworfQorCitzdGF0aWMgc190aW1lX3QgYzJ0KHN0cnVjdCBjc2NoZWQyX3J1 bnF1ZXVlX2RhdGEgKnJxZCwgc190aW1lX3QgY3JlZGl0LCBzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpz dmMpCit7CisgICAgcmV0dXJuIGNyZWRpdCAqIHN2Yy0+d2VpZ2h0IC8gcnFkLT5tYXhfd2VpZ2h0 OworfQorCisvKgorICogUnVucXVldWUgcmVsYXRlZCBjb2RlLgorICovCisKKy8qCisgKiBSdW5x dWV1ZSBvcmdhbml6YXRpb24uCisgKgorICogVGhlIHZhcmlvdXMgY3B1cyBhcmUgdG8gYmUgYXNz aWduZWQgZWFjaCBvbmUgdG8gYSBydW5xdWV1ZSwgYW5kIHdlCisgKiB3YW50IHRoYXQgdG8gaGFw cGVuIGJhc2luZyBvbiB0b3BvbG9neS4gQXQgdGhlIG1vbWVudCwgaXQgaXMgcG9zc2libGUKKyAq IHRvIGNob29zZSB0byBhcnJhbmdlIHJ1bnF1ZXVlcyB0byBiZToKKyAqCisgKiAtIHBlci1jb3Jl OiBtZWFuaW5nIHRoYXQgdGhlcmUgd2lsbCBiZSBvbmUgcnVucXVldWUgcGVyIGVhY2ggcGh5c2lj YWwKKyAqICAgICAgICAgICAgIGNvcmUgb2YgdGhlIGhvc3QuIFRoaXMgd2lsbCBoYXBwZW4gaWYg dGhlIG9wdF9ydW5xdWV1ZQorICogICAgICAgICAgICAgcGFyYW1ldGVyIGlzIHNldCB0byAnY29y ZSc7CisgKgorICogLSBwZXItc29ja2V0OiBtZWFuaW5nIHRoYXQgdGhlcmUgd2lsbCBiZSBvbmUg cnVucXVldWUgcGVyIGVhY2ggcGh5c2ljYWwKKyAqICAgICAgICAgICAgICAgc29ja2V0IChBS0Eg cGFja2FnZSwgd2hpY2ggb2Z0ZW4sIGJ1dCBub3QgYWx3YXlzLCBhbHNvCisgKiAgICAgICAgICAg ICAgIG1hdGNoZXMgYSBOVU1BIG5vZGUpIG9mIHRoZSBob3N0OyBUaGlzIHdpbGwgaGFwcGVuIGlm CisgKiAgICAgICAgICAgICAgIHRoZSBvcHRfcnVucXVldWUgcGFyYW1ldGVyIGlzIHNldCB0byAn c29ja2V0JzsKKyAqCisgKiAtIHBlci1ub2RlOiBtZWFuaW5nIHRoYXQgdGhlcmUgd2lsbCBiZSBv bmUgcnVucXVldWUgcGVyIGVhY2ggcGh5c2ljYWwKKyAqICAgICAgICAgICAgIE5VTUEgbm9kZSBv ZiB0aGUgaG9zdC4gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgb3B0X3J1bnF1ZXVlCisgKiAgICAg ICAgICAgICBwYXJhbWV0ZXIgaXMgc2V0IHRvICdub2RlJzsKKyAqCisgKiAtIGdsb2JhbDogbWVh bmluZyB0aGF0IHRoZXJlIHdpbGwgYmUgb25seSBvbmUgcnVucXVldWUgdG8gd2hpY2ggYWxsIHRo ZQorICogICAgICAgICAgIChsb2dpY2FsKSBwcm9jZXNzb3JzIG9mIHRoZSBob3N0IGJlbG9uZy4g VGhpcyB3aWxsIGhhcHBlbiBpZgorICogICAgICAgICAgIHRoZSBvcHRfcnVucXVldWUgcGFyYW1l dGVyIGlzIHNldCB0byAnYWxsJy4KKyAqCisgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIG9w dF9ydW5xdWV1ZSwgdGhlcmVmb3JlLCBjcHVzIHRoYXQgYXJlIHBhcnQgb2YKKyAqIGVpdGhlciB0 aGUgc2FtZSBwaHlzaWNhbCBjb3JlLCB0aGUgc2FtZSBwaHlzaWNhbCBzb2NrZXQsIHRoZSBzYW1l IE5VTUEKKyAqIG5vZGUsIG9yIGp1c3QgYWxsIG9mIHRoZW0sIHdpbGwgYmUgcHV0IHRvZ2V0aGVy IHRvIGZvcm0gcnVucXVldWVzLgorICovCisjZGVmaW5lIE9QVF9SVU5RVUVVRV9DT1JFICAgMAor I2RlZmluZSBPUFRfUlVOUVVFVUVfU09DS0VUIDEKKyNkZWZpbmUgT1BUX1JVTlFVRVVFX05PREUg ICAyCisjZGVmaW5lIE9QVF9SVU5RVUVVRV9BTEwgICAgMworc3RhdGljIGNvbnN0IGNoYXIgKmNv bnN0IG9wdF9ydW5xdWV1ZV9zdHJbXSA9IHsKKyAgICBbT1BUX1JVTlFVRVVFX0NPUkVdID0gImNv cmUiLAorICAgIFtPUFRfUlVOUVVFVUVfU09DS0VUXSA9ICJzb2NrZXQiLAorICAgIFtPUFRfUlVO UVVFVUVfTk9ERV0gPSAibm9kZSIsCisgICAgW09QVF9SVU5RVUVVRV9BTExdID0gImFsbCIKK307 CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgb3B0X3J1bnF1ZXVlID0gT1BUX1JVTlFVRVVFX1NP Q0tFVDsKKworc3RhdGljIHZvaWQgcGFyc2VfY3JlZGl0Ml9ydW5xdWV1ZShjb25zdCBjaGFyICpz KQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9T SVpFKG9wdF9ydW5xdWV1ZV9zdHIpOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCAhc3RyY21w KHMsIG9wdF9ydW5xdWV1ZV9zdHJbaV0pICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0X3J1 bnF1ZXVlID0gaTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg IHByaW50aygiV0FSTklORywgdW5yZWNvZ25pemVkIHZhbHVlIG9mIGNyZWRpdDJfcnVucXVldWUg b3B0aW9uIVxuIik7Cit9CitjdXN0b21fcGFyYW0oImNyZWRpdDJfcnVucXVldWUiLCBwYXJzZV9j cmVkaXQyX3J1bnF1ZXVlKTsKKworc3RhdGljIGlubGluZSBpbnQgdmNwdV9vbl9ydW5xKHN0cnVj dCBjc2NoZWQyX3ZjcHUgKnN2YykKK3sKKyAgICByZXR1cm4gIWxpc3RfZW1wdHkoJnN2Yy0+cnVu cV9lbGVtKTsKK30KKworc3RhdGljIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKiBydW5xX2VsZW0oc3Ry dWN0IGxpc3RfaGVhZCAqZWxlbSkKK3sKKyAgICByZXR1cm4gbGlzdF9lbnRyeShlbGVtLCBzdHJ1 Y3QgY3NjaGVkMl92Y3B1LCBydW5xX2VsZW0pOworfQorCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV9y dW5xdWV1ZShzdHJ1Y3QgY3NjaGVkMl9wcml2YXRlICpwcnYsIGludCBycWkpCit7CisgICAgc3Ry dWN0IGNzY2hlZDJfcnVucXVldWVfZGF0YSAqcnFkOworCisgICAgcnFkID0gcHJ2LT5ycWQgKyBy cWk7CisKKyAgICBCVUdfT04oIWNwdW1hc2tfZW1wdHkoJnJxZC0+YWN0aXZlKSk7CisKKyAgICBy cWQtPm1heF93ZWlnaHQgPSAxOworICAgIHJxZC0+aWQgPSBycWk7CisgICAgSU5JVF9MSVNUX0hF QUQoJnJxZC0+c3ZjKTsKKyAgICBJTklUX0xJU1RfSEVBRCgmcnFkLT5ydW5xKTsKKyAgICBzcGlu X2xvY2tfaW5pdCgmcnFkLT5sb2NrKTsKKworICAgIF9fY3B1bWFza19zZXRfY3B1KHJxaSwgJnBy di0+YWN0aXZlX3F1ZXVlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfcnVucXVldWUo c3RydWN0IGNzY2hlZDJfcHJpdmF0ZSAqcHJ2LCBpbnQgcnFpKQoreworICAgIHN0cnVjdCBjc2No ZWQyX3J1bnF1ZXVlX2RhdGEgKnJxZDsKKworICAgIHJxZCA9IHBydi0+cnFkICsgcnFpOworCisg ICAgQlVHX09OKCFjcHVtYXNrX2VtcHR5KCZycWQtPmFjdGl2ZSkpOworCisgICAgcnFkLT5pZCA9 IC0xOworCisgICAgX19jcHVtYXNrX2NsZWFyX2NwdShycWksICZwcnYtPmFjdGl2ZV9xdWV1ZXMp OworfQorCitzdGF0aWMgaW5saW5lIGJvb2xfdCBzYW1lX25vZGUodW5zaWduZWQgaW50IGNwdWEs IHVuc2lnbmVkIGludCBjcHViKQoreworICAgIHJldHVybiBjcHVfdG9fbm9kZShjcHVhKSA9PSBj cHVfdG9fbm9kZShjcHViKTsKK30KKworc3RhdGljIGlubGluZSBib29sX3Qgc2FtZV9zb2NrZXQo dW5zaWduZWQgaW50IGNwdWEsIHVuc2lnbmVkIGludCBjcHViKQoreworICAgIHJldHVybiBjcHVf dG9fc29ja2V0KGNwdWEpID09IGNwdV90b19zb2NrZXQoY3B1Yik7Cit9CisKK3N0YXRpYyBpbmxp bmUgYm9vbF90IHNhbWVfY29yZSh1bnNpZ25lZCBpbnQgY3B1YSwgdW5zaWduZWQgaW50IGNwdWIp Cit7CisgICAgcmV0dXJuIHNhbWVfc29ja2V0KGNwdWEsIGNwdWIpICYmCisgICAgICAgICAgIGNw dV90b19jb3JlKGNwdWEpID09IGNwdV90b19jb3JlKGNwdWIpOworfQorCitzdGF0aWMgdW5zaWdu ZWQgaW50CitjcHVfdG9fcnVucXVldWUoc3RydWN0IGNzY2hlZDJfcHJpdmF0ZSAqcHJ2LCB1bnNp Z25lZCBpbnQgY3B1KQoreworICAgIHN0cnVjdCBjc2NoZWQyX3J1bnF1ZXVlX2RhdGEgKnJxZDsK KyAgICB1bnNpZ25lZCBpbnQgcnFpOworCisgICAgZm9yICggcnFpID0gMDsgcnFpIDwgbnJfY3B1 X2lkczsgcnFpKysgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHBlZXJfY3B1OworCisg ICAgICAgIC8qCisgICAgICAgICAqIEFzIHNvb24gYXMgd2UgY29tZSBhY3Jvc3MgYW4gdW5pbml0 aWFsaXplZCBydW5xdWV1ZSwgdXNlIGl0LgorICAgICAgICAgKiBJbiBmYWN0LCBlaXRoZXI6Cisg ICAgICAgICAqICAtIHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIGZpcnN0IGNwdSwgYW5kIHdlIGFz c2lnbiBpdCB0bworICAgICAgICAgKiAgICBydW5xdWV1ZSAwLiBUaGlzIGlzIGhhbmR5LCBlc3Bl Y2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nCisgICAgICAgICAqICAgIHdpdGggdGhlIGJvb3QgY3B1 IChpZiBjcmVkaXQyIGlzIHRoZSBkZWZhdWx0IHNjaGVkdWxlciksCisgICAgICAgICAqICAgIGFz IHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIHVzZSBjcHVfdG9fc29ja2V0KCkgYW5kIHNpbWlsYXIK KyAgICAgICAgICogICAgaGVscGVycyBhbnl3YXkgKHRoZXkncmUgcmVzdWx0IG9mIHdoaWNoIGlz IG5vdCByZWxpYWJsZSB5ZXQpOworICAgICAgICAgKiAgLSB3ZSBoYXZlIGdvbmUgdGhyb3VnaCBh bGwgdGhlIGFjdGl2ZSBydW5xdWV1ZXMsIGFuZCBoYXZlIG5vdAorICAgICAgICAgKiAgICBmb3Vu ZCBhbnlvbmUgd2hvc2UgY3B1cycgdG9wb2xvZ3kgbWF0Y2hlcyB0aGUgb25lIHdlIGFyZQorICAg ICAgICAgKiAgICBkZWFsaW5nIHdpdGgsIHNvIGFjdGl2YXRpbmcgYSBuZXcgcnVucXVldWUgaXMg d2hhdCB3ZSB3YW50LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBwcnYtPnJxZFtycWldLmlk ID09IC0xICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJxZCA9IHBydi0+cnFkICsg cnFpOworICAgICAgICBCVUdfT04oY3B1bWFza19lbXB0eSgmcnFkLT5hY3RpdmUpKTsKKworICAg ICAgICBwZWVyX2NwdSA9IGNwdW1hc2tfZmlyc3QoJnJxZC0+YWN0aXZlKTsKKyAgICAgICAgQlVH X09OKGNwdV90b19zb2NrZXQoY3B1KSA9PSBYRU5fSU5WQUxJRF9TT0NLRVRfSUQgfHwKKyAgICAg ICAgICAgICAgIGNwdV90b19zb2NrZXQocGVlcl9jcHUpID09IFhFTl9JTlZBTElEX1NPQ0tFVF9J RCk7CisKKyAgICAgICAgaWYgKCBvcHRfcnVucXVldWUgPT0gT1BUX1JVTlFVRVVFX0FMTCB8fAor ICAgICAgICAgICAgIChvcHRfcnVucXVldWUgPT0gT1BUX1JVTlFVRVVFX0NPUkUgJiYgc2FtZV9j b3JlKHBlZXJfY3B1LCBjcHUpKSB8fAorICAgICAgICAgICAgIChvcHRfcnVucXVldWUgPT0gT1BU X1JVTlFVRVVFX1NPQ0tFVCAmJiBzYW1lX3NvY2tldChwZWVyX2NwdSwgY3B1KSkgfHwKKyAgICAg ICAgICAgICAob3B0X3J1bnF1ZXVlID09IE9QVF9SVU5RVUVVRV9OT0RFICYmIHNhbWVfbm9kZShw ZWVyX2NwdSwgY3B1KSkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogV2Ug cmVhbGx5IGV4cGVjdCB0byBiZSBhYmxlIHRvIGFzc2lnbiBlYWNoIGNwdSB0byBhIHJ1bnF1ZXVl LiAqLworICAgIEJVR19PTihycWkgPj0gbnJfY3B1X2lkcyk7CisKKyAgICByZXR1cm4gcnFpOwor fQorCisvKiBGaW5kIHRoZSBkb21haW4gd2l0aCB0aGUgaGlnaGVzdCB3ZWlnaHQuICovCitzdGF0 aWMgdm9pZCB1cGRhdGVfbWF4X3dlaWdodChzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpy cWQsIGludCBuZXdfd2VpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9s ZF93ZWlnaHQpCit7CisgICAgLyogVHJ5IHRvIGF2b2lkIGJydXRlLWZvcmNlIHNlYXJjaDoKKyAg ICAgKiAtIElmIG5ld193ZWlnaHQgaXMgbGFyZ2VyLCBtYXhfd2VpZ3RoIDwtIG5ld193ZWlnaHQK KyAgICAgKiAtIElmIG9sZF93ZWlnaHQgIT0gbWF4X3dlaWdodCwgc29tZW9uZSBlbHNlIGlzIHN0 aWxsIG1heF93ZWlnaHQKKyAgICAgKiAgIChObyBhY3Rpb24gcmVxdWlyZWQpCisgICAgICogLSBJ ZiBvbGRfd2VpZ2h0ID09IG1heF93ZWlnaHQsIGJydXRlLWZvcmNlIHNlYXJjaCBmb3IgbWF4IHdl aWdodAorICAgICAqLworICAgIGlmICggbmV3X3dlaWdodCA+IHJxZC0+bWF4X3dlaWdodCApCisg ICAgeworICAgICAgICBycWQtPm1heF93ZWlnaHQgPSBuZXdfd2VpZ2h0OworICAgICAgICBTQ0hF RF9TVEFUX0NSQU5LKHVwZF9tYXhfd2VpZ2h0X3F1aWNrKTsKKyAgICB9CisgICAgZWxzZSBpZiAo IG9sZF93ZWlnaHQgPT0gcnFkLT5tYXhfd2VpZ2h0ICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgKml0ZXI7CisgICAgICAgIGludCBtYXhfd2VpZ2h0ID0gMTsKKworICAgICAgICBs aXN0X2Zvcl9lYWNoKCBpdGVyLCAmcnFkLT5zdmMgKQorICAgICAgICB7CisgICAgICAgICAgICBz dHJ1Y3QgY3NjaGVkMl92Y3B1ICogc3ZjID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgY3NjaGVk Ml92Y3B1LCBycWRfZWxlbSk7CisKKyAgICAgICAgICAgIGlmICggc3ZjLT53ZWlnaHQgPiBtYXhf d2VpZ2h0ICkKKyAgICAgICAgICAgICAgICBtYXhfd2VpZ2h0ID0gc3ZjLT53ZWlnaHQ7CisgICAg ICAgIH0KKworICAgICAgICBycWQtPm1heF93ZWlnaHQgPSBtYXhfd2VpZ2h0OworICAgICAgICBT Q0hFRF9TVEFUX0NSQU5LKHVwZF9tYXhfd2VpZ2h0X2Z1bGwpOworICAgIH0KKworICAgIGlmICgg dW5saWtlbHkodGJfaW5pdF9kb25lKSApCisgICAgeworICAgICAgICBzdHJ1Y3QgeworICAgICAg ICAgICAgdW5zaWduZWQgcnFpOjE2LCBtYXhfd2VpZ2h0OjE2OworICAgICAgICB9IGQ7CisgICAg ICAgIGQucnFpID0gcnFkLT5pZDsKKyAgICAgICAgZC5tYXhfd2VpZ2h0ID0gcnFkLT5tYXhfd2Vp Z2h0OworICAgICAgICBfX3RyYWNlX3ZhcihUUkNfQ1NDSEVEMl9SVU5RX01BWF9XRUlHSFQsIDEs CisgICAgICAgICAgICAgICAgICAgIHNpemVvZihkKSwKKyAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGNoYXIgKikmZCk7CisgICAgfQorfQorCisvKiBBZGQgYW5kIHJlbW92ZSBmcm9tIHJ1 bnF1ZXVlIGFzc2lnbm1lbnQgKG5vdCBhY3RpdmUgcnVuIHF1ZXVlKSAqLworc3RhdGljIHZvaWQK K19ydW5xX2Fzc2lnbihzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMsIHN0cnVjdCBjc2NoZWQyX3J1 bnF1ZXVlX2RhdGEgKnJxZCkKK3sKKworICAgIHN2Yy0+cnFkID0gcnFkOworICAgIGxpc3RfYWRk X3RhaWwoJnN2Yy0+cnFkX2VsZW0sICZzdmMtPnJxZC0+c3ZjKTsKKworICAgIHVwZGF0ZV9tYXhf d2VpZ2h0KHN2Yy0+cnFkLCBzdmMtPndlaWdodCwgMCk7CisKKyAgICAvKiBFeHBlY3RlZCBuZXcg bG9hZCBiYXNlZCBvbiBhZGRpbmcgdGhpcyB2Y3B1ICovCisgICAgcnFkLT5iX2F2Z2xvYWQgKz0g c3ZjLT5hdmdsb2FkOworCisgICAgaWYgKCB1bmxpa2VseSh0Yl9pbml0X2RvbmUpICkKKyAgICB7 CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCB2Y3B1OjE2LCBkb206MTY7 CisgICAgICAgICAgICB1bnNpZ25lZCBycWk6MTY7CisgICAgICAgIH0gZDsKKyAgICAgICAgZC5k b20gPSBzdmMtPnZjcHUtPmRvbWFpbi0+ZG9tYWluX2lkOworICAgICAgICBkLnZjcHUgPSBzdmMt PnZjcHUtPnZjcHVfaWQ7CisgICAgICAgIGQucnFpPXJxZC0+aWQ7CisgICAgICAgIF9fdHJhY2Vf dmFyKFRSQ19DU0NIRUQyX1JVTlFfQVNTSUdOLCAxLAorICAgICAgICAgICAgICAgICAgICBzaXpl b2YoZCksCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmQpOworICAgIH0K KwogfQogCi0vKgotICogVGltZS10by1jcmVkaXQsIGNyZWRpdC10by10aW1lLgotICogCi0gKiBX ZSBrZWVwIHRyYWNrIG9mIHRoZSAicmVzaWR1YWwiIHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgZnJl cXVlbnQgc2hvcnQKLSAqIHNjaGVkdWxlcyBzdGlsbCBnZXQgYWNjb3VudGVkIGZvciBpbiB0aGUg ZW5kLgotICoKLSAqIEZJWE1FOiBEbyBwcmUtY2FsY3VsYXRlZCBkaXZpc2lvbj8KLSAqLwotc3Rh dGljIHZvaWQgdDJjX3VwZGF0ZShzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQsIHNf dGltZV90IHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjc2NoZWQyX3Zj cHUgKnN2YykKK3N0YXRpYyB2b2lkCitydW5xX2Fzc2lnbihjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVy ICpvcHMsIHN0cnVjdCB2Y3B1ICp2YykKIHsKLSAgICB1aW50NjRfdCB2YWwgPSB0aW1lICogcnFk LT5tYXhfd2VpZ2h0ICsgc3ZjLT5yZXNpZHVhbDsKKyAgICBzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpz dmMgPSB2Yy0+c2NoZWRfcHJpdjsKIAotICAgIHN2Yy0+cmVzaWR1YWwgPSBkb19kaXYodmFsLCBz dmMtPndlaWdodCk7Ci0gICAgc3ZjLT5jcmVkaXQgLT0gdmFsOworICAgIEFTU0VSVChzdmMtPnJx ZCA9PSBOVUxMKTsKKworICAgIF9ydW5xX2Fzc2lnbihzdmMsIGMycnFkKG9wcywgdmMtPnByb2Nl c3NvcikpOwogfQogCi1zdGF0aWMgc190aW1lX3QgYzJ0KHN0cnVjdCBjc2NoZWQyX3J1bnF1ZXVl X2RhdGEgKnJxZCwgc190aW1lX3QgY3JlZGl0LCBzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMpCitz dGF0aWMgdm9pZAorX3J1bnFfZGVhc3NpZ24oc3RydWN0IGNzY2hlZDJfdmNwdSAqc3ZjKQogewot ICAgIHJldHVybiBjcmVkaXQgKiBzdmMtPndlaWdodCAvIHJxZC0+bWF4X3dlaWdodDsKLX0KKyAg ICBzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQgPSBzdmMtPnJxZDsKIAotLyoKLSAq IFJ1bnF1ZXVlIHJlbGF0ZWQgY29kZQotICovCisgICAgQVNTRVJUKCF2Y3B1X29uX3J1bnEoc3Zj KSk7CisgICAgQVNTRVJUKCEoc3ZjLT5mbGFncyAmIENTRkxBR19zY2hlZHVsZWQpKTsKIAotc3Rh dGljIGlubGluZSBpbnQgdmNwdV9vbl9ydW5xKHN0cnVjdCBjc2NoZWQyX3ZjcHUgKnN2YykKLXsK LSAgICByZXR1cm4gIWxpc3RfZW1wdHkoJnN2Yy0+cnVucV9lbGVtKTsKKyAgICBsaXN0X2RlbF9p bml0KCZzdmMtPnJxZF9lbGVtKTsKKyAgICB1cGRhdGVfbWF4X3dlaWdodChycWQsIDAsIHN2Yy0+ d2VpZ2h0KTsKKworICAgIC8qIEV4cGVjdGVkIG5ldyBsb2FkIGJhc2VkIG9uIHJlbW92aW5nIHRo aXMgdmNwdSAqLworICAgIHJxZC0+Yl9hdmdsb2FkID0gbWF4X3Qoc190aW1lX3QsIHJxZC0+Yl9h dmdsb2FkIC0gc3ZjLT5hdmdsb2FkLCAwKTsKKworICAgIHN2Yy0+cnFkID0gTlVMTDsKIH0KIAot c3RhdGljIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKiBydW5xX2VsZW0oc3RydWN0IGxpc3RfaGVhZCAq ZWxlbSkKK3N0YXRpYyB2b2lkCitydW5xX2RlYXNzaWduKGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIg Km9wcywgc3RydWN0IHZjcHUgKnZjKQogewotICAgIHJldHVybiBsaXN0X2VudHJ5KGVsZW0sIHN0 cnVjdCBjc2NoZWQyX3ZjcHUsIHJ1bnFfZWxlbSk7CisgICAgc3RydWN0IGNzY2hlZDJfdmNwdSAq c3ZjID0gdmMtPnNjaGVkX3ByaXY7CisKKyAgICBBU1NFUlQoc3ZjLT5ycWQgPT0gYzJycWQob3Bz LCB2Yy0+cHJvY2Vzc29yKSk7CisKKyAgICBfcnVucV9kZWFzc2lnbihzdmMpOwogfQogCiAvKgpA QCAtMTIxOSw1MSArMTQyMSw2IEBAIHZvaWQgYnVybl9jcmVkaXRzKHN0cnVjdCBjc2NoZWQyX3J1 bnF1ZXVlX2RhdGEgKnJxZCwKICAgICB9CiB9CiAKLS8qIEZpbmQgdGhlIGRvbWFpbiB3aXRoIHRo ZSBoaWdoZXN0IHdlaWdodC4gKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9tYXhfd2VpZ2h0KHN0cnVj dCBjc2NoZWQyX3J1bnF1ZXVlX2RhdGEgKnJxZCwgaW50IG5ld193ZWlnaHQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX3dlaWdodCkKLXsKLSAgICAvKiBUcnkgdG8gYXZv aWQgYnJ1dGUtZm9yY2Ugc2VhcmNoOgotICAgICAqIC0gSWYgbmV3X3dlaWdodCBpcyBsYXJnZXIs IG1heF93ZWlndGggPC0gbmV3X3dlaWdodAotICAgICAqIC0gSWYgb2xkX3dlaWdodCAhPSBtYXhf d2VpZ2h0LCBzb21lb25lIGVsc2UgaXMgc3RpbGwgbWF4X3dlaWdodAotICAgICAqICAgKE5vIGFj dGlvbiByZXF1aXJlZCkKLSAgICAgKiAtIElmIG9sZF93ZWlnaHQgPT0gbWF4X3dlaWdodCwgYnJ1 dGUtZm9yY2Ugc2VhcmNoIGZvciBtYXggd2VpZ2h0Ci0gICAgICovCi0gICAgaWYgKCBuZXdfd2Vp Z2h0ID4gcnFkLT5tYXhfd2VpZ2h0ICkKLSAgICB7Ci0gICAgICAgIHJxZC0+bWF4X3dlaWdodCA9 IG5ld193ZWlnaHQ7Ci0gICAgICAgIFNDSEVEX1NUQVRfQ1JBTksodXBkX21heF93ZWlnaHRfcXVp Y2spOwotICAgIH0KLSAgICBlbHNlIGlmICggb2xkX3dlaWdodCA9PSBycWQtPm1heF93ZWlnaHQg KQotICAgIHsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKLSAgICAgICAgaW50IG1h eF93ZWlnaHQgPSAxOwotCi0gICAgICAgIGxpc3RfZm9yX2VhY2goIGl0ZXIsICZycWQtPnN2YyAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKiBzdmMgPSBsaXN0 X2VudHJ5KGl0ZXIsIHN0cnVjdCBjc2NoZWQyX3ZjcHUsIHJxZF9lbGVtKTsKLQotICAgICAgICAg ICAgaWYgKCBzdmMtPndlaWdodCA+IG1heF93ZWlnaHQgKQotICAgICAgICAgICAgICAgIG1heF93 ZWlnaHQgPSBzdmMtPndlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIHJxZC0+bWF4X3dlaWdo dCA9IG1heF93ZWlnaHQ7Ci0gICAgICAgIFNDSEVEX1NUQVRfQ1JBTksodXBkX21heF93ZWlnaHRf ZnVsbCk7Ci0gICAgfQotCi0gICAgaWYgKCB1bmxpa2VseSh0Yl9pbml0X2RvbmUpICkKLSAgICB7 Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBycWk6MTYsIG1heF93ZWln aHQ6MTY7Ci0gICAgICAgIH0gZDsKLSAgICAgICAgZC5ycWkgPSBycWQtPmlkOwotICAgICAgICBk Lm1heF93ZWlnaHQgPSBycWQtPm1heF93ZWlnaHQ7Ci0gICAgICAgIF9fdHJhY2VfdmFyKFRSQ19D U0NIRUQyX1JVTlFfTUFYX1dFSUdIVCwgMSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGQp LAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKLSAgICB9Ci19Ci0K ICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgaW5saW5lIHZvaWQKIGNzY2hlZDJfdmNwdV9jaGVjayhz dHJ1Y3QgdmNwdSAqdmMpCkBAIC0xMzI4LDcyICsxNDg1LDYgQEAgY3NjaGVkMl9hbGxvY192ZGF0 YShjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyICpvcHMsIHN0cnVjdCB2Y3B1ICp2Yywgdm9pZCAqZGQp CiAgICAgcmV0dXJuIHN2YzsKIH0KIAotLyogQWRkIGFuZCByZW1vdmUgZnJvbSBydW5xdWV1ZSBh c3NpZ25tZW50IChub3QgYWN0aXZlIHJ1biBxdWV1ZSkgKi8KLXN0YXRpYyB2b2lkCi1fcnVucV9h c3NpZ24oc3RydWN0IGNzY2hlZDJfdmNwdSAqc3ZjLCBzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9k YXRhICpycWQpCi17Ci0KLSAgICBzdmMtPnJxZCA9IHJxZDsKLSAgICBsaXN0X2FkZF90YWlsKCZz dmMtPnJxZF9lbGVtLCAmc3ZjLT5ycWQtPnN2Yyk7Ci0KLSAgICB1cGRhdGVfbWF4X3dlaWdodChz dmMtPnJxZCwgc3ZjLT53ZWlnaHQsIDApOwotCi0gICAgLyogRXhwZWN0ZWQgbmV3IGxvYWQgYmFz ZWQgb24gYWRkaW5nIHRoaXMgdmNwdSAqLwotICAgIHJxZC0+Yl9hdmdsb2FkICs9IHN2Yy0+YXZn bG9hZDsKLQotICAgIGlmICggdW5saWtlbHkodGJfaW5pdF9kb25lKSApCi0gICAgewotICAgICAg ICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgdmNwdToxNiwgZG9tOjE2OwotICAgICAg ICAgICAgdW5zaWduZWQgcnFpOjE2OwotICAgICAgICB9IGQ7Ci0gICAgICAgIGQuZG9tID0gc3Zj LT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZDsKLSAgICAgICAgZC52Y3B1ID0gc3ZjLT52Y3B1LT52 Y3B1X2lkOwotICAgICAgICBkLnJxaT1ycWQtPmlkOwotICAgICAgICBfX3RyYWNlX3ZhcihUUkNf Q1NDSEVEMl9SVU5RX0FTU0lHTiwgMSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGQpLAot ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKLSAgICB9Ci0KLX0KLQot c3RhdGljIHZvaWQKLXJ1bnFfYXNzaWduKGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgKm9wcywgc3Ry dWN0IHZjcHUgKnZjKQotewotICAgIHN0cnVjdCBjc2NoZWQyX3ZjcHUgKnN2YyA9IHZjLT5zY2hl ZF9wcml2OwotCi0gICAgQVNTRVJUKHN2Yy0+cnFkID09IE5VTEwpOwotCi0gICAgX3J1bnFfYXNz aWduKHN2YywgYzJycWQob3BzLCB2Yy0+cHJvY2Vzc29yKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1f cnVucV9kZWFzc2lnbihzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMpCi17Ci0gICAgc3RydWN0IGNz Y2hlZDJfcnVucXVldWVfZGF0YSAqcnFkID0gc3ZjLT5ycWQ7Ci0KLSAgICBBU1NFUlQoIXZjcHVf b25fcnVucShzdmMpKTsKLSAgICBBU1NFUlQoIShzdmMtPmZsYWdzICYgQ1NGTEFHX3NjaGVkdWxl ZCkpOwotCi0gICAgbGlzdF9kZWxfaW5pdCgmc3ZjLT5ycWRfZWxlbSk7Ci0gICAgdXBkYXRlX21h eF93ZWlnaHQocnFkLCAwLCBzdmMtPndlaWdodCk7Ci0KLSAgICAvKiBFeHBlY3RlZCBuZXcgbG9h ZCBiYXNlZCBvbiByZW1vdmluZyB0aGlzIHZjcHUgKi8KLSAgICBycWQtPmJfYXZnbG9hZCA9IG1h eF90KHNfdGltZV90LCBycWQtPmJfYXZnbG9hZCAtIHN2Yy0+YXZnbG9hZCwgMCk7Ci0KLSAgICBz dmMtPnJxZCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydW5xX2RlYXNzaWduKGNvbnN0IHN0 cnVjdCBzY2hlZHVsZXIgKm9wcywgc3RydWN0IHZjcHUgKnZjKQotewotICAgIHN0cnVjdCBjc2No ZWQyX3ZjcHUgKnN2YyA9IHZjLT5zY2hlZF9wcml2OwotCi0gICAgQVNTRVJUKHN2Yy0+cnFkID09 IGMycnFkKG9wcywgdmMtPnByb2Nlc3NvcikpOwotCi0gICAgX3J1bnFfZGVhc3NpZ24oc3ZjKTsK LX0KLQogc3RhdGljIHZvaWQKIGNzY2hlZDJfdmNwdV9zbGVlcChjb25zdCBzdHJ1Y3Qgc2NoZWR1 bGVyICpvcHMsIHN0cnVjdCB2Y3B1ICp2YykKIHsKQEAgLTI3NzgsOTcgKzI4NjksNiBAQCBjc2No ZWQyX2R1bXAoY29uc3Qgc3RydWN0IHNjaGVkdWxlciAqb3BzKQogI3VuZGVmIGNwdXN0cgogfQog Ci1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9ydW5xdWV1ZShzdHJ1Y3QgY3NjaGVkMl9wcml2YXRlICpw cnYsIGludCBycWkpCi17Ci0gICAgc3RydWN0IGNzY2hlZDJfcnVucXVldWVfZGF0YSAqcnFkOwot Ci0gICAgcnFkID0gcHJ2LT5ycWQgKyBycWk7Ci0KLSAgICBCVUdfT04oIWNwdW1hc2tfZW1wdHko JnJxZC0+YWN0aXZlKSk7Ci0KLSAgICBycWQtPm1heF93ZWlnaHQgPSAxOwotICAgIHJxZC0+aWQg PSBycWk7Ci0gICAgSU5JVF9MSVNUX0hFQUQoJnJxZC0+c3ZjKTsKLSAgICBJTklUX0xJU1RfSEVB RCgmcnFkLT5ydW5xKTsKLSAgICBzcGluX2xvY2tfaW5pdCgmcnFkLT5sb2NrKTsKLQotICAgIF9f Y3B1bWFza19zZXRfY3B1KHJxaSwgJnBydi0+YWN0aXZlX3F1ZXVlcyk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGRlYWN0aXZhdGVfcnVucXVldWUoc3RydWN0IGNzY2hlZDJfcHJpdmF0ZSAqcHJ2LCBpbnQg cnFpKQotewotICAgIHN0cnVjdCBjc2NoZWQyX3J1bnF1ZXVlX2RhdGEgKnJxZDsKLQotICAgIHJx ZCA9IHBydi0+cnFkICsgcnFpOwotCi0gICAgQlVHX09OKCFjcHVtYXNrX2VtcHR5KCZycWQtPmFj dGl2ZSkpOwotICAgIAotICAgIHJxZC0+aWQgPSAtMTsKLQotICAgIF9fY3B1bWFza19jbGVhcl9j cHUocnFpLCAmcHJ2LT5hY3RpdmVfcXVldWVzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sX3Qg c2FtZV9ub2RlKHVuc2lnbmVkIGludCBjcHVhLCB1bnNpZ25lZCBpbnQgY3B1YikKLXsKLSAgICBy ZXR1cm4gY3B1X3RvX25vZGUoY3B1YSkgPT0gY3B1X3RvX25vZGUoY3B1Yik7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgYm9vbF90IHNhbWVfc29ja2V0KHVuc2lnbmVkIGludCBjcHVhLCB1bnNpZ25lZCBp bnQgY3B1YikKLXsKLSAgICByZXR1cm4gY3B1X3RvX3NvY2tldChjcHVhKSA9PSBjcHVfdG9fc29j a2V0KGNwdWIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2xfdCBzYW1lX2NvcmUodW5zaWduZWQg aW50IGNwdWEsIHVuc2lnbmVkIGludCBjcHViKQotewotICAgIHJldHVybiBzYW1lX3NvY2tldChj cHVhLCBjcHViKSAmJgotICAgICAgICAgICBjcHVfdG9fY29yZShjcHVhKSA9PSBjcHVfdG9fY29y ZShjcHViKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotY3B1X3RvX3J1bnF1ZXVlKHN0cnVj dCBjc2NoZWQyX3ByaXZhdGUgKnBydiwgdW5zaWduZWQgaW50IGNwdSkKLXsKLSAgICBzdHJ1Y3Qg Y3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQ7Ci0gICAgdW5zaWduZWQgaW50IHJxaTsKLQotICAg IGZvciAoIHJxaSA9IDA7IHJxaSA8IG5yX2NwdV9pZHM7IHJxaSsrICkKLSAgICB7Ci0gICAgICAg IHVuc2lnbmVkIGludCBwZWVyX2NwdTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBBcyBzb29u IGFzIHdlIGNvbWUgYWNyb3NzIGFuIHVuaW5pdGlhbGl6ZWQgcnVucXVldWUsIHVzZSBpdC4KLSAg ICAgICAgICogSW4gZmFjdCwgZWl0aGVyOgotICAgICAgICAgKiAgLSB3ZSBhcmUgaW5pdGlhbGl6 aW5nIHRoZSBmaXJzdCBjcHUsIGFuZCB3ZSBhc3NpZ24gaXQgdG8KLSAgICAgICAgICogICAgcnVu cXVldWUgMC4gVGhpcyBpcyBoYW5keSwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZwotICAg ICAgICAgKiAgICB3aXRoIHRoZSBib290IGNwdSAoaWYgY3JlZGl0MiBpcyB0aGUgZGVmYXVsdCBz Y2hlZHVsZXIpLAotICAgICAgICAgKiAgICBhcyB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byB1c2Ug Y3B1X3RvX3NvY2tldCgpIGFuZCBzaW1pbGFyCi0gICAgICAgICAqICAgIGhlbHBlcnMgYW55d2F5 ICh0aGV5J3JlIHJlc3VsdCBvZiB3aGljaCBpcyBub3QgcmVsaWFibGUgeWV0KTsKLSAgICAgICAg ICogIC0gd2UgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHRoZSBhY3RpdmUgcnVucXVldWVzLCBhbmQg aGF2ZSBub3QKLSAgICAgICAgICogICAgZm91bmQgYW55b25lIHdob3NlIGNwdXMnIHRvcG9sb2d5 IG1hdGNoZXMgdGhlIG9uZSB3ZSBhcmUKLSAgICAgICAgICogICAgZGVhbGluZyB3aXRoLCBzbyBh Y3RpdmF0aW5nIGEgbmV3IHJ1bnF1ZXVlIGlzIHdoYXQgd2Ugd2FudC4KLSAgICAgICAgICovCi0g ICAgICAgIGlmICggcHJ2LT5ycWRbcnFpXS5pZCA9PSAtMSApCi0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICBycWQgPSBwcnYtPnJxZCArIHJxaTsKLSAgICAgICAgQlVHX09OKGNwdW1hc2tf ZW1wdHkoJnJxZC0+YWN0aXZlKSk7Ci0KLSAgICAgICAgcGVlcl9jcHUgPSBjcHVtYXNrX2ZpcnN0 KCZycWQtPmFjdGl2ZSk7Ci0gICAgICAgIEJVR19PTihjcHVfdG9fc29ja2V0KGNwdSkgPT0gWEVO X0lOVkFMSURfU09DS0VUX0lEIHx8Ci0gICAgICAgICAgICAgICBjcHVfdG9fc29ja2V0KHBlZXJf Y3B1KSA9PSBYRU5fSU5WQUxJRF9TT0NLRVRfSUQpOwotCi0gICAgICAgIGlmICggb3B0X3J1bnF1 ZXVlID09IE9QVF9SVU5RVUVVRV9BTEwgfHwKLSAgICAgICAgICAgICAob3B0X3J1bnF1ZXVlID09 IE9QVF9SVU5RVUVVRV9DT1JFICYmIHNhbWVfY29yZShwZWVyX2NwdSwgY3B1KSkgfHwKLSAgICAg ICAgICAgICAob3B0X3J1bnF1ZXVlID09IE9QVF9SVU5RVUVVRV9TT0NLRVQgJiYgc2FtZV9zb2Nr ZXQocGVlcl9jcHUsIGNwdSkpIHx8Ci0gICAgICAgICAgICAgKG9wdF9ydW5xdWV1ZSA9PSBPUFRf UlVOUVVFVUVfTk9ERSAmJiBzYW1lX25vZGUocGVlcl9jcHUsIGNwdSkpICkKLSAgICAgICAgICAg IGJyZWFrOwotICAgIH0KLQotICAgIC8qIFdlIHJlYWxseSBleHBlY3QgdG8gYmUgYWJsZSB0byBh c3NpZ24gZWFjaCBjcHUgdG8gYSBydW5xdWV1ZS4gKi8KLSAgICBCVUdfT04ocnFpID49IG5yX2Nw dV9pZHMpOwotCi0gICAgcmV0dXJuIHJxaTsKLX0KLQogLyogUmV0dXJucyB0aGUgSUQgb2YgdGhl IHJ1bnF1ZXVlIHRoZSBjcHUgaXMgYXNzaWduZWQgdG8uICovCiBzdGF0aWMgdW5zaWduZWQKIGlu aXRfcGRhdGEoc3RydWN0IGNzY2hlZDJfcHJpdmF0ZSAqcHJ2LCB1bnNpZ25lZCBpbnQgY3B1KQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=