From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753256AbdLSThB (ORCPT ); Tue, 19 Dec 2017 14:37:01 -0500 Received: from mga01.intel.com ([192.55.52.88]:17633 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752338AbdLSTgr (ORCPT ); Tue, 19 Dec 2017 14:36:47 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,428,1508828400"; d="scan'208";a="4018566" From: Dongwon Kim To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, mateuszx.potrola@intel.com, dongwon.kim@intel.com Subject: [RFC PATCH 26/60] hyper_dmabuf: add mutexes to prevent several race conditions Date: Tue, 19 Dec 2017 11:29:42 -0800 Message-Id: <1513711816-2618-26-git-send-email-dongwon.kim@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> References: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mateusz Polrola Added mutex to export_fd ioctl to prevent double pages mapping of the same buffer to prevent race condition when two consumers are trying to map the same buffer on importer VM. Also locked mutex before sending request via xen communication channel to prevent req_pending override by another caller. Signed-off-by: Dongwon Kim --- drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.c | 2 ++ drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.h | 1 + drivers/xen/hyper_dmabuf/hyper_dmabuf_ioctl.c | 6 ++++++ drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.c | 10 ++++++++++ drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.h | 1 + 5 files changed, 20 insertions(+) diff --git a/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.c b/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.c index 569b95e..584d55d 100644 --- a/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.c +++ b/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.c @@ -56,6 +56,8 @@ static int __init hyper_dmabuf_drv_init(void) printk( KERN_NOTICE "hyper_dmabuf_starting: Initialization started" ); + mutex_init(&hyper_dmabuf_private.lock); + ret = register_device(); if (ret < 0) { return -EINVAL; diff --git a/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.h b/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.h index 0b1441e..8445416 100644 --- a/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.h +++ b/drivers/xen/hyper_dmabuf/hyper_dmabuf_drv.h @@ -76,6 +76,7 @@ struct hyper_dmabuf_private { /* backend ops - hypervisor specific */ struct hyper_dmabuf_backend_ops *backend_ops; + struct mutex lock; }; #endif /* __LINUX_PUBLIC_HYPER_DMABUF_DRV_H__ */ diff --git a/drivers/xen/hyper_dmabuf/hyper_dmabuf_ioctl.c b/drivers/xen/hyper_dmabuf/hyper_dmabuf_ioctl.c index 018de8c..8851a9c 100644 --- a/drivers/xen/hyper_dmabuf/hyper_dmabuf_ioctl.c +++ b/drivers/xen/hyper_dmabuf/hyper_dmabuf_ioctl.c @@ -260,6 +260,8 @@ static int hyper_dmabuf_export_fd_ioctl(void *data) if (sgt_info == NULL || !sgt_info->valid) /* can't find sgt from the table */ return -1; + mutex_lock(&hyper_dmabuf_private.lock); + sgt_info->num_importers++; /* send notification for export_fd to exporter */ @@ -274,6 +276,7 @@ static int hyper_dmabuf_export_fd_ioctl(void *data) kfree(req); dev_err(hyper_dmabuf_private.device, "Failed to create sgt or notify exporter\n"); sgt_info->num_importers--; + mutex_unlock(&hyper_dmabuf_private.lock); return -EINVAL; } kfree(req); @@ -282,6 +285,7 @@ static int hyper_dmabuf_export_fd_ioctl(void *data) dev_err(hyper_dmabuf_private.device, "Buffer invalid\n"); sgt_info->num_importers--; + mutex_unlock(&hyper_dmabuf_private.lock); return -1; } else { dev_dbg(hyper_dmabuf_private.device, "Can import buffer\n"); @@ -303,6 +307,7 @@ static int hyper_dmabuf_export_fd_ioctl(void *data) if (!data_pages) { sgt_info->num_importers--; + mutex_unlock(&hyper_dmabuf_private.lock); return -EINVAL; } @@ -318,6 +323,7 @@ static int hyper_dmabuf_export_fd_ioctl(void *data) ret = export_fd_attr->fd; } + mutex_unlock(&hyper_dmabuf_private.lock); dev_dbg(hyper_dmabuf_private.device, "%s exit\n", __func__); return 0; } diff --git a/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.c b/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.c index a8cce26..9d67b47 100644 --- a/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.c +++ b/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.c @@ -278,6 +278,8 @@ int hyper_dmabuf_xen_init_tx_rbuf(int domid) ring_info->irq = ret; ring_info->port = alloc_unbound.port; + mutex_init(&ring_info->lock); + dev_dbg(hyper_dmabuf_private.device, "%s: allocated eventchannel gref %d port: %d irq: %d\n", __func__, @@ -512,6 +514,9 @@ int hyper_dmabuf_xen_send_req(int domid, struct hyper_dmabuf_req *req, int wait) return -EINVAL; } + + mutex_lock(&ring_info->lock); + ring = &ring_info->ring_front; if (RING_FULL(ring)) @@ -519,6 +524,7 @@ int hyper_dmabuf_xen_send_req(int domid, struct hyper_dmabuf_req *req, int wait) new_req = RING_GET_REQUEST(ring, ring->req_prod_pvt); if (!new_req) { + mutex_unlock(&ring_info->lock); dev_err(hyper_dmabuf_private.device, "NULL REQUEST\n"); return -EIO; @@ -548,13 +554,17 @@ int hyper_dmabuf_xen_send_req(int domid, struct hyper_dmabuf_req *req, int wait) } if (timeout < 0) { + mutex_unlock(&ring_info->lock); dev_err(hyper_dmabuf_private.device, "request timed-out\n"); return -EBUSY; } + mutex_unlock(&ring_info->lock); return req_pending.status; } + mutex_unlock(&ring_info->lock); + return 0; } diff --git a/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.h b/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.h index 9c93165..0533e4d 100644 --- a/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.h +++ b/drivers/xen/hyper_dmabuf/xen/hyper_dmabuf_xen_comm.h @@ -39,6 +39,7 @@ struct xen_comm_tx_ring_info { int gref_ring; int irq; int port; + struct mutex lock; struct xenbus_watch watch; }; -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH 26/60] hyper_dmabuf: add mutexes to prevent several race conditions Date: Tue, 19 Dec 2017 11:29:42 -0800 Message-ID: <1513711816-2618-26-git-send-email-dongwon.kim@intel.com> References: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org Cc: xen-devel@lists.xenproject.org, mateuszx.potrola@intel.com, dri-devel@lists.freedesktop.org, dongwon.kim@intel.com List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWF0ZXVzeiBQb2xyb2xhIDxtYXRldXN6eC5wb3Ryb2xhQGludGVsLmNvbT4KCkFkZGVk IG11dGV4IHRvIGV4cG9ydF9mZCBpb2N0bCB0byBwcmV2ZW50IGRvdWJsZSBwYWdlcyBtYXBwaW5n IG9mIHRoZQpzYW1lIGJ1ZmZlciB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdoZW4gdHdvIGNv bnN1bWVycyBhcmUgdHJ5aW5nIHRvCm1hcCB0aGUgc2FtZSBidWZmZXIgb24gaW1wb3J0ZXIgVk0u CgpBbHNvIGxvY2tlZCBtdXRleCBiZWZvcmUgc2VuZGluZyByZXF1ZXN0IHZpYSB4ZW4gY29tbXVu aWNhdGlvbiBjaGFubmVsCnRvIHByZXZlbnQgcmVxX3BlbmRpbmcgb3ZlcnJpZGUgYnkgYW5vdGhl ciBjYWxsZXIuCgpTaWduZWQtb2ZmLWJ5OiBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwu Y29tPgotLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmMgICAg ICAgICAgfCAgMiArKwogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYu aCAgICAgICAgICB8ICAxICsKIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf aW9jdGwuYyAgICAgICAgfCAgNiArKysrKysKIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4v aHlwZXJfZG1hYnVmX3hlbl9jb21tLmMgfCAxMCArKysrKysrKysrCiBkcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIHwgIDEgKwogNSBmaWxlcyBjaGFu Z2VkLCAyMCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfZHJ2LmMKaW5kZXggNTY5Yjk1ZS4uNTg0ZDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYworKysgYi9kcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jCkBAIC01Niw2ICs1Niw4IEBAIHN0YXRpYyBpbnQg X19pbml0IGh5cGVyX2RtYWJ1Zl9kcnZfaW5pdCh2b2lkKQogCiAJcHJpbnRrKCBLRVJOX05PVElD RSAiaHlwZXJfZG1hYnVmX3N0YXJ0aW5nOiBJbml0aWFsaXphdGlvbiBzdGFydGVkIiApOwogCisJ bXV0ZXhfaW5pdCgmaHlwZXJfZG1hYnVmX3ByaXZhdGUubG9jayk7CisKIAlyZXQgPSByZWdpc3Rl cl9kZXZpY2UoKTsKIAlpZiAocmV0IDwgMCkgewogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdp dCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmggYi9kcml2ZXJz L3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5oCmluZGV4IDBiMTQ0MWUuLjg0NDU0 MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2 LmgKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuaApAQCAt NzYsNiArNzYsNyBAQCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3ByaXZhdGUgewogCiAJLyogYmFja2Vu ZCBvcHMgLSBoeXBlcnZpc29yIHNwZWNpZmljICovCiAJc3RydWN0IGh5cGVyX2RtYWJ1Zl9iYWNr ZW5kX29wcyAqYmFja2VuZF9vcHM7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiAjZW5kaWYg LyogX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVGX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyBiL2RyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYwppbmRleCAwMThkZThjLi44ODUxYTlj IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3Rs LmMKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5jCkBA IC0yNjAsNiArMjYwLDggQEAgc3RhdGljIGludCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkX2lvY3Rs KHZvaWQgKmRhdGEpCiAJaWYgKHNndF9pbmZvID09IE5VTEwgfHwgIXNndF9pbmZvLT52YWxpZCkg LyogY2FuJ3QgZmluZCBzZ3QgZnJvbSB0aGUgdGFibGUgKi8KIAkJcmV0dXJuIC0xOwogCisJbXV0 ZXhfbG9jaygmaHlwZXJfZG1hYnVmX3ByaXZhdGUubG9jayk7CisKIAlzZ3RfaW5mby0+bnVtX2lt cG9ydGVycysrOwogCiAJLyogc2VuZCBub3RpZmljYXRpb24gZm9yIGV4cG9ydF9mZCB0byBleHBv cnRlciAqLwpAQCAtMjc0LDYgKzI3Niw3IEBAIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9y dF9mZF9pb2N0bCh2b2lkICpkYXRhKQogCQlrZnJlZShyZXEpOwogCQlkZXZfZXJyKGh5cGVyX2Rt YWJ1Zl9wcml2YXRlLmRldmljZSwgIkZhaWxlZCB0byBjcmVhdGUgc2d0IG9yIG5vdGlmeSBleHBv cnRlclxuIik7CiAJCXNndF9pbmZvLT5udW1faW1wb3J0ZXJzLS07CisJCW11dGV4X3VubG9jaygm aHlwZXJfZG1hYnVmX3ByaXZhdGUubG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlrZnJl ZShyZXEpOwpAQCAtMjgyLDYgKzI4NSw3IEBAIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9y dF9mZF9pb2N0bCh2b2lkICpkYXRhKQogCQlkZXZfZXJyKGh5cGVyX2RtYWJ1Zl9wcml2YXRlLmRl dmljZSwKIAkJCSJCdWZmZXIgaW52YWxpZFxuIik7CiAJCXNndF9pbmZvLT5udW1faW1wb3J0ZXJz LS07CisJCW11dGV4X3VubG9jaygmaHlwZXJfZG1hYnVmX3ByaXZhdGUubG9jayk7CiAJCXJldHVy biAtMTsKIAl9IGVsc2UgewogCQlkZXZfZGJnKGh5cGVyX2RtYWJ1Zl9wcml2YXRlLmRldmljZSwg IkNhbiBpbXBvcnQgYnVmZmVyXG4iKTsKQEAgLTMwMyw2ICszMDcsNyBAQCBzdGF0aWMgaW50IGh5 cGVyX2RtYWJ1Zl9leHBvcnRfZmRfaW9jdGwodm9pZCAqZGF0YSkKIAogCQlpZiAoIWRhdGFfcGFn ZXMpIHsKIAkJCXNndF9pbmZvLT5udW1faW1wb3J0ZXJzLS07CisJCQltdXRleF91bmxvY2soJmh5 cGVyX2RtYWJ1Zl9wcml2YXRlLmxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAt MzE4LDYgKzMyMyw3IEBAIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9ydF9mZF9pb2N0bCh2 b2lkICpkYXRhKQogCQlyZXQgPSBleHBvcnRfZmRfYXR0ci0+ZmQ7CiAJfQogCisJbXV0ZXhfdW5s b2NrKCZoeXBlcl9kbWFidWZfcHJpdmF0ZS5sb2NrKTsKIAlkZXZfZGJnKGh5cGVyX2RtYWJ1Zl9w cml2YXRlLmRldmljZSwgIiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9j b21tLmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29t bS5jCmluZGV4IGE4Y2NlMjYuLjlkNjdiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVy X2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmMKKysrIGIvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYwpAQCAtMjc4LDYgKzI3OCw4IEBA IGludCBoeXBlcl9kbWFidWZfeGVuX2luaXRfdHhfcmJ1ZihpbnQgZG9taWQpCiAJcmluZ19pbmZv LT5pcnEgPSByZXQ7CiAJcmluZ19pbmZvLT5wb3J0ID0gYWxsb2NfdW5ib3VuZC5wb3J0OwogCisJ bXV0ZXhfaW5pdCgmcmluZ19pbmZvLT5sb2NrKTsKKwogCWRldl9kYmcoaHlwZXJfZG1hYnVmX3By aXZhdGUuZGV2aWNlLAogCQkiJXM6IGFsbG9jYXRlZCBldmVudGNoYW5uZWwgZ3JlZiAlZCAgcG9y dDogJWQgIGlycTogJWRcbiIsCiAJCV9fZnVuY19fLApAQCAtNTEyLDYgKzUxNCw5IEBAIGludCBo eXBlcl9kbWFidWZfeGVuX3NlbmRfcmVxKGludCBkb21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9y ZXEgKnJlcSwgaW50IHdhaXQpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCisJbXV0ZXhfbG9j aygmcmluZ19pbmZvLT5sb2NrKTsKKwogCXJpbmcgPSAmcmluZ19pbmZvLT5yaW5nX2Zyb250Owog CiAJaWYgKFJJTkdfRlVMTChyaW5nKSkKQEAgLTUxOSw2ICs1MjQsNyBAQCBpbnQgaHlwZXJfZG1h YnVmX3hlbl9zZW5kX3JlcShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEs IGludCB3YWl0KQogCiAJbmV3X3JlcSA9IFJJTkdfR0VUX1JFUVVFU1QocmluZywgcmluZy0+cmVx X3Byb2RfcHZ0KTsKIAlpZiAoIW5ld19yZXEpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyaW5nX2luZm8t PmxvY2spOwogCQlkZXZfZXJyKGh5cGVyX2RtYWJ1Zl9wcml2YXRlLmRldmljZSwKIAkJCSJOVUxM IFJFUVVFU1RcbiIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTU0OCwxMyArNTU0LDE3IEBAIGludCBo eXBlcl9kbWFidWZfeGVuX3NlbmRfcmVxKGludCBkb21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9y ZXEgKnJlcSwgaW50IHdhaXQpCiAJCX0KIAogCQlpZiAodGltZW91dCA8IDApIHsKKwkJCW11dGV4 X3VubG9jaygmcmluZ19pbmZvLT5sb2NrKTsKIAkJCWRldl9lcnIoaHlwZXJfZG1hYnVmX3ByaXZh dGUuZGV2aWNlLCAicmVxdWVzdCB0aW1lZC1vdXRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJ fQogCisJCW11dGV4X3VubG9jaygmcmluZ19pbmZvLT5sb2NrKTsKIAkJcmV0dXJuIHJlcV9wZW5k aW5nLnN0YXR1czsKIAl9CiAKKwltdXRleF91bmxvY2soJnJpbmdfaW5mby0+bG9jayk7CisKIAly ZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9o eXBlcl9kbWFidWZfeGVuX2NvbW0uaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlw ZXJfZG1hYnVmX3hlbl9jb21tLmgKaW5kZXggOWM5MzE2NS4uMDUzM2U0ZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uaAorKysg Yi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oCkBA IC0zOSw2ICszOSw3IEBAIHN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gewogICAgICAgICBp bnQgZ3JlZl9yaW5nOwogICAgICAgICBpbnQgaXJxOwogICAgICAgICBpbnQgcG9ydDsKKwlzdHJ1 Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgeGVuYnVzX3dhdGNoIHdhdGNoOwogfTsKIAotLSAKMi43 LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs