From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucian Adrian Grijincu Subject: [PATCH] RFC: ipv4: share sysctl net/ipv4/conf/DEVNAME/ tables Date: Sat, 15 Jan 2011 04:46:11 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=00221540147eeca3340499d98e52 Cc: "David S. Miller" , Alexey Kuznetsov , "Pekka Savola (ipv6)" , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , Nick Piggin , Al Viro , Christoph Hellwig , Lucian Adrian Grijincu , Dave Chinner , Neil Horman , Eric Dumazet , Alexey Dobriyan , Octavian Purdila , Vlad Dogaru To: netdev@vger.kernel.org Return-path: Received: from mail-iy0-f174.google.com ([209.85.210.174]:40603 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752071Ab1AOCqc (ORCPT ); Fri, 14 Jan 2011 21:46:32 -0500 Received: by iyj18 with SMTP id 18so3059745iyj.19 for ; Fri, 14 Jan 2011 18:46:32 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: --00221540147eeca3340499d98e52 Content-Type: text/plain; charset=UTF-8 For each network device DEVNAME that supports ipv4 a new table was registered in net/ipv4/conf/DEVNAME/. The sysctl table was identical for all network devices, except for the ->data, ->extra1 and ->extra2 members. However, given the 'struct net_device*' corresponding to the device DEVNAME we can compute data and extra1. extra2 cannot be computed, it is the 'struct net*' of the device and it is used to find the correct 'struct net_device*' with this name (e.g. we will have 'lo' in every network namespace). We cannot use the current process' network namespace. For example, after running this code: int fd = open("/proc/sys/net/ipv4/conf/default/tag", O_RDONLY); unshare(CLONE_NEWNET); 'fd' points to a sysctl for a network namespace different from the current process' network namespace. To gain access to the name of the directory above a file, sysctl handlers are passed an extra argument: the 'struct file*' corresponding to the file. From the file we walk up one level to find the name of the device. None of the other handlers were changed to receive this extra parameter, but due to C's calling convention they shouldn't care. Each table has 26 entries (25 files + 1 sentinel). For each net device this patch should save: * 32bit: 26 * 36 = 936 bytes * 64bit: 26 * 64 = 1664 bytes **This patch was not thoroughly tested, I'm just looking for feedback whether the approach is sound and could be applied. Similar changes can be implemented for ipv6 too.** Signed-off-by: Lucian Adrian Grijincu --- fs/proc/proc_sysctl.c | 11 ++- include/linux/inetdevice.h | 14 +++- include/net/netns/ipv4.h | 14 +++ net/ipv4/devinet.c | 236 +++++++++++++++++++++++++++++--------------- 4 files changed, 194 insertions(+), 81 deletions(-) --00221540147eeca3340499d98e52 Content-Type: text/x-patch; charset=US-ASCII; name="0001-RFC-ipv4-share-sysctl-net-ipv4-conf-DEVNAME-tables.patch" Content-Disposition: attachment; filename="0001-RFC-ipv4-share-sysctl-net-ipv4-conf-DEVNAME-tables.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: 5a1903e249d3cba8_0.1 ZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19zeXNjdGwuYyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwu Yw0KaW5kZXggMDlhMWY5Mi4uOTAxYmZlMyAxMDA2NDQNCi0tLSBhL2ZzL3Byb2MvcHJvY19zeXNj dGwuYw0KKysrIGIvZnMvcHJvYy9wcm9jX3N5c2N0bC5jDQpAQCAtMTI5LDYgKzEyOSwxMSBAQCBv dXQ6DQogCXJldHVybiBlcnI7DQogfQ0KIA0KKw0KK3R5cGVkZWYgaW50IHByb2NfaGFuZGxlcl9l eHRlbmRlZChzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwNCisJCQkJICB2b2lkIF9f dXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcywNCisJCQkJICBzdHJ1Y3Qg ZmlsZSAqZmlscCk7DQorDQogc3RhdGljIHNzaXplX3QgcHJvY19zeXNfY2FsbF9oYW5kbGVyKHN0 cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmLA0KIAkJc2l6ZV90IGNvdW50LCBsb2Zm X3QgKnBwb3MsIGludCB3cml0ZSkNCiB7DQpAQCAtMTM3LDYgKzE0Miw3IEBAIHN0YXRpYyBzc2l6 ZV90IHByb2Nfc3lzX2NhbGxfaGFuZGxlcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCBfX3VzZXIg KmJ1ZiwNCiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBQUk9DX0koaW5vZGUpLT5zeXNjdGxf ZW50cnk7DQogCXNzaXplX3QgZXJyb3I7DQogCXNpemVfdCByZXM7DQorCXByb2NfaGFuZGxlcl9l eHRlbmRlZCAqcGh4ID0gKHByb2NfaGFuZGxlcl9leHRlbmRlZCAqKSB0YWJsZS0+cHJvY19oYW5k bGVyOw0KIA0KIAlpZiAoSVNfRVJSKGhlYWQpKQ0KIAkJcmV0dXJuIFBUUl9FUlIoaGVhZCk7DQpA QCAtMTU2LDcgKzE2MiwxMCBAQCBzdGF0aWMgc3NpemVfdCBwcm9jX3N5c19jYWxsX2hhbmRsZXIo c3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWYsDQogDQogCS8qIGNhcmVmdWw6IGNh bGxpbmcgY29udmVudGlvbnMgYXJlIG5hc3R5IGhlcmUgKi8NCiAJcmVzID0gY291bnQ7DQotCWVy cm9yID0gdGFibGUtPnByb2NfaGFuZGxlcih0YWJsZSwgd3JpdGUsIGJ1ZiwgJnJlcywgcHBvcyk7 DQorCS8qIG1vc3QgaGFuZGxlcnMgb25seSB1c2UgdGhlIGZpcnN0IDUgYXJndW1lbnRzICh3aXRo b3V0IEBmaWxwKS4NCisJICogQ2hhbmdpbmcgYWxsIGlzIHRvbyBtdWNoIG9mIHdvcmssIGFzLCBh dCB0aGUgdGltZSBvZiB3cml0dGluZyBvbmx5DQorCSAqIG9uZSBwcm9jX2hhbmRsZXIga25vd3Mg YWJvdXQgYW5kIHVzZXMgdGhlIEBmaWxwLiAqLw0KKwllcnJvciA9IHBoeCh0YWJsZSwgd3JpdGUs IGJ1ZiwgJnJlcywgcHBvcywgZmlscCk7DQogCWlmICghZXJyb3IpDQogCQllcnJvciA9IHJlczsN CiBvdXQ6DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRl L2xpbnV4L2luZXRkZXZpY2UuaA0KaW5kZXggYWU4ZmRjNS4uYWJlMmUyNSAxMDA2NDQNCi0tLSBh L2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZp Y2UuaA0KQEAgLTQzLDggKzQzLDIwIEBAIGVudW0NCiANCiAjZGVmaW5lIElQVjRfREVWQ09ORl9N QVggKF9fSVBWNF9ERVZDT05GX01BWCAtIDEpDQogDQorDQorc3RydWN0IGRldmluZXRfc3lzY3Rs IHsNCisJLyoNCisJICogZGV2X25hbWUgaG9sZHMgYSBjb3B5IG9mIGRldl9uYW1lLCBiZWNhdXNl ICcucHJvY25hbWUnIGlzIHJlZ2FyZGVkIGFzIGNvbnN0DQorCSAqIGJ5IHN5c2N0bCBhbmQgd2Ug d291bGRuJ3Qgd2FudCBhbnlvbmUgdG8gY2hhbmdlIGl0IHVuZGVyIG91ciBmZWV0DQorCSAqIChz ZWUgU0lPQ1NJRk5BTUUpLg0KKwkgKi8NCisJY2hhciAqZGV2X25hbWU7DQorCXN0cnVjdCBjdGxf dGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyOw0KK307DQorDQorDQogc3RydWN0IGlwdjRfZGV2 Y29uZiB7DQotCXZvaWQJKnN5c2N0bDsNCisJc3RydWN0IGRldmluZXRfc3lzY3RsIGRldmluZXRf c3lzY3RsOw0KIAlpbnQJZGF0YVtJUFY0X0RFVkNPTkZfTUFYXTsNCiAJREVDTEFSRV9CSVRNQVAo c3RhdGUsIElQVjRfREVWQ09ORl9NQVgpOw0KIH07DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQv bmV0bnMvaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oDQppbmRleCBkNjhjM2YxLi41 MjEwMjE1IDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oDQorKysgYi9pbmNs dWRlL25ldC9uZXRucy9pcHY0LmgNCkBAIC03LDYgKzcsNyBAQA0KIA0KICNpbmNsdWRlIDxuZXQv aW5ldF9mcmFnLmg+DQogDQorc3RydWN0IGN0bF90YWJsZTsNCiBzdHJ1Y3QgY3RsX3RhYmxlX2hl YWRlcjsNCiBzdHJ1Y3QgaXB2NF9kZXZjb25mOw0KIHN0cnVjdCBmaWJfcnVsZXNfb3BzOw0KQEAg LTE5LDYgKzIwLDE5IEBAIHN0cnVjdCBuZXRuc19pcHY0IHsNCiAJc3RydWN0IGN0bF90YWJsZV9o ZWFkZXIJKmZyYWdzX2hkcjsNCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmlwdjRfaGRyOw0K IAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcm91dGVfaGRyOw0KKwkvKiBUaGlzIGhvbGRzIHRo ZSBjb250ZW50cyBvZiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi8kREVWX05BTUUvDQorCSAqDQor CSAqIFRoZSBkZXZpbmV0X3N5c2N0bF90YWJsZSBpcyBzaGFyZWQgYnkgYWxsIG5ldHdvcmsgZGV2 aWNlcw0KKwkgKiBpbiB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSwgYnV0IGVhY2ggbmV0d29y ayBuYW1lc3BhY2UNCisJICogbmVlZHMgaXQncyBvd24gY29weSBvZiB0aGUgdGFibGUgKHRoZSAt PmV4dHJhMiBtZW1iZXIgb2YNCisJICogZWFjaCBjdGxfdGFibGUgbXVzdCBwb2ludCB0byB0aGUg Y29ycmVzcG9uZGluZyAnc3RydWN0IG5ldConKS4NCisJICoNCisJICogVGhlIC0+ZGF0YSBtZW1i ZXIgaXMgbm90IHVzZWQgYXMgZGVmaW5lZCBpbiB0aGlzIHRhYmxlLiBUaGUNCisJICogcHJvY19o YW5kbGVyIGRldGVybWluZXMgdGhlIGFwcm9waWF0ZSBkYXRhIGxvY2F0aW9uIGJhc2VkDQorCSAq IG9uIHRoZSAnc3RydWN0IG5ldF9kZXZpY2UqJyBoYXZpbmcgdGhlIHNhbWUgbmFtZSBhcw0KKwkg KiAkREVWX05BTUUgYWJvdmUuDQorCSAqLw0KKwlzdHJ1Y3QgY3RsX3RhYmxlCSpkZXZpbmV0X3N5 c2N0bF90YWJsZTsNCiAjZW5kaWYNCiAJc3RydWN0IGlwdjRfZGV2Y29uZgkqZGV2Y29uZl9hbGw7 DQogCXN0cnVjdCBpcHY0X2RldmNvbmYJKmRldmNvbmZfZGZsdDsNCmRpZmYgLS1naXQgYS9uZXQv aXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMNCmluZGV4IDc0OGNiNWIuLmQwM2Rm ZGMgMTAwNjQ0DQotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMNCisrKyBiL25ldC9pcHY0L2Rldmlu ZXQuYw0KQEAgLTE1OCw3ICsxNTgsOCBAQCBzdGF0aWMgc3RydWN0IGluX2RldmljZSAqaW5ldGRl dl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQogCQlnb3RvIG91dDsNCiAJbWVtY3B5KCZp bl9kZXYtPmNuZiwgZGV2X25ldChkZXYpLT5pcHY0LmRldmNvbmZfZGZsdCwNCiAJCQlzaXplb2Yo aW5fZGV2LT5jbmYpKTsNCi0JaW5fZGV2LT5jbmYuc3lzY3RsID0gTlVMTDsNCisJaW5fZGV2LT5j bmYuZGV2aW5ldF9zeXNjdGwuZGV2X25hbWUgPSBOVUxMOw0KKwlpbl9kZXYtPmNuZi5kZXZpbmV0 X3N5c2N0bC5zeXNjdGxfaGVhZGVyID0gTlVMTDsNCiAJaW5fZGV2LT5kZXYgPSBkZXY7DQogCWlu X2Rldi0+YXJwX3Bhcm1zID0gbmVpZ2hfcGFybXNfYWxsb2MoZGV2LCAmYXJwX3RibCk7DQogCWlm ICghaW5fZGV2LT5hcnBfcGFybXMpDQpAQCAtMTM3NSw5ICsxMzc2LDU2IEBAIHN0YXRpYyB2b2lk IGluZXRfZm9yd2FyZF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0KQ0KIAl9DQogfQ0KIA0KLXN0YXRp YyBpbnQgZGV2aW5ldF9jb25mX3Byb2MoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwNCi0JCQkg ICAgIHZvaWQgX191c2VyICpidWZmZXIsDQotCQkJICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAq cHBvcykNCisNCisNCitzdGF0aWMgaW50IGRldmluZXRfY29uZl9oYW5kbGVyKGN0bF90YWJsZSAq Y3RsLCBpbnQgd3JpdGUsDQorCQkJCXZvaWQgX191c2VyICpidWZmZXIsDQorCQkJCXNpemVfdCAq bGVucCwgbG9mZl90ICpwcG9zLA0KKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCwNCisJCQkJcHJvY19o YW5kbGVyICpwcm9jX2hhbmRsZXIpDQorew0KKwkvKiBUaGUgcGF0aCB0byB0aGlzIGZpbGUgaXMg b2YgdGhlIGZvcm0gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJERFVk5BTUUvJENUTA0KKwkgKg0K KwkgKiBUbyBzYXZlIHNwYWNlLCBjdGxfdGFibGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIG5ldHdv cmsNCisJICogZGV2aWNlcyBpbiB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSwgYnV0IHdlIG5l ZWQgdG8NCisJICogY2hhbmdlIHRoZSBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlICRERVZOQU1F IG5ldHdvcmsNCisJICogZGV2aWNlLCBub3QgYW55IG90aGVyJ3MuDQorCSAqDQorCSAqIFVzZSAk REVWTkFNRSB0byBvYnRhaW4gdGhlIGNvcmVzcG9uZGluZyBpcHY0X2RldmNvbmYuDQorCSAqLw0K KwlzdHJ1Y3QgbmV0ICpuZXQgPSBjdGwtPmV4dHJhMjsNCisJY29uc3QgY2hhciAqZGV2X25hbWUg PSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWU7DQorCXN0cnVjdCBj dGxfdGFibGUgdG1wX2N0bCA9ICpjdGw7DQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxM Ow0KKwlzdHJ1Y3QgaXB2NF9kZXZjb25mICpjbmY7DQorCWludCByZXQ7DQorDQorCWlmIChzdHJj bXAoZGV2X25hbWUsICJhbGwiKSA9PSAwKSB7DQorCQljbmYgPSBuZXQtPmlwdjQuZGV2Y29uZl9h bGw7DQorCX0gZWxzZSBpZiAoc3RyY21wKGRldl9uYW1lLCAiZGVmYXVsdCIpID09IDApIHsNCisJ CWNuZiA9IG5ldC0+aXB2NC5kZXZjb25mX2RmbHQ7DQorCX0gZWxzZSB7DQorCQkvKiB0aGUgZGV2 aWNlIGNvdWxkIGhhdmUgYmVlbiByZW5hbWVkIChTSU9DU0lGQUREUikgb3INCisJCSAqIGRlbGV0 ZWQgc2luY2Ugd2Ugc3RhcnRlZCBhY2Nlc3NpbmcgaXQncyBwcm9jIHN5c2N0bCAqLw0KKwkJZGV2 ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgZGV2X25hbWUpOw0KKwkJaWYgKGRldiA9PSBOVUxMKQ0K KwkJCXJldHVybiAtRU5PRU5UOw0KKwkJY25mID0gJmluX2Rldl9nZXQoZGV2KS0+Y25mOw0KKwl9 DQorDQorCXRtcF9jdGwuZGF0YSArPSAoY2hhciAqKWNuZiAtIChjaGFyICopJmlwdjRfZGV2Y29u ZjsNCisJdG1wX2N0bC5leHRyYTEgPSBjbmY7DQorDQorCXJldCA9IHByb2NfaGFuZGxlcigmdG1w X2N0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7DQorDQorCWlmIChkZXYpDQorCQlkZXZf cHV0KGRldik7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19kZXZpbmV0X2Nv bmZfcHJvYyhjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLA0KKwkJCSAgICAgICB2b2lkIF9fdXNl ciAqYnVmZmVyLA0KKwkJCSAgICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykNCiB7DQog CWludCByZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7 DQogDQpAQCAtMTM5NSw5ICsxNDQzLDkgQEAgc3RhdGljIGludCBkZXZpbmV0X2NvbmZfcHJvYyhj dGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLA0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCi1zdGF0aWMg aW50IGRldmluZXRfc3lzY3RsX2ZvcndhcmQoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwNCi0J CQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLA0KLQkJCQkgIHNpemVfdCAqbGVucCwgbG9mZl90ICpw cG9zKQ0KK3N0YXRpYyBpbnQgX19kZXZpbmV0X3N5c2N0bF9mb3J3YXJkKGN0bF90YWJsZSAqY3Rs LCBpbnQgd3JpdGUsDQorCQkJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLA0KKwkJCQkgICAgc2l6 ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpDQogew0KIAlpbnQgKnZhbHAgPSBjdGwtPmRhdGE7DQog CWludCB2YWwgPSAqdmFscDsNCkBAIC0xNDMwLDkgKzE0NzgsMTAgQEAgc3RhdGljIGludCBkZXZp bmV0X3N5c2N0bF9mb3J3YXJkKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsDQogCXJldHVybiBy ZXQ7DQogfQ0KIA0KLXN0YXRpYyBpbnQgaXB2NF9kb2ludF9hbmRfZmx1c2goY3RsX3RhYmxlICpj dGwsIGludCB3cml0ZSwNCi0JCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwNCi0JCQkJc2l6ZV90ICps ZW5wLCBsb2ZmX3QgKnBwb3MpDQorDQorc3RhdGljIGludCBfX2lwdjRfZG9pbnRfYW5kX2ZsdXNo KGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsDQorCQkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwN CisJCQkJICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykNCiB7DQogCWludCAqdmFscCA9IGN0 bC0+ZGF0YTsNCiAJaW50IHZhbCA9ICp2YWxwOw0KQEAgLTE0NDUsNiArMTQ5NCwzMyBAQCBzdGF0 aWMgaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsDQog CXJldHVybiByZXQ7DQogfQ0KIA0KK3N0YXRpYyBpbnQgZGV2aW5ldF9jb25mX3Byb2MoY3RsX3Rh YmxlICpjdGwsIGludCB3cml0ZSwNCisJCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsDQorCQkJ ICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcywNCisJCQkgICAgIHN0cnVjdCBmaWxlICpm aWxwKQ0KK3sNCisJcmV0dXJuIGRldmluZXRfY29uZl9oYW5kbGVyKGN0bCwgd3JpdGUsIGJ1ZmZl ciwgbGVucCwgcHBvcywgZmlscCwNCisJCQkJICAgIF9fZGV2aW5ldF9jb25mX3Byb2MpOw0KK30N CisNCitzdGF0aWMgaW50IGRldmluZXRfc3lzY3RsX2ZvcndhcmQoY3RsX3RhYmxlICpjdGwsIGlu dCB3cml0ZSwNCisJCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLA0KKwkJCQkgIHNpemVfdCAqbGVu cCwgbG9mZl90ICpwcG9zLA0KKwkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKQ0KK3sNCisJcmV0dXJu IGRldmluZXRfY29uZl9oYW5kbGVyKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcywgZmls cCwNCisJCQkJICAgIF9fZGV2aW5ldF9zeXNjdGxfZm9yd2FyZCk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgaXB2NF9kb2ludF9hbmRfZmx1c2goY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwNCisJCQkJ dm9pZCBfX3VzZXIgKmJ1ZmZlciwNCisJCQkJc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsDQor CQkJCXN0cnVjdCBmaWxlICpmaWxwKQ0KK3sNCisJcmV0dXJuIGRldmluZXRfY29uZl9oYW5kbGVy KGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcywgZmlscCwNCisJCQkJICAgIF9faXB2NF9k b2ludF9hbmRfZmx1c2gpOw0KK30NCisNCiAjZGVmaW5lIERFVklORVRfU1lTQ1RMX0VOVFJZKGF0 dHIsIG5hbWUsIG12YWwsIHByb2MpIFwNCiAJeyBcDQogCQkucHJvY25hbWUJPSBuYW1lLCBcDQpA QCAtMTQ1NCw2ICsxNTMwLDcgQEAgc3RhdGljIGludCBpcHY0X2RvaW50X2FuZF9mbHVzaChjdGxf dGFibGUgKmN0bCwgaW50IHdyaXRlLA0KIAkJLm1vZGUJCT0gbXZhbCwgXA0KIAkJLnByb2NfaGFu ZGxlcgk9IHByb2MsIFwNCiAJCS5leHRyYTEJCT0gJmlwdjRfZGV2Y29uZiwgXA0KKwkJLmV4dHJh MgkJPSAmaW5pdF9uZXQsIFwNCiAJfQ0KIA0KICNkZWZpbmUgREVWSU5FVF9TWVNDVExfUldfRU5U UlkoYXR0ciwgbmFtZSkgXA0KQEAgLTE0NjgsNTEgKzE1NDUsNDUgQEAgc3RhdGljIGludCBpcHY0 X2RvaW50X2FuZF9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLA0KICNkZWZpbmUgREVW SU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoYXR0ciwgbmFtZSkgXA0KIAlERVZJTkVUX1NZU0NU TF9DT01QTEVYX0VOVFJZKGF0dHIsIG5hbWUsIGlwdjRfZG9pbnRfYW5kX2ZsdXNoKQ0KIA0KLXN0 YXRpYyBzdHJ1Y3QgZGV2aW5ldF9zeXNjdGxfdGFibGUgew0KLQlzdHJ1Y3QgY3RsX3RhYmxlX2hl YWRlciAqc3lzY3RsX2hlYWRlcjsNCi0Jc3RydWN0IGN0bF90YWJsZSBkZXZpbmV0X3ZhcnNbX19J UFY0X0RFVkNPTkZfTUFYXTsNCi0JY2hhciAqZGV2X25hbWU7DQotfSBkZXZpbmV0X3N5c2N0bCA9 IHsNCi0JLmRldmluZXRfdmFycyA9IHsNCi0JCURFVklORVRfU1lTQ1RMX0NPTVBMRVhfRU5UUlko Rk9SV0FSRElORywgImZvcndhcmRpbmciLA0KLQkJCQkJICAgICBkZXZpbmV0X3N5c2N0bF9mb3J3 YXJkKSwNCi0JCURFVklORVRfU1lTQ1RMX1JPX0VOVFJZKE1DX0ZPUldBUkRJTkcsICJtY19mb3J3 YXJkaW5nIiksDQotDQotCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBQ0NFUFRfUkVESVJFQ1RT LCAiYWNjZXB0X3JlZGlyZWN0cyIpLA0KLQkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoU0VDVVJF X1JFRElSRUNUUywgInNlY3VyZV9yZWRpcmVjdHMiKSwNCi0JCURFVklORVRfU1lTQ1RMX1JXX0VO VFJZKFNIQVJFRF9NRURJQSwgInNoYXJlZF9tZWRpYSIpLA0KLQkJREVWSU5FVF9TWVNDVExfUldf RU5UUlkoUlBfRklMVEVSLCAicnBfZmlsdGVyIiksDQotCQlERVZJTkVUX1NZU0NUTF9SV19FTlRS WShTRU5EX1JFRElSRUNUUywgInNlbmRfcmVkaXJlY3RzIiksDQotCQlERVZJTkVUX1NZU0NUTF9S V19FTlRSWShBQ0NFUFRfU09VUkNFX1JPVVRFLA0KLQkJCQkJImFjY2VwdF9zb3VyY2Vfcm91dGUi KSwNCi0JCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFDQ0VQVF9MT0NBTCwgImFjY2VwdF9sb2Nh bCIpLA0KLQkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoU1JDX1ZNQVJLLCAic3JjX3ZhbGlkX21h cmsiKSwNCi0JCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFBST1hZX0FSUCwgInByb3h5X2FycCIp LA0KLQkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoTUVESVVNX0lELCAibWVkaXVtX2lkIiksDQot CQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShCT09UUF9SRUxBWSwgImJvb3RwX3JlbGF5IiksDQot CQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShMT0dfTUFSVElBTlMsICJsb2dfbWFydGlhbnMiKSwN Ci0JCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFRBRywgInRhZyIpLA0KLQkJREVWSU5FVF9TWVND VExfUldfRU5UUlkoQVJQRklMVEVSLCAiYXJwX2ZpbHRlciIpLA0KLQkJREVWSU5FVF9TWVNDVExf UldfRU5UUlkoQVJQX0FOTk9VTkNFLCAiYXJwX2Fubm91bmNlIiksDQotCQlERVZJTkVUX1NZU0NU TF9SV19FTlRSWShBUlBfSUdOT1JFLCAiYXJwX2lnbm9yZSIpLA0KLQkJREVWSU5FVF9TWVNDVExf UldfRU5UUlkoQVJQX0FDQ0VQVCwgImFycF9hY2NlcHQiKSwNCi0JCURFVklORVRfU1lTQ1RMX1JX X0VOVFJZKEFSUF9OT1RJRlksICJhcnBfbm90aWZ5IiksDQotCQlERVZJTkVUX1NZU0NUTF9SV19F TlRSWShQUk9YWV9BUlBfUFZMQU4sICJwcm94eV9hcnBfcHZsYW4iKSwNCi0NCi0JCURFVklORVRf U1lTQ1RMX0ZMVVNISU5HX0VOVFJZKE5PWEZSTSwgImRpc2FibGVfeGZybSIpLA0KLQkJREVWSU5F VF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLA0KLQkJ REVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoRk9SQ0VfSUdNUF9WRVJTSU9OLA0KLQkJCQkJ ICAgICAgImZvcmNlX2lnbXBfdmVyc2lvbiIpLA0KLQkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdf RU5UUlkoUFJPTU9URV9TRUNPTkRBUklFUywNCi0JCQkJCSAgICAgICJwcm9tb3RlX3NlY29uZGFy aWVzIiksDQotCX0sDQorc3RydWN0IGN0bF90YWJsZSBpcHY0X2RldmluZXRfc3lzY3RsX3RhYmxl W19fSVBWNF9ERVZDT05GX01BWF0gPSB7DQorCURFVklORVRfU1lTQ1RMX0NPTVBMRVhfRU5UUlko Rk9SV0FSRElORywgImZvcndhcmRpbmciLA0KKwkJCQkgICAgIGRldmluZXRfc3lzY3RsX2Zvcndh cmQpLA0KKwlERVZJTkVUX1NZU0NUTF9ST19FTlRSWShNQ19GT1JXQVJESU5HLCAibWNfZm9yd2Fy ZGluZyIpLA0KKw0KKwlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBQ0NFUFRfUkVESVJFQ1RTLCAi YWNjZXB0X3JlZGlyZWN0cyIpLA0KKwlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShTRUNVUkVfUkVE SVJFQ1RTLCAic2VjdXJlX3JlZGlyZWN0cyIpLA0KKwlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShT SEFSRURfTUVESUEsICJzaGFyZWRfbWVkaWEiKSwNCisJREVWSU5FVF9TWVNDVExfUldfRU5UUlko UlBfRklMVEVSLCAicnBfZmlsdGVyIiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFNFTkRf UkVESVJFQ1RTLCAic2VuZF9yZWRpcmVjdHMiKSwNCisJREVWSU5FVF9TWVNDVExfUldfRU5UUlko QUNDRVBUX1NPVVJDRV9ST1VURSwNCisJCQkJImFjY2VwdF9zb3VyY2Vfcm91dGUiKSwNCisJREVW SU5FVF9TWVNDVExfUldfRU5UUlkoQUNDRVBUX0xPQ0FMLCAiYWNjZXB0X2xvY2FsIiksDQorCURF VklORVRfU1lTQ1RMX1JXX0VOVFJZKFNSQ19WTUFSSywgInNyY192YWxpZF9tYXJrIiksDQorCURF VklORVRfU1lTQ1RMX1JXX0VOVFJZKFBST1hZX0FSUCwgInByb3h5X2FycCIpLA0KKwlERVZJTkVU X1NZU0NUTF9SV19FTlRSWShNRURJVU1fSUQsICJtZWRpdW1faWQiKSwNCisJREVWSU5FVF9TWVND VExfUldfRU5UUlkoQk9PVFBfUkVMQVksICJib290cF9yZWxheSIpLA0KKwlERVZJTkVUX1NZU0NU TF9SV19FTlRSWShMT0dfTUFSVElBTlMsICJsb2dfbWFydGlhbnMiKSwNCisJREVWSU5FVF9TWVND VExfUldfRU5UUlkoVEFHLCAidGFnIiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUEZJ TFRFUiwgImFycF9maWx0ZXIiKSwNCisJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0FOTk9V TkNFLCAiYXJwX2Fubm91bmNlIiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9JR05P UkUsICJhcnBfaWdub3JlIiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9BQ0NFUFQs ICJhcnBfYWNjZXB0IiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9OT1RJRlksICJh cnBfbm90aWZ5IiksDQorCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFBST1hZX0FSUF9QVkxBTiwg InByb3h5X2FycF9wdmxhbiIpLA0KKw0KKwlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShO T1hGUk0sICJkaXNhYmxlX3hmcm0iKSwNCisJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlko Tk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLA0KKwlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19F TlRSWShGT1JDRV9JR01QX1ZFUlNJT04sDQorCQkJCSAgICAgICJmb3JjZV9pZ21wX3ZlcnNpb24i KSwNCisJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoUFJPTU9URV9TRUNPTkRBUklFUywN CisJCQkJICAgICAgInByb21vdGVfc2Vjb25kYXJpZXMiKSwNCisJeyB9DQogfTsNCiANCiBzdGF0 aWMgaW50IF9fZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICpk ZXZfbmFtZSwNCi0JCQkJCXN0cnVjdCBpcHY0X2RldmNvbmYgKnApDQorCQkJCSAgICAgc3RydWN0 IGlwdjRfZGV2Y29uZiAqY25mKQ0KIHsNCi0JaW50IGk7DQotCXN0cnVjdCBkZXZpbmV0X3N5c2N0 bF90YWJsZSAqdDsNCisJc3RydWN0IGRldmluZXRfc3lzY3RsICpkc3lzID0gJmNuZi0+ZGV2aW5l dF9zeXNjdGw7DQogDQogI2RlZmluZSBERVZJTkVUX0NUTF9QQVRIX0RFVgkzDQogDQpAQCAtMTUy NCw1NCArMTU5NSw0MiBAQCBzdGF0aWMgaW50IF9fZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoc3Ry dWN0IG5ldCAqbmV0LCBjaGFyICpkZXZfbmFtZSwNCiAJCXsgfSwNCiAJfTsNCiANCi0JdCA9IGtt ZW1kdXAoJmRldmluZXRfc3lzY3RsLCBzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsNCi0JaWYgKCF0 KQ0KLQkJZ290byBvdXQ7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHQtPmRldmlu ZXRfdmFycykgLSAxOyBpKyspIHsNCi0JCXQtPmRldmluZXRfdmFyc1tpXS5kYXRhICs9IChjaGFy ICopcCAtIChjaGFyICopJmlwdjRfZGV2Y29uZjsNCi0JCXQtPmRldmluZXRfdmFyc1tpXS5leHRy YTEgPSBwOw0KLQkJdC0+ZGV2aW5ldF92YXJzW2ldLmV4dHJhMiA9IG5ldDsNCi0JfQ0KLQ0KIAkv Kg0KIAkgKiBNYWtlIGEgY29weSBvZiBkZXZfbmFtZSwgYmVjYXVzZSAnLnByb2NuYW1lJyBpcyBy ZWdhcmRlZCBhcyBjb25zdA0KIAkgKiBieSBzeXNjdGwgYW5kIHdlIHdvdWxkbid0IHdhbnQgYW55 b25lIHRvIGNoYW5nZSBpdCB1bmRlciBvdXIgZmVldA0KIAkgKiAoc2VlIFNJT0NTSUZOQU1FKS4N CiAJICovDQotCXQtPmRldl9uYW1lID0ga3N0cmR1cChkZXZfbmFtZSwgR0ZQX0tFUk5FTCk7DQot CWlmICghdC0+ZGV2X25hbWUpDQotCQlnb3RvIGZyZWU7DQorCWRzeXMtPmRldl9uYW1lID0ga3N0 cmR1cChkZXZfbmFtZSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZHN5cy0+ZGV2X25hbWUpDQorCQln b3RvIG91dDsNCiANCi0JZGV2aW5ldF9jdGxfcGF0aFtERVZJTkVUX0NUTF9QQVRIX0RFVl0ucHJv Y25hbWUgPSB0LT5kZXZfbmFtZTsNCisJZGV2aW5ldF9jdGxfcGF0aFtERVZJTkVUX0NUTF9QQVRI X0RFVl0ucHJvY25hbWUgPSBkc3lzLT5kZXZfbmFtZTsNCiANCi0JdC0+c3lzY3RsX2hlYWRlciA9 IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBkZXZpbmV0X2N0bF9wYXRoLA0KLQkJCXQt PmRldmluZXRfdmFycyk7DQotCWlmICghdC0+c3lzY3RsX2hlYWRlcikNCisJZHN5cy0+c3lzY3Rs X2hlYWRlciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBkZXZpbmV0X2N0bF9wYXRo LA0KKwkJCQkJCW5ldC0+aXB2NC5kZXZpbmV0X3N5c2N0bF90YWJsZSk7DQorCWlmICghZHN5cy0+ c3lzY3RsX2hlYWRlcikNCiAJCWdvdG8gZnJlZV9wcm9jbmFtZTsNCiANCi0JcC0+c3lzY3RsID0g dDsNCiAJcmV0dXJuIDA7DQogDQogZnJlZV9wcm9jbmFtZToNCi0Ja2ZyZWUodC0+ZGV2X25hbWUp Ow0KLWZyZWU6DQotCWtmcmVlKHQpOw0KKwlrZnJlZShkc3lzLT5kZXZfbmFtZSk7DQogb3V0Og0K IAlyZXR1cm4gLUVOT0JVRlM7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIF9fZGV2aW5ldF9zeXNjdGxf dW5yZWdpc3RlcihzdHJ1Y3QgaXB2NF9kZXZjb25mICpjbmYpDQogew0KLQlzdHJ1Y3QgZGV2aW5l dF9zeXNjdGxfdGFibGUgKnQgPSBjbmYtPnN5c2N0bDsNCisJc3RydWN0IGRldmluZXRfc3lzY3Rs ICpkc3lzID0gJmNuZi0+ZGV2aW5ldF9zeXNjdGw7DQogDQotCWlmICh0ID09IE5VTEwpDQorCWlm IChkc3lzID09IE5VTEwpDQogCQlyZXR1cm47DQogDQotCWNuZi0+c3lzY3RsID0gTlVMTDsNCi0J dW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUodC0+c3lzY3RsX2hlYWRlcik7DQotCWtmcmVlKHQtPmRl dl9uYW1lKTsNCi0Ja2ZyZWUodCk7DQorCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGRzeXMtPnN5 c2N0bF9oZWFkZXIpOw0KKwlrZnJlZShkc3lzLT5kZXZfbmFtZSk7DQorDQorCWRzeXMtPmRldl9u YW1lID0gTlVMTDsNCisJZHN5cy0+c3lzY3RsX2hlYWRlciA9IE5VTEw7DQogfQ0KIA0KIHN0YXRp YyB2b2lkIGRldmluZXRfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpDQpA QCAtMTYxMCw5ICsxNjY5LDEwIEBAIHN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgY3RsX3Bh dGggbmV0X2lwdjRfcGF0aFtdID0gew0KIA0KIHN0YXRpYyBfX25ldF9pbml0IGludCBkZXZpbmV0 X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkNCiB7DQotCWludCBlcnI7DQorCWludCBpLCBlcnI7 DQogCXN0cnVjdCBpcHY0X2RldmNvbmYgKmFsbCwgKmRmbHQ7DQogI2lmZGVmIENPTkZJR19TWVND VEwNCisJc3RydWN0IGN0bF90YWJsZSAqZGV2aW5ldF9zeXNjdGxfdGFibGU7DQogCXN0cnVjdCBj dGxfdGFibGUgKnRibCA9IGN0bF9mb3J3YXJkX2VudHJ5Ow0KIAlzdHJ1Y3QgY3RsX3RhYmxlX2hl YWRlciAqZm9yd19oZHI7DQogI2VuZGlmDQpAQCAtMTYyMCw2ICsxNjgwLDcgQEAgc3RhdGljIF9f bmV0X2luaXQgaW50IGRldmluZXRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQ0KIAllcnIgPSAt RU5PTUVNOw0KIAlhbGwgPSAmaXB2NF9kZXZjb25mOw0KIAlkZmx0ID0gJmlwdjRfZGV2Y29uZl9k Zmx0Ow0KKwlkZXZpbmV0X3N5c2N0bF90YWJsZSA9ICZpcHY0X2RldmluZXRfc3lzY3RsX3RhYmxl WzBdOw0KIA0KIAlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpIHsNCiAJCWFsbCA9IGttZW1k dXAoYWxsLCBzaXplb2YoaXB2NF9kZXZjb25mKSwgR0ZQX0tFUk5FTCk7DQpAQCAtMTYzOCwxMCAr MTY5OSwyMyBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgZGV2aW5ldF9pbml0X25ldChzdHJ1Y3Qg bmV0ICpuZXQpDQogCQl0YmxbMF0uZGF0YSA9ICZhbGwtPmRhdGFbSVBWNF9ERVZDT05GX0ZPUldB UkRJTkcgLSAxXTsNCiAJCXRibFswXS5leHRyYTEgPSBhbGw7DQogCQl0YmxbMF0uZXh0cmEyID0g bmV0Ow0KKw0KKwkJZGV2aW5ldF9zeXNjdGxfdGFibGUgPSBrbWVtZHVwKGlwdjRfZGV2aW5ldF9z eXNjdGxfdGFibGUsDQorCQkJCQkgICAgICAgc2l6ZW9mKGlwdjRfZGV2aW5ldF9zeXNjdGxfdGFi bGUpLA0KKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOw0KKwkJaWYgKGRldmluZXRfc3lzY3RsX3Rh YmxlID09IE5VTEwpDQorCQkJZ290byBlcnJfYWxsb2NfZGV2aW5ldF9zeXNjdGxfdGFibGU7DQor DQorCQkvKiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSB0YWJsZSBpcyB7IH0gYW5kIG11c3QgcmVt YWluIHNvICovDQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcHY0X2RldmluZXRfc3lz Y3RsX3RhYmxlKSAtIDE7IGkrKykgew0KKwkJCWRldmluZXRfc3lzY3RsX3RhYmxlLT5leHRyYTIg PSBuZXQ7DQorCQl9DQogI2VuZGlmDQogCX0NCiANCiAjaWZkZWYgQ09ORklHX1NZU0NUTA0KKwlu ZXQtPmlwdjQuZGV2aW5ldF9zeXNjdGxfdGFibGUgPSBkZXZpbmV0X3N5c2N0bF90YWJsZTsNCisN CiAJZXJyID0gX19kZXZpbmV0X3N5c2N0bF9yZWdpc3RlcihuZXQsICJhbGwiLCBhbGwpOw0KIAlp ZiAoZXJyIDwgMCkNCiAJCWdvdG8gZXJyX3JlZ19hbGw7DQpAQCAtMTY2Nyw2ICsxNzQxLDkgQEAg ZXJyX3JlZ19jdGw6DQogZXJyX3JlZ19kZmx0Og0KIAlfX2RldmluZXRfc3lzY3RsX3VucmVnaXN0 ZXIoYWxsKTsNCiBlcnJfcmVnX2FsbDoNCisJaWYgKGRldmluZXRfc3lzY3RsX3RhYmxlICE9ICZp cHY0X2RldmluZXRfc3lzY3RsX3RhYmxlWzBdKQ0KKwkJa2ZyZWUoZGV2aW5ldF9zeXNjdGxfdGFi bGUpOw0KK2Vycl9hbGxvY19kZXZpbmV0X3N5c2N0bF90YWJsZToNCiAJaWYgKHRibCAhPSBjdGxf Zm9yd2FyZF9lbnRyeSkNCiAJCWtmcmVlKHRibCk7DQogZXJyX2FsbG9jX2N0bDoNCkBAIC0xNjg5 LDYgKzE3NjYsNyBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIGRldmluZXRfZXhpdF9uZXQoc3Ry dWN0IG5ldCAqbmV0KQ0KIAl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LT5pcHY0LmZv cndfaGRyKTsNCiAJX19kZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKG5ldC0+aXB2NC5kZXZjb25m X2RmbHQpOw0KIAlfX2RldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIobmV0LT5pcHY0LmRldmNvbmZf YWxsKTsNCisJa2ZyZWUobmV0LT5pcHY0LmRldmluZXRfc3lzY3RsX3RhYmxlKTsNCiAJa2ZyZWUo dGJsKTsNCiAjZW5kaWYNCiAJa2ZyZWUobmV0LT5pcHY0LmRldmNvbmZfZGZsdCk7DQo= --00221540147eeca3340499d98e52--