From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhu Lingshan Date: Fri, 15 Jun 2018 18:32:09 +0000 Subject: Re: [PATCH 01/33] TCMU PR: first commit to implement TCMU PR Message-Id: MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------58905677A2E825DEC931C867" List-Id: References: <20180615182342.6239-1-lszhu@suse.com> In-Reply-To: <20180615182342.6239-1-lszhu@suse.com> To: target-devel@vger.kernel.org This is a multi-part message in MIME format. --------------58905677A2E825DEC931C867 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I am replying my own thread, if you want to test these commits, maybe you need my tcmu-runner patch, I have attached, it works fine with PR register, reserve, clear, release and preempt. Or you can use my repo directly: https://github.com/ls-zhu/tcmu-runner/tree/rbd_v2_pr It only works for Ceph RBD as backend for now, because other TCMU storage like qcow or a file does not have something like metadata. If we want such support for devices other than RBD, we may change their handler in tcmu-runner, like allocate some sectors works like metadata. I know gluster may support this, we can implement it after kernel side stabilized. Thanks, BR Zhu Lingshan On 2018/6/16 2:23, Zhu Lingshan wrote: > These commits and the following intend to implement Persistent > Reservation operations for TCMU devices. > > This series of commits would implement such PR operations: > PR_Out_Register, PR_Out_Reserve, PR_Out_Clear, PR_Out_Preempt, > PR_Out_Release and PR_In_ReadKeys. > > Next wave of patches will contain the other PR operations. > > This patch added a struct tcmu_pr_info to store PR information > for the handling functions, added command codes and attrs for > netlink interfaces. > > Design note: > In order to get consistent Persistent Reservation results from > multiple targets hosting the same TCMU device(like Ceph RBD), > this solution stores a string on the device itself(like RBD metadata). > > Everytime when kernel receive a PR request against a TCMU device, > it will query this string(a netlink attr carried by a netlink cmd). > Then decide whether the PR request should be performed, after > processing, it will update this string. > > For example: > When receive a PR Reserve request, kernel will send a netlink > message to tcmu-runner, try to get the string, tcmu-runner will > response, send the PR info string to kernel. Then kernel will > decode the string, find information like key, reservation holder, > then process this request. After processing, it will update the > string, send the updated string to tcmu-runner, so that tcmu-runner > will write it back to the device(like RBD metadata). > > So we make the device itself as a "single" response point, (with > locks protection) we will get a consistent result even more than one > initiators sending multiple PR requests via multiple targets. > > Signed-off-by: Zhu Lingshan > --- > include/uapi/linux/target_core_user.h | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/include/uapi/linux/target_core_user.h b/include/uapi/linux/target_core_user.h > index 0be80f72646b..2d5c3e55d3f8 100644 > --- a/include/uapi/linux/target_core_user.h > +++ b/include/uapi/linux/target_core_user.h > @@ -132,9 +132,13 @@ enum tcmu_genl_cmd { > TCMU_CMD_ADDED_DEVICE, > TCMU_CMD_REMOVED_DEVICE, > TCMU_CMD_RECONFIG_DEVICE, > + TCMU_CMD_GET_PR_INFO, > + TCMU_CMD_SET_PR_INFO, > TCMU_CMD_ADDED_DEVICE_DONE, > TCMU_CMD_REMOVED_DEVICE_DONE, > TCMU_CMD_RECONFIG_DEVICE_DONE, > + TCMU_CMD_GET_PR_INFO_DONE, > + TCMU_CMD_SET_PR_INFO_DONE, > TCMU_CMD_SET_FEATURES, > __TCMU_CMD_MAX, > }; > @@ -151,8 +155,23 @@ enum tcmu_genl_attr { > TCMU_ATTR_CMD_STATUS, > TCMU_ATTR_DEVICE_ID, > TCMU_ATTR_SUPP_KERN_CMD_REPLY, > + TCMU_ATTR_PR_INFO, > __TCMU_ATTR_MAX, > }; > #define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1) > > +/* This struct help to store the Persistent Reservation which we > + * are handling, it is encoded from or decoded to the string buffer in > + * "struct tcmu_dev_pr_info" > + */ > +struct tcmu_pr_info { > + u32 vers; /* on disk format version number */ > + u32 seq; /* sequence number bumped every xattr write */ > + struct tcmu_scsi2_rsv *scsi2_rsv; /* SCSI2 reservation if any */ > + u32 gen; /* PR generation number */ > + struct tcmu_pr_rsv *rsv; /* SCSI3 reservation if any */ > + u32 num_regs; /* number of registrations */ > + struct list_head regs; /* list of registrations */ > +}; > + > #endif --------------58905677A2E825DEC931C867 Content-Type: text/plain; charset=UTF-8; name="TCMU-RUNNER-0001-pr_out_register-and-pr_in_readkeys-can-work.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="TCMU-RUNNER-0001-pr_out_register-and-pr_in_readkeys-can-work"; filename*1=".patch" RnJvbSA2YTcwMjlmMDNkMDkyYTg2YzkxMjZiYjRhNzJhYjdjNDRiNWFiZDZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBaaHUgTGluZ3NoYW4gPGxzemh1QHN1c2UuY29tPgpE YXRlOiBGcmksIDExIE1heSAyMDE4IDE2OjU0OjUxICswODAwClN1YmplY3Q6IFtQQVRDSF0g cHJfb3V0X3JlZ2lzdGVyIGFuZCBwcl9pbl9yZWFka2V5cyBjYW4gd29yawoKU2lnbmVkLW9m Zi1ieTogWmh1IExpbmdzaGFuIDxsc3podUBzdXNlLmNvbT4KLS0tCiBsaWJ0Y211LmMgICAg ICAgICAgICAgICAgfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystCiBsaWJ0Y211LmggICAgICAgICAgICAgICAgfCAgNCArKwogbWFpbi5jICAgICAgICAg ICAgICAgICAgIHwgIDIgKwogcmJkLmMgICAgICAgICAgICAgICAgICAgIHwgMzYgKysrKysr KysrKysrKysrCiB0YXJnZXRfY29yZV91c2VyX2xvY2FsLmggfCAgNyArKy0KIHRjbXUtcnVu bmVyLmggICAgICAgICAgICB8ICAzICsrCiA2IGZpbGVzIGNoYW5nZWQsIDE0NyBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYnRjbXUuYyBiL2xpYnRj bXUuYwppbmRleCBkNDEzMDIwLi44MjZmNDgyIDEwMDY0NAotLS0gYS9saWJ0Y211LmMKKysr IGIvbGlidGNtdS5jCkBAIC04NCw2ICs4NCwyMCBAQCBzdGF0aWMgc3RydWN0IGdlbmxfY21k IHRjbXVfY21kc1tdID0gewogCQkuY19tYXhhdHRyCT0gVENNVV9BVFRSX01BWCwKIAkJLmNf YXR0cl9wb2xpY3kJPSB0Y211X2F0dHJfcG9saWN5LAogCX0sCisJeworCQkuY19pZAkJPSBU Q01VX0NNRF9HRVRfUFJfSU5GTywKKwkJLmNfbmFtZQkJPSAiR0VUIFBSX0lORk8iLAorCQku Y19tc2dfcGFyc2VyCT0gaGFuZGxlX25ldGxpbmssCisJCS5jX21heGF0dHIJPSBUQ01VX0FU VFJfTUFYLAorCQkuY19hdHRyX3BvbGljeQk9IHRjbXVfYXR0cl9wb2xpY3ksCisJfSwKKwl7 CisJCS5jX2lkCQk9IFRDTVVfQ01EX1NFVF9QUl9JTkZPLAorCQkuY19uYW1lCQk9ICJTRVQg UFJfSU5GTyIsCisJCS5jX21zZ19wYXJzZXIJPSBoYW5kbGVfbmV0bGluaywKKwkJLmNfbWF4 YXR0cgk9IFRDTVVfQVRUUl9NQVgsCisJCS5jX2F0dHJfcG9saWN5CT0gdGNtdV9hdHRyX3Bv bGljeSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX29wcyB0Y211X29wcyA9IHsK QEAgLTkzLDcgKzEwNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgdGNtdV9vcHMgPSB7 CiB9OwogCiBzdGF0aWMgaW50IHNlbmRfbmV0bGlua19yZXBseShzdHJ1Y3QgdGNtdWxpYl9j b250ZXh0ICpjdHgsIGludCByZXBseV9jbWQsCi0JCQkgICAgICB1aW50MzJfdCBkZXZfaWQs IGludCBzdGF0dXMpCisJCQkgICAgICB1aW50MzJfdCBkZXZfaWQsIGludCBzdGF0dXMsIGNo YXIgKmRhdGEpCiB7CiAJc3RydWN0IG5sX3NvY2sgKnNvY2sgPSBjdHgtPm5sX3NvY2s7CiAJ c3RydWN0IG5sX21zZyAqbXNnOwpAQCAtMTE3LDYgKzEzMSwxMiBAQCBzdGF0aWMgaW50IHNl bmRfbmV0bGlua19yZXBseShzdHJ1Y3QgdGNtdWxpYl9jb250ZXh0ICpjdHgsIGludCByZXBs eV9jbWQsCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZnJlZV9tc2c7CiAKKwlpZiAocmVwbHlf Y21kID09IFRDTVVfQ01EX0dFVF9QUl9JTkZPX0RPTkUpIHsKKwkJcmV0ID0gbmxhX3B1dF9z dHJpbmcobXNnLCBUQ01VX0FUVFJfUFJfSU5GTywgZGF0YSk7CisJCWlmIChyZXQgPCAwKQor CQkJZ290byBmcmVlX21zZzsKKwl9CisKIAkvKiBJZ25vcmUgYWNrLiBUaGVyZSBpcyBub3Ro aW5nIHdlIGNhbiBkby4gKi8KIAlyZXQgPSBubF9zZW5kX2F1dG8oc29jaywgbXNnKTsKIGZy ZWVfbXNnOgpAQCAtMTk3LDEyICsyMTcsNzcgQEAgc3RhdGljIGludCByZWNvbmZpZ19kZXZp Y2Uoc3RydWN0IHRjbXVsaWJfY29udGV4dCAqY3R4LCBjaGFyICpkZXZfbmFtZSwKIAlyZXR1 cm4gMDsKIH0KIAorCitzdGF0aWMgaW50IHNldF9wcl9pbmZvKHN0cnVjdCB0Y211bGliX2Nv bnRleHQgKmN0eCwgY2hhciAqZGV2X25hbWUsCisJCSAgICAgICBzdHJ1Y3QgZ2VubF9pbmZv ICppbmZvKQoreworCXN0cnVjdCB0Y211X2RldmljZSAqZGV2OworCWludCBpLCByZXQ7CisJ Y2hhciAqcHJfaW5mb19zdHIgPSBOVUxMOworCisJZGV2ID0gbG9va3VwX2Rldl9ieV9uYW1l KGN0eCwgZGV2X25hbWUsICZpKTsKKwlpZiAoIWRldikgeworCQl0Y211X2VycigiQ291bGQg bm90IHNldCBQUiBpbmZvLCBkZXZpY2UgJXM6IG5vdCBmb3VuZC5cbiIsCisJCQkgZGV2X25h bWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWRldi0+aGFuZGxlci0+c2V0 X3ByX2luZm8pIHsKKwkJdGNtdV9kZXZfZXJyKGRldiwgIlNldHRpbmcgUFIgaW5mbyBpcyBu b3Qgc3VwcG9ydGVkIHdpdGggdGhpcyBkZXZpY2UuXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RT VVBQOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tUQ01VX0FUVFJfUFJfSU5GT10pIHsKKwkJ cHJfaW5mb19zdHIgPSBubGFfZ2V0X3N0cmluZyhpbmZvLT5hdHRyc1tUQ01VX0FUVFJfUFJf SU5GT10pOworCX0KKwllbHNlIHsKKwkJdGNtdV9kZXZfZXJyKGRldiwgIkZhaWxlZCB0byBv YnRhaW4gUFIgaW5mbyBmcm9tIG5ldGxpbmsuXG4iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOwor CX0KKworCXJldCA9IGRldi0+aGFuZGxlci0+c2V0X3ByX2luZm8oZGV2LCBwcl9pbmZvX3N0 cik7CisJaWYgKHJldCA8IDApIHsKKwkJdGNtdV9kZXZfZXJyKGRldiwgIkZhaWxlZCB0byBz dG9yZSBQUiBpbmZvIHdpdGggZXJyb3IgJWQuXG4iLAorCQkJICAgICByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wcl9pbmZv KHN0cnVjdCB0Y211bGliX2NvbnRleHQgKmN0eCwgY2hhciAqZGV2X25hbWUsIGNoYXIgKipi dWYpCit7CisJc3RydWN0IHRjbXVfZGV2aWNlICpkZXY7CisJaW50IGksIHJldDsKKworCWRl diA9IGxvb2t1cF9kZXZfYnlfbmFtZShjdHgsIGRldl9uYW1lLCAmaSk7CisJaWYgKCFkZXYp IHsKKwkJdGNtdV9lcnIoIkNvdWxkIG5vdCBnZXQgUFIgaW5mbywgZGV2aWNlICVzOiBub3Qg Zm91bmQuXG4iLCBkZXZfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgh ZGV2LT5oYW5kbGVyLT5nZXRfcHJfaW5mbykgeworCQl0Y211X2Rldl9lcnIoZGV2LCAiR2V0 dGluZyBQUiBpbmZvIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGlzIGRldmljZS5cbiIpOwor CQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisKKwlyZXQgPSBkZXYtPmhhbmRsZXItPmdl dF9wcl9pbmZvKGRldiwgYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQl0Y211X2Rldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGdldCBQUiBpbmZvIHdpdGggZXJyb3IgJWQuXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGhhbmRs ZV9uZXRsaW5rKHN0cnVjdCBubF9jYWNoZV9vcHMgKnVudXNlZCwgc3RydWN0IGdlbmxfY21k ICpjbWQsCiAJCQkgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHZvaWQgKmFyZykKIHsKIAlz dHJ1Y3QgdGNtdWxpYl9jb250ZXh0ICpjdHggPSBhcmc7CiAJaW50IHJldCwgcmVwbHlfY21k LCB2ZXJzaW9uID0gaW5mby0+Z2VubGhkci0+dmVyc2lvbjsKIAljaGFyIGJ1ZlszMl07CisJ Y2hhciAqZGF0YSA9IE5VTEw7CiAKIAl0Y211X2RiZygiY21kICVkLiBHb3QgaGVhZGVyIHZl cnNpb24gJWQuIFN1cHBvcnRlZCAlZC5cbiIsCiAJCSBjbWQtPmNfaWQsIGluZm8tPmdlbmxo ZHItPnZlcnNpb24sIFRDTVVfTkxfVkVSU0lPTik7CkBAIC0yMzcsNiArMzIyLDE1IEBAIHN0 YXRpYyBpbnQgaGFuZGxlX25ldGxpbmsoc3RydWN0IG5sX2NhY2hlX29wcyAqdW51c2VkLCBz dHJ1Y3QgZ2VubF9jbWQgKmNtZCwKIAkJcmVwbHlfY21kID0gVENNVV9DTURfUkVDT05GSUdf REVWSUNFX0RPTkU7CiAJCXJldCA9IHJlY29uZmlnX2RldmljZShjdHgsIGJ1ZiwgaW5mbyk7 CiAJCWJyZWFrOworCWNhc2UgVENNVV9DTURfR0VUX1BSX0lORk86CisJCXJlcGx5X2NtZCA9 IFRDTVVfQ01EX0dFVF9QUl9JTkZPX0RPTkU7CisJCXJldCA9IGdldF9wcl9pbmZvKGN0eCwg YnVmLCAmZGF0YSk7CisJCWJyZWFrOworCWNhc2UgVENNVV9DTURfU0VUX1BSX0lORk86CisJ CXJlcGx5X2NtZCA9IFRDTVVfQ01EX1NFVF9QUl9JTkZPX0RPTkU7CisJCXJldCA9IHNldF9w cl9pbmZvKGN0eCwgYnVmLCBpbmZvKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQl0Y211 X2VycigiVW5rbm93biBuZXRsaW5rIGNvbW1hbmQgJWQuIE5ldGxpbmsgaGVhZGVyIHJlY2Vp dmVkIHZlcnNpb24gJWQuIGxpYnRjbXUgc3VwcG9ydHMgJWRcbiIsCiAJCQkgY21kLT5jX2lk LCB2ZXJzaW9uLCBUQ01VX05MX1ZFUlNJT04pOwpAQCAtMjQ2LDcgKzM0MCw3IEBAIHN0YXRp YyBpbnQgaGFuZGxlX25ldGxpbmsoc3RydWN0IG5sX2NhY2hlX29wcyAqdW51c2VkLCBzdHJ1 Y3QgZ2VubF9jbWQgKmNtZCwKIAlpZiAodmVyc2lvbiA+IDEpCiAJCXJldCA9IHNlbmRfbmV0 bGlua19yZXBseShjdHgsIHJlcGx5X2NtZCwKIAkJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRy c1tUQ01VX0FUVFJfREVWSUNFX0lEXSksCi0JCQkJcmV0KTsKKwkJCQlyZXQsIGRhdGEpOwog CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2xpYnRjbXUuaCBiL2xpYnRjbXUuaApp bmRleCBlZTdmNjNkLi5hNDNiYmJlIDEwMDY0NAotLS0gYS9saWJ0Y211LmgKKysrIGIvbGli dGNtdS5oCkBAIC03Niw2ICs3NiwxMCBAQCBzdHJ1Y3QgdGNtdWxpYl9oYW5kbGVyIHsKIAlp bnQgKCphZGRlZCkoc3RydWN0IHRjbXVfZGV2aWNlICpkZXYpOwogCXZvaWQgKCpyZW1vdmVk KShzdHJ1Y3QgdGNtdV9kZXZpY2UgKmRldik7CiAKKwlpbnQgKCpzZXRfcHJfaW5mbykoc3Ry dWN0IHRjbXVfZGV2aWNlICpkZXYsIGNoYXIgKnByX2luZm8pOworCWludCAoKmdldF9wcl9p bmZvKShzdHJ1Y3QgdGNtdV9kZXZpY2UgKmRldiwgY2hhciAqKmJ1Zik7CisKKwogCXZvaWQg KmhtX3ByaXZhdGU7IC8qIHByaXZhdGUgcHRyIGZvciBoYW5kbGVyIG1vZHVsZSAqLwogCXZv aWQgKmNvbm5lY3Rpb247IC8qIHByaXZhdGUsIGRidXMgY29ubmVjdGlvbiBmb3IgdGhpcyBz dWJ0eXBlICovCiB9OwpkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCmluZGV4IDJlMzM3 NDEuLjNiMTJlMjEgMTAwNjQ0Ci0tLSBhL21haW4uYworKysgYi9tYWluLmMKQEAgLTEwODQs NiArMTA4NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJdG1wX2hh bmRsZXIuc3VidHlwZSA9ICgqdG1wX3JfaGFuZGxlciktPnN1YnR5cGU7CiAJCXRtcF9oYW5k bGVyLmNmZ19kZXNjID0gKCp0bXBfcl9oYW5kbGVyKS0+Y2ZnX2Rlc2M7CiAJCXRtcF9oYW5k bGVyLmNoZWNrX2NvbmZpZyA9ICgqdG1wX3JfaGFuZGxlciktPmNoZWNrX2NvbmZpZzsKKwkJ dG1wX2hhbmRsZXIuc2V0X3ByX2luZm8gPSAoKnRtcF9yX2hhbmRsZXIpLT5zZXRfcHJfaW5m bzsKKwkJdG1wX2hhbmRsZXIuZ2V0X3ByX2luZm8gPSAoKnRtcF9yX2hhbmRsZXIpLT5nZXRf cHJfaW5mbzsKIAkJdG1wX2hhbmRsZXIucmVjb25maWcgPSBkZXZfcmVjb25maWc7CiAJCXRt cF9oYW5kbGVyLmFkZGVkID0gZGV2X2FkZGVkOwogCQl0bXBfaGFuZGxlci5yZW1vdmVkID0g ZGV2X3JlbW92ZWQ7CmRpZmYgLS1naXQgYS9yYmQuYyBiL3JiZC5jCmluZGV4IDBkMWZmZTku LmJjNzIyZTEgMTAwNjQ0Ci0tLSBhL3JiZC5jCisrKyBiL3JiZC5jCkBAIC03OCw2ICs3OCw5 IEBACiAjZGVmaW5lIFRDTVVfUkJEX0xPQ0tFUl9UQUdfRk1UICJ0Y211X3RhZz0laHUscmJk X2NsaWVudD0lcyIKICNkZWZpbmUgVENNVV9SQkRfTE9DS0VSX0JVRl9MRU4gMjU2CiAKKyNk ZWZpbmUgVENNVV9SQkRfUFJfSU5GT19NQVhfU0laRQk4MTkyCisjZGVmaW5lIFRDTVVfUFJf SU5GT19LRVkJCSJwcl9pbmZvIgorCiBzdHJ1Y3QgdGNtdV9yYmRfc3RhdGUgewogCXJhZG9z X3QgY2x1c3RlcjsKIAlyYWRvc19pb2N0eF90IGlvX2N0eDsKQEAgLTgwMSw2ICs4MDQsMzYg QEAgc3RhdGljIGludCB0Y211X3JiZF9jaGVja19pbWFnZV9zaXplKHN0cnVjdCB0Y211X2Rl dmljZSAqZGV2LCB1aW50NjRfdCBuZXdfc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IHJiZF9pbWFnZV90IHRjbXVfZGV2X3RvX2ltYWdlKHN0cnVjdCB0Y211X2RldmljZSAqZGV2 KTsKKworc3RhdGljIGludCB0Y211X3JiZF9wcl9zZXQoc3RydWN0IHRjbXVfZGV2aWNlICpk ZXYsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJiZF9pbWFnZV90IGltYWdl ID0gdGNtdV9kZXZfdG9faW1hZ2UoZGV2KTsKKwlyZXQgPSByYmRfbWV0YWRhdGFfc2V0KGlt YWdlLCBUQ01VX1BSX0lORk9fS0VZLCBidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCB0Y211X3JiZF9wcl9nZXQoc3RydWN0IHRjbXVfZGV2aWNlICpkZXYsIGNoYXIg KipidWYpCit7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbiA9IFRDTVVfUkJEX1BSX0lO Rk9fTUFYX1NJWkU7CisJcmJkX2ltYWdlX3QgaW1hZ2UgPSB0Y211X2Rldl90b19pbWFnZShk ZXYpOworCWNoYXIgKnByX2luZm9fc3RyID0gbWFsbG9jKFRDTVVfUkJEX1BSX0lORk9fTUFY X1NJWkUpOworCW1lbXNldChwcl9pbmZvX3N0ciwgMHgwLCBUQ01VX1JCRF9QUl9JTkZPX01B WF9TSVpFKTsKKwlpZiAoIXByX2luZm9fc3RyKSB7CisJCXRjbXVfZXJyKCJOb3QgZW5vdWdo IG1lbW9yeSBmb3IgZ2V0dGluZyBQUiBpbmZvLlxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCXJldCA9IHJiZF9tZXRhZGF0YV9nZXQoaW1hZ2UsIFRDTVVfUFJfSU5GT19LRVks IHByX2luZm9fc3RyLCAmbGVuKTsKKwkqYnVmID0gcHJfaW5mb19zdHI7CisKKwlyZXR1cm4g cmV0OworfQorCiBzdGF0aWMgaW50IHRjbXVfcmJkX29wZW4oc3RydWN0IHRjbXVfZGV2aWNl ICpkZXYsIGJvb2wgcmVvcGVuKQogewogCXJiZF9pbWFnZV9pbmZvX3QgaW1hZ2VfaW5mbzsK QEAgLTkwNCw2ICs5MzcsNyBAQCBzdGF0aWMgaW50IHRjbXVfcmJkX29wZW4oc3RydWN0IHRj bXVfZGV2aWNlICpkZXYsIGJvb2wgcmVvcGVuKQogCXRjbXVfc2V0X2Rldl93cml0ZV9jYWNo ZV9lbmFibGVkKGRldiwgMCk7CiAKIAlmcmVlKGRldl9jZmdfZHVwKTsKKwl0Y211X3JiZF9w cl9zZXQoZGV2LCAiIik7CiAJcmV0dXJuIDA7CiAKIHN0b3BfaW1hZ2U6CkBAIC0xNDMxLDYg KzE0NjUsOCBAQCBzdHJ1Y3QgdGNtdXJfaGFuZGxlciB0Y211X3JiZF9oYW5kbGVyID0gewog CS5yZWFkCSAgICAgICA9IHRjbXVfcmJkX3JlYWQsCiAJLndyaXRlCSAgICAgICA9IHRjbXVf cmJkX3dyaXRlLAogCS5yZWNvbmZpZyAgICAgID0gdGNtdV9yYmRfcmVjb25maWcsCisJLnNl dF9wcl9pbmZvICAgPSB0Y211X3JiZF9wcl9zZXQsCisJLmdldF9wcl9pbmZvICAgPSB0Y211 X3JiZF9wcl9nZXQsCiAjaWZkZWYgTElCUkJEX1NVUFBPUlRTX0FJT19GTFVTSAogCS5mbHVz aAkgICAgICAgPSB0Y211X3JiZF9mbHVzaCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0 X2NvcmVfdXNlcl9sb2NhbC5oIGIvdGFyZ2V0X2NvcmVfdXNlcl9sb2NhbC5oCmluZGV4IDJj ZGIzZTUuLmFlZmE2ODggMTAwNjQ0Ci0tLSBhL3RhcmdldF9jb3JlX3VzZXJfbG9jYWwuaAor KysgYi90YXJnZXRfY29yZV91c2VyX2xvY2FsLmgKQEAgLTQsNyArNCw3IEBACiAvKiBUaGlz IGhlYWRlciB3aWxsIGJlIHVzZWQgYnkgYXBwbGljYXRpb24gdG9vICovCiAKICNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorLy8jaW5jbHVkZSA8 bGludXgvdWlvLmg+CiAKICNkZWZpbmUgVENNVV9WRVJTSU9OICIyLjAiCiAKQEAgLTEzMSw5 ICsxMzEsMTMgQEAgZW51bSB0Y211X2dlbmxfY21kIHsKIAlUQ01VX0NNRF9BRERFRF9ERVZJ Q0UsCiAJVENNVV9DTURfUkVNT1ZFRF9ERVZJQ0UsCiAJVENNVV9DTURfUkVDT05GSUdfREVW SUNFLAorCVRDTVVfQ01EX0dFVF9QUl9JTkZPLAorCVRDTVVfQ01EX1NFVF9QUl9JTkZPLAog CVRDTVVfQ01EX0FEREVEX0RFVklDRV9ET05FLAogCVRDTVVfQ01EX1JFTU9WRURfREVWSUNF X0RPTkUsCiAJVENNVV9DTURfUkVDT05GSUdfREVWSUNFX0RPTkUsCisJVENNVV9DTURfR0VU X1BSX0lORk9fRE9ORSwKKwlUQ01VX0NNRF9TRVRfUFJfSU5GT19ET05FLAogCVRDTVVfQ01E X1NFVF9GRUFUVVJFUywKIAlfX1RDTVVfQ01EX01BWCwKIH07CkBAIC0xNTAsNiArMTU0LDcg QEAgZW51bSB0Y211X2dlbmxfYXR0ciB7CiAJVENNVV9BVFRSX0NNRF9TVEFUVVMsCiAJVENN VV9BVFRSX0RFVklDRV9JRCwKIAlUQ01VX0FUVFJfU1VQUF9LRVJOX0NNRF9SRVBMWSwKKwlU Q01VX0FUVFJfUFJfSU5GTywKIAlfX1RDTVVfQVRUUl9NQVgsCiB9OwogI2RlZmluZSBUQ01V X0FUVFJfTUFYIChfX1RDTVVfQVRUUl9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvdGNtdS1ydW5u ZXIuaCBiL3RjbXUtcnVubmVyLmgKaW5kZXggYjQyM2ZjNS4uNzkyYmE3ZiAxMDA2NDQKLS0t IGEvdGNtdS1ydW5uZXIuaAorKysgYi90Y211LXJ1bm5lci5oCkBAIC0xMzMsNiArMTMzLDkg QEAgc3RydWN0IHRjbXVyX2hhbmRsZXIgewogCSAqIGluZGljYXRpbmcgc3VjY2Vzcy9mYWls dXJlLgogCSAqLwogCWludCAoKmdldF9sb2NrX3RhZykoc3RydWN0IHRjbXVfZGV2aWNlICpk ZXYsIHVpbnQxNl90ICp0YWcpOworCWludCAoKnNldF9wcl9pbmZvKShzdHJ1Y3QgdGNtdV9k ZXZpY2UgKmRldiwgY2hhciAqcHJfaW5mbyk7CisJaW50ICgqZ2V0X3ByX2luZm8pKHN0cnVj dCB0Y211X2RldmljZSAqZGV2LCBjaGFyICoqYnVmKTsKKwogCiAJLyoKIAkgKiBpbnRlcm5h bCBmaWVsZCwgZG9uJ3QgdG91Y2ggdGhpcwotLSAKMi4xNy4wCgo= --------------58905677A2E825DEC931C867--