From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Christie Subject: Re: [PATCH 12/15] scsi: initial blk-mq support Date: Fri, 07 Feb 2014 02:45:18 -0600 Message-ID: <52F49D1E.2000007@cs.wisc.edu> References: <20140205124118.332902571@bombadil.infradead.org> <20140205124154.337539740@bombadil.infradead.org> <1391724663.14985.11.camel@haakon3.risingtidesystems.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010502070507010705080608" Return-path: Received: from sabe.cs.wisc.edu ([128.105.6.20]:40427 "EHLO sabe.cs.wisc.edu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751077AbaBGI7P (ORCPT ); Fri, 7 Feb 2014 03:59:15 -0500 In-Reply-To: <1391724663.14985.11.camel@haakon3.risingtidesystems.com> Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: "Nicholas A. Bellinger" Cc: Christoph Hellwig , Jens Axboe , James Bottomley , linux-scsi@vger.kernel.org This is a multi-part message in MIME format. --------------010502070507010705080608 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 02/06/2014 04:11 PM, Nicholas A. Bellinger wrote: >> +struct request_queue *scsi_mq_alloc_queue(struct scsi_device *sdev) >> > +{ >> > + struct Scsi_Host *shost = sdev->host; >> > + struct blk_mq_hw_ctx *hctx; >> > + struct request_queue *q; >> > + struct request *rq; >> > + struct scsi_cmnd *cmd; >> > + struct blk_mq_reg reg; >> > + int i, j, sgl_size; >> > + >> > + memset(®, 0, sizeof(reg)); >> > + reg.ops = &scsi_mq_ops; >> > + reg.queue_depth = shost->cmd_per_lun; >> > + if (!reg.queue_depth) >> > + reg.queue_depth = 1; >> > + >> > + /* XXX: what to do about chained S/G lists? */ >> > + if (shost->hostt->sg_tablesize > SCSI_MAX_SG_SEGMENTS) >> > + shost->sg_tablesize = SCSI_MAX_SG_SEGMENTS; >> > + sgl_size = shost->sg_tablesize * sizeof(struct scatterlist); >> > + >> > + reg.cmd_size = sizeof(struct scsi_cmnd) + >> > + sgl_size + >> > + shost->hostt->cmd_size; >> > + if (scsi_host_get_prot(shost)) >> > + reg.cmd_size += sizeof(struct scsi_data_buffer) + sgl_size; > OK, so your in-lining the allocation of data + protection SGLs from > blk-mq.. > > The original prototype code was doing these allocations separately below > for each pre-allocated cmd, and offering LLD's to optionally > pre-allocate their own descripts using sh->hostt->cmd_size if > necessary.. > > This was necessary to eliminate all fast-path allocations for > virtio-scsi, and I'd like to see something similar here as an optional > feature as well. Yeah, it would be nice if like in Nick's patches, the driver could just set the scsi_host_template->cmd_size then when the scsi_cmnd got to the driver's queuecommand, the driver could just get its internal cmd struct from the scsi_cmnd struct (for example in Nick's patch it was off the SCp.ptr). I started converting my iscsi mq patch from Nick's code to Christoph's and am currently trying to figure out how to setup the scsi_host_template->cmd_pool. Current iscsi patch is attached if anyone cares. However, one question I had with both approaches is how to deal with per cmd pci/dma memory and preallocations. --------------010502070507010705080608 Content-Type: text/plain; charset=UTF-8; name="iscsi-mq-cmd-size.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="iscsi-mq-cmd-size.patch" ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJz L3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCmluZGV4IGJjNzdhNmYuLjFkMDg1N2MgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9z Y3NpL2JlMmlzY3NpL2JlX21haW4uYwpAQCAtMzIwLDEwICszMjAsMTAgQEAgc3RhdGljIGlu dCBiZWlzY3NpX2VoX2RldmljZV9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYykKIAltZW1z ZXQoaW52X3RibCwgMHgwLCBzaXplb2YoKmludl90YmwpICogQkUyX0NNRFNfUEVSX0NYTik7 CiAJbnVtX2ludmFsaWRhdGUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjb25uLT5zZXNzaW9u LT5jbWRzX21heDsgaSsrKSB7Ci0JCWFicnRfdGFzayA9IGNvbm4tPnNlc3Npb24tPmNtZHNb aV07Ci0JCWFicnRfaW9fdGFzayA9IGFicnRfdGFzay0+ZGRfZGF0YTsKLQkJaWYgKCFhYnJ0 X3Rhc2stPnNjIHx8IGFicnRfdGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19GUkVFKQorCQlh YnJ0X3Rhc2sgPSBjb25uLT5zZXNzaW9uLT50YXNrX21hcFtpXTsKKwkJaWYgKCFhYnJ0X3Rh c2sgfHwgYWJydF90YXNrLT5zdGF0ZSAhPSBJU0NTSV9UQVNLX1JVTk5JTkcpCiAJCQljb250 aW51ZTsKKwkJYWJydF9pb190YXNrID0gYWJydF90YXNrLT5kZF9kYXRhOwogCiAJCWlmIChz Yy0+ZGV2aWNlLT5sdW4gIT0gYWJydF90YXNrLT5zYy0+ZGV2aWNlLT5sdW4pCiAJCQljb250 aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIv ZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggYzAwNjQyZi4uMzQyODli NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIv ZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBz dGF0aWMgaW50IGJueDJpX2FsbG9jX2JkdChzdHJ1Y3QgYm54MmlfaGJhICpoYmEsIHN0cnVj dCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uLAogCiAJaW8tPmJkX3RibCA9IGRtYV9hbGxvY19j b2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwKIAkJCQkJSVNDU0lfTUFYX0JEU19QRVJfQ01E ICogc2l6ZW9mKCpiZCksCi0JCQkJCSZpby0+YmRfdGJsX2RtYSwgR0ZQX0tFUk5FTCk7CisJ CQkJCSZpby0+YmRfdGJsX2RtYSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFpby0+YmRfdGJsKSB7 CiAJCWlzY3NpX3Nlc3Npb25fcHJpbnRrKEtFUk5fRVJSLCBzZXNzaW9uLCAiQ291bGQgbm90 ICIKIAkJCQkgICAgICJhbGxvY2F0ZSBiZHQuXG4iKTsKQEAgLTQ1OCw2MSArNDU4LDYgQEAg c3RhdGljIGludCBibngyaV9hbGxvY19iZHQoc3RydWN0IGJueDJpX2hiYSAqaGJhLCBzdHJ1 Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwKIH0KIAogLyoqCi0gKiBibngyaV9kZXN0cm95 X2NtZF9wb29sIC0gZGVzdHJveXMgaXNjc2kgY29tbWFuZCBwb29sIGFuZCByZWxlYXNlIEJE IHRhYmxlCi0gKiBAaGJhOglhZGFwdGVyIGluc3RhbmNlIHBvaW50ZXIKLSAqIEBzZXNzaW9u Oglpc2NzaSBzZXNzaW9uIHBvaW50ZXIKLSAqIEBjbWQ6CWlzY3NpIGNvbW1hbmQgc3RydWN0 dXJlCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJpX2Rlc3Ryb3lfY21kX3Bvb2woc3RydWN0IGJu eDJpX2hiYSAqaGJhLAotCQkJCSAgIHN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uKQot ewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNlc3Npb24tPmNtZHNfbWF4OyBpKysp IHsKLQkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBzZXNzaW9uLT5jbWRzW2ldOwotCQlz dHJ1Y3QgYm54MmlfY21kICpjbWQgPSB0YXNrLT5kZF9kYXRhOwotCi0JCWlmIChjbWQtPmlv X3RibC5iZF90YmwpCi0JCQlkbWFfZnJlZV9jb2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwK LQkJCQkJICBJU0NTSV9NQVhfQkRTX1BFUl9DTUQgKgotCQkJCQkgIHNpemVvZihzdHJ1Y3Qg aXNjc2lfYmQpLAotCQkJCQkgIGNtZC0+aW9fdGJsLmJkX3RibCwKLQkJCQkJICBjbWQtPmlv X3RibC5iZF90YmxfZG1hKTsKLQl9Ci0KLX0KLQotCi0vKioKLSAqIGJueDJpX3NldHVwX2Nt ZF9wb29sIC0gc2V0cyB1cCBpc2NzaSBjb21tYW5kIHBvb2wgZm9yIHRoZSBzZXNzaW9uCi0g KiBAaGJhOglhZGFwdGVyIGluc3RhbmNlIHBvaW50ZXIKLSAqIEBzZXNzaW9uOglpc2NzaSBz ZXNzaW9uIHBvaW50ZXIKLSAqLwotc3RhdGljIGludCBibngyaV9zZXR1cF9jbWRfcG9vbChz dHJ1Y3QgYm54MmlfaGJhICpoYmEsCi0JCQkJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Np b24pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2Vzc2lvbi0+Y21kc19tYXg7 IGkrKykgewotCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07 Ci0JCXN0cnVjdCBibngyaV9jbWQgKmNtZCA9IHRhc2stPmRkX2RhdGE7Ci0KLQkJdGFzay0+ aGRyID0gJmNtZC0+aGRyOwotCQl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBpc2Nz aV9oZHIpOwotCi0JCWlmIChibngyaV9hbGxvY19iZHQoaGJhLCBzZXNzaW9uLCBjbWQpKQot CQkJZ290byBmcmVlX2JkdHM7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZyZWVfYmR0czoKLQli bngyaV9kZXN0cm95X2NtZF9wb29sKGhiYSwgc2Vzc2lvbik7Ci0JcmV0dXJuIC1FTk9NRU07 Ci19Ci0KLQotLyoqCiAgKiBibngyaV9zZXR1cF9tcF9iZHQgLSBhbGxvY2F0ZSBCRCB0YWJs ZSByZXNvdXJjZXMKICAqIEBoYmE6CXBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3R1cmUKICAq CkBAIC0xMTU3LDcgKzExMDIsMTQgQEAgc3RhdGljIHZvaWQgYm54MmlfY2xlYW51cF90YXNr KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0g dGFzay0+Y29ubjsKIAlzdHJ1Y3QgYm54MmlfY29ubiAqYm54MmlfY29ubiA9IGNvbm4tPmRk X2RhdGE7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhID0gYm54MmlfY29ubi0+aGJhOworCXN0 cnVjdCBibngyaV9jbWQgKmNtZCA9IHRhc2stPmRkX2RhdGE7CiAKKwlpZiAoY21kLT5pb190 YmwuYmRfdGJsKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwKKwkJ CQkgIElTQ1NJX01BWF9CRFNfUEVSX0NNRCAqCisJCQkJICBzaXplb2Yoc3RydWN0IGlzY3Np X2JkKSwKKwkJCQkgIGNtZC0+aW9fdGJsLmJkX3RibCwKKwkJCQkgIGNtZC0+aW9fdGJsLmJk X3RibF9kbWEpOwogCS8qCiAJICogbWdtdCB0YXNrIG9yIGNtZCB3YXMgbmV2ZXIgc2VudCB0 byB1cyB0byB0cmFuc21pdC4KIAkgKi8KQEAgLTExNzgsNiArMTEzMCwyOSBAQCBzdGF0aWMg dm9pZCBibngyaV9jbGVhbnVwX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCiB9CiAK IC8qKgorICogYm54MmlfYWxsb2NfcGR1IC0gc2V0dXAgdGFzay9wZHUgYW5kIGl0cyBiZHQK KyAqIEB0YXNrOgl0cmFuc3BvcnQgbGF5ZXIgY29tbWFuZCBzdHJ1Y3R1cmUgcG9pbnRlcgor ICogQG9wY29kZToJaXNjc2kgb3Bjb2RlIGZvciB0YXNrL3BkdSB0byBzZXR1cCBmb3IKKyAq CisgKiBUaGUgYmR0IHdpbGwgYmUgZnJlZWQgaW4gYm54MmlfY2xlYW51cF90YXNrLgorICov CitzdGF0aWMgaW50IGJueDJpX2FsbG9jX3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywg dWludDhfdCBvcGNvZGUpCit7CisJc3RydWN0IGJueDJpX2NtZCAqY21kID0gdGFzay0+ZGRf ZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0 IGJueDJpX2Nvbm4gKmJueDJpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBibngy aV9oYmEgKmhiYSA9IGJueDJpX2Nvbm4tPmhiYTsKKworCXRhc2stPmhkciA9ICZjbWQtPmhk cjsKKwl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpOworCisJaWYg KGJueDJpX2FsbG9jX2JkdChoYmEsIGNvbm4tPnNlc3Npb24sIGNtZCkpCisJCXJldHVybiAt RU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogYm54MmlfbXRhc2tfeG1pdCAt IHRyYW5zbWl0IG10YXNrIHRvIGNoaXAgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZwogICogQGNv bm46CXRyYW5zcG9ydCBsYXllciBjb25uIHN0cnVjdHVyZSBwb2ludGVyCiAgKiBAdGFzazoJ dHJhbnNwb3J0IGxheWVyIGNvbW1hbmQgc3RydWN0dXJlIHBvaW50ZXIKQEAgLTEyODQsNyAr MTI1OSw2IEBAIGJueDJpX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAq ZXAsCiAJCSAgICAgdWludDMyX3QgaW5pdGlhbF9jbWRzbikKIHsKIAlzdHJ1Y3QgU2NzaV9I b3N0ICpzaG9zdDsKLQlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwog CXN0cnVjdCBibngyaV9oYmEgKmhiYTsKIAlzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmJueDJp X2VwOwogCkBAIC0xMzA4LDQwICsxMjgyLDExIEBAIGJueDJpX3Nlc3Npb25fY3JlYXRlKHN0 cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCiAJZWxzZSBpZiAoY21kc19tYXggPCBCTlgySV9T UV9XUUVTX01JTikKIAkJY21kc19tYXggPSBCTlgySV9TUV9XUUVTX01JTjsKIAotCWNsc19z ZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYm54MmlfaXNjc2lfdHJhbnNwb3J0LCBz aG9zdCwKLQkJCQkJICBjbWRzX21heCwgMCwgc2l6ZW9mKHN0cnVjdCBibngyaV9jbWQpLAot CQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwotCWlmICghY2xzX3Nl c3Npb24pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGJueDJpX3NldHVwX2NtZF9wb29sKGhi YSwgY2xzX3Nlc3Npb24tPmRkX2RhdGEpKQotCQlnb3RvIHNlc3Npb25fdGVhcmRvd247Ci0J cmV0dXJuIGNsc19zZXNzaW9uOwotCi1zZXNzaW9uX3RlYXJkb3duOgotCWlzY3NpX3Nlc3Np b25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOwotCXJldHVybiBOVUxMOwotfQotCi0KLS8qKgot ICogYm54Mmlfc2Vzc2lvbl9kZXN0cm95IC0gZGVzdHJveXMgaXNjc2kgc2Vzc2lvbgotICog QGNsc19zZXNzaW9uOglwb2ludGVyIHRvIGlzY3NpIGNscyBzZXNzaW9uCi0gKgotICogRGVz dHJveXMgcHJldmlvdXNseSBjcmVhdGVkIGlTQ1NJIHNlc3Npb24gaW5zdGFuY2UgYW5kIHJl bGVhc2VzCi0gKglhbGwgcmVzb3VyY2VzIGhlbGQgYnkgaXQKLSAqLwotc3RhdGljIHZvaWQg Ym54Mmlfc2Vzc2lvbl9kZXN0cm95KHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nl c3Npb24pCi17Ci0Jc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjbHNfc2Vzc2lv bi0+ZGRfZGF0YTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25f dG9fc2hvc3QoY2xzX3Nlc3Npb24pOwotCXN0cnVjdCBibngyaV9oYmEgKmhiYSA9IGlzY3Np X2hvc3RfcHJpdihzaG9zdCk7Ci0KLQlibngyaV9kZXN0cm95X2NtZF9wb29sKGhiYSwgc2Vz c2lvbik7Ci0JaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CisJcmV0dXJu IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmJueDJpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCisJ CQkJICAgY21kc19tYXgsIDAsIHNpemVvZihzdHJ1Y3QgYm54MmlfY21kKSwKKwkJCQkgICBp bml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKIH0KIAotCiAvKioKICAqIGJueDJp X2Nvbm5fY3JlYXRlIC0gY3JlYXRlIGlzY3NpIGNvbm5lY3Rpb24gaW5zdGFuY2UKICAqIEBj bHNfc2Vzc2lvbjoJcG9pbnRlciB0byBpc2NzaSBjbHMgc2Vzc2lvbgpAQCAtMjI3Myw3ICsy MjE4LDcgQEAgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBibngyaV9pc2NzaV90cmFuc3BvcnQg PSB7CiAJCQkJICBDQVBfREFUQV9QQVRIX09GRkxPQUQgfAogCQkJCSAgQ0FQX1RFWFRfTkVH TywKIAkuY3JlYXRlX3Nlc3Npb24JCT0gYm54Mmlfc2Vzc2lvbl9jcmVhdGUsCi0JLmRlc3Ry b3lfc2Vzc2lvbgk9IGJueDJpX3Nlc3Npb25fZGVzdHJveSwKKwkuZGVzdHJveV9zZXNzaW9u CT0gaXNjc2lfc2Vzc2lvbl90ZWFyZG93biwKIAkuY3JlYXRlX2Nvbm4JCT0gYm54MmlfY29u bl9jcmVhdGUsCiAJLmJpbmRfY29ubgkJPSBibngyaV9jb25uX2JpbmQsCiAJLmRlc3Ryb3lf Y29ubgkJPSBibngyaV9jb25uX2Rlc3Ryb3ksCkBAIC0yMjg0LDYgKzIyMjksNyBAQCBzdHJ1 Y3QgaXNjc2lfdHJhbnNwb3J0IGJueDJpX2lzY3NpX3RyYW5zcG9ydCA9IHsKIAkuZ2V0X2hv c3RfcGFyYW0JCT0gYm54MmlfaG9zdF9nZXRfcGFyYW0sCiAJLnN0YXJ0X2Nvbm4JCT0gYm54 MmlfY29ubl9zdGFydCwKIAkuc3RvcF9jb25uCQk9IGlzY3NpX2Nvbm5fc3RvcCwKKwkuYWxs b2NfcGR1CQk9IGJueDJpX2FsbG9jX3BkdSwKIAkuc2VuZF9wZHUJCT0gaXNjc2lfY29ubl9z ZW5kX3BkdSwKIAkueG1pdF90YXNrCQk9IGJueDJpX3Rhc2tfeG1pdCwKIAkuZ2V0X3N0YXRz CQk9IGJueDJpX2Nvbm5fZ2V0X3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4 Z2JpL2xpYmN4Z2JpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwppbmRleCBi NDRjMWNmLi45YjY0ZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hn YmkuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwpAQCAtMjMwNiw3ICsy MzA2LDYgQEAgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjeGdiaV9jcmVhdGVfc2Vzc2lv bihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAogCXN0cnVjdCBjeGdiaV9oYmEgKmNoYmE7 CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9u ICpjbHNfc2Vzc2lvbjsKLQlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAogCWlm ICghZXApIHsKIAkJcHJfZXJyKCJtaXNzaW5nIGVuZHBvaW50LlxuIik7CkBAIC0yMzI3LDE3 ICsyMzI2LDkgQEAgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjeGdiaV9jcmVhdGVfc2Vz c2lvbihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAogCWlmICghY2xzX3Nlc3Npb24pCiAJ CXJldHVybiBOVUxMOwogCi0Jc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwotCWlm IChpc2NzaV90Y3BfcjJ0cG9vbF9hbGxvYyhzZXNzaW9uKSkKLQkJZ290byByZW1vdmVfc2Vz c2lvbjsKLQogCWxvZ19kZWJ1ZygxIDw8IENYR0JJX0RCR19JU0NTSSwKIAkJImVwIDB4JXAs IGNscyBzZXNzIDB4JXAuXG4iLCBlcCwgY2xzX3Nlc3Npb24pOwogCXJldHVybiBjbHNfc2Vz c2lvbjsKLQotcmVtb3ZlX3Nlc3Npb246Ci0JaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNf c2Vzc2lvbik7Ci0JcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjeGdiaV9j cmVhdGVfc2Vzc2lvbik7CiAKQEAgLTIzNDYsNyArMjMzNyw2IEBAIHZvaWQgY3hnYmlfZGVz dHJveV9zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pCiAJ bG9nX2RlYnVnKDEgPDwgQ1hHQklfREJHX0lTQ1NJLAogCQkiY2xzIHNlc3MgMHglcC5cbiIs IGNsc19zZXNzaW9uKTsKIAotCWlzY3NpX3RjcF9yMnRwb29sX2ZyZWUoY2xzX3Nlc3Npb24t PmRkX2RhdGEpOwogCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOwogfQog RVhQT1JUX1NZTUJPTF9HUEwoY3hnYmlfZGVzdHJveV9zZXNzaW9uKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpp bmRleCBhZDUyNDRkLi5lZmI4ZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lf dGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC04NTAsMTIgKzg1MCw4 IEBAIGlzY3NpX3N3X3RjcF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQg KmVwLCB1aW50MTZfdCBjbWRzX21heCwKIAl0Y3Bfc3dfaG9zdC0+c2Vzc2lvbiA9IHNlc3Np b247CiAKIAlzaG9zdC0+Y2FuX3F1ZXVlID0gc2Vzc2lvbi0+c2NzaV9jbWRzX21heDsKLQlp ZiAoaXNjc2lfdGNwX3IydHBvb2xfYWxsb2Moc2Vzc2lvbikpCi0JCWdvdG8gcmVtb3ZlX3Nl c3Npb247CiAJcmV0dXJuIGNsc19zZXNzaW9uOwogCi1yZW1vdmVfc2Vzc2lvbjoKLQlpc2Nz aV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKIHJlbW92ZV9ob3N0OgogCWlzY3Np X2hvc3RfcmVtb3ZlKHNob3N0KTsKIGZyZWVfaG9zdDoKQEAgLTg2Nyw3ICs4NjMsNiBAQCBz dGF0aWMgdm9pZCBpc2NzaV9zd190Y3Bfc2Vzc2lvbl9kZXN0cm95KHN0cnVjdCBpc2NzaV9j bHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Qg PSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKIAotCWlzY3NpX3RjcF9y MnRwb29sX2ZyZWUoY2xzX3Nlc3Npb24tPmRkX2RhdGEpOwogCWlzY3NpX3Nlc3Npb25fdGVh cmRvd24oY2xzX3Nlc3Npb24pOwogCiAJaXNjc2lfaG9zdF9yZW1vdmUoc2hvc3QpOwpAQCAt OTYxLDYgKzk1Niw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzY3Np X3N3X3RjcF9zaHQgPSB7CiAJLnByb2NfbmFtZQkJPSAiaXNjc2lfdGNwIiwKIAkudGhpc19p ZAkJPSAtMSwKIAkudXNlX2Jsa19tcQkJPSB0cnVlLAorCS5jbWRfc2l6ZQkJPSBzaXplb2Yo c3RydWN0IGlzY3NpX3Rhc2spICsKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rh c2spICsKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc3dfdGNwX2hkcmJ1ZiksCiB9Owog CiBzdGF0aWMgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBpc2NzaV9zd190Y3BfdHJhbnNwb3J0 ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Nj c2kvbGliaXNjc2kuYwppbmRleCA2MzAzMmQzLi4yNGIyYzNmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAt NDI2LDYgKzQyNiwxMiBAQCBzdGF0aWMgaW50IGlzY3NpX3ByZXBfc2NzaV9jbWRfcGR1KHN0 cnVjdCBpc2NzaV90YXNrICp0YXNrKQogCQkJcjJ0LT5kYXRhX29mZnNldCA9IHRhc2stPmlt bV9jb3VudDsKIAkJCXIydC0+dHR0ID0gY3B1X3RvX2JlMzIoSVNDU0lfUkVTRVJWRURfVEFH KTsKIAkJCXIydC0+ZXhwX3N0YXRzbiA9IGNwdV90b19iZTMyKGNvbm4tPmV4cF9zdGF0c24p OworCQkJLyoKKwkJCSAqIG1ha2Ugc3VyZSBpZiB4bWl0IHRocmVhZCBpcyBoYW5kbGluZyBt dWx0aXBsZSB0YXNrcworCQkJICogaXQgc2VlcyBhbGwgdGhlc2UgdXBkYXRlZAorCQkJICov CisJCQlzbXBfd21iKCk7CisJCQlyMnQtPnNlbnQgPSAwOwogCQl9CiAKIAkJaWYgKCF0YXNr LT51bnNvbF9yMnQuZGF0YV9sZW5ndGgpCkBAIC00OTYsOSArNTAyLDEyIEBAIHN0YXRpYyB2 b2lkIGlzY3NpX2ZyZWVfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIAlpZiAoY29u bi0+bG9naW5fdGFzayA9PSB0YXNrKQogCQlyZXR1cm47CiAKLQlrZmlmb19pbigmc2Vzc2lv bi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZ0YXNrLCBzaXplb2Yodm9pZCopKTsKKwlzZXNz aW9uLT50YXNrX21hcFt0YXNrLT5pdHRdID0gTlVMTDsKKwlwZXJjcHVfaWRhX2ZyZWUoJnNl c3Npb24tPml0dHMsIHRhc2stPml0dCk7CiAKLQlpZiAoc2MpIHsKKwlpZiAoIXNjKSB7CisJ CWtmaWZvX2luKCZzZXNzaW9uLT5tZ210X3Bvb2wucXVldWUsICh2b2lkKikmdGFzaywgc2l6 ZW9mKHZvaWQqKSk7CisJfSBlbHNlIHsKIAkJLyogU0NTSSBlaCByZXVzZXMgY29tbWFuZHMg dG8gdmVyaWZ5IHVzICovCiAJCXNjLT5TQ3AucHRyID0gTlVMTDsKIAkJLyoKQEAgLTU5NSw3 ICs2MDQsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2sp OwogCiAKIC8qCi0gKiBzZXNzaW9uIGJhY2tfbG9jayBtdXN0IGJlIGhlbGQgYW5kIGlmIG5v dCBjYWxsZWQgZm9yIGEgdGFzayB0aGF0IGlzCisgKiBzZXNzaW9uIGZyd2RfbG9jayBtdXN0 IGJlIGhlbGQgYW5kIGlmIG5vdCBjYWxsZWQgZm9yIGEgdGFzayB0aGF0IGlzCiAgKiBzdGls bCBwZW5kaW5nIG9yIGZyb20gdGhlIHhtaXQgdGhyZWFkLCB0aGVuIHhtaXQgdGhyZWFkIG11 c3QKICAqIGJlIHN1c3BlbmRlZC4KICAqLwpAQCAtNjk2LDYgKzcwNSw3IEBAIF9faXNjc2lf Y29ubl9zZW5kX3BkdShzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hk ciAqaGRyLAogCXVpbnQ4X3Qgb3Bjb2RlID0gaGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVf TUFTSzsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKIAlpdHRfdCBpdHQ7CisJaW50IHRh ZzsKIAogCWlmIChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUpCiAJ CXJldHVybiBOVUxMOwpAQCAtNzIxLDEwICs3MzEsMjAgQEAgX19pc2NzaV9jb25uX3NlbmRf cGR1KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJ CUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fSU5JVElBTF9TVEFHRSk7CiAJ CUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fU1RPUFBFRCk7CiAKLQkJaWYg KCFrZmlmb19vdXQoJnNlc3Npb24tPmNtZHBvb2wucXVldWUsCisJCWlmICgha2ZpZm9fb3V0 KCZzZXNzaW9uLT5tZ210X3Bvb2wucXVldWUsCiAJCQkJICh2b2lkKikmdGFzaywgc2l6ZW9m KHZvaWQqKSkpCiAJCQlyZXR1cm4gTlVMTDsKKwkKKwkJdGFnID0gcGVyY3B1X2lkYV9hbGxv Yygmc2Vzc2lvbi0+aXR0cywgR0ZQX0FUT01JQyk7CisJCWlmICh0YWcgPCAwKSB7CisJCQlr Zmlmb19pbigmc2Vzc2lvbi0+bWdtdF9wb29sLnF1ZXVlLCAodm9pZCopJnRhc2ssCisJCQkJ IHNpemVvZih2b2lkKikpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJdGFzay0+aXR0ID0g dGFnOworCQlzZXNzaW9uLT50YXNrX21hcFt0YWddID0gdGFzazsKIAl9CisKIAkvKgogCSAq IHJlbGVhc2VkIGluIGNvbXBsZXRlIHBkdSBmb3IgdGFzayB3ZSBleHBlY3QgYSByZXNwb25z ZSBmb3IsIGFuZAogCSAqIHJlbGVhc2VkIGJ5IHRoZSBsbGQgd2hlbiBpdCBoYXMgdHJhbnNt aXR0ZWQgdGhlIHRhc2sgZm9yCkBAIC03MzUsNiArNzU1LDcgQEAgX19pc2NzaV9jb25uX3Nl bmRfcGR1KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIs CiAJdGFzay0+c2MgPSBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZ0YXNrLT5ydW5uaW5nKTsK IAl0YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUEVORElORzsKKwl0YXNrLT5kZF9kYXRhID0g JnRhc2tbMV07CiAKIAlpZiAoZGF0YV9zaXplKSB7CiAJCW1lbWNweSh0YXNrLT5kYXRhLCBk YXRhLCBkYXRhX3NpemUpOwpAQCAtMTA5NSw3ICsxMTE2LDcgQEAgc3RydWN0IGlzY3NpX3Rh c2sgKmlzY3NpX2l0dF90b190YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBpdHRfdCBp dHQpCiAJaWYgKGkgPj0gc2Vzc2lvbi0+Y21kc19tYXgpCiAJCXJldHVybiBOVUxMOwogCi0J cmV0dXJuIHNlc3Npb24tPmNtZHNbaV07CisJcmV0dXJuIHNlc3Npb24tPnRhc2tfbWFwW2ld OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaXR0X3RvX3Rhc2spOwogCkBAIC0xNTYz LDE5ICsxNTg0LDIzIEBAIHN0YXRpYyB2b2lkIGlzY3NpX3htaXR3b3JrZXIoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQogCX0gd2hpbGUgKHJjID49IDAgfHwgcmMgPT0gLUVBR0FJTik7 CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlzY3NpX3Rhc2sgKmlzY3NpX2FsbG9jX3Rh c2soc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sCi0JCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQg KnNjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNjc2lfdGFzayAqaXNjc2lfaW5pdF90YXNr KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLAorCQkJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNj KQogewotCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwotCi0JaWYgKCFrZmlmb19vdXQoJmNv bm4tPnNlc3Npb24tPmNtZHBvb2wucXVldWUsCi0JCQkgKHZvaWQgKikgJnRhc2ssIHNpemVv Zih2b2lkICopKSkKLQkJcmV0dXJuIE5VTEw7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNl c3Npb24gPSBjb25uLT5zZXNzaW9uOworCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gc2Nz aV9nZXRfZHJ2X2NtZChzYyk7IC8qVE9ETyAtIGhvdyB0byBnbyBmcm9tIGNtZCB0byBkcml2 ZXIgc3RydWN0IGluIGhjaCdzIHBhdGNoZXMgKi8KKwlpbnQgdGFnOwogCi0Jc2MtPlNDcC5w aGFzZSA9IGNvbm4tPnNlc3Npb24tPmFnZTsKKwlzYy0+U0NwLnBoYXNlID0gc2Vzc2lvbi0+ YWdlOwogCXNjLT5TQ3AucHRyID0gKGNoYXIgKikgdGFzazsKIAorCXRhZyA9IHBlcmNwdV9p ZGFfYWxsb2MoJnNlc3Npb24tPml0dHMsIEdGUF9BVE9NSUMpOworCWlmICh0YWcgPCAwKQor CQlyZXR1cm4gTlVMTDsKKworCXRhc2stPmRkX2RhdGEgPSAmdGFza1sxXTsKIAlhdG9taWNf c2V0KCZ0YXNrLT5yZWZjb3VudCwgMSk7CisJdGFzay0+aXR0ID0gdGFnOwogCXRhc2stPnN0 YXRlID0gSVNDU0lfVEFTS19QRU5ESU5HOwogCXRhc2stPmNvbm4gPSBjb25uOwogCXRhc2st PnNjID0gc2M7CkBAIC0xNTgzLDYgKzE2MDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBp c2NzaV90YXNrICppc2NzaV9hbGxvY190YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLAog CXRhc2stPmxhc3RfdGltZW91dCA9IGppZmZpZXM7CiAJdGFzay0+bGFzdF94ZmVyID0gamlm ZmllczsKIAlJTklUX0xJU1RfSEVBRCgmdGFzay0+cnVubmluZyk7CisJc2Vzc2lvbi0+dGFz a19tYXBbdGFnXSA9IHRhc2s7CiAJcmV0dXJuIHRhc2s7CiB9CiAKQEAgLTE2NzMsNyArMTY5 OSw3IEBAIGludCBpc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwg c3RydWN0IHNjc2lfY21uZCAqc2MpCiAJCWdvdG8gcmVqZWN0OwogCX0KIAotCXRhc2sgPSBp c2NzaV9hbGxvY190YXNrKGNvbm4sIHNjKTsKKwl0YXNrID0gaXNjc2lfaW5pdF90YXNrKGNv bm4sIHNjKTsKIAlpZiAoIXRhc2spIHsKIAkJcmVhc29uID0gRkFJTFVSRV9PT007CiAJCWdv dG8gcmVqZWN0OwpAQCAtMTgyNCw4ICsxODUwLDggQEAgc3RhdGljIGludCBpc2NzaV9leGVj X3Rhc2tfbWdtdF9mbihzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwKIH0KIAogLyoKLSAqIEZh aWwgY29tbWFuZHMuIHNlc3Npb24gbG9jayBoZWxkIGFuZCByZWN2IHNpZGUgc3VzcGVuZGVk IGFuZCB4bWl0Ci0gKiB0aHJlYWQgZmx1c2hlZAorICogRmFpbCBjb21tYW5kcy4gc2Vzc2lv biBmcndkX2xvY2sgbXVzdCBiZSBoZWxkIGFuZCByZWN2IHNpZGUgc3VzcGVuZGVkIGFuZAor ICogeG1pdCB0aHJlYWQgZmx1c2hlZAogICovCiBzdGF0aWMgdm9pZCBmYWlsX3Njc2lfdGFz a3Moc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHVuc2lnbmVkIGx1biwKIAkJCSAgICBpbnQg ZXJyb3IpCkBAIC0xODM0LDggKzE4NjAsOCBAQCBzdGF0aWMgdm9pZCBmYWlsX3Njc2lfdGFz a3Moc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHVuc2lnbmVkIGx1biwKIAlpbnQgaTsKIAog CWZvciAoaSA9IDA7IGkgPCBjb25uLT5zZXNzaW9uLT5jbWRzX21heDsgaSsrKSB7Ci0JCXRh c2sgPSBjb25uLT5zZXNzaW9uLT5jbWRzW2ldOwotCQlpZiAoIXRhc2stPnNjIHx8IHRhc2st PnN0YXRlID09IElTQ1NJX1RBU0tfRlJFRSkKKwkJdGFzayA9IGNvbm4tPnNlc3Npb24tPnRh c2tfbWFwW2ldOworCQlpZiAoIXRhc2sgfHwgIXRhc2stPnNjIHx8IHRhc2stPnN0YXRlID09 IElTQ1NJX1RBU0tfRlJFRSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsdW4gIT0gLTEgJiYg bHVuICE9IHRhc2stPnNjLT5kZXZpY2UtPmx1bikKQEAgLTE5NzgsOSArMjAwNCwxMCBAQCBz dGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIGlzY3NpX2VoX2NtZF90aW1lZF9vdXQo c3RydWN0IHNjc2lfY21uZCAqc2MpCiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvbm4tPnNl c3Npb24tPmNtZHNfbWF4OyBpKyspIHsKLQkJcnVubmluZ190YXNrID0gY29ubi0+c2Vzc2lv bi0+Y21kc1tpXTsKLQkJaWYgKCFydW5uaW5nX3Rhc2stPnNjIHx8IHJ1bm5pbmdfdGFzayA9 PSB0YXNrIHx8Ci0JCSAgICAgcnVubmluZ190YXNrLT5zdGF0ZSAhPSBJU0NTSV9UQVNLX1JV Tk5JTkcpCisJCXJ1bm5pbmdfdGFzayA9IGNvbm4tPnNlc3Npb24tPnRhc2tfbWFwW2ldOwor CQlpZiAoIXJ1bm5pbmdfdGFzayB8fCAhcnVubmluZ190YXNrLT5zYyB8fAorCQkgICAgcnVu bmluZ190YXNrID09IHRhc2sgfHwKKwkJICAgIHJ1bm5pbmdfdGFzay0+c3RhdGUgIT0gSVND U0lfVEFTS19SVU5OSU5HKQogCQkJY29udGludWU7CiAKIAkJLyoKQEAgLTI2OTcsNyArMjcy NCw3IEBAIGlzY3NpX3Nlc3Npb25fc2V0dXAoc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqaXNj c2l0LCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKIAlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhv c3QgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lv bjsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwotCWludCBjbWRf aSwgc2NzaV9jbWRzLCB0b3RhbF9jbWRzID0gY21kc19tYXg7CisJaW50IHNjc2lfY21kcywg dG90YWxfY21kcyA9IGNtZHNfbWF4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGlu X2xvY2tfaXJxc2F2ZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKQEAgLTI3NjYsMjIgKzI3OTMs MjMgQEAgaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICppc2Nz aXQsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCXNwaW5fbG9ja19pbml0KCZzZXNzaW9u LT5mcndkX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzZXNzaW9uLT5iYWNrX2xvY2spOwog Ci0JLyogaW5pdGlhbGl6ZSBTQ1NJIFBEVSBjb21tYW5kcyBwb29sICovCi0JaWYgKGlzY3Np X3Bvb2xfaW5pdCgmc2Vzc2lvbi0+Y21kcG9vbCwgc2Vzc2lvbi0+Y21kc19tYXgsCi0JCQkg ICAgKHZvaWQqKiopJnNlc3Npb24tPmNtZHMsCi0JCQkgICAgY21kX3Rhc2tfc2l6ZSArIHNp emVvZihzdHJ1Y3QgaXNjc2lfdGFzaykpKQotCQlnb3RvIGNtZHBvb2xfYWxsb2NfZmFpbDsK KwkvKgorCSAqIFRPRE86IG1ha2UgYmxvY2sgbGF5ZXIgaGFuZGxlIHRoaXMgbGlrZSB3YXMg ZG9uZSBmb3IKKwkgKiB0aGUgbm9uLW1xIGhvc3Qgd2lkZSB0YWdnaW5nLgorCSAqLworCWlm IChwZXJjcHVfaWRhX2luaXQoJnNlc3Npb24tPml0dHMsIHRvdGFsX2NtZHMpKQorCQlnb3Rv IGl0dHNfaW5pdDsKIAotCS8qIHByZS1mb3JtYXQgY21kcyBwb29sIHdpdGggSVRUICovCi0J Zm9yIChjbWRfaSA9IDA7IGNtZF9pIDwgc2Vzc2lvbi0+Y21kc19tYXg7IGNtZF9pKyspIHsK LQkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBzZXNzaW9uLT5jbWRzW2NtZF9pXTsKKwkv KiBpbml0aWFsaXplIExPR0lOL05PUC9UTUYgUERVIHBvb2wgKi8KKwlpZiAoaXNjc2lfcG9v bF9pbml0KCZzZXNzaW9uLT5tZ210X3Bvb2wsIElTQ1NJX01HTVRfQ01EU19NQVgsCisJCQkg ICAgKHZvaWQqKiopJnNlc3Npb24tPm1nbXRfY21kcywKKwkJCSAgICBjbWRfdGFza19zaXpl ICsgc2l6ZW9mKHN0cnVjdCBpc2NzaV90YXNrKSkpCisJCWdvdG8gbWdtdHBvb2xfYWxsb2Nf ZmFpbDsKIAotCQlpZiAoY21kX3Rhc2tfc2l6ZSkKLQkJCXRhc2stPmRkX2RhdGEgPSAmdGFz a1sxXTsKLQkJdGFzay0+aXR0ID0gY21kX2k7Ci0JCXRhc2stPnN0YXRlID0gSVNDU0lfVEFT S19GUkVFOwotCQlJTklUX0xJU1RfSEVBRCgmdGFzay0+cnVubmluZyk7Ci0JfQorCXNlc3Np b24tPnRhc2tfbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX3Rhc2sgKikgKgor CQkJCSAgICBzZXNzaW9uLT5jbWRzX21heCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXNzaW9u LT50YXNrX21hcCkKKwkJZ290byB0YXNrX21hcF9hbGxvY19mYWlsOwogCiAJaWYgKCF0cnlf bW9kdWxlX2dldChpc2NzaXQtPm93bmVyKSkKIAkJZ290byBtb2R1bGVfZ2V0X2ZhaWw7CkBA IC0yNzk0LDggKzI4MjIsMTIgQEAgaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lf dHJhbnNwb3J0ICppc2NzaXQsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogY2xzX3Nlc3Np b25fZmFpbDoKIAltb2R1bGVfcHV0KGlzY3NpdC0+b3duZXIpOwogbW9kdWxlX2dldF9mYWls OgotCWlzY3NpX3Bvb2xfZnJlZSgmc2Vzc2lvbi0+Y21kcG9vbCk7Ci1jbWRwb29sX2FsbG9j X2ZhaWw6CisJa2ZyZWUoc2Vzc2lvbi0+dGFza19tYXApOwordGFza19tYXBfYWxsb2NfZmFp bDoKKwlpc2NzaV9wb29sX2ZyZWUoJnNlc3Npb24tPm1nbXRfcG9vbCk7CittZ210cG9vbF9h bGxvY19mYWlsOgorCXBlcmNwdV9pZGFfZGVzdHJveSgmc2Vzc2lvbi0+aXR0cyk7CitpdHRz X2luaXQ6CiAJaXNjc2lfZnJlZV9zZXNzaW9uKGNsc19zZXNzaW9uKTsKIGRlY19zZXNzaW9u X2NvdW50OgogCWlzY3NpX2hvc3RfZGVjX3Nlc3Npb25fY250KHNob3N0KTsKQEAgLTI4MTYs NyArMjg0OCw3IEBAIHZvaWQgaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihzdHJ1Y3QgaXNjc2lf Y2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uKQogCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gY2xz X3Nlc3Npb24tPnRyYW5zcG9ydC0+b3duZXI7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Qg PSBzZXNzaW9uLT5ob3N0OwogCi0JaXNjc2lfcG9vbF9mcmVlKCZzZXNzaW9uLT5jbWRwb29s KTsKKwlpc2NzaV9wb29sX2ZyZWUoJnNlc3Npb24tPm1nbXRfcG9vbCk7CiAKIAlrZnJlZShz ZXNzaW9uLT5wYXNzd29yZCk7CiAJa2ZyZWUoc2Vzc2lvbi0+cGFzc3dvcmRfaW4pOwpAQCAt MjgzMSw2ICsyODYzLDkgQEAgdm9pZCBpc2NzaV9zZXNzaW9uX3RlYXJkb3duKHN0cnVjdCBp c2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pCiAJa2ZyZWUoc2Vzc2lvbi0+aWZhY2Vu YW1lKTsKIAlrZnJlZShzZXNzaW9uLT5wb3J0YWxfdHlwZSk7CiAJa2ZyZWUoc2Vzc2lvbi0+ ZGlzY292ZXJ5X3BhcmVudF90eXBlKTsKKwlrZnJlZShzZXNzaW9uLT50YXNrX21hcCk7CisK KwlwZXJjcHVfaWRhX2Rlc3Ryb3koJnNlc3Npb24tPml0dHMpOwogCiAJaXNjc2lfZGVzdHJv eV9zZXNzaW9uKGNsc19zZXNzaW9uKTsKIAlpc2NzaV9ob3N0X2RlY19zZXNzaW9uX2NudChz aG9zdCk7CkBAIC0yODUyLDYgKzI4ODcsNyBAQCBpc2NzaV9jb25uX3NldHVwKHN0cnVjdCBp c2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sIGludCBkZF9zaXplLAogCXN0cnVjdCBp c2NzaV9jb25uICpjb25uOwogCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm47CiAJ Y2hhciAqZGF0YTsKKwlpbnQgdGFnOwogCiAJY2xzX2Nvbm4gPSBpc2NzaV9jcmVhdGVfY29u bihjbHNfc2Vzc2lvbiwgc2l6ZW9mKCpjb25uKSArIGRkX3NpemUsCiAJCQkJICAgICBjb25u X2lkeCk7CkBAIC0yODc5LDcgKzI5MTUsNyBAQCBpc2NzaV9jb25uX3NldHVwKHN0cnVjdCBp c2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sIGludCBkZF9zaXplLAogCiAJLyogYWxs b2NhdGUgbG9naW5fdGFzayB1c2VkIGZvciB0aGUgbG9naW4vdGV4dCBzZXF1ZW5jZXMgKi8K IAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmZyd2RfbG9jayk7Ci0JaWYgKCFrZmlmb19vdXQo JnNlc3Npb24tPmNtZHBvb2wucXVldWUsCisJaWYgKCFrZmlmb19vdXQoJnNlc3Npb24tPm1n bXRfcG9vbC5xdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopJmNvbm4t PmxvZ2luX3Rhc2ssCiAJCQkgc2l6ZW9mKHZvaWQqKSkpIHsKIAkJc3Bpbl91bmxvY2tfYmgo JnNlc3Npb24tPmZyd2RfbG9jayk7CkBAIC0yODkzLDEzICsyOTI5LDIyIEBAIGlzY3NpX2Nv bm5fc2V0dXAoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwgaW50IGRk X3NpemUsCiAJCWdvdG8gbG9naW5fdGFza19kYXRhX2FsbG9jX2ZhaWw7CiAJY29ubi0+bG9n aW5fdGFzay0+ZGF0YSA9IGNvbm4tPmRhdGEgPSBkYXRhOwogCisJdGFnID0gcGVyY3B1X2lk YV9hbGxvYygmc2Vzc2lvbi0+aXR0cywgR0ZQX0tFUk5FTCk7CisJaWYgKHRhZyA8IDApCisJ CWdvdG8gbG9naW5faXR0X2ZhaWw7CisKKwljb25uLT5sb2dpbl90YXNrLT5pdHQgPSB0YWc7 CitwcmludGsoS0VSTl9FUlIgImlzY3NpIGxvZ2luIHRhc2sgISEhISEhISEhISEhISEhISEh ICVkXG4iLCBjb25uLT5sb2dpbl90YXNrLT5pdHQpOworCXNlc3Npb24tPnRhc2tfbWFwW3Rh Z10gPSBjb25uLT5sb2dpbl90YXNrOwogCWluaXRfdGltZXIoJmNvbm4tPnRtZl90aW1lcik7 CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29ubi0+ZWh3YWl0KTsKIAogCXJldHVybiBjbHNf Y29ubjsKIAorbG9naW5faXR0X2ZhaWw6CisJa2ZyZWUoZGF0YSk7CiBsb2dpbl90YXNrX2Rh dGFfYWxsb2NfZmFpbDoKLQlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZv aWQqKSZjb25uLT5sb2dpbl90YXNrLAorCWtmaWZvX2luKCZzZXNzaW9uLT5tZ210X3Bvb2wu cXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKIAkJICAgIHNpemVvZih2b2lkKikp OwogbG9naW5fdGFza19hbGxvY19mYWlsOgogCWlzY3NpX2Rlc3Ryb3lfY29ubihjbHNfY29u bik7CkBAIC0yOTY1LDcgKzMwMTAsOCBAQCB2b2lkIGlzY3NpX2Nvbm5fdGVhcmRvd24oc3Ry dWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubikKIAlrZnJlZShjb25uLT5sb2NhbF9pcGFk ZHIpOwogCS8qIHJlZ3VsYXIgUlggcGF0aCB1c2VzIGJhY2tfbG9jayAqLwogCXNwaW5fbG9j a19iaCgmc2Vzc2lvbi0+YmFja19sb2NrKTsKLQlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9v bC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAorCXBlcmNwdV9pZGFfZnJlZSgm c2Vzc2lvbi0+aXR0cywgY29ubi0+bG9naW5fdGFzay0+aXR0KTsKKwlrZmlmb19pbigmc2Vz c2lvbi0+bWdtdF9wb29sLnF1ZXVlLCAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCiAJCSAg ICBzaXplb2Yodm9pZCopKTsKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+YmFja19sb2Nr KTsKIAlpZiAoc2Vzc2lvbi0+bGVhZGNvbm4gPT0gY29ubikKQEAgLTMwNTEsOCArMzA5Nyw4 IEBAIGZhaWxfbWdtdF90YXNrcyhzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwgc3Ry dWN0IGlzY3NpX2Nvbm4gKmNvbm4pCiAJaW50IGksIHN0YXRlOwogCiAJZm9yIChpID0gMDsg aSA8IGNvbm4tPnNlc3Npb24tPmNtZHNfbWF4OyBpKyspIHsKLQkJdGFzayA9IGNvbm4tPnNl c3Npb24tPmNtZHNbaV07Ci0JCWlmICh0YXNrLT5zYykKKwkJdGFzayA9IGNvbm4tPnNlc3Np b24tPnRhc2tfbWFwW2ldOworCQlpZiAoIXRhc2sgfHwgdGFzay0+c2MpCiAJCQljb250aW51 ZTsKIAogCQlpZiAodGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19GUkVFKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3Np X3RjcC5jCmluZGV4IGU0YmVjNTguLjNjOTUwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2Nz aS9saWJpc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKQEAg LTQ1MSwyNyArNDUxLDEzIEBAIGlzY3NpX3RjcF9kYXRhX3JlY3ZfcHJlcChzdHJ1Y3QgaXNj c2lfdGNwX2Nvbm4gKnRjcF9jb25uKQogdm9pZCBpc2NzaV90Y3BfY2xlYW51cF90YXNrKHN0 cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewogCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNw X3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCXN0cnVjdCBpc2NzaV9yMnRfaW5mbyAqcjJ0Owog CiAJLyogbm90aGluZyB0byBkbyBmb3IgbWdtdCAqLwogCWlmICghdGFzay0+c2MpCiAJCXJl dHVybjsKIAotCXNwaW5fbG9ja19iaCgmdGNwX3Rhc2stPnF1ZXVlMnBvb2wpOwotCS8qIGZs dXNoIHRhc2sncyByMnQgcXVldWVzICovCi0Jd2hpbGUgKGtmaWZvX291dCgmdGNwX3Rhc2st PnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSkpIHsKLQkJa2ZpZm9faW4o JnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKLQkJCSAgICBzaXplb2Yo dm9pZCopKTsKLQkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLCAicGVuZGluZyByMnQgZHJv cHBlZFxuIik7Ci0JfQotCi0JcjJ0ID0gdGNwX3Rhc2stPnIydDsKLQlpZiAocjJ0ICE9IE5V TEwpIHsKLQkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIy dCwKLQkJCSAgICBzaXplb2Yodm9pZCopKTsKLQkJdGNwX3Rhc2stPnIydCA9IE5VTEw7Ci0J fQotCXNwaW5fdW5sb2NrX2JoKCZ0Y3BfdGFzay0+cXVldWUycG9vbCk7CisJdGNwX3Rhc2st PnIydC5kYXRhX2xlbmd0aCA9IDA7CisJdGNwX3Rhc2stPnIydC5zZW50ID0gMDsKIH0KIEVY UE9SVF9TWU1CT0xfR1BMKGlzY3NpX3RjcF9jbGVhbnVwX3Rhc2spOwogCkBAIC01MjksMTEg KzUxNSwxMCBAQCBzdGF0aWMgaW50IGlzY3NpX3RjcF9yMnRfcnNwKHN0cnVjdCBpc2NzaV9j b25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIAlzdHJ1Y3QgaXNjc2lfdGNw X3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nv bm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfcjJ0X3JzcCAq cmhkciA9IChzdHJ1Y3QgaXNjc2lfcjJ0X3JzcCAqKXRjcF9jb25uLT5pbi5oZHI7Ci0Jc3Ry dWN0IGlzY3NpX3IydF9pbmZvICpyMnQ7CisJc3RydWN0IGlzY3NpX3IydF9pbmZvICpyMnQg PSAmdGNwX3Rhc2stPnIydDsKIAlpbnQgcjJ0c24gPSBiZTMyX3RvX2NwdShyaGRyLT5yMnRz bik7CiAJdTMyIGRhdGFfbGVuZ3RoOwogCXUzMiBkYXRhX29mZnNldDsKLQlpbnQgcmM7CiAK IAlpZiAodGNwX2Nvbm4tPmluLmRhdGFsZW4pIHsKIAkJaXNjc2lfY29ubl9wcmludGsoS0VS Tl9FUlIsIGNvbm4sCkBAIC01NzksMjggKzU2NCwyMSBAQCBzdGF0aWMgaW50IGlzY3NpX3Rj cF9yMnRfcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAq dGFzaykKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwogCX0KIAotCXNwaW5fbG9jaygm dGNwX3Rhc2stPnBvb2wycXVldWUpOwotCXJjID0ga2ZpZm9fb3V0KCZ0Y3BfdGFzay0+cjJ0 cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwotCWlmICghcmMpIHsK LQkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJDb3VsZCBub3QgYWxsb2Nh dGUgUjJULiAiCi0JCQkJICAiVGFyZ2V0IGhhcyBzZW50IG1vcmUgUjJUcyB0aGFuIGl0ICIK LQkJCQkgICJuZWdvdGlhdGVkIGZvciBvciBkcml2ZXIgaGFzIGxlYWtlZC5cbiIpOwotCQlz cGluX3VubG9jaygmdGNwX3Rhc2stPnBvb2wycXVldWUpOwotCQlyZXR1cm4gSVNDU0lfRVJS X1BST1RPOwotCX0KLQogCXIydC0+ZXhwX3N0YXRzbiA9IHJoZHItPnN0YXRzbjsKIAlyMnQt PmRhdGFfbGVuZ3RoID0gZGF0YV9sZW5ndGg7CiAJcjJ0LT5kYXRhX29mZnNldCA9IGRhdGFf b2Zmc2V0OwotCiAJcjJ0LT50dHQgPSByaGRyLT50dHQ7IC8qIG5vIGZsaXAgKi8KIAlyMnQt PmRhdGFzbiA9IDA7CisJLyoKKwkgKiBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbmVlZGVkIHRv IG1ha2Ugc3VyZSBpZiB0aGUgeG1pdCB0aHJlYWQKKwkgKiBpcyBoYW5kbGluZyBtdWx0aXBs ZSB0YXNrcyBhdCBhIHRpbWUgdGhlbiB3ZSB3YW50IHRvIG1ha2Ugc3VyZQorCSAqIGl0IHNl ZXMgdGhlc2UgZmllbGRzIHVwZGF0ZWQKKwkgKi8KKwlzbXBfd21iKCk7CiAJcjJ0LT5zZW50 ID0gMDsKIAogCXRjcF90YXNrLT5leHBfZGF0YXNuID0gcjJ0c24gKyAxOwotCWtmaWZvX2lu KCZ0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKIAlj b25uLT5yMnRfcGR1c19jbnQrKzsKLQlzcGluX3VubG9jaygmdGNwX3Rhc2stPnBvb2wycXVl dWUpOwogCiAJaXNjc2lfcmVxdWV1ZV90YXNrKHRhc2spOwogCXJldHVybiAwOwpAQCAtOTcx LDcgKzk0OSw2IEBAIGludCBpc2NzaV90Y3BfdGFza19pbml0KHN0cnVjdCBpc2NzaV90YXNr ICp0YXNrKQogCQlyZXR1cm4gY29ubi0+c2Vzc2lvbi0+dHQtPmluaXRfcGR1KHRhc2ssIDAs IHRhc2stPmRhdGFfY291bnQpOwogCX0KIAotCUJVR19PTihrZmlmb19sZW4oJnRjcF90YXNr LT5yMnRxdWV1ZSkpOwogCXRjcF90YXNrLT5leHBfZGF0YXNuID0gMDsKIAogCS8qIFByZXBh cmUgUERVLCBvcHRpb25hbGx5IHcvIGltbWVkaWF0ZSBkYXRhICovCkBAIC05ODksMzcgKzk2 NiwxNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV90Y3BfdGFza19pbml0KTsKIHN0YXRp YyBzdHJ1Y3QgaXNjc2lfcjJ0X2luZm8gKmlzY3NpX3RjcF9nZXRfY3Vycl9yMnQoc3RydWN0 IGlzY3NpX3Rhc2sgKnRhc2spCiB7CiAJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFz ayA9IHRhc2stPmRkX2RhdGE7Ci0Jc3RydWN0IGlzY3NpX3IydF9pbmZvICpyMnQgPSBOVUxM OwotCi0JaWYgKGlzY3NpX3Rhc2tfaGFzX3Vuc29sX2RhdGEodGFzaykpCi0JCXIydCA9ICZ0 YXNrLT51bnNvbF9yMnQ7Ci0JZWxzZSB7Ci0JCXNwaW5fbG9ja19iaCgmdGNwX3Rhc2stPnF1 ZXVlMnBvb2wpOwotCQlpZiAodGNwX3Rhc2stPnIydCkgewotCQkJcjJ0ID0gdGNwX3Rhc2st PnIydDsKLQkJCS8qIENvbnRpbnVlIHdpdGggdGhpcyBSMlQ/ICovCi0JCQlpZiAocjJ0LT5k YXRhX2xlbmd0aCA8PSByMnQtPnNlbnQpIHsKLQkJCQlJU0NTSV9EQkdfVENQKHRhc2stPmNv bm4sCi0JCQkJCSAgICAgICIgIGRvbmUgd2l0aCByMnQgJXBcbiIsIHIydCk7Ci0JCQkJa2Zp Zm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLAotCQkJCQkgICAgKHZvaWQgKikmdGNw X3Rhc2stPnIydCwKLQkJCQkJICAgIHNpemVvZih2b2lkICopKTsKLQkJCQl0Y3BfdGFzay0+ cjJ0ID0gcjJ0ID0gTlVMTDsKLQkJCX0KLQkJfQotCi0JCWlmIChyMnQgPT0gTlVMTCkgewot CQkJaWYgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLAotCQkJICAgICh2b2lkICop JnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKSAhPQotCQkJICAgIHNpemVvZih2b2lk ICopKQotCQkJCXIydCA9IE5VTEw7Ci0JCQllbHNlCi0JCQkJcjJ0ID0gdGNwX3Rhc2stPnIy dDsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmdGNwX3Rhc2stPnF1ZXVlMnBvb2wpOwotCX0K IAotCXJldHVybiByMnQ7CisJaWYgKHRhc2stPnVuc29sX3IydC5zZW50ID09IDAgJiYgaXNj c2lfdGFza19oYXNfdW5zb2xfZGF0YSh0YXNrKSkgeworCQkvKiBNYWtlIHN1cmUgd2Ugc2Vl IHRoZSBxdWV1ZSBzaWRlcyB1cGRhdGUgb2YgdGhlc2UgKi8KKwkJc21wX3JtYigpOworCQly ZXR1cm4gJnRhc2stPnVuc29sX3IydDsKKwl9IGVsc2UgaWYgKHRjcF90YXNrLT5yMnQuZGF0 YV9sZW5ndGggPiB0Y3BfdGFzay0+cjJ0LnNlbnQpIHsKKwkJLyogTWFrZSBzdXJlIHdlIHNl ZSB0aGUgcmVjdiBzaWRlcyB1cGRhdGUgb2YgdGhlc2UgKi8KKwkJc21wX3JtYigpOworCQly ZXR1cm4gJnRjcF90YXNrLT5yMnQ7CisJfSBlbHNlCisJCXJldHVybiBOVUxMOwogfQogCiAv KioKQEAgLTExMTUsODQgKzEwNzIsMTcgQEAgdm9pZCBpc2NzaV90Y3BfY29ubl90ZWFyZG93 bihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKQogfQogRVhQT1JUX1NZTUJPTF9H UEwoaXNjc2lfdGNwX2Nvbm5fdGVhcmRvd24pOwogCi1pbnQgaXNjc2lfdGNwX3IydHBvb2xf YWxsb2Moc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaW50IGk7Ci0JaW50 IGNtZF9pOwotCi0JLyoKLQkgKiBpbml0aWFsaXplIHBlci10YXNrOiBSMlQgcG9vbCBhbmQg eG1pdCBxdWV1ZQotCSAqLwotCWZvciAoY21kX2kgPSAwOyBjbWRfaSA8IHNlc3Npb24tPmNt ZHNfbWF4OyBjbWRfaSsrKSB7Ci0JICAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9 IHNlc3Npb24tPmNtZHNbY21kX2ldOwotCQlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90 YXNrID0gdGFzay0+ZGRfZGF0YTsKLQotCQkvKgotCQkgKiBwcmUtYWxsb2NhdGVkIHgyIGFz IG11Y2ggcjJ0cyB0byBoYW5kbGUgcmFjZSB3aGVuCi0JCSAqIHRhcmdldCBhY2tzIERhdGFP dXQgZmFzdGVyIHRoYW4gd2UgZGF0YV94bWl0KCkgcXVldWVzCi0JCSAqIGNvdWxkIHJlcGxl bmlzaCByMnRxdWV1ZS4KLQkJICovCi0KLQkJLyogUjJUIHBvb2wgKi8KLQkJaWYgKGlzY3Np X3Bvb2xfaW5pdCgmdGNwX3Rhc2stPnIydHBvb2wsCi0JCQkJICAgIHNlc3Npb24tPm1heF9y MnQgKiAyLCBOVUxMLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGlzY3NpX3IydF9pbmZvKSkp IHsKLQkJCWdvdG8gcjJ0X2FsbG9jX2ZhaWw7Ci0JCX0KLQotCQkvKiBSMlQgeG1pdCBxdWV1 ZSAqLwotCQlpZiAoa2ZpZm9fYWxsb2MoJnRjcF90YXNrLT5yMnRxdWV1ZSwKLQkJICAgICAg c2Vzc2lvbi0+bWF4X3IydCAqIDQgKiBzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMKSkgewot CQkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7Ci0JCQlnb3RvIHIydF9h bGxvY19mYWlsOwotCQl9Ci0JCXNwaW5fbG9ja19pbml0KCZ0Y3BfdGFzay0+cG9vbDJxdWV1 ZSk7Ci0JCXNwaW5fbG9ja19pbml0KCZ0Y3BfdGFzay0+cXVldWUycG9vbCk7Ci0JfQotCi0J cmV0dXJuIDA7Ci0KLXIydF9hbGxvY19mYWlsOgotCWZvciAoaSA9IDA7IGkgPCBjbWRfaTsg aSsrKSB7Ci0JCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gc2Vzc2lvbi0+Y21kc1tpXTsK LQkJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFzayA9IHRhc2stPmRkX2RhdGE7Ci0K LQkJa2ZpZm9fZnJlZSgmdGNwX3Rhc2stPnIydHF1ZXVlKTsKLQkJaXNjc2lfcG9vbF9mcmVl KCZ0Y3BfdGFzay0+cjJ0cG9vbCk7Ci0JfQotCXJldHVybiAtRU5PTUVNOwotfQotRVhQT1JU X1NZTUJPTF9HUEwoaXNjc2lfdGNwX3IydHBvb2xfYWxsb2MpOwotCi12b2lkIGlzY3NpX3Rj cF9yMnRwb29sX2ZyZWUoc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaW50 IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2Vzc2lvbi0+Y21kc19tYXg7IGkrKykgewotCQlz dHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07Ci0JCXN0cnVjdCBp c2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCi0JCWtmaWZvX2Zy ZWUoJnRjcF90YXNrLT5yMnRxdWV1ZSk7Ci0JCWlzY3NpX3Bvb2xfZnJlZSgmdGNwX3Rhc2st PnIydHBvb2wpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3RjcF9yMnRwb29s X2ZyZWUpOwotCiBpbnQgaXNjc2lfdGNwX3NldF9tYXhfcjJ0KHN0cnVjdCBpc2NzaV9jb25u ICpjb25uLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24g PSBjb25uLT5zZXNzaW9uOwogCXVuc2lnbmVkIHNob3J0IHIydHMgPSAwOwogCiAJc3NjYW5m KGJ1ZiwgIiVodSIsICZyMnRzKTsKLQlpZiAoc2Vzc2lvbi0+bWF4X3IydCA9PSByMnRzKQot CQlyZXR1cm4gMDsKLQotCWlmICghcjJ0cyB8fCAhaXNfcG93ZXJfb2ZfMihyMnRzKSkKKwlp ZiAocjJ0cyAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNlc3Npb24tPm1heF9yMnQg PSByMnRzOwotCWlzY3NpX3RjcF9yMnRwb29sX2ZyZWUoc2Vzc2lvbik7Ci0JcmV0dXJuIGlz Y3NpX3RjcF9yMnRwb29sX2FsbG9jKHNlc3Npb24pOworCXJldHVybiAwOwogfQogRVhQT1JU X1NZTUJPTF9HUEwoaXNjc2lfdGNwX3NldF9tYXhfcjJ0KTsKIApkaWZmIC0tZ2l0IGEvaW5j bHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA3 MjIxYTI0Li4xZWYzYWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAor KysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1 ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5j bHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHVfaWRhLmg+CiAj aW5jbHVkZSA8c2NzaS9pc2NzaV9wcm90by5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfaWYu aD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CkBAIC0zMzUsMTgg KzMzNiwxOCBAQCBzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiB7CiAJc3BpbmxvY2tfdAkJZnJ3ZF9s b2NrOwkvKiBwcm90ZWN0cyBzZXNzaW9uIHN0YXRlLCAqCiAJCQkJCQkgKiBjbWRzbiwgcXVl dWVkX2NtZHNuICAgICAqCiAJCQkJCQkgKiBzZXNzaW9uIHJlc291cmNlczogICAgICAqCi0J CQkJCQkgKiAtIGNtZHBvb2wga2ZpZm9fb3V0ICwgICAqCi0JCQkJCQkgKiAtIG1nbXRwb29s LAkJICAgKi8KKwkJCQkJCSAqIC0gbWdtdF9wb29sIGtmaWZvLAkgICAqLwogCXNwaW5sb2Nr X3QJCWJhY2tfbG9jazsJLyogcHJvdGVjdHMgY21kc25fZXhwICAgICAgKgotCQkJCQkJICog Y21kc25fbWF4LCAgICAgICAgICAgICAgKgotCQkJCQkJICogY21kcG9vbCBrZmlmb19pbiAg ICAgICAgKi8KKwkJCQkJCSAqIGNtZHNuX21heCwgICAgICAgICAgICAgICovCiAJaW50CQkJ c3RhdGU7CQkvKiBzZXNzaW9uIHN0YXRlICAgICAgICAgICAqLwogCWludAkJCWFnZTsJCS8q IGNvdW50cyBzZXNzaW9uIHJlLW9wZW5zICovCiAKLQlpbnQJCQlzY3NpX2NtZHNfbWF4OyAJ LyogbWF4IHNjc2kgY29tbWFuZHMgKi8KKwlpbnQJCQlzY3NpX2NtZHNfbWF4OwkvKiBtYXgg c2NzaSBjb21tYW5kcyAqLworCXN0cnVjdCBwZXJjcHVfaWRhCWl0dHM7CQkvKiBpdHQgaWRh ICovCisJc3RydWN0IGlzY3NpX3Rhc2sJKip0YXNrX21hcDsJLyogaXR0IHRvIHRhc2sgbWFw ICovCiAJaW50CQkJY21kc19tYXg7CS8qIHNpemUgb2YgY21kcyBhcnJheSAqLwotCXN0cnVj dCBpc2NzaV90YXNrCSoqY21kczsJCS8qIE9yaWdpbmFsIENtZHMgYXJyICovCi0Jc3RydWN0 IGlzY3NpX3Bvb2wJY21kcG9vbDsJLyogUERVJ3MgcG9vbCAqLworCXN0cnVjdCBpc2NzaV90 YXNrCSoqbWdtdF9jbWRzOwkvKiBNZ210IGNtZHMgYXIgKi8KKwlzdHJ1Y3QgaXNjc2lfcG9v bAltZ210X3Bvb2w7CS8qIE1nbXQgUERVIHBvb2wgKi8KIAl2b2lkCQkJKmRkX2RhdGE7CS8q IExMRCBwcml2YXRlIGRhdGEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9s aWJpc2NzaV90Y3AuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAppbmRleCAyYTdh YTc1Li5jNDk0NjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgK KysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCkBAIC03OSwxMiArNzksOCBAQCBz dHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gewogc3RydWN0IGlzY3NpX3RjcF90YXNrIHsKIAl1aW50 MzJfdAkJZXhwX2RhdGFzbjsJLyogZXhwZWN0ZWQgdGFyZ2V0J3MgUjJUU04vRGF0YVNOICov CiAJaW50CQkJZGF0YV9vZmZzZXQ7Ci0Jc3RydWN0IGlzY3NpX3IydF9pbmZvCSpyMnQ7CQkv KiBpbiBwcm9ncmVzcyBzb2xpY3QgUjJUICovCi0Jc3RydWN0IGlzY3NpX3Bvb2wJcjJ0cG9v bDsKLQlzdHJ1Y3Qga2ZpZm8JCXIydHF1ZXVlOworCXN0cnVjdCBpc2NzaV9yMnRfaW5mbwly MnQ7CiAJdm9pZAkJCSpkZF9kYXRhOwotCXNwaW5sb2NrX3QJCXBvb2wycXVldWU7Ci0Jc3Bp bmxvY2tfdAkJcXVldWUycG9vbDsKIH07CiAKIGVudW0gewpAQCAtMTI4LDggKzEyNCw2IEBA IGlzY3NpX3RjcF9jb25uX3NldHVwKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nl c3Npb24sIGludCBkZF9kYXRhX3NpemUsCiBleHRlcm4gdm9pZCBpc2NzaV90Y3BfY29ubl90 ZWFyZG93bihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKTsKIAogLyogbWlzYyBo ZWxwZXJzICovCi1leHRlcm4gaW50IGlzY3NpX3RjcF9yMnRwb29sX2FsbG9jKHN0cnVjdCBp c2NzaV9zZXNzaW9uICpzZXNzaW9uKTsKLWV4dGVybiB2b2lkIGlzY3NpX3RjcF9yMnRwb29s X2ZyZWUoc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24pOwogZXh0ZXJuIGludCBpc2Nz aV90Y3Bfc2V0X21heF9yMnQoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGNoYXIgKmJ1Zik7 CiBleHRlcm4gdm9pZCBpc2NzaV90Y3BfY29ubl9nZXRfc3RhdHMoc3RydWN0IGlzY3NpX2Ns c19jb25uICpjbHNfY29ubiwKIAkJCQkgICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMp Owo= --------------010502070507010705080608--