From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: usb: gadget: f_fs: add the support for alternate interface setting From: Parikshit Pareek Message-Id: <20181015135416.4512-1-purohit4891@gmail.com> Date: Mon, 15 Oct 2018 19:24:05 +0530 Cc: purohit4891@gmail.com, Felipe Balbi , Greg Kroah-Hartman , Vincent Pelletier , Jerry Zhang , =?UTF-8?q?Micha=C5=82=20Nazarewicz?= , Lars-Peter Clausen , Jack Pham , John Keeping , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: SW4gRkZTIHRoZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRp bmdzIGFyZSBub3QgcHJlc2VudC4KVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBkdWUgc3VwcG9y dC4gVGhlIHVzZXIgYXBwbGljYXRpb24gaXMgcmVxdWlyZWQgdG8Kd3JpdGUgaW50ZXJmYWNlIGRl c2NyaXB0b3JzIHRvIGVwMCBmaWxlIG9mIGZ1bmN0aW9uIGZzLCBvbmUgZm9yIGVhY2ggYWx0ZXJu YXRlCmludGVyZmFjZSBzZXR0aW5nIG9mIHRoZSBzYW1lIGludGVyZmFjZSwgd2l0aCBiQWx0ZXJu YXRlU2V0dGluZyBzZXQgdG8gZGlmZmVyZW50CmFsdCBzZXR0aW5nIHZhbHVlcy4gVGhlIG9yZGVy IG9mIGludGVyZmFjZSBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggZGlmZmVyZW50CmFsdGVy bmF0ZSBpbnRlcmZhY2Ugc2V0dGluZ3MgaXMgc2FtZSBhcyBtZW50aW9uZWQgYnkgdGhlIHVzYiBz dGFuZGFyZC4gRm9yCmV4YW1wbGUsIGludGVyZmFjZSBkZXNjcmlwdG9yIHdpdGggYWx0LXNldHRp bmcgYXMgMCwgZm9sbG93ZWQgYnkgaXQncyBlbmRwb2ludApkZXNjcmlwdG9ycywgdGhlbiBpbnRl cmZhY2UgZGVzY3JpcHRvciBvZiBhbHQtc2V0dGluZyAxLCBmb2xsb3dlZCBieSBlbmRwb2ludApk ZXNjcmlwdG9ycyBvZiB0aGlzIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZ3MsIGFuZCBzbyBv bi4KU2luY2UgYWx0ZXJuYXRlIHNldHRpbmcgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZCwgZmZzX2Z1 bmNfZ2V0X2FsdCBmdW5jdGlvbiBpcwphbHNvIGltcGxlbWVudGVkIHRvIGdldCBhbHRlcm5hdGUg aW50ZXJmYWNlIHNldHRpbmdzLgoKU2lnbmVkLW9mZi1ieTogUGFyaWtzaGl0IFBhcmVlayA8cHVy b2hpdDQ4OTFAZ21haWwuY29tPgotLS0KIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2Zz LmMgfCAzMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDI1MyBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1 bmN0aW9uL2ZfZnMuYwppbmRleCAzYWRhODNkLi4xOTg2YzUxIDEwMDY0NAotLS0gYS9kcml2ZXJz L3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5j dGlvbi9mX2ZzLmMKQEAgLTg4LDcgKzg4LDYgQEAgc3RhdGljIHN0cnVjdCBmZnNfZnVuY3Rpb24g KmZmc19mdW5jX2Zyb21fdXNiKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiAKIAogc3RhdGljIHZv aWQgZmZzX2Z1bmNfZXBzX2Rpc2FibGUoc3RydWN0IGZmc19mdW5jdGlvbiAqZnVuYyk7Ci1zdGF0 aWMgaW50IF9fbXVzdF9jaGVjayBmZnNfZnVuY19lcHNfZW5hYmxlKHN0cnVjdCBmZnNfZnVuY3Rp b24gKmZ1bmMpOwogCiBzdGF0aWMgaW50IGZmc19mdW5jX2JpbmQoc3RydWN0IHVzYl9jb25maWd1 cmF0aW9uICosCiAJCQkgc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKQEAgLTE4NjgsNDYgKzE4Njcs NiBAQCBzdGF0aWMgdm9pZCBmZnNfZnVuY19lcHNfZGlzYWJsZShzdHJ1Y3QgZmZzX2Z1bmN0aW9u ICpmdW5jKQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZ1bmMtPmZmcy0+ZXBzX2xvY2ssIGZs YWdzKTsKIH0KIAotc3RhdGljIGludCBmZnNfZnVuY19lcHNfZW5hYmxlKHN0cnVjdCBmZnNfZnVu Y3Rpb24gKmZ1bmMpCi17Ci0Jc3RydWN0IGZmc19kYXRhICpmZnMgICAgICA9IGZ1bmMtPmZmczsK LQlzdHJ1Y3QgZmZzX2VwICplcCAgICAgICAgID0gZnVuYy0+ZXBzOwotCXN0cnVjdCBmZnNfZXBm aWxlICplcGZpbGUgPSBmZnMtPmVwZmlsZXM7Ci0JdW5zaWduZWQgY291bnQgICAgICAgICAgICA9 IGZmcy0+ZXBzX2NvdW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0K LQlzcGluX2xvY2tfaXJxc2F2ZSgmZnVuYy0+ZmZzLT5lcHNfbG9jaywgZmxhZ3MpOwotCXdoaWxl KGNvdW50LS0pIHsKLQkJZXAtPmVwLT5kcml2ZXJfZGF0YSA9IGVwOwotCi0JCXJldCA9IGNvbmZp Z19lcF9ieV9zcGVlZChmdW5jLT5nYWRnZXQsICZmdW5jLT5mdW5jdGlvbiwgZXAtPmVwKTsKLQkJ aWYgKHJldCkgewotCQkJcHJfZXJyKCIlczogY29uZmlnX2VwX2J5X3NwZWVkKCVzKSByZXR1cm5l ZCAlZFxuIiwKLQkJCQkJX19mdW5jX18sIGVwLT5lcC0+bmFtZSwgcmV0KTsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJcmV0ID0gdXNiX2VwX2VuYWJsZShlcC0+ZXApOwotCQlpZiAobGlrZWx5KCFyZXQp KSB7Ci0JCQllcGZpbGUtPmVwID0gZXA7Ci0JCQllcGZpbGUtPmluID0gdXNiX2VuZHBvaW50X2Rp cl9pbihlcC0+ZXAtPmRlc2MpOwotCQkJZXBmaWxlLT5pc29jID0gdXNiX2VuZHBvaW50X3hmZXJf aXNvYyhlcC0+ZXAtPmRlc2MpOwotCQl9IGVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQotCQkrK2Vw OwotCQkrK2VwZmlsZTsKLQl9Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZmcy0+d2FpdCk7 Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnVuYy0+ZmZzLT5lcHNfbG9jaywgZmxhZ3MpOwot Ci0JcmV0dXJuIHJldDsKLX0KLQotCiAvKiBQYXJzaW5nIGFuZCBidWlsZGluZyBkZXNjcmlwdG9y cyBhbmQgc3RyaW5ncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTE5 NjYsNyArMTkyNSwxMCBAQCBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmZnNfZG9fc2luZ2xlX2Rl c2MoY2hhciAqZGF0YSwgdW5zaWduZWQgbGVuLAogCQkJcHJfdmRlYnVnKCJpbnZhbGlkIGVudGl0 eSdzIHZhbHVlXG4iKTsJCVwKIAkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCQl9CQkJCQkJCVwK LQkJcmV0ID0gZW50aXR5KEZGU18gIyN0eXBlLCAmdmFsLCBfZHMsIHByaXYpOwkJXAorCQlpZiAo ZW50aXR5KQkJCQkJCVwKKwkJCXJldCA9IGVudGl0eShGRlNfICMjdHlwZSwgJnZhbCwgX2RzLCBw cml2KTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCXJldCA9IDA7CQkJCQlcCiAJCWlmICh1bmxpa2Vs eShyZXQgPCAwKSkgewkJCQlcCiAJCQlwcl9kZWJ1ZygiZW50aXR5ICIgI3R5cGUgIiglMDJ4KTsg cmV0ID0gJWRcbiIsCVwKIAkJCQkgKHZhbCksIHJldCk7CQkJCVwKQEAgLTIxMDAsNiArMjA2Miw2 NyBAQCBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBmZnNfZG9fZGVzY3ModW5zaWduZWQgY291bnQs IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxlbiwKIAl9CiB9CiAKK3N0YXRpYyBpbnQgZG9fZnVuY3Rp b25fZW5hYmxlX2ludGVyZmFjZShlbnVtIGZmc19lbnRpdHlfdHlwZSB0eXBlLCB1OCAqdmFsdWVw LAorCQkJCQlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpkZXNjLAorCQkJCQl2b2lkICpw cml2KTsKKworc3RhdGljIGludCBkb19mdW5jdGlvbl9kaXNhYmxlX2ludGVyZmFjZShlbnVtIGZm c19lbnRpdHlfdHlwZSB0eXBlLCB1OCAqdmFsdWVwLAorCQkJCQlzdHJ1Y3QgdXNiX2Rlc2NyaXB0 b3JfaGVhZGVyICpkZXNjLAorCQkJCQl2b2lkICpwcml2KTsKKworc3RhdGljIGludCBfX211c3Rf Y2hlY2sgZmZzX2RvX2Rlc2NzX2FsdF9pbnRmKHVuc2lnbmVkIGludCBjb3VudCwgY2hhciAqZGF0 YSwKKwkJCQkJdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IGludGYsCisJCQkJCXVuc2ln bmVkIGludCBhbHQsIHZvaWQgKnByaXYpCit7CisJY29uc3QgdW5zaWduZWQgaW50IF9sZW4gPSBs ZW47CisJdW5zaWduZWQgbG9uZyBudW0gPSAwOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFk ZXIgKl9kczsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVjczsKKwlmZnNf ZW50aXR5X2NhbGxiYWNrIGVudGl0eSA9IE5VTEw7CisKKwlFTlRFUigpOworCisJZm9yICg7Oykg eworCQlpbnQgcmV0OworCisJCWlmIChudW0gPT0gY291bnQpCisJCQlkYXRhID0gTlVMTDsKKwor CQlpZiAoIWRhdGEpIHsKKwkJCXByX3ZkZWJ1ZygiJXMgRXhpdGluZy4gTm8gbW9yZSBEYXRhXG4i LCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gX2xlbiAtIGxlbjsKKwkJfQorCisJCV9kcyA9ICh2b2lk ICopZGF0YTsKKwkJaWYgKF9kcy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9JTlRFUkZBQ0Up IHsKKwkJCWlkZWNzID0gKHZvaWQgKilfZHM7CisKKwkJCS8qQ2hlY2sgdGhlIGludGVyZmFjZSBu byB0byBkZWFsIHdpdGggKi8KKwkJCWlmIChpZGVjcy0+YkludGVyZmFjZU51bWJlciA9PSBpbnRm KSB7CisJCQkJaWYgKGlkZWNzLT5iQWx0ZXJuYXRlU2V0dGluZyA9PSBhbHQpCisJCQkJCWVudGl0 eSA9IGRvX2Z1bmN0aW9uX2VuYWJsZV9pbnRlcmZhY2U7CisJCQkJZWxzZQorCQkJCQllbnRpdHkg PSBkb19mdW5jdGlvbl9kaXNhYmxlX2ludGVyZmFjZTsKKwkJCX0gZWxzZSBpZiAoZW50aXR5ICYm CisJCQkJCShpZGVjcy0+YkludGVyZmFjZU51bWJlciAhPSBpbnRmKSkgeworCQkJCXByX3ZkZWJ1 ZygKKwkJCQkiJXMgRXhpdGluZy5Nb3ZlZCBwYXN0IHRoZSBpbnRlcmZhY2Ugbm9cbiIsCisJCQkJ CQkJCV9fZnVuY19fKTsKKwkJCQlyZXR1cm4gX2xlbiAtIGxlbjsKKwkJCX0KKwkJfQorCQlyZXQg PSBmZnNfZG9fc2luZ2xlX2Rlc2MoZGF0YSwgbGVuLCBlbnRpdHksIHByaXYpOworCQlpZiAodW5s aWtlbHkocmV0IDwgMCkpIHsKKwkJCXByX2VycigiJXMgRXhpdGluZyB3aXRoIGVyciAlZFxuIiwg X19mdW5jX18sIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbGVuIC09IHJldDsKKwkJ ZGF0YSArPSByZXQ7CisJCSsrbnVtOworCX0KK30KKwogc3RhdGljIGludCBfX2Zmc19kYXRhX2Rv X2VudGl0eShlbnVtIGZmc19lbnRpdHlfdHlwZSB0eXBlLAogCQkJCXU4ICp2YWx1ZXAsIHN0cnVj dCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmRlc2MsCiAJCQkJdm9pZCAqcHJpdikKQEAgLTI4MDUs MTYgKzI4MjgsMzMgQEAgc3RhdGljIGludCBfX2Zmc19mdW5jX2JpbmRfZG9fbnVtcyhlbnVtIGZm c19lbnRpdHlfdHlwZSB0eXBlLCB1OCAqdmFsdWVwLAogCQkvKiBIYW5kbGVkIGluIHByZXZpb3Vz IHBhc3MgYnkgX19mZnNfZnVuY19iaW5kX2RvX2Rlc2NzKCkgKi8KIAkJcmV0dXJuIDA7CiAKLQlj YXNlIEZGU19JTlRFUkZBQ0U6CisJY2FzZSBGRlNfSU5URVJGQUNFOiB7CisKKwkJc3RydWN0IHVz Yl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZHMgPSAodm9pZCAqKWRlc2M7CisJCWludCBpZCA9IC1F SU5WQUw7CisKIAkJaWR4ID0gKnZhbHVlcDsKLQkJaWYgKGZ1bmMtPmludGVyZmFjZXNfbnVtc1tp ZHhdIDwgMCkgewotCQkJaW50IGlkID0gdXNiX2ludGVyZmFjZV9pZChmdW5jLT5jb25mLCAmZnVu Yy0+ZnVuY3Rpb24pOwotCQkJaWYgKHVubGlrZWx5KGlkIDwgMCkpCisKKwkJaWYgKCFkcy0+YkFs dGVybmF0ZVNldHRpbmcgJiYKKwkJCShmdW5jLT5pbnRlcmZhY2VzX251bXNbaWR4XSA8IDApKSB7 CisJCQlpZCA9IHVzYl9pbnRlcmZhY2VfaWQoZnVuYy0+Y29uZiwKKwkJCQkJJmZ1bmMtPmZ1bmN0 aW9uKTsKKworCQkJaWYgKHVubGlrZWx5KGlkIDwgMCkpIHsKKwkJCQlwcl9lcnIoIiVzIHdyb25n IGludGYgdmFsdWUgYWxsb2NhdGVkJWRcbiIsCisJCQkJCQkJCV9fZnVuY19fLCBpZCk7CiAJCQkJ cmV0dXJuIGlkOworCQkJfQogCQkJZnVuYy0+aW50ZXJmYWNlc19udW1zW2lkeF0gPSBpZDsKKwkJ fSBlbHNlIGlmIChmdW5jLT5pbnRlcmZhY2VzX251bXNbaWR4XSAgPCAwKSB7CisJCQlwcl9lcnIo IiVzIEludGYgbm90IGFzc2lnbmVkIGZvciBhbHQgJWQgaW50ZiBubyAlZFxuIiwKKwkJCQkJX19m dW5jX18sIGRzLT5iQWx0ZXJuYXRlU2V0dGluZywgaWR4KTsKKwkJCXJldHVybiBpZDsKIAkJfQor CiAJCW5ld1ZhbHVlID0gZnVuYy0+aW50ZXJmYWNlc19udW1zW2lkeF07CiAJCWJyZWFrOworCX0K IAogCWNhc2UgRkZTX1NUUklORzoKIAkJLyogU3RyaW5nJyBJRHMgYXJlIGFsbG9jYXRlZCB3aGVu IGZzZl9kYXRhIGlzIGJvdW5kIHRvIGNkZXYgKi8KQEAgLTI5MjUsNiArMjk2NSwxMDcgQEAgc3Rh dGljIGludCBfX2Zmc19mdW5jX2JpbmRfZG9fb3NfZGVzYyhlbnVtIGZmc19vc19kZXNjX3R5cGUg dHlwZSwKIAlyZXR1cm4gbGVuZ3RoOwogfQogCisvKiBFbmFibGVzIHRoZSBlbmRwaW50IGJ5IGl0 J3MgRW5kcG9pbnRhZGRyZXNzLgorICogV2UgbmVlZCB0byBzZWxlY3RpdmVseSBlbmFibGUgdGhl IGVuZHBvaW50cworICogYmVsb25naW5nIHRvIGEgcGFydGljdWxhciBpbnRlcmZhY2Ugc2V0dGlu Zy4KKyAqLworc3RhdGljIGludCBmZnNfZnVuY19lcF9lbl9ieV9lcGFkZChzdHJ1Y3QgZmZzX2Z1 bmN0aW9uICpmdW5jLAorCQkJCQlpbnQgZXBfYWRkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBm ZnNfZGF0YSAqZmZzICAgICAgPSBmdW5jLT5mZnM7CisJc3RydWN0IGZmc19lcCAqZXAgICAgICAg ICA9IGZ1bmMtPmVwczsKKwlzdHJ1Y3QgZmZzX2VwZmlsZSAqZXBmaWxlID0gZmZzLT5lcGZpbGVz OworCXVuc2lnbmVkIGludCBjb3VudCAgICAgICAgICAgID0gZmZzLT5lcHNfY291bnQ7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZm dW5jLT5mZnMtPmVwc19sb2NrLCBmbGFncyk7CisJZG8geworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50 X2Rlc2NyaXB0b3IgKmRzOworCQlpbnQgZGVzY19pZHg7CisKKwkJaWYgKGZmcy0+Z2FkZ2V0LT5z cGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpCisJCQlkZXNjX2lkeCA9IDI7CisJCWVsc2UgaWYgKGZm cy0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWRlc2NfaWR4ID0gMTsKKwkJ ZWxzZQorCQkJZGVzY19pZHggPSAwOworCisJCS8qIGZhbGwtYmFjayB0byBsb3dlciBzcGVlZCBp ZiBkZXNjIG1pc3NpbmcgZm9yIGN1cnJlbnQgc3BlZWQgKi8KKwkJZG8geworCQkJZHMgPSBlcC0+ ZGVzY3NbZGVzY19pZHhdOworCQl9IHdoaWxlICghZHMgJiYgLS1kZXNjX2lkeCA+PSAwKTsKKwor CQlpZiAoIWRzKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmdW5jLT5mZnMtPmVwc19s b2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChlcF9hZGQgPT0g ZHMtPmJFbmRwb2ludEFkZHJlc3MpIHsKKwkJCWlmIChlbmFibGUpIHsKKworCQkJCWVwLT5lcC0+ ZHJpdmVyX2RhdGEgPSBlcDsKKwkJCQllcC0+ZXAtPmRlc2MgPSBkczsKKwkJCQlyZXQgPSB1c2Jf ZXBfZW5hYmxlKGVwLT5lcCk7CisJCQkJaWYgKGxpa2VseSghcmV0KSkgeworCQkJCQllcGZpbGUt PmVwID0gZXA7CisJCQkJCWVwZmlsZS0+aW4gPSB1c2JfZW5kcG9pbnRfZGlyX2luKGRzKTsKKwkJ CQkJZXBmaWxlLT5pc29jID0KKwkJCQkJCXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZHMpOworCQkJ CX0KKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZmcy0+d2FpdCk7CisJCQl9CisKKwkJCWVs c2UgeworCQkJCS8qIHBlbmRpbmcgcmVxdWVzdHMgZ2V0IG51a2VkICovCisJCQkJaWYgKGxpa2Vs eShlcC0+ZXApKQorCQkJCQl1c2JfZXBfZGlzYWJsZShlcC0+ZXApOworCisJCQkJaWYgKGVwZmls ZSkKKwkJCQkJZXBmaWxlLT5lcCA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQkrK2Vw OworCQkrK2VwZmlsZTsKKwl9IHdoaWxlICgtLWNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZmdW5jLT5mZnMtPmVwc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisK K3N0YXRpYyBpbnQgZG9fZnVuY3Rpb25fZW5fZGlzX2ludGVyZmFjZShlbnVtIGZmc19lbnRpdHlf dHlwZSB0eXBlLCB1OCAqdmFsdWVwLAorCQkJCQlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVy ICpkZXNjLAorCQkJCQl2b2lkICpwcml2LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCB1c2JfZW5k cG9pbnRfZGVzY3JpcHRvciAqZHMgPSBOVUxMOworCXN0cnVjdCBmZnNfZnVuY3Rpb24gKmZ1bmMg PSBwcml2OworCWludCByZXQgPSAwOworCisJaWYgKHR5cGUgIT0gRkZTX0VORFBPSU5UKQorCQly ZXR1cm4gMDsKKworCWRzID0gKHZvaWQgKilkZXNjOworCXByX3ZkZWJ1ZygiJXMgRVAgJXMgZHMg JXBcbiIsIGVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGRzKTsKKwlyZXQgPSBmZnNf ZnVuY19lcF9lbl9ieV9lcGFkZChmdW5jLCBkcy0+YkVuZHBvaW50QWRkcmVzcywgZW5hYmxlKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX2Z1bmN0aW9uX2VuYWJsZV9pbnRlcmZh Y2UoZW51bSBmZnNfZW50aXR5X3R5cGUgdHlwZSwgdTggKnZhbHVlcCwKKwkJCQkJc3RydWN0IHVz Yl9kZXNjcmlwdG9yX2hlYWRlciAqZGVzYywKKwkJCQkJdm9pZCAqcHJpdikKK3sKKwlyZXR1cm4g ZG9fZnVuY3Rpb25fZW5fZGlzX2ludGVyZmFjZSh0eXBlLCB2YWx1ZXAsIGRlc2MsIHByaXYsIHRy dWUpOworfQorCitzdGF0aWMgaW50IGRvX2Z1bmN0aW9uX2Rpc2FibGVfaW50ZXJmYWNlKGVudW0g ZmZzX2VudGl0eV90eXBlIHR5cGUsIHU4ICp2YWx1ZXAsCisJCQkJCXN0cnVjdCB1c2JfZGVzY3Jp cHRvcl9oZWFkZXIgKmRlc2MsCisJCQkJCXZvaWQgKnByaXYpCit7CisJcmV0dXJuIGRvX2Z1bmN0 aW9uX2VuX2Rpc19pbnRlcmZhY2UodHlwZSwgdmFsdWVwLCBkZXNjLCBwcml2LCBmYWxzZSk7Cit9 CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZfZnNfb3B0cyAqZmZzX2RvX2Z1bmN0aW9uZnNfYmlu ZChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAogCQkJCQkJc3RydWN0IHVzYl9jb25maWd1cmF0aW9u ICpjKQogewpAQCAtMzE1NSw2ICszMjk2LDE5IEBAIHN0YXRpYyBpbnQgZmZzX2Z1bmNfYmluZChz dHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsCiAKIC8qIE90aGVyIFVTQiBmdW5jdGlvbiBob29r cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisv KiBDbGVhciB0aGUgcHJldmlvdXMgYWx0IHNldHRpbmcgbWFwcGVkIGZyb20gQklUOC0xNS4KKyAq IExldCB0aGUgSW50ZXJmYWNlIG5vIHJlbWFpbiBpbnRhY3QgaW4gQklUMC03CisgKi8KKyNkZWZp bmUgRkZTX1NFVF9JTlRGX0FMVF9TRVQoaW50ZiwgYWx0KSBkbyB7CQlcCisJaWYgKGludGYgPiAt MSkgewkJCQlcCisJCWZ1bmMtPmludGVyZmFjZXNfbnVtc1tpbnRmXSAgJj0gMHhGRjsJXAorCQlm dW5jLT5pbnRlcmZhY2VzX251bXNbaW50Zl0gPQkJXAorCQkJZnVuYy0+aW50ZXJmYWNlc19udW1z W2ludGZdIHwJXAorCQkJKHNob3J0KSgoYWx0ICYgMHhmZikgPDwgOCk7CVwKKwl9CQkJCQkJXAor fQkJCQkJCQlcCit3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgZmZzX3Jlc2V0X3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmZnNfZGF0YSAqZmZzID0gY29udGFpbmVy X29mKHdvcmssCkBAIC0zMTYyLDEyICszMzE2LDMyIEBAIHN0YXRpYyB2b2lkIGZmc19yZXNldF93 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlmZnNfZGF0YV9yZXNldChmZnMpOwogfQog CitzdGF0aWMgaW50IGZmc19mdW5jX2dldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwKKwkJ CXVuc2lnbmVkIGludCBpbnRlcmZhY2UpCit7CisKKwlpbnQgaW50ZjsKKwlzdHJ1Y3QgZmZzX2Z1 bmN0aW9uICpmdW5jID0gZmZzX2Z1bmNfZnJvbV91c2IoZik7CisKKwlpbnRmID0gZmZzX2Z1bmNf cmV2bWFwX2ludGYoZnVuYywgaW50ZXJmYWNlKTsKKworCWlmICh1bmxpa2VseShpbnRmIDwgMCkp CisJCXJldHVybiBpbnRmOworCisJcmV0dXJuIChmdW5jLT5pbnRlcmZhY2VzX251bXNbaW50Zl0g Pj4gOCkgJiAweGZmOworfQorCisKIHN0YXRpYyBpbnQgZmZzX2Z1bmNfc2V0X2FsdChzdHJ1Y3Qg dXNiX2Z1bmN0aW9uICpmLAogCQkJICAgIHVuc2lnbmVkIGludGVyZmFjZSwgdW5zaWduZWQgYWx0 KQogewogCXN0cnVjdCBmZnNfZnVuY3Rpb24gKmZ1bmMgPSBmZnNfZnVuY19mcm9tX3VzYihmKTsK IAlzdHJ1Y3QgZmZzX2RhdGEgKmZmcyA9IGZ1bmMtPmZmczsKLQlpbnQgcmV0ID0gMCwgaW50ZjsK KwlpbnQgcmV0ID0gMCwgaW50ZiA9IC0xOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJc3Ry dWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAgKipkZXNjX3AgPSBOVUxMOworCisJcHJfdmRlYnVn KCIlcyBpbnRmICVkIGFsdCAlZFxuIiwgX19mdW5jX18sIGludGVyZmFjZSwgYWx0KTsKIAogCWlm IChhbHQgIT0gKHVuc2lnbmVkKS0xKSB7CiAJCWludGYgPSBmZnNfZnVuY19yZXZtYXBfaW50Zihm dW5jLCBpbnRlcmZhY2UpOwpAQCAtMzE3NSw3ICszMzQ5LDcgQEAgc3RhdGljIGludCBmZnNfZnVu Y19zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsCiAJCQlyZXR1cm4gaW50ZjsKIAl9CiAK LQlpZiAoZmZzLT5mdW5jKQorCWlmIChmZnMtPmZ1bmMgJiYgKChhbHQgPT0gLTEpIHx8IChmZnMt PnN0YXRlICE9IEZGU19BQ1RJVkUpKSkKIAkJZmZzX2Z1bmNfZXBzX2Rpc2FibGUoZmZzLT5mdW5j KTsKIAogCWlmIChmZnMtPnN0YXRlID09IEZGU19ERUFDVElWQVRFRCkgewpAQCAtMzE5NSw5ICsz MzY5LDM2IEBAIHN0YXRpYyBpbnQgZmZzX2Z1bmNfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9u ICpmLAogCX0KIAogCWZmcy0+ZnVuYyA9IGZ1bmM7Ci0JcmV0ID0gZmZzX2Z1bmNfZXBzX2VuYWJs ZShmdW5jKTsKLQlpZiAobGlrZWx5KHJldCA+PSAwKSkKKwlpZiAoZmZzLT5nYWRnZXQtPnNwZWVk ID09IFVTQl9TUEVFRF9TVVBFUikgeworCQljb3VudCA9IGZmcy0+c3NfZGVzY3NfY291bnQ7CisJ CWRlc2NfcCA9IGZ1bmMtPmZ1bmN0aW9uLnNzX2Rlc2NyaXB0b3JzOworCX0KKwlpZiAoIWNvdW50 ICYmICFkZXNjX3AgJiYgZmZzLT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJ CWNvdW50ID0gZmZzLT5oc19kZXNjc19jb3VudDsKKwkJZGVzY19wID0gZnVuYy0+ZnVuY3Rpb24u aHNfZGVzY3JpcHRvcnM7CisJfQorCWlmICghY291bnQgJiYgIWRlc2NfcCAmJiBmZnMtPmdhZGdl dC0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJY291bnQgPSBmZnMtPmZzX2Rlc2NzX2Nv dW50OworCQlkZXNjX3AgPSBmdW5jLT5mdW5jdGlvbi5mc19kZXNjcmlwdG9yczsKKwl9CisKKwlp ZiAoZGVzY19wICYmIGNvdW50KQorCQlyZXQgPSBmZnNfZG9fZGVzY3NfYWx0X2ludGYoY291bnQs ICh2b2lkICopZGVzY19wWzBdLAorCQlmZnMtPnJhd19kZXNjc19sZW5ndGgsIGludGVyZmFjZSwg YWx0LCBmdW5jKTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CisKKwlpZiAodW5saWtlbHkocmV0 IDwgMCkpCisJCXByX2VycigiJXMgZXJyICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwllbHNlCisJ CXJldCA9IDA7CisKKwlpZiAobGlrZWx5KHJldCA+PSAwKSkgeworCisJCUZGU19TRVRfSU5URl9B TFRfU0VUKGludGYsIGFsdCk7CiAJCWZmc19ldmVudF9hZGQoZmZzLCBGVU5DVElPTkZTX0VOQUJM RSk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzMxNSw3ICszNTE2LDcgQEAgc3RhdGlj IGludCBmZnNfZnVuY19yZXZtYXBfaW50ZihzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jLCB1OCBp bnRmKQogCXVuc2lnbmVkIGNvdW50ID0gZnVuYy0+ZmZzLT5pbnRlcmZhY2VzX2NvdW50OwogCiAJ Zm9yICg7IGNvdW50OyAtLWNvdW50LCArK251bXMpIHsKLQkJaWYgKCpudW1zID49IDAgJiYgKm51 bXMgPT0gaW50ZikKKwkJaWYgKCgoKm51bXMgJiAweGZmKSA+PSAwKSAmJiAoKCpudW1zICYgMHhm ZikgPT0gaW50ZikpCiAJCQlyZXR1cm4gbnVtcyAtIGZ1bmMtPmludGVyZmFjZXNfbnVtczsKIAl9 CiAKQEAgLTM1MDYsNiArMzcwNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmZnNf YWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpCiAJZnVuYy0+ZnVuY3Rpb24u YmluZCAgICA9IGZmc19mdW5jX2JpbmQ7CiAJZnVuYy0+ZnVuY3Rpb24udW5iaW5kICA9IGZmc19m dW5jX3VuYmluZDsKIAlmdW5jLT5mdW5jdGlvbi5zZXRfYWx0ID0gZmZzX2Z1bmNfc2V0X2FsdDsK KwlmdW5jLT5mdW5jdGlvbi5nZXRfYWx0ID0gZmZzX2Z1bmNfZ2V0X2FsdDsKIAlmdW5jLT5mdW5j dGlvbi5kaXNhYmxlID0gZmZzX2Z1bmNfZGlzYWJsZTsKIAlmdW5jLT5mdW5jdGlvbi5zZXR1cCAg ID0gZmZzX2Z1bmNfc2V0dXA7CiAJZnVuYy0+ZnVuY3Rpb24ucmVxX21hdGNoID0gZmZzX2Z1bmNf cmVxX21hdGNoOwo=