From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=UyZFfWG2; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 2B0235A0288 for ; Wed, 09 Jul 2025 19:48:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752083293; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TFLbEN54si8BhmHF0tPvnT2GAPlfFfMLM3es6vQPEoI=; b=UyZFfWG2q/adPYdPGwhmnJk5oylBelAJ7v9e3GAgauFdlY2MzSVwOxE6Ta13HjGr0rts5W lf/C6orBhlHpDDnVhW0yeqBrCjooNjPvMjAXYC+O3P9xpbGon/rqLF2YPaZvh42yRQClP2 D7E65x9JF8Q/Qk1Hhv2D1cbGVwyn5mo= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-434-kzxEmXq2PYG0psaARlA5hA-1; Wed, 09 Jul 2025 13:48:11 -0400 X-MC-Unique: kzxEmXq2PYG0psaARlA5hA-1 X-Mimecast-MFC-AGG-ID: kzxEmXq2PYG0psaARlA5hA_1752083291 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id CF111193F05B for ; Wed, 9 Jul 2025 17:48:10 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.225.131]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8C8DB30001B1; Wed, 9 Jul 2025 17:48:09 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: passt-dev@passt.top Subject: [RFC v2 11/11] tcp_buf: adding TCP tx circular buffer Date: Wed, 9 Jul 2025 19:47:48 +0200 Message-ID: <20250709174748.3514693-12-eperezma@redhat.com> In-Reply-To: <20250709174748.3514693-1-eperezma@redhat.com> References: <20250709174748.3514693-1-eperezma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 07cTxSK9fsZJZE04rTBIpzF9RUGQz7pVnqmICvJJQxg_1752083291 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: FKOOA3H3IZQMR2YYJZHKDZS6WBQFEGKP X-Message-ID-Hash: FKOOA3H3IZQMR2YYJZHKDZS6WBQFEGKP X-MailFrom: eperezma@redhat.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: jasowang@redhat.com 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: Tm93IGJvdGggdGNwX3NvY2sgYW5kIHRhcCB1c2VzIHRoZSBjaXJjdWxhciBidWZmZXIgYXMgaW50 ZW5kZWQuDQoNClZlcnkgbGlnaHRseSB0ZXN0ZWQuIEVzcGVjaWFsbHksIHBhdGhzIGxpa2Ugcmlu ZyBmdWxsIG9yIGFsbW9zdCBmdWxsDQp0aGF0IGFyZSBjaGVja2VkIGJlZm9yZSBwcm9kdWNpbmcg bGlrZQ0KdGNwX3BheWxvYWRfc29ja191c2VkICsgZmlsbF9idWZzID4gVENQX0ZSQU1FU19NRU0u DQoNClByb2Nlc3NpbmcgdGhlIHR4IGJ1ZmZlcnMgaW4gYSBjaXJjdWxhciBidWZmZXIgbWFrZXMg bmFtZXNwYWNlIHJ4IGdvDQpmcm9tIHRvIH4xMS41R2JpdC9zLiB0byB+MTcuMjZHYml0L3MuDQoN ClRPRE86IEluY3JlYXNlIHRoZSB0eCBxdWV1ZSBsZW5ndGgsIGFzIHdlIHNwZW5kIGEgbG90IG9m IGRlc2NyaXB0b3JzIGluDQplYWNoIHJlcXVlc3QuIElkZWFsbHksIHR4IHNpemUgc2hvdWxkIGJl IGF0IGxlYXN0DQpidWZzX3Blcl9mcmFtZSpUQ1BfRlJBTUVTX01FTSwgYnV0IG1heWJlIHdlIGdv dCBtb3JlIHBlcmZvcm1hbmNlIHdpdGgNCmJpZ2dlciBxdWV1ZXMuDQoNClRPRE86IFNvbWV0aW1l cyB3ZSBjYWxsIHRjcF9idWZfZnJlZV9vbGRfdGFwX3htaXQgdHdpY2U6IG9uZSB0byBmcmVlIGF0 DQpsZWFzdCBOIHVzZWQgdHggYnVmZmVycyBhbmQgdGhlIG5leHQgb25lIGluIHRjcF9wYXlsb2Fk X2ZsdXNoLiBNYXliZSB3ZQ0KY2FuIG9wdGltaXplIGl0Lg0KDQpTaWduZWQtb2ZmLWJ5OiBFdWdl bmlvIFDDqXJleiA8ZXBlcmV6bWFAcmVkaGF0LmNvbT4NCi0tLQ0KIHRjcF9idWYuYyB8IDEzMCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCiAx IGZpbGUgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQ0KDQpkaWZm IC0tZ2l0IGEvdGNwX2J1Zi5jIGIvdGNwX2J1Zi5jDQppbmRleCBmNzRkMjJkLi4zMjZhZjc5IDEw MDY0NA0KLS0tIGEvdGNwX2J1Zi5jDQorKysgYi90Y3BfYnVmLmMNCkBAIC01MywxMyArNTMsNjYg QEAgc3RhdGljX2Fzc2VydChNU1M2IDw9IHNpemVvZih0Y3BfcGF5bG9hZFswXS5kYXRhKSwgIk1T UzYgaXMgZ3JlYXRlciB0aGFuIDY1NTE2IikNCiANCiAvKiBSZWZlcmVuY2VzIHRyYWNraW5nIHRo ZSBvd25lciBjb25uZWN0aW9uIG9mIGZyYW1lcyBpbiB0aGUgdGFwIG91dHF1ZXVlICovDQogc3Rh dGljIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKnRjcF9mcmFtZV9jb25uc1tUQ1BfRlJBTUVTX01FTV07 DQotc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfcGF5bG9hZF9zb2NrX3VzZWQsIHRjcF9wYXlsb2Fk X3RhcF91c2VkOw0KKw0KKy8qDQorICogc29ja19oZWFkOiBIZWFkIG9mIGJ1ZmZlcnMgYXZhaWxh YmxlIGZvciB3cml0aW5nLiB0Y3BfZGF0YV90b190YXAgbW92ZXMgaXQNCisgKiBmb3J3YXJkLCBi dXQgZXJyb3JzIHF1ZXVlaW5nIHRvIHZob3N0IGNhbiBtb3ZlIGl0IGJhY2t3YXJkcyB0byB0YXBf aGVhZA0KKyAqIGFnYWluLg0KKyAqDQorICogdGFwX2hlYWQ6IEhlYWQgb2YgYnVmZmVycyB0aGF0 IGhhdmUgYmVlbiBzZW50IHRvIHZob3N0LiBmbHVzaCBtb3ZlcyB0aGlzDQorICogZm9yd2FyZC4N CisgKg0KKyAqIHRhaWw6IENoYXNpbmcgaW5kZXguIEluY3JlbWVudHMgd2hlbiB2aG9zdCB1c2Vz IGJ1ZmZlcnMuDQorICoNCisgKiBfdXNlZDogSW5kZXBlbmRlbnQgdmFyaWFibGVzIHRvIHRlbGwg YmV0d2VlbiBmdWxsIGFuZCBlbXB0eS4NCisgKi8NCitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9w YXlsb2FkX3NvY2tfaGVhZCwgdGNwX3BheWxvYWRfdGFwX2hlYWQsIHRjcF9wYXlsb2FkX3RhaWws IHRjcF9wYXlsb2FkX3NvY2tfdXNlZCwgdGNwX3BheWxvYWRfdGFwX3VzZWQ7DQorI2RlZmluZSBJ U19QT1cyKHkpICgoKHkpID4gMCkgJiYgISgoeSkgJiAoKHkpIC0gMSkpKQ0KK3N0YXRpY19hc3Nl cnQoQVJSQVlfU0laRSh0Y3BfcGF5bG9hZCkgPT0gVENQX0ZSQU1FU19NRU0sICJUQ1BfRlJBTUVT X01FTSBpcyBub3QgdGhlIHNpemUgb2YgdGNwX3BheWxvYWQgYW55bW9yZSIpOw0KK3N0YXRpY19h c3NlcnQoSVNfUE9XMihUQ1BfRlJBTUVTX01FTSksICJUQ1BfRlJBTUVTX01FTSBtdXN0IGJlIGEg cG93ZXIgb2YgdHdvIik7DQorDQorc3RhdGljIHNpemVfdCB0Y3BfcGF5bG9hZF9jbnRfdG9fZW5k KHNpemVfdCBoZWFkLCBzaXplX3QgdGFpbCkNCit7DQorCWFzc2VydChoZWFkICE9IHRhaWwpOw0K KwlzaXplX3QgZW5kID0gQVJSQVlfU0laRSh0Y3BfcGF5bG9hZCkgLSB0YWlsOw0KKwlzaXplX3Qg biA9IChoZWFkICsgZW5kKSAlIEFSUkFZX1NJWkUodGNwX3BheWxvYWQpOw0KKw0KKwlyZXR1cm4g TUlOKG4sIGVuZCk7DQorfQ0KKw0KKy8qIENvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBo YXMgYmVlbiB3cml0dGVuIGZyb20gc29jayB0byB0aGUNCisgKiBjdXJjdWxhciBidWZmZXIgYW5k IGNhbiBiZSBzZW50IHRvIHRhcC4NCisgKi8NCitzdGF0aWMgc2l6ZV90IHRjcF9wYXlsb2FkX3Rh cF9jbnQodm9pZCkNCit7DQorCXJldHVybiB0Y3BfcGF5bG9hZF9zb2NrX3VzZWQgLSB0Y3BfcGF5 bG9hZF90YXBfdXNlZDsNCit9DQogDQogc3RhdGljIHZvaWQgdGNwX3BheWxvYWRfc29ja19wcm9k dWNlKHNpemVfdCBuKQ0KIHsNCisJdGNwX3BheWxvYWRfc29ja19oZWFkID0gKHRjcF9wYXlsb2Fk X3NvY2tfaGVhZCArIG4pICUgQVJSQVlfU0laRSh0Y3BfcGF5bG9hZCk7DQogCXRjcF9wYXlsb2Fk X3NvY2tfdXNlZCArPSBuOw0KIH0NCiANCisvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0 aXZlIGl0ZW1zIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNvY2sgdG8gdGhlDQorICogY3Vy Y3VsYXIgYnVmZmVyIGFuZCBjYW4gYmUgc2VudCB0byB0YXAgd2l0aG91dCBoYXZpbmcgdG8gd3Jh cCBiYWNrIHRvIHRoZQ0KKyAqIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLg0KKyAqLw0KK3N0YXRp YyBzaXplX3QgdGNwX3BheWxvYWRfdGFwX2NudF90b19lbmQodm9pZCkNCit7DQorCWlmICh0Y3Bf cGF5bG9hZF9zb2NrX2hlYWQgPT0gdGNwX3BheWxvYWRfdGFwX2hlYWQpIHsNCisJCS8qIGVtcHR5 PyAqLw0KKwkJaWYgKHRjcF9wYXlsb2FkX3NvY2tfdXNlZCAtIHRjcF9wYXlsb2FkX3RhcF91c2Vk ID09IDApDQorCQkJcmV0dXJuIDA7DQorDQorCQkvKiBmdWxsICovDQorCQlyZXR1cm4gQVJSQVlf U0laRSh0Y3BfcGF5bG9hZCkgLSB0Y3BfcGF5bG9hZF90YXBfaGVhZDsNCisJfQ0KKw0KKwlyZXR1 cm4gdGNwX3BheWxvYWRfY250X3RvX2VuZCh0Y3BfcGF5bG9hZF9zb2NrX2hlYWQsDQorCQkJICAg ICAgICAgICAgICB0Y3BfcGF5bG9hZF90YXBfaGVhZCk7DQorfQ0KKw0KIHN0YXRpYyBzdHJ1Y3Qg aW92ZWMJdGNwX2wyX2lvdltUQ1BfRlJBTUVTX01FTV1bVENQX05VTV9JT1ZTXTsNCiANCiAvKioN CkBAIC0xMzcsMTQgKzE5MCwxMyBAQCBzdGF0aWMgdm9pZCB0Y3BfcmV2ZXJ0X3NlcShjb25zdCBz dHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICoqY29ubnMsDQogCX0NCiB9DQogDQot c3RhdGljIHZvaWQgdGNwX2J1Zl9mcmVlX29sZF90YXBfeG1pdChjb25zdCBzdHJ1Y3QgY3R4ICpj KQ0KK3N0YXRpYyB2b2lkIHRjcF9idWZfZnJlZV9vbGRfdGFwX3htaXQoY29uc3Qgc3RydWN0IGN0 eCAqYywgc2l6ZV90IHRhcmdldCkNCiB7DQotCXdoaWxlICh0Y3BfcGF5bG9hZF90YXBfdXNlZCkg ew0KLQkJdGFwX2ZyZWVfb2xkX3htaXQoYywgdGNwX3BheWxvYWRfdGFwX3VzZWQpOw0KKyAgICAg ICBzaXplX3QgbiA9IHRhcF9mcmVlX29sZF94bWl0KGMsIHRhcmdldCk7DQogDQotCQl0Y3BfcGF5 bG9hZF90YXBfdXNlZCA9IDA7DQotCQl0Y3BfcGF5bG9hZF9zb2NrX3VzZWQgPSAwOw0KLQl9DQor ICAgICAgIHRjcF9wYXlsb2FkX3RhaWwgPSAodGNwX3BheWxvYWRfdGFpbCArIG4pICYgKEFSUkFZ X1NJWkUodGNwX3BheWxvYWQpIC0gMSk7DQorICAgICAgIHRjcF9wYXlsb2FkX3RhcF91c2VkIC09 IG47DQorICAgICAgIHRjcF9wYXlsb2FkX3NvY2tfdXNlZCAtPSBuOw0KIH0NCiANCiAvKioNCkBA IC0xNTMsMTYgKzIwNSwzMyBAQCBzdGF0aWMgdm9pZCB0Y3BfYnVmX2ZyZWVfb2xkX3RhcF94bWl0 KGNvbnN0IHN0cnVjdCBjdHggKmMpDQogICovDQogdm9pZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25z dCBzdHJ1Y3QgY3R4ICpjKQ0KIHsNCi0Jc2l6ZV90IG07DQorCXNpemVfdCBtLCBuID0gdGNwX3Bh eWxvYWRfdGFwX2NudF90b19lbmQoKTsNCisJc3RydWN0IGlvdmVjICpoZWFkID0gJnRjcF9sMl9p b3ZbdGNwX3BheWxvYWRfdGFwX2hlYWRdWzBdOw0KIA0KLQltID0gdGFwX3NlbmRfZnJhbWVzKGMs ICZ0Y3BfbDJfaW92WzBdWzBdLCBUQ1BfTlVNX0lPVlMsDQotCQkJICAgIHRjcF9wYXlsb2FkX3Nv Y2tfdXNlZCwgdHJ1ZSk7DQotCWlmIChtICE9IHRjcF9wYXlsb2FkX3NvY2tfdXNlZCkgew0KLQkJ dGNwX3JldmVydF9zZXEoYywgJnRjcF9mcmFtZV9jb25uc1ttXSwgJnRjcF9sMl9pb3ZbbV0sDQot CQkJICAgICAgIHRjcF9wYXlsb2FkX3NvY2tfdXNlZCAtIG0pOw0KLQl9DQorCXRjcF9idWZfZnJl ZV9vbGRfdGFwX3htaXQoYywgKHNpemVfdCktMSk7DQorCW0gPSB0YXBfc2VuZF9mcmFtZXMoYywg aGVhZCwgVENQX05VTV9JT1ZTLCBuLCB0cnVlKTsNCiAJdGNwX3BheWxvYWRfdGFwX3VzZWQgKz0g bTsNCi0JdGNwX2J1Zl9mcmVlX29sZF90YXBfeG1pdChjKTsNCisJdGNwX3BheWxvYWRfdGFwX2hl YWQgPSAodGNwX3BheWxvYWRfdGFwX2hlYWQgKyBtKSAlDQorCQkgICAgICAgICAgICAgICBBUlJB WV9TSVpFKHRjcF9wYXlsb2FkKTsNCisNCisJaWYgKG0gIT0gbikgew0KKwkJbiA9IHRjcF9wYXls b2FkX3RhcF9jbnRfdG9fZW5kKCk7DQorDQorCQl0Y3BfcmV2ZXJ0X3NlcShjLCAmdGNwX2ZyYW1l X2Nvbm5zW3RjcF9wYXlsb2FkX3RhcF9oZWFkXSwNCisJCQkgICAgICAgJnRjcF9sMl9pb3ZbdGNw X3BheWxvYWRfdGFwX2hlYWRdLCBuKTsNCisJCS8qDQorCQkgKiBjaXJjdWxhciBidWZmZXIgd3Jh cCBjYXNlLg0KKwkJICogVE9ETzogTWF5YmUgaXQncyBiZXR0ZXIgdG8gYWRhcHQgdGNwX3JldmVy dF9zZXEuDQorCQkgKi8NCisJCXRjcF9yZXZlcnRfc2VxKGMsICZ0Y3BfZnJhbWVfY29ubnNbMF0s ICZ0Y3BfbDJfaW92WzBdLA0KKwkJCSAgICAgICB0Y3BfcGF5bG9hZF90YXBfY250KCkgLSBuKTsN CisNCisJCXRjcF9wYXlsb2FkX3NvY2tfaGVhZCA9IHRjcF9wYXlsb2FkX3RhcF9oZWFkOw0KKwkJ dGNwX3BheWxvYWRfc29ja191c2VkID0gdGNwX3BheWxvYWRfdGFwX3VzZWQ7DQorCX0gZWxzZSBp ZiAodGNwX3BheWxvYWRfdGFwX2NudF90b19lbmQoKSkgew0KKwkJLyogY2lyY3VsYXIgYnVmZmVy IHdyYXAgY2FzZSAqLw0KKwkJdGNwX3BheWxvYWRfZmx1c2goYyk7DQorCX0NCiB9DQogDQogLyoq DQpAQCAtMjA5LDE0ICsyNzgsMTUgQEAgaW50IHRjcF9idWZfc2VuZF9mbGFnKGNvbnN0IHN0cnVj dCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIGludCBmbGFncykNCiAJc2l6ZV90 IG9wdGxlbjsNCiAJc2l6ZV90IGw0bGVuOw0KIAl1aW50MzJfdCBzZXE7DQorCXVuc2lnbmVkIGlu dCBpID0gdGNwX3BheWxvYWRfc29ja19oZWFkOw0KIAlpbnQgcmV0Ow0KIA0KLQlpb3YgPSB0Y3Bf bDJfaW92W3RjcF9wYXlsb2FkX3NvY2tfdXNlZF07DQorCWlvdiA9IHRjcF9sMl9pb3ZbaV07DQog CWlmIChDT05OX1Y0KGNvbm4pKSB7DQotCQlpb3ZbVENQX0lPVl9JUF0gPSBJT1ZfT0ZfTFZBTFVF KHRjcDRfcGF5bG9hZF9pcFt0Y3BfcGF5bG9hZF9zb2NrX3VzZWRdKTsNCisJCWlvdltUQ1BfSU9W X0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNF9wYXlsb2FkX2lwW2ldKTsNCiAJCWlvdltUQ1BfSU9W X0VUSF0uaW92X2Jhc2UgPSAmdGNwNF9ldGhfc3JjOw0KIAl9IGVsc2Ugew0KLQkJaW92W1RDUF9J T1ZfSVBdID0gSU9WX09GX0xWQUxVRSh0Y3A2X3BheWxvYWRfaXBbdGNwX3BheWxvYWRfc29ja191 c2VkXSk7DQorCQlpb3ZbVENQX0lPVl9JUF0gPSBJT1ZfT0ZfTFZBTFVFKHRjcDZfcGF5bG9hZF9p cFtpXSk7DQogCQlpb3ZbVENQX0lPVl9FVEhdLmlvdl9iYXNlID0gJnRjcDZfZXRoX3NyYzsNCiAJ fQ0KIA0KQEAgLTIyOCwxMyArMjk4LDE1IEBAIGludCB0Y3BfYnVmX3NlbmRfZmxhZyhjb25zdCBz dHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLCBpbnQgZmxhZ3MpDQogCQly ZXR1cm4gcmV0Ow0KIA0KIAl0Y3BfcGF5bG9hZF9zb2NrX3Byb2R1Y2UoMSk7DQorCWkgPSB0Y3Bf cGF5bG9hZF9zb2NrX2hlYWQ7DQogCWw0bGVuID0gb3B0bGVuICsgc2l6ZW9mKHN0cnVjdCB0Y3Bo ZHIpOw0KIAlpb3ZbVENQX0lPVl9QQVlMT0FEXS5pb3ZfbGVuID0gbDRsZW47DQogCXRjcF9sMl9i dWZfZmlsbF9oZWFkZXJzKGNvbm4sIGlvdiwgTlVMTCwgc2VxLCBmYWxzZSk7DQogDQogCWlmIChm bGFncyAmIERVUF9BQ0spIHsNCi0JCXN0cnVjdCBpb3ZlYyAqZHVwX2lvdiA9IHRjcF9sMl9pb3Zb dGNwX3BheWxvYWRfc29ja191c2VkXTsNCisJCXN0cnVjdCBpb3ZlYyAqZHVwX2lvdiA9IHRjcF9s Ml9pb3ZbaV07DQogCQl0Y3BfcGF5bG9hZF9zb2NrX3Byb2R1Y2UoMSk7DQorCQlpID0gdGNwX3Bh eWxvYWRfc29ja19oZWFkOw0KIA0KIAkJbWVtY3B5KGR1cF9pb3ZbVENQX0lPVl9UQVBdLmlvdl9i YXNlLCBpb3ZbVENQX0lPVl9UQVBdLmlvdl9iYXNlLA0KIAkJICAgICAgIGlvdltUQ1BfSU9WX1RB UF0uaW92X2xlbik7DQpAQCAtMjQ2LDcgKzMxOCwxMCBAQCBpbnQgdGNwX2J1Zl9zZW5kX2ZsYWco Y29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwgaW50IGZsYWdz KQ0KIAl9DQogDQogCWlmICh0Y3BfcGF5bG9hZF9zb2NrX3VzZWQgPiBUQ1BfRlJBTUVTX01FTSAt IDIpIHsNCisJCXRjcF9idWZfZnJlZV9vbGRfdGFwX3htaXQoYywgMik7DQogCQl0Y3BfcGF5bG9h ZF9mbHVzaChjKTsNCisJCS8qIFRPRE8gaG93IHRvIGZpeCB0aGlzPyBvcmlnaW5hbCBjb2RlIGRp ZG4ndCBjaGVjaCBmb3Igc3VjY2VzcyBlaXRoZXIgKi8NCisJCWFzc2VydCh0Y3BfcGF5bG9hZF9z b2NrX3VzZWQgPD0gVENQX0ZSQU1FU19NRU0gLSAyKTsNCiAJfQ0KIA0KIAlyZXR1cm4gMDsNCkBA IC0yNjksMTYgKzM0NCwxNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZGF0YV90b190YXAoY29uc3Qgc3Ry dWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCiAJc3RydWN0IGlvdmVjICpp b3Y7DQogDQogCWNvbm4tPnNlcV90b190YXAgPSBzZXEgKyBkbGVuOw0KLQl0Y3BfZnJhbWVfY29u bnNbdGNwX3BheWxvYWRfc29ja191c2VkXSA9IGNvbm47DQotCWlvdiA9IHRjcF9sMl9pb3ZbdGNw X3BheWxvYWRfc29ja191c2VkXTsNCisJdGNwX2ZyYW1lX2Nvbm5zW3RjcF9wYXlsb2FkX3NvY2tf aGVhZF0gPSBjb25uOw0KKwlpb3YgPSB0Y3BfbDJfaW92W3RjcF9wYXlsb2FkX3NvY2tfaGVhZF07 DQogCWlmIChDT05OX1Y0KGNvbm4pKSB7DQogCQlpZiAobm9fY3N1bSkgew0KLQkJCXN0cnVjdCBp b3ZlYyAqaW92X3ByZXYgPSB0Y3BfbDJfaW92W3RjcF9wYXlsb2FkX3NvY2tfdXNlZCAtIDFdOw0K KwkJCXVuc2lnbmVkIHByZXYgPSAodGNwX3BheWxvYWRfc29ja19oZWFkIC0gMSkgJSBUQ1BfRlJB TUVTX01FTTsNCisJCQlzdHJ1Y3QgaW92ZWMgKmlvdl9wcmV2ID0gdGNwX2wyX2lvdltwcmV2XTsN CiAJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlvdl9wcmV2W1RDUF9JT1ZfSVBdLmlvdl9iYXNlOw0K IA0KIAkJCWNoZWNrID0gJmlwaC0+Y2hlY2s7DQogCQl9DQotCQlpb3ZbVENQX0lPVl9JUF0gPSBJ T1ZfT0ZfTFZBTFVFKHRjcDRfcGF5bG9hZF9pcFt0Y3BfcGF5bG9hZF9zb2NrX3VzZWRdKTsNCisJ CWlvdltUQ1BfSU9WX0lQXSA9IElPVl9PRl9MVkFMVUUodGNwNF9wYXlsb2FkX2lwW3RjcF9wYXls b2FkX3NvY2tfaGVhZF0pOw0KIAkJaW92W1RDUF9JT1ZfRVRIXS5pb3ZfYmFzZSA9ICZ0Y3A0X2V0 aF9zcmM7DQogCX0gZWxzZSBpZiAoQ09OTl9WNihjb25uKSkgew0KIAkJaW92W1RDUF9JT1ZfSVBd ID0gSU9WX09GX0xWQUxVRSh0Y3A2X3BheWxvYWRfaXBbdGNwX3BheWxvYWRfc29ja191c2VkXSk7 DQpAQCAtMjk0LDggKzM3MCwxMSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGF0YV90b190YXAoY29uc3Qg c3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCiAJdGNwX2wyX2J1Zl9m aWxsX2hlYWRlcnMoY29ubiwgaW92LCBjaGVjaywgc2VxLCBmYWxzZSk7DQogCXRjcF9wYXlsb2Fk X3NvY2tfcHJvZHVjZSgxKTsNCiAJaWYgKHRjcF9wYXlsb2FkX3NvY2tfdXNlZCA+IFRDUF9GUkFN RVNfTUVNIC0gMSkgew0KKwkJdGNwX2J1Zl9mcmVlX29sZF90YXBfeG1pdChjLCAxKTsNCiAJCXRj cF9wYXlsb2FkX2ZsdXNoKGMpOw0KKwkJYXNzZXJ0KHRjcF9wYXlsb2FkX3NvY2tfdXNlZCA8PSBU Q1BfRlJBTUVTX01FTSAtIDEpOw0KIAl9DQorDQogfQ0KIA0KIC8qKg0KQEAgLTM2MiwxMSArNDQx LDE0IEBAIGludCB0Y3BfYnVmX2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4pDQogCX0NCiANCiAJaWYgKHRjcF9wYXlsb2FkX3NvY2tf dXNlZCArIGZpbGxfYnVmcyA+IFRDUF9GUkFNRVNfTUVNKSB7DQorCQl0Y3BfYnVmX2ZyZWVfb2xk X3RhcF94bWl0KGMsIGZpbGxfYnVmcyk7DQogCQl0Y3BfcGF5bG9hZF9mbHVzaChjKTsNCisJCS8q IFRPRE8gaG93IHRvIHJlcG9ydCB0aGlzIHRvIHVwcGVyIGxheWVycz8gKi8NCisJCWFzc2VydCh0 Y3BfcGF5bG9hZF9zb2NrX3VzZWQgKyBmaWxsX2J1ZnMgPD0gVENQX0ZSQU1FU19NRU0pOw0KIAl9 DQogDQogCWZvciAoaSA9IDAsIGlvdiA9IGlvdl9zb2NrICsgMTsgaSA8IGZpbGxfYnVmczsgaSsr LCBpb3YrKykgew0KLQkJaW92LT5pb3ZfYmFzZSA9ICZ0Y3BfcGF5bG9hZFt0Y3BfcGF5bG9hZF9z b2NrX3VzZWQgKyBpXS5kYXRhOw0KKwkJaW92LT5pb3ZfYmFzZSA9ICZ0Y3BfcGF5bG9hZFsodGNw X3BheWxvYWRfc29ja19oZWFkICsgaSkgJSBUQ1BfRlJBTUVTX01FTV0uZGF0YTsNCiAJCWlvdi0+ aW92X2xlbiA9IG1zczsNCiAJfQ0KIAlpZiAoaW92X3JlbSkNCi0tIA0KMi41MC4wDQoNCg==