From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=none dis=none) header.from=gmail.com Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by passt.top (Postfix) with ESMTPS id 29ABC5A0265 for ; Fri, 16 Oct 2026 22:37:01 +0200 (CEST) Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-48df54150dfso185700f8f.0 for ; Fri, 16 Oct 2026 13:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792183021; x=1792787821; darn=passt.top; h=content-transfer-encoding:mime-version:cc:to:from:subject :message-id:date:content-type:from:to:cc:subject:date:message-id :reply-to:content-type; bh=zT3c5x8yH8LJOGh4z3RWDxqip6sa1pOJapdTRTw9QLc=; b=on1tm8oA1vNslXi3yAqVUgYqzhWkQ65T8bbEw020NxTN2qnEBm25F07H4pQjfOaUnt xMAo+Qb9SerNLwkS0kxRrDf9TOQV1rxl3lqXdr9FS+Ax2BPsQv8e7X2REtPrHOVuooxn XbPEFrYxXpqwDgNCLhJVRYrMf3gM0mysvPd9bhcx+WYPMpWR9wzJRumRyV/rMcAz1qJE j5N8N5dLEZP4xQDdpqYkxmZY7vbCGd/rrQzvoQLUERoYko3r8BOOavfFEm4aUUk6PFxU 1LxXw9OR+42/QxFNlC2Ux3VHnf9SxfI+pz0wjzkPYlDg4OIIfL74qG+zwuZ0OLjx3mZc JHfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792183021; x=1792787821; h=content-transfer-encoding:mime-version:cc:to:from:subject :message-id:date:content-type:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=zT3c5x8yH8LJOGh4z3RWDxqip6sa1pOJapdTRTw9QLc=; b=sIBfoxRmJ+i/8gO/hf8kJPBqdJHVk6ElG/rfomYtu8uiTzX4fCPquh/mW3KB8VYQwH mDUjKZlcQcbTbrhcVqep1eaTiEa545zrr5n4GxbxwIInSEVPO1KcAa02VahREFgZ1Hqc 6tQ3RTMeKdz7rhaSd24OgE9FSBqiJ9VQLjNxkgbCX0kzVh0NGbgxPUmEVR5nthY31bW0 F+ttxKwlI73TZ2UEeYcIG3XuEm/UKDYvurMvP8oMr/ABSJrTra5DfYYNmh5My1ODseTs zLhX2YqnFJU0R2XZwlGjec+PUawjnsY9sQ+k3WstCNEYuIg8c575fc9pHhNwrkCbG0kA lBFQ== X-Gm-Message-State: AFq9FYIR+e69FL05P2WxtqU97echuINwqqx/1Yn/Pzgb4DyM9+zeyOGe I3SdblTG/nsLpV650pa7MqrSMU9EFUrgELJ2uNL5ssFy0XAl8OetOU9GMyUyzw== X-Gm-Gg: AYBFou3lJlf7gvt0UQel7etDIAk6umbO7liv996O3j4Uw/d7ST303hgvVv8Ds+f7YtW d5ADDlB4OANYgbwtUFbiEV1yFUkeAb/13bdqu9yZe5pyLggb4Qg5XWLiofzz/1lwbVin4nOl1N9 yQkb36vcdwgwQU+aIL6Ey0mvhZLCih6WMGfgTjASJaHRmraXJXGLN2IfEyu/J596SogUKe3h2gU 7I/G9f3lFSLc/HYc8TSc71Xd6XT4c1tzV9cqARwcXdYylWoItLWSV9DqdIGOzBnhkTZM9TH1spr yqoGER6D0+vb3v9owd0X3PN0rR+8fjh2mM4kjD3TC+AFLRSdqbfssnPQNebc138j8GaAlPJ5w69 UYJHFxSX7H+pHCBS4UkbhY0jRGQyAjWlIwjICUIZWjNC79k/hDWy+YPCc1b4oPcxcM15kUq84aY tldIVjNBngqMxlLZrHEpXEKthtIneoHYGjoX4X7EuQ8sA3FoLQzcNzJQ/YlnMWo+9tfUUQK2AKE UMQ6RowBD2NsLVlp0JRv0UloiecXjM5ywiUfcPppfs4InycKo+avl4= X-Received: by 2002:a05:600c:1f8d:b0:4a0:1b14:d00c with SMTP id 5b1f17b1804b1-4a1d75ab306mr23067425e9.3.1792183020453; Fri, 16 Oct 2026 13:37:00 -0700 (PDT) Received: from localhost ([196.157.71.229]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a1bdbb4a30sm172395545e9.15.2026.10.16.13.36.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 16 Oct 2026 13:36:59 -0700 (PDT) Content-Type: text/plain; charset="utf-8" Date: Fri, 16 Oct 2026 23:36:57 +0300 Message-Id: Subject: [PATCH v2 3/7] virtio: Add the pasta vhost-net interface and implementation From: "Ammar Yasser" To: MIME-Version: 1.0 Content-Transfer-Encoding: base64 Message-ID-Hash: YHVQKZCEQWQLD6K2577F6JA4C3FTRKPF X-Message-ID-Hash: YHVQKZCEQWQLD6K2577F6JA4C3FTRKPF X-MailFrom: aerosound161@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: =?utf-8?q?Eugenio_P=C3=A9rez?= X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: QWRkIHZob3N0LmMgYW5kIHZob3N0Lmggd2hpY2ggZGVmaW5lIHRoZSBhcGkgYW5kIGltcGxlbWVu dGF0aW9uIGZvcg0KcGFzdGEgdmhvc3QgYWNjZWxlcmF0aW9uDQoNCi0gdnFfc3RhdGUvdmhvc3Rf dnFfc3RhdGVbXTogb3VyIG93biB2aWV3IG9mIGVhY2ggdmlydHF1ZXVlLCB3aGljaCB0aGUNCiAg a2VybmVsIGRvZXNuJ3QgdHJhY2sgZm9yIHVzOiBkZXNjcmlwdG9ycyByZWFkeSB0byBoYW5kIGJh Y2ssIGhvdyBmYXINCiAgd2UndmUgcmVhZCB0aGUgdXNlZCByaW5nLCBhbmQgdGhlIG5leHQgZGVz Y3JpcHRvciB0byBhbGxvY2F0ZQ0KLSB2cmluZ19kZXNjLCB2cmluZ19hdmFpbF9hbGwsIHZyaW5n X3VzZWRfYWxsLCB2aG9zdF9tZW1vcnk6IHRoZSByaW5ncw0KICBhbmQgdGhlIHJlZ2lvbiB0YWJs ZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsDQotIHZob3N0X3NldHVwX25ldDogb3BlbiAvZGV2L3Zo b3N0LW5ldCBhbmQgbmVnb3RpYXRlIFZJUlRJT19GX1ZFUlNJT05fMQ0KICBhbmQgVkhPU1RfTkVU X0ZfVklSVElPX05FVF9IRFIuIEZhaWx1cmUgaXMgZmF0YWwgb25seSBpZg0KICAtLXZob3N0LWtl cm5lbCBpcyBzZXQgdG8gJ29uJy4NCi0gdmhvc3Rfc2V0dXBfZXZlbnRmZHM6IGNyZWF0ZSwgcmVn aXN0ZXIgYW5kIHdhdGNoIHRoZSBjYWxsLCBraWNrIGFuZA0KICBlcnJvciBldmVudGZkcyBmb3Ig b25lIHF1ZXVlDQotIHZob3N0X3NldHVwX21lbW9yeV90YWJsZTogcmVnaXN0ZXIgdGhlIGJ1ZmZl cnMgdGhlIGtlcm5lbCBtYXkgdG91Y2guDQogIHBhc3RhIGhhcyBubyBndWVzdCwgc28gZWFjaCBy ZWdpb24gbWFwcyBndWVzdF9waHlzX2FkZHIgb250byB0aGUNCiAgaWRlbnRpY2FsIHVzZXJzcGFj ZV9hZGRyLCBtYWtpbmcgR1BBIHRyYW5zbGF0aW9uIGFuIGlkZW50aXR5IG1hcHBpbmcuDQogIFRo aXMgZnVuY3Rpb24gdXNlcyB0aGUgKl9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyBmdW5jdGlvbnMg Y3JlYXRlZCBwZXINCiAgcHJvdG9jb2wgYW5kIGZvciBnZW5lcmFsIHB1cnBvc2UgYnVmZmVycy4N Ci0gdmhvc3Rfc2V0X3ZyaW5nOiBwdWJsaXNoIGEgdnJpbmcncyBhZGRyZXNzZXMsIGJpbmQgdGhl IHRhcCBmZCBhcyBpdHMNCiAgYmFja2VuZCBhbmQgbGF5IG91dCBpdHMgZGVzY3JpcHRvcnMNCi0g dmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmLCB2aG9zdF9raWNrOiBoYW5kIGNvbnN1bWVkIGRl c2NyaXB0b3JzIGJhY2sNCiAgYW5kIG5vdGlmeSB0aGUga2VybmVsIHVubGVzcyBpdCBzYXlzIGl0 J3MgYWxyZWFkeSBwb2xsaW5nDQoNClNpZ25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVy ZXptYUByZWRoYXQuY29tPg0KU2lnbmVkLW9mZi1ieTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQx NjFAZ21haWwuY29tPg0KLS0tDQogTWFrZWZpbGUgIHwgICAyICstDQogdGNwX2J1Zi5jIHwgIDIy ICsrKy0NCiB0Y3BfYnVmLmggfCAgIDQgKw0KIHVkcC5jICAgICB8ICAyMCArKysrDQogdWRwLmgg ICAgIHwgICAzICsNCiB1dGlsLmMgICAgfCAgMTggKysrKw0KIHV0aWwuaCAgICB8ICAgMiArDQog dmhvc3QuYyAgIHwgMjk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KIHZob3N0LmggICB8ICA5MSArKysrKysrKysrKysrKysrKw0KIDkgZmls ZXMgY2hhbmdlZCwgNDU1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHZob3N0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdmhvc3QuaA0KDQpkaWZmIC0t Z2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQ0KaW5kZXggZjZjODdiMS4uNmYxMWU0YiAxMDA2NDQN Ci0tLSBhL01ha2VmaWxlDQorKysgYi9NYWtlZmlsZQ0KQEAgLTM4LDcgKzM4LDcgQEAgUEFTU1Rf U1JDUyA9IGFyY2guYyBhcnAuYyBiaXRtYXAuYyBjaGVja3N1bS5jIGNvbmYuYyBkaGNwLmMgZGhj cHY2LmMgXA0KIAlpc29sYXRpb24uYyBsaW5lcmVhZC5jIGxvZy5jIG1sZC5jIG5kcC5jIG5ldGxp bmsuYyBtaWdyYXRlLmMgcGFja2V0LmMgXA0KIAlwYXJzZS5jIHBhc3N0LmMgcGFzdGEuYyBwY2Fw LmMgcGlmLmMgcmVwYWlyLmMgc2VyaWFsaXNlLmMgdGFwLmMgdGNwLmMgXA0KIAl0Y3BfYnVmLmMg dGNwX3NwbGljZS5jIHRjcF92dS5jIHVkcC5jIHVkcF9mbG93LmMgdWRwX3Z1LmMgdXRpbC5jIFwN Ci0Jdmhvc3RfdXNlci5jIHZpcnRpby5jIHZ1X2NvbW1vbi5jDQorCXZob3N0LmMgdmhvc3RfdXNl ci5jIHZpcnRpby5jIHZ1X2NvbW1vbi5jDQogUEFTU1RfUkVQQUlSX1NSQ1MgPSBwYXNzdC1yZXBh aXIuYw0KIFBFU1RPX1NSQ1MgPSBwZXN0by5jIGJpdG1hcC5jIGZ3ZF9ydWxlLmMgaW5hbnkuYyBp cC5jIGxpbmVyZWFkLmMgcGFyc2UuYyBcDQogCXNlcmlhbGlzZS5jDQpkaWZmIC0tZ2l0IGEvdGNw X2J1Zi5jIGIvdGNwX2J1Zi5jDQppbmRleCA3MmM0NTQxLi5kZDgwMzg0IDEwMDY0NA0KLS0tIGEv dGNwX2J1Zi5jDQorKysgYi90Y3BfYnVmLmMNCkBAIC0zMSwxMiArMzEsMTQgQEANCiAjaW5jbHVk ZSAiaW5hbnkuaCINCiAjaW5jbHVkZSAidGNwX2Nvbm4uaCINCiAjaW5jbHVkZSAidGNwX2ludGVy bmFsLmgiDQotI2luY2x1ZGUgInRjcF9idWYuaCINCisjaW5jbHVkZSAidmhvc3QuaCINCg0KICNk ZWZpbmUgVENQX0ZSQU1FU19NRU0JCQkxMjgNCiAjZGVmaW5lIFRDUF9GUkFNRVMJCQkJCQkJICAg XA0KIAkoYy0+bW9kZSA9PSBNT0RFX1BBU1RBID8gMSA6IFRDUF9GUkFNRVNfTUVNKQ0KDQorI2Rl ZmluZSBUQ1BfTlJFR0lPTlMgNQ0KKw0KIC8qIFN0YXRpYyBidWZmZXJzICovDQoNCiAvKiBFdGhl cm5ldCBoZWFkZXIgZm9yIElQdjQgYW5kIElQdjYgZnJhbWVzICovDQpAQCAtNzUsNiArNzcsMjQg QEAgdm9pZCB0Y3BfdXBkYXRlX2wyX2J1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpldGhfZCkNCiAJ CWV0aF91cGRhdGVfbWFjKCZ0Y3BfZXRoX2hkcltpXSwgZXRoX2QsIE5VTEwpOw0KIH0NCg0KKy8q Kg0KKyAqIHRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9uKCkgLSBSZWdpc3RlciB0aGUgVENQIHNw ZWNpZmljIGJ1ZmZlcnMgaW50byBhIG1lbW9yeQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc28gaXQgY2FuIGJlIHNoYXJlZCB3aXRoIHRoZSBrZXJuZWwuDQorICog QHZob3N0X21lbTogVGhlIG1lbW9yeSBzdHJ1Y3QgdG8gcmVnaXN0ZXIgcmVnaW9ucyBpbnRvDQor ICogQGxhc3RfaWR4OiAgVGhlIGxhc3QgaW5kZXggYXQgd2hpY2ggbWVtb3J5IHJlZ2lvbiBoYXMg YmVlbiBwbGFjZWQNCisgKi8NCit2b2lkIHRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlv biB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KSB7DQorCWlmICgo Kmxhc3RfaWR4ICsgVENQX05SRUdJT05TKSA+IE5fVkhPU1RfUkVHSU9OUykNCisJCWRpZSgidGNw OiBtZW1vcnkgcmVnaW9uIG92ZXJmbG93LiBtYXhpbXVtIGlzICVkLCBnb3QgJXp1IiwNCisJCSAg ICBOX1ZIT1NUX1JFR0lPTlMsICpsYXN0X2lkeCArIFRDUF9OUkVHSU9OUyk7DQorDQorICAgCXZo b3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9O KHRjcF9wYXlsb2FkX3RhcF9oZHIpOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9p ZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih0Y3A0X3BheWxvYWRfaXApOw0KKwl2aG9zdF9t ZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih0Y3A2 X3BheWxvYWRfaXApOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0g VkhPU1RfTUVNT1JZX1JFR0lPTih0Y3BfcGF5bG9hZCk7DQorCXZob3N0X21lbS0+bWVtLnJlZ2lv bnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHRjcF9ldGhfaGRyKTsNCit9 DQorDQogLyoqDQogICogdGNwX3NvY2tfaW92X2luaXQoKSAtIEluaXRpYWxpc2Ugc2NhdHRlci1n YXRoZXIgTDIgYnVmZmVycyBmb3IgSVB2NCBzb2NrZXRzDQogICogQGM6CQlFeGVjdXRpb24gY29u dGV4dA0KZGlmZiAtLWdpdCBhL3RjcF9idWYuaCBiL3RjcF9idWYuaA0KaW5kZXggNWQzMWNlYS4u NWUzNDFlZCAxMDA2NDQNCi0tLSBhL3RjcF9idWYuaA0KKysrIGIvdGNwX2J1Zi5oDQpAQCAtNiwx MSArNiwxNSBAQA0KICNpZm5kZWYgVENQX0JVRl9IDQogI2RlZmluZSBUQ1BfQlVGX0gNCg0KK3Vu aW9uIHZob3N0X21lbW9yeV91Ow0KK3N0cnVjdCB0Y3BfdGFwX2Nvbm47DQorDQogdm9pZCB0Y3Bf c29ja19pb3ZfaW5pdChjb25zdCBzdHJ1Y3QgY3R4ICpjKTsNCiB2b2lkIHRjcF9wYXlsb2FkX2Zs dXNoKGNvbnN0IHN0cnVjdCBjdHggKmMsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCiBp bnQgdGNwX2J1Zl9kYXRhX2Zyb21fc29jayhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNw X3RhcF9jb25uICpjb25uLA0KIAkJCSAgIHVpbnQzMl90IGFscmVhZHlfc2VudCwgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpub3cpOw0KIGludCB0Y3BfYnVmX3NlbmRfZmxhZyhjb25zdCBzdHJ1Y3Qg Y3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBpbnQgZmxhZ3MsDQogCQkgICAgICBj b25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQordm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3Jl Z2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCk7 DQoNCiAjZW5kaWYgIC8qVENQX0JVRl9IICovDQpkaWZmIC0tZ2l0IGEvdWRwLmMgYi91ZHAuYw0K aW5kZXggNTA1ZTU1NC4uYTQzNTVhMSAxMDA2NDQNCi0tLSBhL3VkcC5jDQorKysgYi91ZHAuYw0K QEAgLTExOCw2ICsxMTgsNyBAQA0KICNpbmNsdWRlICJ1ZHBfaW50ZXJuYWwuaCINCiAjaW5jbHVk ZSAidWRwX3Z1LmgiDQogI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KKyNpbmNsdWRlICJ2aG9zdC5o Ig0KDQogI2RlZmluZSBVRFBfTUFYX0ZSQU1FUwkJMzIgIC8qIG1heCAjIG9mIGZyYW1lcyB0byBy ZWNlaXZlIGF0IG9uY2UgKi8NCg0KQEAgLTEyOCw2ICsxMjksOCBAQA0KICNkZWZpbmUgVURQX1RJ TUVPVVRfREVGQVVMVAkJMzAJLyogcyAqLw0KICNkZWZpbmUgVURQX1RJTUVPVVRfU1RSRUFNX0RF RkFVTFQJMTIwCS8qIHMgKi8NCg0KKyNkZWZpbmUgVURQX05SRUdJT05TIDUNCisNCiAvKiBNYXhp bXVtIFVEUCBkYXRhIHRvIGJlIHJldHVybmVkIGluIElDTVAgbWVzc2FnZXMgKi8NCiAjZGVmaW5l IElDTVA0X01BWF9ETEVOIDgNCiAjZGVmaW5lIElDTVA2X01BWF9ETEVOIChJUFY2X01JTl9NVFUJ CQlcDQpAQCAtNDQ4LDYgKzQ1MSwyMyBAQCBzdGF0aWMgdm9pZCB1ZHBfc2VuZF90YXBfaWNtcDQo Y29uc3Qgc3RydWN0IGN0eCAqYywNCiAJdGFwX2ljbXA0X3NlbmQoYywgc2FkZHIsIGVhZGRyLCAm bXNnLCB0YXBfb21hYywgbXNnbGVuKTsNCiB9DQoNCisvKioNCisgKiB1ZHBfcmVnaXN0ZXJfbWVt b3J5X3JlZ2lvbigpIC0gUmVnaXN0ZXIgdGhlIFVEUCBzcGVjaWZpYyBidWZmZXJzIGludG8gYSBt ZW1vcnkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvIGl0IGNh biBiZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsLg0KKyAqIEB2aG9zdF9tZW06IFRoZSBtZW1vcnkg c3RydWN0IHRvIHJlZ2lzdGVyIHJlZ2lvbnMgaW50bw0KKyAqIEBsYXN0X2lkeDogIFRoZSBsYXN0 IGluZGV4IGF0IHdoaWNoIG1lbW9yeSByZWdpb24gaGFzIGJlZW4gcGxhY2VkDQorICovDQordm9p ZCB1ZHBfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0 X21lbSwgc2l6ZV90ICpsYXN0X2lkeCkgew0KKwlpZiAoKCpsYXN0X2lkeCArIFVEUF9OUkVHSU9O UykgPiBOX1ZIT1NUX1JFR0lPTlMpDQorCQlkaWUoInVkcDogbWVtb3J5IHJlZ2lvbiBvdmVyZmxv dy4gbWF4aW11bSBpcyAlZCwgZ290ICV6dSIsDQorCQkgICAgTl9WSE9TVF9SRUdJT05TLCAqbGFz dF9pZHggKyBVRFBfTlJFR0lPTlMpOw0KKw0KKyAgIAl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygq bGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfcGF5bG9hZCk7DQorCXZob3N0 X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVk cF9ldGhfaGRyKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZI T1NUX01FTU9SWV9SRUdJT04odWRwX2lvdl9yZWN2KTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9u c1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odWRwX21oX3JlY3YpOw0KKwl2 aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lP Tih1ZHBfbWV0YSk7DQorfQ0KDQogLyoqDQogICogdWRwX3NlbmRfdGFwX2ljbXA2KCkgLSBDb25z dHJ1Y3QgYW5kIHNlbmQgSUNNUHY2IHRvIGxvY2FsIHBlZXINCmRpZmYgLS1naXQgYS91ZHAuaCBi L3VkcC5oDQppbmRleCBiNTAyODNlLi5lYmYxYTRlIDEwMDY0NA0KLS0tIGEvdWRwLmgNCisrKyBi L3VkcC5oDQpAQCAtMTEsNiArMTEsOCBAQA0KDQogI2luY2x1ZGUgImZ3ZC5oIg0KDQordW5pb24g dmhvc3RfbWVtb3J5X3U7DQorDQogdm9pZCB1ZHBfbGlzdGVuX3NvY2tfaGFuZGxlcihjb25zdCBz dHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0KIAkJCSAgICAgdWludDMyX3QgZXZl bnRzLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQogdm9pZCB1ZHBfc29ja19oYW5kbGVy KGNvbnN0IHN0cnVjdCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYsDQpAQCAtMjEsNiArMjMs NyBAQCBpbnQgdWRwX3RhcF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVpbnQ4X3QgcGlm LA0KIAkJICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCiBpbnQgdWRwX2luaXQoc3Ry dWN0IGN0eCAqYyk7DQogdm9pZCB1ZHBfdXBkYXRlX2wyX2J1Zihjb25zdCB1bnNpZ25lZCBjaGFy ICpldGhfZCk7DQordm9pZCB1ZHBfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3Rf bWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCk7DQoNCiAvKioNCiAgKiBzdHJ1 Y3QgdWRwX2N0eCAtIEV4ZWN1dGlvbiBjb250ZXh0IGZvciBVRFANCmRpZmYgLS1naXQgYS91dGls LmMgYi91dGlsLmMNCmluZGV4IGZmMWYxOWYuLmNhZmUwZWMgMTAwNjQ0DQotLS0gYS91dGlsLmMN CisrKyBiL3V0aWwuYw0KQEAgLTMzLDEwICszMywxMyBAQA0KICNpbmNsdWRlICJsb2cuaCINCiAj aW5jbHVkZSAicGNhcC5oIg0KICNpbmNsdWRlICJzZXJpYWxpc2UuaCINCisjaW5jbHVkZSAidmhv c3QuaCINCiAjaWZkZWYgSEFTX0dFVFJBTkRPTQ0KICNpbmNsdWRlIDxzeXMvcmFuZG9tLmg+DQog I2VuZGlmDQoNCisjZGVmaW5lIEdFTkVSQUxfTlJFR0lPTlMgMg0KKw0KIC8qIFplcm8tZmlsbGVk IGJ1ZmZlciB0byBwYWQgODAyLjMgZnJhbWVzLCB1cCB0byA2MCAoRVRIX1pMRU4pIGJ5dGVzICov DQogdWludDhfdCBldGhfcGFkW0VUSF9aTEVOXSA9IHsgMCB9Ow0KDQpAQCAtNDUzLDYgKzQ1Niwy MSBAQCBpbnQgb3Blbl9pbl9ucyhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBjb25zdCBjaGFyICpwYXRo LCBpbnQgZmxhZ3MpDQogCXJldHVybiBhcmcuZmQ7DQogfQ0KDQorLyoqDQorICogZ2VuZXJhbF9y ZWdpc3Rlcl9tZW1vcnlfcmVnaW9uKCkgLSBSZWdpc3RlciB0aGUgZ2VuZXJhbCAobm9uIHByb3Rv Y29sIHNwZWNpZmljKSBidWZmZXJzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnRvIGEgbWVtb3J5IHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtl cm5lbC4NCisgKiBAdmhvc3RfbWVtOiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciByZWdp b25zIGludG8NCisgKiBAbGFzdF9pZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkg cmVnaW9uIGhhcyBiZWVuIHBsYWNlZA0KKyAqLw0KK3ZvaWQgZ2VuZXJhbF9yZWdpc3Rlcl9tZW1v cnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3Rf aWR4KSB7DQorCWlmICgoKmxhc3RfaWR4ICsgR0VORVJBTF9OUkVHSU9OUykgPiBOX1ZIT1NUX1JF R0lPTlMpDQorCQlkaWUoImdlbmVyYWw6IG1lbW9yeSByZWdpb24gb3ZlcmZsb3cuIG1heGltdW0g aXMgJWQsIGdvdCAlenUiLA0KKwkJICAgIE5fVkhPU1RfUkVHSU9OUywgKmxhc3RfaWR4ICsgR0VO RVJBTF9OUkVHSU9OUyk7DQorDQorICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lk eCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHBrdF9idWYpOw0KKwl2aG9zdF9tZW0tPm1lbS5y ZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTihldGhfcGFkKTsNCit9 DQorDQogLyoqDQogICogcGlkZmlsZV93cml0ZSgpIC0gV3JpdGUgUElEIHRvIGZpbGUsIGlmIHJl cXVlc3RlZCB0byBkbyBzbywgYW5kIGNsb3NlIGl0DQogICogQGZkOgkJT3BlbiBQSUQgZmlsZSBk ZXNjcmlwdG9yLCBjbG9zZWQgb24gZXhpdCwgLTEgdG8gc2tpcCB3cml0aW5nIGl0DQpkaWZmIC0t Z2l0IGEvdXRpbC5oIGIvdXRpbC5oDQppbmRleCBlYzJkOWFjLi4xMWY2ODc3IDEwMDY0NA0KLS0t IGEvdXRpbC5oDQorKysgYi91dGlsLmgNCkBAIC0xNDUsNiArMTQ1LDcgQEAgaW50IGRvX2Nsb25l KGludCAoKmZuKSh2b2lkICopLCBjaGFyICpzdGFja19hcmVhLCBzaXplX3Qgc3RhY2tfc2l6ZSwg aW50IGZsYWdzLA0KDQogc3RydWN0IGN0eDsNCiB1bmlvbiBzb2NrYWRkcl9pbmFueTsNCit1bmlv biB2aG9zdF9tZW1vcnlfdTsNCg0KIGludCBzb2NrX2w0KGNvbnN0IHN0cnVjdCBjdHggKmMsIGVu dW0gZXBvbGxfdHlwZSB0eXBlLA0KIAkgICAgY29uc3QgdW5pb24gc29ja2FkZHJfaW5hbnkgKnNh LCBjb25zdCBjaGFyICppZm5hbWUpOw0KQEAgLTE3MCw2ICsxNzEsNyBAQCBpbnQgd3JpdGVfcmVt YWluZGVyKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBpb3ZjbnQsDQog aW50IHJlYWRfcmVtYWluZGVyKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVf dCBjbnQsIHNpemVfdCBza2lwKTsNCiBib29sIHNucHJpbnRmX2NoZWNrKGNoYXIgKnN0ciwgc2l6 ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsNCiBsb25nIGNsYW1wZWRfc2NhbGUo bG9uZyB4LCBsb25nIHksIGxvbmcgbG8sIGxvbmcgaGksIGxvbmcgZik7DQordm9pZCBnZW5lcmFs X3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0s IHNpemVfdCAqbGFzdF9pZHgpOw0KDQogLyoqDQogICogYWZfbmFtZSgpIC0gUmV0dXJuIG5hbWUg b2YgYW4gYWRkcmVzcyBmYW1pbHkNCmRpZmYgLS1naXQgYS92aG9zdC5jIGIvdmhvc3QuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmE2OWM0YjUNCi0tLSAvZGV2L251bGwN CisrKyBiL3Zob3N0LmMNCkBAIC0wLDAgKzEsMjk1IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXINCisvKiBDb3B5cmlnaHQgUmVkIEhhdA0KKyAqIEF1dGhv cjogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KKyAqDQorICogdmhvc3Qu YyAtIHZob3N0LW5ldCAodmhvc3Qta2VybmVsKSBhY2NlbGVyYXRpb24gZm9yIHBhc3RhIG1vZGUN CisgKi8NCisNCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8ZmNudGwuaD4NCisjaW5j bHVkZSA8aW50dHlwZXMuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0cmlu Zy5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4NCisj aW5jbHVkZSA8c3lzL2lvY3RsLmg+DQorDQorI2luY2x1ZGUgInV0aWwuaCINCisjaW5jbHVkZSAi cGFzc3QuaCINCisjaW5jbHVkZSAidmhvc3QuaCINCisjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQor I2luY2x1ZGUgInVkcC5oIg0KKyNpbmNsdWRlICJ0Y3BfYnVmLmgiDQorDQorc3RydWN0IHZxX3N0 YXRlIHZob3N0X3ZxX3N0YXRlWzJdOw0KKw0KK3N0cnVjdCB2cmluZ19kZXNjX3Bhc3RhIHZyaW5n X2Rlc2NbMl1bVkhPU1RfTkRFU0NTXQ0KKwkJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0Vf U0laRSkpKTsNCisNCitzdHJ1Y3QgdnJpbmdfYXZhaWxfcGFzdGEgdnJpbmdfYXZhaWxfYWxsWzJd DQorCQkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KK3N0cnVjdCB2cmlu Z191c2VkX3Bhc3RhIHZyaW5nX3VzZWRfYWxsWzJdDQorCQkJCV9fYXR0cmlidXRlX18oKGFsaWdu ZWQoUEFHRV9TSVpFKSkpOw0KKw0KK3VuaW9uIHZob3N0X21lbW9yeV91IHZob3N0X21lbW9yeSA9 IHsNCisJLm1lbSA9IHsNCisJCS5ucmVnaW9ucyA9IE5fVkhPU1RfUkVHSU9OUywNCisJfSwNCit9 Ow0KKw0KKy8qKg0KKyAqIHZob3N0X3NldHVwX25ldCgpIC0gT3BlbiBhbmQgbmVnb3RpYXRlIGZl YXR1cmVzIG9uIC9kZXYvdmhvc3QtbmV0DQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsgYy0+ dmhvc3QuZmQgYW5kIGMtPnZob3N0LmZlYXR1cmVzIGFyZSBzZXQNCisgKgkJb24gc3VjY2Vzcywg YW5kIGxlZnQgdW50b3VjaGVkIG9uIGZhaWx1cmUNCisgKg0KKyAqIEZhaWx1cmUgaGVyZSBtZWFu cyB2aG9zdC1uZXQgaXNuJ3QgdXNhYmxlLCBub3QgdGhhdCBwYXN0YSBjYW4ndCBydW46IHRoZQ0K KyAqIGNhbGxlciBmYWxscyBiYWNrIHRvIHBsYWluIHRhcCBvcGVyYXRpb24gdW5sZXNzIGFjY2Vs ZXJhdGlvbiB3YXMgcmVxdWlyZWQuDQorICogVGhhdCdzIHdoeSBub3RoaW5nIGluIGhlcmUgaXMg ZmF0YWwuDQorICoNCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgaWYgdmhvc3QtbmV0IGlz IHVuYXZhaWxhYmxlIG9yIHVudXNhYmxlDQorICovDQoraW50IHZob3N0X3NldHVwX25ldChzdHJ1 Y3QgY3R4ICpjKQ0KK3sNCisJY29uc3QgdWludDY0X3QgcmVxX2ZlYXR1cmVzID0gKDFVTEwgPDwg VklSVElPX0ZfVkVSU0lPTl8xKSB8DQorCQkJCSAgICAgICgxVUxMIDw8IFZIT1NUX05FVF9GX1ZJ UlRJT19ORVRfSERSKTsNCisJdWludDY0X3QgZmVhdHVyZXM7DQorCWludCB2aG9zdF9mZDsNCisN CisJdmhvc3RfZmQgPSBvcGVuKCIvZGV2L3Zob3N0LW5ldCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0sg fCBPX0NMT0VYRUMpOw0KKwlpZiAodmhvc3RfZmQgPCAwKSB7DQorCQlkZWJ1Z19wZXJyb3IoIkNv dWxkbid0IG9wZW4gL2Rldi92aG9zdC1uZXQiKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwlp ZiAoaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9PV05FUiwgTlVMTCkgPCAwKSB7DQorCQlkZWJ1 Z19wZXJyb3IoIlZIT1NUX1NFVF9PV05FUiBpb2N0bCBmYWlsZWQiKTsNCisJCWdvdG8gY2xvc2Vf ZmQ7DQorCX0NCisNCisJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9HRVRfRkVBVFVSRVMsICZm ZWF0dXJlcykgPCAwKSB7DQorCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX0dFVF9GRUFUVVJFUyBpb2N0 bCBmYWlsZWQiKTsNCisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisNCisJaWYgKChmZWF0dXJlcyAm IHJlcV9mZWF0dXJlcykgIT0gcmVxX2ZlYXR1cmVzKSB7DQorCQlkZWJ1Zygidmhvc3QtbmV0IGlz IG1pc3NpbmcgZmVhdHVyZXM6IDB4JTAxNiIgUFJJeDY0LA0KKwkJICAgICAgcmVxX2ZlYXR1cmVz ICYgfmZlYXR1cmVzKTsNCisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisNCisJZmVhdHVyZXMgPSBy ZXFfZmVhdHVyZXM7DQorCWlmIChpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX0ZFQVRVUkVTLCAm ZmVhdHVyZXMpIDwgMCkgew0KKwkJZGVidWdfcGVycm9yKCJWSE9TVF9TRVRfRkVBVFVSRVMgaW9j dGwgZmFpbGVkIik7DQorCQlnb3RvIGNsb3NlX2ZkOw0KKwl9DQorDQorCWMtPnZob3N0LmZlYXR1 cmVzID0gZmVhdHVyZXM7DQorCWMtPnZob3N0LmZkID0gdmhvc3RfZmQ7DQorDQorCXJldHVybiAw Ow0KKw0KK2Nsb3NlX2ZkOg0KKwljbG9zZSh2aG9zdF9mZCk7DQorDQorCXJldHVybiAtMTsNCit9 DQorDQorLyoqDQorICogdmhvc3Rfc2V0dXBfZXZlbnRmZHMoKSAtIFNldCB1cCBvbmUgcXVldWUn cyBldmVudGZkcyBhbmQgcmluZyBzaXplDQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dDsgYy0+ dmhvc3QuZmQgbXVzdCBhbHJlYWR5IGJlIHNldA0KKyAqIEBxdWV1ZV9pZHg6CUluZGV4IG9mIHRo ZSBxdWV1ZSAodnJpbmcpIHRvIGNvbmZpZ3VyZQ0KKyAqDQorICovDQordm9pZCB2aG9zdF9zZXR1 cF9ldmVudGZkcyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4KQ0KK3sNCisJc3RydWN0IHZo b3N0X3ZyaW5nX2ZpbGUgdnJpbmdfZmlsZSA9IHsgLmluZGV4ID0gcXVldWVfaWR4IH07DQorCXN0 cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzdGF0ZSA9IHsgLmluZGV4ID0gcXVldWVfaWR4IH07DQor CXVuaW9uIGVwb2xsX3JlZiByZWYgPSB7IDAgfTsNCisJaW50IHZob3N0X2ZkID0gYy0+dmhvc3Qu ZmQ7DQorCWludCByYzsNCisNCisJc3RhdGUubnVtID0gVkhPU1RfTkRFU0NTOw0KKwlyZWYucXVl dWUgPSBxdWV1ZV9pZHg7DQorDQorCXZyaW5nX2ZpbGUuZmQgPSBldmVudGZkKDAsIEVGRF9OT05C TE9DSyB8IEVGRF9DTE9FWEVDKTsNCisJaWYgKHZyaW5nX2ZpbGUuZmQgPCAwKQ0KKwkJZGllX3Bl cnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBjYWxsIGV2ZW50ZmQsIHF1ZXVlICVkIiwNCisJ CQkgICBxdWV1ZV9pZHgpOw0KKwlyZWYuZmQgPSB2cmluZ19maWxlLmZkOw0KKw0KKwlyYyA9IGlv Y3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJTkdfQ0FMTCwgJnZyaW5nX2ZpbGUpOw0KKwlpZiAo cmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0NBTEwgaW9jdGwgZmFpbGVk LCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisNCisJcmVmLnR5cGUgPSBFUE9MTF9U WVBFX1ZIT1NUX0NBTEw7DQorCXJjID0gZXBvbGxfYWRkKGMtPmVwb2xsZmQsIEVQT0xMSU4sIHJl Zik7DQorCWlmIChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gd2F0Y2ggdmhvc3Qg Y2FsbCBldmVudGZkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisJYy0+dmhvc3Qu dnFbcXVldWVfaWR4XS5jYWxsX2ZkID0gdnJpbmdfZmlsZS5mZDsNCisNCisJdnJpbmdfZmlsZS5m ZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLIHwgRUZEX0NMT0VYRUMpOw0KKwlpZiAodnJpbmdf ZmlsZS5mZCA8IDApDQorCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGVycm9y IGV2ZW50ZmQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwlyYyA9IGlvY3Rs KHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJTkdfRVJSLCAmdnJpbmdfZmlsZSk7DQorCWlmIChyYyA8 IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfRVJSIGlvY3RsIGZhaWxlZCwgcXVl dWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXJlZi50eXBlID0gRVBPTExfVFlQRV9W SE9TVF9FUlJPUjsNCisJcmVmLmZkID0gdnJpbmdfZmlsZS5mZDsNCisJcmMgPSBlcG9sbF9hZGQo Yy0+ZXBvbGxmZCwgRVBPTExJTiwgcmVmKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3Io IkZhaWxlZCB0byB3YXRjaCB2aG9zdCBlcnJvciBldmVudGZkLCBxdWV1ZSAlZCIsDQorCQkJICAg cXVldWVfaWR4KTsNCisJYy0+dmhvc3QudnFbcXVldWVfaWR4XS5lcnJfZmQgPSB2cmluZ19maWxl LmZkOw0KKw0KKwlyYyA9IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJTkdfTlVNLCAmc3Rh dGUpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX05VTSBp b2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwl2cmluZ19m aWxlLmZkID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQorCWlmICh2 cmluZ19maWxlLmZkIDwgMCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgdmhvc3Qg a2ljayBldmVudGZkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisNCisJcmMgPSBp b2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0tJQ0ssICZ2cmluZ19maWxlKTsNCisJaWYg KHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX1NFVF9WUklOR19LSUNLIGlvY3RsIGZhaWxl ZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCWMtPnZob3N0LnZxW3F1ZXVl X2lkeF0ua2lja19mZCA9IHZyaW5nX2ZpbGUuZmQ7DQorDQorCXZob3N0X3ZxX3N0YXRlW3F1ZXVl X2lkeF0ubnVtX2ZyZWUgPSBWSE9TVF9OREVTQ1M7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X3Nl dHVwX21lbW9yeV90YWJsZSgpIC0gUmVnaXN0ZXIgdGhlIEdQQS9IVkEgdHJhbnNsYXRpb24gdGFi bGUNCisgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFscmVhZHkg YmUgc2V0DQorICoNCisgKiB2aG9zdC1uZXQgcmVhZHMgdGhlIGFkZHJlc3NlcyB3ZSBwdXQgaW4g ZGVzY3JpcHRvcnMgYXMgZ3Vlc3QgcGh5c2ljYWwNCisgKiBhZGRyZXNzZXMsIGFuZCB0cmFuc2xh dGVzIHRoZW0gdGhyb3VnaCB0aGlzIHRhYmxlIGJlZm9yZSB0b3VjaGluZyB0aGUNCisgKiBtZW1v cnkgdGhleSByZWZlciB0by4gcGFzdGEgaGFzIG5vIGd1ZXN0IGFuZCBubyBzZWNvbmQgYWRkcmVz cyBzcGFjZToNCisgKiB0aGUgYWRkcmVzc2VzIHdlIHB1dCB0aGVyZSBhcmUgb3VyIG93biB2aXJ0 dWFsIGFkZHJlc3Nlcy4gRXZlcnkgcmVnaW9uDQorICogYmVsb3cgdGhlcmVmb3JlIHNldHMgZ3Vl c3RfcGh5c19hZGRyIGVxdWFsIHRvIHVzZXJzcGFjZV9hZGRyLCBzbyB0aGF0DQorICogR1BBID09 IEhWQSBhbmQgdGhlIHRyYW5zbGF0aW9uIGlzIGFuIGlkZW50aXR5IG1hcHBpbmcuDQorICoNCisg KiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3Igd2l0aCBlcnJubyBzZXQNCisgKi8N CitpbnQgdmhvc3Rfc2V0dXBfbWVtb3J5X3RhYmxlKHN0cnVjdCBjdHggKmMpIHsNCisJc2l6ZV90 IHJlZ2lvbl9pZHggPSAwOw0KKw0KKwkvKiBnZW5lcmFsIHB1cnBvc2UgYnVmZmVycyAqLw0KKwln ZW5lcmFsX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdpb25faWR4 KTsNCisNCisJLyogdGNwIHNwZWNpZmljIGJ1ZmZlcnMgKi8NCisJdGNwX3JlZ2lzdGVyX21lbW9y eV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdpb25faWR4KTsNCisNCisJLyogdWRwIHNwZWNp ZmljIGJ1ZmZlcnMgKi8NCisJdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9zdF9tZW1v cnksICZyZWdpb25faWR4KTsNCisNCisJdmhvc3RfbWVtb3J5Lm1lbS5ucmVnaW9ucyA9IHJlZ2lv bl9pZHg7DQorDQorCXJldHVybiBpb2N0bChjLT52aG9zdC5mZCwgVkhPU1RfU0VUX01FTV9UQUJM RSwgJnZob3N0X21lbW9yeS5tZW0pOw0KK30NCisNCisvKioNCisgKiB2aG9zdF9zZXRfdnJpbmco KSAtIFJlZ2lzdGVyIGEgdnJpbmcncyBhZGRyZXNzZXMgYW5kIGJpbmQgaXRzIGJhY2tlbmQNCisg KiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFscmVhZHkgYmUgc2V0 DQorICogQHF1ZXVlX2lkeDoJSW5kZXggb2YgdGhlIHF1ZXVlICh2cmluZykgdG8gY29uZmlndXJl DQorICogQHRhcF9mZDoJVGFwIGZkIHRvIGJpbmQgYXMgdGhpcyBxdWV1ZSdzIGJhY2tlbmQNCisg Ki8NCit2b2lkIHZob3N0X3NldF92cmluZyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4LCBp bnQgdGFwX2ZkKQ0KK3sNCisJaW50IHZob3N0X2ZkID0gYy0+dmhvc3QuZmQ7DQorCXN0cnVjdCB2 aG9zdF92cmluZ19hZGRyIGFkZHIgPSB7DQorCQkuaW5kZXggPSBxdWV1ZV9pZHgsDQorCQkuZGVz Y191c2VyX2FkZHIgPSAodW5zaWduZWQgbG9uZyl2cmluZ19kZXNjW3F1ZXVlX2lkeF0sDQorCQku YXZhaWxfdXNlcl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX2F2YWlsX2FsbFtxdWV1ZV9p ZHhdLA0KKwkJLnVzZWRfdXNlcl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX3VzZWRfYWxs W3F1ZXVlX2lkeF0sDQorCQkubG9nX2d1ZXN0X2FkZHIgPSAodW5zaWduZWQgbG9uZykmdnJpbmdf dXNlZF9hbGxbcXVldWVfaWR4XSwNCisJfTsNCisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgZmls ZSA9IHsNCisJCS5pbmRleCA9IHF1ZXVlX2lkeCwNCisJCS5mZCA9IHRhcF9mZCwNCisJfTsNCisJ dW5zaWduZWQgaW50IGk7DQorCWludCByYzsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhP U1RfU0VUX1ZSSU5HX0FERFIsICZhZGRyKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3Io IlZIT1NUX1NFVF9WUklOR19BRERSIGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1 ZXVlX2lkeCk7DQorDQorCWlmIChxdWV1ZV9pZHggPT0gVkhPU1RfQVZBSUxfUV9JRFgpIHsNCisJ CWZvciAoaSA9IDA7IGkgPCBWSE9TVF9OREVTQ1M7ICsraSkgew0KKwkJCXZyaW5nX2Rlc2NbVkhP U1RfQVZBSUxfUV9JRFhdW2ldLmFkZHIgPQ0KKwkJCQkodWludHB0cl90KXBrdF9idWYgKyBpICog VkhPU1RfREVTQ19CWVRFUzsNCisJCQl2cmluZ19kZXNjW1ZIT1NUX0FWQUlMX1FfSURYXVtpXS5s ZW4gPSBWSE9TVF9ERVNDX0JZVEVTOw0KKwkJCXZyaW5nX2Rlc2NbVkhPU1RfQVZBSUxfUV9JRFhd W2ldLmZsYWdzID0NCisJCQkJVlJJTkdfREVTQ19GX1dSSVRFOw0KKwkJfQ0KKw0KKwkJZm9yIChp ID0gMDsgaSA8IFZIT1NUX05ERVNDUzsgKytpKQ0KKwkJCXZyaW5nX2F2YWlsX2FsbFtWSE9TVF9B VkFJTF9RX0lEWF0ucmluZ1tpXSA9DQorCQkJCWh0b2xlMTYoaSk7DQorDQorCQl2aG9zdF9yeF9k ZXNjcmlwdG9yX2hhbmRvZmYoYyk7DQorCX0NCisNCisJaWYgKHF1ZXVlX2lkeCA9PSBWSE9TVF9V U0VEX1FfSURYKSB7DQorCQlmb3IgKGkgPSAwOyBpIDwgKFZIT1NUX05ERVNDUyAtIDEpOyArK2kp DQorCQkJdnJpbmdfZGVzY1tWSE9TVF9VU0VEX1FfSURYXVtpXS5uZXh0ID0gaSArIDE7DQorCX0N CisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfTkVUX1NFVF9CQUNLRU5ELCAmZmlsZSk7 DQorCWlmIChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9ORVRfU0VUX0JBQ0tFTkQgaW9j dGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCit9DQorDQorLyoqDQor ICogdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKCkgLSBBbm5vdW5jZSBmcmVlZCBmcm9tLWd1 ZXN0IGRlc2NyaXB0b3JzDQorICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KKyAqDQorICogQnVt cHMgYXZhaWwuaWR4IGJ5IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgYWNjdW11bGF0ZWQgaW4N CisgKiB2aG9zdF92cV9zdGF0ZVtWSE9TVF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUgKGZyb20gcHJp b3INCisgKiBjb25zdW1lX29uZV9yeF9kZXNjcmlwdG9yKCkgY2FsbHMpLA0KKyAqIHRoZW4gcmVz ZXRzIHRoZSBjb3VudGVyIHRvIHplcm8uIFRoZSBrZXJuZWwgd2lsbCBzZWUgdGhlIG5ldw0KKyAq IGF2YWlsLmlkeCBhbmQgY29uc3VtZSB0aGUgZnJlc2hseS1hdmFpbGFibGUgZGVzY3JpcHRvcnMu DQorICovDQordm9pZCB2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoc3RydWN0IGN0eCAqYykN Cit7DQorCXNtcF93bWIoKTsNCisNCisJaWYgKCF2aG9zdF92cV9zdGF0ZVtWSE9TVF9BVkFJTF9R X0lEWF0ubnVtX2ZyZWUpDQorCQlyZXR1cm47DQorDQorCXZyaW5nX2F2YWlsX2FsbFtWSE9TVF9B VkFJTF9RX0lEWF0uaWR4ICs9DQorCQl2aG9zdF92cV9zdGF0ZVtWSE9TVF9BVkFJTF9RX0lEWF0u bnVtX2ZyZWU7DQorCXZob3N0X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZSA9 IDA7DQorCXZob3N0X2tpY2soJnZyaW5nX3VzZWRfYWxsW1ZIT1NUX0FWQUlMX1FfSURYXSwNCisJ CSAgIGMtPnZob3N0LnZxW1ZIT1NUX0FWQUlMX1FfSURYXS5raWNrX2ZkKTsNCit9DQorDQorLyoq DQorICogdmhvc3Rfa2ljaygpIC0gTm90aWZ5IHRoZSBrZXJuZWwgdGhhdCBuZXcgZGVzY3JpcHRv cnMgYXJlIGF2YWlsYWJsZQ0KKyAqIEB1c2VkOglVc2VkIHJpbmcgb2YgdGhlIHF1ZXVlIHdlJ3Jl IGFubm91bmNpbmcgb24sIGNoZWNrZWQgdG8gc2VlDQorICoJCXdoZXRoZXIgdGhlIGtlcm5lbCdz IHZpcnRpbyB0aHJlYWQgaXMgYWxyZWFkeSByZWFkaW5nDQorICoJCWRlc2NyaXB0b3JzIGFuZCBk b2Vzbid0IHdhbnQgdG8gYmUgbm90aWZpZWQNCisgKiBAa2lja19mZDoJS2ljayBldmVudGZkIG9m IHRoYXQgc2FtZSBxdWV1ZQ0KKyAqLw0KK3ZvaWQgdmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNl ZF9wYXN0YSAqdXNlZCwgaW50IGtpY2tfZmQpDQorew0KKwkvKiBFbnN1cmUgdGhhdCB0aGUgcmVh ZCBvZiB1c2VkLT5mbGFncyBkb2Vzbid0IGdldCByZW9yZGVyZWQgdG8gYmUNCisJICogYWJvdmUg dGhlIGF2YWlsLmlkeCB1cGRhdGUNCisJICovDQorCXNtcF9tYigpOw0KKw0KKwlpZiAoISh1c2Vk LT5mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKQ0KKwkJZXZlbnRmZF93cml0ZShraWNr X2ZkLCAxKTsNCit9DQpkaWZmIC0tZ2l0IGEvdmhvc3QuaCBiL3Zob3N0LmgNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5iZDU1NWY5DQotLS0gL2Rldi9udWxsDQorKysgYi92 aG9zdC5oDQpAQCAtMCwwICsxLDkxIEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb3ItbGF0ZXINCisgKiBDb3B5cmlnaHQgUmVkIEhhdA0KKyAqIEF1dGhvcjogQW1tYXIg WWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KKyAqDQorICogdmhvc3QuaCAtIHZob3N0 LW5ldCAodmhvc3Qta2VybmVsKSBhY2NlbGVyYXRpb24gZm9yIHBhc3RhIG1vZGUNCisgKi8NCisN CisjaWZuZGVmIFZIT1NUX0gNCisjZGVmaW5lIFZIT1NUX0gNCisNCisjaW5jbHVkZSA8YXNzZXJ0 Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisNCisjaW5j bHVkZSA8bGludXgvdmhvc3QuaD4NCisjaW5jbHVkZSA8bGludXgvdmhvc3RfdHlwZXMuaD4NCisj aW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPg0KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9f bmV0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+DQorDQorI2luY2x1ZGUgInBh c3N0LmgiDQorDQorI2RlZmluZSBWSE9TVF9BVkFJTF9RX0lEWCAwDQorI2RlZmluZSBWSE9TVF9V U0VEX1FfSURYIDENCisNCisvKioNCisgKiBzdHJ1Y3QgdnFfc3RhdGUgLSBQZXItdmlydHF1ZXVl IGxvY2FsIGRlc2NyaXB0b3IgdHJhY2tpbmcNCisgKiBAbnVtX2ZyZWU6CQlOdW1iZXIgb2YgZGVz Y3JpcHRvcnMgcmVhZHkgdG8gYmUgYW5ub3VuY2VkIHRvIHRoZQ0KKyAqCQkJa2VybmVsIHZpYSB2 aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoKQ0KKyAqIEBsYXN0X3VzZWRfaWR4OglOdW1iZXIg b2YgdXNlZC1yaW5nIGVudHJpZXMgY29uc3VtZWQgc28gZmFyOw0KKyAqCQkJbGFnZ2luZyByZWFk IGN1cnNvciB2cy4gdnJpbmdfdXNlZC0+aWR4ICh0aGUNCisgKgkJCWtlcm5lbCdzIHdyaXRlIGN1 cnNvcikNCisgKi8NCitleHRlcm4gc3RydWN0IHZxX3N0YXRlIHsNCisJdWludDE2X3QgbnVtX2Zy ZWU7DQorCXVpbnQxNl90IGxhc3RfdXNlZF9pZHg7DQorCXVpbnQxNl90IG5leHRfZnJlZTsNCit9 IHZob3N0X3ZxX3N0YXRlWzJdOw0KKw0KK3N0cnVjdCB2cmluZ19kZXNjX3Bhc3RhIHsNCisJX192 aXJ0aW82NCBhZGRyOw0KKwlfX3ZpcnRpbzMyIGxlbjsNCisJX192aXJ0aW8xNiBmbGFnczsNCisJ X192aXJ0aW8xNiBuZXh0Ow0KK307DQorDQorZXh0ZXJuIHN0cnVjdCB2cmluZ19kZXNjX3Bhc3Rh IHZyaW5nX2Rlc2NbMl1bVkhPU1RfTkRFU0NTXTsNCisNCitzdHJ1Y3QgdnJpbmdfYXZhaWxfcGFz dGEgew0KKwlfX3ZpcnRpbzE2IGZsYWdzOw0KKwlfX3ZpcnRpbzE2IGlkeDsNCisJX192aXJ0aW8x NiByaW5nW1ZIT1NUX05ERVNDU107DQorfTsNCitzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3Qg dnJpbmdfYXZhaWxfcGFzdGEpID09DQorCSAgICAgIG9mZnNldG9mKHN0cnVjdCB2cmluZ19hdmFp bCwgcmluZ1tWSE9TVF9OREVTQ1NdKSwNCisJICAgICAgInZyaW5nX2F2YWlsX3Bhc3RhIGRvZXNu J3QgbWF0Y2ggdGhlIGtlcm5lbCBhdmFpbCByaW5nIGxheW91dCIpOw0KK2V4dGVybiBzdHJ1Y3Qg dnJpbmdfYXZhaWxfcGFzdGEgdnJpbmdfYXZhaWxfYWxsWzJdOw0KKw0KK3N0cnVjdCB2cmluZ191 c2VkX3Bhc3RhIHsNCisJX192aXJ0aW8xNiBmbGFnczsNCisJX192aXJ0aW8xNiBpZHg7DQorCXZy aW5nX3VzZWRfZWxlbV90IHJpbmdbVkhPU1RfTkRFU0NTXTsNCit9Ow0KK3N0YXRpY19hc3NlcnQo c2l6ZW9mKHN0cnVjdCB2cmluZ191c2VkX3Bhc3RhKSA9PQ0KKwkgICAgICBvZmZzZXRvZihzdHJ1 Y3QgdnJpbmdfdXNlZCwgcmluZ1tWSE9TVF9OREVTQ1NdKSwNCisJICAgICAgInZyaW5nX3VzZWRf cGFzdGEgZG9lc24ndCBtYXRjaCB0aGUga2VybmVsIHVzZWQgcmluZyBsYXlvdXQiKTsNCitleHRl cm4gc3RydWN0IHZyaW5nX3VzZWRfcGFzdGEgdnJpbmdfdXNlZF9hbGxbMl07DQorDQorI2RlZmlu ZSBOX1ZIT1NUX1JFR0lPTlMgMTINCit1bmlvbiB2aG9zdF9tZW1vcnlfdSB7DQorCXN0cnVjdCB2 aG9zdF9tZW1vcnkgbWVtOw0KKwljaGFyIGJ1ZltvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWVtb3J5 LCByZWdpb25zW05fVkhPU1RfUkVHSU9OU10pXTsNCit9Ow0KK2V4dGVybiB1bmlvbiB2aG9zdF9t ZW1vcnlfdSB2aG9zdF9tZW1vcnk7DQorDQorI2RlZmluZSBWSE9TVF9NRU1PUllfUkVHSU9OX1BU UihhZGRyLCBzaXplKSBcDQorICAgIChzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbikgeyBcDQor ICAgICAgICAuZ3Vlc3RfcGh5c19hZGRyID0gKHVpbnRwdHJfdClhZGRyLCBcDQorICAgICAgICAu bWVtb3J5X3NpemUgPSBzaXplLCBcDQorICAgICAgICAudXNlcnNwYWNlX2FkZHIgID0gKHVpbnRw dHJfdClhZGRyLCBcDQorICAgIH0NCisjZGVmaW5lIFZIT1NUX01FTU9SWV9SRUdJT04oYnVmKSBW SE9TVF9NRU1PUllfUkVHSU9OX1BUUigmYnVmLCBzaXplb2YoYnVmKSkNCisNCit2b2lkIHZob3N0 X3NldF92cmluZyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4LCBpbnQgdGFwX2ZkKTsNCitp bnQgdmhvc3Rfc2V0dXBfbWVtb3J5X3RhYmxlKHN0cnVjdCBjdHggKmMpOw0KK2ludCB2aG9zdF9z ZXR1cF9uZXQoc3RydWN0IGN0eCAqYyk7DQordm9pZCB2aG9zdF9zZXR1cF9ldmVudGZkcyhzdHJ1 Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4KTsNCit2b2lkIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFu ZG9mZihzdHJ1Y3QgY3R4ICpjKTsNCit2b2lkIHZob3N0X2tpY2soc3RydWN0IHZyaW5nX3VzZWRf cGFzdGEgKnVzZWQsIGludCBraWNrX2ZkKTsNCisNCisjZW5kaWYgLyogVkhPU1RfSCAqLw0KLS0N CjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkNCg0KDQo=