From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751840AbdKFG7A (ORCPT ); Mon, 6 Nov 2017 01:59:00 -0500 Received: from mga05.intel.com ([192.55.52.43]:20437 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751416AbdKFG66 (ORCPT ); Mon, 6 Nov 2017 01:58:58 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.44,351,1505804400"; d="scan'208";a="332523111" From: "Zhang, Tina" To: Alex Williamson CC: "Tian, Kevin" , Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "joonas.lahtinen@linux.intel.com" , "linux-kernel@vger.kernel.org" , "zhenyuw@linux.intel.com" , "chris@chris-wilson.co.uk" , "kwankhede@nvidia.com" , "Lv, Zhiyuan" , "daniel@ffwll.ch" , "intel-gvt-dev@lists.freedesktop.org" , "Wang, Zhi A" , "kraxel@redhat.com" Subject: RE: [PATCH v16 5/6] vfio: ABI for mdev display dma-buf operation Thread-Topic: [PATCH v16 5/6] vfio: ABI for mdev display dma-buf operation Thread-Index: AQHTVqZ58nX7SV9W3UCmf5xtRs7vtKMGHX4AgADNQiA= Date: Mon, 6 Nov 2017 06:58:53 +0000 Message-ID: <237F54289DF84E4997F34151298ABEBC7C62533C@SHSMSX101.ccr.corp.intel.com> References: <1509934758-5003-1-git-send-email-tina.zhang@intel.com> <1509934758-5003-6-git-send-email-tina.zhang@intel.com> <20171105193922.5dc9356a@t450s.home> In-Reply-To: <20171105193922.5dc9356a@t450s.home> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGI0OWU1ZWEtODZjZS00MWFiLWE1ODMtYjcwMDE3MmIwOGE2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJJSlNcL2xoNU9mRVU5V3dENzhqTkpldlFnMUl6a2NvVitaM1VMblwvV2VrNGhPaG82ZVwvVktVOWdlVzdCWXlVSnB0In0= x-ctpclassification: CTP_IC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id vA66x5eb031996 > -----Original Message----- > From: intel-gvt-dev [mailto:intel-gvt-dev-bounces@lists.freedesktop.org] On > Behalf Of Alex Williamson > Sent: Monday, November 6, 2017 10:39 AM > To: Zhang, Tina > Cc: Tian, Kevin ; Daniel Vetter ; > intel-gfx@lists.freedesktop.org; joonas.lahtinen@linux.intel.com; linux- > kernel@vger.kernel.org; zhenyuw@linux.intel.com; chris@chris-wilson.co.uk; > kwankhede@nvidia.com; Lv, Zhiyuan ; daniel@ffwll.ch; > intel-gvt-dev@lists.freedesktop.org; Wang, Zhi A ; > kraxel@redhat.com > Subject: Re: [PATCH v16 5/6] vfio: ABI for mdev display dma-buf operation > > On Mon, 6 Nov 2017 10:19:17 +0800 > Tina Zhang wrote: > > > Add VFIO_DEVICE_QUERY_GFX_PLANE ioctl command to let user query and > > get a plane and its related information. So far, two types of buffers > > are > > supported: buffers based on dma-buf and buffers based on region. > > > > This ioctl can be invoked with: > > 1) either DMABUF or REGION flag. Vendor driver returns a plane_info > > successfully only when the specific kind of buffer is supported. > > 2) flag PROBE. And at the same time either DMABUF or REGION must be > > set, so that vendor driver can return success only when the specific > > kind of buffer is supported. > > > > Add VFIO_DEVICE_GET_GFX_DMABUF ioctl command to let user get an > > exposed dma-buf fd of a specific dmabuf_id which was returned in > > VFIO_DEVICE_QUERY _GFX_PLANE ioctl command. > > > > The life cycle of an exposed MDEV buffer is handled by userspace and > > tracked by kernel space. The returned dmabuf_id in struct vfio_device_ > > query_gfx_plane can be a new id of a new exposed buffer or an old id > > of a re-exported buffer. Host user can check the value of dmabuf_id to > > see if it needs to create new resources according to the new exposed > > buffer or just re-use the existing resource related to the old buffer. > > > > v16: > > - add x_hot and y_hot fields. (Gerd) > > - add comments for VFIO_DEVICE_GET_GFX_DMABUF. (Alex) > > - rebase to 4.14.0-rc6. > > > > v15: > > - add a ioctl to get a dmabuf for a given dmabuf id. (Gerd) > > > > v14: > > - add PROBE, DMABUF and REGION flags. (Alex) > > > > v12: > > - add drm_format_mod back. (Gerd and Zhenyu) > > - add region_index. (Gerd) > > > > v11: > > - rename plane_type to drm_plane_type. (Gerd) > > - move fields of vfio_device_query_gfx_plane to vfio_device_gfx_plane_info. > > (Gerd) > > - remove drm_format_mod, start fields. (Daniel) > > - remove plane_id. > > > > v10: > > - refine the ABI API VFIO_DEVICE_QUERY_GFX_PLANE. (Alex) (Gerd) > > > > v3: > > - add a field gvt_plane_info in the drm_i915_gem_obj structure to save > > the decoded plane information to avoid look up while need the plane > > info. (Gerd) > > > > Signed-off-by: Tina Zhang > > Cc: Gerd Hoffmann > > Cc: Alex Williamson > > Cc: Daniel Vetter > > --- > > include/uapi/linux/vfio.h | 68 > > +++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 68 insertions(+) > > > > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h > > index ae46105..6c55668 100644 > > --- a/include/uapi/linux/vfio.h > > +++ b/include/uapi/linux/vfio.h > > @@ -502,6 +502,74 @@ struct vfio_pci_hot_reset { > > > > #define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, VFIO_BASE + > 13) > > > > +/** > > + * VFIO_DEVICE_QUERY_GFX_PLANE - _IOW(VFIO_TYPE, VFIO_BASE + 14, > > + * struct vfio_device_query_gfx_plane) > > + * > > + * Set the drm_plane_type and flags, then retrieve the gfx plane info. > > + * > > + * flags supported: > > + * - VFIO_GFX_PLANE_TYPE_PROBE and VFIO_GFX_PLANE_TYPE_DMABUF > are set > > + * to ask if the mdev supports dma-buf. 0 on support, -EINVAL on no > > + * support for dma-buf. > > + * - VFIO_GFX_PLANE_TYPE_PROBE and VFIO_GFX_PLANE_TYPE_REGION > are set > > + * to ask if the mdev supports region. 0 on support, -EINVAL on no > > + * support for region. > > + * - VFIO_GFX_PLANE_TYPE_DMABUF or VFIO_GFX_PLANE_TYPE_REGION > is set > > + * with each call to query the plane info. > > + * - Others are invalid and return -EINVAL. > > + * > > + * Return: 0 on success, -ENODEV with all out fields zero on mdev > > + * device initialization, -errno on other failure. > > + */ > > +struct vfio_device_gfx_plane_info { > > + __u32 argsz; > > + __u32 flags; > > +#define VFIO_GFX_PLANE_TYPE_PROBE (1 << 0) #define > > +VFIO_GFX_PLANE_TYPE_DMABUF (1 << 1) #define > > +VFIO_GFX_PLANE_TYPE_REGION (1 << 2) > > + /* in */ > > + __u32 drm_plane_type; /* type of plane: DRM_PLANE_TYPE_* */ > > + /* out */ > > + __u32 drm_format; /* drm format of plane */ > > + __u64 drm_format_mod; /* tiled mode */ > > + __u32 width; /* width of plane */ > > + __u32 height; /* height of plane */ > > + __u32 stride; /* stride of plane */ > > + __u32 size; /* size of plane in bytes, align on page*/ > > + __u32 x_pos; /* horizontal position of cursor plane */ > > + __u32 y_pos; /* vertical position of cursor plane*/ > > + __u32 x_hot; /* horizontal position of cursor hotspot */ > > + __u32 y_hot; /* vertical position of cursor hotspot */ > > + union { > > + __u32 region_index; /* region index */ > > + __u32 dmabuf_id; /* dma-buf id */ > > + }; > > +}; > > + > > +#define VFIO_DEVICE_QUERY_GFX_PLANE _IO(VFIO_TYPE, VFIO_BASE + 14) > > + > > +/** > > + * VFIO_DEVICE_GET_GFX_DMABUF - _IOW(VFIO_TYPE, VFIO_BASE + 15, > > + * struct vfio_device_gfx_dmabuf_fd) > > + * > > + * Retrieve dmabuf_fd of an exposed guest framebuffer referenced by > > +dmabuf_id > > + * which is returned from VFIO_DEVICE_QUERY_GFX_PLANE as a token of > > +the > > + * exposed guest framebuffer. > > + * > > + * Return: 0 on success, -errno on failure. > > + */ > > +struct vfio_device_gfx_dmabuf_fd { > > + __u32 argsz; > > + __u32 flags; > > + /* in */ > > + __u32 dmabuf_id; > > + /* out */ > > + __s32 dmabuf_fd; > > +}; > > + > > +#define VFIO_DEVICE_GET_GFX_DMABUF _IO(VFIO_TYPE, VFIO_BASE + 15) > > + > > I thought we had agreed to make this behave similar to > VFIO_GROUP_GET_DEVICE_FD, the ioctl would take a __u32 dmabuf_id and > return the file descriptor as the ioctl return value. Thanks, If we follow VFIO_GROUP_GET_DEVICE_FD, we would lose flags functionality. Zhi and Zhenyu, how do you think about it? Thanks. BR, Tina > > Alex > _______________________________________________ > intel-gvt-dev mailing list > intel-gvt-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Tina" Subject: Re: [PATCH v16 5/6] vfio: ABI for mdev display dma-buf operation Date: Mon, 6 Nov 2017 06:58:53 +0000 Message-ID: <237F54289DF84E4997F34151298ABEBC7C62533C@SHSMSX101.ccr.corp.intel.com> References: <1509934758-5003-1-git-send-email-tina.zhang@intel.com> <1509934758-5003-6-git-send-email-tina.zhang@intel.com> <20171105193922.5dc9356a@t450s.home> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171105193922.5dc9356a@t450s.home> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Alex Williamson Cc: Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , "kwankhede@nvidia.com" , "Lv, Zhiyuan" , "intel-gvt-dev@lists.freedesktop.org" , "kraxel@redhat.com" List-Id: intel-gfx@lists.freedesktop.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogaW50ZWwtZ3Z0LWRldiBb bWFpbHRvOmludGVsLWd2dC1kZXYtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmddIE9uDQo+ IEJlaGFsZiBPZiBBbGV4IFdpbGxpYW1zb24NCj4gU2VudDogTW9uZGF5LCBOb3ZlbWJlciA2LCAy MDE3IDEwOjM5IEFNDQo+IFRvOiBaaGFuZywgVGluYSA8dGluYS56aGFuZ0BpbnRlbC5jb20+DQo+ IENjOiBUaWFuLCBLZXZpbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+OyBEYW5pZWwgVmV0dGVyIDxk YW5pZWwudmV0dGVyQGZmd2xsLmNoPjsNCj4gaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zzsgam9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbTsgbGludXgtDQo+IGtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc7IHpoZW55dXdAbGludXguaW50ZWwuY29tOyBjaHJpc0BjaHJpcy13aWxzb24u Y28udWs7DQo+IGt3YW5raGVkZUBudmlkaWEuY29tOyBMdiwgWmhpeXVhbiA8emhpeXVhbi5sdkBp bnRlbC5jb20+OyBkYW5pZWxAZmZ3bGwuY2g7DQo+IGludGVsLWd2dC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnOyBXYW5nLCBaaGkgQSA8emhpLmEud2FuZ0BpbnRlbC5jb20+Ow0KPiBrcmF4ZWxA cmVkaGF0LmNvbQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxNiA1LzZdIHZmaW86IEFCSSBmb3Ig bWRldiBkaXNwbGF5IGRtYS1idWYgb3BlcmF0aW9uDQo+IA0KPiBPbiBNb24sICA2IE5vdiAyMDE3 IDEwOjE5OjE3ICswODAwDQo+IFRpbmEgWmhhbmcgPHRpbmEuemhhbmdAaW50ZWwuY29tPiB3cm90 ZToNCj4gDQo+ID4gQWRkIFZGSU9fREVWSUNFX1FVRVJZX0dGWF9QTEFORSBpb2N0bCBjb21tYW5k IHRvIGxldCB1c2VyIHF1ZXJ5IGFuZA0KPiA+IGdldCBhIHBsYW5lIGFuZCBpdHMgcmVsYXRlZCBp bmZvcm1hdGlvbi4gU28gZmFyLCB0d28gdHlwZXMgb2YgYnVmZmVycw0KPiA+IGFyZQ0KPiA+IHN1 cHBvcnRlZDogYnVmZmVycyBiYXNlZCBvbiBkbWEtYnVmIGFuZCBidWZmZXJzIGJhc2VkIG9uIHJl Z2lvbi4NCj4gPg0KPiA+IFRoaXMgaW9jdGwgY2FuIGJlIGludm9rZWQgd2l0aDoNCj4gPiAxKSBl aXRoZXIgRE1BQlVGIG9yIFJFR0lPTiBmbGFnLiBWZW5kb3IgZHJpdmVyIHJldHVybnMgYSBwbGFu ZV9pbmZvDQo+ID4gc3VjY2Vzc2Z1bGx5IG9ubHkgd2hlbiB0aGUgc3BlY2lmaWMga2luZCBvZiBi dWZmZXIgaXMgc3VwcG9ydGVkLg0KPiA+IDIpIGZsYWcgUFJPQkUuIEFuZCBhdCB0aGUgc2FtZSB0 aW1lIGVpdGhlciBETUFCVUYgb3IgUkVHSU9OIG11c3QgYmUNCj4gPiBzZXQsIHNvIHRoYXQgdmVu ZG9yIGRyaXZlciBjYW4gcmV0dXJuIHN1Y2Nlc3Mgb25seSB3aGVuIHRoZSBzcGVjaWZpYw0KPiA+ IGtpbmQgb2YgYnVmZmVyIGlzIHN1cHBvcnRlZC4NCj4gPg0KPiA+IEFkZCBWRklPX0RFVklDRV9H RVRfR0ZYX0RNQUJVRiBpb2N0bCBjb21tYW5kIHRvIGxldCB1c2VyIGdldCBhbg0KPiA+IGV4cG9z ZWQgZG1hLWJ1ZiBmZCBvZiBhIHNwZWNpZmljIGRtYWJ1Zl9pZCB3aGljaCB3YXMgcmV0dXJuZWQg aW4NCj4gPiBWRklPX0RFVklDRV9RVUVSWSBfR0ZYX1BMQU5FIGlvY3RsIGNvbW1hbmQuDQo+ID4N Cj4gPiBUaGUgbGlmZSBjeWNsZSBvZiBhbiBleHBvc2VkIE1ERVYgYnVmZmVyIGlzIGhhbmRsZWQg YnkgdXNlcnNwYWNlIGFuZA0KPiA+IHRyYWNrZWQgYnkga2VybmVsIHNwYWNlLiBUaGUgcmV0dXJu ZWQgZG1hYnVmX2lkIGluIHN0cnVjdCB2ZmlvX2RldmljZV8NCj4gPiBxdWVyeV9nZnhfcGxhbmUg Y2FuIGJlIGEgbmV3IGlkIG9mIGEgbmV3IGV4cG9zZWQgYnVmZmVyIG9yIGFuIG9sZCBpZA0KPiA+ IG9mIGEgcmUtZXhwb3J0ZWQgYnVmZmVyLiBIb3N0IHVzZXIgY2FuIGNoZWNrIHRoZSB2YWx1ZSBv ZiBkbWFidWZfaWQgdG8NCj4gPiBzZWUgaWYgaXQgbmVlZHMgdG8gY3JlYXRlIG5ldyByZXNvdXJj ZXMgYWNjb3JkaW5nIHRvIHRoZSBuZXcgZXhwb3NlZA0KPiA+IGJ1ZmZlciBvciBqdXN0IHJlLXVz ZSB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgcmVsYXRlZCB0byB0aGUgb2xkIGJ1ZmZlci4NCj4gPg0K PiA+IHYxNjoNCj4gPiAtIGFkZCB4X2hvdCBhbmQgeV9ob3QgZmllbGRzLiAoR2VyZCkNCj4gPiAt IGFkZCBjb21tZW50cyBmb3IgVkZJT19ERVZJQ0VfR0VUX0dGWF9ETUFCVUYuIChBbGV4KQ0KPiA+ IC0gcmViYXNlIHRvIDQuMTQuMC1yYzYuDQo+ID4NCj4gPiB2MTU6DQo+ID4gLSBhZGQgYSBpb2N0 bCB0byBnZXQgYSBkbWFidWYgZm9yIGEgZ2l2ZW4gZG1hYnVmIGlkLiAoR2VyZCkNCj4gPg0KPiA+ IHYxNDoNCj4gPiAtIGFkZCBQUk9CRSwgRE1BQlVGIGFuZCBSRUdJT04gZmxhZ3MuIChBbGV4KQ0K PiA+DQo+ID4gdjEyOg0KPiA+IC0gYWRkIGRybV9mb3JtYXRfbW9kIGJhY2suIChHZXJkIGFuZCBa aGVueXUpDQo+ID4gLSBhZGQgcmVnaW9uX2luZGV4LiAoR2VyZCkNCj4gPg0KPiA+IHYxMToNCj4g PiAtIHJlbmFtZSBwbGFuZV90eXBlIHRvIGRybV9wbGFuZV90eXBlLiAoR2VyZCkNCj4gPiAtIG1v dmUgZmllbGRzIG9mIHZmaW9fZGV2aWNlX3F1ZXJ5X2dmeF9wbGFuZSB0byB2ZmlvX2RldmljZV9n ZnhfcGxhbmVfaW5mby4NCj4gPiAgIChHZXJkKQ0KPiA+IC0gcmVtb3ZlIGRybV9mb3JtYXRfbW9k LCBzdGFydCBmaWVsZHMuIChEYW5pZWwpDQo+ID4gLSByZW1vdmUgcGxhbmVfaWQuDQo+ID4NCj4g PiB2MTA6DQo+ID4gLSByZWZpbmUgdGhlIEFCSSBBUEkgVkZJT19ERVZJQ0VfUVVFUllfR0ZYX1BM QU5FLiAoQWxleCkgKEdlcmQpDQo+ID4NCj4gPiB2MzoNCj4gPiAtIGFkZCBhIGZpZWxkIGd2dF9w bGFuZV9pbmZvIGluIHRoZSBkcm1faTkxNV9nZW1fb2JqIHN0cnVjdHVyZSB0byBzYXZlDQo+ID4g ICB0aGUgZGVjb2RlZCBwbGFuZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBsb29rIHVwIHdoaWxlIG5l ZWQgdGhlIHBsYW5lDQo+ID4gICBpbmZvLiAoR2VyZCkNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IFRpbmEgWmhhbmcgPHRpbmEuemhhbmdAaW50ZWwuY29tPg0KPiA+IENjOiBHZXJkIEhvZmZtYW5u IDxrcmF4ZWxAcmVkaGF0LmNvbT4NCj4gPiBDYzogQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxp YW1zb25AcmVkaGF0LmNvbT4NCj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBm ZndsbC5jaD4NCj4gPiAtLS0NCj4gPiAgaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCB8IDY4DQo+ ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAg MSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaA0KPiA+ IGluZGV4IGFlNDYxMDUuLjZjNTU2NjggMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS91YXBpL2xp bnV4L3ZmaW8uaA0KPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgNCj4gPiBAQCAt NTAyLDYgKzUwMiw3NCBAQCBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0IHsNCj4gPg0KPiA+ICAj ZGVmaW5lIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQJX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNF ICsNCj4gMTMpDQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqIFZGSU9fREVWSUNFX1FVRVJZX0dGWF9Q TEFORSAtIF9JT1coVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxNCwNCj4gPiArICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfcXVlcnlfZ2Z4X3Bs YW5lKQ0KPiA+ICsgKg0KPiA+ICsgKiBTZXQgdGhlIGRybV9wbGFuZV90eXBlIGFuZCBmbGFncywg dGhlbiByZXRyaWV2ZSB0aGUgZ2Z4IHBsYW5lIGluZm8uDQo+ID4gKyAqDQo+ID4gKyAqIGZsYWdz IHN1cHBvcnRlZDoNCj4gPiArICogLSBWRklPX0dGWF9QTEFORV9UWVBFX1BST0JFIGFuZCBWRklP X0dGWF9QTEFORV9UWVBFX0RNQUJVRg0KPiBhcmUgc2V0DQo+ID4gKyAqICAgdG8gYXNrIGlmIHRo ZSBtZGV2IHN1cHBvcnRzIGRtYS1idWYuIDAgb24gc3VwcG9ydCwgLUVJTlZBTCBvbiBubw0KPiA+ ICsgKiAgIHN1cHBvcnQgZm9yIGRtYS1idWYuDQo+ID4gKyAqIC0gVkZJT19HRlhfUExBTkVfVFlQ RV9QUk9CRSBhbmQgVkZJT19HRlhfUExBTkVfVFlQRV9SRUdJT04NCj4gYXJlIHNldA0KPiA+ICsg KiAgIHRvIGFzayBpZiB0aGUgbWRldiBzdXBwb3J0cyByZWdpb24uIDAgb24gc3VwcG9ydCwgLUVJ TlZBTCBvbiBubw0KPiA+ICsgKiAgIHN1cHBvcnQgZm9yIHJlZ2lvbi4NCj4gPiArICogLSBWRklP X0dGWF9QTEFORV9UWVBFX0RNQUJVRiBvciBWRklPX0dGWF9QTEFORV9UWVBFX1JFR0lPTg0KPiBp cyBzZXQNCj4gPiArICogICB3aXRoIGVhY2ggY2FsbCB0byBxdWVyeSB0aGUgcGxhbmUgaW5mby4N Cj4gPiArICogLSBPdGhlcnMgYXJlIGludmFsaWQgYW5kIHJldHVybiAtRUlOVkFMLg0KPiA+ICsg Kg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0RFViB3aXRoIGFsbCBvdXQgZmll bGRzIHplcm8gb24gbWRldg0KPiA+ICsgKiBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIC1lcnJubyBv biBvdGhlciBmYWlsdXJlLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHZmaW9fZGV2aWNlX2dmeF9w bGFuZV9pbmZvIHsNCj4gPiArCV9fdTMyIGFyZ3N6Ow0KPiA+ICsJX191MzIgZmxhZ3M7DQo+ID4g KyNkZWZpbmUgVkZJT19HRlhfUExBTkVfVFlQRV9QUk9CRSAoMSA8PCAwKSAjZGVmaW5lDQo+ID4g K1ZGSU9fR0ZYX1BMQU5FX1RZUEVfRE1BQlVGICgxIDw8IDEpICNkZWZpbmUNCj4gPiArVkZJT19H RlhfUExBTkVfVFlQRV9SRUdJT04gKDEgPDwgMikNCj4gPiArCS8qIGluICovDQo+ID4gKwlfX3Uz MiBkcm1fcGxhbmVfdHlwZTsJLyogdHlwZSBvZiBwbGFuZTogRFJNX1BMQU5FX1RZUEVfKiAqLw0K PiA+ICsJLyogb3V0ICovDQo+ID4gKwlfX3UzMiBkcm1fZm9ybWF0OwkvKiBkcm0gZm9ybWF0IG9m IHBsYW5lICovDQo+ID4gKwlfX3U2NCBkcm1fZm9ybWF0X21vZDsgICAvKiB0aWxlZCBtb2RlICov DQo+ID4gKwlfX3UzMiB3aWR0aDsJLyogd2lkdGggb2YgcGxhbmUgKi8NCj4gPiArCV9fdTMyIGhl aWdodDsJLyogaGVpZ2h0IG9mIHBsYW5lICovDQo+ID4gKwlfX3UzMiBzdHJpZGU7CS8qIHN0cmlk ZSBvZiBwbGFuZSAqLw0KPiA+ICsJX191MzIgc2l6ZTsJLyogc2l6ZSBvZiBwbGFuZSBpbiBieXRl cywgYWxpZ24gb24gcGFnZSovDQo+ID4gKwlfX3UzMiB4X3BvczsJLyogaG9yaXpvbnRhbCBwb3Np dGlvbiBvZiBjdXJzb3IgcGxhbmUgKi8NCj4gPiArCV9fdTMyIHlfcG9zOwkvKiB2ZXJ0aWNhbCBw b3NpdGlvbiBvZiBjdXJzb3IgcGxhbmUqLw0KPiA+ICsJX191MzIgeF9ob3Q7ICAgIC8qIGhvcml6 b250YWwgcG9zaXRpb24gb2YgY3Vyc29yIGhvdHNwb3QgKi8NCj4gPiArCV9fdTMyIHlfaG90OyAg ICAvKiB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiBjdXJzb3IgaG90c3BvdCAqLw0KPiA+ICsJdW5pb24g ew0KPiA+ICsJCV9fdTMyIHJlZ2lvbl9pbmRleDsJLyogcmVnaW9uIGluZGV4ICovDQo+ID4gKwkJ X191MzIgZG1hYnVmX2lkOwkvKiBkbWEtYnVmIGlkICovDQo+ID4gKwl9Ow0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArI2RlZmluZSBWRklPX0RFVklDRV9RVUVSWV9HRlhfUExBTkUgX0lPKFZGSU9fVFlQ RSwgVkZJT19CQVNFICsgMTQpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVkZJT19ERVZJQ0Vf R0VUX0dGWF9ETUFCVUYgLSBfSU9XKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTUsDQo+ID4gKyAq CQkJCSAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZ2Z4X2RtYWJ1Zl9mZCkNCj4gPiArICoNCj4gPiAr ICogUmV0cmlldmUgZG1hYnVmX2ZkIG9mIGFuIGV4cG9zZWQgZ3Vlc3QgZnJhbWVidWZmZXIgcmVm ZXJlbmNlZCBieQ0KPiA+ICtkbWFidWZfaWQNCj4gPiArICogd2hpY2ggaXMgcmV0dXJuZWQgZnJv bSBWRklPX0RFVklDRV9RVUVSWV9HRlhfUExBTkUgYXMgYSB0b2tlbiBvZg0KPiA+ICt0aGUNCj4g PiArICogZXhwb3NlZCBndWVzdCBmcmFtZWJ1ZmZlci4NCj4gPiArICoNCj4gPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0 IHZmaW9fZGV2aWNlX2dmeF9kbWFidWZfZmQgew0KPiA+ICsJX191MzIgYXJnc3o7DQo+ID4gKwlf X3UzMiBmbGFnczsNCj4gPiArCS8qIGluICovDQo+ID4gKwlfX3UzMiBkbWFidWZfaWQ7DQo+ID4g KwkvKiBvdXQgKi8NCj4gPiArCV9fczMyIGRtYWJ1Zl9mZDsNCj4gPiArfTsNCj4gPiArDQo+ID4g KyNkZWZpbmUgVkZJT19ERVZJQ0VfR0VUX0dGWF9ETUFCVUYgX0lPKFZGSU9fVFlQRSwgVkZJT19C QVNFICsgMTUpDQo+ID4gKw0KPiANCj4gSSB0aG91Z2h0IHdlIGhhZCBhZ3JlZWQgdG8gbWFrZSB0 aGlzIGJlaGF2ZSBzaW1pbGFyIHRvDQo+IFZGSU9fR1JPVVBfR0VUX0RFVklDRV9GRCwgdGhlIGlv Y3RsIHdvdWxkIHRha2UgYSBfX3UzMiBkbWFidWZfaWQgYW5kDQo+IHJldHVybiB0aGUgZmlsZSBk ZXNjcmlwdG9yIGFzIHRoZSBpb2N0bCByZXR1cm4gdmFsdWUuICBUaGFua3MsDQpJZiB3ZSBmb2xs b3cgVkZJT19HUk9VUF9HRVRfREVWSUNFX0ZELCB3ZSB3b3VsZCBsb3NlIGZsYWdzIGZ1bmN0aW9u YWxpdHkuDQpaaGkgYW5kIFpoZW55dSwgaG93IGRvIHlvdSB0aGluayBhYm91dCBpdD8NClRoYW5r cy4NCg0KQlIsDQpUaW5hDQo+IA0KPiBBbGV4DQo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+IGludGVsLWd2dC1kZXYgbWFpbGluZyBsaXN0DQo+IGlu dGVsLWd2dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IGh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ3Z0LWRldg0KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==