From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751900Ab0IWCgb (ORCPT ); Wed, 22 Sep 2010 22:36:31 -0400 Received: from mail-pz0-f46.google.com ([209.85.210.46]:63086 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751015Ab0IWCga (ORCPT ); Wed, 22 Sep 2010 22:36:30 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=hKRgfdza1XmnOHL2Uu3ZTS5ZTCoh8Ya5VnVcnXpvWmw2H+IrbUbRXJFtb0GS0pPCuW EnSOlzyfcsqIQHzBU3wjwHOwNbOimzePKKk5LHvOq6rCnXyNptFdASt/YmrPfVnu5aX3 a7jbjEuBHIClAEbXbgQLRXZ+DYIkbF73nvw7g= MIME-Version: 1.0 Date: Wed, 22 Sep 2010 22:36:29 -0400 Message-ID: Subject: PATCH 1/5] scsi: megaraid_sas - Add Online Controller Reset to MegaRAID SAS drive From: bo yang To: linux-scsi@vger.kernel.org, akpm@osdl.org, linux-kernel@vger.kernel.org, James.Bottomley@suse.de, bo.yang@lsi.com Content-Type: multipart/mixed; boundary=001636b2bc5222d5460490e42178 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --001636b2bc5222d5460490e42178 Content-Type: text/plain; charset=ISO-8859-1 This patch is too big. I am using attachment to submit. Please use attached file to apply. Also let me know if it can't be accepted. To add the Online controller reset support, driver need to do: a). reset the controller chips -- Xscale and Gen2 which will change the function calls and add the reset function related to this two chips. b). during the reset, driver will store the pending cmds which not returned by FW to driver's pending queue. Driver will re-issue those pending cmds again to FW after the OCR finished. c). In driver's timeout routine, driver will report to OS as reset. Also driver's queue routine will block the cmds until the OCR finished. d). in Driver's ISR routine, if driver get the FW state as state change, FW in Failure status and FW support online controller reset (OCR), driver will start to do the controller reset. e). In driver's IOCTL routine, the application cmds will wait for the OCR to finish, then issue the cmds to FW. Signed-off-by Bo Yang --- drivers/scsi/megaraid/megaraid_sas.c | 756 ++++++++++++++++++++++++++++++++--- drivers/scsi/megaraid/megaraid_sas.h | 88 +++- 2 files changed, 787 insertions(+), 57 deletions(-) --001636b2bc5222d5460490e42178 Content-Type: application/octet-stream; name="megasas-ocr.patch" Content-Disposition: attachment; filename="megasas-ocr.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gef0e9zc0 ZGlmZiAtcnVwTiBvbGQvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIG5ldy9k cml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKLS0tIG9sZC9kcml2ZXJzL3Njc2kv bWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0wOS0xNyAwMjoxOTo0Ni4wMDAwMDAwMDAgLTA0 MDAKKysrIG5ldy9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0wOS0x NyAwMjoxOTo0Ni4wMDAwMDAwMDAgLTA0MDAKQEAgLTYyLDYgKzYyLDExIEBAIE1PRFVMRV9WRVJT SU9OKE1FR0FTQVNfVkVSU0lPTik7CiBNT0RVTEVfQVVUSE9SKCJtZWdhcmFpZGxpbnV4QGxzaS5j b20iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTFNJIE1lZ2FSQUlEIFNBUyBEcml2ZXIiKTsKIAor c3RhdGljIGludCBtZWdhc2FzX3RyYW5zaXRpb25fdG9fcmVhZHkoc3RydWN0IG1lZ2FzYXNfaW5z dGFuY2UgKmluc3RhbmNlKTsKK3N0YXRpYyBpbnQgbWVnYXNhc19nZXRfcGRfbGlzdChzdHJ1Y3Qg bWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOworc3RhdGljIGludCBtZWdhc2FzX2lzc3VlX2lu aXRfbWZpKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CitzdGF0aWMgaW50IG1l Z2FzYXNfcmVnaXN0ZXJfYWVuKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJ CQl1MzIgc2VxX251bSwgdTMyIGNsYXNzX2xvY2FsZV93b3JkKTsKIC8qCiAgKiBQQ0kgSUQgdGFi bGUgZm9yIGFsbCBzdXBwb3J0ZWQgY29udHJvbGxlcnMKICAqLwpAQCAtMTY0LDcgKzE2OSw3IEBA IG1lZ2FzYXNfcmV0dXJuX2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW4KIHN0YXRpYyBpbmxpbmUg dm9pZAogbWVnYXNhc19lbmFibGVfaW50cl94c2NhbGUoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJf c2V0IF9faW9tZW0gKiByZWdzKQogewotCXdyaXRlbCgxLCAmKHJlZ3MpLT5vdXRib3VuZF9pbnRy X21hc2spOworCXdyaXRlbCgwLCAmKHJlZ3MpLT5vdXRib3VuZF9pbnRyX21hc2spOwogCiAJLyog RHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCiAJcmVhZGwoJnJlZ3MtPm91dGJvdW5k X2ludHJfbWFzayk7CkBAIC0yMDAsMjQgKzIwNSwyNyBAQCBzdGF0aWMgaW50IAogbWVnYXNhc19j bGVhcl9pbnRyX3hzY2FsZShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJl Z3MpCiB7CiAJdTMyIHN0YXR1czsKKwl1MzIgbWZpU3RhdHVzID0gMDsKIAkvKgogCSAqIENoZWNr IGlmIGl0IGlzIG91ciBpbnRlcnJ1cHQKIAkgKi8KIAlzdGF0dXMgPSByZWFkbCgmcmVncy0+b3V0 Ym91bmRfaW50cl9zdGF0dXMpOwogCi0JaWYgKCEoc3RhdHVzICYgTUZJX09CX0lOVFJfU1RBVFVT X01BU0spKSB7Ci0JCXJldHVybiAxOwotCX0KKwlpZiAoc3RhdHVzICYgTUZJX09CX0lOVFJfU1RB VFVTX01BU0spCisJCW1maVN0YXR1cyA9IE1GSV9JTlRSX0ZMQUdfUkVQTFlfTUVTU0FHRTsKKwlp ZiAoc3RhdHVzICYgTUZJX1hTQ0FMRV9PTVIwX0NIQU5HRV9JTlRFUlJVUFQpCisJCW1maVN0YXR1 cyB8PSBNRklfSU5UUl9GTEFHX0ZJUk1XQVJFX1NUQVRFX0NIQU5HRTsKIAogCS8qCiAJICogQ2xl YXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGJhY2sgdGhlIHNhbWUgdmFsdWUKIAkgKi8KLQl3 cml0ZWwoc3RhdHVzLCAmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOworCWlmIChtZmlTdGF0 dXMpCisJCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CiAKIAkv KiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KIAlyZWFkbCgmcmVncy0+b3V0Ym91 bmRfaW50cl9zdGF0dXMpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1maVN0YXR1czsKIH0KIAog LyoqCkBAIC0yMzIsOCArMjQwLDY5IEBAIG1lZ2FzYXNfZmlyZV9jbWRfeHNjYWxlKHN0cnVjdCBt ZWdhc2FzX2kKIAkJdTMyIGZyYW1lX2NvdW50LAogCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9z ZXQgX19pb21lbSAqcmVncykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19p cnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWwoKGZyYW1lX3BoeXNf YWRkciA+PiAzKXwoZnJhbWVfY291bnQpLAogCSAgICAgICAmKHJlZ3MpLT5pbmJvdW5kX3F1ZXVl X3BvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxh Z3MpOworfQorCisvKioKKyAqIG1lZ2FzYXNfYWRwX3Jlc2V0X3hzY2FsZSAtICBGb3IgY29udHJv bGxlciByZXNldAorICogQHJlZ3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUZJIHJl Z2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2FkcF9yZXNldF94c2NhbGUoc3Ry dWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVy X3NldCBfX2lvbWVtICpyZWdzKQoreworCXUzMiBpOworCXUzMiBwY2lkYXRhOworCXdyaXRlbChN RklfQURQX1JFU0VULCAmcmVncy0+aW5ib3VuZF9kb29yYmVsbCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgMzsgaSsrKQorCQltc2xlZXAoMTAwMCk7IC8qIHNsZWVwIGZvciAzIHNlY3MgKi8KKwlwY2lk YXRhICA9IDA7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGluc3RhbmNlLT5wZGV2LCBNRklfMTA2 OF9QQ1NSX09GRlNFVCwgJnBjaWRhdGEpOworCXByaW50ayhLRVJOX05PVElDRSAicGNpZGF0YSA9 ICV4XG4iLCBwY2lkYXRhKTsKKwlpZiAocGNpZGF0YSAmIDB4MikgeworCQlwcmludGsoS0VSTl9O T1RJQ0UgIm1maSAxMDY4IG9mZnNldCByZWFkPSV4XG4iLCBwY2lkYXRhKTsKKwkJcGNpZGF0YSAm PSB+MHgyOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGluc3RhbmNlLT5wZGV2LAorCQkJCU1G SV8xMDY4X1BDU1JfT0ZGU0VULCBwY2lkYXRhKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsr KQorCQkJbXNsZWVwKDEwMDApOyAvKiBuZWVkIHRvIHdhaXQgMiBzZWNzIGFnYWluICovCisKKwkJ cGNpZGF0YSAgPSAwOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaW5zdGFuY2UtPnBkZXYsCisJ CQkJTUZJXzEwNjhfRldfSEFORFNIQUtFX09GRlNFVCwgJnBjaWRhdGEpOworCQlwcmludGsoS0VS Tl9OT1RJQ0UgIjEwNjggb2Zmc2V0IGhhbmRzaGFrZSByZWFkPSV4XG4iLCBwY2lkYXRhKTsKKwkJ aWYgKChwY2lkYXRhICYgMHhmZmZmMDAwMCkgPT0gTUZJXzEwNjhfRldfUkVBRFkpIHsKKwkJCXBy aW50ayhLRVJOX05PVElDRSAiMTA2OCBvZmZzZXQgcGNpZHQ9JXhcbiIsIHBjaWRhdGEpOworCQkJ cGNpZGF0YSA9IDA7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGluc3RhbmNlLT5wZGV2LAor CQkJCU1GSV8xMDY4X0ZXX0hBTkRTSEFLRV9PRkZTRVQsIHBjaWRhdGEpOworCQl9CisJfQorCXJl dHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfY2hlY2tfcmVzZXRfeHNjYWxlIC0JRm9yIGNv bnRyb2xsZXIgcmVzZXQgY2hlY2sKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8K K3N0YXRpYyBpbnQKK21lZ2FzYXNfY2hlY2tfcmVzZXRfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX2lu c3RhbmNlICppbnN0YW5jZSwKKwkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0g KnJlZ3MpCit7CisJdTMyIGNvbnN1bWVyOworCWNvbnN1bWVyID0gKmluc3RhbmNlLT5jb25zdW1l cjsKKworCWlmICgoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElP TkFMKSAmJgorCQkoKmluc3RhbmNlLT5jb25zdW1lciA9PSBNRUdBU0FTX0FEUFJFU0VUX0lOUFJP R19TSUdOKSkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1 Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX3hz Y2FsZSA9IHsKQEAgLTI0Myw2ICszMTIsOCBAQCBzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFu Y2VfdGVtcGxhdGUgCiAJLmRpc2FibGVfaW50ciA9IG1lZ2FzYXNfZGlzYWJsZV9pbnRyX3hzY2Fs ZSwKIAkuY2xlYXJfaW50ciA9IG1lZ2FzYXNfY2xlYXJfaW50cl94c2NhbGUsCiAJLnJlYWRfZndf c3RhdHVzX3JlZyA9IG1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX3hzY2FsZSwKKwkuYWRwX3Jl c2V0ID0gbWVnYXNhc19hZHBfcmVzZXRfeHNjYWxlLAorCS5jaGVja19yZXNldCA9IG1lZ2FzYXNf Y2hlY2tfcmVzZXRfeHNjYWxlLAogfTsKIAogLyoqCkBAIC0yNjQsNyArMzM1LDcgQEAgbWVnYXNh c19lbmFibGVfaW50cl9wcGMoc3RydWN0IG1lZ2FzYXNfcgogewogCXdyaXRlbCgweEZGRkZGRkZG LCAmKHJlZ3MpLT5vdXRib3VuZF9kb29yYmVsbF9jbGVhcik7CiAgICAgCi0Jd3JpdGVsKH4weDgw MDAwMDA0LCAmKHJlZ3MpLT5vdXRib3VuZF9pbnRyX21hc2spOworCXdyaXRlbCh+MHg4MDAwMDAw MCwgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKIAogCS8qIER1bW15IHJlYWRsIHRvIGZv cmNlIHBjaSBmbHVzaCAqLwogCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOwpAQCAt MzA3LDcgKzM3OCw3IEBAIG1lZ2FzYXNfY2xlYXJfaW50cl9wcGMoc3RydWN0IG1lZ2FzYXNfcmUK IAlzdGF0dXMgPSByZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOwogCiAJaWYgKCEo c3RhdHVzICYgTUZJX1JFUExZXzEwNzhfTUVTU0FHRV9JTlRFUlJVUFQpKSB7Ci0JCXJldHVybiAx OworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtMzE4LDcgKzM4OSw3IEBAIG1lZ2FzYXNfY2xl YXJfaW50cl9wcGMoc3RydWN0IG1lZ2FzYXNfcmUKIAkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBw Y2kgZmx1c2ggKi8KIAlyZWFkbCgmcmVncy0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOwogCi0J cmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAvKioKICAqIG1lZ2FzYXNfZmlyZV9jbWRfcHBjIC0J U2VuZHMgY29tbWFuZCB0byB0aGUgRlcKQEAgLTMzMiwxMCArNDAzLDM0IEBAIG1lZ2FzYXNfZmly ZV9jbWRfcHBjKHN0cnVjdCBtZWdhc2FzX2luc3QKIAkJdTMyIGZyYW1lX2NvdW50LAogCQlzdHJ1 Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKIHsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsK IAl3cml0ZWwoKGZyYW1lX3BoeXNfYWRkciB8IChmcmFtZV9jb3VudDw8MSkpfDEsIAogCQkJJihy ZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0 YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2FkcF9yZXNldF9w cGMgLQlGb3IgY29udHJvbGxlciByZXNldAorICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQK KyAqLworc3RhdGljIGludAorbWVnYXNhc19hZHBfcmVzZXRfcHBjKHN0cnVjdCBtZWdhc2FzX2lu c3RhbmNlICppbnN0YW5jZSwKKwkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVt ICpyZWdzKQoreworCXJldHVybiAwOwogfQogCisvKioKKyAqIG1lZ2FzYXNfY2hlY2tfcmVzZXRf cHBjIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQgY2hlY2sKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0 ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfY2hlY2tfcmVzZXRfcHBjKHN0cnVjdCBt ZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3Nl dCBfX2lvbWVtICpyZWdzKQoreworCXJldHVybiAwOworfQogc3RhdGljIHN0cnVjdCBtZWdhc2Fz X2luc3RhbmNlX3RlbXBsYXRlIG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGVfcHBjID0gewogCQog CS5maXJlX2NtZCA9IG1lZ2FzYXNfZmlyZV9jbWRfcHBjLApAQCAtMzQzLDYgKzQzOCw4IEBAIHN0 YXRpYyBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSAKIAkuZGlzYWJsZV9pbnRyID0g bWVnYXNhc19kaXNhYmxlX2ludHJfcHBjLAogCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9p bnRyX3BwYywKIAkucmVhZF9md19zdGF0dXNfcmVnID0gbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19y ZWdfcHBjLAorCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF9wcGMsCisJLmNoZWNrX3Jl c2V0ID0gbWVnYXNhc19jaGVja19yZXNldF9wcGMsCiB9OwogCiAvKioKQEAgLTM5Nyw3ICs0OTQs NyBAQCBtZWdhc2FzX2NsZWFyX2ludHJfc2tpbm55KHN0cnVjdCBtZWdhc2FzCiAJc3RhdHVzID0g cmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKIAogCWlmICghKHN0YXR1cyAmIE1G SV9TS0lOTllfRU5BQkxFX0lOVEVSUlVQVF9NQVNLKSkgewotCQlyZXR1cm4gMTsKKwkJcmV0dXJu IDA7CiAJfQogCiAJLyoKQEAgLTQxMCw3ICs1MDcsNyBAQCBtZWdhc2FzX2NsZWFyX2ludHJfc2tp bm55KHN0cnVjdCBtZWdhc2FzCiAJKi8KIAlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0 dXMpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtNDI2LDExICs1MjMs MzMgQEAgbWVnYXNhc19maXJlX2NtZF9za2lubnkoc3RydWN0IG1lZ2FzYXNfaQogCQkJc3RydWN0 IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBm bGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmZpcmVfbG9jaywgZmxhZ3MpOwor CXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWwo MCwgJihyZWdzKS0+aW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQpOwogCXdyaXRlbCgoZnJhbWVfcGh5 c19hZGRyIHwgKGZyYW1lX2NvdW50PDwxKSl8MSwKIAkJJihyZWdzKS0+aW5ib3VuZF9sb3dfcXVl dWVfcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmZpcmVfbG9jaywg ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxh Z3MpOworfQorCisvKioKKyAqIG1lZ2FzYXNfYWRwX3Jlc2V0X3NraW5ueSAtCUZvciBjb250cm9s bGVyIHJlc2V0CisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50 CittZWdhc2FzX2FkcF9yZXNldF9za2lubnkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3Rh bmNlLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19jaGVja19yZXNldF9za2lubnkgLQlGb3Ig Y29udHJvbGxlciByZXNldCBjaGVjaworICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKKyAq Lworc3RhdGljIGludAorbWVnYXNhc19jaGVja19yZXNldF9za2lubnkoc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKmluc3RhbmNlLAorCQkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lv bWVtICpyZWdzKQoreworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5z dGFuY2VfdGVtcGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9za2lubnkgPSB7CkBAIC00 NDAsNiArNTU5LDggQEAgc3RhdGljIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlIAog CS5kaXNhYmxlX2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnksCiAJLmNsZWFyX2lu dHIgPSBtZWdhc2FzX2NsZWFyX2ludHJfc2tpbm55LAogCS5yZWFkX2Z3X3N0YXR1c19yZWcgPSBt ZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnksCisJLmFkcF9yZXNldCA9IG1lZ2FzYXNf YWRwX3Jlc2V0X3NraW5ueSwKKwkuY2hlY2tfcmVzZXQgPSBtZWdhc2FzX2NoZWNrX3Jlc2V0X3Nr aW5ueSwKIH07CiAKIApAQCAtNDk1LDIzICs2MTYsMjkgQEAgc3RhdGljIGludAogbWVnYXNhc19j bGVhcl9pbnRyX2dlbjIoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3Mp CiB7CiAJdTMyIHN0YXR1czsKKwl1MzIgbWZpU3RhdHVzID0gMDsKIAkvKgogCSAqIENoZWNrIGlm IGl0IGlzIG91ciBpbnRlcnJ1cHQKIAkgKi8KIAlzdGF0dXMgPSByZWFkbCgmcmVncy0+b3V0Ym91 bmRfaW50cl9zdGF0dXMpOwogCi0JaWYgKCEoc3RhdHVzICYgTUZJX0dFTjJfRU5BQkxFX0lOVEVS UlVQVF9NQVNLKSkKLQkJcmV0dXJuIDE7CisJaWYgKHN0YXR1cyAmIE1GSV9HRU4yX0VOQUJMRV9J TlRFUlJVUFRfTUFTSykgeworCQltZmlTdGF0dXMgPSBNRklfSU5UUl9GTEFHX1JFUExZX01FU1NB R0U7CisJfQorCWlmIChzdGF0dXMgJiBNRklfRzJfT1VUQk9VTkRfRE9PUkJFTExfQ0hBTkdFX0lO VEVSUlVQVCkgeworCQltZmlTdGF0dXMgfD0gTUZJX0lOVFJfRkxBR19GSVJNV0FSRV9TVEFURV9D SEFOR0U7CisJfQogCiAJLyoKIAkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYmFj ayB0aGUgc2FtZSB2YWx1ZQogCSAqLwotCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9k b29yYmVsbF9jbGVhcik7CisJaWYgKG1maVN0YXR1cykKKwkJd3JpdGVsKHN0YXR1cywgJnJlZ3Mt Pm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKIAogCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBj aSBmbHVzaCAqLwogCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CiAKLQlyZXR1 cm4gMDsKKwlyZXR1cm4gbWZpU3RhdHVzOwogfQogLyoqCiAgKiBtZWdhc2FzX2ZpcmVfY21kX2dl bjIgLSAgICAgU2VuZHMgY29tbWFuZCB0byB0aGUgRlcKQEAgLTUyNSw4ICs2NTIsNzQgQEAgbWVn YXNhc19maXJlX2NtZF9nZW4yKHN0cnVjdCBtZWdhc2FzX2lucwogCQkJdTMyIGZyYW1lX2NvdW50 LAogCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCiB7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2Nr LCBmbGFncyk7CiAJd3JpdGVsKChmcmFtZV9waHlzX2FkZHIgfCAoZnJhbWVfY291bnQ8PDEpKXwx LAogCQkJJihyZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2Fk cF9yZXNldF9nZW4yIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQKKyAqIEByZWdzOgkJCQlNRkkgcmVn aXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfYWRwX3Jlc2V0X2dlbjIoc3RydWN0 IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJf c2V0IF9faW9tZW0gKnJlZ19zZXQpCit7CisJdTMyCQkJcmV0cnkgPSAwIDsKKwl1MzIJCQlIb3N0 RGlhZzsKKworCXdyaXRlbCgwLCAmcmVnX3NldC0+c2VxX29mZnNldCk7CisJd3JpdGVsKDQsICZy ZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwl3cml0ZWwoMHhiLCAmcmVnX3NldC0+c2VxX29mZnNldCk7 CisJd3JpdGVsKDIsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwl3cml0ZWwoNywgJnJlZ19zZXQt PnNlcV9vZmZzZXQpOworCXdyaXRlbCgweGQsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwltc2xl ZXAoMTAwMCk7CisKKwlIb3N0RGlhZyA9ICh1MzIpcmVhZGwoJnJlZ19zZXQtPmhvc3RfZGlhZyk7 CisKKwl3aGlsZSAoICEoIEhvc3REaWFnICYgRElBR19XUklURV9FTkFCTEUpICkgeworCQltc2xl ZXAoMTAwKTsKKwkJSG9zdERpYWcgPSAodTMyKXJlYWRsKCZyZWdfc2V0LT5ob3N0X2RpYWcpOwor CQlwcmludGsoS0VSTl9OT1RJQ0UgIlJFU0VUR0VOMjogcmV0cnk9JXgsIGhvc3RkaWFnPSV4XG4i LAorCQkJCQlyZXRyeSwgSG9zdERpYWcpOworCisJCWlmIChyZXRyeSsrID49IDEwMCkKKwkJCXJl dHVybiAxOworCisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJBRFBfUkVTRVRfR0VOMjogSG9z dERpYWc9JXhcbiIsIEhvc3REaWFnKTsKKworCXdyaXRlbCgoSG9zdERpYWcgfCBESUFHX1JFU0VU X0FEQVBURVIpLCAmcmVnX3NldC0+aG9zdF9kaWFnKTsKKworCXNzbGVlcCgxMCk7CisKKwlIb3N0 RGlhZyA9ICh1MzIpcmVhZGwoJnJlZ19zZXQtPmhvc3RfZGlhZyk7CisJd2hpbGUgKCAoIEhvc3RE aWFnICYgRElBR19SRVNFVF9BREFQVEVSKSApIHsKKwkJbXNsZWVwKDEwMCk7CisJCUhvc3REaWFn ID0gKHUzMilyZWFkbCgmcmVnX3NldC0+aG9zdF9kaWFnKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNF ICJSRVNFVF9HRU4yOiByZXRyeT0leCwgaG9zdGRpYWc9JXhcbiIsCisJCQkJcmV0cnksIEhvc3RE aWFnKTsKKworCQlpZiAocmV0cnkrKyA+PSAxMDAwKQorCQkJcmV0dXJuIDE7CisKKwl9CisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19jaGVja19yZXNldF9nZW4yIC0JRm9yIGNvbnRy b2xsZXIgcmVzZXQgY2hlY2sKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0 YXRpYyBpbnQKK21lZ2FzYXNfY2hlY2tfcmVzZXRfZ2VuMihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5j ZSAqaW5zdGFuY2UsCisJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdz KQoreworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVt cGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9nZW4yID0gewpAQCAtNTM2LDExICs3Mjks MTMgQEAgc3RhdGljIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlIAogCS5kaXNhYmxl X2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9nZW4yLAogCS5jbGVhcl9pbnRyID0gbWVnYXNh c19jbGVhcl9pbnRyX2dlbjIsCiAJLnJlYWRfZndfc3RhdHVzX3JlZyA9IG1lZ2FzYXNfcmVhZF9m d19zdGF0dXNfcmVnX2dlbjIsCisJLmFkcF9yZXNldCA9IG1lZ2FzYXNfYWRwX3Jlc2V0X2dlbjIs CisJLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF9nZW4yLAogfTsKIAogLyoqCiAq CVRoaXMgaXMgdGhlIGVuZCBvZiBzZXQgb2YgZnVuY3Rpb25zICYgZGVmaW5pdGlvbnMKLSogCXNw ZWNpZmljIHRvIHBwYyAoZGV2aWNlaWQgOiAweDYwKSBjb250cm9sbGVycworKiAgICAgICBzcGVj aWZpYyB0byBnZW4yIChkZXZpY2VpZCA6IDB4NzgsIDB4NzkpIGNvbnRyb2xsZXJzCiAqLwogCiAv KioKQEAgLTU5OSw4ICs3OTQsNyBAQCBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kKHN0cnVjdCBt ZWdhc2FzCiAJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCiAJCQljbWQt PmZyYW1lX3BoeXNfYWRkciwgMCwgaW5zdGFuY2UtPnJlZ19zZXQpOwogCi0Jd2FpdF9ldmVudF90 aW1lb3V0KGluc3RhbmNlLT5pbnRfY21kX3dhaXRfcSwgKGNtZC0+Y21kX3N0YXR1cyAhPSBFTk9E QVRBKSwKLQkJTUVHQVNBU19JTlRFUk5BTF9DTURfV0FJVF9USU1FKkhaKTsKKwl3YWl0X2V2ZW50 KGluc3RhbmNlLT5pbnRfY21kX3dhaXRfcSwgY21kLT5jbWRfc3RhdHVzICE9IEVOT0RBVEEpOwog CiAJcmV0dXJuIDA7CiB9CkBAIC02NDgsOCArODQyLDggQEAgbWVnYXNhc19pc3N1ZV9ibG9ja2Vk X2Fib3J0X2NtZChzdHJ1Y3QgbQogCS8qCiAJICogV2FpdCBmb3IgdGhpcyBjbWQgdG8gY29tcGxl dGUKIAkgKi8KLQl3YWl0X2V2ZW50X3RpbWVvdXQoaW5zdGFuY2UtPmFib3J0X2NtZF93YWl0X3Es IChjbWQtPmNtZF9zdGF0dXMgIT0gMHhGRiksCi0JCU1FR0FTQVNfSU5URVJOQUxfQ01EX1dBSVRf VElNRSpIWik7CisJd2FpdF9ldmVudChpbnN0YW5jZS0+YWJvcnRfY21kX3dhaXRfcSwgY21kLT5j bWRfc3RhdHVzICE9IDB4RkYpOworCWNtZC0+c3luY19jbWQgPSAwOwogCiAJbWVnYXNhc19yZXR1 cm5fY21kKGluc3RhbmNlLCBjbWQpOwogCXJldHVybiAwOwpAQCAtMTEzMSwxNCArMTMyNSwyMiBA QCBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqCiAJdTMyIGZyYW1lX2Nv dW50OwogCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwogCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNl ICppbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW5zdGFuY2UgPSAoc3RydWN0 IG1lZ2FzYXNfaW5zdGFuY2UgKikKIAkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsK IAotCS8qIERvbid0IHByb2Nlc3MgaWYgd2UgaGF2ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIg ZGVhZCAqLwotCWlmIChpbnN0YW5jZS0+aHdfY3JpdF9lcnJvcikKKwlpZiAoaW5zdGFuY2UtPmlz c3VlcGVuZF9kb25lID09IDApCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCWlmIChpbnN0 YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCXJldHVybiBT Q1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlu c3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCiAJc2NtZC0+c2NzaV9kb25lID0gZG9uZTsKIAlz Y21kLT5yZXN1bHQgPSAwOwogCkBAIC0xMjc0LDYgKzE0NzYsMTggQEAgc3RhdGljIGludCBtZWdh c2FzX3NsYXZlX2FsbG9jKHN0cnVjdCBzYwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBt ZWdhcmFpZF9zYXNfa2lsbF9oYmEoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQor eworCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMw MDczU0tJTk5ZKSB8fAorCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lE X0xTSV9TQVMwMDcxU0tJTk5ZKSkgeworCQl3cml0ZWwoTUZJX1NUT1BfQURQLAorCQkJJmluc3Rh bmNlLT5yZWdfc2V0LT5yZXNlcnZlZF8wWzBdKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoTUZJX1NU T1BfQURQLAorCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKKwl9Cit9 CisKIC8qKgogICogbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjCSAtCVJldHVybnMgRlcncyBjb250 cm9sbGVyIHN0cnVjdHVyZQogICogQGluc3RhbmNlX2FkZHI6CQkJQWRkcmVzcyBvZiBhZGFwdGVy IHNvZnQgc3RhdGUKQEAgLTEyOTEsNyArMTUwNSw3IEBAIHN0YXRpYyB2b2lkIG1lZ2FzYXNfY29t cGxldGVfY21kX2RwYyh1bnMKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogSWYgd2UgaGF2 ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIgZGVhZCwgZG9ub3QgY29tcGxldGUgY21kcyAqLwot CWlmIChpbnN0YW5jZS0+aHdfY3JpdF9lcnJvcikKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5 ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IgKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tf aXJxc2F2ZSgmaW5zdGFuY2UtPmNvbXBsZXRpb25fbG9jaywgZmxhZ3MpOwpAQCAtMTMwMSw2ICsx NTE1LDExIEBAIHN0YXRpYyB2b2lkIG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYyh1bnMKIAogCXdo aWxlIChjb25zdW1lciAhPSBwcm9kdWNlcikgewogCQljb250ZXh0ID0gaW5zdGFuY2UtPnJlcGx5 X3F1ZXVlW2NvbnN1bWVyXTsKKwkJaWYgKGNvbnRleHQgPj0gaW5zdGFuY2UtPm1heF9md19jbWRz KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgY29udGV4dCB2YWx1ZSAleFxuIiwK KwkJCQljb250ZXh0KTsKKwkJCUJVRygpOworCQl9CiAKIAkJY21kID0gaW5zdGFuY2UtPmNtZF9s aXN0W2NvbnRleHRdOwogCkBAIC0xMzUwLDcgKzE1NjksNzYgQEAgc3RhdGljIHZvaWQgbWVnYXNh c19jb21wbGV0ZV9jbWRfZHBjKHVucwogc3RhdGljIGludCBtZWdhc2FzX3dhaXRfZm9yX291dHN0 YW5kaW5nKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKIHsKIAlpbnQgaTsKKwl1 MzIgcmVzZXRfaW5kZXg7CiAJdTMyIHdhaXRfdGltZSA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1F OworCXU4IGFkcHJlY292ZXJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3Rf aGVhZCBjbGlzdF9sb2NhbDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKnJlc2V0X2NtZDsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwlhZHByZWNvdmVy eSA9IGluc3RhbmNlLT5hZHByZWNvdmVyeTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0 YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCWlmIChhZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hC QV9PUEVSQVRJT05BTCkgeworCisJCUlOSVRfTElTVF9IRUFEKCZjbGlzdF9sb2NhbCk7CisJCXNw aW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxp Y2VfaW5pdCgmaW5zdGFuY2UtPmludGVybmFsX3Jlc2V0X3BlbmRpbmdfcSwKKwkJCQkmY2xpc3Rf bG9jYWwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZs YWdzKTsKKworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IEhCQSByZXNldCB3YWl0IC4u LlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCB3YWl0X3RpbWU7IGkrKykgeworCQkJbXNsZWVwKDEw MDApOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwor CQkJYWRwcmVjb3ZlcnkgPSBpbnN0YW5jZS0+YWRwcmVjb3Zlcnk7CisJCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJCWlmIChhZHByZWNvdmVy eSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChh ZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgeworCQkJcHJpbnRrKEtFUk5f Tk9USUNFICJtZWdhc2FzOiByZXNldDogU3RvcHBpbmcgSEJBLlxuIik7CisJCQlzcGluX2xvY2tf aXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCQlpbnN0YW5jZS0+YWRwcmVj b3ZlcnkJPSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gRkFJTEVEOworCQl9 CisKKwkJcmVzZXRfaW5kZXgJPSAwOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmNsaXN0X2xvY2Fs KSkgeworCQkJcmVzZXRfY21kCT0gbGlzdF9lbnRyeSgoJmNsaXN0X2xvY2FsKS0+bmV4dCwKKwkJ CQkJCXN0cnVjdCBtZWdhc2FzX2NtZCwgbGlzdCk7CisJCQlsaXN0X2RlbF9pbml0KCZyZXNldF9j bWQtPmxpc3QpOworCQkJaWYgKHJlc2V0X2NtZC0+c2NtZCkgeworCQkJCXJlc2V0X2NtZC0+c2Nt ZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6 JXAgcmVzZXQgWyUwMnhdLCAlI2x4XG4iLAorCQkJCQlyZXNldF9pbmRleCwgcmVzZXRfY21kLAor CQkJCQlyZXNldF9jbWQtPnNjbWQtPmNtbmRbMF0sCisJCQkJCXJlc2V0X2NtZC0+c2NtZC0+c2Vy aWFsX251bWJlcik7CisKKwkJCQlyZXNldF9jbWQtPnNjbWQtPnNjc2lfZG9uZShyZXNldF9jbWQt PnNjbWQpOworCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgcmVzZXRfY21kKTsKKwkJ CX0gZWxzZSBpZiAocmVzZXRfY21kLT5zeW5jX2NtZCkgeworCQkJCXByaW50ayhLRVJOX05PVElD RSAibWVnYXNhczolcCBzeW5jaCBjbWRzIgorCQkJCQkJInJlc2V0IHF1ZXVlXG4iLAorCQkJCQkJ cmVzZXRfY21kKTsKKworCQkJCXJlc2V0X2NtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CisJCQkJ aW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJCQlyZXNldF9jbWQt PmZyYW1lX3BoeXNfYWRkciwKKwkJCQkJCTAsIGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCX0gZWxz ZSB7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiAlcCB1bmV4cGVjdGVkIgorCQkJ CQkiY21kcyBsc3RcbiIsCisJCQkJCXJlc2V0X2NtZCk7CisJCQl9CisJCQlyZXNldF9pbmRleCsr OworCQl9CisKKwkJcmV0dXJuIFNVQ0NFU1M7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IHdhaXRf dGltZTsgaSsrKSB7CiAKQEAgLTEzNzMsNiArMTY2MSw3IEBAIHN0YXRpYyBpbnQgbWVnYXNhc193 YWl0X2Zvcl9vdXRzdGFuZGluZygKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJmluc3RhbmNlLT5m d19vdXRzdGFuZGluZykpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IHBl bmRpbmcgY21kcyBhZnRlciByZXNldFxuIik7CiAJCS8qCiAJCSogU2VuZCBzaWduYWwgdG8gRlcg dG8gc3RvcCBwcm9jZXNzaW5nIGFueSBwZW5kaW5nIGNtZHMuCiAJCSogVGhlIGNvbnRyb2xsZXIg d2lsbCBiZSB0YWtlbiBvZmZsaW5lIGJ5IHRoZSBPUyBub3cuCkBAIC0xMzg4LDEwICsxNjc3LDE0 IEBAIHN0YXRpYyBpbnQgbWVnYXNhc193YWl0X2Zvcl9vdXRzdGFuZGluZygKIAkJCQkmaW5zdGFu Y2UtPnJlZ19zZXQtPmluYm91bmRfZG9vcmJlbGwpOwogCQl9CiAJCW1lZ2FzYXNfZHVtcF9wZW5k aW5nX2ZyYW1lcyhpbnN0YW5jZSk7Ci0JCWluc3RhbmNlLT5od19jcml0X2Vycm9yID0gMTsKKwkJ c3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCQlpbnN0YW5j ZS0+YWRwcmVjb3ZlcnkJPSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIEZBSUxF RDsKIAl9CiAKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczogbm8gcGVuZGluZyBj bWRzIGFmdGVyIHJlc2V0XG4iKTsKKwogCXJldHVybiBTVUNDRVNTOwogfQogCkBAIC0xNDEzLDcg KzE3MDYsNyBAQCBzdGF0aWMgaW50IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzdHJ1Y3QgCiAJc2Nt ZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNjbWQsICJtZWdhc2FzOiBSRVNFVCAtJWxkIGNtZD0leCBy ZXRyaWVzPSV4XG4iLAogCQkgc2NtZC0+c2VyaWFsX251bWJlciwgc2NtZC0+Y21uZFswXSwgc2Nt ZC0+cmV0cmllcyk7CiAKLQlpZiAoaW5zdGFuY2UtPmh3X2NyaXRfZXJyb3IpIHsKKwlpZiAoaW5z dGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpIHsKIAkJcHJp bnRrKEtFUk5fRVJSICJtZWdhc2FzOiBjYW5ub3QgcmVjb3ZlciBmcm9tIHByZXZpb3VzIHJlc2V0 ICIKIAkJICAgICAgICJmYWlsdXJlc1xuIik7CiAJCXJldHVybiBGQUlMRUQ7CkBAIC0xNTY4LDcg KzE4NjEsOCBAQCBtZWdhc2FzX3NlcnZpY2VfYWVuKHN0cnVjdCBtZWdhc2FzX2luc3RhCiAJaW5z dGFuY2UtPmFlbl9jbWQgPSBOVUxMOwogCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21k KTsKIAotCWlmIChpbnN0YW5jZS0+dW5sb2FkID09IDApIHsKKwlpZiAoKGluc3RhbmNlLT51bmxv YWQgPT0gMCkgJiYKKwkJKChpbnN0YW5jZS0+aXNzdWVwZW5kX2RvbmUgPT0gMSkpKSB7CiAJCXN0 cnVjdCBtZWdhc2FzX2Flbl9ldmVudCAqZXY7CiAJCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwg R0ZQX0FUT01JQyk7CiAJCWlmICghZXYpIHsKQEAgLTE2NjMsNiArMTk1Nyw5IEBAIG1lZ2FzYXNf Y29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2luc3QKIAlzdHJ1Y3QgbWVnYXNhc19oZWFkZXIg KmhkciA9ICZjbWQtPmZyYW1lLT5oZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIGZs YWcgZm9yIHRoZSByZXRyeSByZXNldCAqLworCWNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0ID0gMDsK KwogCWlmIChjbWQtPnNjbWQpCiAJCWNtZC0+c2NtZC0+U0NwLnB0ciA9IE5VTEw7CiAKQEAgLTE3 ODMsMzkgKzIwODAsMzAxIEBAIG1lZ2FzYXNfY29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2lu c3QKIH0KIAogLyoqCisgKiBtZWdhc2FzX2lzc3VlX3BlbmRpbmdfY21kc19hZ2FpbiAtCWlzc3Vl IGFsbCBwZW5kaW5nIGNtZHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWluIEZX IGFnYWluIGJlY2F1c2Ugb2YgdGhlIGZ3IHJlc2V0CisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIg c29mdCBzdGF0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfaXNzdWVfcGVuZGlu Z19jbWRzX2FnYWluKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1 Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsaXN0X2xvY2FsOworCXVu aW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjbGFzc19sb2NhbGU7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwl1MzIgc2VxX251bTsKKworCUlOSVRfTElTVF9IRUFEKCZjbGlzdF9sb2NhbCk7 CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCWxpc3Rf c3BsaWNlX2luaXQoJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EsICZjbGlzdF9s b2NhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFn cyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNsaXN0X2xvY2FsKSkgeworCQljbWQJPSBsaXN0 X2VudHJ5KCgmY2xpc3RfbG9jYWwpLT5uZXh0LAorCQkJCQlzdHJ1Y3QgbWVnYXNhc19jbWQsIGxp c3QpOworCQlsaXN0X2RlbF9pbml0KCZjbWQtPmxpc3QpOworCisJCWlmIChjbWQtPnN5bmNfY21k IHx8IGNtZC0+c2NtZCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IGNv bW1hbmQgJXAsICVwOiVkIgorCQkJCSJkZXRlY3RlZCB0byBiZSBwZW5kaW5nIHdoaWxlIEhCQSBy ZXNldC5cbiIsCisJCQkJCWNtZCwgY21kLT5zY21kLCBjbWQtPnN5bmNfY21kKTsKKworCQkJY21k LT5yZXRyeV9mb3JfZndfcmVzZXQrKzsKKworCQkJaWYgKGNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0 ID09IDMpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogY21kICVwLCAl cDolZCIKKwkJCQkJIndhcyB0cmllZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgcmVzZXQuIgorCQkJ CQkiU2h1dHRpbmcgZG93biB0aGUgSEJBXG4iLAorCQkJCQljbWQsIGNtZC0+c2NtZCwgY21kLT5z eW5jX2NtZCk7CisJCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKKworCQkJCWlu c3RhbmNlLT5hZHByZWNvdmVyeSA9CisJCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOwor CQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmIChjbWQtPnN5bmNfY21kID09IDEpIHsKKwkJ CWlmIChjbWQtPnNjbWQpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczog dW5leHBlY3RlZCIKKwkJCQkJImNtZCBhdHRhY2hlZCB0byBpbnRlcm5hbCBjb21tYW5kIVxuIik7 CisJCQl9CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6ICVwIHN5bmNocm9ub3VzIGNt ZCIKKwkJCQkJCSJvbiB0aGUgaW50ZXJuYWwgcmVzZXQgcXVldWUsIgorCQkJCQkJImlzc3VlIGl0 IGFnYWluLlxuIiwgY21kKTsKKwkJCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CisJCQlpbnN0 YW5jZS0+aW5zdGFuY2V0LT5maXJlX2NtZChpbnN0YW5jZSwKKwkJCQkJCQljbWQtPmZyYW1lX3Bo eXNfYWRkciAsCisJCQkJCQkJMCwgaW5zdGFuY2UtPnJlZ19zZXQpOworCQl9IGVsc2UgaWYgKGNt ZC0+c2NtZCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiAlcCBzY3NpIGNtZCBb JTAyeF0sJSNseCIKKwkJCSJkZXRlY3RlZCBvbiB0aGUgaW50ZXJuYWwgcXVldWUsIGlzc3VlIGFn YWluLlxuIiwKKwkJCWNtZCwgY21kLT5zY21kLT5jbW5kWzBdLCBjbWQtPnNjbWQtPnNlcmlhbF9u dW1iZXIpOworCisJCQlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCQkJ aW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJCWNtZC0+ZnJhbWVf cGh5c19hZGRyLAorCQkJCQljbWQtPmZyYW1lX2NvdW50LTEsIGluc3RhbmNlLT5yZWdfc2V0KTsK KwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgdW5leHBlY3Rl ZCBjbWQgb24gdGhlIgorCQkJCSJpbnRlcm5hbCByZXNldCBkZWZlciBsaXN0IHdoaWxlIHJlLWlz c3VlISFcbiIsCisJCQkJY21kKTsKKwkJfQorCX0KKworCWlmIChpbnN0YW5jZS0+YWVuX2NtZCkg eworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogYWVuX2NtZCBpbiBkZWYgcHJv Y2Vzc1xuIik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgaW5zdGFuY2UtPmFlbl9j bWQpOworCisJCWluc3RhbmNlLT5hZW5fY21kCT0gTlVMTDsKKwl9CisKKwkvKgorCSogSW5pdGlh dGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQorCSovCisJc2VxX251bSA9 IGluc3RhbmNlLT5sYXN0X3NlcV9udW07CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMucmVzZXJ2ZWQg PSAwOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmxvY2FsZSA9IE1SX0VWVF9MT0NBTEVfQUxMOwor CWNsYXNzX2xvY2FsZS5tZW1iZXJzLmNsYXNzID0gTVJfRVZUX0NMQVNTX0RFQlVHOworCisJbWVn YXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIHNlcV9udW0sIGNsYXNzX2xvY2FsZS53b3JkKTsK K30KKworLyoqCisgKiBNb3ZlIHRoZSBpbnRlcm5hbCByZXNldCBwZW5kaW5nIGNvbW1hbmRzIHRv IGEgZGVmZXJyZWQgcXVldWUuCisgKgorICogV2UgbW92ZSB0aGUgY29tbWFuZHMgcGVuZGluZyBh dCBpbnRlcm5hbCByZXNldCB0aW1lIHRvIGEKKyAqIHBlbmRpbmcgcXVldWUuIFRoaXMgcXVldWUg d291bGQgYmUgZmx1c2hlZCBhZnRlciBzdWNjZXNzZnVsCisgKiBjb21wbGV0aW9uIG9mIHRoZSBp bnRlcm5hbCByZXNldCBzZXF1ZW5jZS4gaWYgdGhlIGludGVybmFsIHJlc2V0CisgKiBkaWQgbm90 IGNvbXBsZXRlIGluIHRpbWUsIHRoZSBrZXJuZWwgcmVzZXQgaGFuZGxlciB3b3VsZCBmbHVzaAor ICogdGhlc2UgY29tbWFuZHMuCisgKiovCitzdGF0aWMgdm9pZAorbWVnYXNhc19pbnRlcm5hbF9y ZXNldF9kZWZlcl9jbWRzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlz dHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlpbnQgaTsKKwl1MzIgbWF4X2NtZCA9IGluc3RhbmNl LT5tYXhfZndfY21kczsKKwl1MzIgZGVmZXJfaW5kZXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCWRlZmVyX2luZGV4ICAgICA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5j bWRfcG9vbF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgewor CQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisJCWlmIChjbWQtPnN5bmNfY21kID09IDEg fHwgY21kLT5zY21kKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IG1vdmluZyBj bWRbJWRdOiVwOiVkOiVwIgorCQkJCQkib24gdGhlIGRlZmVyIHF1ZXVlIGFzIGludGVybmFsXG4i LAorCQkJCWRlZmVyX2luZGV4LCBjbWQsIGNtZC0+c3luY19jbWQsIGNtZC0+c2NtZCk7CisKKwkJ CWlmICghbGlzdF9lbXB0eSgmY21kLT5saXN0KSkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAi bWVnYXJhaWRfc2FzOiBFUlJPUiB3aGlsZSIKKwkJCQkJIiBtb3ZpbmcgdGhpcyBjbWQ6JXAsICVk ICVwLCBpdCB3YXMiCisJCQkJCSJkaXNjb3ZlcmVkIG9uIHNvbWUgbGlzdD9cbiIsCisJCQkJCWNt ZCwgY21kLT5zeW5jX2NtZCwgY21kLT5zY21kKTsKKworCQkJCWxpc3RfZGVsX2luaXQoJmNtZC0+ bGlzdCk7CisJCQl9CisJCQlkZWZlcl9pbmRleCsrOworCQkJbGlzdF9hZGRfdGFpbCgmY21kLT5s aXN0LAorCQkJCSZpbnN0YW5jZS0+aW50ZXJuYWxfcmVzZXRfcGVuZGluZ19xKTsKKwkJfQorCX0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3Mp OworfQorCisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2Z3X3N0YXRlX2NoYW5nZV93cShzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNl ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlLCB3b3JrX2lu aXQpOworCXUzMiB3YWl0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaW5zdGFuY2Ut PmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfQURQUkVTRVRfU01fSU5GQVVMVCkgeworCQlwcmludGso S0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogZXJyb3IsIHJlY292ZXJ5IHN0ICV4IFxuIiwKKwkJ CQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkpOworCQlyZXR1cm4gOworCX0KKworCWlmIChpbnN0YW5j ZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUKSB7CisJCXByaW50 ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBGVyBkZXRlY3RlZCB0byBiZSBpbiBmYXVsdCIK KwkJCQkJInN0YXRlLCByZXN0YXJ0aW5nIGl0Li4uXG4iKTsKKworCQlpbnN0YW5jZS0+aW5zdGFu Y2V0LT5kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCQlhdG9taWNfc2V0KCZpbnN0 YW5jZS0+Zndfb3V0c3RhbmRpbmcsIDApOworCisJCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19y ZXNldF9ub19wY2lfYWNjZXNzLCAxKTsKKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+YWRwX3Jlc2V0 KGluc3RhbmNlLCBpbnN0YW5jZS0+cmVnX3NldCk7CisJCWF0b21pY19zZXQoJmluc3RhbmNlLT5m d19yZXNldF9ub19wY2lfYWNjZXNzLCAwICk7CisKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdh cmFpZF9zYXM6IEZXIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHksIgorCQkJCQkiaW5pdGlhdGluZyBu ZXh0IHN0YWdlLi4uXG4iKTsKKworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczog SEJBIHJlY292ZXJ5IHN0YXRlIG1hY2hpbmUsIgorCQkJCQkic3RhdGUgMiBzdGFydGluZy4uLlxu Iik7CisKKwkJLyp3YWl0dGluZyBmb3IgYWJvdXQgMjAgc2Vjb25kIGJlZm9yZSBzdGFydCB0aGUg c2Vjb25kIGluaXQqLworCQlmb3IgKHdhaXQgPSAwOyB3YWl0IDwgMzA7IHdhaXQrKykgeworCQkJ bXNsZWVwKDEwMDApOworCQl9CisKKwkJaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShp bnN0YW5jZSkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOmFkYXB0ZXIg bm90IHJlYWR5XG4iKTsKKworCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKKwkJ CWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CisJCQly ZXR1cm4gOworCQl9CisKKwkJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJ Q0VfSURfTFNJX1NBUzEwNjRSKSB8fAorCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJ X0RFVklDRV9JRF9ERUxMX1BFUkM1KSB8fAorCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0g UENJX0RFVklDRV9JRF9MU0lfVkVSREVfWkNSKQorCQkJKSB7CisJCQkqaW5zdGFuY2UtPmNvbnN1 bWVyID0gKmluc3RhbmNlLT5wcm9kdWNlcjsKKwkJfSBlbHNlIHsKKwkJCSppbnN0YW5jZS0+Y29u c3VtZXIgPSAwOworCQkJKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7CisJCX0KKworCQltZWdhc2Fz X2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFu Y2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNf SEJBX09QRVJBVElPTkFMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJh X2xvY2ssIGZsYWdzKTsKKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFu Y2UtPnJlZ19zZXQpOworCisJCW1lZ2FzYXNfaXNzdWVfcGVuZGluZ19jbWRzX2FnYWluKGluc3Rh bmNlKTsKKwkJaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID0gMTsKKwl9CisJcmV0dXJuIDsKK30K KworLyoqCiAgKiBtZWdhc2FzX2RlcGxldGVfcmVwbHlfcXVldWUgLQlQcm9jZXNzZXMgYWxsIGNv bXBsZXRlZCBjb21tYW5kcwogICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKICAq IEBhbHRfc3RhdHVzOgkJCQlBbHRlcm5hdGUgc3RhdHVzIHRvIGJlIHJldHVybmVkIHRvCiAgKiAJ CQkJCVNDU0kgbWlkLWxheWVyIGluc3RlYWQgb2YgdGhlIHN0YXR1cwogICogCQkJCQlyZXR1cm5l ZCBieSB0aGUgRlcKKyAqIE5vdGU6IHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBoYmEgbG9jayBo ZWxkCiAgKi8KIHN0YXRpYyBpbnQKLW1lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZShzdHJ1Y3Qg bWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHU4IGFsdF9zdGF0dXMpCittZWdhc2FzX2RlcGxl dGVfcmVwbHlfcXVldWUoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJCQl1 OCBhbHRfc3RhdHVzKQogewotCS8qCi0JICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAot CSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgCi0JICovCi0JaWYoaW5zdGFuY2UtPmluc3RhbmNldC0+ Y2xlYXJfaW50cihpbnN0YW5jZS0+cmVnX3NldCkpCisJdTMyIG1maVN0YXR1czsKKwl1MzIgZndf c3RhdGU7CisKKwlpZiAoKG1maVN0YXR1cyA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPmNoZWNrX3Jl c2V0KGluc3RhbmNlLAorCQkJCQlpbnN0YW5jZS0+cmVnX3NldCkpID09IDEpIHsKKwkJcmV0dXJu IElSUV9IQU5ETEVEOworCX0KKworCWlmICgobWZpU3RhdHVzID0gaW5zdGFuY2UtPmluc3RhbmNl dC0+Y2xlYXJfaW50cigKKwkJCQkJCWluc3RhbmNlLT5yZWdfc2V0KQorCQkJCQkJKSA9PSAwKSB7 CiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpbnN0YW5jZS0+bWZpU3RhdHVzID0gbWZpU3Rh dHVzOworCisJaWYgKChtZmlTdGF0dXMgJiBNRklfSU5UUl9GTEFHX0ZJUk1XQVJFX1NUQVRFX0NI QU5HRSkpIHsKKwkJZndfc3RhdGUgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1 c19yZWcoCisJCQkJaW5zdGFuY2UtPnJlZ19zZXQpICYgTUZJX1NUQVRFX01BU0s7CisKKwkJaWYg KGZ3X3N0YXRlICE9IE1GSV9TVEFURV9GQVVMVCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJt ZWdhcmFpZF9zYXM6IGZ3IHN0YXRlOiV4XG4iLAorCQkJCQkJZndfc3RhdGUpOworCQl9CisKKwkJ aWYgKChmd19zdGF0ZSA9PSBNRklfU1RBVEVfRkFVTFQpICYmCisJCQkJKGluc3RhbmNlLT5kaXNh YmxlT25saW5lQ3RybFJlc2V0ID09IDApKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2Fy YWlkX3Nhczogd2FpdCBhZHAgcmVzdGFydFxuIik7CisKKwkJCWlmICgoaW5zdGFuY2UtPnBkZXYt PmRldmljZSA9PQorCQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UikgfHwKKwkJCQkoaW5z dGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJCQlQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUpIHx8 CisJCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQkJUENJX0RFVklDRV9JRF9MU0lf VkVSREVfWkNSKSkgeworCisJCQkJKmluc3RhbmNlLT5jb25zdW1lciA9CisJCQkJCU1FR0FTQVNf QURQUkVTRVRfSU5QUk9HX1NJR047CisJCQl9CisKKworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCWluc3RhbmNlLT5hZHByZWNvdmVy eQk9IE1FR0FTQVNfQURQUkVTRVRfU01fSU5GQVVMVDsKKwkJCWluc3RhbmNlLT5pc3N1ZXBlbmRf ZG9uZSA9IDA7CisKKwkJCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZywgMCk7 CisJCQltZWdhc2FzX2ludGVybmFsX3Jlc2V0X2RlZmVyX2NtZHMoaW5zdGFuY2UpOworCisJCQlw cmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IGZ3U3RhdGU9JXgsIHN0YWdlOiVkXG4iLAorCQkJ CQlmd19zdGF0ZSwgaW5zdGFuY2UtPmFkcHJlY292ZXJ5KTsKKworCQkJc2NoZWR1bGVfd29yaygm aW5zdGFuY2UtPndvcmtfaW5pdCk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkJfSBlbHNl IHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogZndzdGF0ZToleCwgZGlzX09DUj0l eFxuIiwKKwkJCQlmd19zdGF0ZSwgaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQpOwor CQl9CisJfQogCi0JaWYgKGluc3RhbmNlLT5od19jcml0X2Vycm9yKQotCQlnb3RvIG91dF9kb25l OwotICAgICAgICAvKgotCSAqIFNjaGVkdWxlIHRoZSB0YXNrbGV0IGZvciBjbWQgY29tcGxldGlv bgotCSAqLwogCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5pc3JfdGFza2xldCk7Ci1vdXRf ZG9uZToKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9Ci0KIC8qKgogICogbWVnYXNhc19pc3IgLSBp c3IgZW50cnkgcG9pbnQKICAqLwogc3RhdGljIGlycXJldHVybl90IG1lZ2FzYXNfaXNyKGludCBp cnEsIHZvaWQgKmRldnApCiB7Ci0JcmV0dXJuIG1lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZSgo c3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilkZXZwLAotCQkJCQkgICBESURfT0spOworCXN0cnVj dCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWly cXJldHVybl90CXJjOworCisJaWYgKGF0b21pY19yZWFkKAorCQkmKCgoc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKilkZXZwKS0+ZndfcmVzZXRfbm9fcGNpX2FjY2VzcykpKQorCQlyZXR1cm4gSVJR X0hBTkRMRUQ7CisKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKWRldnA7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJcmMg PSAgbWVnYXNhc19kZXBsZXRlX3JlcGx5X3F1ZXVlKGluc3RhbmNlLCBESURfT0spOworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJu IHJjOwogfQogCiAvKioKQEAgLTE5NzIsNyArMjUzMSw3IEBAIG1lZ2FzYXNfdHJhbnNpdGlvbl90 b19yZWFkeShzdHJ1Y3QgbWVnYXMKIAkJCSAgICAgICAiaW4gJWQgc2Vjc1xuIiwgZndfc3RhdGUs IG1heF93YWl0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JfTsKKwl9CiAgCXByaW50ayhL RVJOX0lORk8gIm1lZ2FzYXM6IEZXIG5vdyBpbiBSZWFkeSBzdGF0ZVxuIik7CiAKIAlyZXR1cm4g MDsKQEAgLTIwNTQsNiArMjYxMyw3IEBAIHN0YXRpYyBpbnQgbWVnYXNhc19jcmVhdGVfZnJhbWVf cG9vbChzdHIKIAkgKi8KIAlzZ2xfc3ogPSBzZ2Vfc3ogKiBpbnN0YW5jZS0+bWF4X251bV9zZ2U7 CiAJZnJhbWVfY291bnQgPSAoc2dsX3N6ICsgTUVHQU1GSV9GUkFNRV9TSVpFIC0gMSkgLyBNRUdB TUZJX0ZSQU1FX1NJWkU7CisJZnJhbWVfY291bnQgPSAxNTsKIAogCS8qCiAJICogV2UgbmVlZCBv bmUgZXh0cmEgZnJhbWUgZm9yIHRoZSBNRkkgY29tbWFuZApAQCAtMjIwMSw2ICsyNzYxLDcgQEAg c3RhdGljIGludCBtZWdhc2FzX2FsbG9jX2NtZHMoc3RydWN0IG1lZwogCQljbWQgPSBpbnN0YW5j ZS0+Y21kX2xpc3RbaV07CiAJCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19j bWQpKTsKIAkJY21kLT5pbmRleCA9IGk7CisJCWNtZC0+c2NtZCA9IE5VTEw7CiAJCWNtZC0+aW5z dGFuY2UgPSBpbnN0YW5jZTsKIAogCQlsaXN0X2FkZF90YWlsKCZjbWQtPmxpc3QsICZpbnN0YW5j ZS0+Y21kX3Bvb2wpOwpAQCAtMjM2OCw3ICsyOTI5LDcgQEAgbWVnYXNhc19nZXRfbGRfbGlzdChz dHJ1Y3QgbWVnYXNhc19pbnN0YQogCiAJLyogdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGdl dCB0aGUgaW5zdGFuY2UgUEQgTElTVCAqLwogCi0JaWYgKChyZXQgPT0gMCkgJiYgKGNpLT5sZENv dW50IDwgTUFYX0xPR0lDQUxfRFJJVkVTKSkgeworCWlmICgocmV0ID09IDApICYmIChjaS0+bGRD b3VudCA8PSBNQVhfTE9HSUNBTF9EUklWRVMpKSB7CiAJCW1lbXNldChpbnN0YW5jZS0+bGRfaWRz LCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOwogCiAJCWZvciAobGRfaW5kZXggPSAwOyBsZF9p bmRleCA8IGNpLT5sZENvdW50OyBsZF9pbmRleCsrKSB7CkBAIC0yNjgyLDYgKzMyNDMsMjEgQEAg c3RhdGljIGludCBtZWdhc2FzX2luaXRfbWZpKHN0cnVjdCBtZWdhcwogCWlmIChtZWdhc2FzX2lz c3VlX2luaXRfbWZpKGluc3RhbmNlKSkKIAkJZ290byBmYWlsX2Z3X2luaXQ7CiAKKwlpbnN0YW5j ZS0+Zndfc3VwcG9ydF9pZWVlID0gMDsKKwlpbnN0YW5jZS0+Zndfc3VwcG9ydF9pZWVlID0KKwkJ KGluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZyhyZWdfc2V0KSAmCisJCTB4 MDQwMDAwMDApOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzX2luaXRfbWZpOiBmd19z dXBwb3J0X2llZWU9JWQiLAorCQkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRfaWVlZSk7CisKKwlpZiAo aW5zdGFuY2UtPmZ3X3N1cHBvcnRfaWVlZSkKKwkJaW5zdGFuY2UtPmZsYWdfaWVlZSA9IDE7CisK KwkvKiogZm9yIHBhc3N0aHJvdWdoCisJKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0 IHRoZSBQRCBMSVNULgorCSovCisKIAltZW1zZXQoaW5zdGFuY2UtPnBkX2xpc3QsIDAgLAogCQko TUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCkpKTsKIAltZWdh c2FzX2dldF9wZF9saXN0KGluc3RhbmNlKTsKQEAgLTI3MDgsNiArMzI4NCw4IEBAIHN0YXRpYyBp bnQgbWVnYXNhc19pbml0X21maShzdHJ1Y3QgbWVnYXMKIAkJbWF4X3NlY3RvcnNfMiA9IGN0cmxf aW5mby0+bWF4X3JlcXVlc3Rfc2l6ZTsKIAogCQl0bXBfc2VjdG9ycyA9IG1pbl90KHUzMiwgbWF4 X3NlY3RvcnNfMSAsIG1heF9zZWN0b3JzXzIpOworCQlpbnN0YW5jZS0+ZGlzYWJsZU9ubGluZUN0 cmxSZXNldCA9CisJCWN0cmxfaW5mby0+cHJvcGVydGllcy5Pbk9mZlByb3BlcnRpZXMuZGlzYWJs ZU9ubGluZUN0cmxSZXNldDsKIAl9CiAKIAlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9 IGluc3RhbmNlLT5tYXhfbnVtX3NnZSAqCkBAIC0yOTI5LDYgKzM1MDcsNyBAQCBtZWdhc2FzX3Jl Z2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVf RElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CiAJZGNtZC0+cGFkXzAgPSAwOworCWluc3Rh bmNlLT5sYXN0X3NlcV9udW0gPSBzZXFfbnVtOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXpl b2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9D VFJMX0VWRU5UX1dBSVQ7CiAJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKQEAgLTMwOTcsNiAr MzY3Niw3IEBAIG1lZ2FzYXNfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCAKIAogCWlu c3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopaG9zdC0+aG9zdGRhdGE7CiAJbWVt c2V0KGluc3RhbmNlLCAwLCBzaXplb2YoKmluc3RhbmNlKSk7CisJYXRvbWljX3NldCggJmluc3Rh bmNlLT5md19yZXNldF9ub19wY2lfYWNjZXNzLCAwICk7CiAKIAlpbnN0YW5jZS0+cHJvZHVjZXIg PSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKIAkJCQkJCSAgJmluc3Rh bmNlLT5wcm9kdWNlcl9oKTsKQEAgLTMxMTQsNiArMzY5NCw5IEBAIG1lZ2FzYXNfcHJvYmVfb25l KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCAKIAltZWdhc2FzX3BvbGxfd2FpdF9hZW4gPSAwOwogCWlu c3RhbmNlLT5mbGFnX2llZWUgPSAwOwogCWluc3RhbmNlLT5ldiA9IE5VTEw7CisJaW5zdGFuY2Ut Pmlzc3VlcGVuZF9kb25lID0gMTsKKwlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPSBNRUdBU0FTX0hC QV9PUEVSQVRJT05BTDsKKwltZWdhc2FzX3BvbGxfd2FpdF9hZW4gPSAwOwogCiAJaW5zdGFuY2Ut PmV2dF9kZXRhaWwgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAogCQkJCQkJICAgIHNpemVv ZihzdHJ1Y3QKQEAgLTMxMzAsNiArMzcxMyw3IEBAIG1lZ2FzYXNfcHJvYmVfb25lKHN0cnVjdCBw Y2lfZGV2ICpwZGV2LCAKIAkgKiBJbml0aWFsaXplIGxvY2tzIGFuZCBxdWV1ZXMKIAkgKi8KIAlJ TklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPmNtZF9wb29sKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5z dGFuY2UtPmludGVybmFsX3Jlc2V0X3BlbmRpbmdfcSk7CiAKIAlhdG9taWNfc2V0KCZpbnN0YW5j ZS0+Zndfb3V0c3RhbmRpbmcsMCk7CiAKQEAgLTMxMzcsNyArMzcyMSw3IEBAIG1lZ2FzYXNfcHJv YmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnN0 YW5jZS0+YWJvcnRfY21kX3dhaXRfcSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5zdGFuY2UtPmNt ZF9wb29sX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+ZmlyZV9sb2NrKTsKKwlz cGluX2xvY2tfaW5pdCgmaW5zdGFuY2UtPmhiYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW5z dGFuY2UtPmNvbXBsZXRpb25fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBvbGxfYWVuX2xvY2sp OwogCkBAIC0zMTYyLDYgKzM3NDYsOSBAQCBtZWdhc2FzX3Byb2JlX29uZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgCiAJaW5zdGFuY2UtPmZsYWcgPSAwOwogCWluc3RhbmNlLT51bmxvYWQgPSAxOwog CWluc3RhbmNlLT5sYXN0X3RpbWUgPSAwOworCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJl c2V0ID0gMTsKKworCUlOSVRfV09SSygmaW5zdGFuY2UtPndvcmtfaW5pdCwgcHJvY2Vzc19md19z dGF0ZV9jaGFuZ2Vfd3EpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIE1GSSBGaXJtd2FyZQpAQCAt MzI1Myw2ICszODQwLDkgQEAgc3RhdGljIHZvaWQgbWVnYXNhc19mbHVzaF9jYWNoZShzdHJ1Y3Qg bQogCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwogCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUg KmRjbWQ7CiAKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElD QUxfRVJST1IpCisJCXJldHVybjsKKwogCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7 CiAKIAlpZiAoIWNtZCkKQEAgLTMyOTAsNiArMzg4MCw5IEBAIHN0YXRpYyB2b2lkIG1lZ2FzYXNf c2h1dGRvd25fY29udHJvbGxlcigKIAlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKIAlzdHJ1Y3Qg bWVnYXNhc19kY21kX2ZyYW1lICpkY21kOwogCisJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9 PSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SKQorCQlyZXR1cm47CisKIAljbWQgPSBtZWdhc2Fz X2dldF9jbWQoaW5zdGFuY2UpOwogCiAJaWYgKCFjbWQpCkBAIC0zNzgxLDYgKzQzNzQsOSBAQCBz dGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9pb2N0bF9mdyhzdHJ1Y3QgCiAJc3RydWN0IG1lZ2FzYXNf aW9jcGFja2V0ICppb2M7CiAJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOwogCWlu dCBlcnJvcjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB3YWl0X3RpbWUg PSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKIAogCWlvYyA9IGttYWxsb2Moc2l6ZW9mKCppb2Mp LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvYykKQEAgLTM3OTcsOCArNDM5Myw4IEBAIHN0YXRpYyBp bnQgbWVnYXNhc19tZ210X2lvY3RsX2Z3KHN0cnVjdCAKIAkJZ290byBvdXRfa2ZyZWVfaW9jOwog CX0KIAotCWlmIChpbnN0YW5jZS0+aHdfY3JpdF9lcnJvciA9PSAxKSB7Ci0JCXByaW50ayhLRVJO X0RFQlVHICJDb250cm9sbGVyIGluIENyaXQgRVJST1JcbiIpOworCWlmIChpbnN0YW5jZS0+YWRw cmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikgeworCQlwcmludGsoS0VSTl9F UlIgIkNvbnRyb2xsZXIgaW4gY3JpdCBlcnJvclxuIik7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJ Z290byBvdXRfa2ZyZWVfaW9jOwogCX0KQEAgLTM4MTUsNiArNDQxMSwzNSBAQCBzdGF0aWMgaW50 IG1lZ2FzYXNfbWdtdF9pb2N0bF9mdyhzdHJ1Y3QgCiAJCWVycm9yID0gLUVSRVNUQVJUU1lTOwog CQlnb3RvIG91dF9rZnJlZV9pb2M7CiAJfQorCisJZm9yIChpID0gMDsgaSA8IHdhaXRfdGltZTsg aSsrKSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3Mp OworCQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSEJBX09QRVJBVElPTkFM KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdz KTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5o YmFfbG9jaywgZmxhZ3MpOworCisJCWlmICghKGkgJSBNRUdBU0FTX1JFU0VUX05PVElDRV9JTlRF UlZBTCkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogd2FpdGluZyIKKwkJCQki Zm9yIGNvbnRyb2xsZXIgcmVzZXQgdG8gZmluaXNoXG4iKTsKKwkJfQorCisJCW1zbGVlcCgxMDAw KTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7 CisJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkg eworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsK KworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FyYWlkX3NhczogdGltZWQgb3V0IHdoaWxlIgorCQkJ IndhaXRpbmcgZm9yIEhCQSB0byByZWNvdmVyXG4iKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCQln b3RvIG91dF9rZnJlZV9pb2M7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNl LT5oYmFfbG9jaywgZmxhZ3MpOworCiAJZXJyb3IgPSBtZWdhc2FzX21nbXRfZndfaW9jdGwoaW5z dGFuY2UsIHVzZXJfaW9jLCBpb2MpOwogCXVwKCZpbnN0YW5jZS0+aW9jdGxfc2VtKTsKIApAQCAt MzgyOCw2ICs0NDUzLDkgQEAgc3RhdGljIGludCBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKHN0cnVj dAogCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKIAlzdHJ1Y3QgbWVnYXNhc19h ZW4gYWVuOwogCWludCBlcnJvcjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUz MiB3YWl0X3RpbWUgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKIAogCWlmIChmaWxlLT5wcml2 YXRlX2RhdGEgIT0gZmlsZSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFzeW5j X2hlbHBlciB3YXMgbm90ICIKQEAgLTM4NDMsMTQgKzQ0NzEsNDIgQEAgc3RhdGljIGludCBtZWdh c2FzX21nbXRfaW9jdGxfYWVuKHN0cnVjdAogCWlmICghaW5zdGFuY2UpCiAJCXJldHVybiAtRU5P REVWOwogCi0JaWYgKGluc3RhbmNlLT5od19jcml0X2Vycm9yID09IDEpIHsKLQkJZXJyb3IgPSAt RU5PREVWOworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNB TF9FUlJPUikgeworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoaW5zdGFuY2UtPnVubG9h ZCA9PSAxKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCB3YWl0 X3RpbWU7IGkrKykgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ss IGZsYWdzKTsKKwkJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVS QVRJT05BTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2Nr LAorCQkJCQkJZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoIShpICUgTUVHQVNBU19S RVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6 IHdhaXRpbmcgZm9yIgorCQkJCSJjb250cm9sbGVyIHJlc2V0IHRvIGZpbmlzaFxuIik7CisJCX0K KworCQltc2xlZXAoMTAwMCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5o YmFfbG9jaywgZmxhZ3MpOworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19I QkFfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhi YV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXJhaWRfc2FzOiB0aW1lZCBv dXQgd2hpbGUgd2FpdGluZyIKKwkJCQkiZm9yIEhCQSB0byByZWNvdmVyLlxuIik7CisJCXJldHVy biAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xv Y2ssIGZsYWdzKTsKKwogCW11dGV4X2xvY2soJmluc3RhbmNlLT5hZW5fbXV0ZXgpOwogCWVycm9y ID0gbWVnYXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIGFlbi5zZXFfbnVtLAogCQkJCSAgICAg YWVuLmNsYXNzX2xvY2FsZV93b3JkKTsKZGlmZiAtcnVwTiBvbGQvZHJpdmVycy9zY3NpL21lZ2Fy YWlkL21lZ2FyYWlkX3Nhcy5oIG5ldy9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2Fz LmgKLS0tIG9sZC9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgJMjAxMC0wOS0x NyAwMjoxOTo0Ni4wMDAwMDAwMDAgLTA0MDAKKysrIG5ldy9kcml2ZXJzL3Njc2kvbWVnYXJhaWQv bWVnYXJhaWRfc2FzLmgJMjAxMC0wOS0xNyAwMjoxOTo0Ni4wMDAwMDAwMDAgLTA0MDAKQEAgLTYw LDYgKzYwLDcgQEAKICNkZWZpbmUgTUZJX1NUQVRFX1JFQURZCQkJCTB4QjAwMDAwMDAKICNkZWZp bmUgTUZJX1NUQVRFX09QRVJBVElPTkFMCQkJMHhDMDAwMDAwMAogI2RlZmluZSBNRklfU1RBVEVf RkFVTFQJCQkJMHhGMDAwMDAwMAorI2RlZmluZSAgTUZJX1JFU0VUX1JFUVVJUkVECQkJMHgwMDAw MDAwMQogCiAjZGVmaW5lIE1FR0FNRklfRlJBTUVfU0laRQkJCTY0CiAKQEAgLTczLDYgKzc0LDEy IEBACiAgKiBIT1RQTFVHCTogUmVzdW1lIGZyb20gSG90cGx1ZwogICogTUZJX1NUT1BfQURQCTog U2VuZCBzaWduYWwgdG8gRlcgdG8gc3RvcCBwcm9jZXNzaW5nCiAgKi8KKyNkZWZpbmUgV1JJVEVf U0VRVUVOQ0VfT0ZGU0VUCQkoMHgwMDAwMDAwRkMpIC8qIEkyMCAqLworI2RlZmluZSBIT1NUX0RJ QUdOT1NUSUNfT0ZGU0VUCQkoMHgwMDAwMDBGOCkgIC8qIEkyMCAqLworI2RlZmluZSBESUFHX1dS SVRFX0VOQUJMRQkJCSgweDAwMDAwMDgwKQorI2RlZmluZSBESUFHX1JFU0VUX0FEQVBURVIJCQko MHgwMDAwMDAwNCkKKworI2RlZmluZSBNRklfQURQX1JFU0VUCQkJCTB4MDAwMDAwNDAKICNkZWZp bmUgTUZJX0lOSVRfQUJPUlQJCQkJMHgwMDAwMDAwMQogI2RlZmluZSBNRklfSU5JVF9SRUFEWQkJ CQkweDAwMDAwMDAyCiAjZGVmaW5lIE1GSV9JTklUX01GSU1PREUJCQkweDAwMDAwMDA0CkBAIC00 MDIsOCArNDA5LDQwIEBAIHN0cnVjdCBtZWdhc2FzX2N0cmxfcHJvcCB7CiAJdTE2IGVjY19idWNr ZXRfbGVha19yYXRlOwogCXU4IHJlc3RvcmVfaG90c3BhcmVfb25faW5zZXJ0aW9uOwogCXU4IGV4 cG9zZV9lbmNsX2RldmljZXM7Ci0JdTggcmVzZXJ2ZWRbMzhdOworCXU4IG1haW50YWluUGRGYWls SGlzdG9yeTsKKwl1OCBkaXNhbGxvd0hvc3RSZXF1ZXN0UmVvcmRlcmluZzsKKwl1OCBhYm9ydEND T25FcnJvcjsKKwl1OCBsb2FkQmFsYW5jZU1vZGU7CisJdTggZGlzYWJsZUF1dG9EZXRlY3RCYWNr cGxhbmU7CisKKwl1OCBzbmFwVkRTcGFjZTsKKworCS8qCisJKiBBZGQgcHJvcGVydGllcyB0aGF0 IGNhbiBiZSBjb250cm9sbGVkIGJ5CisJKiBhIGJpdCBpbiB0aGUgZm9sbG93aW5nIHN0cnVjdHVy ZS4KKwkqLwogCisJc3RydWN0IHsKKwkJdTMyICAgICBjb3B5QmFja0Rpc2FibGVkICAgICAgICAg ICAgOiAxOworCQl1MzIgICAgIFNNQVJUZXJFbmFibGVkICAgICAgICAgICAgICA6IDE7CisJCXUz MiAgICAgcHJDb3JyZWN0VW5jb25maWd1cmVkQXJlYXMgIDogMTsKKwkJdTMyICAgICB1c2VGZGVP bmx5ICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgICAgIGRpc2FibGVOQ1EgICAgICAgICAg ICAgICAgICA6IDE7CisJCXUzMiAgICAgU1NEU01BUlRlckVuYWJsZWQgICAgICAgICAgIDogMTsK KwkJdTMyICAgICBTU0RQYXRyb2xSZWFkRW5hYmxlZCAgICAgICAgOiAxOworCQl1MzIgICAgIGVu YWJsZVNwaW5Eb3duVW5jb25maWd1cmVkICA6IDE7CisJCXUzMiAgICAgYXV0b0VuaGFuY2VkSW1w b3J0ICAgICAgICAgIDogMTsKKwkJdTMyICAgICBlbmFibGVTZWNyZXRLZXlDb250cm9sICAgICAg OiAxOworCQl1MzIgICAgIGRpc2FibGVPbmxpbmVDdHJsUmVzZXQgICAgICA6IDE7CisJCXUzMiAg ICAgYWxsb3dCb290V2l0aFBpbm5lZENhY2hlICAgIDogMTsKKwkJdTMyICAgICBkaXNhYmxlU3Bp bkRvd25IUyAgICAgICAgICAgOiAxOworCQl1MzIgICAgIGVuYWJsZUpCT0QgICAgICAgICAgICAg ICAgICA6IDE7CisJCXUzMiAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIDoxODsKKwl9 IE9uT2ZmUHJvcGVydGllczsKKwl1OCBhdXRvU25hcFZEU3BhY2U7CisJdTggdmlld1NwYWNlOwor CXUxNiBzcGluRG93blRpbWU7CisJdTggIHJlc2VydmVkWzI0XTsKIH0gX19wYWNrZWQ7CiAKIC8q CkBAIC03MDQsNiArNzQzLDEyIEBAIHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyB7CiAgKi8KICNk ZWZpbmUgSVNfRE1BNjQJCQkJKHNpemVvZihkbWFfYWRkcl90KSA9PSA4KQogCisjZGVmaW5lIE1G SV9YU0NBTEVfT01SMF9DSEFOR0VfSU5URVJSVVBUCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUZJ X0lOVFJfRkxBR19SRVBMWV9NRVNTQUdFCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNRklfSU5UUl9G TEFHX0ZJUk1XQVJFX1NUQVRFX0NIQU5HRQkJMHgwMDAwMDAwMgorI2RlZmluZSBNRklfRzJfT1VU Qk9VTkRfRE9PUkJFTExfQ0hBTkdFX0lOVEVSUlVQVAkweDAwMDAwMDA0CisKICNkZWZpbmUgTUZJ X09CX0lOVFJfU1RBVFVTX01BU0sJCQkweDAwMDAwMDAyCiAjZGVmaW5lIE1GSV9QT0xMX1RJTUVP VVRfU0VDUwkJCTYwCiAjZGVmaW5lIE1FR0FTQVNfQ09NUExFVElPTl9USU1FUl9JTlRFUlZBTCAg ICAgIChIWi8xMCkKQEAgLTcxNCw2ICs3NTksOSBAQCBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8g ewogI2RlZmluZSBNRklfUkVQTFlfU0tJTk5ZX01FU1NBR0VfSU5URVJSVVBUCTB4NDAwMDAwMDAK ICNkZWZpbmUgTUZJX1NLSU5OWV9FTkFCTEVfSU5URVJSVVBUX01BU0sJKDB4MDAwMDAwMDEpCiAK KyNkZWZpbmUgTUZJXzEwNjhfUENTUl9PRkZTRVQJCQkweDg0CisjZGVmaW5lIE1GSV8xMDY4X0ZX X0hBTkRTSEFLRV9PRkZTRVQJCTB4NjQKKyNkZWZpbmUgTUZJXzEwNjhfRldfUkVBRFkJCQkweERE REQwMDAwCiAvKgogKiByZWdpc3RlciBzZXQgZm9yIGJvdGggMTA2OCBhbmQgMTA3OCBjb250cm9s bGVycwogKiBzdHJ1Y3R1cmUgZXh0ZW5kZWQgZm9yIDEwNzggcmVnaXN0ZXJzCkBAIC03NTUsOCAr ODAzLDEwIEBAIHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCB7CiAJdTMyIAlpbmJvdW5kX2hp Z2hfcXVldWVfcG9ydCA7CS8qMDBDNGgqLwogCiAJdTMyIAlyZXNlcnZlZF81OwkJCS8qMDBDOGgq LwotCXUzMiAJaW5kZXhfcmVnaXN0ZXJzWzgyMF07CQkvKjAwQ0NoKi8KLQorCXUzMglyZXNfNlsx MV07CQkJLypDQ2gqLworCXUzMglob3N0X2RpYWc7CisJdTMyCXNlcV9vZmZzZXQ7CisJdTMyIAlp bmRleF9yZWdpc3RlcnNbODA3XTsJCS8qMDBDQ2gqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CiAKIHN0cnVjdCBtZWdhc2FzX3NnZTMyIHsKQEAgLTEyMjYsMTEgKzEyNzYsMTIgQEAgc3Ry dWN0IG1lZ2FzYXNfaW5zdGFuY2UgewogCiAJc3RydWN0IG1lZ2FzYXNfY21kICoqY21kX2xpc3Q7 CiAJc3RydWN0IGxpc3RfaGVhZCBjbWRfcG9vbDsKKwkvKiB1c2VkIHRvIHN5bmMgZmlyZSB0aGUg Y21kIHRvIGZ3ICovCiAJc3BpbmxvY2tfdCBjbWRfcG9vbF9sb2NrOworCS8qIHVzZWQgdG8gc3lu YyBmaXJlIHRoZSBjbWQgdG8gZncgKi8KKwlzcGlubG9ja190IGhiYV9sb2NrOwogCS8qIHVzZWQg dG8gc3luY2ggcHJvZHVjZXIsIGNvbnN1bWVyIHB0cnMgaW4gZHBjICovCiAJc3BpbmxvY2tfdCBj b21wbGV0aW9uX2xvY2s7Ci0JLyogdXNlZCB0byBzeW5jIGZpcmUgdGhlIGNtZCB0byBmdyAqLwot CXNwaW5sb2NrX3QgZmlyZV9sb2NrOwogCXN0cnVjdCBkbWFfcG9vbCAqZnJhbWVfZG1hX3Bvb2w7 CiAJc3RydWN0IGRtYV9wb29sICpzZW5zZV9kbWFfcG9vbDsKIApAQCAtMTI0NywxOSArMTI5OCwz NiBAQCBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSB7CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsK IAl1MzIgdW5pcXVlX2lkOworCXUzMiBmd19zdXBwb3J0X2llZWU7CiAKIAlhdG9taWNfdCBmd19v dXRzdGFuZGluZzsKLQl1MzIgaHdfY3JpdF9lcnJvcjsKKwlhdG9taWNfdCBmd19yZXNldF9ub19w Y2lfYWNjZXNzOwogCiAJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgKmluc3RhbmNl dDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXNyX3Rhc2tsZXQ7CisJc3RydWN0IHdvcmtfc3Ry dWN0IHdvcmtfaW5pdDsKIAogCXU4IGZsYWc7CiAJdTggdW5sb2FkOwogCXU4IGZsYWdfaWVlZTsK Kwl1OCBpc3N1ZXBlbmRfZG9uZTsKKwl1OCBkaXNhYmxlT25saW5lQ3RybFJlc2V0OworCXU4IGFk cHJlY292ZXJ5OwogCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lOworCXUzMiBtZmlTdGF0dXM7CisJ dTMyIGxhc3Rfc2VxX251bTsKIAogCXN0cnVjdCB0aW1lcl9saXN0IGlvX2NvbXBsZXRpb25fdGlt ZXI7CisJc3RydWN0IGxpc3RfaGVhZCBpbnRlcm5hbF9yZXNldF9wZW5kaW5nX3E7Cit9OworCitl bnVtIHsKKwlNRUdBU0FTX0hCQV9PUEVSQVRJT05BTAkJCT0gMCwKKwlNRUdBU0FTX0FEUFJFU0VU X1NNX0lORkFVTFQJCT0gMSwKKwlNRUdBU0FTX0FEUFJFU0VUX1NNX0ZXX1JFU0VUX1NVQ0NFU1MJ PSAyLAorCU1FR0FTQVNfQURQUkVTRVRfU01fT1BFUkFUSU9OQUwJCT0gMywKKwlNRUdBU0FTX0hX X0NSSVRJQ0FMX0VSUk9SCQk9IDQsCisJTUVHQVNBU19BRFBSRVNFVF9JTlBST0dfU0lHTgkJPSAw eERFQURERUFELAogfTsKIAogc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgewpAQCAt MTI3Miw2ICsxMzQwLDEwIEBAIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlIHsKIAlp bnQgKCpjbGVhcl9pbnRyKShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqKTsK IAogCXUzMiAoKnJlYWRfZndfc3RhdHVzX3JlZykoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0 IF9faW9tZW0gKik7CisJaW50ICgqYWRwX3Jlc2V0KShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAq LCBcCisJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICopOworCWludCAoKmNo ZWNrX3Jlc2V0KShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqLCBcCisJCXN0cnVjdCBtZWdhc2Fz X3JlZ2lzdGVyX3NldCBfX2lvbWVtICopOwogfTsKIAogI2RlZmluZSBNRUdBU0FTX0lTX0xPR0lD QUwoc2NwKQkJCQkJCVwKQEAgLTEyOTEsNyArMTM2Myw5IEBAIHN0cnVjdCBtZWdhc2FzX2NtZCB7 CiAJdTMyIGluZGV4OwogCXU4IHN5bmNfY21kOwogCXU4IGNtZF9zdGF0dXM7Ci0JdTE2IGFib3J0 X2FlbjsKKwl1OCBhYm9ydF9hZW47CisJdTggcmV0cnlfZm9yX2Z3X3Jlc2V0OworCiAKIAlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsK --001636b2bc5222d5460490e42178--