From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy Polyakov Subject: Re: Kernel connector - userspace <-> kernelspace "linker". Date: Mon, 20 Sep 2004 12:01:37 +0400 Sender: netdev-bounce@oss.sgi.com Message-ID: <1095667297.15351.42.camel@uganda> References: <1095331899.18219.58.camel@uganda> <1095336548.1064.167.camel@jzny.localdomain> Reply-To: johnpol@2ka.mipt.ru Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-m0BUYYOFNFPI9i++uPZT" Cc: netdev@oss.sgi.com Return-path: To: jamal In-Reply-To: <1095336548.1064.167.camel@jzny.localdomain> Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --=-m0BUYYOFNFPI9i++uPZT Content-Type: multipart/mixed; boundary="=-TIMupFxjMR70PiTEfF2B" --=-TIMupFxjMR70PiTEfF2B Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Thu, 2004-09-16 at 16:09, jamal wrote: > On Thu, 2004-09-16 at 06:51, Evgeniy Polyakov wrote: > > Hmm, do not know how to describe...=20 > > Kind of mega-picture can be found at=20 > > http://tservice.net.ru/~s0mbre/?section=3Dgallery&item=3Dconnector_desi= gn > >=20 > > This driver adds possibility to connect anything with anything using > > netlink based network. > > One must register callback and identificator. When driver receives > > special netlink message with appropriate identificator, appropriate > > callback will be called. > > I think that the code better explains what I'm trying to say. >=20 > I dont have time to evaluate the code right now - but will at the end of > day. Just trying to understand your concepts: >=20 > Essentially you are building a unified messaging for > userspace-userpace(i.e IPC), userspace-kernel, kernel-kernel with each > component residing in whatever spot (kernel or userland)having a unique > name and Id. Is this correct? > Clearly there could be name/Id conflicts etc. Are you addressing those?=20 > Any event and filtering capability already in or planned? Example event > I want to be notified when module with name "sean paul" comes online and > filter will be "it has to have ID in the range of 0x200-0x400". >=20 > I am still trying to wakeup but it does sound like a good idea to have a > generic messaging subsystem. Attached patch cleans it up a bit and adds notify removal mechanism. BTW, patch for cn_test.c test module is quite ugly, but it is only for test. Real users can use cn_netlink_send(). It looks like noone objects, so I will create a patch and send it to GregKH :)=20 I know at least 2 potential users - w1 and pending superio( actually it requires only connector to be included). I'm quite sure after I will write bits of documentation for this cruft it will take broader usage. Thank you. > cheers, > jamal=20 --=20 Evgeniy Polyakov Crash is better than data corruption. -- Art Grabowski --=-TIMupFxjMR70PiTEfF2B Content-Disposition: attachment; filename=connector.diff Content-Type: text/x-patch; name=connector.diff; charset=KOI8-R Content-Transfer-Encoding: base64 KiBsb29raW5nIGZvciBqb2hucG9sQDJrYS5taXB0LnJ1LTIwMDQvY29ubmVjdG9yLS1tYWluLS0w LS1wYXRjaC0xMCB0byBjb21wYXJlIHdpdGgNCiogY29tcGFyaW5nIHRvIGpvaG5wb2xAMmthLm1p cHQucnUtMjAwNC9jb25uZWN0b3ItLW1haW4tLTAtLXBhdGNoLTEwDQpNICBjbl90ZXN0LmMNCk0g IGNvbm5lY3Rvci5jDQpNICBjb25uZWN0b3IuaA0KTSAgTWFrZWZpbGUNCk0gIHVjb24uYw0KDQoq IG1vZGlmaWVkIGZpbGVzDQoNCi0tLSBvcmlnL01ha2VmaWxlDQorKysgbW9kL01ha2VmaWxlDQpA QCAtMiw3ICsyLDcgQEANCiBjbi1vYmpzCQk6PSBjbl9xdWV1ZS5vIGNvbm5lY3Rvci5vDQogDQog I0tESVIJOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkDQotS0RJUgk6PSAv dXNyL2xvY2FsL3NyYy9saW51eC0yLjYvbGludXgtMi42LjYNCitLRElSCTo9IC91c3IvbG9jYWwv c3JjL2xpbnV4LTIuNi9saW51eC0yLjYNCiBQV0QJOj0gJChzaGVsbCBwd2QpDQogDQogZGVmYXVs dDoNCg0KDQotLS0gb3JpZy9jbl90ZXN0LmMNCisrKyBtb2QvY25fdGVzdC5jDQpAQCAtMjIsMTEg KzIyLDEzIEBADQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KICNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisjaW5jbHVkZSA8bGlu dXgvc2tidWZmLmg+DQogDQogI2luY2x1ZGUgImNvbm5lY3Rvci5oIg0KIA0KIHN0YXRpYyBzdHJ1 Y3QgY2JfaWQgY25fdGVzdF9pZCA9IHsgMHgxMjMsIDB4NDU2IH07DQogc3RhdGljIGNoYXIgY25f dGVzdF9uYW1lW10gPSAiY25fdGVzdCI7DQorc3RhdGljIHN0cnVjdCBzb2NrICpubHM7DQogDQog dm9pZCBjbl90ZXN0X2NhbGxiYWNrKHZvaWQgKmRhdGEpDQogew0KQEAgLTM2LDIxICszOCwxMTIg QEANCiAJICAgICAgIF9fZnVuY19fLCBtc2ctPmlkLmlkeCwgbXNnLT5pZC52YWwsIG1zZy0+bGVu KTsNCiB9DQogDQorc3RhdGljIGludCBjbl90ZXN0X3dhbnRfbm90aWZ5KHZvaWQpDQorew0KKwlz dHJ1Y3QgY25fY3RsX21zZyAqY3RsOw0KKwlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxOw0KKwlz dHJ1Y3QgY25fbXNnICptc2cgPSBOVUxMOw0KKwlpbnQgc2l6ZSwgc2l6ZTA7DQorCXN0cnVjdCBz a19idWZmICpza2I7DQorCXN0cnVjdCBubG1zZ2hkciAqbmxoOw0KKwl1MzIgZ3JvdXAgPSAxOw0K Kw0KKwlzaXplMCA9IHNpemVvZigqbXNnKSArIHNpemVvZigqY3RsKSArIDMqc2l6ZW9mKCpyZXEp Ow0KKwkNCisJc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemUwKTsNCisNCisJc2tiID0gYWxsb2Nfc2ti KHNpemUsIEdGUF9BVE9NSUMpOw0KKwlpZiAoIXNrYikgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJG YWlsZWQgdG8gYWxsb2NhdGUgbmV3IHNrYiB3aXRoIHNpemU9JXUuXG4iLCBzaXplKTsNCisNCisJ CXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCW5saCA9IE5MTVNHX1BVVChza2IsIDAsIDB4MTIz LCBOTE1TR19ET05FLCBzaXplIC0gc2l6ZW9mKCpubGgpKTsNCisNCisJbXNnID0gKHN0cnVjdCBj bl9tc2cgKilOTE1TR19EQVRBKG5saCk7DQorDQorCW1lbXNldChtc2csIDAsIHNpemUwKTsNCisN CisJbXNnLT5pZC5pZHggCT0gLTE7DQorCW1zZy0+aWQudmFsIAk9IC0xOw0KKwltc2ctPnNlcSAJ PSAweDEyMzsNCisJbXNnLT5hY2sgCT0gMHgzNDU7DQorCW1zZy0+bGVuIAk9IHNpemUwIC0gc2l6 ZW9mKCptc2cpOw0KKw0KKwljdGwgPSAoc3RydWN0IGNuX2N0bF9tc2cgKikobXNnICsgMSk7DQor DQorCWN0bC0+aWR4X25vdGlmeV9udW0gCT0gMTsNCisJY3RsLT52YWxfbm90aWZ5X251bSAJPSAy Ow0KKwljdGwtPmdyb3VwCQk9IGdyb3VwOw0KKw0KKwlyZXEgPSAoc3RydWN0IGNuX25vdGlmeV9y ZXEgKikoY3RsICsgMSk7DQorDQorCS8qDQorCSAqIElkeC4NCisJICovDQorCXJlcS0+Zmlyc3Qg PSBjbl90ZXN0X2lkLmlkeDsNCisJcmVxLT5yYW5nZSA9IDEwOw0KKw0KKwkvKg0KKwkgKiBWYWwg MC4NCisJICovDQorCXJlcSsrOw0KKwlyZXEtPmZpcnN0ID0gY25fdGVzdF9pZC52YWw7DQorCXJl cS0+cmFuZ2UgPSAxMDsNCisJDQorCS8qDQorCSAqIFZhbCAxLg0KKwkgKi8NCisJcmVxKys7DQor CXJlcS0+Zmlyc3QgPSBjbl90ZXN0X2lkLnZhbCArIDIwOw0KKwlyZXEtPnJhbmdlID0gMTA7DQor CQ0KKwlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwcyA9IGN0bC0+Z3JvdXA7DQorCS8vbmV0bGlu a19icm9hZGNhc3QobmxzLCBza2IsIDAsIGN0bC0+Z3JvdXAsIEdGUF9BVE9NSUMpOw0KKwluZXRs aW5rX3VuaWNhc3QobmxzLCBza2IsIDAsIDApOw0KKw0KKwlwcmludGsoS0VSTl9JTkZPICJSZXF1 ZXN0IHdhcyBzZW50LiBHcm91cD0weCV4LlxuIiwgZ3JvdXApOw0KKwkJDQorCXJldHVybiAwOw0K Kw0KK25sbXNnX2ZhaWx1cmU6DQorCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNlbmQgJXUu JXVcbiIsIG1zZy0+c2VxLCBtc2ctPmFjayk7DQorCWtmcmVlX3NrYihza2IpOw0KKwlyZXR1cm4g LUVJTlZBTDsNCit9DQorDQogc3RhdGljIGludCBjbl90ZXN0X2luaXQodm9pZCkNCiB7DQogCWlu dCBlcnI7DQorCQ0KKwlubHMgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19ORkxPRywg TlVMTCk7DQorCWlmICghbmxzKSB7DQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVh dGUgbmV3IG5ldGxpbmsgc29ja2V0KCV1KS5cbiIsIE5FVExJTktfTkZMT0cpOw0KKwkJcmV0dXJu IC1FSU87DQorCX0NCisNCisJZXJyID0gY25fdGVzdF93YW50X25vdGlmeSgpOw0KKwlpZiAoZXJy KQ0KKwkJZ290byBlcnJfb3V0Ow0KIA0KIAllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmNuX3Rlc3Rf aWQsIGNuX3Rlc3RfbmFtZSwgY25fdGVzdF9jYWxsYmFjayk7DQogCWlmIChlcnIpDQotCQlyZXR1 cm4gZXJyOw0KKwkJZ290byBlcnJfb3V0Ow0KIAljbl90ZXN0X2lkLnZhbCsrOw0KIAllcnIgPSBj bl9hZGRfY2FsbGJhY2soJmNuX3Rlc3RfaWQsIGNuX3Rlc3RfbmFtZSwgY25fdGVzdF9jYWxsYmFj ayk7DQogCWlmIChlcnIpIHsNCiAJCWNuX2RlbF9jYWxsYmFjaygmY25fdGVzdF9pZCk7DQotCQly ZXR1cm4gZXJyOw0KKwkJZ290byBlcnJfb3V0Ow0KIAl9DQogDQogCXJldHVybiAwOw0KKw0KK2Vy cl9vdXQ6DQorCWlmIChubHMtPnNrX3NvY2tldCkNCisJCXNvY2tfcmVsZWFzZShubHMtPnNrX3Nv Y2tldCk7DQorDQorCXJldHVybiBlcnI7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIGNuX3Rlc3RfZmlu aSh2b2lkKQ0KQEAgLTU4LDYgKzE1MSw4IEBADQogCWNuX2RlbF9jYWxsYmFjaygmY25fdGVzdF9p ZCk7DQogCWNuX3Rlc3RfaWQudmFsLS07DQogCWNuX2RlbF9jYWxsYmFjaygmY25fdGVzdF9pZCk7 DQorCWlmIChubHMtPnNrX3NvY2tldCkNCisJCXNvY2tfcmVsZWFzZShubHMtPnNrX3NvY2tldCk7 DQogfQ0KIA0KIG1vZHVsZV9pbml0KGNuX3Rlc3RfaW5pdCk7DQoNCg0KLS0tIG9yaWcvY29ubmVj dG9yLmMNCisrKyBtb2QvY29ubmVjdG9yLmMNCkBAIC0zNiw5ICszNiwxNyBAQA0KIE1PRFVMRV9E RVNDUklQVElPTigiR2VuZXJpYyB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGNvbm5lY3Rvci4i KTsNCiANCiBzdGF0aWMgaW50IHVuaXQgPSBORVRMSU5LX05GTE9HOw0KK3N0YXRpYyB1MzIgY25f aWR4ID0gLTE7DQorc3RhdGljIHUzMiBjbl92YWwgPSAtMTsNCisNCiBtb2R1bGVfcGFyYW0odW5p dCwgaW50LCAwKTsNCittb2R1bGVfcGFyYW0oY25faWR4LCB1aW50LCAwKTsNCittb2R1bGVfcGFy YW0oY25fdmFsLCB1aW50LCAwKTsNCisNCitzcGlubG9ja190IG5vdGlmeV9sb2NrID0gU1BJTl9M T0NLX1VOTE9DS0VEOw0KK3N0YXRpYyBMSVNUX0hFQUQobm90aWZ5X2xpc3QpOw0KIA0KLXN0cnVj dCBjbl9kZXYgY2RldjsNCitzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2Ow0KIA0KIC8qDQogICog bXNnLT5zZXEgYW5kIG1zZy0+YWNrIGFyZSB1c2VkIHRvIGRldGVybWluZSBtZXNzYWdlIGdlbmVh bG9neS4NCkBAIC01OSw3ICs2Nyw3IEBADQogICogdGhlbiBpdCBpcyBuZXcgbWVzc2FnZS4NCiAg Kg0KICAqLw0KLXZvaWQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZykNCit2b2lk IGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBfX2dyb3VwcykNCiB7DQog CXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KIAl1bnNpZ25lZCBpbnQgc2l6 ZTsNCkBAIC03MCwyMCArNzgsMjUgQEANCiAJdTMyIGdyb3VwcyA9IDA7DQogCWludCBmb3VuZCA9 IDA7DQogDQotCXNwaW5fbG9jaygmZGV2LT5jYmRldi0+cXVldWVfbG9jayk7DQotCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShfX2NicSwgbiwgJmRldi0+Y2JkZXYtPnF1ZXVlX2xpc3QsIGNhbGxi YWNrX2VudHJ5KSB7DQotCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5jYi0+aWQsICZtc2ctPmlk KSkgew0KLQkJCWZvdW5kID0gMTsNCi0JCQlncm91cHMgPSBfX2NicS0+Z3JvdXA7DQorCWlmICgh X19ncm91cHMpDQorCXsNCisJCXNwaW5fbG9jaygmZGV2LT5jYmRldi0+cXVldWVfbG9jayk7DQor CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPmNiZGV2LT5xdWV1ZV9s aXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEtPmNiLT5p ZCwgJm1zZy0+aWQpKSB7DQorCQkJCWZvdW5kID0gMTsNCisJCQkJZ3JvdXBzID0gX19jYnEtPmdy b3VwOw0KKwkJCX0NCiAJCX0NCi0JfQ0KLQlzcGluX3VubG9jaygmZGV2LT5jYmRldi0+cXVldWVf bG9jayk7DQorCQlzcGluX3VubG9jaygmZGV2LT5jYmRldi0+cXVldWVfbG9jayk7DQogDQotCWlm ICghZm91bmQpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgbXVsdGljYXN0 IG5ldGxpbmsgZ3JvdXAgZm9yIGNhbGxiYWNrWzB4JXguMHgleF0uIHNlcT0ldVxuIiwNCi0JCSAg ICAgICBtc2ctPmlkLmlkeCwgbXNnLT5pZC52YWwsIG1zZy0+c2VxKTsNCi0JCXJldHVybjsNCisJ CWlmICghZm91bmQpIHsNCisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBmaW5kIG11bHRp Y2FzdCBuZXRsaW5rIGdyb3VwIGZvciBjYWxsYmFja1sweCV4LjB4JXhdLiBzZXE9JXVcbiIsDQor CQkJICAgICAgIG1zZy0+aWQuaWR4LCBtc2ctPmlkLnZhbCwgbXNnLT5zZXEpOw0KKwkJCXJldHVy bjsNCisJCX0NCiAJfQ0KKwllbHNlDQorCQlncm91cHMgPSBfX2dyb3VwczsNCiANCiAJc2l6ZSA9 IE5MTVNHX1NQQUNFKHNpemVvZigqbXNnKSArIG1zZy0+bGVuKTsNCiANCkBAIC0xNDcsNiArMTYw LDE1IEBADQogCXNlcSA9IG5saC0+bmxtc2dfc2VxOw0KIAlncm91cCA9IE5FVExJTktfQ0IoKHNr YikpLmdyb3VwczsNCiAJbXNnID0gKHN0cnVjdCBjbl9tc2cgKilOTE1TR19EQVRBKG5saCk7DQor DQorCWlmIChtc2ctPmxlbiAhPSBubGgtPm5sbXNnX2xlbiAtIHNpemVvZigqbXNnKSAtIHNpemVv ZigqbmxoKSkNCisJew0KKwkJcHJpbnRrKEtFUk5fRVJSICJza2IgZG9lcyBub3QgaGF2ZSBlbm91 Z2ggbGVuZ3RoOiByZXF1ZXN0ZWQgbXNnLT5sZW49JXVbJXVdLCBubGgtPm5sbXNnX2xlbj0ldVsl dV0sIHNrYi0+bGVuPSV1W211c3QgYmUgJXVdLlxuIiwgDQorCQkJCW1zZy0+bGVuLCBOTE1TR19T UEFDRShtc2ctPmxlbiksIA0KKwkJCQlubGgtPm5sbXNnX2xlbiwgbmxoLT5ubG1zZ19sZW4gLSBz aXplb2YoKm5saCksDQorCQkJCXNrYi0+bGVuLCBtc2ctPmxlbiArIHNpemVvZigqbXNnKSk7DQor CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KICNpZiAwDQogCXByaW50ayhLRVJOX0lORk8gInBpZD0l dSwgdWlkPSV1LCBzZXE9JXUsIGdyb3VwPSV1LlxuIiwNCiAJICAgICAgIHBpZCwgdWlkLCBzZXEs IGdyb3VwKTsNCkBAIC0xODgsNyArMjEwLDcgQEANCiANCiAJCWVyciA9IF9fY25fcnhfc2tiKHNr YiwgbmxoKTsNCiAJCWlmIChlcnIpIHsNCi0JCQlpZiAoZXJyIDwgMCkNCisJCQlpZiAoZXJyIDwg MCAmJiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0FDSykpDQogCQkJCW5ldGxpbmtfYWNrKHNr YiwgbmxoLCAtZXJyKTsNCiAJCQlrZnJlZV9za2Ioc2tiKTsNCiAJCQlicmVhazsNCkBAIC0yMTAs NiArMjMyLDU5IEBADQogCQljbl9yeF9za2Ioc2tiKTsNCiB9DQogDQorc3RhdGljIHZvaWQgY25f bm90aWZ5KHN0cnVjdCBjYl9pZCAqaWQsIHUzMiBub3RpZnlfZXZlbnQpDQorew0KKwlzdHJ1Y3Qg Y25fY3RsX2VudHJ5ICplbnQ7DQorDQorCXNwaW5fbG9jaygmbm90aWZ5X2xvY2spOw0KKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGVudCwgJm5vdGlmeV9saXN0LCBub3RpZnlfZW50cnkpDQorCXsNCisJ CWludCBpOw0KKwkJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTsNCisJCXN0cnVjdCBjbl9jdGxf bXNnICpjdGwgPSBlbnQtPm1zZzsNCisJCWludCBhLCBiOw0KKw0KKwkJYSA9IGIgPSAwOw0KKwkJ DQorCQlyZXEgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiljdGwtPmRhdGE7DQorCQlmb3IgKGk9 MDsgaTxjdGwtPmlkeF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKQ0KKwkJew0KKwkJCWlmIChpZC0+ aWR4ID49IHJlcS0+Zmlyc3QgJiYgaWQtPmlkeCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKQ0K KwkJCXsNCisJCQkJcHJpbnRrKCIrICIpOw0KKwkJCQlhID0gMTsNCisJCQkJYnJlYWs7DQorCQkJ fQ0KKwkJfQ0KKwkJDQorCQlmb3IgKGk9MDsgaTxjdGwtPnZhbF9ub3RpZnlfbnVtOyArK2ksICsr cmVxKQ0KKwkJew0KKwkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYgaWQtPnZhbCA8IHJl cS0+Zmlyc3QgKyByZXEtPnJhbmdlKQ0KKwkJCXsNCisJCQkJcHJpbnRrKCIrICIpOw0KKwkJCQli ID0gMTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJaWYgKGEgJiYgYikNCisJCXsN CisJCQlzdHJ1Y3QgY25fbXNnIG07DQorCQkJDQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm90aWZ5 aW5nIGdyb3VwICV4IHdpdGggZXZlbnQgJXUgYWJvdXQgJXguJXguXG4iLCANCisJCQkJCWN0bC0+ Z3JvdXAsIG5vdGlmeV9ldmVudCwgDQorCQkJCQlpZC0+aWR4LCBpZC0+dmFsKTsNCisNCisJCQlt ZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7DQorCQkJbS5hY2sgPSBub3RpZnlfZXZlbnQ7DQorDQor CQkJbWVtY3B5KCZtLmlkLCBpZCwgc2l6ZW9mKG0uaWQpKTsNCisJCQljbl9uZXRsaW5rX3NlbmQo Jm0sIGN0bC0+Z3JvdXApOw0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrKCZub3RpZnlfbG9jayk7 DQorfQ0KKw0KIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFt ZSwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSkNCiB7DQogCWludCBlcnI7DQpAQCAtMjM3LDYg KzMxMiw4IEBADQogCQlrZnJlZShjYik7DQogCQlyZXR1cm4gZXJyOw0KIAl9DQorCQkJDQorCWNu X25vdGlmeShpZCwgMCk7DQogDQogCXJldHVybiAwOw0KIH0NCkBAIC0yNDksMTYgKzMyNiwxNTgg QEANCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAmZGV2LT5jYmRldi0+cXVl dWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCiAJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEtPmNi LT5pZCwgaWQpKSB7DQogCQkJY25fcXVldWVfZGVsX2NhbGxiYWNrKGRldi0+Y2JkZXYsIF9fY2Jx LT5jYik7DQorCQkJY25fbm90aWZ5KGlkLCAxKTsNCiAJCQlicmVhazsNCiAJCX0NCiAJfQ0KIH0N CiANCitzdGF0aWMgaW50IGNuX2N0bF9tc2dfZXF1YWxzKHN0cnVjdCBjbl9jdGxfbXNnICptMSwg c3RydWN0IGNuX2N0bF9tc2cgKm0yKQ0KK3sNCisJaW50IGk7DQorCXN0cnVjdCBjbl9ub3RpZnlf cmVxICpyZXExLCAqcmVxMjsNCisNCisJaWYgKG0xLT5pZHhfbm90aWZ5X251bSAhPSBtMi0+aWR4 X25vdGlmeV9udW0pDQorCQlyZXR1cm4gMDsNCisJDQorCWlmIChtMS0+dmFsX25vdGlmeV9udW0g IT0gbTItPnZhbF9ub3RpZnlfbnVtKQ0KKwkJcmV0dXJuIDA7DQorCQ0KKwlpZiAobTEtPmxlbiAh PSBtMi0+bGVuKQ0KKwkJcmV0dXJuIDA7DQorDQorCWlmICgobTEtPmlkeF9ub3RpZnlfbnVtICsg bTEtPnZhbF9ub3RpZnlfbnVtKSpzaXplb2YoKnJlcTEpICE9IG0xLT5sZW4pDQorCXsNCisJCXBy aW50aygiTm90aWZ5IGVudHJ5W2lkeF9udW09JXgsIHZhbF9udW09JXgsIGxlbj0ldV0gY29udGFp bnMgZ2FyYmFnZS4gUmVtb3ZpbmcuXG4iLCANCisJCQkJbTEtPmlkeF9ub3RpZnlfbnVtLCBtMS0+ dmFsX25vdGlmeV9udW0sIG0xLT5sZW4pOw0KKwkJcmV0dXJuIDE7DQorCX0NCisNCisJcmVxMSA9 IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKW0xLT5kYXRhOw0KKwlyZXEyID0gKHN0cnVjdCBjbl9u b3RpZnlfcmVxICopbTItPmRhdGE7DQorCQ0KKwlmb3IgKGk9MDsgaTxtMS0+aWR4X25vdGlmeV9u dW07ICsraSkNCisJew0KKwkJaWYgKG1lbWNtcChyZXExLCByZXEyLCBzaXplb2YoKnJlcTEpKSkN CisJCQlyZXR1cm4gMDsNCisNCisJCXJlcTErKzsNCisJCXJlcTIrKzsNCisJfQ0KKw0KKwlmb3Ig KGk9MDsgaTxtMS0+dmFsX25vdGlmeV9udW07ICsraSkNCisJew0KKwkJaWYgKG1lbWNtcChyZXEx LCByZXEyLCBzaXplb2YoKnJlcTEpKSkNCisJCQlyZXR1cm4gMDsNCisNCisJCXJlcTErKzsNCisJ CXJlcTIrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMTsNCit9DQorDQorc3RhdGljIHZvaWQgY25fY2Fs bGJhY2sodm9pZCAqIGRhdGEpDQorew0KKwlzdHJ1Y3QgY25fbXNnICptc2cgPSAoc3RydWN0IGNu X21zZyAqKWRhdGE7DQorCXN0cnVjdCBjbl9jdGxfbXNnICpjdGw7DQorCXN0cnVjdCBjbl9jdGxf ZW50cnkgKmVudDsNCisJdTMyIHNpemU7DQorIA0KKwlpZiAobXNnLT5sZW4gPCBzaXplb2YoKmN0 bCkpDQorCXsNCisJCXByaW50ayhLRVJOX0VSUiAiV3JvbmcgY29ubmVjdG9yIHJlcXVlc3Qgc2l6 ZSAldSwgbXVzdCBiZSA+PSAldS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgc2l6ZW9mKCpjdGwpKTsN CisJCXJldHVybjsNCisJfQ0KKwkNCisJY3RsID0gKHN0cnVjdCBjbl9jdGxfbXNnICopbXNnLT5k YXRhOw0KKw0KKwlzaXplID0gc2l6ZW9mKCpjdGwpICsgKGN0bC0+aWR4X25vdGlmeV9udW0gKyBj dGwtPnZhbF9ub3RpZnlfbnVtKSpzaXplb2Yoc3RydWN0IGNuX25vdGlmeV9yZXEpOw0KKw0KKwlp ZiAobXNnLT5sZW4gIT0gc2l6ZSkNCisJew0KKwkJcHJpbnRrKEtFUk5fRVJSICJXcm9uZyBjb25u ZWN0b3IgcmVxdWVzdCBzaXplICV1LCBtdXN0IGJlID09ICV1LlxuIiwgDQorCQkJCW1zZy0+bGVu LCBzaXplKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAoY3RsLT5sZW4gKyBzaXplb2YoKmN0 bCkgIT0gbXNnLT5sZW4pDQorCXsNCisJCXByaW50ayhLRVJOX0VSUiAiV3JvbmcgbWVzc2FnZTog bXNnLT5sZW49JXUgbXVzdCBiZSBlcXVhbCB0byBpbm5lcl9sZW49JXUgWysldV0uXG4iLCANCisJ CQkJbXNnLT5sZW4sIGN0bC0+bGVuLCBzaXplb2YoKmN0bCkpOw0KKwkJcmV0dXJuOw0KKwl9DQor DQorCS8qDQorCSAqIFJlbW92ZSBub3RpZmljYXRpb24uDQorCSAqLw0KKwlpZiAoY3RsLT5ncm91 cCA9PSAwKQ0KKwl7DQorCQlzdHJ1Y3QgY25fY3RsX2VudHJ5ICpuOw0KKwkJDQorCQlzcGluX2xv Y2soJm5vdGlmeV9sb2NrKTsNCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnQsIG4sICZu b3RpZnlfbGlzdCwgbm90aWZ5X2VudHJ5KQ0KKwkJew0KKwkJCWlmIChjbl9jdGxfbXNnX2VxdWFs cyhlbnQtPm1zZywgY3RsKSkNCisJCQl7DQorCQkJCWxpc3RfZGVsKCZlbnQtPm5vdGlmeV9lbnRy eSk7DQorCQkJCWtmcmVlKGVudCk7DQorCQkJfQ0KKwkJfQ0KKwkJc3Bpbl91bmxvY2soJm5vdGlm eV9sb2NrKTsNCisNCisJCXJldHVybjsNCisJfQ0KKw0KKwlzaXplICs9IHNpemVvZigqZW50KTsN CisNCisJZW50ID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsNCisJaWYgKCFlbnQpDQorCXsN CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciBuZXcg bm90aWZ5IGVudHJ5LlxuIiwgc2l6ZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbWVtc2V0KGVu dCwgMCwgc2l6ZSk7DQorDQorCWVudC0+bXNnID0gKHN0cnVjdCBjbl9jdGxfbXNnICopKGVudCAr IDEpOw0KKw0KKwltZW1jcHkoZW50LT5tc2csIGN0bCwgc2l6ZSAtIHNpemVvZigqZW50KSk7DQor DQorCXNwaW5fbG9jaygmbm90aWZ5X2xvY2spOw0KKwlsaXN0X2FkZCgmZW50LT5ub3RpZnlfZW50 cnksICZub3RpZnlfbGlzdCk7DQorCXNwaW5fdW5sb2NrKCZub3RpZnlfbG9jayk7DQorDQorCXsN CisJCWludCBpOw0KKwkJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTsNCisJDQorCQlwcmludGso Ik5vdGlmeSBncm91cCAleCBmb3IgaWR4OiAiLCBjdGwtPmdyb3VwKTsNCisNCisJCXJlcSA9IChz dHJ1Y3QgY25fbm90aWZ5X3JlcSAqKWN0bC0+ZGF0YTsNCisJCWZvciAoaT0wOyBpPGN0bC0+aWR4 X25vdGlmeV9udW07ICsraSwgKytyZXEpDQorCQl7DQorCQkJcHJpbnRrKCIldS0ldSAiLCByZXEt PmZpcnN0LCByZXEtPmZpcnN0K3JlcS0+cmFuZ2UtMSk7DQorCQl9DQorCQkNCisJCXByaW50aygi XG5Ob3RpZnkgZ3JvdXAgJXggZm9yIHZhbDogIiwgY3RsLT5ncm91cCk7DQorDQorCQlmb3IgKGk9 MDsgaTxjdGwtPnZhbF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKQ0KKwkJew0KKwkJCXByaW50aygi JXUtJXUgIiwgcmVxLT5maXJzdCwgcmVxLT5maXJzdCtyZXEtPnJhbmdlLTEpOw0KKwkJfQ0KKwkJ cHJpbnRrKCJcbiIpOw0KKwl9DQorfQ0KKw0KIHN0YXRpYyBpbnQgY25faW5pdCh2b2lkKQ0KIHsN CiAJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQogDQogCWRldi0+aW5wdXQgPSBjbl9pbnB1 dDsNCisJZGV2LT5pZC5pZHggPSBjbl9pZHg7DQorCWRldi0+aWQudmFsID0gY25fdmFsOw0KIA0K IAlkZXYtPm5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSh1bml0LCBkZXYtPmlucHV0KTsNCiAJ aWYgKCFkZXYtPm5scykgew0KQEAgLTI3NCwxMyArNDkzLDE0IEBADQogCQlyZXR1cm4gLUVJTlZB TDsNCiAJfQ0KIA0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIGNuX2FkZF9jYWxsYmFjaygmZGV2LT5p ZCwgImNvbm5lY3RvciIsICZjbl9jYWxsYmFjayk7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIGNuX2Zp bmkodm9pZCkNCiB7DQogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2Ow0KIA0KKwljbl9kZWxf Y2FsbGJhY2soJmRldi0+aWQpOw0KIAljbl9xdWV1ZV9mcmVlX2RldihkZXYtPmNiZGV2KTsNCiAJ aWYgKGRldi0+bmxzLT5za19zb2NrZXQpDQogCQlzb2NrX3JlbGVhc2UoZGV2LT5ubHMtPnNrX3Nv Y2tldCk7DQoNCg0KLS0tIG9yaWcvY29ubmVjdG9yLmgNCisrKyBtb2QvY29ubmVjdG9yLmgNCkBA IC0zNywxMiArMzcsMzUgQEANCiAJX191OAkJCWRhdGFbMF07DQogfTsNCiANCitzdHJ1Y3QgY25f bm90aWZ5X3JlcQ0KK3sNCisJX191MzIJCQlmaXJzdDsNCisJX191MzIJCQlyYW5nZTsNCit9Ow0K Kw0KK3N0cnVjdCBjbl9jdGxfbXNnDQorew0KKwlfX3UzMgkJCWlkeF9ub3RpZnlfbnVtOw0KKwlf X3UzMgkJCXZhbF9ub3RpZnlfbnVtOw0KKwlfX3UzMgkJCWdyb3VwOw0KKwlfX3UzMgkJCWxlbjsN CisJX191OAkJCWRhdGFbMF07DQorfTsNCisNCiAjaWZkZWYgX19LRVJORUxfXw0KIA0KICNpbmNs dWRlIDxuZXQvc29jay5oPg0KIA0KK3N0cnVjdCBjbl9jdGxfZW50cnkNCit7DQorCXN0cnVjdCBs aXN0X2hlYWQJbm90aWZ5X2VudHJ5Ow0KKwlzdHJ1Y3QgY25fY3RsX21zZwkqbXNnOw0KK307DQor DQogc3RydWN0IGNuX2Rldg0KIHsNCisJc3RydWN0IGNiX2lkIAkJaWQ7DQorDQogCXUzMgkJCXNl cSwgZ3JvdXBzOw0KIAlzdHJ1Y3Qgc29jayAJCSpubHM7DQogCXZvaWQgCQkJKCppbnB1dCkoc3Ry dWN0IHNvY2sgKnNrLCBpbnQgbGVuKTsNCkBAIC01Miw3ICs3NSw3IEBADQogDQogaW50IGNuX2Fk ZF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKiwgY2hhciAqLCB2b2lkICgqIGNhbGxiYWNrKSh2b2lk ICopKTsNCiB2b2lkIGNuX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKik7DQotdm9pZCBjbl9u ZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqKTsNCit2b2lkIGNuX25ldGxpbmtfc2VuZChzdHJ1 Y3QgY25fbXNnICosIHUzMik7DQogDQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8NCiAjZW5kaWYg LyogX19DT05ORUNUT1JfSCAqLw0KDQoNCi0tLSBvcmlnL3Vjb24uYw0KKysrIG1vZC91Y29uLmMN CkBAIC0xMTgsOCArMTE4LDcgQEANCiAJbF9sb2NhbC5ubF9ncm91cHMgPSAxOw0KIAlsX2xvY2Fs Lm5sX3BpZCA9IGdldHBpZCgpOw0KIA0KLQlpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICop JmxfbG9jYWwsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKSA9PQ0KLQkgICAgLTEpIHsNCisJ aWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZsX2xvY2FsLCBzaXplb2Yoc3RydWN0IHNv Y2thZGRyX25sKSkgPT0gLTEpIHsNCiAJCXBlcnJvcigiYmluZCIpOw0KIAkJY2xvc2Uocyk7DQog CQlyZXR1cm4gLTE7DQoNCg0KDQo= --=-TIMupFxjMR70PiTEfF2B-- --=-m0BUYYOFNFPI9i++uPZT Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBBTo5hIKTPhE+8wY0RAqLFAJ9iKrwKSkVvnspHxd8mJrSDl5tAMACeJFJu +63sxs3kU/TfJCP9uLORZak= =LlNH -----END PGP SIGNATURE----- --=-m0BUYYOFNFPI9i++uPZT--