From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benny Halevy Subject: Re: [PATCH 4/4] bidi support: bidirectional request Date: Mon, 30 Apr 2007 14:53:01 +0300 Message-ID: <4635D89D.4000500@panasas.com> References: <46225E18.7070404@panasas.com> <462261E8.5090005@panasas.com> <200704281948.l3SJm9jS001428@mbox.iij4u.or.jp> <4634BE6B.3000808@panasas.com> <1177872588.3688.79.camel@mulgrave.il.steeleye.com> <20070430111157.GI21015@kernel.dk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030505060007030200010300" Return-path: Received: from gw-e.panasas.com ([65.194.124.178]:41544 "EHLO cassoulet.panasas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1031543AbXD3MGl (ORCPT ); Mon, 30 Apr 2007 08:06:41 -0400 In-Reply-To: <20070430111157.GI21015@kernel.dk> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Jens Axboe , James Bottomley Cc: Boaz Harrosh , FUJITA Tomonori , akpm@osdl.org, michaelc@cs.wisc.edu, hch@infradead.org, linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org This is a multi-part message in MIME format. --------------030505060007030200010300 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Jens Axboe wrote: > On Sun, Apr 29 2007, James Bottomley wrote: >> On Sun, 2007-04-29 at 18:48 +0300, Boaz Harrosh wrote: >>> FUJITA Tomonori wrote: >>>> From: Boaz Harrosh >>>> Subject: [PATCH 4/4] bidi support: bidirectional request >>>> Date: Sun, 15 Apr 2007 20:33:28 +0300 >>>> >>>>> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h >>>>> index 645d24b..16a02ee 100644 >>>>> --- a/include/linux/blkdev.h >>>>> +++ b/include/linux/blkdev.h >>>>> @@ -322,6 +322,7 @@ struct request { >>>>> void *end_io_data; >>>>> >>>>> struct request_io_part uni; >>>>> + struct request_io_part bidi_read; >>>>> }; >>>> Would be more straightforward to have: >>>> >>>> struct request_io_part in; >>>> struct request_io_part out; >>>> >>> Yes I wish I could do that. For bidi supporting drivers this is the most logical. >>> But for the 99.9% of uni-directional drivers, calling rq_uni(), and being some what on >>> the hotish paths, this means we will need a pointer to a uni request_io_part. >>> This is bad because: >>> 1st- There is no defined stage in a request life where to definitely set that pointer, >>> specially in the preparation stages. >>> 2nd- hacks like scsi_error.c/scsi_send_eh_cmnd() will not work at all. Now this is a >>> very bad spot already, and I have a short term fix for it in the SCSI-bidi patches >>> (not sent yet) but a more long term solution is needed. Once such hacks are >>> cleaned up we can do what you say. This is exactly why I use the access functions >>> rq_uni/rq_io/rq_in/rq_out and not open code access. >> I'm still not really convinced about this approach. The primary job of >> the block layer is to manage and merge READ and WRITE requests. It >> serves a beautiful secondary function of queueing for arbitrary requests >> it doesn't understand (REQ_TYPE_BLOCK_PC or REQ_TYPE_SPECIAL ... or >> indeed any non REQ_TYPE_FS). >> >> bidirectional requests fall into the latter category (there's nothing >> really we can do to merge them ... they're just transported by the block >> layer). The only unusual feature is that they carry two bios. I think >> the drivers that actually support bidirectional will be a rarity, so it >> might even be advisable to add it to the queue capability (refuse >> bidirectional requests at the top rather than perturbing all the drivers >> to process them). >> >> So, what about REQ_TYPE_BIDIRECTIONAL rather than REQ_BIDI? That will >> remove it from the standard path and put it on the special command type >> path where we can process it specially. Additionally, if you take this >> approach, you can probably simply chain the second bio through >> req->special as an additional request in the stream. The only thing >> that would then need modification would be the dequeue of the block >> driver (it would have to dequeue both requests and prepare them) and >> that needs to be done only for drivers handling bidirectional requests. > > I agree, I'm really not crazy about shuffling the entire request setup > around just for something as exotic as bidirection commands. How about > just keeping it simple - have a second request linked off the first one > for the second data phase? So keep it completely seperate, not just > overload ->special for 2nd bio list. > > So basically just add a struct request pointer, so you can do rq = > rq->next_rq or something for the next data phase. I bet this would be a > LOT less invasive as well, and we can get by with a few helpers to > support it. > > And it should definitely be a request type. > I'm a bit confused since what you both suggest is very similar to what we've proposed back in October 2006 and the impression we got was that it will be better to support bidirectional block requests natively (yet to be honest, James, you wanted a linked request all along). Before we go on that route again, how do you see the support for bidi at the scsi mid-layer done? Again, we prefer to support that officially using two struct scsi_cmnd_buff instances in struct scsi_cmnd and not as a one-off feature, using special-purpose state and logic (e.g. a linked struct scsi_cmd for the bidi_read sg list). I'm attaching the patch we sent back then for your reference. (for some reason I couldn't find the original post in the any linux-scsi archives) Regards, Benny --------------030505060007030200010300 Content-Type: application/x-patch; name="linux-bidi-2.6.18.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="linux-bidi-2.6.18.patch" U3VwcG9ydCBmb3Igc2NzaSB2YXJpYWJsZSBsZW5ndGggQ0RCcyBhbmQgYmlkaXJlY3Rpb25h bCBjb21tYW5kcwogIApTaWduZWQtb2ZmLWJ5OiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBh bmFzYXMuY29tPgpTaWduZWQtb2ZmLWJ5OiBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNh cy5jb20+Cgo9PT09IC8vZGVwb3QvcHViL2xpbnV4L2Jsb2NrL3Njc2lfaW9jdGwuYyMxIC0g L2hvbWUvYmhhcnJvc2gvcDQubG9jYWwvcHViL2xpbnV4L2Jsb2NrL3Njc2lfaW9jdGwuYyA9 PT09CmRpZmYgLU51cCAvdG1wL3RtcC4xMjE3MS4wIC9ob21lL2JoYXJyb3NoL3A0LmxvY2Fs L3B1Yi9saW51eC9ibG9jay9zY3NpX2lvY3RsLmMgLUwgYS9ibG9jay9zY3NpX2lvY3RsLmMg LUwgYi9ibG9jay9zY3NpX2lvY3RsLmMKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBi L2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMzIsMTAgKzMyLDEzIEBACiAjaW5jbHVkZSA8c2Nz aS9zY3NpX2lvY3RsLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KIAotLyogQ29t bWFuZCBncm91cCAzIGlzIHJlc2VydmVkIGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZC4gICov CisvKgorICogQ29tbWFuZCBncm91cCAzIGlzIHVzZWQgYnkgdmFyaWFibGUgbGVuZ3RoIENE QnMgd2l0aAorICogb3Bjb2RlIFZBUkxFTl9DREIuCisgKi8KIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2NzaV9jb21tYW5kX3NpemVbOF0gPQogewotCTYsIDEwLCAxMCwgMTIsCisJNiwgMTAs IDEwLCAxNiwKIAkxNiwgMTIsIDEwLCAxMAogfTsKIAo9PT09IC8vZGVwb3QvcHViL2xpbnV4 L2RyaXZlcnMvc2NzaS9zY3NpLmMjMiAtIC9ob21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1Yi9s aW51eC9kcml2ZXJzL3Njc2kvc2NzaS5jID09PT0KZGlmZiAtTnVwIC90bXAvdG1wLjEyMTcx LjEgL2hvbWUvYmhhcnJvc2gvcDQubG9jYWwvcHViL2xpbnV4L2RyaXZlcnMvc2NzaS9zY3Np LmMgLUwgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIC1MIGIvZHJpdmVycy9zY3NpL3Njc2kuYwot LS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAg LTEwNywxMSArMTA3LDE0IEBAIGNvbnN0IGNoYXIgKmNvbnN0IHNjc2lfZGV2aWNlX3R5cGVz W01BWF8KIAkiT3B0aWNhbCBEZXZpY2UgICAiLAogCSJNZWRpdW0gQ2hhbmdlciAgICIsCiAJ IkNvbW11bmljYXRpb25zICAgIiwKLQkiVW5rbm93biAgICAgICAgICAiLAotCSJVbmtub3du ICAgICAgICAgICIsCisJIkFTQyBJVDggICAgICAgICAgIiwKKwkiQVNDIElUOCAgICAgICAg ICAiLAogCSJSQUlEICAgICAgICAgICAgICIsCiAJIkVuY2xvc3VyZSAgICAgICAgIiwKIAki RGlyZWN0LUFjY2Vzcy1SQkMiLAorCSJPcHRpY2FsIGNhcmQgICAgICIsCisJIkJyaWRnZSBj b250cm9sbGVyIiwKKwkiT2JqZWN0IHN0b3JhZ2UgICAiLAogfTsKIEVYUE9SVF9TWU1CT0wo c2NzaV9kZXZpY2VfdHlwZXMpOwogCkBAIC00NTYsNiArNDU5LDcgQEAgaW50IHNjc2lfZGlz cGF0Y2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKgogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAw OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgcnRuID0gMDsKKwlpbnQgY2RiX3Np emU7CiAKIAkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHN0aWxsIHVzYWJsZSAqLwogCWlm ICh1bmxpa2VseShjbWQtPmRldmljZS0+c2Rldl9zdGF0ZSA9PSBTREVWX0RFTCkpIHsKQEAg LTUzNyw5ICs1NDEsMTEgQEAgaW50IHNjc2lfZGlzcGF0Y2hfY21kKHN0cnVjdCBzY3NpX2Nt bmQgKgogCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBj b21tYW5kCiAJICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBo YW5kbGUuCiAJICovCi0JaWYgKENEQl9TSVpFKGNtZCkgPiBjbWQtPmRldmljZS0+aG9zdC0+ bWF4X2NtZF9sZW4pIHsKLQkJU0NTSV9MT0dfTUxRVUVVRSgzLAotCQkJCXByaW50aygicXVl dWVjb21tYW5kIDogY29tbWFuZCB0b28gbG9uZy5cbiIpKTsKKwljZGJfc2l6ZSA9IGNtZC0+ dmFybGVuX2NkYiA/IGNtZC0+dmFybGVuX2NkYl9sZW4gOiBDREJfU0laRShjbWQpOworCWlm IChjZGJfc2l6ZSA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgeworCQlTQ1NJ X0xPR19NTFFVRVVFKDAsCisJCQkJcHJpbnRrKCJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRv byBsb25nLiBjZGJfc2l6ZSglZCkgaG9zdC0+bWF4X2NtZF9sZW4oJWQpXG4iLAorCQkJCWNk Yl9zaXplLCBjbWQtPmRldmljZS0+aG9zdC0+bWF4X2NtZF9sZW4pKTsKIAkJY21kLT5yZXN1 bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAogCQlzY3NpX2RvbmUoY21kKTsKPT09PSAvL2Rl cG90L3B1Yi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIzIgLSAvaG9tZS9iaGFy cm9zaC9wNC5sb2NhbC9wdWIvbGludXgvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyA9PT09 CmRpZmYgLU51cCAvdG1wL3RtcC4xMjE3MS4yIC9ob21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1 Yi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIC1MIGEvZHJpdmVycy9zY3NpL3Nj c2lfZGVidWcuYyAtTCBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKLS0tIGEvZHJpdmVy cy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBA IC0xNzk0LDggKzE3OTQsMTEgQEAgc3RhdGljIGludCBzY3NpX2RlYnVnX3NsYXZlX2NvbmZp Z3VyZShzdAogCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykK IAkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1Zzogc2xhdmVfY29uZmlndXJlIDwldSAl dSAldSAldT5cbiIsCiAJCSAgICAgICBzZHAtPmhvc3QtPmhvc3Rfbm8sIHNkcC0+Y2hhbm5l bCwgc2RwLT5pZCwgc2RwLT5sdW4pOwotCWlmIChzZHAtPmhvc3QtPm1heF9jbWRfbGVuICE9 IFNDU0lfREVCVUdfTUFYX0NNRF9MRU4pCisJaWYgKHNkcC0+aG9zdC0+bWF4X2NtZF9sZW4g PCBTQ1NJX0RFQlVHX01BWF9DTURfTEVOKSB7CisJCXByaW50ayhLRVJOX0lORk8gInNjc2lf ZGVidWc6IG1heF9jbWRfbGVuKCVkKSA8IFNDU0lfREVCVUdfTUFYX0NNRF9MRU5cbiIsCisJ CSAgICAgICBzZHAtPmhvc3QtPm1heF9jbWRfbGVuKTsKIAkJc2RwLT5ob3N0LT5tYXhfY21k X2xlbiA9IFNDU0lfREVCVUdfTUFYX0NNRF9MRU47CisJfQogCWRldmlwID0gZGV2SW5mb1Jl ZyhzZHApOwogCXNkcC0+aG9zdGRhdGEgPSBkZXZpcDsKIAlpZiAoc2RwLT5ob3N0LT5jbWRf cGVyX2x1bikKPT09PSAvL2RlcG90L3B1Yi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaV9saWIu YyMyIC0gL2hvbWUvYmhhcnJvc2gvcDQubG9jYWwvcHViL2xpbnV4L2RyaXZlcnMvc2NzaS9z Y3NpX2xpYi5jID09PT0KZGlmZiAtTnVwIC90bXAvdG1wLjEyMTcxLjMgL2hvbWUvYmhhcnJv c2gvcDQubG9jYWwvcHViL2xpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIC1MIGEvZHJp dmVycy9zY3NpL3Njc2lfbGliLmMgLUwgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwotLS0g YS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIu YwpAQCAtMTY5LDcgKzE2OSw3IEBAIGludCBzY3NpX3F1ZXVlX2luc2VydChzdHJ1Y3Qgc2Nz aV9jbW5kICoKICAqIEBidWZmZXI6CWRhdGEgYnVmZmVyCiAgKiBAYnVmZmxlbjoJbGVuIG9m IGJ1ZmZlcgogICogQHNlbnNlOglvcHRpb25hbCBzZW5zZSBidWZmZXIKLSAqIEB0aW1lb3V0 OglyZXF1ZXN0IHRpbWVvdXQgaW4gc2Vjb25kcworICogQHRpbWVvdXQ6CXJlcXVlc3QgdGlt ZW91dCBpbiBqaWZmaWVzCiAgKiBAcmV0cmllczoJbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5 IHJlcXVlc3QKICAqIEBmbGFnczoJb3IgaW50byByZXF1ZXN0IGZsYWdzOwogICoKQEAgLTE5 OCw2ICsxOTgsMTEgQEAgaW50IHNjc2lfZXhlY3V0ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNk ZQogCXJlcS0+dGltZW91dCA9IHRpbWVvdXQ7CiAJcmVxLT5mbGFncyB8PSBmbGFncyB8IFJF UV9CTE9DS19QQyB8IFJFUV9TUEVDSUFMIHwgUkVRX1FVSUVUOwogCisJLyogVGhpcyBjb2Rl IHBhdGggZG9lcyBub3QgeWV0IHN1cHBvcnQgVkFSTEVOX0NEQiBiZWNhdXNlIHdlIHVzZQor CSAqIHNjc2lfaW9fY29udGV4dCBmb3IgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGV4dHJhIGNt bmQgc3BhY2UgKD4xNikKKwkgKi8KKwlCVUdfT04ocmVxLT5jbWRbMF0gPT0gVkFSTEVOX0NE Qik7CisKIAkvKgogCSAqIGhlYWQgaW5qZWN0aW9uICpyZXF1aXJlZCogaGVyZSBvdGhlcndp c2UgcXVpZXNjZSB3b24ndCB3b3JrCiAJICovCkBAIC0yMzUsNiArMjQwLDEwIEBAIGludCBz Y3NpX2V4ZWN1dGVfcmVxKHN0cnVjdCBzY3NpX2RldmljZSAKIEVYUE9SVF9TWU1CT0woc2Nz aV9leGVjdXRlX3JlcSk7CiAKIHN0cnVjdCBzY3NpX2lvX2NvbnRleHQgeworCXVuc2lnbmVk IHNob3J0IHZhcmxlbl9jZGJfbGVuOworCXVuc2lnbmVkIGNoYXIgdmFybGVuX2NkYltTQ1NJ X01BWF9WQVJMRU5fQ0RCX0xFTl07CisJc3RydWN0IHJlcXVlc3QgKmJpZGlfcmVhZF9yZXE7 CS8qIGhvbGRzIHRoZSByZWFkIG1hcHBpbmcgKi8KKwogCXZvaWQgKmRhdGE7CiAJdm9pZCAo KmRvbmUpKHZvaWQgKmRhdGEsIGNoYXIgKnNlbnNlLCBpbnQgcmVzdWx0LCBpbnQgcmVzaWQp OwogCWNoYXIgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKQEAgLTI0OSw2ICsyNTgs MTAgQEAgc3RhdGljIHZvaWQgc2NzaV9lbmRfYXN5bmMoc3RydWN0IHJlcXVlcwogCWlmIChz aW9jLT5kb25lKQogCQlzaW9jLT5kb25lKHNpb2MtPmRhdGEsIHNpb2MtPnNlbnNlLCByZXEt PmVycm9ycywgcmVxLT5kYXRhX2xlbik7CiAKKwlpZiAoc2lvYy0+YmlkaV9yZWFkX3JlcSkg eworCQlfX2Jsa19wdXRfcmVxdWVzdChzaW9jLT5iaWRpX3JlYWRfcmVxLT5xLCBzaW9jLT5i aWRpX3JlYWRfcmVxKTsKKwl9CisKIAlrbWVtX2NhY2hlX2ZyZWUoc2NzaV9pb19jb250ZXh0 X2NhY2hlLCBzaW9jKTsKIAlfX2Jsa19wdXRfcmVxdWVzdChyZXEtPnEsIHJlcSk7CiB9CkBA IC0zNzUsNDAgKzM4OCw4MSBAQCBmcmVlX2Jpb3M6CiAgKiBAYnVmZmVyOglkYXRhIGJ1ZmZl ciAodGhpcyBjYW4gYmUgYSBrZXJuZWwgYnVmZmVyIG9yIHNjYXR0ZXJsaXN0KQogICogQGJ1 ZmZsZW46CWxlbiBvZiBidWZmZXIKICAqIEB1c2Vfc2c6CWlmIGJ1ZmZlciBpcyBhIHNjYXR0 ZXJsaXN0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cwotICogQHRpbWVvdXQ6CXJl cXVlc3QgdGltZW91dCBpbiBzZWNvbmRzCisgKiBAdGltZW91dDoJcmVxdWVzdCB0aW1lb3V0 IGluIGppZmZpZXMKICAqIEByZXRyaWVzOgludW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcmVx dWVzdAotICogQGZsYWdzOglvciBpbnRvIHJlcXVlc3QgZmxhZ3MKKyAqIEBnZnA6CWdmcCBh bGxvY2F0aW9uIGZsYWdzCiAgKiovCiBpbnQgc2NzaV9leGVjdXRlX2FzeW5jKHN0cnVjdCBz Y3NpX2RldmljZSAqc2RldiwgY29uc3QgdW5zaWduZWQgY2hhciAqY21kLAogCQkgICAgICAg aW50IGNtZF9sZW4sIGludCBkYXRhX2RpcmVjdGlvbiwgdm9pZCAqYnVmZmVyLCB1bnNpZ25l ZCBidWZmbGVuLAogCQkgICAgICAgaW50IHVzZV9zZywgaW50IHRpbWVvdXQsIGludCByZXRy aWVzLCB2b2lkICpwcml2ZGF0YSwKIAkJICAgICAgIHZvaWQgKCpkb25lKSh2b2lkICosIGNo YXIgKiwgaW50LCBpbnQpLCBnZnBfdCBnZnApCiB7CisJc3RydWN0IHNjc2lfY21uZF9idWZm IGJ1ZmY7CisKKwlidWZmLnVzZV9zZyA9IHVzZV9zZzsKKwlidWZmLnJlcXVlc3RfYnVmZmVy ID0gYnVmZmVyOworCWJ1ZmYucmVxdWVzdF9idWZmbGVuID0gYnVmZmxlbjsKKworCXJldHVy biBzY3NpX2V4ZWN1dGVfYmlkaV9hc3luYygKKwkJc2RldiwgY21kLCBjbWRfbGVuLCBkYXRh X2RpcmVjdGlvbiwKKwkJJmJ1ZmYsIE5VTEwsCisJCXRpbWVvdXQsIHJldHJpZXMsIHByaXZk YXRhLCBkb25lLCBnZnAgKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZXhlY3V0ZV9h c3luYyk7CisKKy8qKgorICogc2NzaV9leGVjdXRlX2JpZGlfYXN5bmMgLSBpbnNlcnQgYmlk aSByZXF1ZXN0LCBkb24ndCB3YWl0CisgKiBAc2RldjoJc2NzaSBkZXZpY2UKKyAqIEBjbWQ6 CXNjc2kgY29tbWFuZAorICogQGNtZF9sZW46CWxlbmd0aCBvZiBzY3NpIGNkYgorICogQGRh dGFfZGlyZWN0aW9uOiBkYXRhIGRpcmVjdGlvbgorICogQGJpZGlfd3JpdGVfYnVmZi5idWZm ZXI6CWRhdGEgYnVmZmVyICh0aGlzIGNhbiBiZSBhIGtlcm5lbCBidWZmZXIgb3Igc2NhdHRl cmxpc3QpCisgKiBAYmlkaV93cml0ZV9idWZmLmJ1ZmZsZW46CWxlbiBvZiBidWZmZXIKKyAq IEBiaWRpX3dyaXRlX2J1ZmYudXNlX3NnOglpZiBidWZmZXIgaXMgYSBzY2F0dGVybGlzdCB0 aGlzIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAqIEBiaWRpX3JlYWRfYnVmZjogc2Ft ZSBhcyBhYm92ZSBiaWRpX3dyaXRlX2J1ZmYgYnV0IGZvciB0aGUgYmlkaSByZWFkIHBhcnQK KyAqIEB0aW1lb3V0OglyZXF1ZXN0IHRpbWVvdXQgaW4gamlmZmllcworICogQHJldHJpZXM6 CW51bWJlciBvZiB0aW1lcyB0byByZXRyeSByZXF1ZXN0CisgKiBAcHJpdmRhdGE6ICAgdXNl ciBkYXRhIHBhc3NlZCB0byBkb25lIGZ1bmN0aW9uCisgKiBAZG9uZTogICAgICAgcG9pbnRl ciB0byBkb25lIGZ1bmN0aW9uIGNhbGxlZCBhdCBpbyBjb21wbGV0aW9uLgorICogICAgICAg ICAgICAgIHNpZ25hdHVyZTogdm9pZCBkb25lKHZvaWQgKnVzZXJfZGF0YSwgY2hhciAqc2Vu Y2UsIGludCBlcnJvcnMsIGludCBkYXRhX2J5dGVzX2FkdmFuY2VkKQorICogQGdmcDoJZ2Zw IGFsbG9jYXRpb24gZmxhZ3MKKyAqKi8KK2ludCBzY3NpX2V4ZWN1dGVfYmlkaV9hc3luYyhz dHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqY21kLCBpbnQgY21kX2xlbiwgaW50IGRhdGFfZGlyZWN0 aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3NpX2NtbmRfYnVm ZiAqYnVmZiwgc3RydWN0IHNjc2lfY21uZF9idWZmICpiaWRpX3JlYWRfYnVmZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIHZvaWQg KnByaXZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkb25lKSh2 b2lkICosIGNoYXIgKiwgaW50LCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdmcF90IGdmcCkKK3sKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzY3NpX2lv X2NvbnRleHQgKnNpb2M7CiAJaW50IGVyciA9IDA7Ci0JaW50IHdyaXRlID0gKGRhdGFfZGly ZWN0aW9uID09IERNQV9UT19ERVZJQ0UpOworCWludCB3cml0ZSA9ICgoZGF0YV9kaXJlY3Rp b24gPT0gRE1BX1RPX0RFVklDRSkgfHwgKGRhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVD VElPTkFMKSk7CiAKIAlzaW9jID0ga21lbV9jYWNoZV9hbGxvYyhzY3NpX2lvX2NvbnRleHRf Y2FjaGUsIGdmcCk7CiAJaWYgKCFzaW9jKQogCQlyZXR1cm4gRFJJVkVSX0VSUk9SIDw8IDI0 OwogCW1lbXNldChzaW9jLCAwLCBzaXplb2YoKnNpb2MpKTsKIAotCXJlcSA9IGJsa19nZXRf cmVxdWVzdChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB3cml0ZSwgZ2ZwKTsKKwlyZXEgPSBibGtf Z2V0X3JlcXVlc3Qoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgd3JpdGUgPyBXUklURSA6IFJFQUQs IGdmcCk7CiAJaWYgKCFyZXEpCiAJCWdvdG8gZnJlZV9zZW5zZTsKIAlyZXEtPmZsYWdzIHw9 IFJFUV9CTE9DS19QQyB8IFJFUV9RVUlFVDsKIAotCWlmICh1c2Vfc2cpCi0JCWVyciA9IHNj c2lfcmVxX21hcF9zZyhyZXEsIGJ1ZmZlciwgdXNlX3NnLCBidWZmbGVuLCBnZnApOwotCWVs c2UgaWYgKGJ1ZmZsZW4pCi0JCWVyciA9IGJsa19ycV9tYXBfa2VybihyZXEtPnEsIHJlcSwg YnVmZmVyLCBidWZmbGVuLCBnZnApOworCWlmIChidWZmLT51c2Vfc2cpCisJCWVyciA9IHNj c2lfcmVxX21hcF9zZyhyZXEsIGJ1ZmYtPnJlcXVlc3RfYnVmZmVyLCBidWZmLT51c2Vfc2cs IGJ1ZmYtPnJlcXVlc3RfYnVmZmxlbiwgZ2ZwKTsKKwllbHNlIGlmIChidWZmLT5yZXF1ZXN0 X2J1ZmZsZW4pCisJCWVyciA9IGJsa19ycV9tYXBfa2VybihyZXEtPnEsIHJlcSwgYnVmZi0+ cmVxdWVzdF9idWZmZXIsIGJ1ZmYtPnJlcXVlc3RfYnVmZmxlbiwgZ2ZwKTsKIAogCWlmIChl cnIpCiAJCWdvdG8gZnJlZV9yZXE7CiAKLQlyZXEtPmNtZF9sZW4gPSBjbWRfbGVuOworCXJl cS0+Y21kX2xlbiA9IG1pbihjbWRfbGVuLCBNQVhfQ09NTUFORF9TSVpFKTsKIAltZW1jcHko cmVxLT5jbWQsIGNtZCwgcmVxLT5jbWRfbGVuKTsKKwlCVUdfT04oIChjbWRbMF09PVZBUkxF Tl9DREIpICYmIChzY3NpX3Zhcmxlbl9jZGJfbGVuZ3RoKCh2b2lkKiljbWQpID4gY21kX2xl bikgKTsKKwlCVUdfT04oc2l6ZW9mKHNpb2MtPnZhcmxlbl9jZGIpIDwgY21kX2xlbik7CisJ c2lvYy0+dmFybGVuX2NkYl9sZW4gPSBjbWRfbGVuOworCW1lbWNweShzaW9jLT52YXJsZW5f Y2RiLCBjbWQsIGNtZF9sZW4pOwogCXJlcS0+c2Vuc2UgPSBzaW9jLT5zZW5zZTsKIAlyZXEt PnNlbnNlX2xlbiA9IDA7CiAJcmVxLT50aW1lb3V0ID0gdGltZW91dDsKQEAgLTQxOCw2ICs0 NzIsMzIgQEAgaW50IHNjc2lfZXhlY3V0ZV9hc3luYyhzdHJ1Y3Qgc2NzaV9kZXZpYwogCXNp b2MtPmRhdGEgPSBwcml2ZGF0YTsKIAlzaW9jLT5kb25lID0gZG9uZTsKIAorCS8qIGJpZGkg aGFuZGxpbmcgKi8KKwlCVUdfT04oICgoZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNU SU9OQUwpICYmICFiaWRpX3JlYWRfYnVmZikgKTsKKwlCVUdfT04oICgoZGF0YV9kaXJlY3Rp b24gIT0gRE1BX0JJRElSRUNUSU9OQUwpICYmIGJpZGlfcmVhZF9idWZmKSAgKTsKKwlpZiAo YmlkaV9yZWFkX2J1ZmYpIHsKKwkJc3RydWN0IHJlcXVlc3QgKmJpZGlfcmVxID0gYmxrX2dl dF9yZXF1ZXN0KHNkZXYtPnJlcXVlc3RfcXVldWUsIFJFQUQsIGdmcCk7CisJCWlmICghYmlk aV9yZXEpCisJCQlnb3RvIGZyZWVfcmVxOworCQliaWRpX3JlcS0+ZmxhZ3MgfD0gUkVRX0JM T0NLX1BDIHwgUkVRX1FVSUVUOworCQkvKiBtYXAgaW4gdGhlIHJlYWQgZGF0YSAqLworCQlp ZiAoYmlkaV9yZWFkX2J1ZmYtPnVzZV9zZykgeworCQkJZXJyID0gc2NzaV9yZXFfbWFwX3Nn KGJpZGlfcmVxLCBiaWRpX3JlYWRfYnVmZi0+cmVxdWVzdF9idWZmZXIsCisJCQkgICAgICAg ICAgICAgICAgICAgICAgYmlkaV9yZWFkX2J1ZmYtPnVzZV9zZywKKwkJCSAgICAgICAgICAg ICAgICAgICAgICBiaWRpX3JlYWRfYnVmZi0+cmVxdWVzdF9idWZmbGVuLCBnZnApOworCQl9 IGVsc2UgeworCQkJQlVHX09OKCFiaWRpX3JlYWRfYnVmZi0+cmVxdWVzdF9idWZmbGVuKTsK KwkJCWVyciA9IGJsa19ycV9tYXBfa2VybihiaWRpX3JlcS0+cSwgYmlkaV9yZXEsIGJpZGlf cmVhZF9idWZmLT5yZXF1ZXN0X2J1ZmZlciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICBi aWRpX3JlYWRfYnVmZi0+cmVxdWVzdF9idWZmbGVuLCBnZnApOworCQl9CisKKwkJaWYgKGVy cikgeworCQkJYmxrX3B1dF9yZXF1ZXN0KGJpZGlfcmVxKTsKKwkJCWdvdG8gZnJlZV9yZXE7 CisJCX0KKwkJc2lvYy0+YmlkaV9yZWFkX3JlcSA9IGJpZGlfcmVxOworCX0KKwogCWJsa19l eGVjdXRlX3JxX25vd2FpdChyZXEtPnEsIE5VTEwsIHJlcSwgMSwgc2NzaV9lbmRfYXN5bmMp OwogCXJldHVybiAwOwogCkBAIC00MjcsNyArNTA3LDYzIEBAIGZyZWVfc2Vuc2U6CiAJa2Zy ZWUoc2lvYyk7CiAJcmV0dXJuIERSSVZFUl9FUlJPUiA8PCAyNDsKIH0KLUVYUE9SVF9TWU1C T0xfR1BMKHNjc2lfZXhlY3V0ZV9hc3luYyk7CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2V4 ZWN1dGVfYmlkaV9hc3luYyk7CisKK3N0cnVjdCBzY3NpX2V4ZWN1dGVfYmlkaV9kb25lX3Qg eworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworCWNoYXIqIHNlbnNlOworCWludCBl cnJvcnM7Cit9IDsKKworc3RhdGljIHZvaWQgc2NzaV9leGVjdXRlX2JpZGlfZG9uZSh2b2lk ICp1c2VyX2RhdGEsIGNoYXIgKnNlbnNlLCBpbnQgZXJyb3JzLCBpbnQgZGF0YV9sZW4pCit7 CisJc3RydWN0IHNjc2lfZXhlY3V0ZV9iaWRpX2RvbmVfdCAqc2ViZCA9IHVzZXJfZGF0YTsK KwlzZWJkLT5lcnJvcnMgPSBlcnJvcnM7CisJaWYgKHNlYmQtPnNlbnNlKSB7CisJCW1lbWNw eShzZWJkLT5zZW5zZSwgc2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJfQorCWNv bXBsZXRlKHNlYmQtPndhaXRpbmcpOworfQorCisvKioKKyAqIHNjc2lfZXhlY3V0ZV9iaWRp IC0gaW5zZXJ0IGEgYmlkaSByZXF1ZXN0CisgKiBAc2RldjoJc2NzaSBkZXZpY2UKKyAqIEBj bWQ6CXNjc2kgY29tbWFuZAorICogQGNtZF9sZW46CWxlbmd0aCBvZiBzY3NpIGNkYgorICog QGRhdGFfZGlyZWN0aW9uOiBkYXRhIGRpcmVjdGlvbgorICogQGJpZGlfd3JpdGVfYnVmZi5i dWZmZXI6CWRhdGEgYnVmZmVyICh0aGlzIGNhbiBiZSBhIGtlcm5lbCBidWZmZXIgb3Igc2Nh dHRlcmxpc3QpCisgKiBAYmlkaV93cml0ZV9idWZmLmJ1ZmZsZW46CWxlbiBvZiBidWZmZXIK KyAqIEBiaWRpX3dyaXRlX2J1ZmYudXNlX3NnOglpZiBidWZmZXIgaXMgYSBzY2F0dGVybGlz dCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAqIEBiaWRpX3JlYWRfYnVmZjog c2FtZSBhcyBhYm92ZSBiaWRpX3dyaXRlX2J1ZmYgYnV0IGZvciB0aGUgYmlkaSByZWFkIHBh cnQuIGNhbiBiZSBOVUxMCisgKiBAc2Vuc2U6CW9wdGlvbmFsIHNlbnNlIGJ1ZmZlcgorICog QHRpbWVvdXQ6CXJlcXVlc3QgdGltZW91dCBpbiBqaWZmaWVzCisgKiBAcmV0cmllczoJbnVt YmVyIG9mIHRpbWVzIHRvIHJldHJ5IHJlcXVlc3QKKyAqKi8KK2ludCBzY3NpX2V4ZWN1dGVf YmlkaShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqY21kLCBpbnQgY21kX2xlbiwgaW50IGRhdGFfZGlyZWN0 aW9uLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3NpX2NtbmRfYnVmZiAqYnVm Ziwgc3RydWN0IHNjc2lfY21uZF9idWZmICpiaWRpX3JlYWRfYnVmZiwKKyAgICAgICAgICAg ICAgICAgICAgICBjaGFyKiBzZW5zZSwgaW50IHRpbWVvdXQsIGludCByZXRyaWVzKQorewor CWludCByZXQ7CisJc3RydWN0IHNjc2lfZXhlY3V0ZV9iaWRpX2RvbmVfdCBzZWJkOworCURF Q0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOworCXNlYmQuc2Vuc2UgPSBzZW5zZTsK KwlzZWJkLndhaXRpbmcgPSAmd2FpdDsKKworCXJldCA9IHNjc2lfZXhlY3V0ZV9iaWRpX2Fz eW5jKHNkZXYsCisgICAgICAgICAgICAgICAgICAgICAgY21kLCBjbWRfbGVuLCBkYXRhX2Rp cmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBidWZmLCBiaWRpX3JlYWRfYnVmZiwK KyAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCByZXRyaWVzLAorCQkgICAgICAmc2Vi ZCwgc2NzaV9leGVjdXRlX2JpZGlfZG9uZSwKKwkJICAgICAgX19HRlBfV0FJVCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOwor CisJcmV0dXJuIHNlYmQuZXJyb3JzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9leGVj dXRlX2JpZGkpOwogCiAvKgogICogRnVuY3Rpb246ICAgIHNjc2lfaW5pdF9jbWRfZXJyaCgp CkBAIC02NTcsNiArNzkzLDggQEAgc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfZW5k X3JlcXVlcwogCWlmIChlbmRfdGhhdF9yZXF1ZXN0X2NodW5rKHJlcSwgdXB0b2RhdGUsIGJ5 dGVzKSkgewogCQlpbnQgbGVmdG92ZXIgPSAocmVxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSk7 CiAKKwkJQlVHX09OKCBjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElP TkFMICk7CisKIAkJaWYgKGJsa19wY19yZXF1ZXN0KHJlcSkpCiAJCQlsZWZ0b3ZlciA9IHJl cS0+ZGF0YV9sZW47CiAKQEAgLTY3OSw2ICs4MTcsMTMgQEAgc3RhdGljIHN0cnVjdCBzY3Np X2NtbmQgKnNjc2lfZW5kX3JlcXVlcwogCiAJYWRkX2Rpc2tfcmFuZG9tbmVzcyhyZXEtPnJx X2Rpc2spOwogCisJLyogZW5kIGJpZGkgcmVhZCBjaHVuayAqLworCWlmIChpc19iaWRpX2Nt bmQoY21kKSkgeworCQkvKiByZWFkIHdhcyBnb29kIHRoZSBlcnJvciBpcyBjYXJyaWVkIG9u IG1haW4gcmVxIChldmVuIGZvciBhIHJlYWQgZXJyb3IpICovCisJCWVuZF90aGF0X3JlcXVl c3RfY2h1bmsoIGNtZC0+YmlkaV9yZWFkX3NnbC5yZXF1ZXN0LCAxLCBjbWQtPmJpZGlfcmVh ZF9zZ2wucmVxdWVzdC0+ZGF0YV9sZW4pOworCQllbmRfdGhhdF9yZXF1ZXN0X2xhc3QoY21k LT5iaWRpX3JlYWRfc2dsLnJlcXVlc3QsIDEpOworCX0KKwogCXNwaW5fbG9ja19pcnFzYXZl KHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlpZiAoYmxrX3JxX3RhZ2dlZChyZXEpKQogCQli bGtfcXVldWVfZW5kX3RhZyhxLCByZXEpOwpAQCAtNjkzLDM0ICs4MzgsMzQgQEAgc3RhdGlj IHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfZW5kX3JlcXVlcwogCXJldHVybiBOVUxMOwogfQog Ci1zdGF0aWMgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY3NpX2FsbG9jX3NndGFibGUoc3RydWN0 IHNjc2lfY21uZCAqY21kLCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNjc2lfYWxsb2Nfc2d0YWJsZShzdHJ1Y3Qgc2NzaV9jbW5kX3NnbCAqc2NzZ2ws IGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBzY3NpX2hvc3Rfc2dfcG9vbCAqc2dwOwog CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwogCi0JQlVHX09OKCFjbWQtPnVzZV9zZyk7CisJ QlVHX09OKCFzY3NnbC0+dXNlX3NnKTsKIAotCXN3aXRjaCAoY21kLT51c2Vfc2cpIHsKKwlz d2l0Y2ggKHNjc2dsLT51c2Vfc2cpIHsKIAljYXNlIDEgLi4uIDg6Ci0JCWNtZC0+c2dsaXN0 X2xlbiA9IDA7CisJCXNjc2dsLT5zZ2xpc3RfbGVuID0gMDsKIAkJYnJlYWs7CiAJY2FzZSA5 IC4uLiAxNjoKLQkJY21kLT5zZ2xpc3RfbGVuID0gMTsKKwkJc2NzZ2wtPnNnbGlzdF9sZW4g PSAxOwogCQlicmVhazsKIAljYXNlIDE3IC4uLiAzMjoKLQkJY21kLT5zZ2xpc3RfbGVuID0g MjsKKwkJc2NzZ2wtPnNnbGlzdF9sZW4gPSAyOwogCQlicmVhazsKICNpZiAoU0NTSV9NQVhf UEhZU19TRUdNRU5UUyA+IDMyKQogCWNhc2UgMzMgLi4uIDY0OgotCQljbWQtPnNnbGlzdF9s ZW4gPSAzOworCQlzY3NnbC0+c2dsaXN0X2xlbiA9IDM7CiAJCWJyZWFrOwogI2lmIChTQ1NJ X01BWF9QSFlTX1NFR01FTlRTID4gNjQpCiAJY2FzZSA2NSAuLi4gMTI4OgotCQljbWQtPnNn bGlzdF9sZW4gPSA0OworCQlzY3NnbC0+c2dsaXN0X2xlbiA9IDQ7CiAJCWJyZWFrOwogI2lm IChTQ1NJX01BWF9QSFlTX1NFR01FTlRTICA+IDEyOCkKIAljYXNlIDEyOSAuLi4gMjU2Ogot CQljbWQtPnNnbGlzdF9sZW4gPSA1OworCQlzY3NnbC0+c2dsaXN0X2xlbiA9IDU7CiAJCWJy ZWFrOwogI2VuZGlmCiAjZW5kaWYKQEAgLTcyOSw3ICs4NzQsNyBAQCBzdGF0aWMgc3RydWN0 IHNjYXR0ZXJsaXN0ICpzY3NpX2FsbG9jX3NnCiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNn cCA9IHNjc2lfc2dfcG9vbHMgKyBjbWQtPnNnbGlzdF9sZW47CisJc2dwID0gc2NzaV9zZ19w b29scyArIHNjc2dsLT5zZ2xpc3RfbGVuOwogCXNnbCA9IG1lbXBvb2xfYWxsb2Moc2dwLT5w b29sLCBnZnBfbWFzayk7CiAJcmV0dXJuIHNnbDsKIH0KQEAgLTc3Miw2ICs5MTcsMTMgQEAg c3RhdGljIHZvaWQgc2NzaV9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IAogCSAqLwogCWNtZC0+ cmVxdWVzdF9idWZmZXIgPSBOVUxMOwogCWNtZC0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwor CWlmIChpc19iaWRpX2NtbmQoY21kKSkgeworCQlpZiAoY21kLT5iaWRpX3JlYWRfc2dsLnVz ZV9zZykKKwkJCXNjc2lfZnJlZV9zZ3RhYmxlKGNtZC0+YmlkaV9yZWFkX3NnbC5yZXF1ZXN0 X2J1ZmZlciwgY21kLT5iaWRpX3JlYWRfc2dsLnNnbGlzdF9sZW4pOworCQljbWQtPmJpZGlf cmVhZF9zZ2wucmVxdWVzdF9idWZmZXIgPSBOVUxMIDsKKwkJY21kLT5iaWRpX3JlYWRfc2ds LnJlcXVlc3RfYnVmZmxlbiA9IDAgOworCX0KIH0KIAogLyoKQEAgLTg1OSw2ICsxMDExLDgg QEAgdm9pZCBzY3NpX2lvX2NvbXBsZXRpb24oc3RydWN0IHNjc2lfY21uZAogCWlmIChzY3Np X2VuZF9yZXF1ZXN0KGNtZCwgMSwgZ29vZF9ieXRlcywgcmVzdWx0ID09IDApID09IE5VTEwp CiAJCXJldHVybjsKIAorCUJVR19PTihpc19iaWRpX2NtbmQoY21kKSk7CisKIAkvKiBnb29k X2J5dGVzID0gMCwgb3IgKGluY2x1c2l2ZSkgdGhlcmUgd2VyZSBsZWZ0b3ZlcnMgYW5kCiAJ ICogcmVzdWx0ID0gMCwgc28gc2NzaV9lbmRfcmVxdWVzdCBjb3VsZG4ndCByZXRyeS4KIAkg Ki8KQEAgLTk2OCw4MCArMTEyMiwxMjkgQEAgdm9pZCBzY3NpX2lvX2NvbXBsZXRpb24oc3Ry dWN0IHNjc2lfY21uZAogRVhQT1JUX1NZTUJPTChzY3NpX2lvX2NvbXBsZXRpb24pOwogCiAv KgotICogRnVuY3Rpb246ICAgIHNjc2lfaW5pdF9pbygpCisgKiBGdW5jdGlvbjogICAgc2Nz aV9pbml0X3NnbCgpCiAgKgotICogUHVycG9zZTogICAgIFNDU0kgSS9PIGluaXRpYWxpemUg ZnVuY3Rpb24uCisgKiBQdXJwb3NlOiAgICAgU0NTSSBJL08gaW5pdGlhbGl6ZSBoZWxwZXIu CisgKiAgICAgICAgICAgICAgbWFwcyB0aGUgcmVxdWVzdCBidWZmZXJzIGludG8gdGhlIGdp dmVuIHNjc2dsLgogICoKLSAqIEFyZ3VtZW50czogICBjbWQgICAtIENvbW1hbmQgZGVzY3Jp cHRvciB3ZSB3aXNoIHRvIGluaXRpYWxpemUKKyAqIEFyZ3VtZW50czogICBzY3NnbCAgIC0g Q29tbWFuZCBzZ2wgd2Ugd2lzaCB0byBpbml0aWFsaXplCiAgKgogICogUmV0dXJuczogICAg IDAgb24gc3VjY2VzcwogICoJCUJMS1BSRVBfREVGRVIgaWYgdGhlIGZhaWx1cmUgaXMgcmV0 cnlhYmxlCiAgKgkJQkxLUFJFUF9LSUxMIGlmIHRoZSBmYWlsdXJlIGlzIGZhdGFsCiAgKi8K LXN0YXRpYyBpbnQgc2NzaV9pbml0X2lvKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3N0YXRp YyBpbnQgc2NzaV9pbml0X3NnbChzdHJ1Y3Qgc2NzaV9jbW5kX3NnbCAqc2NzZ2wpCiB7Ci0J c3RydWN0IHJlcXVlc3QgICAgICpyZXEgPSBjbWQtPnJlcXVlc3Q7CisJc3RydWN0IHJlcXVl c3QgICAgICpyZXEgPSBzY3NnbC0+cmVxdWVzdDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn cG50OwogCWludAkJICAgY291bnQ7CiAKIAkvKgotCSAqIGlmIHRoaXMgaXMgYSBycS0+ZGF0 YSBiYXNlZCBSRVFfQkxPQ0tfUEMsIHNldHVwIGZvciBhIG5vbi1zZyB4ZmVyCi0JICovCi0J aWYgKChyZXEtPmZsYWdzICYgUkVRX0JMT0NLX1BDKSAmJiAhcmVxLT5iaW8pIHsKLQkJY21k LT5yZXF1ZXN0X2J1ZmZsZW4gPSByZXEtPmRhdGFfbGVuOwotCQljbWQtPnJlcXVlc3RfYnVm ZmVyID0gcmVxLT5kYXRhOwotCQlyZXEtPmJ1ZmZlciA9IHJlcS0+ZGF0YTsKLQkJY21kLT51 c2Vfc2cgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgogCSAqIHdlIHVzZWQgdG8gbm90 IHVzZSBzY2F0dGVyLWdhdGhlciBmb3Igc2luZ2xlIHNlZ21lbnQgcmVxdWVzdCwKIAkgKiBi dXQgbm93IHdlIGRvIChpdCBtYWtlcyBoaWdobWVtIEkvTyBlYXNpZXIgdG8gc3VwcG9ydCB3 aXRob3V0CiAJICoga21hcHBpbmcgcGFnZXMpCiAJICovCi0JY21kLT51c2Vfc2cgPSByZXEt Pm5yX3BoeXNfc2VnbWVudHM7CisJc2NzZ2wtPnVzZV9zZyA9IHJlcS0+bnJfcGh5c19zZWdt ZW50czsKIAogCS8qCiAJICogaWYgc2cgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmVxdWV1 ZSByZXF1ZXN0IGxhdGVyLgogCSAqLwotCXNncG50ID0gc2NzaV9hbGxvY19zZ3RhYmxlKGNt ZCwgR0ZQX0FUT01JQyk7CisJc2dwbnQgPSBzY3NpX2FsbG9jX3NndGFibGUoc2NzZ2wsIEdG UF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghc2dwbnQpKSB7CiAJCXNjc2lfdW5wcmVwX3Jl cXVlc3QocmVxKTsKIAkJcmV0dXJuIEJMS1BSRVBfREVGRVI7CiAJfQogCi0JY21kLT5yZXF1 ZXN0X2J1ZmZlciA9IChjaGFyICopIHNncG50OwotCWNtZC0+cmVxdWVzdF9idWZmbGVuID0g cmVxLT5ucl9zZWN0b3JzIDw8IDk7CisJc2NzZ2wtPnJlcXVlc3RfYnVmZmVyID0gKGNoYXIg Kikgc2dwbnQ7CisJc2NzZ2wtPnJlcXVlc3RfYnVmZmxlbiA9IHJlcS0+bnJfc2VjdG9ycyA8 PCA5OwogCWlmIChibGtfcGNfcmVxdWVzdChyZXEpKQotCQljbWQtPnJlcXVlc3RfYnVmZmxl biA9IHJlcS0+ZGF0YV9sZW47CisJCXNjc2dsLT5yZXF1ZXN0X2J1ZmZsZW4gPSByZXEtPmRh dGFfbGVuOwogCXJlcS0+YnVmZmVyID0gTlVMTDsKIAogCS8qIAogCSAqIE5leHQsIHdhbGsg dGhlIGxpc3QsIGFuZCBmaWxsIGluIHRoZSBhZGRyZXNzZXMgYW5kIHNpemVzIG9mCiAJICog ZWFjaCBzZWdtZW50LgogCSAqLwotCWNvdW50ID0gYmxrX3JxX21hcF9zZyhyZXEtPnEsIHJl cSwgY21kLT5yZXF1ZXN0X2J1ZmZlcik7CisJY291bnQgPSBibGtfcnFfbWFwX3NnKHJlcS0+ cSwgcmVxLCBzY3NnbC0+cmVxdWVzdF9idWZmZXIpOwogCiAJLyoKIAkgKiBtYXBwZWQgd2Vs bCwgc2VuZCBpdCBvZmYKIAkgKi8KLQlpZiAobGlrZWx5KGNvdW50IDw9IGNtZC0+dXNlX3Nn KSkgewotCQljbWQtPnVzZV9zZyA9IGNvdW50OworCWlmIChsaWtlbHkoY291bnQgPD0gc2Nz Z2wtPnVzZV9zZykpIHsKKwkJc2NzZ2wtPnVzZV9zZyA9IGNvdW50OwogCQlyZXR1cm4gMDsK IAl9CiAKIAlwcmludGsoS0VSTl9FUlIgIkluY29ycmVjdCBudW1iZXIgb2Ygc2VnbWVudHMg YWZ0ZXIgYnVpbGRpbmcgbGlzdFxuIik7Ci0JcHJpbnRrKEtFUk5fRVJSICJjb3VudGVkICVk LCByZWNlaXZlZCAlZFxuIiwgY291bnQsIGNtZC0+dXNlX3NnKTsKKwlwcmludGsoS0VSTl9F UlIgImNvdW50ZWQgJWQsIHJlY2VpdmVkICVkXG4iLCBjb3VudCwgc2NzZ2wtPnVzZV9zZyk7 CiAJcHJpbnRrKEtFUk5fRVJSICJyZXEgbnJfc2VjICVsdSwgY3VyX25yX3NlYyAldVxuIiwg cmVxLT5ucl9zZWN0b3JzLAogCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMpOwogCi0JLyog cmVsZWFzZSB0aGUgY29tbWFuZCBhbmQga2lsbCBpdCAqLwotCXNjc2lfcmVsZWFzZV9idWZm ZXJzKGNtZCk7Ci0Jc2NzaV9wdXRfY29tbWFuZChjbWQpOwogCXJldHVybiBCTEtQUkVQX0tJ TEw7CiB9CiAKKy8qCisgKiBGdW5jdGlvbjogICAgc2NzaV9pbml0X2lvKCkKKyAqCisgKiBQ dXJwb3NlOiAgICAgU0NTSSBJL08gaW5pdGlhbGl6ZSBmdW5jdGlvbi4gZm9yIGJvdGggbWFp biBhbmQgb3B0aW9uYWwgYmlkaSBidWZmZXIKKyAqCisgKiBBcmd1bWVudHM6ICAgY21kICAg LSBDb21tYW5kIGRlc2NyaXB0b3Igd2Ugd2lzaCB0byBpbml0aWFsaXplCisgKgorICogUmV0 dXJuczogICAgIDAgb24gc3VjY2VzcworICoJCUJMS1BSRVBfREVGRVIgaWYgdGhlIGZhaWx1 cmUgaXMgcmV0cnlhYmxlCisgKgkJQkxLUFJFUF9LSUxMIGlmIHRoZSBmYWlsdXJlIGlzIGZh dGFsCisgKi8KK3N0YXRpYyBpbnQgc2NzaV9pbml0X2lvKHN0cnVjdCBzY3NpX2NtbmQgKmNt ZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kX3NnbCBtYWluX3NnbDsKKwlzdHJ1Y3QgcmVxdWVz dCAqcmVxID0gY21kLT5yZXF1ZXN0OworCXN0cnVjdCBzY3NpX2lvX2NvbnRleHQqIHNpb2Mg PSByZXEtPmVuZF9pb19kYXRhOworCWludCBlcnJvcjsKKworCS8qCisJICogaWYgdGhpcyBp cyBhIHJxLT5kYXRhIGJhc2VkIFJFUV9CTE9DS19QQywgc2V0dXAgZm9yIGEgbm9uLXNnIHhm ZXIKKwkgKi8KKwlpZiAoKHJlcS0+ZmxhZ3MgJiBSRVFfQkxPQ0tfUEMpICYmICFyZXEtPmJp bykgeworCQljbWQtPnJlcXVlc3RfYnVmZmxlbiA9IHJlcS0+ZGF0YV9sZW47CisJCWNtZC0+ cmVxdWVzdF9idWZmZXIgPSByZXEtPmRhdGE7CisJCXJlcS0+YnVmZmVyID0gcmVxLT5kYXRh OworCQljbWQtPnVzZV9zZyA9IDA7CisJCXJldHVybiAwOworCX0KKworCW1haW5fc2dsLnJl cXVlc3QgPSBjbWQtPnJlcXVlc3Q7CisKKwllcnJvciA9IHNjc2lfaW5pdF9zZ2woJm1haW5f c2dsKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2V4aXQ7CisKKwljbWQtPnJlcXVlc3Rf YnVmZmxlbiA9IG1haW5fc2dsLnJlcXVlc3RfYnVmZmxlbjsKKwljbWQtPnJlcXVlc3RfYnVm ZmVyID0gbWFpbl9zZ2wucmVxdWVzdF9idWZmZXI7CisJY21kLT51c2Vfc2cgPSBtYWluX3Nn bC51c2Vfc2c7CisJY21kLT5zZ2xpc3RfbGVuID0gbWFpbl9zZ2wuc2dsaXN0X2xlbjsKKwor CWlmIChzaW9jKSB7CisJCWlmIChzaW9jLT5iaWRpX3JlYWRfcmVxKSB7CisJCQljbWQtPmJp ZGlfcmVhZF9zZ2wucmVxdWVzdCA9IHNpb2MtPmJpZGlfcmVhZF9yZXE7CisJCQllcnJvciA9 IHNjc2lfaW5pdF9zZ2woJmNtZC0+YmlkaV9yZWFkX3NnbCk7CisJCQlpZiAoZXJyb3IpIHsK KwkJCQlzY3NpX3JlbGVhc2VfYnVmZmVycyhjbWQpOworCQkJCWdvdG8gZXJyX2V4aXQ7CisJ CQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMCA7CisKK2Vycl9leGl0OgorCWlmIChlcnJvciA9 PSBCTEtQUkVQX0tJTEwpIHsKKwkJLyogcmVsZWFzZSB0aGUgY29tbWFuZCBhbmQga2lsbCBp dCAqLworCQlzY3NpX3JlbGVhc2VfYnVmZmVycyhjbWQpOworCQlzY3NpX3B1dF9jb21tYW5k KGNtZCk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIGludCBzY3NpX2lzc3Vl X2ZsdXNoX2ZuKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJ CQkgICAgICAgc2VjdG9yX3QgKmVycm9yX3NlY3RvcikKIHsKQEAgLTEwNzMsNiArMTI3Niw3 IEBAIHN0YXRpYyB2b2lkIHNjc2lfYmxrX3BjX2RvbmUoc3RydWN0IHNjc2kKIHN0YXRpYyB2 b2lkIHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewog CXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBjbWQtPnJlcXVlc3Q7CisJc3RydWN0IHNjc2lfaW9f Y29udGV4dCogc2lvYyA9IHJlcS0+ZW5kX2lvX2RhdGE7CiAKIAlCVUdfT04oc2l6ZW9mKHJl cS0+Y21kKSA+IHNpemVvZihjbWQtPmNtbmQpKTsKIAltZW1jcHkoY21kLT5jbW5kLCByZXEt PmNtZCwgc2l6ZW9mKGNtZC0+Y21uZCkpOwpAQCAtMTA4OCw2ICsxMjkyLDE5IEBAIHN0YXRp YyB2b2lkIHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc3RydWMKIAljbWQtPmFsbG93ZWQgPSBy ZXEtPnJldHJpZXM7CiAJY21kLT50aW1lb3V0X3Blcl9jb21tYW5kID0gcmVxLT50aW1lb3V0 OwogCWNtZC0+ZG9uZSA9IHNjc2lfYmxrX3BjX2RvbmU7CisKKwlpZiAoc2lvYykgeworCQkv KiBzZXR1cCB2YXJpYWJsZSBsZW5ndGggY2RiIHBvaW50ZXIgKi8KKwkJaWYgKHNpb2MtPnZh cmxlbl9jZGJbMF0gPT0gVkFSTEVOX0NEQikgeworCQkJY21kLT52YXJsZW5fY2RiX2xlbiA9 IHNpb2MtPnZhcmxlbl9jZGJfbGVuOworCQkJY21kLT52YXJsZW5fY2RiID0gIHNpb2MtPnZh cmxlbl9jZGI7CisJCX0KKworCQkvKiBmaXggZm9yIGJpLWRpcmVjdGlvbmFsIERNQSBmbGFn ICovCisJCWlmIChzaW9jLT5iaWRpX3JlYWRfcmVxKSB7CisJCQljbWQtPnNjX2RhdGFfZGly ZWN0aW9uID0gRE1BX0JJRElSRUNUSU9OQUw7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQg c2NzaV9wcmVwX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAq cmVxKQo9PT09IC8vZGVwb3QvcHViL2xpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyMy IC0gL2hvbWUvYmhhcnJvc2gvcDQubG9jYWwvcHViL2xpbnV4L2RyaXZlcnMvc2NzaS9zY3Np X3NjYW4uYyA9PT09CmRpZmYgLU51cCAvdG1wL3RtcC4xMjE3MS40IC9ob21lL2JoYXJyb3No L3A0LmxvY2FsL3B1Yi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgLUwgYS9kcml2 ZXJzL3Njc2kvc2NzaV9zY2FuLmMgLUwgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKLS0t IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nj YW4uYwpAQCAtNjc0LDYgKzY3NCw3IEBAIHN0YXRpYyBpbnQgc2NzaV9hZGRfbHVuKHN0cnVj dCBzY3NpX2RldmkKIAljYXNlIFRZUEVfQ09NTToKIAljYXNlIFRZUEVfUkFJRDoKIAljYXNl IFRZUEVfUkJDOgorCWNhc2UgVFlQRV9PU0Q6CiAJCXNkZXYtPndyaXRlYWJsZSA9IDE7CiAJ CWJyZWFrOwogCWNhc2UgVFlQRV9XT1JNOgo9PT09IC8vZGVwb3QvcHViL2xpbnV4L2luY2x1 ZGUvc2NzaS9zY3NpLmgjMSAtIC9ob21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1Yi9saW51eC9p bmNsdWRlL3Njc2kvc2NzaS5oID09PT0KZGlmZiAtTnVwIC90bXAvdG1wLjEyMTcxLjUgL2hv bWUvYmhhcnJvc2gvcDQubG9jYWwvcHViL2xpbnV4L2luY2x1ZGUvc2NzaS9zY3NpLmggLUwg YS9pbmNsdWRlL3Njc2kvc2NzaS5oIC1MIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAotLS0gYS9p bmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTI4LDcg KzI4LDcgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2NzaV9jb21tYW5kXwogICoJ U0NTSSBkZXZpY2UgdHlwZXMKICAqLwogCi0jZGVmaW5lIE1BWF9TQ1NJX0RFVklDRV9DT0RF IDE1CisjZGVmaW5lIE1BWF9TQ1NJX0RFVklDRV9DT0RFIDE4CiBleHRlcm4gY29uc3QgY2hh ciAqY29uc3Qgc2NzaV9kZXZpY2VfdHlwZXNbTUFYX1NDU0lfREVWSUNFX0NPREVdOwogCiAv KgpAQCAtMTAzLDYgKzEwMyw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpjb25zdCBzY3NpX2Rl dmljZV90eXAKICNkZWZpbmUgTU9ERV9TRU5TRV8xMCAgICAgICAgIDB4NWEKICNkZWZpbmUg UEVSU0lTVEVOVF9SRVNFUlZFX0lOIDB4NWUKICNkZWZpbmUgUEVSU0lTVEVOVF9SRVNFUlZF X09VVCAweDVmCisjZGVmaW5lIFZBUkxFTl9DREIgICAgICAgICAgICAweDdmCiAjZGVmaW5l IFJFUE9SVF9MVU5TICAgICAgICAgICAweGEwCiAjZGVmaW5lIE1PVkVfTUVESVVNICAgICAg ICAgICAweGE1CiAjZGVmaW5lIEVYQ0hBTkdFX01FRElVTSAgICAgICAweGE2CkBAIC0yMjMs NiArMjI0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgc2NzaV9zdGF0dXNfaXNfZ29vZChpbgog I2RlZmluZSBUWVBFX1JBSUQgICAgICAgICAgIDB4MGMKICNkZWZpbmUgVFlQRV9FTkNMT1NV UkUgICAgICAweDBkICAgIC8qIEVuY2xvc3VyZSBTZXJ2aWNlcyBEZXZpY2UgKi8KICNkZWZp bmUgVFlQRV9SQkMJICAgIDB4MGUKKyNkZWZpbmUgVFlQRV9PU0QgICAgICAgICAgICAweDEx CiAjZGVmaW5lIFRZUEVfTk9fTFVOICAgICAgICAgMHg3ZgogCiAvKgo9PT09IC8vZGVwb3Qv cHViL2xpbnV4L2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaCMyIC0gL2hvbWUvYmhhcnJvc2gv cDQubG9jYWwvcHViL2xpbnV4L2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaCA9PT09CmRpZmYg LU51cCAvdG1wL3RtcC4xMjE3MS42IC9ob21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1Yi9saW51 eC9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggLUwgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5k LmggLUwgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKLS0tIGEvaW5jbHVkZS9zY3NpL3Nj c2lfY21uZC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtNSwxMSArNSw1 MiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5o PgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2Rldmlj ZS5oPgogCiBzdHJ1Y3QgcmVxdWVzdDsKIHN0cnVjdCBzY2F0dGVybGlzdDsKIHN0cnVjdCBz Y3NpX2RldmljZTsKIAorI2RlZmluZSBTQ1NJX01BWF9WQVJMRU5fQ0RCX0xFTiAyNjAKKwor LyogZGVmaW5lZCBpbiBUMTAgU0NTSSBQcmltYXJ5IENvbW1hbmRzLTMgKi8KK3N0cnVjdCBz Y3NpX3Zhcmxlbl9jZGJfaGRyIHsKKwl1bnNpZ25lZCBjaGFyIG9wY29kZTsgICAgICAgICAg ICAgICAgIC8qIG9wY29kZSBhbHdheXMgPT0gVkFSTEVOX0NEQiAqLworCXVuc2lnbmVkIGNo YXIgY29udHJvbDsKKwl1bnNpZ25lZCBjaGFyIG1pc2NbNV07CisJdW5zaWduZWQgY2hhciBh ZGRpdGlvbmFsX2NkYl9sZW5ndGg7ICAvKiB0b3RhbCBjZGIgbGVuZ3RoIC0gOCAqLworCXVu c2lnbmVkIGNoYXIgc2VydmljZV9hY3Rpb25bMl07CisJLyogc2VydmljZSBzcGVjaWZpYyBE YXRhIGZvbGxvd3MgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50CitzY3NpX3Zhcmxlbl9j ZGJfbGVuZ3RoKHZvaWQgKmhkcikKK3sKKwlyZXR1cm4gKChzdHJ1Y3Qgc2NzaV92YXJsZW5f Y2RiX2hkciopaGRyKS0+YWRkaXRpb25hbF9jZGJfbGVuZ3RoICsgODsKK30KKworLyoKKyAq IFRoaXMgc3RydWN0dXJlIG1hcHMgZGF0YSBidWZmZXJzIGludG8gYSBzY2F0dGVyLWdhdGhl ciBsaXN0IGZvciBETUEgcHVycG9zZXMuCisgKiBFbWJlZGRlZCBpbiBzdHJ1Y3Qgc2NzaV9j bW5kLgorICoKKyAqIEZJWE1FOiBXZSBjdXJyZW50bHkgZW1iZWQgdGhpcyBzdHJ1Y3R1cmUg aW4gc2NzaV9jbW5kIG9ubHkgZm9yCisgKiBiaWRpIHJlYWQgYnVmZmVycy4gIEJ1ZmZlcnMg Zm9yIHVuaS1kaXJlY3Rpb25hbCBjb21tYW5kcyBhbmQgd3JpdGUKKyAqIGJ1ZmZlcnMgb2Yg YmlkaSBjb21tYW5kcyBhcmUgbWFwcGVkIGluIGEgYmFja3dhcmQgY29tcGF0aWJsZSB3YXkg YnkgYW4KKyAqIGVxdWl2YWxlbnQgc2V0IG9mIGZpZWxkcywgc2NhdHRlcmVkIGluIHRoZSBz Y3NpX2NtbmQuCisgKiBUaGVzZSBzaG91bGQgYmUgaW5jb3Jwb3JhdGVkIGludG8gYW4gaW5z dGFuY2Ugb2Ygc2NzaV9jbW5fc2dsLgorICogVGhpcyB3aWxsIHJlcXVpcmUgYSBtYWpvciBy ZXdvcmsgb2YgbW9zdCBzY3NpIExMRERzLgorICoKKyAqIFdlIG5lZWQgYSBwb2ludGVyIHRv IHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBmb3IgdGhlIHJlcS0+YmlvIG1hcHBpbmcuCisgKiB3 aGVuIHN0cnVjdCByZXF1ZXN0IHN1cHBvcnRzIGJpZGkgdHJhbnNmZXJzIHRoaXMgcG9pbnRl ciBzaG91bGQgZ28gYXdheS4KKyAqLworc3RydWN0IHNjc2lfY21uZF9zZ2wgeworCXVuc2ln bmVkIHNob3J0IHVzZV9zZzsgICAgICAgLyogTnVtYmVyIG9mIHBpZWNlcyBvZiBzY2F0dGVy LWdhdGhlciAqLworCXVuc2lnbmVkIHNob3J0IHNnbGlzdF9sZW47ICAgLyogc2l6ZSBvZiBt YWxsb2MnZCBzY2F0dGVyLWdhdGhlciBsaXN0ICovCisJdm9pZCAqcmVxdWVzdF9idWZmZXI7 ICAgICAgICAvKiBBY3R1YWwgcmVxdWVzdGVkIGJ1ZmZlciAqLworCXVuc2lnbmVkIHJlcXVl c3RfYnVmZmxlbjsgICAgLyogQWN0dWFsIHJlcXVlc3Qgc2l6ZSAqLworCisJc3RydWN0IHJl cXVlc3QgKnJlcXVlc3Q7ICAgICAvKiBUaGUgcmVxdWVzdCB3ZSBhcmUgd29ya2luZyBvbiBm cm9tIGJsb2NrIGxheWVyKi8KK307CiAKIC8qIGVtYmVkZGVkIGluIHNjc2lfY21uZCAqLwog c3RydWN0IHNjc2lfcG9pbnRlciB7CkBAIC01NywxMiArOTgsMTUgQEAgc3RydWN0IHNjc2lf Y21uZCB7CiAJaW50IGFsbG93ZWQ7CiAJaW50IHRpbWVvdXRfcGVyX2NvbW1hbmQ7CiAKLQl1 bnNpZ25lZCBjaGFyIGNtZF9sZW47CisJdW5zaWduZWQgY2hhciBjbWRfbGVuOyAgICAgICAg IC8qIGZpeGVkIGNkYiBjb21tYW5kIGxlbmd0aCAoPD0gMTYpICovCisJdW5zaWduZWQgc2hv cnQgdmFybGVuX2NkYl9sZW47IC8qIGxlbmd0aCBvZiB2YXJsZW5fY2RiIGJ1ZmZlciAqLwog CWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIHNjX2RhdGFfZGlyZWN0aW9uOwogCiAJLyogVGhl c2UgZWxlbWVudHMgZGVmaW5lIHRoZSBvcGVyYXRpb24gd2UgYXJlIGFib3V0IHRvIHBlcmZv cm0gKi8KICNkZWZpbmUgTUFYX0NPTU1BTkRfU0laRQkxNgogCXVuc2lnbmVkIGNoYXIgY21u ZFtNQVhfQ09NTUFORF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyICp2YXJsZW5fY2RiOwkvKiBh biBvcHRpb25hbCB2YXJpYWJsZS1sZW5ndGggY2RiLgorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmaXJzdCAxNiBieXRlcyBhcmUgY29waWVkIGFsc28gaW50byBjbW5kW10g Ki8KIAl1bnNpZ25lZCByZXF1ZXN0X2J1ZmZsZW47CS8qIEFjdHVhbCByZXF1ZXN0IHNpemUg Ki8KIAogCXN0cnVjdCB0aW1lcl9saXN0IGVoX3RpbWVvdXQ7CS8qIFVzZWQgdG8gdGltZSBv dXQgdGhlIGNvbW1hbmQuICovCkBAIC0xMTYsOCArMTYwLDE2IEBAIHN0cnVjdCBzY3NpX2Nt bmQgewogCiAJdW5zaWduZWQgY2hhciB0YWc7CS8qIFNDU0ktSUkgcXVldWVkIGNvbW1hbmQg dGFnICovCiAJdW5zaWduZWQgbG9uZyBwaWQ7CS8qIFByb2Nlc3MgSUQsIHN0YXJ0cyBhdCAw LiBVbmlxdWUgcGVyIGhvc3QuICovCisKKwkvKgorCSAqIG1hcCByZWFkIGJ1ZmZlcnMgb2Yg YmktZGlyZWN0aW9uYWwgY29tbWFuZHMKKwkgKiBiaWRpX3JlYWRfc2dsLnJlcXVlc3QgIT0g TlVMTCBpZmYgc2NfZGF0YV9kaXJlY3Rpb249PURNQV9CSURJUkVDVElPTkFMCisJICovCisJ c3RydWN0IHNjc2lfY21uZF9zZ2wgYmlkaV9yZWFkX3NnbDsKIH07CiAKKyNkZWZpbmUgaXNf YmlkaV9jbW5kKGNtZCkgKGNtZC0+YmlkaV9yZWFkX3NnbC5yZXF1ZXN0ICE9IE5VTEwpCisK IC8qCiAgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHNjc2lfY21kLT5zdGF0ZSBjYW4g dGFrZS4KICAqLwpAQCAtMTMxLDYgKzE4MywzMCBAQCBzdHJ1Y3Qgc2NzaV9jbW5kIHsKICNk ZWZpbmUgU0NTSV9TVEFURV9CSFFVRVVFICAgICAgICAgMHgxMDBhCiAjZGVmaW5lIFNDU0lf U1RBVEVfTUxRVUVVRSAgICAgICAgIDB4MTAwYgogCisvKgorICogdGhlc2UgaW5saW5lIGhl bHBlcnMgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjc2kgY21uZCdzIGRhdGEgZGlyZWN0aW9u CisgKiB0byBjb3JyZWN0bHkgZmluZCBzZyBtYXBzIGZvciB1bmktZGlyZWN0aW9uYWwgYW5k IGJpLWRpcmVjdGlvbmFsIGNvbW1hbmRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2Nz aV9nZXRfb3V0X2J1ZmYoc3RydWN0IHNjc2lfY21uZCAqc2MsIHN0cnVjdCBzY3NpX2NtbmRf YnVmZiAqc2NiKQoreworCXNjYi0+dXNlX3NnID0gc2MtPnVzZV9zZzsKKwlzY2ItPnJlcXVl c3RfYnVmZmVyID0gc2MtPnJlcXVlc3RfYnVmZmVyOworCXNjYi0+cmVxdWVzdF9idWZmbGVu ID0gc2MtPnJlcXVlc3RfYnVmZmxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzY3Np X2dldF9pbl9idWZmKHN0cnVjdCBzY3NpX2NtbmQgKnNjLCBzdHJ1Y3Qgc2NzaV9jbW5kX2J1 ZmYgKnNjYikKK3sKKwlpZiAoIWlzX2JpZGlfY21uZChzYykpIHsKKwkJc2NzaV9nZXRfb3V0 X2J1ZmYoc2MsIHNjYik7CisJCXJldHVybjsKKwl9CisKKwlzY2ItPnVzZV9zZyA9IHNjLT5i aWRpX3JlYWRfc2dsLnVzZV9zZzsKKwlzY2ItPnJlcXVlc3RfYnVmZmVyID0gc2MtPmJpZGlf cmVhZF9zZ2wucmVxdWVzdF9idWZmZXI7CisJc2NiLT5yZXF1ZXN0X2J1ZmZsZW4gPSBzYy0+ YmlkaV9yZWFkX3NnbC5yZXF1ZXN0X2J1ZmZsZW47Cit9CiAKIGV4dGVybiBzdHJ1Y3Qgc2Nz aV9jbW5kICpzY3NpX2dldF9jb21tYW5kKHN0cnVjdCBzY3NpX2RldmljZSAqLCBnZnBfdCk7 CiBleHRlcm4gdm9pZCBzY3NpX3B1dF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKik7Cj09 PT0gLy9kZXBvdC9wdWIvbGludXgvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgjMSAtIC9o b21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1Yi9saW51eC9pbmNsdWRlL3Njc2kvc2NzaV9kZXZp Y2UuaCA9PT09CmRpZmYgLU51cCAvdG1wL3RtcC4xMjE3MS43IC9ob21lL2JoYXJyb3NoL3A0 LmxvY2FsL3B1Yi9saW51eC9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCAtTCBhL2luY2x1 ZGUvc2NzaS9zY3NpX2RldmljZS5oIC1MIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgK LS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Nj c2lfZGV2aWNlLmgKQEAgLTE5OCw2ICsxOTgsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qg c2NzaV90YXJnZXQgKnNjc2lfdAogI2RlZmluZSBzdGFyZ2V0X3ByaW50ayhwcmVmaXgsIHN0 YXJnZXQsIGZtdCwgYS4uLikJXAogCWRldl9wcmludGsocHJlZml4LCAmKHN0YXJnZXQpLT5k ZXYsIGZtdCwgIyNhKQogCisvKiB1c2VkIGJ5IEFQSXMgYXMgYSBzaG9ydGhhbmQgZm9yIDx1 c2Vfc2csIGJ1ZmZlciwgYnVmZmxlbj4gKi8KK3N0cnVjdCBzY3NpX2NtbmRfYnVmZiB7CisJ dW5zaWduZWQgc2hvcnQgdXNlX3NnOyAgICAgIC8qIE51bWJlciBvZiBwaWVjZXMgb2Ygc2Nh dHRlci1nYXRoZXIgKi8KKwl2b2lkICpyZXF1ZXN0X2J1ZmZlcjsgICAgICAgLyogaWYgdXNl X3NnPT0wIHJlcXVlc3RlZCBidWZmZXIgZWxzZSBhbiBzZyBsaXN0ICovCisJdW5zaWduZWQg cmVxdWVzdF9idWZmbGVuOyAgIC8qIEFjdHVhbCByZXF1ZXN0IHNpemUgKi8KK307CisKIGV4 dGVybiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKl9fc2NzaV9hZGRfZGV2aWNlKHN0cnVjdCBTY3Np X0hvc3QgKiwKIAkJdWludCwgdWludCwgdWludCwgdm9pZCAqaG9zdGRhdGEpOwogZXh0ZXJu IGludCBzY3NpX2FkZF9kZXZpY2Uoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgdWludCBjaGFu bmVsLApAQCAtMjk3LDYgKzMwNCwxOCBAQCBleHRlcm4gaW50IHNjc2lfZXhlY3V0ZV9hc3lu YyhzdHJ1Y3Qgc2NzCiAJCQkgICAgICBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIHZvaWQg KnByaXZkYXRhLAogCQkJICAgICAgdm9pZCAoKmRvbmUpKHZvaWQgKiwgY2hhciAqLCBpbnQs IGludCksCiAJCQkgICAgICBnZnBfdCBnZnApOworZXh0ZXJuIGludCBzY3NpX2V4ZWN1dGVf YmlkaV9hc3luYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwgaW50IGNtZF9s ZW4sIGludCBkYXRhX2RpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNjc2lfY21uZF9idWZmICpidWZmLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kX2J1ZmYgKmJpZGlfcmVhZF9idWZm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCwgaW50 IHJldHJpZXMsIHZvaWQgKnByaXZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICgqZG9uZSkodm9pZCAqLCBjaGFyICosIGludCwgaW50KSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZwX3QgZ2ZwKTsKK2V4dGVybiBpbnQg c2NzaV9leGVjdXRlX2JpZGkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbWQsIGludCBjbWRf bGVuLCBpbnQgZGF0YV9kaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzY3NpX2NtbmRfYnVmZiAqYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNjc2lfY21uZF9idWZmICpiaWRpX3JlYWRfYnVmZiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciogc2Vuc2UsIGludCB0aW1lb3V0LCBpbnQgcmV0 cmllcyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2RldmljZV9yZXByb2JlKHN0cnVj dCBzY3NpX2RldmljZSAqc2RldikKIHsKPT09PSAvL2RlcG90L3B1Yi9saW51eC9pbmNsdWRl L3Njc2kvc2NzaV9ob3N0LmgjMiAtIC9ob21lL2JoYXJyb3NoL3A0LmxvY2FsL3B1Yi9saW51 eC9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggPT09PQpkaWZmIC1OdXAgL3RtcC90bXAuMTIx NzEuOCAvaG9tZS9iaGFycm9zaC9wNC5sb2NhbC9wdWIvbGludXgvaW5jbHVkZS9zY3NpL3Nj c2lfaG9zdC5oIC1MIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIC1MIGIvaW5jbHVkZS9z Y3NpL3Njc2lfaG9zdC5oCi0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9p bmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTUwMCwxMyArNTAwLDExIEBAIHN0cnVjdCBT Y3NpX0hvc3QgewogCS8qCiAJICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIFNDU0kgY29tbWFu ZHMgdGhhdCB0aGlzIGhvc3QgY2FuIGFjY2VwdC4KIAkgKiBQcm9iYWJseSAxMiBmb3IgbW9z dCBob3N0IGFkYXB0ZXJzLCBidXQgY291bGQgYmUgMTYgZm9yIG90aGVycy4KKwkgKiBvciAy NjAgaWYgdGhlIGRyaXZlciBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGggY2Ricy4KIAkgKiBG b3IgZHJpdmVycyB0aGF0IGRvbid0IHNldCB0aGlzIGZpZWxkLCBhIHZhbHVlIG9mIDEyIGlz Ci0JICogYXNzdW1lZC4gIEkgYW0gbGVhdmluZyB0aGlzIGFzIGEgbnVtYmVyIHJhdGhlciB0 aGFuIGEgYml0Ci0JICogYmVjYXVzZSB5b3UgbmV2ZXIga25vdyB3aGF0IHN1YnNlcXVlbnQg U0NTSSBzdGFuZGFyZHMgbWlnaHQgZG8KLQkgKiAoaS5lLiBjb3VsZCB0aGVyZSBiZSBhIDIw IGJ5dGUgb3IgYSAyNC1ieXRlIGNvbW1hbmQgYSBmZXcgeWVhcnMKLQkgKiBkb3duIHRoZSBy b2FkPykuICAKKwkgKiBhc3N1bWVkLgogCSAqLwotCXVuc2lnbmVkIGNoYXIgbWF4X2NtZF9s ZW47CisJdW5zaWduZWQgc2hvcnQgbWF4X2NtZF9sZW47CiAKIAlpbnQgdGhpc19pZDsKIAlp bnQgY2FuX3F1ZXVlOwo= --------------030505060007030200010300--