From owner-freebsd-wireless@freebsd.org Sun Feb 28 19:16:01 2016 Return-Path: Delivered-To: freebsd-wireless@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D523FAB748F for ; Sun, 28 Feb 2016 19:16:01 +0000 (UTC) (envelope-from s3erios@gmail.com) Received: from mail-wm0-x22b.google.com (mail-wm0-x22b.google.com [IPv6:2a00:1450:400c:c09::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3E3BE1AB3; Sun, 28 Feb 2016 19:16:01 +0000 (UTC) (envelope-from s3erios@gmail.com) Received: by mail-wm0-x22b.google.com with SMTP id l68so11587562wml.0; Sun, 28 Feb 2016 11:16:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=to:subject:references:date:mime-version:from:message-id:in-reply-to :user-agent; bh=+fFTu7T8J4jiXRI30fr16YJSfd9MiDOvg+1htOmKP3c=; b=Y30Y78Xo7u5MxqeMtivQZV7+zP63TjyGm4UIyo1D/i7nh55WJ82ASbi8O2J55STpAW YLy1ewMUISJ+iDOgYg9AOQ/kwS7162YvwjOtp+gbn6gCGCXuZk4MyQlNeNBWdCmpoyPQ Aed2qpoQwPfM7x238r5eaGD6alquaz76dKbALnS8Ng0V8ECsaU4R1p83h4H0Fi9F8eGX sUa6Mw5EJgF5cvIwnpDDrNAH49gyQ6xqLl/tvn3XvCpDddy79U2hoIHb9RTExWujuWMX NqY8jQwwZKh5qr6+I0h0X71R5zR1WvHZ1SWsA0+hBGhrCIgfuhYE2e6CEEtJXFMTF2EQ 739A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:subject:references:date:mime-version:from :message-id:in-reply-to:user-agent; bh=+fFTu7T8J4jiXRI30fr16YJSfd9MiDOvg+1htOmKP3c=; b=GwYiWXkZ3HBgff9OPKlhk14cBigds3hbBIHE4mMxoPq7PidSjkY5MjWFMDviRswfs7 90E57v6cXQ6CJh+WfSSHAz8qrrdqwVxdwNrM26XhlrM+0+u8nL8Y6RfeEY4wXXspWh5/ TtFSrOmdCzWxqMClqQ261BvY/8qV21YBMv2s7sYz55Lo2YoIEyxF12Uiz+9yCc/af1vy wuUDh1VcsE9ADEnEXNT2xg3dzRiRZ54P1w+qi60J9aHJ/jj/9DJi01+UG6C1Jlp/KSQp cdK20gefCPMQkFPWpxjFaxp/YIjrJHXzT1PWE0WRjqVrohfeq1Mcd1e/A56RMtpzx9f8 yi8w== X-Gm-Message-State: AD7BkJKUafYPuoMoRRYmiZbe/THlP77LK7BvttRFWjc249YKpl8zQ8292/4mCbzmmLqcqw== X-Received: by 10.28.144.195 with SMTP id s186mr8196299wmd.9.1456686958537; Sun, 28 Feb 2016 11:15:58 -0800 (PST) Received: from localhost (host-176-37-109-22.la.net.ua. [176.37.109.22]) by smtp.gmail.com with ESMTPSA id 202sm12838098wmo.7.2016.02.28.11.15.57 (version=TLS1 cipher=AES128-SHA bits=128/128); Sun, 28 Feb 2016 11:15:57 -0800 (PST) Content-Type: multipart/mixed; boundary=----------HpTmAUBujhjyaoMMYhGG9X To: "freebsd-wireless@freebsd.org" , "Adrian Chadd" Subject: Re: software scan fix - please test (Was: why we can't use the net80211 taskqueue for everything) References: Date: Sun, 28 Feb 2016 21:15:58 +0200 MIME-Version: 1.0 From: "Andriy Voskoboinyk" Message-ID: In-Reply-To: User-Agent: Opera Mail/12.16 (FreeBSD) X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Feb 2016 19:16:01 -0000 ------------HpTmAUBujhjyaoMMYhGG9X Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes Content-Transfer-Encoding: Quoted-Printable Sat, 20 Feb 2016 12:06:17 +0200 =D0=B1=D1=83=D0=BB=D0=BE =D0=BD=D0=B0=D0= =BF=D0=B8=D1=81=D0=B0=D0=BD=D0=BE Andriy Voskoboinyk = : >> hi, >> >> andriy has a few reviews out that tidy up some things, which I'd repl= y >> to, but .. reviews is offline. So, here's the 30 second version: >> >> * the net80211 taskqueue runs the software scan engine, and the >> software scan engine currently sleeps whilst it's running. >> >> This means that if you put newstate, deferred transmit, etc into the >> net80211 taskqueue, then it just won't run during scan. >> >> The net80211 software scan thing should be modified to not sleep >> whilst it's waiting for scan results and instead just kick off anothe= r >> timer event to finish that part of the loop. Then yes, we can just >> migrate * to the net80211 task queue and use it for all serialisation= >> of a wifi driver. >> >> (And yes, I'd like to see that done ASAP..) >> >> Thanks, >> >> >> -adrian > > Hi, > > I have replaced sleeping on conditional variable inside scan task > with scan_curchan task rescheduling (so this problem should be fixed = > now). > > For everyone, who wishes to test: apply the attached patch > (merged from D5133, D5137, D5139, D5140, D5142, D5143, D5145, D5147, = > D5148 and D5152) > and rebuild + install the kernel. Scan should work as before. > > Thanks! Newer patch includes fix for = https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D197498#c7 (D5482) - so, scanning for adhoc/hostap mode should work now. ------------HpTmAUBujhjyaoMMYhGG9X Content-Disposition: attachment; filename=patch-net80211-scan.diff Content-Type: application/octet-stream; name="patch-net80211-scan.diff" Content-Transfer-Encoding: Base64 SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYwko cmV2aXNpb24gMjk2MTA4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRw dXQuYwkod29ya2luZyBjb3B5KQpAQCAtODQ5LDYgKzg0OSwxNSBAQAogCXJldHVy biAocmV0KTsKIH0KIAorc3RhdGljIHZvaWQKK2llZWU4MDIxMV9udWxsZGF0YV90 cmFuc21pdHRlZChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCB2b2lkICphcmcs CisgICAgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAg PSBuaS0+bmlfdmFwOworCisJd2FrZXVwKHZhcCk7Cit9CisKIC8qCiAgKiBTZW5k IGEgbnVsbCBkYXRhIGZyYW1lIHRvIHRoZSBzcGVjaWZpZWQgbm9kZS4gIElmIHRo ZSBzdGF0aW9uCiAgKiBpcyBzZXR1cCBmb3IgUW9TIHRoZW4gYSBRb1MgTnVsbCBE YXRhIGZyYW1lIGlzIGNvbnN0cnVjdGVkLgpAQCAtOTM3LDYgKzk0NiwxMSBAQAog CQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQKQogCQkJ d2gtPmlfZmNbMV0gfD0gSUVFRTgwMjExX0ZDMV9QV1JfTUdUOwogCX0KKwlpZiAo KGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pICYmCisJICAgIChuaS0+ bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9QV1JfTUdUKSkgeworCQlpZWVlODAy MTFfYWRkX2NhbGxiYWNrKG0sIGllZWU4MDIxMV9udWxsZGF0YV90cmFuc21pdHRl ZCwKKwkJICAgIE5VTEwpOworCX0KIAltLT5tX2xlbiA9IG0tPm1fcGt0aGRyLmxl biA9IGhkcmxlbjsKIAltLT5tX2ZsYWdzIHw9IE1fRU5DQVA7CQkvKiBtYXJrIGVu Y2Fwc3VsYXRlZCAqLwogCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3By b3RvLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4 MDIxMV9wcm90by5jCShyZXZpc2lvbiAyOTYxMDgpCisrKyBzeXMvbmV0ODAyMTEv aWVlZTgwMjExX3Byb3RvLmMJKHdvcmtpbmcgY29weSkKQEAgLTE4MDAsMTMgKzE4 MDAsMTkgQEAKIAkJICogV2UgaGF2ZSBiZWVuIHJlcXVlc3RlZCB0byBkcm9wIGJh Y2sgdG8gdGhlIElOSVQgYmVmb3JlCiAJCSAqIHByb2NlZWRpbmcgdG8gdGhlIG5l dyBzdGF0ZS4KIAkJICovCisJCS8qIFN1cHByZXNzICdwZW5kaW5nIHN0YXRlIHRy YW5zaXRpb24gbG9zdCcgd2FybmluZyAqLworCQl2YXAtPml2X25zdGF0ZSA9IElF RUU4MDIxMV9TX0lOSVQ7CiAJCUlFRUU4MDIxMV9EUFJJTlRGKHZhcCwgSUVFRTgw MjExX01TR19TVEFURSwKIAkJICAgICIlczogJXMgLT4gJXMgYXJnICVkXG4iLCBf X2Z1bmNfXywKIAkJICAgIGllZWU4MDIxMV9zdGF0ZV9uYW1lW3ZhcC0+aXZfc3Rh dGVdLAotCQkgICAgaWVlZTgwMjExX3N0YXRlX25hbWVbSUVFRTgwMjExX1NfSU5J VF0sIGFyZyk7Ci0JCXZhcC0+aXZfbmV3c3RhdGUodmFwLCBJRUVFODAyMTFfU19J TklULCBhcmcpOworCQkgICAgaWVlZTgwMjExX3N0YXRlX25hbWVbdmFwLT5pdl9u c3RhdGVdLCBhcmcpOworCQl2YXAtPml2X25ld3N0YXRlKHZhcCwgdmFwLT5pdl9u c3RhdGUsIDApOwogCQlJRUVFODAyMTFfTE9DS19BU1NFUlQoaWMpOwotCQl2YXAt Pml2X2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfUkVJTklUOworCQl2YXAt Pml2X2ZsYWdzX2V4dCAmPSB+KElFRUU4MDIxMV9GRVhUX1JFSU5JVCB8CisJCSAg ICBJRUVFODAyMTFfRkVYVF9TVEFURVdBSVQpOworCQkvKiBlbnF1ZXVlIG5ldyBz dGF0ZSB0cmFuc2l0aW9uIGFmdGVyIGNhbmNlbF9zY2FuKCkgdGFzayAqLworCQlp ZWVlODAyMTFfbmV3X3N0YXRlX2xvY2tlZCh2YXAsIG5zdGF0ZSwgYXJnKTsKKwkJ Z290byBkb25lOwogCX0KIAogCW9zdGF0ZSA9IHZhcC0+aXZfc3RhdGU7CkluZGV4 OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3NjYW4uYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3NjYW4uYwkocmV2aXNpb24g Mjk2MTA4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9zY2FuLmMJKHdvcmtp bmcgY29weSkKQEAgLTQ1Myw4ICs0NTMsOSBAQAogfQogCiAvKgotICogUHVibGlj IGFjY2VzcyB0byBzY2FuX25leHQgZm9yIGRyaXZlcnMgdGhhdCBtYW5hZ2UKLSAq IHNjYW5uaW5nIHRoZW1zZWx2ZXMgKGUuZy4gZm9yIGZpcm13YXJlLWJhc2VkIGRl dmljZXMpLgorICogTWFudWFsbHkgc3dpdGNoIHRvIHRoZSBuZXh0IGNoYW5uZWwg aW4gdGhlIGNoYW5uZWwgbGlzdC4KKyAqIFByb3ZpZGVkIGZvciBkcml2ZXJzIHRo YXQgbWFuYWdlIHNjYW5uaW5nIHRoZW1zZWx2ZXMKKyAqIChlLmcuIGZvciBmaXJt d2FyZS1iYXNlZCBkZXZpY2VzKS4KICAqLwogdm9pZAogaWVlZTgwMjExX3NjYW5f bmV4dChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCkBAIC00NjUsOCArNDY2LDkg QEAKIH0KIAogLyoKLSAqIFB1YmxpYyBhY2Nlc3MgdG8gc2Nhbl9uZXh0IGZvciBk cml2ZXJzIHRoYXQgYXJlIG5vdCBhYmxlIHRvIHNjYW4gc2luZ2xlCi0gKiBjaGFu bmVscyAoZS5nLiBmb3IgZmlybXdhcmUtYmFzZWQgZGV2aWNlcykuCisgKiBNYW51 YWxseSBzdG9wIGEgc2NhbiB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nLgorICog UHJvdmlkZWQgZm9yIGRyaXZlcnMgdGhhdCBhcmUgbm90IGFibGUgdG8gc2NhbiBz aW5nbGUgY2hhbm5lbHMKKyAqIChlLmcuIGZvciBmaXJtd2FyZS1iYXNlZCBkZXZp Y2VzKS4KICAqLwogdm9pZAogaWVlZTgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgaWVl ZTgwMjExdmFwICp2YXApCkBAIC00ODYsNyArNDg4LDcgQEAKIH0KIAogLyoKLSAq IFByb2JlIHRoZSBjdXJlbnQgY2hhbm5lbCwgaWYgYWxsb3dlZCwgd2hpbGUgc2Nh bm5pbmcuCisgKiBQcm9iZSB0aGUgY3VycmVudCBjaGFubmVsLCBpZiBhbGxvd2Vk LCB3aGlsZSBzY2FubmluZy4KICAqIElmIHRoZSBjaGFubmVsIGlzIG5vdCBtYXJr ZWQgcGFzc2l2ZS1vbmx5IHRoZW4gc2VuZAogICogYSBwcm9iZSByZXF1ZXN0IGlt bWVkaWF0ZWx5LiAgT3RoZXJ3aXNlIG1hcmsgc3RhdGUgYW5kCiAgKiBsaXN0ZW4g Zm9yIGJlYWNvbnMgb24gdGhlIGNoYW5uZWw7IGlmIHdlIHJlY2VpdmUgc29tZXRo aW5nCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3NjYW5fc3cuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3NjYW5f c3cuYwkocmV2aXNpb24gMjk2MTA4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx MV9zY2FuX3N3LmMJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE3ICs1NCwxOCBAQAog c3RydWN0IHNjYW5fc3RhdGUgewogCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0 ZSBiYXNlOwkvKiBwdWJsaWMgc3RhdGUgKi8KIAotCXVfaW50CQlzc19pZmxhZ3M7 CQkvKiBmbGFncyB1c2VkIGludGVybmFsbHkgKi8KLSNkZWZpbmUJSVNDQU5fTUlO RFdFTEwgCTB4MDAwMQkJLyogbWluIGR3ZWxsIHRpbWUgcmVhY2hlZCAqLwotI2Rl ZmluZQlJU0NBTl9ESVNDQVJECTB4MDAwMgkJLyogZGlzY2FyZCByeCdkIGZyYW1l cyAqLwotI2RlZmluZQlJU0NBTl9DQU5DRUwJMHgwMDA0CQkvKiBjYW5jZWwgY3Vy cmVudCBzY2FuICovCi0jZGVmaW5lCUlTQ0FOX0FCT1JUCTB4MDAwOAkJLyogZW5k IHRoZSBzY2FuIGltbWVkaWF0ZWx5ICovCi0JdW5zaWduZWQgbG9uZwlzc19jaGFu bWluZHdlbGw7CS8qIG1pbiBkd2VsbCBvbiBjdXJjaGFuICovCi0JdW5zaWduZWQg bG9uZwlzc19zY2FuZW5kOwkJLyogdGltZSBzY2FuIG11c3Qgc3RvcCAqLwotCXVf aW50CQlzc19kdXJhdGlvbjsJCS8qIGR1cmF0aW9uIGZvciBuZXh0IHNjYW4gKi8K LQlzdHJ1Y3QgdGFzawlzc19zY2FuX3Rhc2s7CQkvKiBzY2FuIGV4ZWN1dGlvbiAq LwotCXN0cnVjdCBjdglzc19zY2FuX2N2OwkJLyogc2NhbiBzaWduYWwgKi8KLQlz dHJ1Y3QgY2FsbG91dAlzc19zY2FuX3RpbWVyOwkJLyogc2NhbiB0aW1lciAqLwor CXVfaW50CQkJc3NfaWZsYWdzOwkvKiBmbGFncyB1c2VkIGludGVybmFsbHkgKi8K KyNkZWZpbmUJSVNDQU5fTUlORFdFTEwgCQkweDAwMDEJCS8qIG1pbiBkd2VsbCB0 aW1lIHJlYWNoZWQgKi8KKyNkZWZpbmUJSVNDQU5fRElTQ0FSRAkJMHgwMDAyCQkv KiBkaXNjYXJkIHJ4J2QgZnJhbWVzICovCisjZGVmaW5lCUlTQ0FOX0NBTkNFTAkJ MHgwMDA0CQkvKiBjYW5jZWwgY3VycmVudCBzY2FuICovCisjZGVmaW5lCUlTQ0FO X0FCT1JUCQkweDAwMDgJCS8qIGVuZCB0aGUgc2NhbiBpbW1lZGlhdGVseSAqLwor I2RlZmluZQlJU0NBTl9SVU5OSU5HCQkweDAwMTAJCS8qIHNjYW4gd2FzIHN0YXJ0 ZWQgKi8KKworCXVuc2lnbmVkIGxvbmcJCXNzX2NoYW5taW5kd2VsbDsgIC8qIG1p biBkd2VsbCBvbiBjdXJjaGFuICovCisJdW5zaWduZWQgbG9uZwkJc3Nfc2NhbmVu ZDsJLyogdGltZSBzY2FuIG11c3Qgc3RvcCAqLworCXVfaW50CQkJc3NfZHVyYXRp b247CS8qIGR1cmF0aW9uIGZvciBuZXh0IHNjYW4gKi8KKwlzdHJ1Y3QgdGFzawkJ c3Nfc2Nhbl9zdGFydDsJLyogc2NhbiBzdGFydCAqLworCXN0cnVjdCB0aW1lb3V0 X3Rhc2sJc3Nfc2Nhbl9jdXJjaGFuOyAgLyogc2NhbiBleGVjdXRpb24gKi8KIH07 CiAjZGVmaW5lCVNDQU5fUFJJVkFURShzcykJKChzdHJ1Y3Qgc2Nhbl9zdGF0ZSAq KSBzcykKIApAQCAtOTgsOCArOTksMTIgQEAKIAogc3RhdGljCXZvaWQgc2Nhbl9j dXJjaGFuKHN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqLCB1bnNpZ25lZCBs b25nKTsKIHN0YXRpYwl2b2lkIHNjYW5fbWluZHdlbGwoc3RydWN0IGllZWU4MDIx MV9zY2FuX3N0YXRlICopOwotc3RhdGljCXZvaWQgc2Nhbl9zaWduYWwodm9pZCAq KTsKLXN0YXRpYwl2b2lkIHNjYW5fdGFzayh2b2lkICosIGludCk7CitzdGF0aWMJ dm9pZCBzY2FuX3NpZ25hbChzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKiwg aW50KTsKK3N0YXRpYwl2b2lkIHNjYW5fc2lnbmFsX2xvY2tlZChzdHJ1Y3QgaWVl ZTgwMjExX3NjYW5fc3RhdGUgKiwgaW50KTsKK3N0YXRpYwl2b2lkIHNjYW5fc3Rh cnQodm9pZCAqLCBpbnQpOworc3RhdGljCXZvaWQgc2Nhbl9jdXJjaGFuX3Rhc2so dm9pZCAqLCBpbnQpOworc3RhdGljCXZvaWQgc2Nhbl9lbmQoc3RydWN0IGllZWU4 MDIxMV9zY2FuX3N0YXRlICosIGludCk7CitzdGF0aWMJdm9pZCBzY2FuX2RvbmUo c3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICosIGludCk7CiAKIE1BTExPQ19E RUZJTkUoTV84MDIxMV9TQ0FOLCAiODAyMTFzY2FuIiwgIjgwMi4xMSBzY2FuIHN0 YXRlIik7CiAKQEAgLTEwOSwxMiArMTE0LDEwIEBACiAJc3RydWN0IGllZWU4MDIx MV9zY2FuX3N0YXRlICpzcyA9IGljLT5pY19zY2FuOwogCiAJaWYgKHNzICE9IE5V TEwpIHsKLQkJSUVFRTgwMjExX0xPQ0soaWMpOwotCQlTQ0FOX1BSSVZBVEUoc3Mp LT5zc19pZmxhZ3MgfD0gSVNDQU5fQUJPUlQ7Ci0JCXNjYW5fc2lnbmFsKHNzKTsK LQkJSUVFRTgwMjExX1VOTE9DSyhpYyk7Ci0JCWllZWU4MDIxMV9kcmFpbnRhc2so aWMsICZTQ0FOX1BSSVZBVEUoc3MpLT5zc19zY2FuX3Rhc2spOwotCQljYWxsb3V0 X2RyYWluKCZTQ0FOX1BSSVZBVEUoc3MpLT5zc19zY2FuX3RpbWVyKTsKKwkJc2Nh bl9zaWduYWwoc3MsIElTQ0FOX0FCT1JUKTsKKwkJaWVlZTgwMjExX2RyYWludGFz ayhpYywgJlNDQU5fUFJJVkFURShzcyktPnNzX3NjYW5fc3RhcnQpOworCQl0YXNr cXVldWVfZHJhaW5fdGltZW91dChpYy0+aWNfdHEsCisJCSAgICAmU0NBTl9QUklW QVRFKHNzKS0+c3Nfc2Nhbl9jdXJjaGFuKTsKIAkJS0FTU0VSVCgoaWMtPmljX2Zs YWdzICYgSUVFRTgwMjExX0ZfU0NBTikgPT0gMCwKIAkJICAgICgic2NhbiBzdGls bCBydW5uaW5nIikpOwogCkBAIC0xNDgsMTYgKzE1MSwxMyBAQAogaWVlZTgwMjEx X3N3c2Nhbl92ZGV0YWNoKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKIHsKIAlz dHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7Ci0Jc3RydWN0IGll ZWU4MDIxMV9zY2FuX3N0YXRlICpzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5f c3RhdGUgKnNzID0gaWMtPmljX3NjYW47CiAKIAlJRUVFODAyMTFfTE9DS19BU1NF UlQoaWMpOwotCXNzID0gaWMtPmljX3NjYW47Ci0JaWYgKHNzICE9IE5VTEwgJiYg c3MtPnNzX3ZhcCA9PSB2YXApIHsKLQkJaWYgKGljLT5pY19mbGFncyAmIElFRUU4 MDIxMV9GX1NDQU4pIHsKLQkJCVNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyB8 PSBJU0NBTl9BQk9SVDsKLQkJCXNjYW5fc2lnbmFsKHNzKTsKLQkJfQotCX0KKwor CWlmIChzcyAhPSBOVUxMICYmIHNzLT5zc192YXAgPT0gdmFwICYmCisJICAgIChp Yy0+aWNfZmxhZ3MgJiBJRUVFODAyMTFfRl9TQ0FOKSkKKwkJc2Nhbl9zaWduYWxf bG9ja2VkKHNzLCBJU0NBTl9BQk9SVCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0y MzYsNyArMjM2LDcgQEAKIAkJCWljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9T Q0FOOwogCiAJCQkvKiBTdGFydCBzY2FuIHRhc2sgKi8KLQkJCWllZWU4MDIxMV9y dW50YXNrKGljLCAmU0NBTl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl90YXNrKTsKKwkJ CWllZWU4MDIxMV9ydW50YXNrKGljLCAmU0NBTl9QUklWQVRFKHNzKS0+c3Nfc2Nh bl9zdGFydCk7CiAJCX0KIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKQEAgLTQxMSw3 ICs0MTEsOCBAQAogCQkJc3MtPnNzX21heGR3ZWxsID0gZHVyYXRpb247CiAJCQlp Yy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfU0NBTjsKIAkJCWljLT5pY19mbGFn c19leHQgfD0gSUVFRTgwMjExX0ZFWFRfQkdTQ0FOOwotCQkJaWVlZTgwMjExX3J1 bnRhc2soaWMsICZTQ0FOX1BSSVZBVEUoc3MpLT5zc19zY2FuX3Rhc2spOworCQkJ aWVlZTgwMjExX3J1bnRhc2soaWMsCisJCQkgICAgJlNDQU5fUFJJVkFURShzcykt PnNzX3NjYW5fc3RhcnQpOwogCQl9IGVsc2UgewogCQkJLyogWFhYIG1zZytzdGF0 ICovCiAJCX0KQEAgLTQyNiwxMSArNDI3LDggQEAKIAlyZXR1cm4gKGljLT5pY19m bGFncyAmIElFRUU4MDIxMV9GX1NDQU4pOwogfQogCi0vKgotICogQ2FuY2VsIGFu eSBzY2FuIGN1cnJlbnRseSBnb2luZyBvbiBmb3IgdGhlIHNwZWNpZmllZCB2YXAu Ci0gKi8KIHN0YXRpYyB2b2lkCi1pZWVlODAyMTFfc3dzY2FuX2NhbmNlbF9zY2Fu KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKK2NhbmNlbF9zY2FuKHN0cnVjdCBp ZWVlODAyMTF2YXAgKnZhcCwgaW50IGFueSwgY29uc3QgY2hhciAqZnVuYykKIHsK IAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7CiAJc3RydWN0 IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGljLT5pY19zY2FuOwpAQCAtNDM3 LDIyICs0MzUsMjEgQEAKIAogCUlFRUU4MDIxMV9MT0NLKGljKTsKIAlpZiAoKGlj LT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pICYmCi0JICAgIHNzLT5zc192 YXAgPT0gdmFwICYmCisJICAgIChhbnkgfHwgc3MtPnNzX3ZhcCA9PSB2YXApICYm CiAJICAgIChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgJiBJU0NBTl9DQU5D RUwpID09IDApIHsKIAkJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFf TVNHX1NDQU4sCi0JCSAgICAiJXM6IGNhbmNlbCAlcyBzY2FuXG4iLCBfX2Z1bmNf XywKKwkJICAgICIlczogY2FuY2VsICVzIHNjYW5cbiIsIGZ1bmMsCiAJCSAgICBz cy0+c3NfZmxhZ3MgJiBJRUVFODAyMTFfU0NBTl9BQ1RJVkUgPwogCQkJImFjdGl2 ZSIgOiAicGFzc2l2ZSIpOwogCi0JCS8qIGNsZWFyIGJnIHNjYW4gTk9QSUNLIGFu ZCBtYXJrIGNhbmNlbCByZXF1ZXN0ICovCisJCS8qIGNsZWFyIGJnIHNjYW4gTk9Q SUNLICovCiAJCXNzLT5zc19mbGFncyAmPSB+SUVFRTgwMjExX1NDQU5fTk9QSUNL OwotCQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgfD0gSVNDQU5fQ0FOQ0VM OwotCQkvKiB3YWtlIHVwIHRoZSBzY2FuIHRhc2sgKi8KLQkJc2Nhbl9zaWduYWwo c3MpOworCQkvKiBtYXJrIGNhbmNlbCByZXF1ZXN0IGFuZCB3YWtlIHVwIHRoZSBz Y2FuIHRhc2sgKi8KKwkJc2Nhbl9zaWduYWxfbG9ja2VkKHNzLCBJU0NBTl9DQU5D RUwpOwogCX0gZWxzZSB7CiAJCUlFRUU4MDIxMV9EUFJJTlRGKHZhcCwgSUVFRTgw MjExX01TR19TQ0FOLAogCQkgICAgIiVzOiBjYWxsZWQ7IEZfU0NBTj0lZCwgdmFw PSVzLCBDQU5DRUw9JWRcbiIsCi0JCSAgICAgICAgX19mdW5jX18sCisJCQlmdW5j LAogCQkJISEgKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1NDQU4pLAogCQkJ KHNzLT5zc192YXAgPT0gdmFwID8gIm1hdGNoIiA6ICJub21hdGNoIiksCiAJCQkh ISAoU0NBTl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VMKSk7 CkBAIC00NjEsNzQgKzQ1OCw1NyBAQAogfQogCiAvKgorICogQ2FuY2VsIGFueSBz Y2FuIGN1cnJlbnRseSBnb2luZyBvbiBmb3IgdGhlIHNwZWNpZmllZCB2YXAuCisg Ki8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFfc3dzY2FuX2NhbmNlbF9zY2FuKHN0 cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKK3sKKwljYW5jZWxfc2Nhbih2YXAsIDAs IF9fZnVuY19fKTsKK30KKworLyoKICAqIENhbmNlbCBhbnkgc2NhbiBjdXJyZW50 bHkgZ29pbmcgb24uCiAgKi8KIHN0YXRpYyB2b2lkCiBpZWVlODAyMTFfc3dzY2Fu X2NhbmNlbF9hbnlzY2FuKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKIHsKLQlz dHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7Ci0Jc3RydWN0IGll ZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGljLT5pY19zY2FuOwotCi0JSUVFRTgw MjExX0xPQ0soaWMpOwotCWlmICgoaWMtPmljX2ZsYWdzICYgSUVFRTgwMjExX0Zf U0NBTikgJiYKLQkgICAgKFNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyAmIElT Q0FOX0NBTkNFTCkgPT0gMCkgewotCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElF RUU4MDIxMV9NU0dfU0NBTiwKLQkJICAgICIlczogY2FuY2VsICVzIHNjYW5cbiIs IF9fZnVuY19fLAotCQkgICAgc3MtPnNzX2ZsYWdzICYgSUVFRTgwMjExX1NDQU5f QUNUSVZFID8KLQkJCSJhY3RpdmUiIDogInBhc3NpdmUiKTsKLQotCQkvKiBjbGVh ciBiZyBzY2FuIE5PUElDSyBhbmQgbWFyayBjYW5jZWwgcmVxdWVzdCAqLwotCQlz cy0+c3NfZmxhZ3MgJj0gfklFRUU4MDIxMV9TQ0FOX05PUElDSzsKLQkJU0NBTl9Q UklWQVRFKHNzKS0+c3NfaWZsYWdzIHw9IElTQ0FOX0NBTkNFTDsKLQkJLyogd2Fr ZSB1cCB0aGUgc2NhbiB0YXNrICovCi0JCXNjYW5fc2lnbmFsKHNzKTsKLQl9IGVs c2UgewotCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NB TiwKLQkJICAgICIlczogY2FsbGVkOyBGX1NDQU49JWQsIHZhcD0lcywgQ0FOQ0VM PSVkXG4iLAotCQkgICAgICAgIF9fZnVuY19fLAotCQkJISEgKGljLT5pY19mbGFn cyAmIElFRUU4MDIxMV9GX1NDQU4pLAotCQkJKHNzLT5zc192YXAgPT0gdmFwID8g Im1hdGNoIiA6ICJub21hdGNoIiksCi0JCQkhISAoU0NBTl9QUklWQVRFKHNzKS0+ c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VMKSk7Ci0JfQotCUlFRUU4MDIxMV9VTkxP Q0soaWMpOworCWNhbmNlbF9zY2FuKHZhcCwgMSwgX19mdW5jX18pOwogfQogCiAv KgotICogUHVibGljIGFjY2VzcyB0byBzY2FuX25leHQgZm9yIGRyaXZlcnMgdGhh dCBtYW5hZ2UKLSAqIHNjYW5uaW5nIHRoZW1zZWx2ZXMgKGUuZy4gZm9yIGZpcm13 YXJlLWJhc2VkIGRldmljZXMpLgorICogTWFudWFsbHkgc3dpdGNoIHRvIHRoZSBu ZXh0IGNoYW5uZWwgaW4gdGhlIGNoYW5uZWwgbGlzdC4KKyAqIFByb3ZpZGVkIGZv ciBkcml2ZXJzIHRoYXQgbWFuYWdlIHNjYW5uaW5nIHRoZW1zZWx2ZXMKKyAqIChl LmcuIGZvciBmaXJtd2FyZS1iYXNlZCBkZXZpY2VzKS4KICAqLwogc3RhdGljIHZv aWQKIGllZWU4MDIxMV9zd3NjYW5fc2Nhbl9uZXh0KHN0cnVjdCBpZWVlODAyMTF2 YXAgKnZhcCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZf aWM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcyA9IGljLT5pY19z Y2FuOworCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqc3MgPSB2YXAtPml2 X2ljLT5pY19zY2FuOwogCiAJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAy MTFfTVNHX1NDQU4sICIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiB3 YWtlIHVwIHRoZSBzY2FuIHRhc2sgKi8KLQlJRUVFODAyMTFfTE9DSyhpYyk7Ci0J c2Nhbl9zaWduYWwoc3MpOwotCUlFRUU4MDIxMV9VTkxPQ0soaWMpOworCXNjYW5f c2lnbmFsKHNzLCAwKTsKIH0KIAogLyoKLSAqIFB1YmxpYyBhY2Nlc3MgdG8gc2Nh bl9uZXh0IGZvciBkcml2ZXJzIHRoYXQgYXJlIG5vdCBhYmxlIHRvIHNjYW4gc2lu Z2xlCi0gKiBjaGFubmVscyAoZS5nLiBmb3IgZmlybXdhcmUtYmFzZWQgZGV2aWNl cykuCisgKiBNYW51YWxseSBzdG9wIGEgc2NhbiB0aGF0IGlzIGN1cnJlbnRseSBy dW5uaW5nLgorICogUHJvdmlkZWQgZm9yIGRyaXZlcnMgdGhhdCBhcmUgbm90IGFi bGUgdG8gc2NhbiBzaW5nbGUgY2hhbm5lbHMKKyAqIChlLmcuIGZvciBmaXJtd2Fy ZS1iYXNlZCBkZXZpY2VzKS4KICAqLwogc3RhdGljIHZvaWQKIGllZWU4MDIxMV9z d3NjYW5fc2Nhbl9kb25lKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCkKIHsKIAlz dHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7Ci0Jc3RydWN0IGll ZWU4MDIxMV9zY2FuX3N0YXRlICpzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5f c3RhdGUgKnNzID0gaWMtPmljX3NjYW47CiAKIAlJRUVFODAyMTFfTE9DS19BU1NF UlQoaWMpOwogCi0Jc3MgPSBpYy0+aWNfc2NhbjsKLQlzY2FuX3NpZ25hbChzcyk7 CisJc2Nhbl9zaWduYWxfbG9ja2VkKHNzLCAwKTsKIH0KIAogLyoKLSAqIFByb2Jl IHRoZSBjdXJlbnQgY2hhbm5lbCwgaWYgYWxsb3dlZCwgd2hpbGUgc2Nhbm5pbmcu CisgKiBQcm9iZSB0aGUgY3VycmVudCBjaGFubmVsLCBpZiBhbGxvd2VkLCB3aGls ZSBzY2FubmluZy4KICAqIElmIHRoZSBjaGFubmVsIGlzIG5vdCBtYXJrZWQgcGFz c2l2ZS1vbmx5IHRoZW4gc2VuZAogICogYSBwcm9iZSByZXF1ZXN0IGltbWVkaWF0 ZWx5LiAgT3RoZXJ3aXNlIG1hcmsgc3RhdGUgYW5kCiAgKiBsaXN0ZW4gZm9yIGJl YWNvbnMgb24gdGhlIGNoYW5uZWw7IGlmIHdlIHJlY2VpdmUgc29tZXRoaW5nCkBA IC01NjgsMjggKzU0OCw0OCBAQAogc2Nhbl9jdXJjaGFuKHN0cnVjdCBpZWVlODAy MTFfc2Nhbl9zdGF0ZSAqc3MsIHVuc2lnbmVkIGxvbmcgbWF4ZHdlbGwpCiB7CiAJ c3RydWN0IGllZWU4MDIxMXZhcCAqdmFwICA9IHNzLT5zc192YXA7CisJc3RydWN0 IGllZWU4MDIxMWNvbSAqaWMgPSBzcy0+c3NfaWM7CiAKIAlJRUVFODAyMTFfRFBS SU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKIAkgICAgIiVzOiBjYWxsaW5n OyBtYXhkd2VsbD0lbHVcbiIsCiAJICAgIF9fZnVuY19fLAogCSAgICBtYXhkd2Vs bCk7Ci0JSUVFRTgwMjExX0xPQ0sodmFwLT5pdl9pYyk7CisJSUVFRTgwMjExX0xP Q0soaWMpOwogCWlmIChzcy0+c3NfZmxhZ3MgJiBJRUVFODAyMTFfU0NBTl9BQ1RJ VkUpCiAJCWllZWU4MDIxMV9wcm9iZV9jdXJjaGFuKHZhcCwgMCk7Ci0JY2FsbG91 dF9yZXNldCgmU0NBTl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl90aW1lciwKLQkgICAg bWF4ZHdlbGwsIHNjYW5fc2lnbmFsLCBzcyk7Ci0JSUVFRTgwMjExX1VOTE9DSyh2 YXAtPml2X2ljKTsKKwl0YXNrcXVldWVfZW5xdWV1ZV90aW1lb3V0KGljLT5pY190 cSwKKwkgICAgJlNDQU5fUFJJVkFURShzcyktPnNzX3NjYW5fY3VyY2hhbiwgbWF4 ZHdlbGwpOworCUlFRUU4MDIxMV9VTkxPQ0soaWMpOwogfQogCiBzdGF0aWMgdm9p ZAotc2Nhbl9zaWduYWwodm9pZCAqYXJnKQorc2Nhbl9zaWduYWwoc3RydWN0IGll ZWU4MDIxMV9zY2FuX3N0YXRlICpzcywgaW50IGlmbGFncykKIHsKLQlzdHJ1Y3Qg aWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzID0gKHN0cnVjdCBpZWVlODAyMTFfc2Nh bl9zdGF0ZSAqKSBhcmc7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBzcy0+ c3NfaWM7CiAKLQlJRUVFODAyMTFfTE9DS19BU1NFUlQoc3MtPnNzX2ljKTsKLQlj dl9zaWduYWwoJlNDQU5fUFJJVkFURShzcyktPnNzX3NjYW5fY3YpOworCUlFRUU4 MDIxMV9VTkxPQ0tfQVNTRVJUKGljKTsKKworCUlFRUU4MDIxMV9MT0NLKGljKTsK KwlzY2FuX3NpZ25hbF9sb2NrZWQoc3MsIGlmbGFncyk7CisJSUVFRTgwMjExX1VO TE9DSyhpYyk7CiB9CiAKK3N0YXRpYyB2b2lkCitzY2FuX3NpZ25hbF9sb2NrZWQo c3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpzcywgaW50IGlmbGFncykKK3sK KwlzdHJ1Y3Qgc2Nhbl9zdGF0ZSAqc3NfcHJpdiA9IFNDQU5fUFJJVkFURShzcyk7 CisJc3RydWN0IHRpbWVvdXRfdGFzayAqc2Nhbl90YXNrID0gJnNzX3ByaXYtPnNz X3NjYW5fY3VyY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNzLT5z c19pYzsKKworCUlFRUU4MDIxMV9MT0NLX0FTU0VSVChpYyk7CisKKwlzc19wcml2 LT5zc19pZmxhZ3MgfD0gaWZsYWdzOworCWlmIChzc19wcml2LT5zc19pZmxhZ3Mg JiBJU0NBTl9SVU5OSU5HKSB7CisJCWlmICh0YXNrcXVldWVfY2FuY2VsX3RpbWVv dXQoaWMtPmljX3RxLCBzY2FuX3Rhc2ssIE5VTEwpID09IDApCisJCQl0YXNrcXVl dWVfZW5xdWV1ZV90aW1lb3V0KGljLT5pY190cSwgc2Nhbl90YXNrLCAwKTsKKwl9 Cit9CisKIC8qCiAgKiBIYW5kbGUgbWluZHdlbGwgcmVxdWlyZW1lbnRzIGNvbXBs ZXRlZDsgaW5pdGlhdGUgYSBjaGFubmVsCiAgKiBjaGFuZ2UgdG8gdGhlIG5leHQg Y2hhbm5lbCBhc2FwLgpAQCAtNTk3LDM4ICs1OTcsMzUgQEAKIHN0YXRpYyB2b2lk CiBzY2FuX21pbmR3ZWxsKHN0cnVjdCBpZWVlODAyMTFfc2Nhbl9zdGF0ZSAqc3Mp CiB7Ci0Jc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBzcy0+c3NfaWM7CisJc3Ry dWN0IGllZWU4MDIxMXZhcCAqdmFwID0gc3MtPnNzX3ZhcDsKIAotCUlFRUU4MDIx MV9EUFJJTlRGKHNzLT5zc192YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwgIiVzOiBj YWxsZWRcbiIsIF9fZnVuY19fKTsKKwlJRUVFODAyMTFfRFBSSU5URih2YXAsIElF RUU4MDIxMV9NU0dfU0NBTiwgIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAot CUlFRUU4MDIxMV9MT0NLKGljKTsKLQlzY2FuX3NpZ25hbChzcyk7Ci0JSUVFRTgw MjExX1VOTE9DSyhpYyk7CisJc2Nhbl9zaWduYWwoc3MsIDApOwogfQogCiBzdGF0 aWMgdm9pZAotc2Nhbl90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcpCitzY2Fu X3N0YXJ0KHZvaWQgKmFyZywgaW50IHBlbmRpbmcpCiB7CiAjZGVmaW5lCUlTQ0FO X1JFUAkoSVNDQU5fTUlORFdFTEwgfCBJU0NBTl9ESVNDQVJEKQogCXN0cnVjdCBp ZWVlODAyMTFfc2Nhbl9zdGF0ZSAqc3MgPSAoc3RydWN0IGllZWU4MDIxMV9zY2Fu X3N0YXRlICopIGFyZzsKKwlzdHJ1Y3Qgc2Nhbl9zdGF0ZSAqc3NfcHJpdiA9IFND QU5fUFJJVkFURShzcyk7CiAJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gc3Mt PnNzX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNzLT5zc19pYzsK LQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JdW5zaWduZWQgbG9u ZyBtYXhkd2VsbCwgc2NhbmVuZDsKLQlpbnQgc2NhbmRvbmUgPSAwOwogCiAJSUVF RTgwMjExX0xPQ0soaWMpOwogCWlmICh2YXAgPT0gTlVMTCB8fCAoaWMtPmljX2Zs YWdzICYgSUVFRTgwMjExX0ZfU0NBTikgPT0gMCB8fAotCSAgICAoU0NBTl9QUklW QVRFKHNzKS0+c3NfaWZsYWdzICYgSVNDQU5fQUJPUlQpKSB7CisJICAgIChzc19w cml2LT5zc19pZmxhZ3MgJiBJU0NBTl9BQk9SVCkpIHsKIAkJLyogQ2FuY2VsbGVk IGJlZm9yZSB3ZSBzdGFydGVkICovCi0JCWdvdG8gZG9uZTsKKwkJc2Nhbl9kb25l KHNzLCAwKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChzcy0+c3NfbmV4dCA9PSBz cy0+c3NfbGFzdCkgewogCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIx MV9NU0dfU0NBTiwKIAkJCSIlczogbm8gY2hhbm5lbHMgdG8gc2NhblxuIiwgX19m dW5jX18pOwotCQlzY2FuZG9uZSA9IDE7Ci0JCWdvdG8gZG9uZTsKKwkJc2Nhbl9k b25lKHNzLCAxKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmICh2YXAtPml2X29wbW9k ZSA9PSBJRUVFODAyMTFfTV9TVEEgJiYKQEAgLTYzNiwxMTAgKzYzMywxMzQgQEAK IAkJaWYgKCh2YXAtPml2X2Jzcy0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9Q V1JfTUdUKSA9PSAwKSB7CiAJCQkvKiBFbmFibGUgc3RhdGlvbiBwb3dlciBzYXZl IG1vZGUgKi8KIAkJCXZhcC0+aXZfc3RhX3BzKHZhcCwgMSk7Ci0JCQkvKgotCQkJ ICogVXNlIGFuIDFtcyBkZWxheSBzbyB0aGUgbnVsbCBkYXRhIGZyYW1lIGhhcyBh IGNoYW5jZQotCQkJICogdG8gZ28gb3V0LgotCQkJICogWFhYIFNob3VsZCB1c2Ug TV9UWENCIG1lY2hhbmlzbSB0byBlbGltaW5hdGUgdGhpcy4KLQkJCSAqLwotCQkJ Y3ZfdGltZWR3YWl0KCZTQ0FOX1BSSVZBVEUoc3MpLT5zc19zY2FuX2N2LAotCQkJ ICAgIElFRUU4MDIxMV9MT0NLX09CSihpYyksIG1zZWNzX3RvX3RpY2tzKDEpKTsK LQkJCWlmIChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgJiBJU0NBTl9BQk9S VCkKLQkJCQlnb3RvIGRvbmU7CisJCQkvKiBXYWl0IHVudGlsIG51bGwgZGF0YSBm cmFtZSB3aWxsIGJlIEFDSydlZCAqLworCQkJbXR4X3NsZWVwKHZhcCwgSUVFRTgw MjExX0xPQ0tfT0JKKGljKSwgUENBVENILAorCQkJICAgICJzdGFfcHMiLCBtc2Vj c190b190aWNrcygxMCkpOworCQkJaWYgKHNzX3ByaXYtPnNzX2lmbGFncyAmIElT Q0FOX0FCT1JUKSB7CisJCQkJc2Nhbl9kb25lKHNzLCAwKTsKKwkJCQlyZXR1cm47 CisJCQl9CiAJCX0KIAl9CiAKLQlzY2FuZW5kID0gdGlja3MgKyBTQ0FOX1BSSVZB VEUoc3MpLT5zc19kdXJhdGlvbjsKKwlzc19wcml2LT5zc19zY2FuZW5kID0gdGlj a3MgKyBzc19wcml2LT5zc19kdXJhdGlvbjsKIAogCS8qIFhYWCBzY2FuIHN0YXRl IGNhbiBjaGFuZ2UhIFJlLXZhbGlkYXRlIHNjYW4gc3RhdGUhICovCiAKIAlJRUVF ODAyMTFfVU5MT0NLKGljKTsKKwogCWljLT5pY19zY2FuX3N0YXJ0KGljKTsJCS8q IG5vdGlmeSBkcml2ZXIgKi8KKworCXNjYW5fY3VyY2hhbl90YXNrKHNzLCAwKTsK K30KKworc3RhdGljIHZvaWQKK3NjYW5fY3VyY2hhbl90YXNrKHZvaWQgKmFyZywg aW50IHBlbmRpbmcpCit7CisJc3RydWN0IGllZWU4MDIxMV9zY2FuX3N0YXRlICpz cyA9IGFyZzsKKwlzdHJ1Y3Qgc2Nhbl9zdGF0ZSAqc3NfcHJpdiA9IFNDQU5fUFJJ VkFURShzcyk7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gc3MtPnNzX3Zh cDsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNzLT5zc19pYzsKKwlzdHJ1 Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJdW5zaWduZWQgbG9uZyBtYXhk d2VsbDsKKwlpbnQgc2NhbmRvbmU7CisKIAlJRUVFODAyMTFfTE9DSyhpYyk7Citl bmQ6CisJc2NhbmRvbmUgPSAoc3MtPnNzX25leHQgPj0gc3MtPnNzX2xhc3QpIHx8 CisJICAgIChzc19wcml2LT5zc19pZmxhZ3MgJiBJU0NBTl9DQU5DRUwpICE9IDA7 CiAKLQlmb3IgKDs7KSB7CisJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAy MTFfTVNHX1NDQU4sCisJICAgICIlczogbG9vcCBzdGFydDsgc2NhbmRvbmU9JWRc biIsCisJICAgIF9fZnVuY19fLAorCSAgICBzY2FuZG9uZSk7CiAKLQkJc2NhbmRv bmUgPSAoc3MtPnNzX25leHQgPj0gc3MtPnNzX2xhc3QpIHx8Ci0JCSAgICAoU0NB Tl9QUklWQVRFKHNzKS0+c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VMKSAhPSAwOwor CWlmIChzY2FuZG9uZSB8fCAoc3MtPnNzX2ZsYWdzICYgSUVFRTgwMjExX1NDQU5f R09UUElDSykgfHwKKwkgICAgKHNzX3ByaXYtPnNzX2lmbGFncyAmIElTQ0FOX0FC T1JUKSB8fAorCSAgICAgdGltZV9hZnRlcih0aWNrcyArIHNzLT5zc19taW5kd2Vs bCwgc3NfcHJpdi0+c3Nfc2NhbmVuZCkpIHsKKwkJc3NfcHJpdi0+c3NfaWZsYWdz ICY9IH5JU0NBTl9SVU5OSU5HOworCQlzY2FuX2VuZChzcywgc2NhbmRvbmUpOwor CQlyZXR1cm47CisJfSBlbHNlCisJCXNzX3ByaXYtPnNzX2lmbGFncyB8PSBJU0NB Tl9SVU5OSU5HOwogCi0JCUlFRUU4MDIxMV9EUFJJTlRGKHZhcCwgSUVFRTgwMjEx X01TR19TQ0FOLAotCQkgICAgIiVzOiBsb29wIHN0YXJ0OyBzY2FuZG9uZT0lZFxu IiwKLQkJICAgIF9fZnVuY19fLAotCQkgICAgc2NhbmRvbmUpOworCWNoYW4gPSBz cy0+c3NfY2hhbnNbc3MtPnNzX25leHQrK107CiAKLQkJaWYgKHNjYW5kb25lIHx8 IChzcy0+c3NfZmxhZ3MgJiBJRUVFODAyMTFfU0NBTl9HT1RQSUNLKSB8fAotCQkg ICAgKFNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyAmIElTQ0FOX0FCT1JUKSB8 fAotCQkgICAgIHRpbWVfYWZ0ZXIodGlja3MgKyBzcy0+c3NfbWluZHdlbGwsIHNj YW5lbmQpKQotCQkJYnJlYWs7CisJLyoKKwkgKiBXYXRjaCBmb3IgdHJ1bmNhdGlv biBkdWUgdG8gdGhlIHNjYW4gZW5kIHRpbWUuCisJICovCisJaWYgKHRpbWVfYWZ0 ZXIodGlja3MgKyBzcy0+c3NfbWF4ZHdlbGwsIHNzX3ByaXYtPnNzX3NjYW5lbmQp KQorCQltYXhkd2VsbCA9IHNzX3ByaXYtPnNzX3NjYW5lbmQgLSB0aWNrczsKKwll bHNlCisJCW1heGR3ZWxsID0gc3MtPnNzX21heGR3ZWxsOwogCi0JCWNoYW4gPSBz cy0+c3NfY2hhbnNbc3MtPnNzX25leHQrK107CisJSUVFRTgwMjExX0RQUklOVEYo dmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sCisJICAgICIlczogY2hhbiAlM2QlYyAt PiAlM2QlYyBbJXMsIGR3ZWxsIG1pbiAlbHVtcyBtYXggJWx1bXNdXG4iLAorCSAg ICBfX2Z1bmNfXywKKwkgICAgaWVlZTgwMjExX2NoYW4yaWVlZShpYywgaWMtPmlj X2N1cmNoYW4pLAorCSAgICBpZWVlODAyMTFfY2hhbm5lbF90eXBlX2NoYXIoaWMt PmljX2N1cmNoYW4pLAorCSAgICBpZWVlODAyMTFfY2hhbjJpZWVlKGljLCBjaGFu KSwKKwkgICAgaWVlZTgwMjExX2NoYW5uZWxfdHlwZV9jaGFyKGNoYW4pLAorCSAg ICAoc3MtPnNzX2ZsYWdzICYgSUVFRTgwMjExX1NDQU5fQUNUSVZFKSAmJgorCQko Y2hhbi0+aWNfZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFKSA9PSAwID8K KwkJImFjdGl2ZSIgOiAicGFzc2l2ZSIsCisJICAgIHRpY2tzX3RvX21zZWNzKHNz LT5zc19taW5kd2VsbCksIHRpY2tzX3RvX21zZWNzKG1heGR3ZWxsKSk7CiAKLQkJ LyoKLQkJICogV2F0Y2ggZm9yIHRydW5jYXRpb24gZHVlIHRvIHRoZSBzY2FuIGVu ZCB0aW1lLgotCQkgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIodGlja3MgKyBzcy0+c3Nf bWF4ZHdlbGwsIHNjYW5lbmQpKQotCQkJbWF4ZHdlbGwgPSBzY2FuZW5kIC0gdGlj a3M7Ci0JCWVsc2UKLQkJCW1heGR3ZWxsID0gc3MtPnNzX21heGR3ZWxsOworCS8q CisJICogUG90ZW50aWFsbHkgY2hhbmdlIGNoYW5uZWwgYW5kIHBoeSBtb2RlLgor CSAqLworCWljLT5pY19jdXJjaGFuID0gY2hhbjsKKwlpYy0+aWNfcnQgPSBpZWVl ODAyMTFfZ2V0X3JhdGV0YWJsZShjaGFuKTsKKwlJRUVFODAyMTFfVU5MT0NLKGlj KTsKKwkvKgorCSAqIFBlcmZvcm0gdGhlIGNoYW5uZWwgY2hhbmdlIGFuZCBzY2Fu IHVubG9ja2VkIHNvIHRoZSBkcml2ZXIKKwkgKiBtYXkgc2xlZXAuIE9uY2Ugc2V0 X2NoYW5uZWwgcmV0dXJucyB0aGUgaGFyZHdhcmUgaGFzCisJICogY29tcGxldGVk IHRoZSBjaGFubmVsIGNoYW5nZS4KKwkgKi8KKwlpYy0+aWNfc2V0X2NoYW5uZWwo aWMpOworCWllZWU4MDIxMV9yYWRpb3RhcF9jaGFuX2NoYW5nZShpYyk7CiAKLQkJ SUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sCi0JCSAg ICAiJXM6IGNoYW4gJTNkJWMgLT4gJTNkJWMgWyVzLCBkd2VsbCBtaW4gJWx1bXMg bWF4ICVsdW1zXVxuIiwKLQkJICAgIF9fZnVuY19fLAotCQkgICAgaWVlZTgwMjEx X2NoYW4yaWVlZShpYywgaWMtPmljX2N1cmNoYW4pLAotCQkgICAgaWVlZTgwMjEx X2NoYW5uZWxfdHlwZV9jaGFyKGljLT5pY19jdXJjaGFuKSwKLQkJICAgIGllZWU4 MDIxMV9jaGFuMmllZWUoaWMsIGNoYW4pLAotCQkgICAgaWVlZTgwMjExX2NoYW5u ZWxfdHlwZV9jaGFyKGNoYW4pLAotCQkgICAgKHNzLT5zc19mbGFncyAmIElFRUU4 MDIxMV9TQ0FOX0FDVElWRSkgJiYKLQkJCShjaGFuLT5pY19mbGFncyAmIElFRUU4 MDIxMV9DSEFOX1BBU1NJVkUpID09IDAgPwotCQkJImFjdGl2ZSIgOiAicGFzc2l2 ZSIsCi0JCSAgICB0aWNrc190b19tc2Vjcyhzcy0+c3NfbWluZHdlbGwpLCB0aWNr c190b19tc2VjcyhtYXhkd2VsbCkpOworCS8qCisJICogU2NhbiBjdXJjaGFuLiAg RHJpdmVycyBmb3IgImludGVsbGlnZW50IGhhcmR3YXJlIgorCSAqIG92ZXJyaWRl IGljX3NjYW5fY3VyY2hhbiB0byB0ZWxsIHRoZSBkZXZpY2UgdG8gZG8KKwkgKiB0 aGUgd29yay4gIE90aGVyd2lzZSB3ZSBtYW5hZ2UgdGhlIHdvcmsgb3Vyc2VsdmVz OworCSAqIHNlbmRpbmcgYSBwcm9iZSByZXF1ZXN0IChhcyBuZWVkZWQpLCBhbmQg YXJtaW5nIHRoZQorCSAqIHRpbWVvdXQgdG8gc3dpdGNoIGNoYW5uZWxzIGFmdGVy IG1heGR3ZWxsIHRpY2tzLgorCSAqCisJICogc2Nhbl9jdXJjaGFuIHNob3VsZCBv bmx5IHBhdXNlIGZvciB0aGUgdGltZSByZXF1aXJlZCB0bworCSAqIHByZXBhcmUv aW5pdGlhdGUgdGhlIGhhcmR3YXJlIGZvciB0aGUgc2NhbiAoaWYgYXQgYWxsKS4K KwkgKi8KKwlpYy0+aWNfc2Nhbl9jdXJjaGFuKHNzLCBtYXhkd2VsbCk7CisJSUVF RTgwMjExX0xPQ0soaWMpOwogCi0JCS8qCi0JCSAqIFBvdGVudGlhbGx5IGNoYW5n ZSBjaGFubmVsIGFuZCBwaHkgbW9kZS4KLQkJICovCi0JCWljLT5pY19jdXJjaGFu ID0gY2hhbjsKLQkJaWMtPmljX3J0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUo Y2hhbik7Ci0JCUlFRUU4MDIxMV9VTkxPQ0soaWMpOwotCQkvKgotCQkgKiBQZXJm b3JtIHRoZSBjaGFubmVsIGNoYW5nZSBhbmQgc2NhbiB1bmxvY2tlZCBzbyB0aGUg ZHJpdmVyCi0JCSAqIG1heSBzbGVlcC4gT25jZSBzZXRfY2hhbm5lbCByZXR1cm5z IHRoZSBoYXJkd2FyZSBoYXMKLQkJICogY29tcGxldGVkIHRoZSBjaGFubmVsIGNo YW5nZS4KLQkJICovCi0JCWljLT5pY19zZXRfY2hhbm5lbChpYyk7Ci0JCWllZWU4 MDIxMV9yYWRpb3RhcF9jaGFuX2NoYW5nZShpYyk7CisJLyogWFhYIHNjYW4gc3Rh dGUgY2FuIGNoYW5nZSEgUmUtdmFsaWRhdGUgc2NhbiBzdGF0ZSEgKi8KIAotCQkv KgotCQkgKiBTY2FuIGN1cmNoYW4uICBEcml2ZXJzIGZvciAiaW50ZWxsaWdlbnQg aGFyZHdhcmUiCi0JCSAqIG92ZXJyaWRlIGljX3NjYW5fY3VyY2hhbiB0byB0ZWxs IHRoZSBkZXZpY2UgdG8gZG8KLQkJICogdGhlIHdvcmsuICBPdGhlcndpc2Ugd2Ug bWFuYWdlIHRoZSB3b3JrIG91dHNlbHZlczsKLQkJICogc2VuZGluZyBhIHByb2Jl IHJlcXVlc3QgKGFzIG5lZWRlZCksIGFuZCBhcm1pbmcgdGhlCi0JCSAqIHRpbWVv dXQgdG8gc3dpdGNoIGNoYW5uZWxzIGFmdGVyIG1heGR3ZWxsIHRpY2tzLgotCQkg KgotCQkgKiBzY2FuX2N1cmNoYW4gc2hvdWxkIG9ubHkgcGF1c2UgZm9yIHRoZSB0 aW1lIHJlcXVpcmVkIHRvCi0JCSAqIHByZXBhcmUvaW5pdGlhdGUgdGhlIGhhcmR3 YXJlIGZvciB0aGUgc2NhbiAoaWYgYXQgYWxsKSwgdGhlCi0JCSAqIGJlbG93IGNv bmR2YXIgaXMgdXNlZCB0byBzbGVlcCBmb3IgdGhlIGNoYW5uZWxzIGR3ZWxsIHRp bWUKLQkJICogYW5kIGFsbG93cyBpdCB0byBiZSBzaWduYWxsZWQgZm9yIGFib3J0 LgotCQkgKi8KLQkJaWMtPmljX3NjYW5fY3VyY2hhbihzcywgbWF4ZHdlbGwpOwot CQlJRUVFODAyMTFfTE9DSyhpYyk7CisJc3NfcHJpdi0+c3NfY2hhbm1pbmR3ZWxs ID0gdGlja3MgKyBzcy0+c3NfbWluZHdlbGw7CisJLyogY2xlYXIgbWluZHdlbGwg bG9jayBhbmQgaW5pdGlhbCBjaGFubmVsIGNoYW5nZSBmbHVzaCAqLworCXNzX3By aXYtPnNzX2lmbGFncyAmPSB+SVNDQU5fUkVQOwogCi0JCS8qIFhYWCBzY2FuIHN0 YXRlIGNhbiBjaGFuZ2UhIFJlLXZhbGlkYXRlIHNjYW4gc3RhdGUhICovCisJaWYg KHNzX3ByaXYtPnNzX2lmbGFncyAmIChJU0NBTl9DQU5DRUx8SVNDQU5fQUJPUlQp KQorCQlnb3RvIGVuZDsKIAotCQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19jaGFubWlu ZHdlbGwgPSB0aWNrcyArIHNzLT5zc19taW5kd2VsbDsKLQkJLyogY2xlYXIgbWlu ZHdlbGwgbG9jayBhbmQgaW5pdGlhbCBjaGFubmVsIGNoYW5nZSBmbHVzaCAqLwot CQlTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgJj0gfklTQ0FOX1JFUDsKKwlJ RUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwgIiVzOiB3 YWl0aW5nXG4iLCBfX2Z1bmNfXyk7CisJSUVFRTgwMjExX1VOTE9DSyhpYyk7Cit9 CiAKLQkJaWYgKChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgJiAoSVNDQU5f Q0FOQ0VMfElTQ0FOX0FCT1JUKSkpCi0JCQljb250aW51ZTsKK3N0YXRpYyB2b2lk CitzY2FuX2VuZChzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzLCBpbnQg c2NhbmRvbmUpCit7CisJc3RydWN0IHNjYW5fc3RhdGUgKnNzX3ByaXYgPSBTQ0FO X1BSSVZBVEUoc3MpOworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IHNzLT5z c192YXA7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBzcy0+c3NfaWM7CiAK LQkJSUVFRTgwMjExX0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1NDQU4sICIl czogd2FpdGluZ1xuIiwgX19mdW5jX18pOwotCQkvKiBXYWl0IHRvIGJlIHNpZ25h bGxlZCB0byBzY2FuIHRoZSBuZXh0IGNoYW5uZWwgKi8KLQkJY3Zfd2FpdCgmU0NB Tl9QUklWQVRFKHNzKS0+c3Nfc2Nhbl9jdiwgSUVFRTgwMjExX0xPQ0tfT0JKKGlj KSk7Ci0JfQorCUlFRUU4MDIxMV9MT0NLX0FTU0VSVChpYyk7CiAKIAlJRUVFODAy MTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwgIiVzOiBvdXRcbiIs IF9fZnVuY19fKTsKIAotCWlmIChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3Mg JiBJU0NBTl9BQk9SVCkKLQkJZ290byBkb25lOworCWlmIChzc19wcml2LT5zc19p ZmxhZ3MgJiBJU0NBTl9BQk9SVCkgeworCQlzY2FuX2RvbmUoc3MsIHNjYW5kb25l KTsKKwkJcmV0dXJuOworCX0KIAogCUlFRUU4MDIxMV9VTkxPQ0soaWMpOwogCWlj LT5pY19zY2FuX2VuZChpYyk7CQkvKiBub3RpZnkgZHJpdmVyICovCkBAIC03NTAs OCArNzcxLDcgQEAKIAkgKiBTaW5jZSBhIGNhbmNlbGxhdGlvbiBtYXkgaGF2ZSBv Y2N1cmVkIGR1cmluZyBvbmUgb2YgdGhlCiAJICogZHJpdmVyIGNhbGxzICh3aGls c3QgdW5sb2NrZWQpLCB1cGRhdGUgc2NhbmRvbmUuCiAJICovCi0JaWYgKHNjYW5k b25lID09IDAgJiYKLQkgICAgKChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3Mg JiBJU0NBTl9DQU5DRUwpICE9IDApKSB7CisJaWYgKHNjYW5kb25lID09IDAgJiYg KHNzX3ByaXYtPnNzX2lmbGFncyAmIElTQ0FOX0NBTkNFTCkgIT0gMCkgewogCQkv KiBYWFggcHJpbnRmPyAqLwogCQlpZl9wcmludGYodmFwLT5pdl9pZnAsCiAJCSAg ICAiJXM6IE9PUFMhIHNjYW4gY2FuY2VsbGVkIGR1cmluZyBkcml2ZXIgY2FsbCAo MSkhXG4iLApAQCAtNzc2LDcgKzc5Niw3IEBACiAJCUlFRUU4MDIxMV9MT0NLKGlj KTsKIAl9CiAJLyogY2xlYXIgaW50ZXJuYWwgZmxhZ3MgYW5kIGFueSBpbmRpY2F0 aW9uIG9mIGEgcGljayAqLwotCVNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyAm PSB+SVNDQU5fUkVQOworCXNzX3ByaXYtPnNzX2lmbGFncyAmPSB+SVNDQU5fUkVQ OwogCXNzLT5zc19mbGFncyAmPSB+SUVFRTgwMjExX1NDQU5fR09UUElDSzsKIAog CS8qCkBAIC03ODYsMTUgKzgwNiwxNSBAQAogCSAqIG5vdGlmeSB0aGUgZHJpdmVy IHRvIGVuZCB0aGUgc2NhbiBhYm92ZSB0byBhdm9pZCBoYXZpbmcKIAkgKiByeCBm cmFtZXMgYWx0ZXIgdGhlIHNjYW4gY2FuZGlkYXRlIGxpc3QuCiAJICovCi0JaWYg KChTQ0FOX1BSSVZBVEUoc3MpLT5zc19pZmxhZ3MgJiBJU0NBTl9DQU5DRUwpID09 IDAgJiYKKwlpZiAoKHNzX3ByaXYtPnNzX2lmbGFncyAmIElTQ0FOX0NBTkNFTCkg PT0gMCAmJgogCSAgICAhc3MtPnNzX29wcy0+c2Nhbl9lbmQoc3MsIHZhcCkgJiYK IAkgICAgKHNzLT5zc19mbGFncyAmIElFRUU4MDIxMV9TQ0FOX09OQ0UpID09IDAg JiYKLQkgICAgdGltZV9iZWZvcmUodGlja3MgKyBzcy0+c3NfbWluZHdlbGwsIHNj YW5lbmQpKSB7CisJICAgIHRpbWVfYmVmb3JlKHRpY2tzICsgc3MtPnNzX21pbmR3 ZWxsLCBzc19wcml2LT5zc19zY2FuZW5kKSkgewogCQlJRUVFODAyMTFfRFBSSU5U Rih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKIAkJICAgICIlczogZG9uZSwgcmVz dGFydCAiCiAJCSAgICAiW3RpY2tzICV1LCBkd2VsbCBtaW4gJWx1IHNjYW5lbmQg JWx1XVxuIiwKIAkJICAgIF9fZnVuY19fLAotCQkgICAgdGlja3MsIHNzLT5zc19t aW5kd2VsbCwgc2NhbmVuZCk7CisJCSAgICB0aWNrcywgc3MtPnNzX21pbmR3ZWxs LCBzc19wcml2LT5zc19zY2FuZW5kKTsKIAkJc3MtPnNzX25leHQgPSAwOwkvKiBy ZXNldCB0byBiZWdpbmluZyAqLwogCQlpZiAoc3MtPnNzX2ZsYWdzICYgSUVFRTgw MjExX1NDQU5fQUNUSVZFKQogCQkJdmFwLT5pdl9zdGF0cy5pc19zY2FuX2FjdGl2 ZSsrOwpAQCAtODAyLDcgKzgyMiw3IEBACiAJCQl2YXAtPml2X3N0YXRzLmlzX3Nj YW5fcGFzc2l2ZSsrOwogCiAJCXNzLT5zc19vcHMtPnNjYW5fcmVzdGFydChzcywg dmFwKTsJLyogWFhYPyAqLwotCQlpZWVlODAyMTFfcnVudGFzayhpYywgJlNDQU5f UFJJVkFURShzcyktPnNzX3NjYW5fdGFzayk7CisJCWllZWU4MDIxMV9ydW50YXNr KGljLCAmc3NfcHJpdi0+c3Nfc2Nhbl9zdGFydCk7CiAJCUlFRUU4MDIxMV9VTkxP Q0soaWMpOwogCQlyZXR1cm47CiAJfQpAQCAtODE0LDE0ICs4MzQsMTMgQEAKIAlJ RUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfU0NBTiwKIAkgICAg IiVzOiAlcywgW3RpY2tzICV1LCBkd2VsbCBtaW4gJWx1IHNjYW5lbmQgJWx1XVxu IiwKIAkgICAgX19mdW5jX18sIHNjYW5kb25lID8gImRvbmUiIDogInN0b3BwZWQi LAotCSAgICB0aWNrcywgc3MtPnNzX21pbmR3ZWxsLCBzY2FuZW5kKTsKKwkgICAg dGlja3MsIHNzLT5zc19taW5kd2VsbCwgc3NfcHJpdi0+c3Nfc2NhbmVuZCk7CiAK IAkvKgogCSAqIFNpbmNlIGEgY2FuY2VsbGF0aW9uIG1heSBoYXZlIG9jY3VyZWQg ZHVyaW5nIG9uZSBvZiB0aGUKIAkgKiBkcml2ZXIgY2FsbHMgKHdoaWxzdCB1bmxv Y2tlZCksIHVwZGF0ZSBzY2FuZG9uZS4KIAkgKi8KLQlpZiAoc2NhbmRvbmUgPT0g MCAmJgotCSAgICAoKFNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyAmIElTQ0FO X0NBTkNFTCkgIT0gMCkpIHsKKwlpZiAoc2NhbmRvbmUgPT0gMCAmJiAoc3NfcHJp di0+c3NfaWZsYWdzICYgSVNDQU5fQ0FOQ0VMKSAhPSAwKSB7CiAJCS8qIFhYWCBw cmludGY/ICovCiAJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwKIAkJICAgICIlczog T09QUyEgc2NhbiBjYW5jZWxsZWQgZHVyaW5nIGRyaXZlciBjYWxsICgyKSFcbiIs CkBAIC04MjksNiArODQ4LDE4IEBACiAJCXNjYW5kb25lID0gMTsKIAl9CiAKKwlz Y2FuX2RvbmUoc3MsIHNjYW5kb25lKTsKK30KKworc3RhdGljIHZvaWQKK3NjYW5f ZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fc3RhdGUgKnNzLCBpbnQgc2NhbmRv bmUpCit7CisJc3RydWN0IHNjYW5fc3RhdGUgKnNzX3ByaXYgPSBTQ0FOX1BSSVZB VEUoc3MpOworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gc3MtPnNzX2ljOwor CXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IHNzLT5zc192YXA7CisKKwlJRUVF ODAyMTFfTE9DS19BU1NFUlQoaWMpOworCiAJLyoKIAkgKiBDbGVhciB0aGUgU0NB TiBiaXQgZmlyc3QgaW4gY2FzZSBmcmFtZXMgYXJlCiAJICogcGVuZGluZyBvbiB0 aGUgc3RhdGlvbiBwb3dlciBzYXZlIHF1ZXVlLiAgSWYKQEAgLTgzNSw4ICs4NjYs OCBAQAogCSAqIHdlIGRlZmVyIHRoaXMgdGhlbiB0aGUgZGlzcGF0Y2ggb2YgdGhl IGZyYW1lcwogCSAqIG1heSBnZW5lcmF0ZSBhIHJlcXVlc3QgdG8gY2FuY2VsIHNj YW5uaW5nLgogCSAqLwotZG9uZToKIAlpYy0+aWNfZmxhZ3MgJj0gfklFRUU4MDIx MV9GX1NDQU47CisKIAkvKgogCSAqIERyb3Agb3V0IG9mIHBvd2VyIHNhdmUgbW9k ZSB3aGVuIGEgc2NhbiBoYXMKIAkgKiBjb21wbGV0ZWQuICBJZiB0aGlzIHNjYW4g d2FzIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQKQEAgLTg1Myw3ICs4ODQsOCBAQAog CQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfQkdTQ0FOOwog CQl9CiAJfQotCVNDQU5fUFJJVkFURShzcyktPnNzX2lmbGFncyAmPSB+KElTQ0FO X0NBTkNFTHxJU0NBTl9BQk9SVCk7CisJc3NfcHJpdi0+c3NfaWZsYWdzICY9IH4o SVNDQU5fQ0FOQ0VMfElTQ0FOX0FCT1JUKTsKKwlzc19wcml2LT5zc19zY2FuZW5k ID0gMDsKIAlzcy0+c3NfZmxhZ3MgJj0gfihJRUVFODAyMTFfU0NBTl9PTkNFIHwg SUVFRTgwMjExX1NDQU5fUElDSzFTVCk7CiAJSUVFRTgwMjExX1VOTE9DSyhpYyk7 CiAjdW5kZWYgSVNDQU5fUkVQCkBAIC05NDcsOSArOTc5LDkgQEAKIAkJaWMtPmlj X3NjYW4gPSBOVUxMOwogCQlyZXR1cm47CiAJfQotCWNhbGxvdXRfaW5pdF9tdHgo JnNzLT5zc19zY2FuX3RpbWVyLCBJRUVFODAyMTFfTE9DS19PQkooaWMpLCAwKTsK LQljdl9pbml0KCZzcy0+c3Nfc2Nhbl9jdiwgInNjYW4iKTsKLQlUQVNLX0lOSVQo JnNzLT5zc19zY2FuX3Rhc2ssIDAsIHNjYW5fdGFzaywgc3MpOworCVRBU0tfSU5J VCgmc3MtPnNzX3NjYW5fc3RhcnQsIDAsIHNjYW5fc3RhcnQsIHNzKTsKKwlUSU1F T1VUX1RBU0tfSU5JVChpYy0+aWNfdHEsICZzcy0+c3Nfc2Nhbl9jdXJjaGFuLCAw LAorCSAgICBzY2FuX2N1cmNoYW5fdGFzaywgc3MpOwogCiAJaWMtPmljX3NjYW4g PSAmc3MtPmJhc2U7CiAJc3MtPmJhc2Uuc3NfaWMgPSBpYzsK ------------HpTmAUBujhjyaoMMYhGG9X--