From: "Lever, Charles" Subject: RFC: adding an "fs" directory under /sys Date: Sat, 17 Apr 2004 12:46:05 -0700 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <482A3FA0050D21419C269D13989C61130435DEFD@lavender-fe.eng.netapp.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C424B4.9EEC6849" Cc: "Trond Myklebust" , "Patrick Mochel" , Return-path: To: "linux-fsdevel" List-ID: This is a multi-part message in MIME format. ------_=_NextPart_001_01C424B4.9EEC6849 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable i've been working on a patch set that will expose I/O counters for NFS mount points. we're considering exposing these counters via /sys. i'm thinking this should go under /sys/fs, where there is one subdirectory in /sys/fs for each file system type available on the system. the patches are against 2.6.5. attached patch 04-sys-fs adds the mechanicals to allow each file system implementation to supply a subsystem structure that can be registered in /sys/fs when the file system registers with the kernel at module load / boot time. attached patch 05-sys-fs-nfs demonstrates what might be done with such a capability by providing specific attributes for each NFS mount point. attached patch 06-nfs-iostat implements NFS I/O statistics counters and exports them via /sys/fs. [ patch 07-rpc-metrics, not yet written, would extend this idea to include RPC client I/O statistics for each mount point ] i'd like some comments on this approach. 1. is it a good and appropriate usage of /sys to add an fs/ subdirectory for file system types? 2. i've used the kobject embedded in the super_block for the NFS specific pieces of this. should i instead add and use an embedded kobject in the nfs_server struct? 3. would it be better to have a /sys/mount kset that lists all the mounts on the system, and leave file system instance related info out of /sys/fs/ ? - Chuck Lever -- corporate: personal: ------_=_NextPart_001_01C424B4.9EEC6849 Content-Type: application/octet-stream; name="04-sys-fs.patch" Content-Transfer-Encoding: base64 Content-Description: 04-sys-fs.patch Content-Disposition: attachment; filename="04-sys-fs.patch" ZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDAzLW5mcy1vZGlyZWN0L2ZzL2RjYWNoZS5j IDA0LXN5cy1mcy9mcy9kY2FjaGUuYw0KLS0tIDAzLW5mcy1vZGlyZWN0L2ZzL2RjYWNoZS5jCTIw MDQtMDQtMDMgMjI6MzY6MjQuMDAwMDAwMDAwIC0wNTAwDQorKysgMDQtc3lzLWZzL2ZzL2RjYWNo ZS5jCTIwMDQtMDQtMTYgMTE6MzU6MTYuNTU3MDAwMDAwIC0wNDAwDQpAQCAtMTYzNyw2ICsxNjM3 LDcgQEAgdm9pZCBfX2luaXQgdmZzX2NhY2hlc19pbml0KHVuc2lnbmVkIGxvbg0KIAltbnRfaW5p dChtZW1wYWdlcyk7DQogCWJkZXZfY2FjaGVfaW5pdCgpOw0KIAljaHJkZXZfaW5pdCgpOw0KKwlm aWxlc3lzdGVtc19pbml0KCk7DQogfQ0KIA0KIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7DQpkaWZm IC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAgMDMtbmZzLW9kaXJlY3QvZnMvZmlsZXN5c3RlbXMu YyAwNC1zeXMtZnMvZnMvZmlsZXN5c3RlbXMuYw0KLS0tIDAzLW5mcy1vZGlyZWN0L2ZzL2ZpbGVz eXN0ZW1zLmMJMjAwNC0wNC0wMyAyMjozNzo0Mi4wMDAwMDAwMDAgLTA1MDANCisrKyAwNC1zeXMt ZnMvZnMvZmlsZXN5c3RlbXMuYwkyMDA0LTA0LTE2IDExOjM1OjE2LjU3MDAwNDAwMCAtMDQwMA0K QEAgLTExLDYgKzExLDcgQEANCiAjaW5jbHVkZSA8bGludXgva21vZC5oPg0KICNpbmNsdWRlIDxs aW51eC9pbml0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9rb2JqZWN0Lmg+DQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogDQogLyoNCkBAIC0yOSw2 ICszMCw4IEBADQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmaWxlX3N5c3RlbXM7 DQogc3RhdGljIHJ3bG9ja190IGZpbGVfc3lzdGVtc19sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsN CiANCitzdGF0aWMgZGVjbF9zdWJzeXMoZnMsIE5VTEwsIE5VTEwpOw0KKw0KIC8qIFdBUk5JTkc6 IFRoaXMgY2FuIGJlIHVzZWQgb25seSBpZiB3ZSBfYWxyZWFkeV8gb3duIGEgcmVmZXJlbmNlICov DQogdm9pZCBnZXRfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMpDQogew0K QEAgLTc2LDggKzc5LDEzIEBAIGludCByZWdpc3Rlcl9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5 c3QNCiAJcCA9IGZpbmRfZmlsZXN5c3RlbShmcy0+bmFtZSk7DQogCWlmICgqcCkNCiAJCXJlcyA9 IC1FQlVTWTsNCi0JZWxzZQ0KKwllbHNlIHsNCiAJCSpwID0gZnM7DQorCQlpZiAoZnMtPnN1YnN5 cykgew0KKwkJCWtzZXRfc2V0X2tzZXRfcyhmcy0+c3Vic3lzLCBmc19zdWJzeXMpOw0KKwkJCXJl cyA9IHN1YnN5c3RlbV9yZWdpc3Rlcihmcy0+c3Vic3lzKTsNCisJCX0NCisJfQ0KIAl3cml0ZV91 bmxvY2soJmZpbGVfc3lzdGVtc19sb2NrKTsNCiAJcmV0dXJuIHJlczsNCiB9DQpAQCAtMTA2LDYg KzExNCw4IEBAIGludCB1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3kNCiAJCWlm IChmcyA9PSAqdG1wKSB7DQogCQkJKnRtcCA9IGZzLT5uZXh0Ow0KIAkJCWZzLT5uZXh0ID0gTlVM TDsNCisJCQlpZiAoZnMtPnN1YnN5cykNCisJCQkJc3Vic3lzdGVtX3VucmVnaXN0ZXIoZnMtPnN1 YnN5cyk7DQogCQkJd3JpdGVfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7DQogCQkJcmV0dXJu IDA7DQogCQl9DQpAQCAtMjMzLDMgKzI0Myw4IEBAIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpn ZXRfZnNfdHlwZShjb24NCiB9DQogDQogRVhQT1JUX1NZTUJPTChnZXRfZnNfdHlwZSk7DQorDQor dm9pZCBmaWxlc3lzdGVtc19pbml0KHZvaWQpDQorew0KKwlzdWJzeXN0ZW1fcmVnaXN0ZXIoJmZz X3N1YnN5cyk7DQorfQ0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDAzLW5mcy1vZGly ZWN0L2ZzL3N1cGVyLmMgMDQtc3lzLWZzL2ZzL3N1cGVyLmMNCi0tLSAwMy1uZnMtb2RpcmVjdC9m cy9zdXBlci5jCTIwMDQtMDQtMDMgMjI6MzY6NTcuMDAwMDAwMDAwIC0wNTAwDQorKysgMDQtc3lz LWZzL2ZzL3N1cGVyLmMJMjAwNC0wNC0xNiAxMTozNToxNi41NzQwMDAwMDAgLTA0MDANCkBAIC0y Miw2ICsyMiw3IEBADQogDQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KICNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPg0KICNpbmNsdWRlIDxs aW51eC9zbGFiLmg+DQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCiAjaW5jbHVkZSA8bGludXgv c21wX2xvY2suaD4NCkBAIC04MSw2ICs4Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sg KmFsbG9jX3N1cGVyKHYNCiAJCXMtPmRxX29wID0gc2JfZHF1b3Rfb3BzOw0KIAkJcy0+c19xY29w ID0gc2JfcXVvdGFjdGxfb3BzOw0KIAkJcy0+c19vcCA9ICZkZWZhdWx0X29wOw0KKwkJa29iamVj dF9pbml0KCZzLT5rb2JqKTsNCiAJfQ0KIG91dDoNCiAJcmV0dXJuIHM7DQpkaWZmIC1YIC4uLy4u L2RvbnQtZGlmZiAtTmF1cnAgMDMtbmZzLW9kaXJlY3QvaW5jbHVkZS9saW51eC9mcy5oIDA0LXN5 cy1mcy9pbmNsdWRlL2xpbnV4L2ZzLmgNCi0tLSAwMy1uZnMtb2RpcmVjdC9pbmNsdWRlL2xpbnV4 L2ZzLmgJMjAwNC0wNC0wMyAyMjozNjo1Mi4wMDAwMDAwMDAgLTA1MDANCisrKyAwNC1zeXMtZnMv aW5jbHVkZS9saW51eC9mcy5oCTIwMDQtMDQtMTYgMTE6MzU6MTYuNjAwMDAwMDAwIC0wNDAwDQpA QCAtMjE5LDYgKzIxOSw3IEBAIGV4dGVybiB2b2lkIHVwZGF0ZV9hdGltZSAoc3RydWN0IGlub2Rl ICoNCiBleHRlcm4gdm9pZCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOw0KIGV4dGVybiB2b2lk IG1udF9pbml0KHVuc2lnbmVkIGxvbmcpOw0KIGV4dGVybiB2b2lkIGZpbGVzX2luaXQodW5zaWdu ZWQgbG9uZyk7DQorZXh0ZXJuIHZvaWQgZmlsZXN5c3RlbXNfaW5pdCh2b2lkKTsNCiANCiBzdHJ1 Y3QgYnVmZmVyX2hlYWQ7DQogdHlwZWRlZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssDQpAQCAtMTAzOCw2ICsxMDM5LDcgQEAgc3RydWN0IGZp bGVfc3lzdGVtX3R5cGUgew0KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsNCiAJc3RydWN0IGZpbGVf c3lzdGVtX3R5cGUgKiBuZXh0Ow0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZzX3N1cGVyczsNCisJc3Ry dWN0IHN1YnN5c3RlbSAqc3Vic3lzOw0KIH07DQogDQogc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRf c2JfYmRldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwNCg== ------_=_NextPart_001_01C424B4.9EEC6849 Content-Type: application/octet-stream; name="05-sys-fs-nfs.patch" Content-Transfer-Encoding: base64 Content-Description: 05-sys-fs-nfs.patch Content-Disposition: attachment; filename="05-sys-fs-nfs.patch" ZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA0LXN5cy1mcy9mcy9uZnMvaW5vZGUuYyAw NS1zeXMtZnMtbmZzL2ZzL25mcy9pbm9kZS5jDQotLS0gMDQtc3lzLWZzL2ZzL25mcy9pbm9kZS5j CTIwMDQtMDQtMTIgMjE6MTI6MDYuNzE1MDAwMDAwIC0wNDAwDQorKysgMDUtc3lzLWZzLW5mcy9m cy9uZnMvaW5vZGUuYwkyMDA0LTA0LTE2IDE4OjI2OjQ5LjU3MDAwMDAwMCAtMDQwMA0KQEAgLTE2 LDYgKzE2LDcgQEANCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQogI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2tv YmplY3QuaD4NCiANCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPg0KICNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4NCkBAIC00MiwxNCArNDMsMTMgQEANCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJ TkZTREJHX1ZGUw0KICNkZWZpbmUgTkZTX1BBUkFOT0lBIDENCiANCi0vKiBNYXhpbXVtIG51bWJl ciBvZiByZWFkYWhlYWQgcmVxdWVzdHMNCi0gKiBGSVhNRTogdGhpcyBzaG91bGQgcmVhbGx5IGJl IGEgc3lzY3RsIHNvIHRoYXQgdXNlcnMgbWF5IHR1bmUgaXQgdG8gc3VpdA0KLSAqICAgICAgICB0 aGVpciBuZWVkcy4gUGVvcGxlIHRoYXQgZG8gTkZTIG92ZXIgYSBzbG93IG5ldHdvcmssIG1pZ2h0 IGZvcg0KLSAqICAgICAgICBpbnN0YW5jZSB3YW50IHRvIHJlZHVjZSBpdCB0byBzb21ldGhpbmcg Y2xvc2VyIHRvIDEgZm9yIGltcHJvdmVkDQotICogICAgICAgIGludGVyYWN0aXZlIHJlc3BvbnNl Lg0KLSAqLw0KKy8qIE1heGltdW0gbnVtYmVyIG9mIHJlYWRhaGVhZCByZXF1ZXN0cyAqLw0KICNk ZWZpbmUgTkZTX01BWF9SRUFEQUhFQUQJKFJQQ19ERUZfU0xPVF9UQUJMRSAtIDEpDQogDQorLyog RG9uJ3QgdXNlIFJFQURESVJQTFVTIG9uIGRpcmVjdG9yaWVzIHRoYXQgd2UgYmVsaWV2ZSBhcmUg dG9vIGxhcmdlICovDQorI2RlZmluZSBORlNfTElNSVRfUkVBRERJUlBMVVMJKDggKiBQQUdFX1NJ WkUpDQorDQorDQogc3RhdGljIHZvaWQgbmZzX2ludmFsaWRhdGVfaW5vZGUoc3RydWN0IGlub2Rl ICopOw0KIHN0YXRpYyBpbnQgbmZzX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IG5mc19mYXR0ciAqLCB1bnNpZ25lZCBsb25nKTsNCiANCkBAIC0xNTgsNiArMTU4LDggQEAgbmZz X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQ0KIA0KIAluZnM0X3JlbmV3ZF9wcmVw YXJlX3NodXRkb3duKHNlcnZlcik7DQogDQorCW5mc19zdXBlcl91bnJlZ2lzdGVyKHNiKTsNCisN CiAJaWYgKHNlcnZlci0+Y2xpZW50ICE9IE5VTEwpDQogCQlycGNfc2h1dGRvd25fY2xpZW50KHNl cnZlci0+Y2xpZW50KTsNCiAJaWYgKHNlcnZlci0+Y2xpZW50X3N5cyAhPSBOVUxMKQ0KQEAgLTE3 MCw2ICsxNzIsNyBAQCBuZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpDQogCWRl c3Ryb3lfbmZzdjRfc3RhdGUoc2VydmVyKTsNCiANCiAJa2ZyZWUoc2VydmVyLT5ob3N0bmFtZSk7 DQorCWtmcmVlKHNlcnZlci0+ZGV2bmFtZSk7DQogfQ0KIA0KIHZvaWQNCkBAIC0zMzIsNyArMzM1 LDcgQEAgbmZzX3NiX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgcnBjXw0KIAlpZiAoc2It PnNfbWF4Ynl0ZXMgPiBNQVhfTEZTX0ZJTEVTSVpFKSANCiAJCXNiLT5zX21heGJ5dGVzID0gTUFY X0xGU19GSUxFU0laRTsgDQogDQotCS8qIFdlJ3JlIGFpcmJvcm5lIFNldCBzb2NrZXQgYnVmZmVy c2l6ZSAqLw0KKwkvKiBXZSdyZSBhaXJib3JuZS4gU2V0IHNvY2tldCBidWZmZXJzaXplICovDQog CXJwY19zZXRidWZzaXplKHNlcnZlci0+Y2xpZW50LCBzZXJ2ZXItPndzaXplICsgMTAwLCBzZXJ2 ZXItPnJzaXplICsgMTAwKTsNCiAJcmV0dXJuIDA7DQogCS8qIFlhcmdzLiBJdCBkaWRuJ3Qgd29y ayBvdXQuICovDQpAQCAtNDMyLDYgKzQzNSw3IEBAIG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIHMNCiAjaWZkZWYgQ09ORklHX05GU19WMw0KIAkJc2VydmVyLT5ycGNfb3Bz ID0gJm5mc192M19jbGllbnRvcHM7DQogCQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9SRUFERElS UExVUzsNCisJCXNlcnZlci0+cmVhZGRpcnBsdXNfbGltaXQgPSBORlNfTElNSVRfUkVBRERJUlBM VVM7DQogCQlpZiAoZGF0YS0+dmVyc2lvbiA8IDQpIHsNCiAJCQlwcmludGsoS0VSTl9OT1RJQ0Ug Ik5GUzogTkZTdjMgbm90IHN1cHBvcnRlZCBieSBtb3VudCBwcm9ncmFtLlxuIik7DQogCQkJZ290 byBvdXRfZmFpbDsNCkBAIC00OTksNiArNTAzLDggQEAgb3V0X3NodXRkb3duOg0KIG91dF9mYWls Og0KIAlpZiAoc2VydmVyLT5ob3N0bmFtZSkNCiAJCWtmcmVlKHNlcnZlci0+aG9zdG5hbWUpOw0K KwlpZiAoc2VydmVyLT5kZXZuYW1lKQ0KKwkJa2ZyZWUoc2VydmVyLT5kZXZuYW1lKTsNCiAJcmV0 dXJuIGVycjsNCiB9DQogDQpAQCAtNjU3LDkgKzY2Myw2IEBAIG5mc19pbml0X2xvY2tlZChzdHJ1 Y3QgaW5vZGUgKmlub2RlLCB2b2kNCiAJcmV0dXJuIDA7DQogfQ0KIA0KLS8qIERvbid0IHVzZSBS RUFERElSUExVUyBvbiBkaXJlY3RvcmllcyB0aGF0IHdlIGJlbGlldmUgYXJlIHRvbyBsYXJnZSAq Lw0KLSNkZWZpbmUgTkZTX0xJTUlUX1JFQURESVJQTFVTICg4KlBBR0VfU0laRSkNCi0NCiAvKg0K ICAqIFRoaXMgaXMgb3VyIGZyb250LWVuZCB0byBpZ2V0IHRoYXQgbG9va3MgdXAgaW5vZGVzIGJ5 IGZpbGUgaGFuZGxlDQogICogaW5zdGVhZCBvZiBpbm9kZSBudW1iZXIuDQpAQCAtNzA5LDcgKzcx Miw3IEBAIG5mc19maGdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QNCiAJCQlpbm9k ZS0+aV9vcCA9IE5GU19TQihzYiktPnJwY19vcHMtPmRpcl9pbm9kZV9vcHM7DQogCQkJaW5vZGUt PmlfZm9wID0gJm5mc19kaXJfb3BlcmF0aW9uczsNCiAJCQlpZiAobmZzX3NlcnZlcl9jYXBhYmxl KGlub2RlLCBORlNfQ0FQX1JFQURESVJQTFVTKQ0KLQkJCSAgICAmJiBmYXR0ci0+c2l6ZSA8PSBO RlNfTElNSVRfUkVBRERJUlBMVVMpDQorCQkJICAgICYmIGZhdHRyLT5zaXplIDw9IE5GU19TQihz YiktPnJlYWRkaXJwbHVzX2xpbWl0KQ0KIAkJCQlORlNfRkxBR1MoaW5vZGUpIHw9IE5GU19JTk9f QURWSVNFX1JEUExVUzsNCiAJCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkNCiAJ CQlpbm9kZS0+aV9vcCA9ICZuZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOw0KQEAgLTEzNjAs NiArMTM2MywxMyBAQCBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpuZnNfZ2V0X3NiKHN0DQog CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCiAJfQ0KIA0KKwlzZXJ2ZXItPmRldm5hbWUgPSBr bWFsbG9jKHN0cmxlbihkZXZfbmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFzZXJ2ZXIt PmRldm5hbWUpIHsNCisJCWtmcmVlKHNlcnZlcik7DQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCisJfQ0KKwlzdHJjcHkoc2VydmVyLT5kZXZuYW1lLCBkZXZfbmFtZSk7DQorDQogCXMgPSBz Z2V0KGZzX3R5cGUsIG5mc19jb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCBzZXJ2ZXIpOw0K IA0KIAlpZiAoSVNfRVJSKHMpIHx8IHMtPnNfcm9vdCkgew0KQEAgLTEzNzUsNiArMTM4NSwxMyBA QCBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpuZnNfZ2V0X3NiKHN0DQogCQlkZWFjdGl2YXRl X3N1cGVyKHMpOw0KIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOw0KIAl9DQorDQorCWVycm9yID0g bmZzX3N1cGVyX3JlZ2lzdGVyKHMsICZuZnNfc3Vic3lzKTsNCisJaWYgKGVycm9yKSB7DQorCQl1 cF93cml0ZSgmcy0+c191bW91bnQpOw0KKwkJZGVhY3RpdmF0ZV9zdXBlcihzKTsNCisJCXJldHVy biBFUlJfUFRSKGVycm9yKTsNCisJfQ0KIAlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsNCiAJcmV0 dXJuIHM7DQogfQ0KQEAgLTEzOTIsNiArMTQwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0 ZW1fdHlwZSBuZnNfZnNfdHkNCiAJLmdldF9zYgkJPSBuZnNfZ2V0X3NiLA0KIAkua2lsbF9zYgk9 IG5mc19raWxsX3N1cGVyLA0KIAkuZnNfZmxhZ3MJPSBGU19PRERfUkVOQU1FfEZTX1JFVkFMX0RP VHxGU19CSU5BUllfTU9VTlREQVRBLA0KKwkuc3Vic3lzCQk9ICZuZnNfc3Vic3lzLA0KIH07DQog DQogI2lmZGVmIENPTkZJR19ORlNfVjQNCkBAIC0xNjc5LDYgKzE2OTcsMTMgQEAgc3RhdGljIHN0 cnVjdCBzdXBlcl9ibG9jayAqbmZzNF9nZXRfc2Iocw0KIAkJZ290byBvdXRfZnJlZTsNCiAJfQ0K IA0KKwlzZXJ2ZXItPmRldm5hbWUgPSBrbWFsbG9jKHN0cmxlbihkZXZfbmFtZSkgKyAxLCBHRlBf S0VSTkVMKTsNCisJaWYgKCFzZXJ2ZXItPmRldm5hbWUpIHsNCisJCWtmcmVlKHNlcnZlcik7DQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCisJfQ0KKwlzdHJjcHkoc2VydmVyLT5kZXZuYW1l LCBkZXZfbmFtZSk7DQorDQogCXMgPSBzZ2V0KGZzX3R5cGUsIG5mczRfY29tcGFyZV9zdXBlciwg bmZzX3NldF9zdXBlciwgc2VydmVyKTsNCiANCiAJaWYgKElTX0VSUihzKSB8fCBzLT5zX3Jvb3Qp DQpAQCAtMTY5Miw2ICsxNzE3LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm5mczRf Z2V0X3NiKHMNCiAJCWRlYWN0aXZhdGVfc3VwZXIocyk7DQogCQlyZXR1cm4gRVJSX1BUUihlcnJv cik7DQogCX0NCisNCisJZXJyb3IgPSBuZnNfc3VwZXJfcmVnaXN0ZXIocywgJm5mczRfc3Vic3lz KTsNCisJaWYgKGVycm9yKSB7DQorCQl1cF93cml0ZSgmcy0+c191bW91bnQpOw0KKwkJZGVhY3Rp dmF0ZV9zdXBlcihzKTsNCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsNCisJfQ0KIAlzLT5zX2Zs YWdzIHw9IE1TX0FDVElWRTsNCiAJcmV0dXJuIHM7DQogb3V0X2VycjoNCkBAIC0xNzAxLDYgKzE3 MzMsOCBAQCBvdXRfZnJlZToNCiAJCWtmcmVlKHNlcnZlci0+bW50X3BhdGgpOw0KIAlpZiAoc2Vy dmVyLT5ob3N0bmFtZSkNCiAJCWtmcmVlKHNlcnZlci0+aG9zdG5hbWUpOw0KKwlpZiAoc2VydmVy LT5kZXZuYW1lKQ0KKwkJa2ZyZWUoc2VydmVyLT5kZXZuYW1lKTsNCiAJa2ZyZWUoc2VydmVyKTsN CiAJcmV0dXJuIHM7DQogfQ0KQEAgLTE3MTEsNiArMTc0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmls ZV9zeXN0ZW1fdHlwZSBuZnM0X2ZzX3QNCiAJLmdldF9zYgkJPSBuZnM0X2dldF9zYiwNCiAJLmtp bGxfc2IJPSBuZnNfa2lsbF9zdXBlciwNCiAJLmZzX2ZsYWdzCT0gRlNfT0REX1JFTkFNRXxGU19S RVZBTF9ET1R8RlNfQklOQVJZX01PVU5UREFUQSwNCisJLnN1YnN5cwkJPSAmbmZzNF9zdWJzeXMs DQogfTsNCiANCiAjZGVmaW5lIG5mczRfemVyb19zdGF0ZShuZnNpKSBcDQpkaWZmIC1YIC4uLy4u L2RvbnQtZGlmZiAtTmF1cnAgMDQtc3lzLWZzL2ZzL25mcy9NYWtlZmlsZSAwNS1zeXMtZnMtbmZz L2ZzL25mcy9NYWtlZmlsZQ0KLS0tIDA0LXN5cy1mcy9mcy9uZnMvTWFrZWZpbGUJMjAwNC0wNC0w MyAyMjozNjoyNi4wMDAwMDAwMDAgLTA1MDANCisrKyAwNS1zeXMtZnMtbmZzL2ZzL25mcy9NYWtl ZmlsZQkyMDA0LTA0LTE2IDExOjM4OjIxLjMzODAwMzAwMCAtMDQwMA0KQEAgLTUsNyArNSw3IEBA DQogb2JqLSQoQ09ORklHX05GU19GUykgKz0gbmZzLm8NCiANCiBuZnMteSAJCQk6PSBkaXIubyBm aWxlLm8gaW5vZGUubyBuZnMyeGRyLm8gcGFnZWxpc3QubyBcDQotCQkJICAgcHJvYy5vIHJlYWQu byBzeW1saW5rLm8gdW5saW5rLm8gd3JpdGUubw0KKwkJCSAgIHByb2MubyByZWFkLm8gc3ltbGlu ay5vIHVubGluay5vIHdyaXRlLm8gc3lzLm8NCiBuZnMtJChDT05GSUdfUk9PVF9ORlMpCSs9IG5m c3Jvb3QubyBtb3VudF9jbG50Lm8gICAgICANCiBuZnMtJChDT05GSUdfTkZTX1YzKQkrPSBuZnMz cHJvYy5vIG5mczN4ZHIubw0KIG5mcy0kKENPTkZJR19ORlNfVjQpCSs9IG5mczRwcm9jLm8gbmZz NHhkci5vIG5mczRzdGF0ZS5vIG5mczRyZW5ld2QubyBcDQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlm ZiAtTmF1cnAgMDQtc3lzLWZzL2ZzL25mcy9zeXMuYyAwNS1zeXMtZnMtbmZzL2ZzL25mcy9zeXMu Yw0KLS0tIDA0LXN5cy1mcy9mcy9uZnMvc3lzLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAw MDAgLTA1MDANCisrKyAwNS1zeXMtZnMtbmZzL2ZzL25mcy9zeXMuYwkyMDA0LTA0LTE3IDE1OjAw OjU4LjIzNTAwMDAwMCAtMDQwMA0KQEAgLTAsMCArMSw1MjEgQEANCisvKg0KKyAqICBsaW51eC9m cy9uZnMvc3lzLmMNCisgKg0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgIENodWNrIExldmVyIDxj ZWxAbmV0YXBwLmNvbT4NCisgKg0KKyAqICBFeHBvcnQgTkZTIGNsaWVudCBhdHRyaWJ1dGVzIHZp YSAvc3lzDQorICoNCisgKiAgTkZTIGNsaWVudCBoYXMgYSBrb2JqZWN0IHN1YnN5c3RlbSBvZiBp dHMgb3duLCB1bmRlciB3aGljaCBhcHBlYXJzDQorICogIGEga29iamVjdCBmb3IgZWFjaCBtb3Vu dCBwb2ludDsgaWUsIGVhY2ggbW91bnQgcG9pbnQgaXMgcmVwcmVzZW50ZWQNCisgKiAgYnkgYSBk aXJlY3RvcnkgdW5kZXIgL3N5cy9mcy9uZnMgLg0KKyAqDQorICogIEluIGVhY2ggbW91bnQgcG9p bnQgZGlyZWN0b3J5LCB0aGVyZSBhcmUgYSBzZXQgb2YgZmlsZXMgYW5kDQorICogIGRpcmVjdG9y aWVzIHdoaWNoIGV4cG9ydCBzdGF0aXN0aWNhbCBkYXRhIHJlbGF0ZWQgdG8gdGhhdCBtb3VudA0K KyAqICBwb2ludCwgYW5kIHByb3ZpZGUgbWV0aG9kcyBmb3Igc2V0dGluZyBORlMgY2xpZW50IHBh cmFtZXRlcnMgdGhhdA0KKyAqICBhcmUgbm90IGF2YWlsYWJsZSB2aWEgdGhlIG1vdW50IGNvbW1h bmQgKHRoZSBhZHZhbnRhZ2UgYmVpbmcgdGhhdA0KKyAqICBvbmUgY2FuIGNoYW5nZSB0aGVzZSB3 aGlsZSB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCkuDQorICovDQorDQorI2luY2x1ZGUgPGxp bnV4L2tvYmplY3QuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxp bnV4L2luaXQuaD4NCisNCisjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+DQorI2luY2x1ZGUgPGxp bnV4L25mc19tb3VudC5oPg0KKw0KKw0KKy8qDQorICogIEF0dHJpYnV0ZXMgdGhhdCBhcHBseSB0 byB0aGUgd2hvbGUgTkZTIGNsaWVudA0KKyAqLw0KKw0KK3N0cnVjdCBuZnNfc3Vic3lzX2F0dHIg ew0KKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7DQorCXNzaXplX3QJCQkoKnNob3cpKGNoYXIgKmJ1 Zik7DQorCXNzaXplX3QJCQkoKnN0b3JlKShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7 DQorfTsNCisNCisjZGVmaW5lIE5GU19TVUJTWVNfUk9fQVRUUihfbmFtZSkJCQkJXA0KK3N0YXRp YyBzdHJ1Y3QgbmZzX3N1YnN5c19hdHRyIG5mc19zdWJzeXNfIyNfbmFtZSA9IHsJCVwNCisJLmF0 dHIJPSB7CQkJCQkJXA0KKwkJLm5hbWUJPSBfX3N0cmluZ2lmeShfbmFtZSksCQkJXA0KKwkJLm1v ZGUJPSBTX0lSVUdPLAkJCQlcDQorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXA0KKwl9LAkJ CQkJCQlcDQorCS5zaG93CT0gbmZzX3N1YnN5c18jI19uYW1lIyNfc2hvdywJCQlcDQorfQ0KKw0K KyNkZWZpbmUgTkZTX1NVQlNZU19SV19BVFRSKF9uYW1lKQkJCQlcDQorc3RhdGljIHN0cnVjdCBu ZnNfc3Vic3lzX2F0dHIgbmZzX3N1YnN5c18jI19uYW1lID0gewkJXA0KKwkuYXR0cgk9IHsJCQkJ CQlcDQorCQkubmFtZQk9IF9fc3RyaW5naWZ5KF9uYW1lKSwJCQlcDQorCQkubW9kZQk9IFNfSVdV U1IgfCBTX0lSVUdPLAkJCVwNCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCQlcDQorCX0sCQkJ CQkJCVwNCisJLnNob3cJPSBuZnNfc3Vic3lzXyMjX25hbWUjI19zaG93LAkJCVwNCisJLnN0b3Jl CT0gbmZzX3N1YnN5c18jI19uYW1lIyNfc3RvcmUsCQkJXA0KK30NCisNCitzdGF0aWMgc3NpemVf dCANCituZnNfc3Vic3lzX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkNCit7DQorCXNzaXplX3QgcmV0ID0gMDsNCisJc3Ry dWN0IG5mc19zdWJzeXNfYXR0ciAqbmZzX2F0dHIgPQ0KKwkJCWNvbnRhaW5lcl9vZihhdHRyLCBz dHJ1Y3QgbmZzX3N1YnN5c19hdHRyLCBhdHRyKTsNCisNCisJaWYgKG5mc19hdHRyLT5zaG93KQ0K KwkJcmV0ID0gbmZzX2F0dHItPnNob3cocGFnZSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBzc2l6ZV90DQorbmZzX3N1YnN5c19hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICpr b2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCANCisJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQ0KK3sNCisJc3NpemVfdCByZXQgPSAwOw0KKwlzdHJ1Y3QgbmZzX3N1YnN5 c19hdHRyICpuZnNfYXR0ciA9DQorCQkJY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBuZnNfc3Vi c3lzX2F0dHIsIGF0dHIpOw0KKw0KKwlpZiAobmZzX2F0dHItPnN0b3JlKQ0KKwkJcmV0ID0gbmZz X2F0dHItPnN0b3JlKGJ1ZiwgY291bnQpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0 aWMgc3RydWN0IHN5c2ZzX29wcyBuZnNfc3Vic3lzX29wcyA9IHsNCisJLnNob3cJCT0gbmZzX3N1 YnN5c19hdHRyX3Nob3csDQorCS5zdG9yZQkJPSBuZnNfc3Vic3lzX2F0dHJfc3RvcmUsDQorfTsN CisNCisvKg0KKyAqIGRlYnVnDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHRyYWNl IGRlYnVnZ2luZyBtZXNzYWdlcy4NCisgKg0KKyAqIFRvIGRpc2FibGUgZGVidWdnaW5nLCBzaW1w bHkgc3RvcmUgYSB6ZXJvLg0KKyAqLw0KK3N0YXRpYyBzc2l6ZV90DQorbmZzX3N1YnN5c19kZWJ1 Z19zaG93KGNoYXIgKmJ1ZikNCit7DQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsDQor CQluZnNfZGVidWcpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdA0KK25mc19zdWJzeXNfZGVidWdf c3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpDQorew0KKwl1MzIgbmV3X3ZhbHVl Ow0KKw0KKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1IiwgJm5ld192YWx1ZSkgIT0gMSkNCisJCXJldHVy biAtRUlOVkFMOw0KKwlpZiAobmV3X3ZhbHVlIDw9IE5GU0RCR19BTEwpDQorCQluZnNfZGVidWcg PSBuZXdfdmFsdWU7DQorDQorCXJldHVybiBjb3VudDsNCit9DQorDQorTkZTX1NVQlNZU19SV19B VFRSKGRlYnVnKTsNCisNCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzX3N1YnN5c19hdHRy c1tdID0gew0KKyAgICAgICAgJm5mc19zdWJzeXNfZGVidWcuYXR0ciwNCit9Ow0KKw0KK3N0YXRp YyBzdHJ1Y3Qga29ial90eXBlIGt0eXBlX25mc19zdWJzeXMgPSB7DQorCS5zeXNmc19vcHMJPSAm bmZzX3N1YnN5c19vcHMsDQorCS5kZWZhdWx0X2F0dHJzCT0gbmZzX3N1YnN5c19hdHRycywNCit9 Ow0KKw0KK3N0cnVjdCBzdWJzeXN0ZW0gbmZzX3N1YnN5cwk9IHsNCisJLmtzZXQJPSB7DQorCQku a29iagk9IHsNCisJCQkubmFtZQk9ICJuZnMiLA0KKwkJCS5rdHlwZQk9ICZrdHlwZV9uZnNfc3Vi c3lzLA0KKwkJfSwNCisJfSwNCit9Ow0KKw0KK3N0cnVjdCBzdWJzeXN0ZW0gbmZzNF9zdWJzeXMJ PSB7DQorCS5rc2V0CT0gew0KKwkJLmtvYmoJPSB7DQorCQkJLm5hbWUJPSAibmZzNCIsDQorCQkJ Lmt0eXBlCT0gJmt0eXBlX25mc19zdWJzeXMsDQorCQl9LA0KKwl9LA0KK307DQorDQorDQorLyoN CisgKiAgQXR0cmlidXRlcyB0aGF0IGFwcGx5IG9ubHkgdG8gYSBzaW5nbGUgbW91bnQgcG9pbnQN CisgKi8NCisNCitzdHJ1Y3QgbmZzX21vdW50X2F0dHIgew0KKwlzdHJ1Y3QgYXR0cmlidXRlCWF0 dHI7DQorCXNzaXplX3QJCQkoKnNob3cpKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNoYXIg KmJ1Zik7DQorCXNzaXplX3QJCQkoKnN0b3JlKShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLA0K KwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOw0KK307DQorDQorI2RlZmluZSBO RlNfTU9VTlRfUk9fQVRUUihfbmFtZSkJCQkJXA0KK3N0YXRpYyBzdHJ1Y3QgbmZzX21vdW50X2F0 dHIgbmZzX21vdW50XyMjX25hbWUgPSB7CQlcDQorCS5hdHRyCT0gewkJCQkJCVwNCisJCS5uYW1l CT0gX19zdHJpbmdpZnkoX25hbWUpLAkJCVwNCisJCS5tb2RlCT0gU19JUlVHTywJCQkJXA0KKwkJ Lm93bmVyCT0gVEhJU19NT0RVTEUsCQkJCVwNCisJfSwJCQkJCQkJXA0KKwkuc2hvdwk9IG5mc19t b3VudF8jI19uYW1lIyNfc2hvdywJCQlcDQorfQ0KKw0KKyNkZWZpbmUgTkZTX01PVU5UX1JXX0FU VFIoX25hbWUpCQkJCVwNCitzdGF0aWMgc3RydWN0IG5mc19tb3VudF9hdHRyIG5mc19tb3VudF8j I19uYW1lID0gewkJXA0KKwkuYXR0cgk9IHsJCQkJCQlcDQorCQkubmFtZQk9IF9fc3RyaW5naWZ5 KF9uYW1lKSwJCQlcDQorCQkubW9kZQk9IFNfSVdVU1IgfCBTX0lSVUdPLAkJCVwNCisJCS5vd25l cgk9IFRISVNfTU9EVUxFLAkJCQlcDQorCX0sCQkJCQkJCVwNCisJLnNob3cJPSBuZnNfbW91bnRf IyNfbmFtZSMjX3Nob3csCQkJXA0KKwkuc3RvcmUJPSBuZnNfbW91bnRfIyNfbmFtZSMjX3N0b3Jl LAkJCVwNCit9DQorDQorLyoNCisgKiBUaGVzZSBtYXAgdGhlIGVtYmVkZGVkIGtvYmplY3QgaW4g YSBzdXBlcmJsb2NrIGludG8gYW4gbmZzX3NlcnZlciBzdHJ1Y3QuDQorICovDQorDQorc3RhdGlj IHNzaXplX3QgDQorbmZzX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkNCit7DQorCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9 IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2ssIGtvYmopOw0KKwlzdHJ1Y3Qg bmZzX21vdW50X2F0dHIgKm5mc19hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBuZnNf bW91bnRfYXR0ciwgYXR0cik7DQorCXNzaXplX3QgcmV0ID0gMDsNCisNCisJaWYgKG5mc19hdHRy LT5zaG93KQ0KKwkJcmV0ID0gbmZzX2F0dHItPnNob3coTkZTX1NCKHMpLCBwYWdlKTsNCisNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QNCituZnNfYXR0cl9zdG9yZShzdHJ1 Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgDQorCSAgICAgICBjb25z dCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCit7DQorCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9 IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2ssIGtvYmopOw0KKwlzdHJ1Y3Qg bmZzX21vdW50X2F0dHIgKm5mc19hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBuZnNf bW91bnRfYXR0ciwgYXR0cik7DQorCXNzaXplX3QgcmV0ID0gMDsNCisNCisJaWYgKG5mc19hdHRy LT5zdG9yZSkNCisJCXJldCA9IG5mc19hdHRyLT5zdG9yZShORlNfU0IocyksIGJ1ZiwgY291bnQp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBuZnNf bW91bnRfb3BzID0gew0KKwkuc2hvdwkJPSBuZnNfYXR0cl9zaG93LA0KKwkuc3RvcmUJCT0gbmZz X2F0dHJfc3RvcmUsDQorfTsNCisNCisNCisvKg0KKyAqICBNb3VudCBjaGFyYWN0ZXJpc3RpY3MN CisgKi8NCisNCisjZGVmaW5lIE5GU19NT1VOVF9PUFRJT05fU0hPVyhfbmFtZSwgX2Zvcm1hdCwg X3ZhcikJCVwNCitzdGF0aWMgc3NpemVfdAkJCQkJCQlcDQorbmZzX21vdW50XyMjX25hbWUjI19z aG93KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNoYXIgKmJ1ZikJXA0KK3sJCQkJCQkJCVwN CisJcmV0dXJuIHNwcmludGYoYnVmLCBfZm9ybWF0LAkJCQlcDQorCQlfdmFyKTsJCQkJCQlcDQor fQ0KKw0KKy8qDQorICogZWxhcHNlZF90aW1lDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSByZXBv cnRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGlzIGZpbGUgc3lzdGVtDQorICogaGFzIGJlZW4g bW91bnRlZC4NCisgKi8NCitORlNfTU9VTlRfT1BUSU9OX1NIT1coZWxhcHNlZF90aW1lLCAiJWx1 IHNlY29uZHNcbiIsDQorCQkoamlmZmllcyAtIHNlcnZlci0+bW91bnRfdGltZSkgLyBIWikNCitO RlNfTU9VTlRfUk9fQVRUUihlbGFwc2VkX3RpbWUpOw0KKw0KKy8qDQorICogbWF4X3JlYWRhaGVh ZA0KKyAqDQorICogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBw YWdlcyB0aGUgVkZTIG1heQ0KKyAqIGNob29zZSB0byByZWFkIGFoZWFkIGZpbGVzIG9uIHRoaXMg ZmlsZSBzeXN0ZW0uDQorICogDQorICogVG8gZGlzYWJsZSByZWFkYWhlYWQgb24gdGhpcyBtb3Vu dHBvaW50LCBzaW1wbHkgc2V0IHRoZSBudW1iZXINCisgKiBvZiBwYWdlcyB0byByZWFkIGFoZWFk IHRvIHplcm8uDQorICovDQorTkZTX01PVU5UX09QVElPTl9TSE9XKG1heF9yZWFkYWhlYWQsICIl bHUgcGFnZXNcbiIsDQorCQlzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMpDQorDQor c3RhdGljIHNzaXplX3QNCituZnNfbW91bnRfbWF4X3JlYWRhaGVhZF9zdG9yZShzdHJ1Y3QgbmZz X3NlcnZlciAqc2VydmVyLCBjb25zdCBjaGFyICpidWYsDQorCXNpemVfdCBjb3VudCkNCit7DQor CWxvbmcgaW50IG5ld192YWx1ZTsNCisNCisJaWYgKHNzY2FuZihidWYsICIlbHUiLCAmbmV3X3Zh bHVlKSAhPSAxKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCWlmIChuZXdfdmFsdWUgPCAyMDQ3VUwp DQorCQlzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBuZXdfdmFsdWU7DQorDQor CXJldHVybiBjb3VudDsNCit9DQorDQorTkZTX01PVU5UX1JXX0FUVFIobWF4X3JlYWRhaGVhZCk7 DQorDQorLyoNCisgKiByZWFkZGlycGx1c19saW1pdA0KKyAqDQorICogVGhpcyBzZXR0aW5nIGNv bnRyb2xzIHdoZW4gdGhlIE5GUyBjbGllbnQgY2hvb3NlcyB0byB1c2UNCisgKiB2MyBSRUFERElS UExVUyBvdmVyIHYzIFJFQURESVIuICBUaGUgY2hvaWNlIGlzIGJhc2VkIG9uIHRoZQ0KKyAqIGZp bGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3J5LCBhcyByZXBvcnRlZCBieSB0aGUgc2VydmVyLg0KKyAq DQorICogVG8gZGlzYWJsZSB0aGUgdXNlIG9mIFJFQURESVJQTFVTIG9uIHRoaXMgbW91bnQgcG9p bnQsIHNpbXBseQ0KKyAqIHNldCB0aGUgcmVhZGRpcnBsdXNfbGltaXQgdmFsdWUgdG8gemVyby4N CisgKi8NCitORlNfTU9VTlRfT1BUSU9OX1NIT1cocmVhZGRpcnBsdXNfbGltaXQsICIldSBieXRl c1xuIiwNCisJCXNlcnZlci0+cmVhZGRpcnBsdXNfbGltaXQpDQorDQorc3RhdGljIHNzaXplX3QN CituZnNfbW91bnRfcmVhZGRpcnBsdXNfbGltaXRfc3RvcmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNl cnZlciwgY29uc3QgY2hhciAqYnVmLA0KKwlzaXplX3QgY291bnQpDQorew0KKwl1MzIgbmV3X3Zh bHVlOw0KKw0KKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1IiwgJm5ld192YWx1ZSkgIT0gMSkNCisJCXJl dHVybiAtRUlOVkFMOw0KKwlpZiAobmV3X3ZhbHVlIDwgMTY3NzcyMTYpDQorCQlzZXJ2ZXItPnJl YWRkaXJwbHVzX2xpbWl0ID0gbmV3X3ZhbHVlOw0KKw0KKwlyZXR1cm4gY291bnQ7DQorfQ0KKw0K K05GU19NT1VOVF9SV19BVFRSKHJlYWRkaXJwbHVzX2xpbWl0KTsNCisNCisvKg0KKyAqICBNb3Vu dCBvcHRpb25zDQorICovDQorDQorLyoNCisgKiB2ZXJzaW9uDQorICoNCisgKiBUaGlzIGF0dHJp YnV0ZSByZXBvcnRzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZvciB0aGlzIGZpbGUgc3lzdGVtLg0K KyAqLw0KK05GU19NT1VOVF9PUFRJT05fU0hPVyh2ZXJzaW9uLCAiJWRcbiIsIHNlcnZlci0+cnBj X29wcy0+dmVyc2lvbikNCitORlNfTU9VTlRfUk9fQVRUUih2ZXJzaW9uKTsNCisNCisvKg0KKyAq IHJzaXplDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSByZXBvcnRzIHRoZSBtYXhpbXVtIG51bWJl ciBvZiBieXRlcyBhbGxvd2VkDQorICogaW4gYW4gTkZTIHJlYWQgb3BlcmF0aW9uIG9uIHRoaXMg bW91bnQgcG9pbnQuDQorICovDQorTkZTX01PVU5UX09QVElPTl9TSE9XKHJzaXplLCAiJWQgYnl0 ZXNcbiIsIHNlcnZlci0+cnNpemUpDQorTkZTX01PVU5UX1JPX0FUVFIocnNpemUpOw0KKw0KKy8q DQorICogd3NpemUNCisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIHJlcG9ydHMgdGhlIG1heGltdW0g bnVtYmVyIG9mIGJ5dGVzIGFsbG93ZWQNCisgKiBpbiBhbiBORlMgd3JpdGUgb3BlcmF0aW9uIG9u IHRoaXMgbW91bnQgcG9pbnQuDQorICovDQorTkZTX01PVU5UX09QVElPTl9TSE9XKHdzaXplLCAi JWQgYnl0ZXNcbiIsIHNlcnZlci0+d3NpemUpDQorTkZTX01PVU5UX1JPX0FUVFIod3NpemUpOw0K Kw0KKy8qDQorICogYWNyZWdtaW4NCisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIHJlcG9ydHMgdGhl IG1pbmltdW0gYXR0cmlidXRlIGNhY2hlIHRpbWVvdXQNCisgKiB2YWx1ZSBmb3IgcmVndWxhciBm aWxlcyBpbiBlZmZlY3QgZm9yIHRoaXMgbW91bnQgcG9pbnQuDQorICovDQorTkZTX01PVU5UX09Q VElPTl9TSE9XKGFjcmVnbWluLCAiJWQgc2Vjb25kc1xuIiwgc2VydmVyLT5hY3JlZ21pbiAvIEha KQ0KK05GU19NT1VOVF9ST19BVFRSKGFjcmVnbWluKTsNCisNCisvKg0KKyAqIGFjcmVnbWF4DQor ICoNCisgKiBUaGlzIGF0dHJpYnV0ZSByZXBvcnRzIHRoZSBtYXhpbXVtIGF0dHJpYnV0ZSBjYWNo ZSB0aW1lb3V0DQorICogdmFsdWUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZWZmZWN0IGZvciB0aGlz IG1vdW50IHBvaW50Lg0KKyAqLw0KK05GU19NT1VOVF9PUFRJT05fU0hPVyhhY3JlZ21heCwgIiVk IHNlY29uZHNcbiIsIHNlcnZlci0+YWNyZWdtYXggLyBIWikNCitORlNfTU9VTlRfUk9fQVRUUihh Y3JlZ21heCk7DQorDQorLyoNCisgKiBhY2Rpcm1pbg0KKyAqDQorICogVGhpcyBhdHRyaWJ1dGUg cmVwb3J0cyB0aGUgbWluaW11bSBhdHRyaWJ1dGUgY2FjaGUgdGltZW91dA0KKyAqIHZhbHVlIGZv ciBkaXJlY3RvcmllcyBpbiBlZmZlY3QgZm9yIHRoaXMgbW91bnQgcG9pbnQuDQorICovDQorTkZT X01PVU5UX09QVElPTl9TSE9XKGFjZGlybWluLCAiJWQgc2Vjb25kc1xuIiwgc2VydmVyLT5hY2Rp cm1pbiAvIEhaKQ0KK05GU19NT1VOVF9ST19BVFRSKGFjZGlybWluKTsNCisNCisvKg0KKyAqIGFj ZGlybWF4DQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSByZXBvcnRzIHRoZSBtYXhpbXVtIGF0dHJp YnV0ZSBjYWNoZSB0aW1lb3V0DQorICogdmFsdWUgZm9yIGRpcmVjdG9yaWVzIGluIGVmZmVjdCBm b3IgdGhpcyBtb3VudCBwb2ludC4NCisgKi8NCitORlNfTU9VTlRfT1BUSU9OX1NIT1coYWNkaXJt YXgsICIlZCBzZWNvbmRzXG4iLCBzZXJ2ZXItPmFjZGlybWF4IC8gSFopDQorTkZTX01PVU5UX1JP X0FUVFIoYWNkaXJtYXgpOw0KKw0KKy8qDQorICogaG9zdG5hbWUNCisgKg0KKyAqIFRoaXMgYXR0 cmlidXRlIHJlcG9ydHMgdGhlIE5GUyBzZXJ2ZXIncyBob3N0bmFtZS4NCisgKi8NCitORlNfTU9V TlRfT1BUSU9OX1NIT1coaG9zdG5hbWUsICIlc1xuIiwgc2VydmVyLT5ob3N0bmFtZSkNCitORlNf TU9VTlRfUk9fQVRUUihob3N0bmFtZSk7DQorDQorLyoNCisgKiBleHBvcnRfcGF0aA0KKyAqDQor ICogVGhpcyBhdHRyaWJ1dGUgcmVwb3J0cyB0aGUgc2VydmVyIGV4cG9ydCBwYXRoIGZvciB0aGlz IGZpbGUgc3lzdGVtLg0KKyAqLw0KK05GU19NT1VOVF9PUFRJT05fU0hPVyhleHBvcnRfcGF0aCwg IiVzXG4iLCBzZXJ2ZXItPmRldm5hbWUpDQorTkZTX01PVU5UX1JPX0FUVFIoZXhwb3J0X3BhdGgp Ow0KKw0KKy8qDQorICogc29mdA0KKyAqDQorICogVGhpcyBhdHRyaWJ1dGUgcmVwb3J0cyB3aGV0 aGVyIHNvZnQgdGltZW91dHMgYXJlIGluIGVmZmVjdCBmb3IgdGhpcw0KKyAqIG1vdW50IHBvaW50 Lg0KKyAqLw0KK05GU19NT1VOVF9PUFRJT05fU0hPVyhzb2Z0LCAiJXNcbiIsDQorCQkoKHNlcnZl ci0+ZmxhZ3MgJiBORlNfTU9VTlRfU09GVCkgPyAieWVzIiA6ICJubyIpKQ0KK05GU19NT1VOVF9S T19BVFRSKHNvZnQpOw0KKw0KKy8qDQorICogaW50cg0KKyAqDQorICogVGhpcyBhdHRyaWJ1dGUg cmVwb3J0cyB3aGV0aGVyIGZpbGUgd2FpdHMgY2FuIGJlIGludGVycnVwdGVkIG9uIHRoaXMNCisg KiBtb3VudCBwb2ludC4NCisgKi8NCitORlNfTU9VTlRfT1BUSU9OX1NIT1coaW50ciwgIiVzXG4i LA0KKwkJKChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX0lOVFIpID8gInllcyIgOiAibm8iKSk7 DQorTkZTX01PVU5UX1JPX0FUVFIoaW50cik7DQorDQorLyoNCisgKiBjdG8NCisgKg0KKyAqIFRo aXMgYXR0cmlidXRlIHJlcG9ydHMgd2hldGhlciBjbG9zZS10by1vcGVuIGNhY2hlIGNvaGVyZW5j eSBpcw0KKyAqIGluIGVmZmVjdCBmb3IgdGhpcyBtb3VudCBwb2ludC4NCisgKi8NCitORlNfTU9V TlRfT1BUSU9OX1NIT1coY3RvLCAiJXNcbiIsDQorCQkoKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9V TlRfTk9DVE8pID8gIm5vIiA6ICJ5ZXMiKSk7DQorTkZTX01PVU5UX1JPX0FUVFIoY3RvKTsNCisN CisvKg0KKyAqIGxvY2sNCisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIHJlcG9ydHMgd2hldGhlciB0 aGUgTkxNIGlzIGluIHVzZSBvbiB0aGlzIG1vdW50IHBvaW50Lg0KKyAqLw0KK05GU19NT1VOVF9P UFRJT05fU0hPVyhsb2NrLCAiJXNcbiIsDQorCQkoKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRf Tk9OTE0pID8gIm5vIiA6ICJ5ZXMiKSk7DQorTkZTX01PVU5UX1JPX0FUVFIobG9jayk7DQorDQor LyoNCisgKiBzZWNfZmxhdm9yDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSByZXBvcnRzIHdoaWNo IHNlY3VyaXR5IGZsYXZvciBpcyBpbiBlZmZlY3QgZm9yIHRoaXMNCisgKiBtb3VudCBwb2ludC4g IE5lZWRzIHdvcmsuDQorICovDQorc3RhdGljIHNzaXplX3QNCituZnNfbW91bnRfc2VjX2ZsYXZv cl9zaG93KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNoYXIgKmJ1ZikNCit7DQorCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVzXG4iLA0KKwkJKChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX1NF Q0ZMQVZPVVIpID8gInNwZWNpYWwiIDogImF1dGhfc3lzIikpOw0KK30NCitORlNfTU9VTlRfUk9f QVRUUihzZWNfZmxhdm9yKTsNCisNCisNCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzX21v dW50X2F0dHJzW10gPSB7DQorCSZuZnNfbW91bnRfdmVyc2lvbi5hdHRyLA0KKwkmbmZzX21vdW50 X3JzaXplLmF0dHIsDQorCSZuZnNfbW91bnRfd3NpemUuYXR0ciwNCisJJm5mc19tb3VudF9hY3Jl Z21pbi5hdHRyLA0KKwkmbmZzX21vdW50X2FjcmVnbWF4LmF0dHIsDQorCSZuZnNfbW91bnRfYWNk aXJtaW4uYXR0ciwNCisJJm5mc19tb3VudF9hY2Rpcm1heC5hdHRyLA0KKwkmbmZzX21vdW50X2hv c3RuYW1lLmF0dHIsDQorCSZuZnNfbW91bnRfZXhwb3J0X3BhdGguYXR0ciwNCisJJm5mc19tb3Vu dF9zb2Z0LmF0dHIsDQorCSZuZnNfbW91bnRfaW50ci5hdHRyLA0KKwkmbmZzX21vdW50X2N0by5h dHRyLA0KKwkmbmZzX21vdW50X2xvY2suYXR0ciwNCisJJm5mc19tb3VudF9zZWNfZmxhdm9yLmF0 dHIsDQorCSZuZnNfbW91bnRfZWxhcHNlZF90aW1lLmF0dHIsDQorCSZuZnNfbW91bnRfbWF4X3Jl YWRhaGVhZC5hdHRyLA0KK307DQorDQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5mczNfbW91 bnRfYXR0cnNbXSA9IHsNCisJJm5mc19tb3VudF92ZXJzaW9uLmF0dHIsDQorCSZuZnNfbW91bnRf cnNpemUuYXR0ciwNCisJJm5mc19tb3VudF93c2l6ZS5hdHRyLA0KKwkmbmZzX21vdW50X2FjcmVn bWluLmF0dHIsDQorCSZuZnNfbW91bnRfYWNyZWdtYXguYXR0ciwNCisJJm5mc19tb3VudF9hY2Rp cm1pbi5hdHRyLA0KKwkmbmZzX21vdW50X2FjZGlybWF4LmF0dHIsDQorCSZuZnNfbW91bnRfaG9z dG5hbWUuYXR0ciwNCisJJm5mc19tb3VudF9leHBvcnRfcGF0aC5hdHRyLA0KKwkmbmZzX21vdW50 X3NvZnQuYXR0ciwNCisJJm5mc19tb3VudF9pbnRyLmF0dHIsDQorCSZuZnNfbW91bnRfY3RvLmF0 dHIsDQorCSZuZnNfbW91bnRfbG9jay5hdHRyLA0KKwkmbmZzX21vdW50X3NlY19mbGF2b3IuYXR0 ciwNCisJJm5mc19tb3VudF9lbGFwc2VkX3RpbWUuYXR0ciwNCisgICAgICAgICZuZnNfbW91bnRf bWF4X3JlYWRhaGVhZC5hdHRyLA0KKwkmbmZzX21vdW50X3JlYWRkaXJwbHVzX2xpbWl0LmF0dHIs DQorfTsNCisNCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzNF9tb3VudF9hdHRyc1tdID0g ew0KKwkmbmZzX21vdW50X3ZlcnNpb24uYXR0ciwNCisJJm5mc19tb3VudF9yc2l6ZS5hdHRyLA0K KwkmbmZzX21vdW50X3dzaXplLmF0dHIsDQorCSZuZnNfbW91bnRfYWNyZWdtaW4uYXR0ciwNCisJ Jm5mc19tb3VudF9hY3JlZ21heC5hdHRyLA0KKwkmbmZzX21vdW50X2FjZGlybWluLmF0dHIsDQor CSZuZnNfbW91bnRfYWNkaXJtYXguYXR0ciwNCisJJm5mc19tb3VudF9ob3N0bmFtZS5hdHRyLA0K KwkmbmZzX21vdW50X2V4cG9ydF9wYXRoLmF0dHIsDQorCSZuZnNfbW91bnRfc29mdC5hdHRyLA0K KwkmbmZzX21vdW50X2ludHIuYXR0ciwNCisJJm5mc19tb3VudF9jdG8uYXR0ciwNCisJJm5mc19t b3VudF9zZWNfZmxhdm9yLmF0dHIsDQorCSZuZnNfbW91bnRfZWxhcHNlZF90aW1lLmF0dHIsDQor CSZuZnNfbW91bnRfbWF4X3JlYWRhaGVhZC5hdHRyLA0KK307DQorDQorc3RhdGljIHN0cnVjdCBr b2JqX3R5cGUga3R5cGVfbmZzX21vdW50W10gPSB7DQorCXsgfSwgeyB9LA0KKwl7DQorCQkuc3lz ZnNfb3BzCT0gJm5mc19tb3VudF9vcHMsDQorCQkuZGVmYXVsdF9hdHRycwk9IG5mc19tb3VudF9h dHRycywNCisJfSwNCisJew0KKwkJLnN5c2ZzX29wcwk9ICZuZnNfbW91bnRfb3BzLA0KKwkJLmRl ZmF1bHRfYXR0cnMJPSBuZnMzX21vdW50X2F0dHJzLA0KKwl9LA0KKwl7DQorCQkuc3lzZnNfb3Bz CT0gJm5mc19tb3VudF9vcHMsDQorCQkuZGVmYXVsdF9hdHRycwk9IG5mczRfbW91bnRfYXR0cnMs DQorCX0sDQorfTsNCisNCitpbnQgbmZzX3N1cGVyX3JlZ2lzdGVyKHN0cnVjdCBzdXBlcl9ibG9j ayAqc3VwZXIsIHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cykNCit7DQorCXN0cnVjdCBuZnNfc2Vy dmVyICpzZXJ2ZXIgPSBORlNfU0Ioc3VwZXIpOw0KKwlpbnQgdmVyc2lvbiA9IHNlcnZlci0+cnBj X29wcy0+dmVyc2lvbjsNCisNCisJc2VydmVyLT5tb3VudF90aW1lID0gamlmZmllczsNCisNCisJ a29iamVjdF9zZXRfbmFtZSgmc3VwZXItPmtvYmosICJtb3VudDolZCwlZCIsIE1BSk9SKHN1cGVy LT5zX2RldiksDQorCQlNSU5PUihzdXBlci0+c19kZXYpKTsNCisJc3VwZXItPmtvYmoucGFyZW50 ID0gJnN1YnN5cy0+a3NldC5rb2JqOw0KKwlzdXBlci0+a29iai5rdHlwZSA9ICZrdHlwZV9uZnNf bW91bnRbdmVyc2lvbl07DQorCXJldHVybiBrb2JqZWN0X2FkZCgmc3VwZXItPmtvYmopOw0KK30N CisNCit2b2lkIG5mc19zdXBlcl91bnJlZ2lzdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIp DQorew0KKwlrb2JqZWN0X3VucmVnaXN0ZXIoJnN1cGVyLT5rb2JqKTsNCit9DQpkaWZmIC1YIC4u Ly4uL2RvbnQtZGlmZiAtTmF1cnAgMDQtc3lzLWZzL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggMDUt c3lzLWZzLW5mcy9pbmNsdWRlL2xpbnV4L25mc19mcy5oDQotLS0gMDQtc3lzLWZzL2luY2x1ZGUv bGludXgvbmZzX2ZzLmgJMjAwNC0wNC0xNiAxMTozMDowMi44MjUwMDAwMDAgLTA0MDANCisrKyAw NS1zeXMtZnMtbmZzL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgJMjAwNC0wNC0xNiAxNzoyOTo1MC4z NTEwMDAwMDAgLTA0MDANCkBAIC0zMTksNiArMzE5LDE2IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIG5mc19kaXJfb3ANCiBleHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5m c19kZW50cnlfb3BlcmF0aW9uczsNCiANCiAvKg0KKyAqIGxpbnV4L2ZzL25mcy9zeXMuYw0KKyAq Lw0KK2V4dGVybiBzdHJ1Y3Qgc3Vic3lzdGVtIG5mc19zdWJzeXM7DQorZXh0ZXJuIHN0cnVjdCBz dWJzeXN0ZW0gbmZzNF9zdWJzeXM7DQorDQorZXh0ZXJuIGludCBuZnNfc3VwZXJfcmVnaXN0ZXIo c3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwNCisJCQlzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMp Ow0KK2V4dGVybiB2b2lkIG5mc19zdXBlcl91bnJlZ2lzdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAq c3VwZXIpOw0KKw0KKy8qDQogICogbGludXgvZnMvbmZzL3N5bWxpbmsuYw0KICAqLw0KIGV4dGVy biBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOw0K ZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA0LXN5cy1mcy9pbmNsdWRlL2xpbnV4L25m c19mc19zYi5oIDA1LXN5cy1mcy1uZnMvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaA0KLS0tIDA0 LXN5cy1mcy9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCTIwMDQtMDQtMTIgMjE6MTI6MDYuODE0 MDAxMDAwIC0wNDAwDQorKysgMDUtc3lzLWZzLW5mcy9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5o CTIwMDQtMDQtMTYgMTY6MTY6NDMuMjE4MDA0MDAwIC0wNDAwDQpAQCAtMjgsNiArMjgsMTEgQEAg c3RydWN0IG5mc19zZXJ2ZXIgew0KIAljaGFyICoJCQlob3N0bmFtZTsJLyogcmVtb3RlIGhvc3Ru YW1lICovDQogCXN0cnVjdCBuZnNfZmgJCWZoOw0KIAlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsN CisJY2hhciAqCQkJZGV2bmFtZTsNCisJdW5zaWduZWQgbG9uZwkJbW91bnRfdGltZTsNCisjaWZk ZWYgQ09ORklHX05GU19WMw0KKwl1bnNpZ25lZCBpbnQJCXJlYWRkaXJwbHVzX2xpbWl0Ow0KKyNl bmRpZg0KICNpZmRlZiBDT05GSUdfTkZTX1Y0DQogCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMg YSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLg0KIAkgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUg dGhlIGNsaWVudGlkLCBhbmQgdGhlIGNhbGxiYWNrIGFkZHJlc3MuDQo= ------_=_NextPart_001_01C424B4.9EEC6849 Content-Type: application/octet-stream; name="06-nfs-iostat.patch" Content-Transfer-Encoding: base64 Content-Description: 06-nfs-iostat.patch Content-Disposition: attachment; filename="06-nfs-iostat.patch" ZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA1LXN5cy1mcy1uZnMvZnMvbmZzL2Rpci5j IDA2LW5mcy1pb3N0YXQvZnMvbmZzL2Rpci5jDQotLS0gMDUtc3lzLWZzLW5mcy9mcy9uZnMvZGly LmMJMjAwNC0wNC0xNiAxMDo1ODoxNy41NDMwMDAwMDAgLTA0MDANCisrKyAwNi1uZnMtaW9zdGF0 L2ZzL25mcy9kaXIuYwkyMDA0LTA0LTE3IDEyOjQwOjQzLjk4NDAwMTAwMCAtMDQwMA0KQEAgLTU5 OCw2ICs1OTgsNyBAQCBzdGF0aWMgaW50IG5mc19sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgDQog CXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7DQogCWxvY2tfa2VybmVsKCk7DQogCWRpciA9 IHBhcmVudC0+ZF9pbm9kZTsNCisJTkZTX1NUQVRTKGRpcikuZGVudHJ5X3JldmFsaWRhdGVzKys7 DQogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KIA0KIAlpZiAobmQgJiYgIShuZC0+ZmxhZ3Mg JiBMT09LVVBfQ09OVElOVUUpICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikpDQpAQCAtNzQw LDYgKzc0MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZnNfbG9va3VwKHN0cnVjdCANCiAN CiAJZGZwcmludGsoVkZTLCAiTkZTOiBsb29rdXAoJXMvJXMpXG4iLA0KIAkJZGVudHJ5LT5kX3Bh cmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOw0KKwlORlNfU1RBVFMoZGly KS52ZnNfbG9va3VwcysrOw0KIA0KIAllcnJvciA9IC1FTkFNRVRPT0xPTkc7DQogCWlmIChkZW50 cnktPmRfbmFtZS5sZW4gPiBORlNfU0VSVkVSKGRpciktPm5hbWVsZW4pDQpAQCAtMTUzMCw2ICsx NTMyLDggQEAgbmZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IA0KIAlpbnQg bW9kZSA9IGlub2RlLT5pX21vZGU7DQogCWludCByZXM7DQogDQorCU5GU19TVEFUUyhpbm9kZSku dmZzX2FjY2Vzc2VzKys7DQorDQogCWlmIChtYXNrID09IDApDQogCQlyZXR1cm4gMDsNCiAJaWYg KG1hc2sgJiBNQVlfV1JJVEUpIHsNCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAwNS1z eXMtZnMtbmZzL2ZzL25mcy9kaXJlY3QuYyAwNi1uZnMtaW9zdGF0L2ZzL25mcy9kaXJlY3QuYw0K LS0tIDA1LXN5cy1mcy1uZnMvZnMvbmZzL2RpcmVjdC5jCTIwMDQtMDQtMTYgMTE6MzE6NDIuMTgy MDAwMDAwIC0wNDAwDQorKysgMDYtbmZzLWlvc3RhdC9mcy9uZnMvZGlyZWN0LmMJMjAwNC0wNC0x NiAxNzo0NTozNy44MzgwMDAwMDAgLTA0MDANCkBAIC0yMzEsNiArMjMxLDggQEAgbmZzX2RpcmVj dF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cg0KIAkJCWJyZWFrOw0KIAl9DQogDQorCWlm ICh0b3RfYnl0ZXMgPiAwKQ0KKwkJTkZTX1NUQVRTKGlub2RlKS5kaXJlY3RfYnl0ZXNfcmVhZCAr PSB0b3RfYnl0ZXM7DQogCXJldHVybiB0b3RfYnl0ZXM7DQogfQ0KIA0KQEAgLTM5Nyw2ICszOTks OSBAQCBuZnNfZGlyZWN0X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0DQogCQlpZiAocmVz dWx0IDwgc2l6ZSkNCiAJCQlicmVhazsNCiAJfQ0KKw0KKwlpZiAodG90X2J5dGVzID4gMCkNCisJ CU5GU19TVEFUUyhpbm9kZSkuZGlyZWN0X2J5dGVzX3dyaXR0ZW4gKz0gdG90X2J5dGVzOw0KIAly ZXR1cm4gdG90X2J5dGVzOw0KIH0NCiANCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAw NS1zeXMtZnMtbmZzL2ZzL25mcy9maWxlLmMgMDYtbmZzLWlvc3RhdC9mcy9uZnMvZmlsZS5jDQot LS0gMDUtc3lzLWZzLW5mcy9mcy9uZnMvZmlsZS5jCTIwMDQtMDQtMTYgMTE6MzA6MDIuODIwMDAw MDAwIC0wNDAwDQorKysgMDYtbmZzLWlvc3RhdC9mcy9uZnMvZmlsZS5jCTIwMDQtMDQtMTYgMTg6 MzY6MjAuMjY4MDAwMDAwIC0wNDAwDQpAQCAtMTM4LDYgKzEzOCw4IEBAIG5mc19maWxlX3JlYWQo c3RydWN0IGtpb2NiICppb2NiLCBjaGFyICoNCiAJcmVzdWx0ID0gbmZzX3JldmFsaWRhdGVfaW5v ZGUoTkZTX1NFUlZFUihpbm9kZSksIGlub2RlKTsNCiAJaWYgKCFyZXN1bHQpDQogCQlyZXN1bHQg PSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgYnVmLCBjb3VudCwgcG9zKTsNCisJaWYgKHJl c3VsdCA+IDApDQorCQlORlNfU1RBVFMoaW5vZGUpLnN5c19ieXRlc19yZWFkICs9IHJlc3VsdDsN CiAJcmV0dXJuIHJlc3VsdDsNCiB9DQogDQpAQCAtMjY3LDYgKzI2OSw4IEBAIG5mc19maWxlX3dy aXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QNCiAJCWdvdG8gb3V0Ow0KIA0KIAlyZXN1bHQg PSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGJ1ZiwgY291bnQsIHBvcyk7DQorCWlmIChy ZXN1bHQgPiAwKQ0KKwkJTkZTX1NUQVRTKGlub2RlKS5zeXNfYnl0ZXNfd3JpdHRlbiArPSByZXN1 bHQ7DQogb3V0Og0KIAlyZXR1cm4gcmVzdWx0Ow0KIA0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYg LU5hdXJwIDA1LXN5cy1mcy1uZnMvZnMvbmZzL3JlYWQuYyAwNi1uZnMtaW9zdGF0L2ZzL25mcy9y ZWFkLmMNCi0tLSAwNS1zeXMtZnMtbmZzL2ZzL25mcy9yZWFkLmMJMjAwNC0wNC0xMiAyMToxMjow Ni43OTUwMDMwMDAgLTA0MDANCisrKyAwNi1uZnMtaW9zdGF0L2ZzL25mcy9yZWFkLmMJMjAwNC0w NC0xNiAxNzoyMjo0MS4wNzkwMDAwMDAgLTA0MDANCkBAIC0xNDksNiArMTQ5LDcgQEAgbmZzX3Jl YWRwYWdlX3N5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cg0KIAkJfQ0KIAkJY291bnQgLT0gcmVz dWx0Ow0KIAkJcmRhdGEuYXJncy5wZ2Jhc2UgKz0gcmVzdWx0Ow0KKwkJTkZTX1NUQVRTKGlub2Rl KS5ieXRlc19yZWFkICs9IHJlc3VsdDsNCiAJCS8qIE5vdGU6IHJlc3VsdCA9PSAwIHNob3VsZCBv bmx5IGhhcHBlbiBpZiB3ZSdyZSBjYWNoaW5nDQogCQkgKiBhIHdyaXRlIHRoYXQgZXh0ZW5kcyB0 aGUgZmlsZSBhbmQgcHVuY2hlcyBhIGhvbGUuDQogCQkgKi8NCkBAIC00ODgsNiArNDg5LDggQEAg dm9pZCBuZnNfcmVhZHBhZ2VfcmVzdWx0KHN0cnVjdCBycGNfdGFzaw0KIAkJfQ0KIAkJdGFzay0+ dGtfc3RhdHVzID0gLUVJTzsNCiAJfQ0KKwlpZiAodGFzay0+dGtfc3RhdHVzID49IDApDQorCQlO RlNfU1RBVFMoZGF0YS0+aW5vZGUpLmJ5dGVzX3JlYWQgKz0gcmVzcC0+Y291bnQ7DQogCU5GU19G TEFHUyhkYXRhLT5pbm9kZSkgfD0gTkZTX0lOT19JTlZBTElEX0FUSU1FOw0KIAlkYXRhLT5jb21w bGV0ZShkYXRhLCBzdGF0dXMpOw0KIH0NCmRpZmYgLVggLi4vLi4vZG9udC1kaWZmIC1OYXVycCAw NS1zeXMtZnMtbmZzL2ZzL25mcy9zeXMuYyAwNi1uZnMtaW9zdGF0L2ZzL25mcy9zeXMuYw0KLS0t IDA1LXN5cy1mcy1uZnMvZnMvbmZzL3N5cy5jCTIwMDQtMDQtMTcgMTU6MDA6NTguMjM1MDAwMDAw IC0wNDAwDQorKysgMDYtbmZzLWlvc3RhdC9mcy9uZnMvc3lzLmMJMjAwNC0wNC0xNyAxNDo1Nzo1 OC4xMDcwMDEwMDAgLTA0MDANCkBAIC00MjgsNiArNDI4LDE4MyBAQCBuZnNfbW91bnRfc2VjX2Zs YXZvcl9zaG93KHN0cnVjdCBuZnNfc2VyDQogTkZTX01PVU5UX1JPX0FUVFIoc2VjX2ZsYXZvcik7 DQogDQogDQorLyoNCisgKiAgaW9fc3RhdCBhdHRyaWJ1dGVzDQorICovDQorDQorI2RlZmluZSBO RlNfTU9VTlRfSU9TVEFUX1NIT1coX25hbWUsIF90eXBlLCBfZm9ybWF0KQkJXA0KK3N0YXRpYyBz c2l6ZV90CQkJCQkJCVwNCituZnNfbW91bnRfIyNfbmFtZSMjX3Nob3coc3RydWN0IG5mc19zZXJ2 ZXIgKnNlcnZlciwgY2hhciAqYnVmKQlcDQorewkJCQkJCQkJXA0KKwlpbnQgaTsJCQkJCQkJXA0K KwlfdHlwZSB0b3RhbCA9IDA7CQkJCQlcDQorCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKysp CQkJCVwNCisJCXRvdGFsICs9IHNlcnZlci0+aW9fc3RhdHNbaV0uX25hbWU7CQlcDQorCXJldHVy biBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwJCQkJXA0KKwkJdG90YWwpOwkJCQkJCVwNCit9DQorDQor I2RlZmluZSBORlNfTU9VTlRfSU9TVEFUX1NUT1JFKF9uYW1lKQkJCQlcDQorc3RhdGljIHNzaXpl X3QJCQkJCQkJXA0KK25mc19tb3VudF8jI19uYW1lIyNfc3RvcmUoc3RydWN0IG5mc19zZXJ2ZXIg KnNlcnZlciwJCVwNCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQkJCVwNCit7CQkJ CQkJCQlcDQorCWludCBpOwkJCQkJCQlcDQorCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKysp CQkJCVwNCisJCXNlcnZlci0+aW9fc3RhdHNbaV0uX25hbWUgPSAwOwkJCVwNCisJcmV0dXJuIGNv dW50OwkJCQkJCVwNCit9DQorDQorDQorLyoNCisgKiBieXRlc19yZWFkDQorICoNCisgKiBUaGlz IGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBjb3VudCBvZiBieXRlcyByZWFkIHZpYSBORlMgUkVBRCBv cGVyYXRpb25zDQorICogb24gdGhpcyBtb3VudCBwb2ludC4NCisgKg0KKyAqIFdyaXRpbmcgYW55 dGhpbmcgdG8gdGhpcyBhdHRyaWJ1dGUgcmVzZXRzIGl0IHRvIHplcm8uDQorICovDQorTkZTX01P VU5UX0lPU1RBVF9TSE9XKGJ5dGVzX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9uZywgIiVMdSBieXRl c1xuIikNCitORlNfTU9VTlRfSU9TVEFUX1NUT1JFKGJ5dGVzX3JlYWQpDQorTkZTX01PVU5UX1JX X0FUVFIoYnl0ZXNfcmVhZCk7DQorDQorLyoNCisgKiBieXRlc193cml0dGVuDQorICoNCisgKiBU aGlzIGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBjb3VudCBvZiBieXRlcyB3cml0dGVuIHZpYSBORlMg V1JJVEUgb3BlcmF0aW9ucw0KKyAqIG9uIHRoaXMgbW91bnQgcG9pbnQuDQorICoNCisgKiBXcml0 aW5nIGFueXRoaW5nIHRvIHRoaXMgYXR0cmlidXRlIHJlc2V0cyBpdCB0byB6ZXJvLg0KKyAqLw0K K05GU19NT1VOVF9JT1NUQVRfU0hPVyhieXRlc193cml0dGVuLCB1bnNpZ25lZCBsb25nIGxvbmcs ICIlTHUgYnl0ZXNcbiIpDQorTkZTX01PVU5UX0lPU1RBVF9TVE9SRShieXRlc193cml0dGVuKQ0K K05GU19NT1VOVF9SV19BVFRSKGJ5dGVzX3dyaXR0ZW4pOw0KKw0KKy8qDQorICogc3lzX2J5dGVz X3JlYWQNCisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIGV4cG9zZXMgdGhlIGNvdW50IG9mIGJ5dGVz IHJlYWQgdmlhIHJlYWQoKSBzeXN0ZW0gY2FsbHMNCisgKiBvbiB0aGlzIG1vdW50IHBvaW50Lg0K KyAqDQorICogV3JpdGluZyBhbnl0aGluZyB0byB0aGlzIGF0dHJpYnV0ZSByZXNldHMgaXQgdG8g emVyby4NCisgKi8NCitORlNfTU9VTlRfSU9TVEFUX1NIT1coc3lzX2J5dGVzX3JlYWQsIHVuc2ln bmVkIGxvbmcgbG9uZywgIiVMdSBieXRlc1xuIikNCitORlNfTU9VTlRfSU9TVEFUX1NUT1JFKHN5 c19ieXRlc19yZWFkKQ0KK05GU19NT1VOVF9SV19BVFRSKHN5c19ieXRlc19yZWFkKTsNCisNCisv Kg0KKyAqIHN5c19ieXRlc193cml0dGVuDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSBleHBvc2Vz IHRoZSBjb3VudCBvZiBieXRlcyB3cml0dGVuIHZpYSBORlMgV1JJVEUgb3BlcmF0aW9ucw0KKyAq IG9uIHRoaXMgbW91bnQgcG9pbnQuDQorICoNCisgKiBXcml0aW5nIGFueXRoaW5nIHRvIHRoaXMg YXR0cmlidXRlIHJlc2V0cyBpdCB0byB6ZXJvLg0KKyAqLw0KK05GU19NT1VOVF9JT1NUQVRfU0hP VyhzeXNfYnl0ZXNfd3JpdHRlbiwgdW5zaWduZWQgbG9uZyBsb25nLCAiJUx1IGJ5dGVzXG4iKQ0K K05GU19NT1VOVF9JT1NUQVRfU1RPUkUoc3lzX2J5dGVzX3dyaXR0ZW4pDQorTkZTX01PVU5UX1JX X0FUVFIoc3lzX2J5dGVzX3dyaXR0ZW4pOw0KKw0KKy8qDQorICogZGlyZWN0X2J5dGVzX3JlYWQN CisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIGV4cG9zZXMgdGhlIGNvdW50IG9mIGJ5dGVzIHJlYWQg ZGlyZWN0bHkNCisgKiBvbiB0aGlzIG1vdW50IHBvaW50Lg0KKyAqDQorICogV3JpdGluZyBhbnl0 aGluZyB0byB0aGlzIGF0dHJpYnV0ZSByZXNldHMgaXQgdG8gemVyby4NCisgKi8NCitORlNfTU9V TlRfSU9TVEFUX1NIT1coZGlyZWN0X2J5dGVzX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9uZywgIiVM dSBieXRlc1xuIikNCitORlNfTU9VTlRfSU9TVEFUX1NUT1JFKGRpcmVjdF9ieXRlc19yZWFkKQ0K K05GU19NT1VOVF9SV19BVFRSKGRpcmVjdF9ieXRlc19yZWFkKTsNCisNCisvKg0KKyAqIGRpcmVj dF9ieXRlc193cml0dGVuDQorICoNCisgKiBUaGlzIGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBjb3Vu dCBvZiBieXRlcyB3cml0dGVuIGRpcmVjdGx5DQorICogb24gdGhpcyBtb3VudCBwb2ludC4NCisg Kg0KKyAqIFdyaXRpbmcgYW55dGhpbmcgdG8gdGhpcyBhdHRyaWJ1dGUgcmVzZXRzIGl0IHRvIHpl cm8uDQorICovDQorTkZTX01PVU5UX0lPU1RBVF9TSE9XKGRpcmVjdF9ieXRlc193cml0dGVuLCB1 bnNpZ25lZCBsb25nIGxvbmcsICIlTHUgYnl0ZXNcbiIpDQorTkZTX01PVU5UX0lPU1RBVF9TVE9S RShkaXJlY3RfYnl0ZXNfd3JpdHRlbikNCitORlNfTU9VTlRfUldfQVRUUihkaXJlY3RfYnl0ZXNf d3JpdHRlbik7DQorDQorLyoNCisgKiBpbm9kZV9yZXZhbGlkYXRlcw0KKyAqDQorICogVGhpcyBh dHRyaWJ1dGUgZXhwb3NlcyB0aGUgY291bnQgb2YgaW5vZGUgcmV2YWxpZGF0aW9ucw0KKyAqIG9u IHRoaXMgbW91bnQgcG9pbnQuICBFYWNoIHJldmFsaWRhdGlvbiBtYXkgb3IgbWF5IG5vdA0KKyAq IHJlc3VsdCBpbiBhbiBvbi10aGUtd2lyZSBORlMgR0VUQVRUUiBvcGVyYXRpb24uDQorICoNCisg KiBXcml0aW5nIGFueXRoaW5nIHRvIHRoaXMgYXR0cmlidXRlIHJlc2V0cyBpdCB0byB6ZXJvLg0K KyAqLw0KK05GU19NT1VOVF9JT1NUQVRfU0hPVyhpbm9kZV9yZXZhbGlkYXRlcywgdW5zaWduZWQg bG9uZywgIiVsdVxuIikNCitORlNfTU9VTlRfSU9TVEFUX1NUT1JFKGlub2RlX3JldmFsaWRhdGVz KQ0KK05GU19NT1VOVF9SV19BVFRSKGlub2RlX3JldmFsaWRhdGVzKTsNCisNCisvKg0KKyAqIGRl bnRyeV9yZXZhbGlkYXRlcw0KKyAqDQorICogVGhpcyBhdHRyaWJ1dGUgZXhwb3NlcyB0aGUgY291 bnQgb2YgZGVudHJ5IHJldmFsaWRhdGlvbnMNCisgKiBvbiB0aGlzIG1vdW50IHBvaW50LiAgRWFj aCByZXZhbGlkYXRpb24gbWF5IG9yIG1heSBub3QNCisgKiByZXN1bHQgaW4gYW4gb24tdGhlLXdp cmUgTkZTIExPT0tVUCBvcGVyYXRpb24uDQorICoNCisgKiBXcml0aW5nIGFueXRoaW5nIHRvIHRo aXMgYXR0cmlidXRlIHJlc2V0cyBpdCB0byB6ZXJvLg0KKyAqLw0KK05GU19NT1VOVF9JT1NUQVRf U0hPVyhkZW50cnlfcmV2YWxpZGF0ZXMsIHVuc2lnbmVkIGxvbmcsICIlbHVcbiIpDQorTkZTX01P VU5UX0lPU1RBVF9TVE9SRShkZW50cnlfcmV2YWxpZGF0ZXMpDQorTkZTX01PVU5UX1JXX0FUVFIo ZGVudHJ5X3JldmFsaWRhdGVzKTsNCisNCisvKg0KKyAqIHZmc19sb29rdXBzDQorICoNCisgKiBU aGlzIGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBjb3VudCBvZiBjYWxscyB0byBuZnNfbG9va3VwDQor ICogb24gdGhpcyBtb3VudCBwb2ludC4gIEVhY2ggY2FsbCBtYXkgb3IgbWF5IG5vdCByZXN1bHQg aW4NCisgKiBhbiBvbi10aGUtd2lyZSBORlMgTE9PS1VQIG9wZXJhdGlvbi4NCisgKg0KKyAqIFdy aXRpbmcgYW55dGhpbmcgdG8gdGhpcyBhdHRyaWJ1dGUgcmVzZXRzIGl0IHRvIHplcm8uDQorICov DQorTkZTX01PVU5UX0lPU1RBVF9TSE9XKHZmc19sb29rdXBzLCB1bnNpZ25lZCBsb25nLCAiJWx1 XG4iKQ0KK05GU19NT1VOVF9JT1NUQVRfU1RPUkUodmZzX2xvb2t1cHMpDQorTkZTX01PVU5UX1JX X0FUVFIodmZzX2xvb2t1cHMpOw0KKw0KKy8qDQorICogdmZzX2FjY2Vzc2VzDQorICoNCisgKiBU aGlzIGF0dHJpYnV0ZSBleHBvc2VzIHRoZSBjb3VudCBvZiBjYWxscyB0byBuZnNfcGVybWlzc2lv bg0KKyAqIG9uIHRoaXMgbW91bnQgcG9pbnQuICBFYWNoIGNhbGwgbWF5IG9yIG1heSBub3QgcmVz dWx0IGluIGFuDQorICogb24tdGhlLXdpcmUgTkZTIEFDQ0VTUyBvcGVyYXRpb24uDQorICoNCisg KiBXcml0aW5nIGFueXRoaW5nIHRvIHRoaXMgYXR0cmlidXRlIHJlc2V0cyBpdCB0byB6ZXJvLg0K KyAqLw0KK05GU19NT1VOVF9JT1NUQVRfU0hPVyh2ZnNfYWNjZXNzZXMsIHVuc2lnbmVkIGxvbmcs ICIlbHVcbiIpDQorTkZTX01PVU5UX0lPU1RBVF9TVE9SRSh2ZnNfYWNjZXNzZXMpDQorTkZTX01P VU5UX1JXX0FUVFIodmZzX2FjY2Vzc2VzKTsNCisNCisvKg0KKyAqIHNldGF0dHJfdHJ1bmMNCisg Kg0KKyAqIFRoaXMgYXR0cmlidXRlIGV4cG9zZXMgdGhlIGNvdW50IG9mIE5GUyBTRVRBVFRSIG9w ZXJhdGlvbnMNCisgKiB0aGF0IGNhdXNlIGEgZmlsZSB0cnVuY2F0aW9uIG9uIHRoaXMgbW91bnQg cG9pbnQuDQorICoNCisgKiBXcml0aW5nIGFueXRoaW5nIHRvIHRoaXMgYXR0cmlidXRlIHJlc2V0 cyBpdCB0byB6ZXJvLg0KKyAqLw0KK05GU19NT1VOVF9JT1NUQVRfU0hPVyhzZXRhdHRyX3RydW5j LCB1bnNpZ25lZCBsb25nLCAiJWx1XG4iKQ0KK05GU19NT1VOVF9JT1NUQVRfU1RPUkUoc2V0YXR0 cl90cnVuYykNCitORlNfTU9VTlRfUldfQVRUUihzZXRhdHRyX3RydW5jKTsNCisNCisvKg0KKyAq IGV4dGVuZF93cml0ZXMNCisgKg0KKyAqIFRoaXMgYXR0cmlidXRlIGV4cG9zZXMgdGhlIGNvdW50 IG9mIHdyaXRlIHJlcXVlc3RzIHRoYXQNCisgKiBleHRlbmQgYSBmaWxlIG9uIHRoaXMgbW91bnQg cG9pbnQuDQorICoNCisgKiBXcml0aW5nIGFueXRoaW5nIHRvIHRoaXMgYXR0cmlidXRlIHJlc2V0 cyBpdCB0byB6ZXJvLg0KKyAqLw0KK05GU19NT1VOVF9JT1NUQVRfU0hPVyhleHRlbmRfd3JpdGVz LCB1bnNpZ25lZCBsb25nLCAiJWx1XG4iKQ0KK05GU19NT1VOVF9JT1NUQVRfU1RPUkUoZXh0ZW5k X3dyaXRlcykNCitORlNfTU9VTlRfUldfQVRUUihleHRlbmRfd3JpdGVzKTsNCisNCisNCiBzdGF0 aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzX21vdW50X2F0dHJzW10gPSB7DQogCSZuZnNfbW91bnRf dmVyc2lvbi5hdHRyLA0KIAkmbmZzX21vdW50X3JzaXplLmF0dHIsDQpAQCAtNDQ1LDYgKzYyMiwx OCBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzX21vdW50X2F0dHJzDQogCSZuZnNfbW91 bnRfc2VjX2ZsYXZvci5hdHRyLA0KIAkmbmZzX21vdW50X2VsYXBzZWRfdGltZS5hdHRyLA0KIAkm bmZzX21vdW50X21heF9yZWFkYWhlYWQuYXR0ciwNCisJJm5mc19tb3VudF9ieXRlc19yZWFkLmF0 dHIsDQorCSZuZnNfbW91bnRfYnl0ZXNfd3JpdHRlbi5hdHRyLA0KKwkmbmZzX21vdW50X3N5c19i eXRlc19yZWFkLmF0dHIsDQorCSZuZnNfbW91bnRfc3lzX2J5dGVzX3dyaXR0ZW4uYXR0ciwNCisJ Jm5mc19tb3VudF9kaXJlY3RfYnl0ZXNfcmVhZC5hdHRyLA0KKwkmbmZzX21vdW50X2RpcmVjdF9i eXRlc193cml0dGVuLmF0dHIsDQorCSZuZnNfbW91bnRfaW5vZGVfcmV2YWxpZGF0ZXMuYXR0ciwN CisJJm5mc19tb3VudF9kZW50cnlfcmV2YWxpZGF0ZXMuYXR0ciwNCisJJm5mc19tb3VudF92ZnNf bG9va3Vwcy5hdHRyLA0KKwkmbmZzX21vdW50X3Zmc19hY2Nlc3Nlcy5hdHRyLA0KKwkmbmZzX21v dW50X3NldGF0dHJfdHJ1bmMuYXR0ciwNCisJJm5mc19tb3VudF9leHRlbmRfd3JpdGVzLmF0dHIs DQogfTsNCiANCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmZzM19tb3VudF9hdHRyc1tdID0g ew0KQEAgLTQ2NSw2ICs2NTQsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5mczNfbW91 bnRfYXR0cg0KIAkmbmZzX21vdW50X2VsYXBzZWRfdGltZS5hdHRyLA0KICAgICAgICAgJm5mc19t b3VudF9tYXhfcmVhZGFoZWFkLmF0dHIsDQogCSZuZnNfbW91bnRfcmVhZGRpcnBsdXNfbGltaXQu YXR0ciwNCisJJm5mc19tb3VudF9ieXRlc19yZWFkLmF0dHIsDQorCSZuZnNfbW91bnRfYnl0ZXNf d3JpdHRlbi5hdHRyLA0KKwkmbmZzX21vdW50X3N5c19ieXRlc19yZWFkLmF0dHIsDQorCSZuZnNf bW91bnRfc3lzX2J5dGVzX3dyaXR0ZW4uYXR0ciwNCisJJm5mc19tb3VudF9kaXJlY3RfYnl0ZXNf cmVhZC5hdHRyLA0KKwkmbmZzX21vdW50X2RpcmVjdF9ieXRlc193cml0dGVuLmF0dHIsDQorCSZu ZnNfbW91bnRfaW5vZGVfcmV2YWxpZGF0ZXMuYXR0ciwNCisJJm5mc19tb3VudF9kZW50cnlfcmV2 YWxpZGF0ZXMuYXR0ciwNCisJJm5mc19tb3VudF92ZnNfbG9va3Vwcy5hdHRyLA0KKwkmbmZzX21v dW50X3Zmc19hY2Nlc3Nlcy5hdHRyLA0KKwkmbmZzX21vdW50X3NldGF0dHJfdHJ1bmMuYXR0ciwN CisJJm5mc19tb3VudF9leHRlbmRfd3JpdGVzLmF0dHIsDQogfTsNCiANCiBzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqbmZzNF9tb3VudF9hdHRyc1tdID0gew0KQEAgLTQ4Myw2ICs2ODQsMTggQEAg c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5mczRfbW91bnRfYXR0cg0KIAkmbmZzX21vdW50X3Nl Y19mbGF2b3IuYXR0ciwNCiAJJm5mc19tb3VudF9lbGFwc2VkX3RpbWUuYXR0ciwNCiAJJm5mc19t b3VudF9tYXhfcmVhZGFoZWFkLmF0dHIsDQorCSZuZnNfbW91bnRfYnl0ZXNfcmVhZC5hdHRyLA0K KwkmbmZzX21vdW50X2J5dGVzX3dyaXR0ZW4uYXR0ciwNCisJJm5mc19tb3VudF9zeXNfYnl0ZXNf cmVhZC5hdHRyLA0KKwkmbmZzX21vdW50X3N5c19ieXRlc193cml0dGVuLmF0dHIsDQorCSZuZnNf bW91bnRfZGlyZWN0X2J5dGVzX3JlYWQuYXR0ciwNCisJJm5mc19tb3VudF9kaXJlY3RfYnl0ZXNf d3JpdHRlbi5hdHRyLA0KKwkmbmZzX21vdW50X2lub2RlX3JldmFsaWRhdGVzLmF0dHIsDQorCSZu ZnNfbW91bnRfZGVudHJ5X3JldmFsaWRhdGVzLmF0dHIsDQorCSZuZnNfbW91bnRfdmZzX2xvb2t1 cHMuYXR0ciwNCisJJm5mc19tb3VudF92ZnNfYWNjZXNzZXMuYXR0ciwNCisJJm5mc19tb3VudF9z ZXRhdHRyX3RydW5jLmF0dHIsDQorCSZuZnNfbW91bnRfZXh0ZW5kX3dyaXRlcy5hdHRyLA0KIH07 DQogDQogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUga3R5cGVfbmZzX21vdW50W10gPSB7DQpAQCAt NTAzLDYgKzcxNiw4IEBAIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGt0eXBlX25mc19tb3VudFsN CiANCiBpbnQgbmZzX3N1cGVyX3JlZ2lzdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsIHN0 cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cykNCiB7DQorCWludCBlcnJvcjsNCisJdW5zaWduZWQgaW50 IHNpemU7DQogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc3VwZXIpOw0KIAlp bnQgdmVyc2lvbiA9IHNlcnZlci0+cnBjX29wcy0+dmVyc2lvbjsNCiANCkBAIC01MTIsMTAgKzcy NywyNCBAQCBpbnQgbmZzX3N1cGVyX3JlZ2lzdGVyKHN0cnVjdCBzdXBlcl9ibG9jDQogCQlNSU5P UihzdXBlci0+c19kZXYpKTsNCiAJc3VwZXItPmtvYmoucGFyZW50ID0gJnN1YnN5cy0+a3NldC5r b2JqOw0KIAlzdXBlci0+a29iai5rdHlwZSA9ICZrdHlwZV9uZnNfbW91bnRbdmVyc2lvbl07DQot CXJldHVybiBrb2JqZWN0X2FkZCgmc3VwZXItPmtvYmopOw0KKwllcnJvciA9IGtvYmplY3RfYWRk KCZzdXBlci0+a29iaik7DQorCWlmIChlcnJvcikNCisJCXJldHVybiBlcnJvcjsNCisNCisJc2l6 ZSA9IE5SX0NQVVMgKiBzaXplb2Yoc3RydWN0IG5mc19pb3N0YXQpOw0KKwlzZXJ2ZXItPmlvX3N0 YXRzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFzZXJ2ZXItPmlvX3N0YXRz KSB7DQorCQlrb2JqZWN0X3VucmVnaXN0ZXIoJnN1cGVyLT5rb2JqKTsNCisJCXJldHVybiAtRU5P TUVNOw0KKwl9DQorCW1lbXNldChzZXJ2ZXItPmlvX3N0YXRzLCAwLCBzaXplKTsNCisNCisJcmV0 dXJuIDA7DQogfQ0KIA0KIHZvaWQgbmZzX3N1cGVyX3VucmVnaXN0ZXIoc3RydWN0IHN1cGVyX2Js b2NrICpzdXBlcikNCiB7DQorCWlmIChORlNfU0Ioc3VwZXIpLT5pb19zdGF0cykNCisJCWtmcmVl KE5GU19TQihzdXBlciktPmlvX3N0YXRzKTsNCiAJa29iamVjdF91bnJlZ2lzdGVyKCZzdXBlci0+ a29iaik7DQogfQ0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYgLU5hdXJwIDA1LXN5cy1mcy1uZnMv ZnMvbmZzL3dyaXRlLmMgMDYtbmZzLWlvc3RhdC9mcy9uZnMvd3JpdGUuYw0KLS0tIDA1LXN5cy1m cy1uZnMvZnMvbmZzL3dyaXRlLmMJMjAwNC0wNC0xMiAyMToxMjowNi44MDIwMDEwMDAgLTA0MDAN CisrKyAwNi1uZnMtaW9zdGF0L2ZzL25mcy93cml0ZS5jCTIwMDQtMDQtMTcgMTI6NDI6NDMuNjc2 MDAxMDAwIC0wNDAwDQpAQCAtMTM1LDYgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIG5mc19ncm93X2Zp bGUoc3RydWN0IHBhZ2UgKnANCiAJZW5kID0gKChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9D QUNIRV9TSElGVCkgKyAoKGxvZmZfdClvZmZzZXQrY291bnQpOw0KIAlpZiAoaV9zaXplID49IGVu ZCkNCiAJCXJldHVybjsNCisJTkZTX1NUQVRTKGlub2RlKS5leHRlbmRfd3JpdGVzKys7DQogCWlf c2l6ZV93cml0ZShpbm9kZSwgZW5kKTsNCiB9DQogDQpAQCAtMjIzLDYgKzIyNCw3IEBAIHN0YXRp YyBpbnQgbmZzX3dyaXRlcGFnZV9zeW5jKHN0cnVjdCBmaWwNCiAJICAgICAgICB3ZGF0YS5hcmdz LnBnYmFzZSArPSByZXN1bHQ7DQogCQl3cml0dGVuICs9IHJlc3VsdDsNCiAJCWNvdW50IC09IHJl c3VsdDsNCisJCU5GU19TVEFUUyhpbm9kZSkuYnl0ZXNfd3JpdHRlbiArPSByZXN1bHQ7DQogCX0g d2hpbGUgKGNvdW50KTsNCiAJLyogVXBkYXRlIGZpbGUgbGVuZ3RoICovDQogCW5mc19ncm93X2Zp bGUocGFnZSwgb2Zmc2V0LCB3cml0dGVuKTsNCkBAIC0xMTkxLDYgKzExOTMsOCBAQCB2b2lkIG5m c193cml0ZWJhY2tfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgDQogCQkvKiBDYW4ndCBkbyBhbnl0aGlu ZyBhYm91dCBpdCBleGNlcHQgdGhyb3cgYW4gZXJyb3IuICovDQogCQl0YXNrLT50a19zdGF0dXMg PSAtRUlPOw0KIAl9DQorCWlmICh0YXNrLT50a19zdGF0dXMgPiAwKQ0KKwkJTkZTX1NUQVRTKGRh dGEtPmlub2RlKS5ieXRlc193cml0dGVuICs9IHJlc3AtPmNvdW50Ow0KIA0KIAkvKg0KIAkgKiBQ cm9jZXNzIHRoZSBuZnNfcGFnZSBsaXN0DQpkaWZmIC1YIC4uLy4uL2RvbnQtZGlmZiAtTmF1cnAg MDUtc3lzLWZzLW5mcy9pbmNsdWRlL2xpbnV4L25mc19mcy5oIDA2LW5mcy1pb3N0YXQvaW5jbHVk ZS9saW51eC9uZnNfZnMuaA0KLS0tIDA1LXN5cy1mcy1uZnMvaW5jbHVkZS9saW51eC9uZnNfZnMu aAkyMDA0LTA0LTE2IDE3OjI5OjUwLjM1MTAwMDAwMCAtMDQwMA0KKysrIDA2LW5mcy1pb3N0YXQv aW5jbHVkZS9saW51eC9uZnNfZnMuaAkyMDA0LTA0LTE3IDEyOjQxOjE3LjUyNjAwMDAwMCAtMDQw MA0KQEAgLTE4Nyw2ICsxODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW5vZGUgKk5G U19JKHN0DQogDQogI2RlZmluZSBORlNfRkgoaW5vZGUpCQkJKCZORlNfSShpbm9kZSktPmZoKQ0K ICNkZWZpbmUgTkZTX1NFUlZFUihpbm9kZSkJCShORlNfU0IoaW5vZGUtPmlfc2IpKQ0KKyNkZWZp bmUgTkZTX1NUQVRTKGlub2RlKQkJTkZTX1NFUlZFUihpbm9kZSktPmlvX3N0YXRzW3NtcF9wcm9j ZXNzb3JfaWQoKV0NCiAjZGVmaW5lIE5GU19DTElFTlQoaW5vZGUpCQkoTkZTX1NFUlZFUihpbm9k ZSktPmNsaWVudCkNCiAjZGVmaW5lIE5GU19QUk9UTyhpbm9kZSkJCShORlNfU0VSVkVSKGlub2Rl KS0+cnBjX29wcykNCiAjZGVmaW5lIE5GU19BRERSKGlub2RlKQkJCShSUENfUEVFUkFERFIoTkZT X0NMSUVOVChpbm9kZSkpKQ0KQEAgLTQ0NCw2ICs0NDUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBu ZnNfYXR0cmlidXRlX3RpbWVvdXQoDQogICovDQogc3RhdGljIGlubGluZSBpbnQgbmZzX3JldmFs aWRhdGVfaW5vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGlub2RlICppbm9k ZSkNCiB7DQorCU5GU19TVEFUUyhpbm9kZSkuaW5vZGVfcmV2YWxpZGF0ZXMrKzsNCiAJaWYgKCEo TkZTX0ZMQUdTKGlub2RlKSAmIChORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURf REFUQSkpDQogCQkJJiYgIW5mc19hdHRyaWJ1dGVfdGltZW91dChpbm9kZSkpDQogCQlyZXR1cm4g TkZTX1NUQUxFKGlub2RlKSA/IC1FU1RBTEUgOiAwOw0KZGlmZiAtWCAuLi8uLi9kb250LWRpZmYg LU5hdXJwIDA1LXN5cy1mcy1uZnMvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCAwNi1uZnMtaW9z dGF0L2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgNCi0tLSAwNS1zeXMtZnMtbmZzL2luY2x1ZGUv bGludXgvbmZzX2ZzX3NiLmgJMjAwNC0wNC0xNiAxNjoxNjo0My4yMTgwMDQwMDAgLTA0MDANCisr KyAwNi1uZnMtaW9zdGF0L2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgJMjAwNC0wNC0xNyAxMjo0 MjoxNi44MTMwMDEwMDAgLTA0MDANCkBAIC01LDYgKzUsMjQgQEANCiAjaW5jbHVkZSA8bGludXgv YmFja2luZy1kZXYuaD4NCiANCiAvKg0KKyAqIE9uZSBDUFUncyB3b3J0aCBvZiBORlMgSS9PIHN0 YXRpc3RpY3MNCisgKi8NCitzdHJ1Y3QgbmZzX2lvc3RhdCB7DQorCXVuc2lnbmVkIGxvbmcgbG9u ZwlieXRlc19yZWFkLA0KKwkJCQlieXRlc193cml0dGVuLA0KKwkJCQlzeXNfYnl0ZXNfcmVhZCwN CisJCQkJc3lzX2J5dGVzX3dyaXR0ZW4sDQorCQkJCWRpcmVjdF9ieXRlc19yZWFkLA0KKwkJCQlk aXJlY3RfYnl0ZXNfd3JpdHRlbjsNCisJdW5zaWduZWQgbG9uZwkJaW5vZGVfcmV2YWxpZGF0ZXMs DQorCQkJCWRlbnRyeV9yZXZhbGlkYXRlcywNCisJCQkJdmZzX2xvb2t1cHMsDQorCQkJCXZmc19h Y2Nlc3NlcywNCisJCQkJc2V0YXR0cl90cnVuYywNCisJCQkJZXh0ZW5kX3dyaXRlczsNCit9IF9f YXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTs7DQorDQorLyoNCiAg KiBORlMgY2xpZW50IHBhcmFtZXRlcnMgc3RvcmVkIGluIHRoZSBzdXBlcmJsb2NrLg0KICAqLw0K IHN0cnVjdCBuZnNfc2VydmVyIHsNCkBAIC0zMCw2ICs0OCw3IEBAIHN0cnVjdCBuZnNfc2VydmVy IHsNCiAJc3RydWN0IHNvY2thZGRyX2luCWFkZHI7DQogCWNoYXIgKgkJCWRldm5hbWU7DQogCXVu c2lnbmVkIGxvbmcJCW1vdW50X3RpbWU7DQorCXN0cnVjdCBuZnNfaW9zdGF0ICoJaW9fc3RhdHM7 DQogI2lmZGVmIENPTkZJR19ORlNfVjMNCiAJdW5zaWduZWQgaW50CQlyZWFkZGlycGx1c19saW1p dDsNCiAjZW5kaWYNCg== ------_=_NextPart_001_01C424B4.9EEC6849--