From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wang Jian Date: Mon, 04 Apr 2005 07:21:17 +0000 Subject: [LARTC] new perflow rate control queue Message-Id: <20050404152117.6d90635d.lark@linux.net.cn> MIME-Version: 1 Content-Type: multipart/mixed; boundary="Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac" List-Id: To: lartc@vger.kernel.org This is a multi-part message in MIME format. --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, One of my customer needs per flow rate control, so I write one. The code I post here is not finished, but it seems to work as expected. The kernel patch is agains kernel 2.6.11, the iproute2 patch is against iproute2-2.6.11-050314. I write the code in a hurry to meet deadline. There are many other things to do ahead for me. The code is written in 2 days (including read other queue's code) and tested for a while to find obvious mistake. Don't be suprised when you find many many bugs. The test scenario is like this www server <- [ eth0 eth1 ] -> www clients The attached t.sh is used to generate test rules. Clients download a big ISO file from www server, so flows' rate can be estimated by view progress. However I use wget to test the speed, so the speed is accumulated, not current. The problems I know: 1. The rtnetlink related code is quick hack. I am not familiar with rtnetlink, so I look at other queue's code and use the simplest one. 2. perflow queue has no stats code. It will be added later. 3. I don't know what is the dump() method 's purpose, so I didn't write dump() method. I will add it later when I know what it is for and how to write rtnetlink code. Any feedback is welcome. And test it if you can :) PS: the code is licensed under GPL. If it is acceptable by upstream, it will be submitted. -- lark --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac Content-Type: application/octet-stream; name="iproute2-2.6.11-050314-perflow.diff" Content-Disposition: attachment; filename="iproute2-2.6.11-050314-perflow.diff" Content-Transfer-Encoding: base64 SW5kZXg6IGlwcm91dGUyLTIuNi4xMS13L2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaXByb3V0ZTItMi42LjExLXcvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAkocmV2 aXNpb24gMSkKKysrIGlwcm91dGUyLTIuNi4xMS13L2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgJ KHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsyNzIsMjggQEAKIAlfX3UzMiBjdG9rZW5zOwogfTsK IAorCisvKiBQRVJGTE9XIHNlY3Rpb24gKi8KKworI2RlZmluZSBUQ19QRVJGTE9XX0RFRkFVTFRM SU1JVAkxMDI0CisKK3N0cnVjdCB0Y19wZXJmbG93X3FvcHQKK3sKKwlzdHJ1Y3QgdGNfcmF0ZXNw ZWMgCXJhdGU7CisJc3RydWN0IHRjX3JhdGVzcGVjIAljZWlsOworCV9fdTMyICBsaW1pdDsKKwlf X3UzMiAgcWxlbjsKK307CitlbnVtCit7CisJVENBX1BFUkZMT1dfVU5TUEVDLAorCVRDQV9QRVJG TE9XX1BBUk1TLAorCV9fVENBX1BFUkZMT1dfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfUEVSRkxP V19NQVgJKF9fVENBX1BFUkZMT1dfTUFYIC0gMSkKKworCiAvKiBIRlNDIHNlY3Rpb24gKi8KIAog c3RydWN0IHRjX2hmc2NfcW9wdApJbmRleDogaXByb3V0ZTItMi42LjExLXcvdGMvcV9wZXJmbG93 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gaXByb3V0ZTItMi42LjExLXcvdGMvcV9wZXJmbG93LmMJKHJldmlz aW9uIDApCisrKyBpcHJvdXRlMi0yLjYuMTEtdy90Yy9xX3BlcmZsb3cuYwkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBxX3BlcmZsb3cuYwkJUEVSRkxPVy4KKyAqCisgKgkJ VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBdXRob3JzOglXYW5nIEppYW4gPGxh cmtAbGludXgubmV0LmNuPiwgMjAwNQorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXNsb2cu aD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRl IDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3RyaW5n Lmg+CisKKyNpbmNsdWRlICJ1dGlscy5oIgorI2luY2x1ZGUgInRjX3V0aWwuaCIKKworc3RhdGlj IHZvaWQgZXhwbGFpbih2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorIlVzYWdlOiAuLi4gcGVy ZmxvdyByYXRlIFJBVEUgWyBjZWlsIENFSUwgXSBbIGxpbWl0IExJTUlUIF0gWyBxbGVuIFFMRU4g XVxuIgorIlxuIgorInJhdGUgICAgcmF0ZSBhbGxvY2F0ZWQgdG8gZWFjaCBmbG93IChmbG93IGNh biBzdGlsbCBib3Jyb3cpXG4iCisiY2VpbCAgICB1cHBlciBsaW1pdCBmb3IgZWFjaCBmbG93IChm bG93IGNhbiBub3QgYm9ycm93KVxuIgorImxpbWl0ICAgbWF4aW11bSBjb25jdXJyZW50IGZsb3dz XG4iCisicWxlbiAgICBtYXhpbXVtIHF1ZXVlIGxlbmd0aFxuIgorCSk7Cit9CisKKyNkZWZpbmUg dXNhZ2UoKSByZXR1cm4oLTEpCisKK3N0YXRpYyBpbnQgcGVyZmxvd19wYXJzZV9vcHQoc3RydWN0 IHFkaXNjX3V0aWwgKnF1LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBubG1zZ2hkciAq bikKK3sKKwlzdHJ1Y3QgdGNfcGVyZmxvd19xb3B0IG9wdDsKKwlzdHJ1Y3QgcnRhdHRyICp0YWls OworCWludCBvayA9IDA7CisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCisJd2hp bGUgKGFyZ2MgPiAwKSB7CisJCWlmIChzdHJjbXAoKmFyZ3YsICJyYXRlIikgPT0gMCkgeworCQkJ TkVYVF9BUkcoKTsKKwkJCWlmIChvcHQucmF0ZS5yYXRlKSB7CisJCQkJZnByaW50ZihzdGRlcnIs ICJEb3VibGUgXCJjZWlsXCIgc3BlY1xuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJaWYg KGdldF9yYXRlKCZvcHQucmF0ZS5yYXRlLCAqYXJndikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwg IklsbGVnYWwgXCJyYXRlXCJcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCW9rKys7CisJ CX0gZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiY2VpbCIpID09IDApIHsKKwkJCU5FWFRfQVJHKCk7 CisJCQlpZiAob3B0LmNlaWwucmF0ZSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiRG91YmxlIFwi Y2VpbFwiIHNwZWNcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWlmIChnZXRfcmF0ZSgm b3B0LmNlaWwucmF0ZSwgKmFyZ3YpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbGxlZ2FsIFwi Y2VpbFwiXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlvaysrOworCQl9IGVsc2UgaWYg KHN0cmNtcCgqYXJndiwgImxpbWl0IikgPT0gMCkgeworCQkJTkVYVF9BUkcoKTsKKwkJCWlmIChn ZXRfc2l6ZSgmb3B0LmxpbWl0LCAqYXJndikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklsbGVn YWwgXCJsaW1pdFwiXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlvaysrOworCQl9IGVs c2UgaWYgKHN0cmNtcCgqYXJndiwgInFsZW4iKSA9PSAwKSB7CisJCQlORVhUX0FSRygpOworCQkJ aWYgKGdldF9zaXplKCZvcHQucWxlbiwgKmFyZ3YpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJ bGxlZ2FsIFwibGltaXRcIlxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJb2srKzsKKwkJ fSBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICJoZWxwIikgPT0gMCkgeworCQkJZXhwbGFpbigpOwor CQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJXaGF0IGlzIFwi JXNcIj9cbiIsICphcmd2KTsKKwkJCWV4cGxhaW4oKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlh cmdjLS07IGFyZ3YrKzsKKwl9CisKKwlpZiAoIW9rKQorCQlyZXR1cm4gMDsKKworCWlmIChvcHQu cmF0ZS5yYXRlID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJcInJhdGVcIiBpcyByZXF1aXJl ZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKG9wdC5jZWlsLnJhdGUgPT0gMCkKKwkJ b3B0LmNlaWwgPSBvcHQucmF0ZTsKKworCWlmIChvcHQuY2VpbC5yYXRlIDwgb3B0LnJhdGUucmF0 ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlwiY2VpbFwiIG11c3QgYmUgPj0gXCJyYXRlXCIuXG4i KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvcHQubGltaXQgPT0gMCkKKwkJb3B0LmxpbWl0 ID0gVENfUEVSRkxPV19ERUZBVUxUTElNSVQ7CisKKwlpZiAob3B0LnFsZW4gPiAwICYmIG9wdC5x bGVuIDwgNSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlwicWxlblwiIG11c3QgYmUgPj0gNS5cbiIp OworCQlyZXR1cm4gLTE7CisJfQorCisJdGFpbCA9IE5MTVNHX1RBSUwobik7CisJLy9hZGRhdHRy X2wobiwgMTAyNCwgVENBX09QVElPTlMsIE5VTEwsIDApOworCS8vYWRkYXR0cl9sKG4sIDEwMjQs IFRDQV9QRVJGTE9XX1BBUk1TLCAmb3B0LCBzaXplb2Yob3B0KSk7CisJYWRkYXR0cl9sKG4sIDEw MjQsIFRDQV9PUFRJT05TLCAmb3B0LCBzaXplb2Yob3B0KSk7CisJdGFpbC0+cnRhX2xlbiA9ICh2 b2lkICopIE5MTVNHX1RBSUwobikgLSAodm9pZCAqKSB0YWlsOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcGVyZmxvd19wcmludF9vcHQoc3RydWN0IHFkaXNjX3V0aWwgKnF1LCBGSUxF ICpmLCBzdHJ1Y3QgcnRhdHRyICpvcHQpCit7CisJc3RydWN0IHRjX3BlcmZsb3dfcW9wdCAqcW9w dDsKKworCWlmIChvcHQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoUlRBX1BBWUxPQUQo b3B0KSA8IHNpemVvZigqcW9wdCkpCisJCXJldHVybiAtMTsKKworCXFvcHQgPSBSVEFfREFUQShv cHQpOworCisJU1BSSU5UX0JVRihiMSk7CisJZnByaW50ZihmLCAicmF0ZSAlcyAiLCBzcHJpbnRf cmF0ZShxb3B0LT5yYXRlLnJhdGUsIGIxKSk7CisJZnByaW50ZihmLCAiY2VpbCAlcyAiLCBzcHJp bnRfcmF0ZShxb3B0LT5jZWlsLnJhdGUsIGIxKSk7CisJZnByaW50ZihmLCAibGltaXQgJXMgIiwg c3ByaW50X3NpemUocW9wdC0+cmF0ZS5yYXRlLCBiMSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 cnVjdCBxZGlzY191dGlsIHBlcmZsb3dfcWRpc2NfdXRpbCA9IHsKKwkuaWQJCT0gInBlcmZsb3ci LAorCS5wYXJzZV9xb3B0CT0gcGVyZmxvd19wYXJzZV9vcHQsCisJLnByaW50X3FvcHQJPSBwZXJm bG93X3ByaW50X29wdCwKK307CkluZGV4OiBpcHJvdXRlMi0yLjYuMTEtdy90Yy9NYWtlZmlsZQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBpcHJvdXRlMi0yLjYuMTEtdy90Yy9NYWtlZmlsZQkocmV2aXNpb24gMSkK KysrIGlwcm91dGUyLTIuNi4xMS13L3RjL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC03LDYg KzcsNyBAQAogVENNT0RVTEVTICs9IHFfZmlmby5vCiBUQ01PRFVMRVMgKz0gcV9zZnEubwogVENN T0RVTEVTICs9IHFfcmVkLm8KK1RDTU9EVUxFUyArPSBxX3BlcmZsb3cubwogVENNT0RVTEVTICs9 IHFfcHJpby5vCiBUQ01PRFVMRVMgKz0gcV90YmYubwogVENNT0RVTEVTICs9IHFfY2JxLm8K --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac Content-Type: application/octet-stream; name="linux-2.6.11-perflow.diff" Content-Disposition: attachment; filename="linux-2.6.11-perflow.diff" Content-Transfer-Encoding: base64 SW5kZXg6IGxpbnV4LTIuNi4xMS13L2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gbGludXgtMi42LjExLXcvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAkocmV2aXNpb24g MSkKKysrIGxpbnV4LTIuNi4xMS13L2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgJKHdvcmtpbmcg Y29weSkKQEAgLTI3Miw2ICsyNzIsMjggQEAKIAlfX3UzMiBjdG9rZW5zOwogfTsKIAorCisvKiBQ RVJGTE9XIHNlY3Rpb24gKi8KKworI2RlZmluZSBUQ19QRVJGTE9XX0RFRkFVTFRMSU1JVAkxMDI0 CisKK3N0cnVjdCB0Y19wZXJmbG93X3FvcHQKK3sKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMgCXJhdGU7 CisJc3RydWN0IHRjX3JhdGVzcGVjIAljZWlsOworCV9fdTMyICBsaW1pdDsKKwlfX3UzMiAgcWxl bjsKK307CitlbnVtCit7CisJVENBX1BFUkZMT1dfVU5TUEVDLAorCVRDQV9QRVJGTE9XX1BBUk1T LAorCV9fVENBX1BFUkZMT1dfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfUEVSRkxPV19NQVgJKF9f VENBX1BFUkZMT1dfTUFYIC0gMSkKKworCiAvKiBIRlNDIHNlY3Rpb24gKi8KIAogc3RydWN0IHRj X2hmc2NfcW9wdApJbmRleDogbGludXgtMi42LjExLXcvbmV0L3NjaGVkL0tjb25maWcKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gbGludXgtMi42LjExLXcvbmV0L3NjaGVkL0tjb25maWcJKHJldmlzaW9uIDEpCisr KyBsaW51eC0yLjYuMTEtdy9uZXQvc2NoZWQvS2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMTky LDYgKzE5MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ncmVkLgogCitjb25m aWcgTkVUX1NDSF9QRVJGTE9XCisJdHJpc3RhdGUgIlBFUkZMT1cgcXVldWUiCisJZGVwZW5kcyBv biBORVRfU0NIRUQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVz ZSBwZXIgZmxvdyByYXRlIGNvbnRyb2wuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEg bW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hf cGVyZmxvdy4KKwogY29uZmlnIE5FVF9TQ0hfRFNNQVJLCiAJdHJpc3RhdGUgIkRpZmZzZXJ2IGZp ZWxkIG1hcmtlciIKIAlkZXBlbmRzIG9uIE5FVF9TQ0hFRApJbmRleDogbGludXgtMi42LjExLXcv bmV0L3NjaGVkL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi4xMS13L25ldC9zY2hl ZC9NYWtlZmlsZQkocmV2aXNpb24gMSkKKysrIGxpbnV4LTIuNi4xMS13L25ldC9zY2hlZC9NYWtl ZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX05FVF9T Q0hfSEZTQykJKz0gc2NoX2hmc2Mubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfUkVEKQkrPSBzY2hf cmVkLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0dSRUQpCSs9IHNjaF9ncmVkLm8KK29iai0kKENP TkZJR19ORVRfU0NIX1BFUkZMT1cpCSs9IHNjaF9wZXJmbG93Lm8KIG9iai0kKENPTkZJR19ORVRf U0NIX0lOR1JFU1MpCSs9IHNjaF9pbmdyZXNzLm8gCiBvYmotJChDT05GSUdfTkVUX1NDSF9EU01B UkspCSs9IHNjaF9kc21hcmsubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfU0ZRKQkrPSBzY2hfc2Zx Lm8KSW5kZXg6IGxpbnV4LTIuNi4xMS13L25ldC9zY2hlZC9zY2hfcGVyZmxvdy5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGxpbnV4LTIuNi4xMS13L25ldC9zY2hlZC9zY2hfcGVyZmxvdy5jCShyZXZpc2lvbiAw KQorKysgbGludXgtMi42LjExLXcvbmV0L3NjaGVkL3NjaF9wZXJmbG93LmMJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogbmV0L3NjaGVkL3NjaF9wZXJmbG93LmMJUGVyIGZs b3cgcmF0ZSBjb250cm9sIHF1ZXVlLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogQXV0aG9yczoJV2FuZyBKaWFuIDxsYXJrQGxpbnV4Lm5ldC5jbj4sIDIwMDUKKyAqCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNs dWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUg PGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgv c29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8u aD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhl ci5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlm aWVyLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5o PgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3Br dF9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorI2luY2x1ZGUgPG5ldC9kc2Zp ZWxkLmg+CisKKy8qIFBlciBmbG93IHJhdGUgY29udHJvbCBhbGdvcml0aG0KKworRGVzY3JpcHRp b24KKy0tLS0tLS0tLS0tCisKKwlXaGVuIGEgbmV3IHBhY2tldCBhcnJpdmVzLCB3ZSBsb29rdXAg aW4gdGhlIHRhYmxlIHRvIHNlZSBpZiBpdAorCWJlbG9uZ3MgdG8gYSBmbG93IGJlaW5nIHRyYWNl ZC4gSWYgbm90LCB3ZSBjcmVhdGUgbmV3IGVudHJ5IGZvciBpdC4KKworCUZvciBhIHBhY2tldCBi ZWxvbmdzIHRvIGEgZmxvdyBiZWluZyB0cmFjZWQsIHdlIHNlZSBpZiBpdCBoYXMKKwlhdmFpbGFi bGUgdG9rZW4gdG8gc2VuZCBpdCBvdXQuCisKKwlUaGUgJ3JhdGUnIGFuZCAnY2VpbCcgaGF2ZSBz YW1lIG1lYW5pbmcgb2YgSFRCIHFkaXNjLiBUaGUgJ2xpbWl0JworCXBhcmFtZXRlciBkZWZpbmVk IGhvdyBtYW55IGZsb3dzIHdlIHdpbGwgdHJhY2UsIHdoaWNoIGRlZmF1bHRzIHRvCisJMTAyNC4K KworCUFueSBmbG93IGVudHJ5IHdpdGhvdXQgdHJhZmZpYyBpbiBMSUZFVElNRSBzZWNvbmRzIHdp bGwgYmUgd2lwZWQKKwl0byBmcmVlIHNsb3QuCisKKworQWxnb3JpdGhtCistLS0tLS0tLS0KKwor CVRoZSBhbGdvcml0aG0gaXMgc2ltcGxlIGFuZCBuYWl2ZS4gV2UgaGF2ZSBhIHRva2VuIGJ1Y2tl dCwgd2hpY2gKKwlnZW5lcmF0ZSBncmF0ZS8xMCAoPSByYXRlICogbGltaXQgLyAxMCkgdG9rZW4g aW4gMS8xMCBzZWNvbmRzLgorCisJQSBmbG93IGNhbiBhbHdheXMgc2VuZCB3aGVuIGl0IGlzIHVu ZGVyIHJhdGUuIFdoZW4gYSBmbG93IGlzIG92ZXIKKwlyYXRlIGJ1dCB1bmRlciBjZWlsLCBldmVy eSB0aW1lIGl0IGJvcnJvd3MsIGl0IGlzIHB1dCBpbnRvIGJvcnJvdworCWxpc3QsIHNvIGl0IG1h eSByZWNlaXZlIHBlbmFsdHkuCisKKwlXaGVuIGEgdW5kZXItcmF0ZSBmbG93IHNlbmRzIGJ1dCB0 b2tlbiBpcyBzaG9ydCwgcGVuYWx0eSBpcyBhZGRlZAorCXRvIG9uZSBvZiBmbG93cyBpbiBib3Jy b3cgbGlzdCwgYW5kIHRoaXMgcHVuaXNoZWQgZmxvdyBpcworCXJlbW92ZWQgZnJvbSBib3Jyb3cg bGlzdC4KKworCVdoZW4gYSBmbG93IGNhcnJ5aW5nIHBlbmFsdHkgaGFzIHBhY2tldCwgdGhlIHBl bmFsdHkgaXMKKwlhZGRlZCB0byB1c2VkIHRva2VuLiBUaGlzIG1lYW5zLCB0aGlzIGZsb3cgY2Fu IGJvcnJvdyBsZXNzIHRoYW4KKwlsYXN0IHRpbWUgKGlmIGluIGEgbmV3IHRpbWUgc2xvdCksIG9y IGNhbiBib3Jyb3cgbGVzcyAKKwkoY2VpbCAtIHJhdGUgLSBwZW5hbHR5KS4KKworCVRoZXJlIGFy ZSBvdGhlciBydWxlcyB0aGF0IGhhbmRsZSBmYWlybmVzcyBhbmQgbG93IHJhdGUgc2l0dWF0aW9u LgorCVNlZSBjb2RlIGZvciBkZXRhaWxzLgorCisJTk9URTogdGhlIGltcGxlbWVudGF0aW9uIG9m IGFsZ29yaXRobSBpcyBub3QgdGltZXIgZHJpdmVuLCBidXQKKwlwYWNrZXQgZHJpdmVuLgorCisJ VGhlIGlkZWFzIGJlaGluZCB0aGlzIGFsZ29yaXRobSBhcmUKKworCTEuIFdlIGFzc3VtZSB0aGF0 IHBlcmZsb3cgcWRpc2MgaGFzIHJhdGUgKiBsaW1pdCBndWFyYW50ZWVkLgorCTIuIFdlIGNhbid0 IGFmZmVjdCBwYXN0LiBXZSBjYW4gb25seSBhZmZlY3QgZnV0dXJlLgorCTMuIElmIGEgZmxvdydz IGJvcnJvd2luZyBsZWFkcyB0byBvdmVybGltaXQsIHdlIGxldCB0aGlzIGZsb3cKKwkgICBib3Jy b3cgbGVzcyBpbiBmdXR1cmUuCisJNC4gV2l0aCBhIHJvdW5kIHJvYmluIHB1bmlzaG1lbnQgc3R5 bGUsIGEgZmxvdyBib3Jyb3dzIG1vcmUgdGltZXMsCisJICAgaXQgc3RheXMgaW4gYm9ycm93IGxp c3QgbW9yZSB0aW1lcywgYW5kIHNvIHJlY2VpdmVzIG1vcmUgcGVuYWx0eS4KKwkgICAoQnV0IHdl IHNob3VsZCBjb25zaWRlciBtb3JlIGFib3V0IHRoaXMsIEkgdGhpbmsgdGhlIGZhaXJuZXNzCisJ ICAgc2hvdWxkIGJlIGltcHJvdmVkIGJ5IHNvcnQgYm9ycm93IGxpc3QuKQorCisKK1NlY3VyaXR5 IENvbnNpZGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUl0J3MgZGFuZ2Vyb3Vz IHRvIGNyZWF0ZSBuZXcgZW50cnkgZm9yIGFueSBuZXcgcGFja2V0cyBub3QgYmVsb25ncworCXRv IGEgZmxvdyBiZWluZyB0cmFjZWQuIEZvciBleGFtcGxlLCBzeW4gZmxvb2QgYXR0YWNrIG9uIGEg c2luZ2xlCisJcG9ydCBtYXkgY2F1c2UgdGhvdXNhbmRzIG9mIGVudHJpZXMgY3JlYXRlZC4gVGhl ICdsaW1pdCcgcGFyYW1ldGVyCisJaXMgdXNlZCB0byBzZXQgbGltaXQgb24gbWF4aW11bSBlbnRy aWVzIHdlIHdpbGwgY3JlYXRlLgorCisJQnV0IGV2ZW4gd2l0aCAnbGltaXQnLCBwb3J0IHNjYW4g Y2FuIGZpbGwgdGhlIHNsb3RzIGFuZCBtYWtlIHZhbGlkCisJbmV3IGZsb3cgaGFzIG5vIHNsb3Qg YXZhaWxhYmxlIGFuZCBub3QgYmUgdHJhY2VkLgorCisJT25lIG9mIHNvbHV0aW9uIGlzIHRvIHVz ZSBuZXRmaWx0ZXIgTUFSSyBmb3IgY2xhc3NpZmljYXRpb24gCisJKGEuay5hLiBjbHNfZncuYyku IE9ubHkgZXN0YWJsaXNoZWQgc2Vzc2lvbiBpcyBnaXZlbiBhIGZ3IG1hcmssIGFuZAorCXRoZW4s IGlmIHBvcnQgc2NhbiB1c2UgYSBzcG9vZmluZyBzb3VyY2UgYWRkcmVzcywgbm8gZncgbWFyayBn b3R0ZW4uCisKKworQXBwbGljYXRpb24KKy0tLS0tLS0tLS0tCisKKwlZb3Ugc2hvdWxkIHVzZSBI VEIgb3Igb3RoZXIgY2xhc3NmdWwgcWRpc2MgdG8gZW5jbG9zZSB0aGlzIHFkaXNjLgorCisgKi8K KworCisjZGVmaW5lIFBFUkZMT1dfSFNJWkUJCTI1MQorI2RlZmluZSBQRVJGTE9XX0xJRkVUSU1F CSgxMCpIWikKKworc3RydWN0IHBlcmZsb3dfZW50cnkKK3sKKwl1MzIJc3JjOworCXUzMglkc3Q7 CisJdTE2CXNwb3J0OworCXUxNglkcG9ydDsKKworCXN0cnVjdAlsaXN0X2hlYWQgaGxpc3Q7CisJ c3RydWN0CWxpc3RfaGVhZCBib3Jyb3c7IAorCXN0cnVjdAl0aW1lcl9saXN0IHRpbWVyOworCXN0 cnVjdAlwZXJmbG93X3NjaGVkX2RhdGEgKnE7CisJdTMyCWppZmZpZXM7CisJdTMyCXVzZWQ7CisJ dTMyCXBlbmFsdHk7CisKKwl1OAlwcm90b2NvbDsKK307CisKK3N0cnVjdCBwZXJmbG93X3NjaGVk X2RhdGEKK3sKKwkvKiBwYXJhbWV0ZXJzICovCisJdTMyCXJhdGU7CQkJLyogZ3VhcmFudGVkIHJh dGUgKi8KKwl1MzIJY2VpbDsJCQkvKiB1cHBlciBib3VuZCAqLworCXUzMglsaW1pdDsJCQkvKiBt YXhpbXVtIGZsb3dzIHdlIHRyYWNlICovCisJdTMyCXFsZW47CQkJLyogbWF4aW11bSBxdWV1ZSBs ZW5ndGggKi8KKworCS8qIHZhcmlhYmxlcyAqLworCXUzMglncmF0ZTsJCQkvKiBhZ2dyZWdhdGl2 ZSByYXRlICovCisKKwl1MzIJamlmZmllczsKKwl1MzIJdG9rZW47CisJdTMyCWZsb3dfY291bnQ7 CQkvKiBob3cgbWFueSBmbG93cyB3ZSBhcmUgdHJhY2luZyAqLworCXN0cnVjdAlsaXN0X2hlYWQg aHRbUEVSRkxPV19IU0laRV07CS8qIGhhc2ggdGFibGUgKi8KKwlzdHJ1Y3QJbGlzdF9oZWFkIGJv cnJvdzsJLyogbGlzdHMgb2YgYm9ycm93aW5nIGZsb3cgKi8KK307CisKK3N0cnVjdCBjb21tb25o ZHIKK3sKKwl1MTYJc291cmNlOworCXUxNglkZXN0OworfTsKKworc3RhdGljIF9faW5saW5lX18g dTMyIHBlcmZsb3dfaGFzaChzdHJ1Y3QgcGVyZmxvd19lbnRyeSAqdHVwbGUpCit7CisJcmV0dXJu IChqaGFzaF8zd29yZHModHVwbGUtPnNyYyBeIHR1cGxlLT5wcm90b2NvbCwKKwkJCQl0dXBsZS0+ ZHN0LAorCQkJCSh0dXBsZS0+c3BvcnQgPDwgMTYgfCB0dXBsZS0+ZHBvcnQpLAorCQkJCTB4NWU4 M2FkMDMpICUgUEVSRkxPV19IU0laRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBwZXJm bG93X2lzX3ZhbGlkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwaGRyICppcGgg PSBza2ItPm5oLmlwaDsKKworCWlmIChza2ItPnByb3RvY29sICE9IF9fY29uc3RhbnRfaHRvbnMo RVRIX1BfSVApKQorCQlyZXR1cm4gMDsKKworCWlmIChpcGgtPnByb3RvY29sICE9IElQUFJPVE9f VENQICYmIGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AKKwkJCSYmIGlwaC0+cHJvdG9jb2wg IT0gSVBQUk9UT19TQ1RQKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMg X19pbmxpbmVfXyB2b2lkIHBlcmZsb3dfZmxvd190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sK KwlzdHJ1Y3QgcGVyZmxvd19lbnRyeSAqZSA9IChzdHJ1Y3QgcGVyZmxvd19lbnRyeSAqKSBhcmc7 CisKKwllLT5xLT5mbG93X2NvdW50LS07CisJbGlzdF9kZWxfaW5pdCgmZS0+aGxpc3QpOworCWlm ICghbGlzdF9lbXB0eSgmZS0+Ym9ycm93KSkKKwkJbGlzdF9kZWxfaW5pdCgmZS0+Ym9ycm93KTsK KwlwcmludGsoS0VSTl9XQVJOSU5HICJkZWxldGUgZmxvd1xuIik7CisJa2ZyZWUoZSk7Cit9CisK K3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwZXJmbG93X2VudHJ5ICoKK3BlcmZsb3dfbmV3X2Zs b3codTMyIGhhc2gsIHN0cnVjdCBwZXJmbG93X2VudHJ5ICp0dXBsZSwgc3RydWN0IFFkaXNjICpz Y2gpCit7CisJc3RydWN0IHBlcmZsb3dfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsK KwlzdHJ1Y3QgcGVyZmxvd19lbnRyeSAqZTsKKworCWlmIChxLT5mbG93X2NvdW50ID49IHEtPmxp bWl0KQorCQlyZXR1cm4gTlVMTDsKKworCWUgPSBrbWFsbG9jKHNpemVvZigqZSksIEdGUF9LRVJO RUwpOworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlxLT5mbG93X2NvdW50Kys7CisKKwlt ZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7CisKKwllLT5zcmMgPSB0dXBsZS0+c3JjOworCWUtPmRz dCA9IHR1cGxlLT5kc3Q7CisJZS0+c3BvcnQgPSB0dXBsZS0+c3BvcnQ7CisJZS0+ZHBvcnQgPSB0 dXBsZS0+ZHBvcnQ7CisJZS0+cHJvdG9jb2wgPSB0dXBsZS0+cHJvdG9jb2w7CisKKwlJTklUX0xJ U1RfSEVBRCgmZS0+aGxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZlLT5ib3Jyb3cpOworCWluaXRf dGltZXIoJmUtPnRpbWVyKTsKKwllLT50aW1lci5mdW5jdGlvbiA9IHBlcmZsb3dfZmxvd190aW1l cjsKKwllLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGU7CisJZS0+amlmZmllcyA9IGpp ZmZpZXM7CisJZS0+cSA9IHE7CisKKwlsaXN0X2FkZCgmZS0+aGxpc3QsIHEtPmh0ICsgaGFzaCk7 CisKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAorcGVyZmxvd19maWxs X3R1cGxlKHN0cnVjdCBwZXJmbG93X2VudHJ5ICp0dXBsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikK K3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXN0cnVjdCBjb21tb25oZHIg KmNoOworCisJbWVtc2V0KHR1cGxlLCAwLCBzaXplb2Yoc3RydWN0IHBlcmZsb3dfZW50cnkpKTsK KyNpZiAxCisJLyogbm90IGEgdHJhY2VhYmxlIGZsb3csIGRvIG5vdGhpbmcgKi8KKwlpZiAoIXBl cmZsb3dfaXNfdmFsaWQoc2tiKSkKKwkJcmV0dXJuOworI2VuZGlmCisKKwljaCA9IChzdHJ1Y3Qg Y29tbW9uaGRyICopKCh2b2lkICopaXBoICsgKGlwaC0+aWhsIDw8IDIpKTsKKwl0dXBsZS0+c3Jj ID0gaXBoLT5zYWRkcjsKKwl0dXBsZS0+ZHN0ID0gaXBoLT5kYWRkcjsKKwl0dXBsZS0+c3BvcnQg PSBjaC0+c291cmNlOworCXR1cGxlLT5kcG9ydCA9IGNoLT5kZXN0OworCXR1cGxlLT5wcm90b2Nv bCA9IGlwaC0+cHJvdG9jb2w7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZmxvd19lbnRyeSAqCitw ZXJmbG93X2ZpbmRfZmxvdyh1MzIgKmhhc2gsIHN0cnVjdCBwZXJmbG93X2VudHJ5ICpmbG93LCBz dHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcGVyZmxvd19zY2hlZF9kYXRhICpxID0gcWRp c2NfcHJpdihzY2gpOworCXN0cnVjdCBsaXN0X2hlYWQgKmgsICpoZWFkOworCXN0cnVjdCBwZXJm bG93X2VudHJ5ICplOworICAgICAgIAorCSpoYXNoID0gcGVyZmxvd19oYXNoKGZsb3cpOworCWhl YWQgPSBxLT5odCArICgqaGFzaCk7CisKKwlsaXN0X2Zvcl9lYWNoKGgsIGhlYWQpIHsKKwkJZSA9 IGxpc3RfZW50cnkoaCwgc3RydWN0IHBlcmZsb3dfZW50cnksIGhsaXN0KTsKKwkJaWYgKGUtPnNy YyA9PSBmbG93LT5zcmMKKwkJCQkmJiBlLT5kc3QgPT0gZmxvdy0+ZHN0CisJCQkJJiYgZS0+c3Bv cnQgPT0gZmxvdy0+c3BvcnQKKwkJCQkmJiBlLT5kcG9ydCA9PSBmbG93LT5kcG9ydAorCQkJCSYm IGUtPnByb3RvY29sID09IGZsb3ctPnByb3RvY29sKQorCQkJZGVsX3RpbWVyKCZlLT50aW1lcik7 CisJCQlyZXR1cm4gZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZs b3dfcHVuaXNoKGludCBwZW5hbHR5LCBzdHJ1Y3QgbGlzdF9oZWFkICpib3Jyb3cpCit7CisJc3Ry dWN0IHBlcmZsb3dfZW50cnkgKmU7CisJc3RydWN0IGxpc3RfaGVhZCAqaDsKKworCWlmICghbGlz dF9lbXB0eShib3Jyb3cpKSB7CisJCWggPSBib3Jyb3ctPm5leHQ7CisJCWxpc3RfZGVsX2luaXQo aCk7CisJCWUgPSBsaXN0X2VudHJ5KGgsIHN0cnVjdCBwZXJmbG93X2VudHJ5LCBobGlzdCk7CisJ CWUtPnBlbmFsdHkgKz0gcGVuYWx0eTsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQK K3BlcmZsb3dfYWRqdXN0X3VzZWQoc3RydWN0IHBlcmZsb3dfZW50cnkgKmZsb3csIHUzMiByYXRl LCB1MzIgY2VpbCkKK3sKKwlpbnQgY3ljbGVzOworCisJLyogc3RpbGwgaW4gdGhpcyB0aW1lIHNs b3QgKi8KKwlpZiAoKGppZmZpZXMgLSBmbG93LT5qaWZmaWVzKSA8PSBIWikgeworCQlpZiAoKGNl aWwgLSBmbG93LT51c2VkKSA+IGZsb3ctPnBlbmFsdHkpIHsKKwkJCWZsb3ctPnVzZWQgKz0gZmxv dy0+cGVuYWx0eTsKKwkJCWZsb3ctPnBlbmFsdHkgPSAwOworCQl9IGVsc2UgeworCQkJZmxvdy0+ dXNlZCA9IGNlaWw7CisJCQlmbG93LT5wZW5hbHR5IC09IGNlaWwgLSBmbG93LT51c2VkOworCQl9 CisJCXJldHVybjsKKwl9CisKKwkvKiB0aGUgcGFja2V0IGFycml2ZXMgYWZ0ZXIgY3ljbGVzIHNs b3RzICovCisJY3ljbGVzID0gKGppZmZpZXMgLSBmbG93LT5qaWZmaWVzKSAvIEhaOworCWZsb3ct PmppZmZpZXMgKz0gY3ljbGVzICogSFo7CisKKwlpZiAoKGN5Y2xlcyAqIGNlaWwgLSBmbG93LT51 c2VkKSA+IGZsb3ctPnBlbmFsdHkpIHsKKwkJZmxvdy0+dXNlZCA9IDA7CisJCWZsb3ctPnBlbmFs dHkgPSAwOworCX0gZWxzZSB7CisJCWZsb3ctPnVzZWQgPSBmbG93LT5wZW5hbHR5ICsgZmxvdy0+ dXNlZCAtIGN5Y2xlcyAqIGNlaWw7CisJCWlmIChmbG93LT51c2VkID4gY2VpbCkgeworCQkJZmxv dy0+dXNlZCA9IGNlaWw7CisJCQlmbG93LT5wZW5hbHR5IC09IGNlaWw7CisJCX0KKwl9Cit9CisK K3N0YXRpYyBpbnQgcGVyZmxvd19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBR ZGlzYyAqc2NoKQoreworCXN0cnVjdCBwZXJmbG93X3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2 KHNjaCk7CisJc3RydWN0IHBlcmZsb3dfZW50cnkgdHVwbGUsICpmbG93OworCXUzMiBoYXNoOwor CisJLyogbm90IGEgdHJhY2VhYmxlIGZsb3cgKi8KKwlpZiAoIXBlcmZsb3dfaXNfdmFsaWQoc2ti KSkKKwkJZ290byBkcm9wOworCisJLyogaWYgbWF4IHFsZW4gaXMgc2V0IGFuZCBjdXJyZW50IHF1 ZXVlIGlzIGZ1bGwsIGRyb3AgKi8KKwlpZiAocS0+cWxlbiAmJiBzY2gtPnEucWxlbiA+PSBxLT5x bGVuKQorCQlnb3RvIGRyb3A7CisKKwlwZXJmbG93X2ZpbGxfdHVwbGUoJnR1cGxlLCBza2IpOwor CWZsb3cgPSBwZXJmbG93X2ZpbmRfZmxvdygmaGFzaCwgJnR1cGxlLCBzY2gpOworCisJaWYgKGZs b3cgPT0gTlVMTCkgeworCQlmbG93ID0gcGVyZmxvd19uZXdfZmxvdyhoYXNoLCAmdHVwbGUsIHNj aCk7CisJCWlmIChmbG93ID09IE5VTEwpCisJCQlnb3RvIGRyb3A7CisJfQorCisJLyogcmVuZXcg dGltZXIgZm9yIGZsb3cgKi8KKwlmbG93LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBFUkZM T1dfTElGRVRJTUU7CisJYWRkX3RpbWVyKCZmbG93LT50aW1lcik7CisKKwkvKiByZW5ldyB1c2Vk IGZvciB0aGlzIGZsb3cgKi8KKwlwZXJmbG93X2FkanVzdF91c2VkKGZsb3csIHEtPnJhdGUsIHEt PmNlaWwpOworCisJaWYgKChqaWZmaWVzIC0gcS0+amlmZmllcykgPiBIWi8xMCkgeworCQlxLT50 b2tlbiA9IHEtPmdyYXRlIC8gMTA7CisJCXEtPmppZmZpZXMgPSBqaWZmaWVzOworCX0KKworCS8q IHdlIGFsd2F5cyBzYXRpc2Z5IGZsb3cgdW5kZXIgcmF0ZSAqLworCWlmIChmbG93LT51c2VkIDwg cS0+cmF0ZSkgeworCQlmbG93LT51c2VkICs9IHNrYi0+bGVuOworCQlpZiAoZmxvdy0+dXNlZCA+ IHEtPnJhdGUpIHsKKwkJCS8qIGlmIHdlIGJvcnJvdywgd2UgbWF5IHJlY2VpdmUgcGVuYWx0eSAq LworCQkJaWYgKGxpc3RfZW1wdHkoJmZsb3ctPmJvcnJvdykpCisJCQkJbGlzdF9hZGRfdGFpbCgm Zmxvdy0+Ym9ycm93LCAmcS0+Ym9ycm93KTsKKwkJfQorCQlpZiAoZmxvdy0+dXNlZCA+IHEtPmNl aWwpCisJCQlmbG93LT5wZW5hbHR5ICs9IGZsb3ctPnVzZWQgLSBxLT5jZWlsOworCQlpZiAocS0+ dG9rZW4gPCBza2ItPmxlbikgeworCQkJcS0+dG9rZW4gPSAwOworCQkJcGVyZmxvd19wdW5pc2go c2tiLT5sZW4gLSBxLT50b2tlbiwgJnEtPmJvcnJvdyk7CisJCX0gZWxzZSB7CisJCQlxLT50b2tl biAtPSBza2ItPmxlbjsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChxLT50b2tlbiA8IHNrYi0+bGVu IHx8IGZsb3ctPnVzZWQgPj0gcS0+Y2VpbCkKKwkJCWdvdG8gZHJvcDsKKworCQlmbG93LT51c2Vk ICs9IHNrYi0+bGVuOworCQlxLT50b2tlbiAtPSBza2ItPmxlbjsKKworCQlpZiAobGlzdF9lbXB0 eSgmZmxvdy0+Ym9ycm93KSkKKwkJCWxpc3RfYWRkX3RhaWwoJmZsb3ctPmJvcnJvdywgJnEtPmJv cnJvdyk7CisJCWlmIChmbG93LT51c2VkID4gcS0+Y2VpbCkKKwkJCWZsb3ctPnBlbmFsdHkgKz0g Zmxvdy0+dXNlZCAtIHEtPmNlaWw7CisJfQorCitlbnF1ZXVlOgorCXNjaC0+cXN0YXRzLmJhY2ts b2cgKz0gc2tiLT5sZW47CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJc2NoLT5i c3RhdHMucGFja2V0cysrOworCV9fc2tiX3F1ZXVlX3RhaWwoJnNjaC0+cSwgc2tiKTsKKwlyZXR1 cm4gTkVUX1hNSVRfU1VDQ0VTUzsKKworZHJvcDoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwZXJm bG93IGRyb3BcbiIpOworCXNjaC0+cXN0YXRzLm92ZXJsaW1pdHMrKzsKKwlrZnJlZV9za2Ioc2ti KTsKKwlzY2gtPnFzdGF0cy5kcm9wcysrOworCXJldHVybiBORVRfWE1JVF9DTjsKK30KKworc3Rh dGljIGludCBwZXJmbG93X3JlcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNj ICpzY2gpCit7CisJX19za2JfcXVldWVfaGVhZCgmc2NoLT5xLCBza2IpOworCXNjaC0+cXN0YXRz LmJhY2tsb2cgKz0gc2tiLT5sZW47CisJc2NoLT5xc3RhdHMucmVxdWV1ZXMrKzsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpwZXJmbG93X2RlcXVldWUoc3RydWN0IFFk aXNjICpzY2gpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IF9fc2tiX2RlcXVl dWUoJnNjaC0+cSk7CisJaWYgKHNrYikgeworCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHNrYi0+ bGVuOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBlcmZsb3df ZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2ti ID0gX19za2JfZGVxdWV1ZV90YWlsKCZzY2gtPnEpOworCWlmIChza2IpIHsKKwkJdW5zaWduZWQg aW50IGxlbiA9IHNrYi0+bGVuOworCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IGxlbjsKKwkJc2No LT5xc3RhdHMuZHJvcHMrKzsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBsZW47CisJfQor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmbG93X3Jlc2V0KHN0cnVjdCBRZGlzYyAq c2NoKQoreworCXNrYl9xdWV1ZV9wdXJnZSgmc2NoLT5xKTsKKwlzY2gtPnFzdGF0cy5iYWNrbG9n ID0gMDsKK30KKworc3RhdGljIGludCBwZXJmbG93X2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwg c3RydWN0IHJ0YXR0ciAqb3B0KQoreworCXN0cnVjdCBwZXJmbG93X3NjaGVkX2RhdGEgKnEgPSBx ZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHRjX3BlcmZsb3dfcW9wdCAqY3RsOworCisJLyogaWYg bGltaXQgYW5kIHFsZW4gYXJlIGxvd2VyZWQsIGFuZCB3ZSBhcmUgaW4gYSBvdmVyIGxpbWl0CisJ ICogc3RhdGUsIHdlIHN0aWxsIGRvbid0IGRyb3AgZmxvdyBvciBkcm9wIHBhY2tldC4KKwkgKiBz Y2gtPnEgd2lsbCBkZWNyZWFzZSB0byBhbGxvd2VkIGxlbmd0aAorCSAqIHEtPmZsb3dfY291bnQg d2lsbCBkZWNyZWFzZSBiZWNhdXNlIG5vIG5ldyBmbG93IGlzIHRyYWNlZAorCSAqLworCWlmIChv cHQgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQljdGwgPSBSVEFf REFUQShvcHQpOworCQlpZiAob3B0LT5ydGFfbGVuIDwgUlRBX0xFTkdUSChzaXplb2YoKmN0bCkp KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcS0+cmF0ZSA9IGN0bC0+cmF0ZS5yYXRlOworCQlx LT5jZWlsID0gY3RsLT5jZWlsLnJhdGU7CisJCXEtPmxpbWl0ID0gY3RsLT5saW1pdDsKKwkJcS0+ cWxlbiA9IGN0bC0+cWxlbjsKKworCQlpZiAocS0+bGltaXQgPT0gMCkKKwkJCXEtPmxpbWl0ID0g MTAyNDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiKHJhdGUsY2VpbCxsaW1pdCxxbGVuKT0oJXUs JXUsJXUsJXUpXG4iLAorCQkJCXEtPnJhdGUsIHEtPmNlaWwsIHEtPmxpbWl0LCBxLT5xbGVuKTsK KwkJLyogYWdncmVnYXRpdmUgcmF0ZSBpcyAocmF0ZSAqIDEuMDUgKiBsaW1pdCkgKi8KKwkJcS0+ Z3JhdGUgPSAocS0+cmF0ZSArIHEtPnJhdGUvMjApICogcS0+bGltaXQ7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZmxvd19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1 Y3QgcnRhdHRyICpvcHQpCit7CisJc3RydWN0IHBlcmZsb3dfc2NoZWRfZGF0YSAqcSA9IHFkaXNj X3ByaXYoc2NoKTsKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gcGVyZmxvd19jaGFuZ2Uoc2NoLCBv cHQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcS0+Ym9y cm93KTsKKworCWZvciAoaSA9IDA7IGkgPCBQRVJGTE9XX0hTSVpFOyBpKyspCisJCUlOSVRfTElT VF9IRUFEKHEtPmh0ICsgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZmxv d19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBwZXJmbG93X3NjaGVkX2Rh dGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IGxpc3RfaGVhZCAqaCwgKm47CisJc3Ry dWN0IHBlcmZsb3dfZW50cnkgKmU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEVSRkxP V19IU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZSAoaCwgbiwgcS0+aHQgKyBpKSB7 CisJCQllID0gbGlzdF9lbnRyeShoLCBzdHJ1Y3QgcGVyZmxvd19lbnRyeSwgaGxpc3QpOworCQkJ ZGVsX3RpbWVyKCZlLT50aW1lcik7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmUtPmJvcnJvdykpCisJ CQkJbGlzdF9kZWxfaW5pdCgmZS0+Ym9ycm93KTsKKwkJCWxpc3RfZGVsKGgpOworCQkJa2ZyZWUo ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGVyZmxvd19kdW1wKHN0cnVjdCBRZGlzYyAq c2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0 cnVjdCBRZGlzY19vcHMgcGVyZmxvd19xZGlzY19vcHMgPSB7CisJLm5leHQJCT0gTlVMTCwKKwku Y2xfb3BzCQk9IE5VTEwsCisJLmlkCQk9ICJwZXJmbG93IiwKKwkucHJpdl9zaXplCT0gc2l6ZW9m KHN0cnVjdCBwZXJmbG93X3NjaGVkX2RhdGEpLAorCS5lbnF1ZXVlCT0gcGVyZmxvd19lbnF1ZXVl LAorCS5kZXF1ZXVlCT0gcGVyZmxvd19kZXF1ZXVlLAorCS5yZXF1ZXVlCT0gcGVyZmxvd19yZXF1 ZXVlLAorCS5kcm9wCQk9IHBlcmZsb3dfZHJvcCwKKwkuaW5pdAkJPSBwZXJmbG93X2luaXQsCisJ LnJlc2V0CQk9IHBlcmZsb3dfcmVzZXQsCisJLmRlc3Ryb3kJPSBwZXJmbG93X2Rlc3Ryb3ksCisJ LmNoYW5nZQkJPSBwZXJmbG93X2NoYW5nZSwKKwkuZHVtcAkJPSBwZXJmbG93X2R1bXAsCisJLm93 bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGVyZmxvd19tb2R1 bGVfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9xZGlzYygmcGVyZmxvd19xZGlzY19v cHMpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGVyZmxvd19tb2R1bGVfZXhpdCh2b2lkKQor eworCXVucmVnaXN0ZXJfcWRpc2MoJnBlcmZsb3dfcWRpc2Nfb3BzKTsKK30KKworbW9kdWxlX2lu aXQocGVyZmxvd19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChwZXJmbG93X21vZHVsZV9leGl0 KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiV2FuZyBKaWFuIDxs YXJrQGxpbnV4Lm5ldC5jbj4iKTsK --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac Content-Type: application/x-sh; name="t.sh" Content-Disposition: attachment; filename="t.sh" Content-Transfer-Encoding: base64 Li90YyBxZGlzYyBkZWwgZGV2IGV0aDEgcm9vdAouL3RjIHFkaXNjIGFkZCBkZXYgZXRoMSByb290 IGhhbmRsZSAxOiBodGIgZGVmYXVsdCAxMAouL3RjIGNsYXNzIGFkZCBkZXYgZXRoMSBwYXJlbnQg MTogY2xhc3NpZCAxOjEgaHRiIHJhdGUgMTAwTWJpdCBjZWlsIDEwME1iaXQKCi4vdGMgY2xhc3Mg YWRkIGRldiBldGgxIHBhcmVudCAxOjEgY2xhc3NpZCAxOjEwIGh0YiByYXRlIDgwa2JwcyBjZWls IDgwa2JwcwoKLi90YyBjbGFzcyBhZGQgZGV2IGV0aDEgcGFyZW50IDE6MSBjbGFzc2lkIDE6MTIg aHRiIHJhdGUgODBrYnBzIGNlaWwgODBrYnBzCi4vdGMgcWRpc2MgYWRkIGRldiBldGgxIHBhcmVu dCAxOjEyIGhhbmRsZSAyMDogcGVyZmxvdyByYXRlIDEwa2JwcyBjZWlsIDE1a2JwcyBsaW1pdCA3 Ci4vdGMgZmlsdGVyIGFkZCBkZXYgZXRoMSBwYXJlbnQgMTowIHByb3RvY29sIGlwIHUzMiBtYXRj aCBpcCBzcG9ydCA4MCAweGZmZmYgZmxvd2lkIDE6MTIK --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ LARTC mailing list LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc --Multipart=_Mon__4_Apr_2005_15_21_17_+0800_.ga557IsYYI=EYac--