From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54235) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bm0xq-0001bd-0m for qemu-devel@nongnu.org; Mon, 19 Sep 2016 11:58:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bm0xk-0007eO-3J for qemu-devel@nongnu.org; Mon, 19 Sep 2016 11:58:37 -0400 Received: from smtp02.citrix.com ([66.165.176.63]:28851) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bm0xj-0007dy-U9 for qemu-devel@nongnu.org; Mon, 19 Sep 2016 11:58:32 -0400 Date: Mon, 19 Sep 2016 16:58:23 +0100 From: Wei Liu Message-ID: <20160919155823.GP30319@citrix.com> References: <1473880203-4360-1-git-send-email-paulinaszubarczyk@gmail.com> <1473880203-4360-2-git-send-email-paulinaszubarczyk@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1473880203-4360-2-git-send-email-paulinaszubarczyk@gmail.com> Subject: Re: [Qemu-devel] [PATCH v7 1/2] libs/gnttab: introduce grant copy interface List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paulina Szubarczyk Cc: xen-devel@lists.xenproject.org, roger.pau@citrix.com, wei.liu2@citrix.com, ian.jackson@eu.citrix.com, david.vrabel@citrix.com, sstabellini@kernel.org, anthony.perard@citrix.com, qemu-devel@nongnu.org On Wed, Sep 14, 2016 at 09:10:02PM +0200, Paulina Szubarczyk wrote: > In a linux part an ioctl(gntdev, IOCTL_GNTDEV_GRANT_COPY, ..) > system call is invoked. In mini-os the operation is yet not > implemented. For the OSs that does not implement gnttab the > call of the grant copy operation causes abort. > > Signed-off-by: Paulina Szubarczyk > Reviewed-by: David Vrabel Paulina, this is mostly for your information. No action is needed on your side. Thanks for putting in the effort to contribute to Xen. Because Ian prefers another way of dealing with BUILD_BUG_ON, I've sent out another patch for that. I also write the following patch to fix up this patch. ---8<--- >>From 096fef32bffaef5b3e273bdfe75d620d8a7c8792 Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Mon, 19 Sep 2016 16:50:35 +0100 Subject: [PATCH] fixup! libs/gnttab: introduce grant copy interface --- tools/libs/gnttab/linux.c | 116 +++++++++++++++++++++++----------------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/tools/libs/gnttab/linux.c b/tools/libs/gnttab/linux.c index 6bd9bd2..69b7e26 100644 --- a/tools/libs/gnttab/linux.c +++ b/tools/libs/gnttab/linux.c @@ -31,6 +31,8 @@ #include #include +#include + #include "private.h" #define DEVXEN "/dev/xen/" @@ -244,63 +246,63 @@ int osdep_gnttab_grant_copy(xengnttab_handle *xgt, int fd = xgt->fd; struct ioctl_gntdev_grant_copy copy; - XENGNTTAB_BUILD_BUG_ON(sizeof(struct ioctl_gntdev_grant_copy_segment) != - sizeof(xengnttab_grant_copy_segment_t)); - - XENGNTTAB_BUILD_BUG_ON(__alignof__(struct ioctl_gntdev_grant_copy_segment) != - __alignof__(xengnttab_grant_copy_segment_t)); - - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - source.virt) != - offsetof(xengnttab_grant_copy_segment_t, - source.virt)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - source.foreign) != - offsetof(xengnttab_grant_copy_segment_t, - source.foreign)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - source.foreign.ref) != - offsetof(xengnttab_grant_copy_segment_t, - source.foreign)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - source.foreign.offset) != - offsetof(xengnttab_grant_copy_segment_t, - source.foreign.offset)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - source.foreign.domid) != - offsetof(xengnttab_grant_copy_segment_t, - source.foreign.domid)); - - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - dest.virt) != - offsetof(xengnttab_grant_copy_segment_t, - dest.virt)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - dest.foreign) != - offsetof(xengnttab_grant_copy_segment_t, - dest.foreign)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - dest.foreign.ref) != - offsetof(xengnttab_grant_copy_segment_t, - dest.foreign)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - dest.foreign.offset) != - offsetof(xengnttab_grant_copy_segment_t, - dest.foreign.offset)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - dest.foreign.domid) != - offsetof(xengnttab_grant_copy_segment_t, - dest.foreign.domid)); - - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - len) != - offsetof(xengnttab_grant_copy_segment_t, len)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - flags) != - offsetof(xengnttab_grant_copy_segment_t, flags)); - XENGNTTAB_BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, - status) != - offsetof(xengnttab_grant_copy_segment_t, status)); + BUILD_BUG_ON(sizeof(struct ioctl_gntdev_grant_copy_segment) != + sizeof(xengnttab_grant_copy_segment_t)); + + BUILD_BUG_ON(__alignof__(struct ioctl_gntdev_grant_copy_segment) != + __alignof__(xengnttab_grant_copy_segment_t)); + + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + source.virt) != + offsetof(xengnttab_grant_copy_segment_t, + source.virt)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + source.foreign) != + offsetof(xengnttab_grant_copy_segment_t, + source.foreign)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + source.foreign.ref) != + offsetof(xengnttab_grant_copy_segment_t, + source.foreign)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + source.foreign.offset) != + offsetof(xengnttab_grant_copy_segment_t, + source.foreign.offset)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + source.foreign.domid) != + offsetof(xengnttab_grant_copy_segment_t, + source.foreign.domid)); + + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + dest.virt) != + offsetof(xengnttab_grant_copy_segment_t, + dest.virt)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + dest.foreign) != + offsetof(xengnttab_grant_copy_segment_t, + dest.foreign)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + dest.foreign.ref) != + offsetof(xengnttab_grant_copy_segment_t, + dest.foreign)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + dest.foreign.offset) != + offsetof(xengnttab_grant_copy_segment_t, + dest.foreign.offset)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + dest.foreign.domid) != + offsetof(xengnttab_grant_copy_segment_t, + dest.foreign.domid)); + + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + len) != + offsetof(xengnttab_grant_copy_segment_t, len)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + flags) != + offsetof(xengnttab_grant_copy_segment_t, flags)); + BUILD_BUG_ON(offsetof(struct ioctl_gntdev_grant_copy_segment, + status) != + offsetof(xengnttab_grant_copy_segment_t, status)); copy.segments = (struct ioctl_gntdev_grant_copy_segment *)segs; copy.count = count; -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [PATCH v7 1/2] libs/gnttab: introduce grant copy interface Date: Mon, 19 Sep 2016 16:58:23 +0100 Message-ID: <20160919155823.GP30319@citrix.com> References: <1473880203-4360-1-git-send-email-paulinaszubarczyk@gmail.com> <1473880203-4360-2-git-send-email-paulinaszubarczyk@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bm0xl-000658-7C for xen-devel@lists.xenproject.org; Mon, 19 Sep 2016 15:58:33 +0000 Content-Disposition: inline In-Reply-To: <1473880203-4360-2-git-send-email-paulinaszubarczyk@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Paulina Szubarczyk Cc: sstabellini@kernel.org, wei.liu2@citrix.com, ian.jackson@eu.citrix.com, qemu-devel@nongnu.org, david.vrabel@citrix.com, anthony.perard@citrix.com, xen-devel@lists.xenproject.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBTZXAgMTQsIDIwMTYgYXQgMDk6MTA6MDJQTSArMDIwMCwgUGF1bGluYSBTenViYXJj enlrIHdyb3RlOgo+IEluIGEgbGludXggcGFydCBhbiBpb2N0bChnbnRkZXYsIElPQ1RMX0dOVERF Vl9HUkFOVF9DT1BZLCAuLikKPiBzeXN0ZW0gY2FsbCBpcyBpbnZva2VkLiBJbiBtaW5pLW9zIHRo ZSBvcGVyYXRpb24gaXMgeWV0IG5vdAo+IGltcGxlbWVudGVkLiBGb3IgdGhlIE9TcyB0aGF0IGRv ZXMgbm90IGltcGxlbWVudCBnbnR0YWIgdGhlCj4gY2FsbCBvZiB0aGUgZ3JhbnQgY29weSBvcGVy YXRpb24gY2F1c2VzIGFib3J0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBhdWxpbmEgU3p1YmFyY3p5 ayA8cGF1bGluYXN6dWJhcmN6eWtAZ21haWwuY29tPgo+IFJldmlld2VkLWJ5OiBEYXZpZCBWcmFi ZWwgPGRhdmlkLnZyYWJlbEBjaXRyaXguY29tPgoKUGF1bGluYSwgdGhpcyBpcyBtb3N0bHkgZm9y IHlvdXIgaW5mb3JtYXRpb24uIE5vIGFjdGlvbiBpcyBuZWVkZWQgb24KeW91ciBzaWRlLiBUaGFu a3MgZm9yIHB1dHRpbmcgaW4gdGhlIGVmZm9ydCB0byBjb250cmlidXRlIHRvIFhlbi4KCkJlY2F1 c2UgSWFuIHByZWZlcnMgYW5vdGhlciB3YXkgb2YgZGVhbGluZyB3aXRoIEJVSUxEX0JVR19PTiwg SSd2ZSBzZW50Cm91dCBhbm90aGVyIHBhdGNoIGZvciB0aGF0LiAgSSBhbHNvIHdyaXRlIHRoZSBm b2xsb3dpbmcgcGF0Y2ggdG8gZml4IHVwCnRoaXMgcGF0Y2guCgotLS04PC0tLQpGcm9tIDA5NmZl ZjMyYmZmYWVmNWIzZTI3M2JkZmU3NWQ2MjBkOGE3Yzg3OTIgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCkZyb206IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkRhdGU6IE1vbiwgMTkgU2Vw IDIwMTYgMTY6NTA6MzUgKzAxMDAKU3ViamVjdDogW1BBVENIXSBmaXh1cCEgbGlicy9nbnR0YWI6 IGludHJvZHVjZSBncmFudCBjb3B5IGludGVyZmFjZQoKLS0tCiB0b29scy9saWJzL2dudHRhYi9s aW51eC5jIHwgMTE2ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS90b29scy9saWJzL2dudHRhYi9saW51eC5jIGIvdG9vbHMvbGlicy9nbnR0YWIv bGludXguYwppbmRleCA2YmQ5YmQyLi42OWI3ZTI2IDEwMDY0NAotLS0gYS90b29scy9saWJzL2du dHRhYi9saW51eC5jCisrKyBiL3Rvb2xzL2xpYnMvZ250dGFiL2xpbnV4LmMKQEAgLTMxLDYgKzMx LDggQEAKICNpbmNsdWRlIDx4ZW4vc3lzL2dudGRldi5oPgogI2luY2x1ZGUgPHhlbi9zeXMvZ250 YWxsb2MuaD4KIAorI2luY2x1ZGUgPHhlbi10b29scy9saWJzLmg+CisKICNpbmNsdWRlICJwcml2 YXRlLmgiCiAKICNkZWZpbmUgREVWWEVOICIvZGV2L3hlbi8iCkBAIC0yNDQsNjMgKzI0Niw2MyBA QCBpbnQgb3NkZXBfZ250dGFiX2dyYW50X2NvcHkoeGVuZ250dGFiX2hhbmRsZSAqeGd0LAogICAg IGludCBmZCA9IHhndC0+ZmQ7CiAgICAgc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5IGNv cHk7CiAKLSAgICBYRU5HTlRUQUJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250 ZGV2X2dyYW50X2NvcHlfc2VnbWVudCkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3QpKTsKLQotICAgIFhFTkdOVFRBQl9C VUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3Nl Z21lbnQpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsaWdub2ZfXyh4ZW5nbnR0 YWJfZ3JhbnRfY29weV9zZWdtZW50X3QpKTsKLQotICAgIFhFTkdOVFRBQl9CVUlMRF9CVUdfT04o b2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3NlZ21lbnQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UudmlydCkgIT0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRfdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS52aXJ0KSk7Ci0gICAg WEVOR05UVEFCX0JVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50 X2NvcHlfc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj ZS5mb3JlaWduKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250 dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc291cmNlLmZvcmVpZ24pKTsKLSAgICBYRU5HTlRUQUJfQlVJTERfQlVHX09OKG9mZnNl dG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29weV9zZWdtZW50LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmZvcmVpZ24ucmVmKSAhPQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmZvcmVpZ24pKTsK LSAgICBYRU5HTlRUQUJfQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZf Z3JhbnRfY29weV9zZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c291cmNlLmZvcmVpZ24ub2Zmc2V0KSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm c2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc291cmNlLmZvcmVpZ24ub2Zmc2V0KSk7Ci0gICAgWEVOR05UVEFC X0JVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X2NvcHlfc2Vn bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3JlaWdu LmRvbWlkKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFi X2dyYW50X2NvcHlfc2VnbWVudF90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc291cmNlLmZvcmVpZ24uZG9taWQpKTsKLQotICAgIFhFTkdOVFRBQl9CVUlMRF9CVUdfT04o b2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3NlZ21lbnQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnZpcnQpICE9Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnZpcnQpKTsKLSAgICBYRU5H TlRUQUJfQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29w eV9zZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5mb3Jl aWduKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dy YW50X2NvcHlfc2VnbWVudF90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVzdC5mb3JlaWduKSk7Ci0gICAgWEVOR05UVEFCX0JVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1 Y3QgaW9jdGxfZ250ZGV2X2dyYW50X2NvcHlfc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlc3QuZm9yZWlnbi5yZWYpICE9Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3QsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmZvcmVpZ24pKTsKLSAgICBYRU5HTlRU QUJfQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29weV9z ZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5mb3JlaWdu Lm9mZnNldCkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRh Yl9ncmFudF9jb3B5X3NlZ21lbnRfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRlc3QuZm9yZWlnbi5vZmZzZXQpKTsKLSAgICBYRU5HTlRUQUJfQlVJTERfQlVHX09OKG9m ZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29weV9zZWdtZW50LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5mb3JlaWduLmRvbWlkKSAhPQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVu dF90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5mb3JlaWduLmRv bWlkKSk7Ci0KLSAgICBYRU5HTlRUQUJfQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0 bF9nbnRkZXZfZ3JhbnRfY29weV9zZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGVuKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVu Z250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LCBsZW4pKTsKLSAgICBYRU5HTlRUQUJfQlVJTERf QlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29weV9zZWdtZW50LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICE9Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3Qs IGZsYWdzKSk7Ci0gICAgWEVOR05UVEFCX0JVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaW9j dGxfZ250ZGV2X2dyYW50X2NvcHlfc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cykgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9m KHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRfdCwgc3RhdHVzKSk7CisgICAgQlVJTERfQlVH X09OKHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X2NvcHlfc2VnbWVudCkgIT0KKyAg ICAgICAgICAgICAgICAgc2l6ZW9mKHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRfdCkpOwor CisgICAgQlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRf Y29weV9zZWdtZW50KSAhPQorICAgICAgICAgICAgICAgICBfX2FsaWdub2ZfXyh4ZW5nbnR0YWJf Z3JhbnRfY29weV9zZWdtZW50X3QpKTsKKworICAgIEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1 Y3QgaW9jdGxfZ250ZGV2X2dyYW50X2NvcHlfc2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc291cmNlLnZpcnQpICE9CisgICAgICAgICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRh Yl9ncmFudF9jb3B5X3NlZ21lbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl LnZpcnQpKTsKKyAgICBCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9n cmFudF9jb3B5X3NlZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3Jl aWduKSAhPQorICAgICAgICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9z ZWdtZW50X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3JlaWduKSk7Cisg ICAgQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfY29weV9z ZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZm9yZWlnbi5yZWYpICE9 CisgICAgICAgICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRf dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmZvcmVpZ24pKTsKKyAgICBCVUlM RF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3NlZ21lbnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3JlaWduLm9mZnNldCkgIT0KKyAg ICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LAor ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZm9yZWlnbi5vZmZzZXQpKTsKKyAgICBC VUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3NlZ21l bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3JlaWduLmRvbWlkKSAhPQor ICAgICAgICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5mb3JlaWduLmRvbWlkKSk7CisKKyAg ICBCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3Nl Z21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QudmlydCkgIT0KKyAgICAgICAg ICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LAorICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXN0LnZpcnQpKTsKKyAgICBCVUlMRF9CVUdfT04ob2Zmc2V0 b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9jb3B5X3NlZ21lbnQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlc3QuZm9yZWlnbikgIT0KKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yo eGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LAorICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXN0LmZvcmVpZ24pKTsKKyAgICBCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3Rs X2dudGRldl9ncmFudF9jb3B5X3NlZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRl c3QuZm9yZWlnbi5yZWYpICE9CisgICAgICAgICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRhYl9n cmFudF9jb3B5X3NlZ21lbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5mb3Jl aWduKSk7CisgICAgQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3Jh bnRfY29weV9zZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmZvcmVpZ24u b2Zmc2V0KSAhPQorICAgICAgICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29w eV9zZWdtZW50X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuZm9yZWlnbi5vZmZz ZXQpKTsKKyAgICBCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFu dF9jb3B5X3NlZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuZm9yZWlnbi5k b21pZCkgIT0KKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlf c2VnbWVudF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmZvcmVpZ24uZG9taWQp KTsKKworICAgIEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50 X2NvcHlfc2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKSAhPQorICAgICAg ICAgICAgICAgICBvZmZzZXRvZih4ZW5nbnR0YWJfZ3JhbnRfY29weV9zZWdtZW50X3QsIGxlbikp OworICAgIEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X2Nv cHlfc2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICE9CisgICAgICAg ICAgICAgICAgIG9mZnNldG9mKHhlbmdudHRhYl9ncmFudF9jb3B5X3NlZ21lbnRfdCwgZmxhZ3Mp KTsKKyAgICBCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9j b3B5X3NlZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cykgIT0KKyAgICAg ICAgICAgICAgICAgb2Zmc2V0b2YoeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90LCBzdGF0 dXMpKTsKIAogICAgIGNvcHkuc2VnbWVudHMgPSAoc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9j b3B5X3NlZ21lbnQgKilzZWdzOwogICAgIGNvcHkuY291bnQgPSBjb3VudDsKLS0gCjIuMS40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK