From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2E2CC433ED for ; Thu, 6 May 2021 18:58:33 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 92BF361001 for ; Thu, 6 May 2021 18:58:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 92BF361001 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BA0096EDBD; Thu, 6 May 2021 18:57:22 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B3FB6ED08; Thu, 6 May 2021 18:57:13 +0000 (UTC) IronPort-SDR: DMadxe8GNJ3I3seOswWHSUhiyBsOLS/55XYVvksOrXKzn1+VJA1roSvuzkQlK4D0DuWSIdR1T5 tLh5NdyrxNug== X-IronPort-AV: E=McAfee;i="6200,9189,9976"; a="198195443" X-IronPort-AV: E=Sophos;i="5.82,278,1613462400"; d="scan'208";a="198195443" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2021 11:57:11 -0700 IronPort-SDR: 8DlV76Y7YMS7c9MxcxA0ZaLyyv3QBGEihJlYXwH2ZguM4co5dQIQ+VEXDJ8n6a/cA7X8AKl8DQ i0D0+sjOksaA== X-IronPort-AV: E=Sophos;i="5.82,278,1613462400"; d="scan'208";a="469583441" Received: from dhiatt-server.jf.intel.com ([10.54.81.3]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2021 11:57:09 -0700 From: Matthew Brost To: , Subject: [RFC PATCH 27/97] drm/i915/guc: New CTB based communication Date: Thu, 6 May 2021 12:13:41 -0700 Message-Id: <20210506191451.77768-28-matthew.brost@intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210506191451.77768-1-matthew.brost@intel.com> References: <20210506191451.77768-1-matthew.brost@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: matthew.brost@intel.com, tvrtko.ursulin@intel.com, daniele.ceraolospurio@intel.com, jason.ekstrand@intel.com, jon.bloomfield@intel.com, daniel.vetter@intel.com, john.c.harrison@intel.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Michal Wajdeczko Format of the CTB messages has changed: - support for multiple formats - message fence is now part of the header - reuse of unified HXG message formats Signed-off-by: Michal Wajdeczko Signed-off-by: Matthew Brost Cc: Piotr PiĆ³rkowski --- .../gt/uc/abi/guc_communication_ctb_abi.h | 56 +++++ drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 193 +++++++----------- drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h | 2 +- 3 files changed, 134 insertions(+), 117 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h b/drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h index 127b256a662c..92660726c094 100644 --- a/drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h +++ b/drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h @@ -60,6 +60,62 @@ struct guc_ct_buffer_desc { } __packed; static_assert(sizeof(struct guc_ct_buffer_desc) == 64); +/** + * DOC: CTB Message + * + * +---+-------+--------------------------------------------------------------+ + * | | Bits | Description | + * +===+=======+==============================================================+ + * | 0 | 31:16 | **FENCE** - message identifier | + * | +-------+--------------------------------------------------------------+ + * | | 15:12 | **FORMAT** - format of the CTB message | + * | | | - _`GUC_CTB_FORMAT_HXG` = 0 - see `CTB HXG Message`_ | + * | +-------+--------------------------------------------------------------+ + * | | 11:8 | **RESERVED** | + * | +-------+--------------------------------------------------------------+ + * | | 7:0 | **NUM_DWORDS** - length of the CTB message (w/o header) | + * +---+-------+--------------------------------------------------------------+ + * | 1 | 31:0 | optional (depends on FORMAT) | + * +---+-------+ | + * |...| | | + * +---+-------+ | + * | n | 31:0 | | + * +---+-------+--------------------------------------------------------------+ + */ + +#define GUC_CTB_MSG_MIN_LEN 1u +#define GUC_CTB_MSG_MAX_LEN 256u +#define GUC_CTB_MSG_0_FENCE (0xffff << 16) +#define GUC_CTB_MSG_0_FORMAT (0xf << 12) +#define GUC_CTB_FORMAT_HXG 0u +#define GUC_CTB_MSG_0_RESERVED (0xf << 8) +#define GUC_CTB_MSG_0_NUM_DWORDS (0xff << 0) + +/** + * DOC: CTB HXG Message + * + * +---+-------+--------------------------------------------------------------+ + * | | Bits | Description | + * +===+=======+==============================================================+ + * | 0 | 31:16 | FENCE | + * | +-------+--------------------------------------------------------------+ + * | | 15:12 | FORMAT = GUC_CTB_FORMAT_HXG_ | + * | +-------+--------------------------------------------------------------+ + * | | 11:8 | RESERVED = MBZ | + * | +-------+--------------------------------------------------------------+ + * | | 7:0 | NUM_DWORDS = length (in dwords) of the embedded HXG message | + * +---+-------+--------------------------------------------------------------+ + * | 1 | 31:0 | +--------------------------------------------------------+ | + * +---+-------+ | | | + * |...| | | Embedded `HXG Message`_ | | + * +---+-------+ | | | + * | n | 31:0 | +--------------------------------------------------------+ | + * +---+-------+--------------------------------------------------------------+ + */ + +#define GUC_CTB_HXG_MSG_MIN_LEN (GUC_CTB_MSG_MIN_LEN + GUC_HXG_MSG_MIN_LEN) +#define GUC_CTB_HXG_MSG_MAX_LEN GUC_CTB_MSG_MAX_LEN + /** * DOC: CTB based communication * diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c index e25b49a45107..217ab3ebd1af 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c @@ -343,24 +343,6 @@ static u32 ct_get_next_fence(struct intel_guc_ct *ct) return ++ct->requests.last_fence; } -/** - * DOC: CTB Host to GuC request - * - * Format of the CTB Host to GuC request message is as follows:: - * - * +------------+---------+---------+---------+---------+ - * | msg[0] | [1] | [2] | ... | [n-1] | - * +------------+---------+---------+---------+---------+ - * | MESSAGE | MESSAGE PAYLOAD | - * + HEADER +---------+---------+---------+---------+ - * | | 0 | 1 | ... | n | - * +============+=========+=========+=========+=========+ - * | len >= 1 | FENCE | request specific data | - * +------+-----+---------+---------+---------+---------+ - * - * ^-----------------len-------------------^ - */ - static int ct_write(struct intel_guc_ct *ct, const u32 *action, u32 len /* in dwords */, @@ -373,6 +355,7 @@ static int ct_write(struct intel_guc_ct *ct, u32 size = ctb->size; u32 used; u32 header; + u32 hxg; u32 *cmds = ctb->cmds; unsigned int i; @@ -403,22 +386,24 @@ static int ct_write(struct intel_guc_ct *ct, return -ENOSPC; /* - * Write the message. The format is the following: - * DW0: header (including action code) - * DW1: fence - * DW2+: action data + * dw0: CT header (including fence) + * dw1: HXG header */ - header = (len << GUC_CT_MSG_LEN_SHIFT) | - GUC_CT_MSG_SEND_STATUS | - (action[0] << GUC_CT_MSG_ACTION_SHIFT); + header = FIELD_PREP(GUC_CTB_MSG_0_FORMAT, GUC_CTB_FORMAT_HXG) | + FIELD_PREP(GUC_CTB_MSG_0_NUM_DWORDS, len) | + FIELD_PREP(GUC_CTB_MSG_0_FENCE, fence); + + hxg = FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) | + FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION | + GUC_HXG_REQUEST_MSG_0_DATA0, action[0]); - CT_DEBUG(ct, "writing %*ph %*ph %*ph\n", - 4, &header, 4, &fence, 4 * (len - 1), &action[1]); + CT_DEBUG(ct, "writing (tail %u) %*ph %*ph %*ph\n", + tail, 4, &header, 4, &hxg, 4 * (len - 1), &action[1]); cmds[tail] = header; tail = (tail + 1) % size; - cmds[tail] = fence; + cmds[tail] = hxg; tail = (tail + 1) % size; for (i = 1; i < len; i++) { @@ -574,21 +559,6 @@ int intel_guc_ct_send(struct intel_guc_ct *ct, const u32 *action, u32 len, return ret; } -static inline unsigned int ct_header_get_len(u32 header) -{ - return (header >> GUC_CT_MSG_LEN_SHIFT) & GUC_CT_MSG_LEN_MASK; -} - -static inline unsigned int ct_header_get_action(u32 header) -{ - return (header >> GUC_CT_MSG_ACTION_SHIFT) & GUC_CT_MSG_ACTION_MASK; -} - -static inline bool ct_header_is_response(u32 header) -{ - return !!(header & GUC_CT_MSG_IS_RESPONSE); -} - static struct ct_incoming_msg *ct_alloc_msg(u32 num_dwords) { struct ct_incoming_msg *msg; @@ -651,7 +621,7 @@ static int ct_read(struct intel_guc_ct *ct, struct ct_incoming_msg **msg) head = (head + 1) % size; /* message len with header */ - len = ct_header_get_len(header) + 1; + len = FIELD_GET(GUC_CTB_MSG_0_NUM_DWORDS, header) + GUC_CTB_MSG_MIN_LEN; if (unlikely(len > (u32)available)) { CT_ERROR(ct, "Incomplete message %*ph %*ph %*ph\n", 4, &header, @@ -694,55 +664,24 @@ static int ct_read(struct intel_guc_ct *ct, struct ct_incoming_msg **msg) return -EPIPE; } -/** - * DOC: CTB GuC to Host response - * - * Format of the CTB GuC to Host response message is as follows:: - * - * +------------+---------+---------+---------+---------+---------+ - * | msg[0] | [1] | [2] | [3] | ... | [n-1] | - * +------------+---------+---------+---------+---------+---------+ - * | MESSAGE | MESSAGE PAYLOAD | - * + HEADER +---------+---------+---------+---------+---------+ - * | | 0 | 1 | 2 | ... | n | - * +============+=========+=========+=========+=========+=========+ - * | len >= 2 | FENCE | STATUS | response specific data | - * +------+-----+---------+---------+---------+---------+---------+ - * - * ^-----------------------len-----------------------^ - */ - static int ct_handle_response(struct intel_guc_ct *ct, struct ct_incoming_msg *response) { - u32 header = response->msg[0]; - u32 len = ct_header_get_len(header); - u32 fence; - u32 status; - u32 datalen; + u32 len = FIELD_GET(GUC_CTB_MSG_0_NUM_DWORDS, response->msg[0]); + u32 fence = FIELD_GET(GUC_CTB_MSG_0_FENCE, response->msg[0]); + const u32 *hxg = &response->msg[GUC_CTB_MSG_MIN_LEN]; + const u32 *data = &hxg[GUC_HXG_MSG_MIN_LEN]; + u32 datalen = len - GUC_HXG_MSG_MIN_LEN; struct ct_request *req; unsigned long flags; bool found = false; int err = 0; - GEM_BUG_ON(!ct_header_is_response(header)); + GEM_BUG_ON(len < GUC_HXG_MSG_MIN_LEN); + GEM_BUG_ON(FIELD_GET(GUC_HXG_MSG_0_ORIGIN, hxg[0]) != GUC_HXG_ORIGIN_GUC); + GEM_BUG_ON(FIELD_GET(GUC_HXG_MSG_0_TYPE, hxg[0]) != GUC_HXG_TYPE_RESPONSE_SUCCESS && + FIELD_GET(GUC_HXG_MSG_0_TYPE, hxg[0]) != GUC_HXG_TYPE_RESPONSE_FAILURE); - /* Response payload shall at least include fence and status */ - if (unlikely(len < 2)) { - CT_ERROR(ct, "Corrupted response (len %u)\n", len); - return -EPROTO; - } - - fence = response->msg[1]; - status = response->msg[2]; - datalen = len - 2; - - /* Format of the status dword follows HXG header */ - if (unlikely(FIELD_GET(GUC_HXG_MSG_0_ORIGIN, status) != GUC_HXG_ORIGIN_GUC)) { - CT_ERROR(ct, "Corrupted response (status %#x)\n", status); - return -EPROTO; - } - - CT_DEBUG(ct, "response fence %u status %#x\n", fence, status); + CT_DEBUG(ct, "response fence %u status %#x\n", fence, hxg[0]); spin_lock_irqsave(&ct->requests.lock, flags); list_for_each_entry(req, &ct->requests.pending, link) { @@ -758,9 +697,9 @@ static int ct_handle_response(struct intel_guc_ct *ct, struct ct_incoming_msg *r err = -EMSGSIZE; } if (datalen) - memcpy(req->response_buf, response->msg + 3, 4 * datalen); + memcpy(req->response_buf, data, 4 * datalen); req->response_len = datalen; - WRITE_ONCE(req->status, status); + WRITE_ONCE(req->status, hxg[0]); found = true; break; } @@ -781,14 +720,15 @@ static int ct_handle_response(struct intel_guc_ct *ct, struct ct_incoming_msg *r static int ct_process_request(struct intel_guc_ct *ct, struct ct_incoming_msg *request) { struct intel_guc *guc = ct_to_guc(ct); - u32 header, action, len; + const u32 *hxg; const u32 *payload; + u32 action, len; int ret; - header = request->msg[0]; - payload = &request->msg[1]; - action = ct_header_get_action(header); - len = ct_header_get_len(header); + hxg = &request->msg[GUC_CTB_MSG_MIN_LEN]; + payload = &hxg[GUC_HXG_MSG_MIN_LEN]; + action = FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, hxg[0]); + len = request->size - GUC_CTB_HXG_MSG_MIN_LEN; CT_DEBUG(ct, "request %x %*ph\n", action, 4 * len, payload); @@ -850,29 +790,12 @@ static void ct_incoming_request_worker_func(struct work_struct *w) queue_work(system_unbound_wq, &ct->requests.worker); } -/** - * DOC: CTB GuC to Host request - * - * Format of the CTB GuC to Host request message is as follows:: - * - * +------------+---------+---------+---------+---------+---------+ - * | msg[0] | [1] | [2] | [3] | ... | [n-1] | - * +------------+---------+---------+---------+---------+---------+ - * | MESSAGE | MESSAGE PAYLOAD | - * + HEADER +---------+---------+---------+---------+---------+ - * | | 0 | 1 | 2 | ... | n | - * +============+=========+=========+=========+=========+=========+ - * | len | request specific data | - * +------+-----+---------+---------+---------+---------+---------+ - * - * ^-----------------------len-----------------------^ - */ - -static int ct_handle_request(struct intel_guc_ct *ct, struct ct_incoming_msg *request) +static int ct_handle_event(struct intel_guc_ct *ct, struct ct_incoming_msg *request) { + const u32 *hxg = &request->msg[GUC_CTB_MSG_MIN_LEN]; unsigned long flags; - GEM_BUG_ON(ct_header_is_response(request->msg[0])); + GEM_BUG_ON(FIELD_GET(GUC_HXG_MSG_0_TYPE, hxg[0]) != GUC_HXG_TYPE_EVENT); spin_lock_irqsave(&ct->requests.lock, flags); list_add_tail(&request->link, &ct->requests.incoming); @@ -882,15 +805,53 @@ static int ct_handle_request(struct intel_guc_ct *ct, struct ct_incoming_msg *re return 0; } -static void ct_handle_msg(struct intel_guc_ct *ct, struct ct_incoming_msg *msg) +static int ct_handle_hxg(struct intel_guc_ct *ct, struct ct_incoming_msg *msg) { - u32 header = msg->msg[0]; + u32 origin, type; + u32 *hxg; int err; - if (ct_header_is_response(header)) + if (unlikely(msg->size < GUC_CTB_HXG_MSG_MIN_LEN)) + return -EBADMSG; + + hxg = &msg->msg[GUC_CTB_MSG_MIN_LEN]; + + origin = FIELD_GET(GUC_HXG_MSG_0_ORIGIN, hxg[0]); + if (unlikely(origin != GUC_HXG_ORIGIN_GUC)) { + err = -EPROTO; + goto failed; + } + + type = FIELD_GET(GUC_HXG_MSG_0_TYPE, hxg[0]); + switch (type) { + case GUC_HXG_TYPE_EVENT: + err = ct_handle_event(ct, msg); + break; + case GUC_HXG_TYPE_RESPONSE_SUCCESS: + case GUC_HXG_TYPE_RESPONSE_FAILURE: err = ct_handle_response(ct, msg); + break; + default: + err = -EOPNOTSUPP; + } + + if (unlikely(err)) { +failed: + CT_ERROR(ct, "Failed to handle HXG message (%pe) %*ph\n", + ERR_PTR(err), 4 * GUC_HXG_MSG_MIN_LEN, hxg); + } + return err; +} + +static void ct_handle_msg(struct intel_guc_ct *ct, struct ct_incoming_msg *msg) +{ + u32 format = FIELD_GET(GUC_CTB_MSG_0_FORMAT, msg->msg[0]); + int err; + + if (format == GUC_CTB_FORMAT_HXG) + err = ct_handle_hxg(ct, msg); else - err = ct_handle_request(ct, msg); + err = -EOPNOTSUPP; if (unlikely(err)) { CT_ERROR(ct, "Failed to process CT message (%pe) %*ph\n", diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h index 905202caaad3..1ae2dde6db93 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h @@ -61,7 +61,7 @@ struct intel_guc_ct { struct tasklet_struct receive_tasklet; struct { - u32 last_fence; /* last fence used to send request */ + u16 last_fence; /* last fence used to send request */ spinlock_t lock; /* protects pending requests list */ struct list_head pending; /* requests waiting for response */ -- 2.28.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DA61C433B4 for ; Thu, 6 May 2021 18:58:43 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F23C861164 for ; Thu, 6 May 2021 18:58:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F23C861164 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 77CE46ECF5; Thu, 6 May 2021 18:57:25 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B3FB6ED08; Thu, 6 May 2021 18:57:13 +0000 (UTC) IronPort-SDR: DMadxe8GNJ3I3seOswWHSUhiyBsOLS/55XYVvksOrXKzn1+VJA1roSvuzkQlK4D0DuWSIdR1T5 tLh5NdyrxNug== X-IronPort-AV: E=McAfee;i="6200,9189,9976"; a="198195443" X-IronPort-AV: E=Sophos;i="5.82,278,1613462400"; d="scan'208";a="198195443" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2021 11:57:11 -0700 IronPort-SDR: 8DlV76Y7YMS7c9MxcxA0ZaLyyv3QBGEihJlYXwH2ZguM4co5dQIQ+VEXDJ8n6a/cA7X8AKl8DQ i0D0+sjOksaA== X-IronPort-AV: E=Sophos;i="5.82,278,1613462400"; d="scan'208";a="469583441" Received: from dhiatt-server.jf.intel.com ([10.54.81.3]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2021 11:57:09 -0700 From: Matthew Brost To: , Date: Thu, 6 May 2021 12:13:41 -0700 Message-Id: <20210506191451.77768-28-matthew.brost@intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210506191451.77768-1-matthew.brost@intel.com> References: <20210506191451.77768-1-matthew.brost@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [RFC PATCH 27/97] drm/i915/guc: New CTB based communication X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jason.ekstrand@intel.com, daniel.vetter@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogTWljaGFsIFdhamRlY3prbyA8bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+CgpGb3Jt YXQgb2YgdGhlIENUQiBtZXNzYWdlcyBoYXMgY2hhbmdlZDoKIC0gc3VwcG9ydCBmb3IgbXVsdGlw bGUgZm9ybWF0cwogLSBtZXNzYWdlIGZlbmNlIGlzIG5vdyBwYXJ0IG9mIHRoZSBoZWFkZXIKIC0g cmV1c2Ugb2YgdW5pZmllZCBIWEcgbWVzc2FnZSBmb3JtYXRzCgpTaWduZWQtb2ZmLWJ5OiBNaWNo YWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTog TWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+CkNjOiBQaW90ciBQacOzcmtv d3NraSA8cGlvdHIucGlvcmtvd3NraUBpbnRlbC5jb20+Ci0tLQogLi4uL2d0L3VjL2FiaS9ndWNf Y29tbXVuaWNhdGlvbl9jdGJfYWJpLmggICAgIHwgIDU2ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuYyAgICAgfCAxOTMgKysrKysrKy0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuaCAgICAgfCAgIDIgKy0KIDMg ZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9hYmkvZ3VjX2NvbW11bmljYXRpb25f Y3RiX2FiaS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19jb21tdW5pY2F0 aW9uX2N0Yl9hYmkuaAppbmRleCAxMjdiMjU2YTY2MmMuLjkyNjYwNzI2YzA5NCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19jb21tdW5pY2F0aW9uX2N0Yl9h YmkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9hYmkvZ3VjX2NvbW11bmljYXRp b25fY3RiX2FiaS5oCkBAIC02MCw2ICs2MCw2MiBAQCBzdHJ1Y3QgZ3VjX2N0X2J1ZmZlcl9kZXNj IHsKIH0gX19wYWNrZWQ7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgZ3VjX2N0X2J1ZmZl cl9kZXNjKSA9PSA2NCk7CiAKKy8qKgorICogRE9DOiBDVEIgTWVzc2FnZQorICoKKyAqICArLS0t Ky0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCisgKiAgfCAgIHwgQml0cyAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICs9PT0rPT09PT09 PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSsKKyAqICB8IDAgfCAzMToxNiB8ICoqRkVOQ0UqKiAtIG1lc3NhZ2UgaWRlbnRpZmll ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCAgICstLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworICogIHwgICB8IDE1OjEyIHwgKipGT1JNQVQqKiAtIGZvcm1hdCBvZiB0aGUgQ1RCIG1lc3Nh Z2UgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICB8ICAgfCAgICAgICB8ICAtIF9gR1VDX0NU Ql9GT1JNQVRfSFhHYCA9IDAgLSBzZWUgYENUQiBIWEcgTWVzc2FnZWBfICAgICAgICB8CisgKiAg fCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworICogIHwgICB8ICAxMTo4IHwgKipSRVNFUlZFRCoqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICB8ICAgKy0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCisgKiAgfCAgIHwgICA3OjAgfCAqKk5VTV9EV09SRFMqKiAtIGxlbmd0aCBv ZiB0aGUgQ1RCIG1lc3NhZ2UgKHcvbyBoZWFkZXIpICAgICAgfAorICogICstLS0rLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKKyAqICB8IDEgfCAgMzE6MCB8IG9wdGlvbmFsIChkZXBlbmRzIG9uIEZPUk1BVCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgKy0tLSstLS0tLS0tKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor ICogIHwuLi58ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICArLS0tKy0tLS0tLS0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCBu IHwgIDMxOjAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAorICogICstLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCisjZGVmaW5l IEdVQ19DVEJfTVNHX01JTl9MRU4JCQkxdQorI2RlZmluZSBHVUNfQ1RCX01TR19NQVhfTEVOCQkJ MjU2dQorI2RlZmluZSBHVUNfQ1RCX01TR18wX0ZFTkNFCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZp bmUgR1VDX0NUQl9NU0dfMF9GT1JNQVQJCQkoMHhmIDw8IDEyKQorI2RlZmluZSAgIEdVQ19DVEJf Rk9STUFUX0hYRwkJCTB1CisjZGVmaW5lIEdVQ19DVEJfTVNHXzBfUkVTRVJWRUQJCQkoMHhmIDw8 IDgpCisjZGVmaW5lIEdVQ19DVEJfTVNHXzBfTlVNX0RXT1JEUwkJKDB4ZmYgPDwgMCkKKworLyoq CisgKiBET0M6IENUQiBIWEcgTWVzc2FnZQorICoKKyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg KiAgfCAgIHwgQml0cyAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorICogICs9PT0rPT09PT09PSs9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAqICB8IDAg fCAzMToxNiB8IEZFTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgKiAgfCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogIHwgICB8IDE1OjEy IHwgRk9STUFUID0gR1VDX0NUQl9GT1JNQVRfSFhHXyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKyAqICB8ICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgfCAgIHwgIDExOjggfCBSRVNF UlZFRCA9IE1CWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAorICogIHwgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8ICAgfCAgIDc6MCB8IE5VTV9EV09SRFMg PSBsZW5ndGggKGluIGR3b3Jkcykgb2YgdGhlIGVtYmVkZGVkIEhYRyBtZXNzYWdlICB8CisgKiAg Ky0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworICogIHwgMSB8ICAzMTowIHwgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAqICArLS0tKy0t LS0tLS0rICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICB8CisgKiAgfC4uLnwgICAgICAgfCAgfCAgRW1iZWRkZWQgYEhYRyBNZXNzYWdl YF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICogICstLS0rLS0tLS0tLSsg IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIHwKKyAqICB8IG4gfCAgMzE6MCB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICB8CisgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor ICovCisKKyNkZWZpbmUgR1VDX0NUQl9IWEdfTVNHX01JTl9MRU4JCShHVUNfQ1RCX01TR19NSU5f TEVOICsgR1VDX0hYR19NU0dfTUlOX0xFTikKKyNkZWZpbmUgR1VDX0NUQl9IWEdfTVNHX01BWF9M RU4JCUdVQ19DVEJfTVNHX01BWF9MRU4KKwogLyoqCiAgKiBET0M6IENUQiBiYXNlZCBjb21tdW5p Y2F0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf Z3VjX2N0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuYwppbmRl eCBlMjViNDlhNDUxMDcuLjIxN2FiM2ViZDFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2N0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv dWMvaW50ZWxfZ3VjX2N0LmMKQEAgLTM0MywyNCArMzQzLDYgQEAgc3RhdGljIHUzMiBjdF9nZXRf bmV4dF9mZW5jZShzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpjdCkKIAlyZXR1cm4gKytjdC0+cmVxdWVz dHMubGFzdF9mZW5jZTsKIH0KIAotLyoqCi0gKiBET0M6IENUQiBIb3N0IHRvIEd1QyByZXF1ZXN0 Ci0gKgotICogRm9ybWF0IG9mIHRoZSBDVEIgSG9zdCB0byBHdUMgcmVxdWVzdCBtZXNzYWdlIGlz IGFzIGZvbGxvd3M6OgotICoKLSAqICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCi0gKiAgICAgIHwgICBtc2dbMF0gICB8ICAgWzFdICAg fCAgIFsyXSAgIHwgICAuLi4gICB8ICBbbi0xXSAgfAotICogICAgICArLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKLSAqICAgICAgfCAgIE1FU1NB R0UgIHwgICAgICAgTUVTU0FHRSBQQVlMT0FEICAgICAgICAgICAgICAgICB8Ci0gKiAgICAgICsg ICBIRUFERVIgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKwotICog ICAgICB8ICAgICAgICAgICAgfCAgICAwICAgIHwgICAgMSAgICB8ICAgLi4uICAgfCAgICBuICAg IHwKLSAqICAgICAgKz09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PSs9 PT09PT09PT0rCi0gKiAgICAgIHwgIGxlbiA+PSAxICB8ICBGRU5DRSAgfCAgICAgcmVxdWVzdCBz cGVjaWZpYyBkYXRhICAgfAotICogICAgICArLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKLSAqCi0gKiAgICAgICAgICAgICAgICAgICBeLS0tLS0t LS0tLS0tLS0tLS1sZW4tLS0tLS0tLS0tLS0tLS0tLS0tXgotICovCi0KIHN0YXRpYyBpbnQgY3Rf d3JpdGUoc3RydWN0IGludGVsX2d1Y19jdCAqY3QsCiAJCSAgICBjb25zdCB1MzIgKmFjdGlvbiwK IAkJICAgIHUzMiBsZW4gLyogaW4gZHdvcmRzICovLApAQCAtMzczLDYgKzM1NSw3IEBAIHN0YXRp YyBpbnQgY3Rfd3JpdGUoc3RydWN0IGludGVsX2d1Y19jdCAqY3QsCiAJdTMyIHNpemUgPSBjdGIt PnNpemU7CiAJdTMyIHVzZWQ7CiAJdTMyIGhlYWRlcjsKKwl1MzIgaHhnOwogCXUzMiAqY21kcyA9 IGN0Yi0+Y21kczsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtNDAzLDIyICszODYsMjQgQEAgc3Rh dGljIGludCBjdF93cml0ZShzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpjdCwKIAkJcmV0dXJuIC1FTk9T UEM7CiAKIAkvKgotCSAqIFdyaXRlIHRoZSBtZXNzYWdlLiBUaGUgZm9ybWF0IGlzIHRoZSBmb2xs b3dpbmc6Ci0JICogRFcwOiBoZWFkZXIgKGluY2x1ZGluZyBhY3Rpb24gY29kZSkKLQkgKiBEVzE6 IGZlbmNlCi0JICogRFcyKzogYWN0aW9uIGRhdGEKKwkgKiBkdzA6IENUIGhlYWRlciAoaW5jbHVk aW5nIGZlbmNlKQorCSAqIGR3MTogSFhHIGhlYWRlcgogCSAqLwotCWhlYWRlciA9IChsZW4gPDwg R1VDX0NUX01TR19MRU5fU0hJRlQpIHwKLQkJIEdVQ19DVF9NU0dfU0VORF9TVEFUVVMgfAotCQkg KGFjdGlvblswXSA8PCBHVUNfQ1RfTVNHX0FDVElPTl9TSElGVCk7CisJaGVhZGVyID0gRklFTERf UFJFUChHVUNfQ1RCX01TR18wX0ZPUk1BVCwgR1VDX0NUQl9GT1JNQVRfSFhHKSB8CisJCSBGSUVM RF9QUkVQKEdVQ19DVEJfTVNHXzBfTlVNX0RXT1JEUywgbGVuKSB8CisJCSBGSUVMRF9QUkVQKEdV Q19DVEJfTVNHXzBfRkVOQ0UsIGZlbmNlKTsKKworCWh4ZyA9IEZJRUxEX1BSRVAoR1VDX0hYR19N U0dfMF9UWVBFLCBHVUNfSFhHX1RZUEVfUkVRVUVTVCkgfAorCSAgICAgIEZJRUxEX1BSRVAoR1VD X0hYR19SRVFVRVNUX01TR18wX0FDVElPTiB8CisJCQkgR1VDX0hYR19SRVFVRVNUX01TR18wX0RB VEEwLCBhY3Rpb25bMF0pOwogCi0JQ1RfREVCVUcoY3QsICJ3cml0aW5nICUqcGggJSpwaCAlKnBo XG4iLAotCQkgNCwgJmhlYWRlciwgNCwgJmZlbmNlLCA0ICogKGxlbiAtIDEpLCAmYWN0aW9uWzFd KTsKKwlDVF9ERUJVRyhjdCwgIndyaXRpbmcgKHRhaWwgJXUpICUqcGggJSpwaCAlKnBoXG4iLAor CQkgdGFpbCwgNCwgJmhlYWRlciwgNCwgJmh4ZywgNCAqIChsZW4gLSAxKSwgJmFjdGlvblsxXSk7 CiAKIAljbWRzW3RhaWxdID0gaGVhZGVyOwogCXRhaWwgPSAodGFpbCArIDEpICUgc2l6ZTsKIAot CWNtZHNbdGFpbF0gPSBmZW5jZTsKKwljbWRzW3RhaWxdID0gaHhnOwogCXRhaWwgPSAodGFpbCAr IDEpICUgc2l6ZTsKIAogCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgewpAQCAtNTc0LDIxICs1 NTksNiBAQCBpbnQgaW50ZWxfZ3VjX2N0X3NlbmQoc3RydWN0IGludGVsX2d1Y19jdCAqY3QsIGNv bnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IGN0X2hlYWRlcl9nZXRfbGVuKHUzMiBoZWFkZXIpCi17Ci0JcmV0dXJu IChoZWFkZXIgPj4gR1VDX0NUX01TR19MRU5fU0hJRlQpICYgR1VDX0NUX01TR19MRU5fTUFTSzsK LX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3RfaGVhZGVyX2dldF9hY3Rpb24odTMy IGhlYWRlcikKLXsKLQlyZXR1cm4gKGhlYWRlciA+PiBHVUNfQ1RfTVNHX0FDVElPTl9TSElGVCkg JiBHVUNfQ1RfTVNHX0FDVElPTl9NQVNLOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY3RfaGVh ZGVyX2lzX3Jlc3BvbnNlKHUzMiBoZWFkZXIpCi17Ci0JcmV0dXJuICEhKGhlYWRlciAmIEdVQ19D VF9NU0dfSVNfUkVTUE9OU0UpOwotfQotCiBzdGF0aWMgc3RydWN0IGN0X2luY29taW5nX21zZyAq Y3RfYWxsb2NfbXNnKHUzMiBudW1fZHdvcmRzKQogewogCXN0cnVjdCBjdF9pbmNvbWluZ19tc2cg Km1zZzsKQEAgLTY1MSw3ICs2MjEsNyBAQCBzdGF0aWMgaW50IGN0X3JlYWQoc3RydWN0IGludGVs X2d1Y19jdCAqY3QsIHN0cnVjdCBjdF9pbmNvbWluZ19tc2cgKiptc2cpCiAJaGVhZCA9IChoZWFk ICsgMSkgJSBzaXplOwogCiAJLyogbWVzc2FnZSBsZW4gd2l0aCBoZWFkZXIgKi8KLQlsZW4gPSBj dF9oZWFkZXJfZ2V0X2xlbihoZWFkZXIpICsgMTsKKwlsZW4gPSBGSUVMRF9HRVQoR1VDX0NUQl9N U0dfMF9OVU1fRFdPUkRTLCBoZWFkZXIpICsgR1VDX0NUQl9NU0dfTUlOX0xFTjsKIAlpZiAodW5s aWtlbHkobGVuID4gKHUzMilhdmFpbGFibGUpKSB7CiAJCUNUX0VSUk9SKGN0LCAiSW5jb21wbGV0 ZSBtZXNzYWdlICUqcGggJSpwaCAlKnBoXG4iLAogCQkJIDQsICZoZWFkZXIsCkBAIC02OTQsNTUg KzY2NCwyNCBAQCBzdGF0aWMgaW50IGN0X3JlYWQoc3RydWN0IGludGVsX2d1Y19jdCAqY3QsIHN0 cnVjdCBjdF9pbmNvbWluZ19tc2cgKiptc2cpCiAJcmV0dXJuIC1FUElQRTsKIH0KIAotLyoqCi0g KiBET0M6IENUQiBHdUMgdG8gSG9zdCByZXNwb25zZQotICoKLSAqIEZvcm1hdCBvZiB0aGUgQ1RC IEd1QyB0byBIb3N0IHJlc3BvbnNlIG1lc3NhZ2UgaXMgYXMgZm9sbG93czo6Ci0gKgotICogICAg ICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rCi0gKiAgICAgIHwgICBtc2dbMF0gICB8ICAgWzFdICAgfCAgIFsyXSAgIHwgICBb M10gICB8ICAgLi4uICAgfCAgW24tMV0gIHwKLSAqICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKwotICogICAgICB8ICAg TUVTU0FHRSAgfCAgICAgICBNRVNTQUdFIFBBWUxPQUQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Ci0gKiAgICAgICsgICBIRUFERVIgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSsKLSAqICAgICAgfCAgICAgICAgICAgIHwgICAgMCAgICB8ICAg IDEgICAgfCAgICAyICAgIHwgICAuLi4gICB8ICAgIG4gICAgfAotICogICAgICArPT09PT09PT09 PT09Kz09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PSs9PT09PT09PT0rCi0g KiAgICAgIHwgIGxlbiA+PSAyICB8ICBGRU5DRSAgfCAgU1RBVFVTIHwgICByZXNwb25zZSBzcGVj aWZpYyBkYXRhICAgIHwKLSAqICAgICAgKy0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKwotICoKLSAqICAgICAgICAgICAgICAgICAg IF4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWxlbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXgotICov Ci0KIHN0YXRpYyBpbnQgY3RfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBpbnRlbF9ndWNfY3QgKmN0 LCBzdHJ1Y3QgY3RfaW5jb21pbmdfbXNnICpyZXNwb25zZSkKIHsKLQl1MzIgaGVhZGVyID0gcmVz cG9uc2UtPm1zZ1swXTsKLQl1MzIgbGVuID0gY3RfaGVhZGVyX2dldF9sZW4oaGVhZGVyKTsKLQl1 MzIgZmVuY2U7Ci0JdTMyIHN0YXR1czsKLQl1MzIgZGF0YWxlbjsKKwl1MzIgbGVuID0gRklFTERf R0VUKEdVQ19DVEJfTVNHXzBfTlVNX0RXT1JEUywgcmVzcG9uc2UtPm1zZ1swXSk7CisJdTMyIGZl bmNlID0gRklFTERfR0VUKEdVQ19DVEJfTVNHXzBfRkVOQ0UsIHJlc3BvbnNlLT5tc2dbMF0pOwor CWNvbnN0IHUzMiAqaHhnID0gJnJlc3BvbnNlLT5tc2dbR1VDX0NUQl9NU0dfTUlOX0xFTl07CisJ Y29uc3QgdTMyICpkYXRhID0gJmh4Z1tHVUNfSFhHX01TR19NSU5fTEVOXTsKKwl1MzIgZGF0YWxl biA9IGxlbiAtIEdVQ19IWEdfTVNHX01JTl9MRU47CiAJc3RydWN0IGN0X3JlcXVlc3QgKnJlcTsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAlpbnQgZXJyID0g MDsKIAotCUdFTV9CVUdfT04oIWN0X2hlYWRlcl9pc19yZXNwb25zZShoZWFkZXIpKTsKKwlHRU1f QlVHX09OKGxlbiA8IEdVQ19IWEdfTVNHX01JTl9MRU4pOworCUdFTV9CVUdfT04oRklFTERfR0VU KEdVQ19IWEdfTVNHXzBfT1JJR0lOLCBoeGdbMF0pICE9IEdVQ19IWEdfT1JJR0lOX0dVQyk7CisJ R0VNX0JVR19PTihGSUVMRF9HRVQoR1VDX0hYR19NU0dfMF9UWVBFLCBoeGdbMF0pICE9IEdVQ19I WEdfVFlQRV9SRVNQT05TRV9TVUNDRVNTICYmCisJCSAgIEZJRUxEX0dFVChHVUNfSFhHX01TR18w X1RZUEUsIGh4Z1swXSkgIT0gR1VDX0hYR19UWVBFX1JFU1BPTlNFX0ZBSUxVUkUpOwogCi0JLyog UmVzcG9uc2UgcGF5bG9hZCBzaGFsbCBhdCBsZWFzdCBpbmNsdWRlIGZlbmNlIGFuZCBzdGF0dXMg Ki8KLQlpZiAodW5saWtlbHkobGVuIDwgMikpIHsKLQkJQ1RfRVJST1IoY3QsICJDb3JydXB0ZWQg cmVzcG9uc2UgKGxlbiAldSlcbiIsIGxlbik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCWZl bmNlID0gcmVzcG9uc2UtPm1zZ1sxXTsKLQlzdGF0dXMgPSByZXNwb25zZS0+bXNnWzJdOwotCWRh dGFsZW4gPSBsZW4gLSAyOwotCi0JLyogRm9ybWF0IG9mIHRoZSBzdGF0dXMgZHdvcmQgZm9sbG93 cyBIWEcgaGVhZGVyICovCi0JaWYgKHVubGlrZWx5KEZJRUxEX0dFVChHVUNfSFhHX01TR18wX09S SUdJTiwgc3RhdHVzKSAhPSBHVUNfSFhHX09SSUdJTl9HVUMpKSB7Ci0JCUNUX0VSUk9SKGN0LCAi Q29ycnVwdGVkIHJlc3BvbnNlIChzdGF0dXMgJSN4KVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIC1F UFJPVE87Ci0JfQotCi0JQ1RfREVCVUcoY3QsICJyZXNwb25zZSBmZW5jZSAldSBzdGF0dXMgJSN4 XG4iLCBmZW5jZSwgc3RhdHVzKTsKKwlDVF9ERUJVRyhjdCwgInJlc3BvbnNlIGZlbmNlICV1IHN0 YXR1cyAlI3hcbiIsIGZlbmNlLCBoeGdbMF0pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0LT5y ZXF1ZXN0cy5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZjdC0+cmVx dWVzdHMucGVuZGluZywgbGluaykgewpAQCAtNzU4LDkgKzY5Nyw5IEBAIHN0YXRpYyBpbnQgY3Rf aGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBpbnRlbF9ndWNfY3QgKmN0LCBzdHJ1Y3QgY3RfaW5jb21p bmdfbXNnICpyCiAJCQllcnIgPSAtRU1TR1NJWkU7CiAJCX0KIAkJaWYgKGRhdGFsZW4pCi0JCQlt ZW1jcHkocmVxLT5yZXNwb25zZV9idWYsIHJlc3BvbnNlLT5tc2cgKyAzLCA0ICogZGF0YWxlbik7 CisJCQltZW1jcHkocmVxLT5yZXNwb25zZV9idWYsIGRhdGEsIDQgKiBkYXRhbGVuKTsKIAkJcmVx LT5yZXNwb25zZV9sZW4gPSBkYXRhbGVuOwotCQlXUklURV9PTkNFKHJlcS0+c3RhdHVzLCBzdGF0 dXMpOworCQlXUklURV9PTkNFKHJlcS0+c3RhdHVzLCBoeGdbMF0pOwogCQlmb3VuZCA9IHRydWU7 CiAJCWJyZWFrOwogCX0KQEAgLTc4MSwxNCArNzIwLDE1IEBAIHN0YXRpYyBpbnQgY3RfaGFuZGxl X3Jlc3BvbnNlKHN0cnVjdCBpbnRlbF9ndWNfY3QgKmN0LCBzdHJ1Y3QgY3RfaW5jb21pbmdfbXNn ICpyCiBzdGF0aWMgaW50IGN0X3Byb2Nlc3NfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpj dCwgc3RydWN0IGN0X2luY29taW5nX21zZyAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMgPSBjdF90b19ndWMoY3QpOwotCXUzMiBoZWFkZXIsIGFjdGlvbiwgbGVuOworCWNvbnN0 IHUzMiAqaHhnOwogCWNvbnN0IHUzMiAqcGF5bG9hZDsKKwl1MzIgYWN0aW9uLCBsZW47CiAJaW50 IHJldDsKIAotCWhlYWRlciA9IHJlcXVlc3QtPm1zZ1swXTsKLQlwYXlsb2FkID0gJnJlcXVlc3Qt Pm1zZ1sxXTsKLQlhY3Rpb24gPSBjdF9oZWFkZXJfZ2V0X2FjdGlvbihoZWFkZXIpOwotCWxlbiA9 IGN0X2hlYWRlcl9nZXRfbGVuKGhlYWRlcik7CisJaHhnID0gJnJlcXVlc3QtPm1zZ1tHVUNfQ1RC X01TR19NSU5fTEVOXTsKKwlwYXlsb2FkID0gJmh4Z1tHVUNfSFhHX01TR19NSU5fTEVOXTsKKwlh Y3Rpb24gPSBGSUVMRF9HRVQoR1VDX0hYR19FVkVOVF9NU0dfMF9BQ1RJT04sIGh4Z1swXSk7CisJ bGVuID0gcmVxdWVzdC0+c2l6ZSAtIEdVQ19DVEJfSFhHX01TR19NSU5fTEVOOwogCiAJQ1RfREVC VUcoY3QsICJyZXF1ZXN0ICV4ICUqcGhcbiIsIGFjdGlvbiwgNCAqIGxlbiwgcGF5bG9hZCk7CiAK QEAgLTg1MCwyOSArNzkwLDEyIEBAIHN0YXRpYyB2b2lkIGN0X2luY29taW5nX3JlcXVlc3Rfd29y a2VyX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCQlxdWV1ZV93b3JrKHN5c3RlbV91bmJv dW5kX3dxLCAmY3QtPnJlcXVlc3RzLndvcmtlcik7CiB9CiAKLS8qKgotICogRE9DOiBDVEIgR3VD IHRvIEhvc3QgcmVxdWVzdAotICoKLSAqIEZvcm1hdCBvZiB0aGUgQ1RCIEd1QyB0byBIb3N0IHJl cXVlc3QgbWVzc2FnZSBpcyBhcyBmb2xsb3dzOjoKLSAqCi0gKiAgICAgICstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKLSAqICAg ICAgfCAgIG1zZ1swXSAgIHwgICBbMV0gICB8ICAgWzJdICAgfCAgIFszXSAgIHwgICAuLi4gICB8 ICBbbi0xXSAgfAotICogICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCi0gKiAgICAgIHwgICBNRVNTQUdFICB8ICAgICAg IE1FU1NBR0UgUEFZTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICAgKyAg IEhFQURFUiAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKwotICogICAgICB8ICAgICAgICAgICAgfCAgICAwICAgIHwgICAgMSAgICB8ICAgIDIgICAg fCAgIC4uLiAgIHwgICAgbiAgICB8Ci0gKiAgICAgICs9PT09PT09PT09PT0rPT09PT09PT09Kz09 PT09PT09PSs9PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PSsKLSAqICAgICAgfCAgICAgbGVu ICAgIHwgICAgICAgICAgICByZXF1ZXN0IHNwZWNpZmljIGRhdGEgICAgICAgICAgICAgICAgfAot ICogICAgICArLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rCi0gKgotICogICAgICAgICAgICAgICAgICAgXi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tbGVuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1eCi0gKi8KLQotc3RhdGljIGludCBj dF9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpjdCwgc3RydWN0IGN0X2luY29t aW5nX21zZyAqcmVxdWVzdCkKK3N0YXRpYyBpbnQgY3RfaGFuZGxlX2V2ZW50KHN0cnVjdCBpbnRl bF9ndWNfY3QgKmN0LCBzdHJ1Y3QgY3RfaW5jb21pbmdfbXNnICpyZXF1ZXN0KQogeworCWNvbnN0 IHUzMiAqaHhnID0gJnJlcXVlc3QtPm1zZ1tHVUNfQ1RCX01TR19NSU5fTEVOXTsKIAl1bnNpZ25l ZCBsb25nIGZsYWdzOwogCi0JR0VNX0JVR19PTihjdF9oZWFkZXJfaXNfcmVzcG9uc2UocmVxdWVz dC0+bXNnWzBdKSk7CisJR0VNX0JVR19PTihGSUVMRF9HRVQoR1VDX0hYR19NU0dfMF9UWVBFLCBo eGdbMF0pICE9IEdVQ19IWEdfVFlQRV9FVkVOVCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Qt PnJlcXVlc3RzLmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saW5rLCAm Y3QtPnJlcXVlc3RzLmluY29taW5nKTsKQEAgLTg4MiwxNSArODA1LDUzIEBAIHN0YXRpYyBpbnQg Y3RfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGludGVsX2d1Y19jdCAqY3QsIHN0cnVjdCBjdF9pbmNv bWluZ19tc2cgKnJlCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGN0X2hhbmRsZV9tc2co c3RydWN0IGludGVsX2d1Y19jdCAqY3QsIHN0cnVjdCBjdF9pbmNvbWluZ19tc2cgKm1zZykKK3N0 YXRpYyBpbnQgY3RfaGFuZGxlX2h4ZyhzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpjdCwgc3RydWN0IGN0 X2luY29taW5nX21zZyAqbXNnKQogewotCXUzMiBoZWFkZXIgPSBtc2ctPm1zZ1swXTsKKwl1MzIg b3JpZ2luLCB0eXBlOworCXUzMiAqaHhnOwogCWludCBlcnI7CiAKLQlpZiAoY3RfaGVhZGVyX2lz X3Jlc3BvbnNlKGhlYWRlcikpCisJaWYgKHVubGlrZWx5KG1zZy0+c2l6ZSA8IEdVQ19DVEJfSFhH X01TR19NSU5fTEVOKSkKKwkJcmV0dXJuIC1FQkFETVNHOworCisJaHhnID0gJm1zZy0+bXNnW0dV Q19DVEJfTVNHX01JTl9MRU5dOworCisJb3JpZ2luID0gRklFTERfR0VUKEdVQ19IWEdfTVNHXzBf T1JJR0lOLCBoeGdbMF0pOworCWlmICh1bmxpa2VseShvcmlnaW4gIT0gR1VDX0hYR19PUklHSU5f R1VDKSkgeworCQllcnIgPSAtRVBST1RPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwl0eXBlID0g RklFTERfR0VUKEdVQ19IWEdfTVNHXzBfVFlQRSwgaHhnWzBdKTsKKwlzd2l0Y2ggKHR5cGUpIHsK KwljYXNlIEdVQ19IWEdfVFlQRV9FVkVOVDoKKwkJZXJyID0gY3RfaGFuZGxlX2V2ZW50KGN0LCBt c2cpOworCQlicmVhazsKKwljYXNlIEdVQ19IWEdfVFlQRV9SRVNQT05TRV9TVUNDRVNTOgorCWNh c2UgR1VDX0hYR19UWVBFX1JFU1BPTlNFX0ZBSUxVUkU6CiAJCWVyciA9IGN0X2hhbmRsZV9yZXNw b25zZShjdCwgbXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7 CisJfQorCisJaWYgKHVubGlrZWx5KGVycikpIHsKK2ZhaWxlZDoKKwkJQ1RfRVJST1IoY3QsICJG YWlsZWQgdG8gaGFuZGxlIEhYRyBtZXNzYWdlICglcGUpICUqcGhcbiIsCisJCQkgRVJSX1BUUihl cnIpLCA0ICogR1VDX0hYR19NU0dfTUlOX0xFTiwgaHhnKTsKKwl9CisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIHZvaWQgY3RfaGFuZGxlX21zZyhzdHJ1Y3QgaW50ZWxfZ3VjX2N0ICpjdCwgc3Ry dWN0IGN0X2luY29taW5nX21zZyAqbXNnKQoreworCXUzMiBmb3JtYXQgPSBGSUVMRF9HRVQoR1VD X0NUQl9NU0dfMF9GT1JNQVQsIG1zZy0+bXNnWzBdKTsKKwlpbnQgZXJyOworCisJaWYgKGZvcm1h dCA9PSBHVUNfQ1RCX0ZPUk1BVF9IWEcpCisJCWVyciA9IGN0X2hhbmRsZV9oeGcoY3QsIG1zZyk7 CiAJZWxzZQotCQllcnIgPSBjdF9oYW5kbGVfcmVxdWVzdChjdCwgbXNnKTsKKwkJZXJyID0gLUVP UE5PVFNVUFA7CiAKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlDVF9FUlJPUihjdCwgIkZhaWxl ZCB0byBwcm9jZXNzIENUIG1lc3NhZ2UgKCVwZSkgJSpwaFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX2N0LmgKaW5kZXggOTA1MjAyY2FhYWQzLi4xYWUyZGRlNmRiOTMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jdC5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jdC5oCkBAIC02MSw3ICs2 MSw3IEBAIHN0cnVjdCBpbnRlbF9ndWNfY3QgewogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByZWNl aXZlX3Rhc2tsZXQ7CiAKIAlzdHJ1Y3QgewotCQl1MzIgbGFzdF9mZW5jZTsgLyogbGFzdCBmZW5j ZSB1c2VkIHRvIHNlbmQgcmVxdWVzdCAqLworCQl1MTYgbGFzdF9mZW5jZTsgLyogbGFzdCBmZW5j ZSB1c2VkIHRvIHNlbmQgcmVxdWVzdCAqLwogCiAJCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVj dHMgcGVuZGluZyByZXF1ZXN0cyBsaXN0ICovCiAJCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsg LyogcmVxdWVzdHMgd2FpdGluZyBmb3IgcmVzcG9uc2UgKi8KLS0gCjIuMjguMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==