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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6EB7CC43334 for ; Tue, 28 Jun 2022 02:25:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=agyd91scbfZiILaa4wgYsxF17inOYh+5IrOjgfjCiCY=; b=BIR3PWafQHMmk2JAzyvxvxBEEa jAWmmWN8r5vKmIaGpDjLHSbDFGflgGsCUufL1ndECqc0cNSUl/3UgyHTlkEC9BtE2px+NREXYQ6Kx +NSUvK985VZNEwifWKVsmuEFhpjdfU/TgdUJfNJoWHT17mGg384kYxh1/kAF9E+BOfsZfkm2d8roH ePDhWub4GtpNFpzzfE7hPngShIHWLjeYh5VQsyNRqU+vg1Ip0pJJ2HTD1tW6pJovTXofWpn6ocG98 7cmit8L8iWbT3Y1/1WxY2ArpBXoRlF2u0zvQ+doqU+/TiCoUepjnt7wj9FK8ZGjoSX2Y2x9ricvj0 m3lELCjQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o60vG-003iQs-Gi; Tue, 28 Jun 2022 02:25:50 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o60r9-003fqi-C0; Tue, 28 Jun 2022 02:21:37 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id BD3B0617CA; Tue, 28 Jun 2022 02:21:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D63FC341CC; Tue, 28 Jun 2022 02:21:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656382893; bh=VLOhM9jafYBwDGo4GY7GW6BnZMK0sprL/cxkYZbymZs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oHarGe5CEW4UnvxzKQPMprbyUZ+FA59mYd+H8EnwdDzZ6zKld2mKhtsjuf130BREL oM43fDG0zkWes8igFmPiJUFrrBIaXqHfi2f+UYWVOntb+QEQN9kfvcA9RDni5pjgtl 8lA0EKnsDjX91b3a6bgEC8kbXCBsqJIFekpvnNnW+I6Wxwl2HttGMWSMDmKkekCuSY dWLZ73xiGV4s2PNxDxcyFGiwu88xGaIjhkXemkVBm7YC3Mf+E5U1SCy9Drujaj21eL YoGrLbXcbUoV54QdcMRJFTj7GQ5cwRaeRZfXCQwn2EDx49CvTfapXRhiagHE0Y5wcC B3A7a0PtuWiMQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Bart Van Assche , Stanley Chu , Adrian Hunter , "Martin K . Petersen" , Sasha Levin , jejb@linux.ibm.com, matthias.bgg@gmail.com, beanhuo@micron.com, avri.altman@wdc.com, daejun7.park@samsung.com, linux-scsi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH AUTOSEL 5.15 13/41] scsi: ufs: Support clearing multiple commands at once Date: Mon, 27 Jun 2022 22:20:32 -0400 Message-Id: <20220628022100.595243-13-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220628022100.595243-1-sashal@kernel.org> References: <20220628022100.595243-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220627_192135_541710_96480EE0 X-CRM114-Status: GOOD ( 20.26 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: Bart Van Assche [ Upstream commit d1a7644648b7cdacaf8d1013a4285001911e9bc8 ] Modify ufshcd_clear_cmd() such that it supports clearing multiple commands at once instead of one command at a time. This change will be used in a later patch to reduce the time spent in the reset handler. Link: https://lore.kernel.org/r/20220613214442.212466-3-bvanassche@acm.org Reviewed-by: Stanley Chu Reviewed-by: Adrian Hunter Signed-off-by: Bart Van Assche Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/ufs/ufshcd.c | 42 ++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 311170e63410..b5684bd32621 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -727,17 +727,28 @@ static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) } /** - * ufshcd_utrl_clear - Clear a bit in UTRLCLR register + * ufshcd_utrl_clear() - Clear requests from the controller request list. * @hba: per adapter instance - * @pos: position of the bit to be cleared + * @mask: mask with one bit set for each request to be cleared */ -static inline void ufshcd_utrl_clear(struct ufs_hba *hba, u32 pos) +static inline void ufshcd_utrl_clear(struct ufs_hba *hba, u32 mask) { if (hba->quirks & UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR) - ufshcd_writel(hba, (1 << pos), REG_UTP_TRANSFER_REQ_LIST_CLEAR); - else - ufshcd_writel(hba, ~(1 << pos), - REG_UTP_TRANSFER_REQ_LIST_CLEAR); + mask = ~mask; + /* + * From the UFSHCI specification: "UTP Transfer Request List CLear + * Register (UTRLCLR): This field is bit significant. Each bit + * corresponds to a slot in the UTP Transfer Request List, where bit 0 + * corresponds to request slot 0. A bit in this field is set to ‘0’ + * by host software to indicate to the host controller that a transfer + * request slot is cleared. The host controller + * shall free up any resources associated to the request slot + * immediately, and shall set the associated bit in UTRLDBR to ‘0’. The + * host software indicates no change to request slots by setting the + * associated bits in this field to ‘1’. Bits in this field shall only + * be set ‘1’ or ‘0’ by host software when UTRLRSR is set to ‘1’." + */ + ufshcd_writel(hba, ~mask, REG_UTP_TRANSFER_REQ_LIST_CLEAR); } /** @@ -2795,15 +2806,18 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba, return ufshcd_compose_devman_upiu(hba, lrbp); } -static int -ufshcd_clear_cmd(struct ufs_hba *hba, int tag) +/* + * Clear all the requests from the controller for which a bit has been set in + * @mask and wait until the controller confirms that these requests have been + * cleared. + */ +static int ufshcd_clear_cmds(struct ufs_hba *hba, u32 mask) { unsigned long flags; - u32 mask = 1 << tag; /* clear outstanding transaction before retry */ spin_lock_irqsave(hba->host->host_lock, flags); - ufshcd_utrl_clear(hba, tag); + ufshcd_utrl_clear(hba, mask); spin_unlock_irqrestore(hba->host->host_lock, flags); /* @@ -2891,7 +2905,7 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba, err = -ETIMEDOUT; dev_dbg(hba->dev, "%s: dev_cmd request timedout, tag %d\n", __func__, lrbp->task_tag); - if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) + if (!ufshcd_clear_cmds(hba, 1U << lrbp->task_tag)) /* successfully cleared the command, retry if needed */ err = -EAGAIN; /* @@ -6820,7 +6834,7 @@ static int ufshcd_eh_device_reset_handler(struct scsi_cmnd *cmd) /* clear the commands that were pending for corresponding LUN */ for_each_set_bit(pos, &hba->outstanding_reqs, hba->nutrs) { if (hba->lrb[pos].lun == lun) { - err = ufshcd_clear_cmd(hba, pos); + err = ufshcd_clear_cmds(hba, 1U << pos); if (err) break; __ufshcd_transfer_req_compl(hba, 1U << pos, false); @@ -6922,7 +6936,7 @@ static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag) goto out; } - err = ufshcd_clear_cmd(hba, tag); + err = ufshcd_clear_cmds(hba, 1U << tag); if (err) dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n", __func__, tag, err); -- 2.35.1 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EC73EC433EF for ; Tue, 28 Jun 2022 02:25:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NaMhoCiJo0poQvR7KIIc6JCgqdVdgb8V9NGrINdJHKo=; b=1oLImoab/vco67 JF5qcyrajWOe0GNMhEQCAc/WQewcowWJaKM0tuer1hzwgPPaLXjKz5/DiOCYCpO/RS5im6kGKqf1S xb1V7F5M1dVtJTPRc8EUdQrPIjUPi2EJ1eax7iO+E92LE04NDHraqklof7gO41MDY5FHrav//zBpF gw9Ugh14Xhln1Fb5ZfWSOy7dWdfW0jJAi4ZZLWzkpDcWEVLppwN5KF2xWbeLHev5LC75ey9Qwckpd JldvuXlQunFLthyLZgBUmGkkcmEGQEfuY4Zdv7QjCSrY03tsm8wLXEv06VwQAIfS1fWnCrIJNnjmm rRrN9o+23xOshLxg8pbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o60tq-003hUZ-93; Tue, 28 Jun 2022 02:24:22 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o60r9-003fqi-C0; Tue, 28 Jun 2022 02:21:37 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id BD3B0617CA; Tue, 28 Jun 2022 02:21:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D63FC341CC; Tue, 28 Jun 2022 02:21:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656382893; bh=VLOhM9jafYBwDGo4GY7GW6BnZMK0sprL/cxkYZbymZs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oHarGe5CEW4UnvxzKQPMprbyUZ+FA59mYd+H8EnwdDzZ6zKld2mKhtsjuf130BREL oM43fDG0zkWes8igFmPiJUFrrBIaXqHfi2f+UYWVOntb+QEQN9kfvcA9RDni5pjgtl 8lA0EKnsDjX91b3a6bgEC8kbXCBsqJIFekpvnNnW+I6Wxwl2HttGMWSMDmKkekCuSY dWLZ73xiGV4s2PNxDxcyFGiwu88xGaIjhkXemkVBm7YC3Mf+E5U1SCy9Drujaj21eL YoGrLbXcbUoV54QdcMRJFTj7GQ5cwRaeRZfXCQwn2EDx49CvTfapXRhiagHE0Y5wcC B3A7a0PtuWiMQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Bart Van Assche , Stanley Chu , Adrian Hunter , "Martin K . Petersen" , Sasha Levin , jejb@linux.ibm.com, matthias.bgg@gmail.com, beanhuo@micron.com, avri.altman@wdc.com, daejun7.park@samsung.com, linux-scsi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH AUTOSEL 5.15 13/41] scsi: ufs: Support clearing multiple commands at once Date: Mon, 27 Jun 2022 22:20:32 -0400 Message-Id: <20220628022100.595243-13-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220628022100.595243-1-sashal@kernel.org> References: <20220628022100.595243-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220627_192135_541710_96480EE0 X-CRM114-Status: GOOD ( 20.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CgpbIFVwc3RyZWFtIGNv bW1pdCBkMWE3NjQ0NjQ4YjdjZGFjYWY4ZDEwMTNhNDI4NTAwMTkxMWU5YmM4IF0KCk1vZGlmeSB1 ZnNoY2RfY2xlYXJfY21kKCkgc3VjaCB0aGF0IGl0IHN1cHBvcnRzIGNsZWFyaW5nIG11bHRpcGxl IGNvbW1hbmRzCmF0IG9uY2UgaW5zdGVhZCBvZiBvbmUgY29tbWFuZCBhdCBhIHRpbWUuIFRoaXMg Y2hhbmdlIHdpbGwgYmUgdXNlZCBpbiBhCmxhdGVyIHBhdGNoIHRvIHJlZHVjZSB0aGUgdGltZSBz cGVudCBpbiB0aGUgcmVzZXQgaGFuZGxlci4KCkxpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L3IvMjAyMjA2MTMyMTQ0NDIuMjEyNDY2LTMtYnZhbmFzc2NoZUBhY20ub3JnClJldmlld2VkLWJ5 OiBTdGFubGV5IENodSA8c3RhbmxleS5jaHVAbWVkaWF0ZWsuY29tPgpSZXZpZXdlZC1ieTogQWRy aWFuIEh1bnRlciA8YWRyaWFuLmh1bnRlckBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEJhcnQg VmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgpTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSy4g UGV0ZXJzZW4gPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBTYXNo YSBMZXZpbiA8c2FzaGFsQGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2Qu YyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jCmluZGV4 IDMxMTE3MGU2MzQxMC4uYjU2ODRiZDMyNjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZz L3Vmc2hjZC5jCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMKQEAgLTcyNywxNyArNzI3 LDI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHVmc2hjZF9nZXRfdHJfb2NzKHN0cnVjdCB1ZnNoY2Rf bHJiICpscmJwKQogfQogCiAvKioKLSAqIHVmc2hjZF91dHJsX2NsZWFyIC0gQ2xlYXIgYSBiaXQg aW4gVVRSTENMUiByZWdpc3RlcgorICogdWZzaGNkX3V0cmxfY2xlYXIoKSAtIENsZWFyIHJlcXVl c3RzIGZyb20gdGhlIGNvbnRyb2xsZXIgcmVxdWVzdCBsaXN0LgogICogQGhiYTogcGVyIGFkYXB0 ZXIgaW5zdGFuY2UKLSAqIEBwb3M6IHBvc2l0aW9uIG9mIHRoZSBiaXQgdG8gYmUgY2xlYXJlZAor ICogQG1hc2s6IG1hc2sgd2l0aCBvbmUgYml0IHNldCBmb3IgZWFjaCByZXF1ZXN0IHRvIGJlIGNs ZWFyZWQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHVmc2hjZF91dHJsX2NsZWFyKHN0cnVjdCB1 ZnNfaGJhICpoYmEsIHUzMiBwb3MpCitzdGF0aWMgaW5saW5lIHZvaWQgdWZzaGNkX3V0cmxfY2xl YXIoc3RydWN0IHVmc19oYmEgKmhiYSwgdTMyIG1hc2spCiB7CiAJaWYgKGhiYS0+cXVpcmtzICYg VUZTSENJX1FVSVJLX0JST0tFTl9SRVFfTElTVF9DTFIpCi0JCXVmc2hjZF93cml0ZWwoaGJhLCAo MSA8PCBwb3MpLCBSRUdfVVRQX1RSQU5TRkVSX1JFUV9MSVNUX0NMRUFSKTsKLQllbHNlCi0JCXVm c2hjZF93cml0ZWwoaGJhLCB+KDEgPDwgcG9zKSwKLQkJCQlSRUdfVVRQX1RSQU5TRkVSX1JFUV9M SVNUX0NMRUFSKTsKKwkJbWFzayA9IH5tYXNrOworCS8qCisJICogRnJvbSB0aGUgVUZTSENJIHNw ZWNpZmljYXRpb246ICJVVFAgVHJhbnNmZXIgUmVxdWVzdCBMaXN0IENMZWFyCisJICogUmVnaXN0 ZXIgKFVUUkxDTFIpOiBUaGlzIGZpZWxkIGlzIGJpdCBzaWduaWZpY2FudC4gRWFjaCBiaXQKKwkg KiBjb3JyZXNwb25kcyB0byBhIHNsb3QgaW4gdGhlIFVUUCBUcmFuc2ZlciBSZXF1ZXN0IExpc3Qs IHdoZXJlIGJpdCAwCisJICogY29ycmVzcG9uZHMgdG8gcmVxdWVzdCBzbG90IDAuIEEgYml0IGlu IHRoaXMgZmllbGQgaXMgc2V0IHRvIOKAmDDigJkKKwkgKiBieSBob3N0IHNvZnR3YXJlIHRvIGlu ZGljYXRlIHRvIHRoZSBob3N0IGNvbnRyb2xsZXIgdGhhdCBhIHRyYW5zZmVyCisJICogcmVxdWVz dCBzbG90IGlzIGNsZWFyZWQuIFRoZSBob3N0IGNvbnRyb2xsZXIKKwkgKiBzaGFsbCBmcmVlIHVw IGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgcmVxdWVzdCBzbG90CisJICogaW1tZWRp YXRlbHksIGFuZCBzaGFsbCBzZXQgdGhlIGFzc29jaWF0ZWQgYml0IGluIFVUUkxEQlIgdG8g4oCY MOKAmS4gVGhlCisJICogaG9zdCBzb2Z0d2FyZSBpbmRpY2F0ZXMgbm8gY2hhbmdlIHRvIHJlcXVl c3Qgc2xvdHMgYnkgc2V0dGluZyB0aGUKKwkgKiBhc3NvY2lhdGVkIGJpdHMgaW4gdGhpcyBmaWVs ZCB0byDigJgx4oCZLiBCaXRzIGluIHRoaXMgZmllbGQgc2hhbGwgb25seQorCSAqIGJlIHNldCDi gJgx4oCZIG9yIOKAmDDigJkgYnkgaG9zdCBzb2Z0d2FyZSB3aGVuIFVUUkxSU1IgaXMgc2V0IHRv IOKAmDHigJkuIgorCSAqLworCXVmc2hjZF93cml0ZWwoaGJhLCB+bWFzaywgUkVHX1VUUF9UUkFO U0ZFUl9SRVFfTElTVF9DTEVBUik7CiB9CiAKIC8qKgpAQCAtMjc5NSwxNSArMjgwNiwxOCBAQCBz dGF0aWMgaW50IHVmc2hjZF9jb21wb3NlX2Rldl9jbWQoc3RydWN0IHVmc19oYmEgKmhiYSwKIAly ZXR1cm4gdWZzaGNkX2NvbXBvc2VfZGV2bWFuX3VwaXUoaGJhLCBscmJwKTsKIH0KIAotc3RhdGlj IGludAotdWZzaGNkX2NsZWFyX2NtZChzdHJ1Y3QgdWZzX2hiYSAqaGJhLCBpbnQgdGFnKQorLyoK KyAqIENsZWFyIGFsbCB0aGUgcmVxdWVzdHMgZnJvbSB0aGUgY29udHJvbGxlciBmb3Igd2hpY2gg YSBiaXQgaGFzIGJlZW4gc2V0IGluCisgKiBAbWFzayBhbmQgd2FpdCB1bnRpbCB0aGUgY29udHJv bGxlciBjb25maXJtcyB0aGF0IHRoZXNlIHJlcXVlc3RzIGhhdmUgYmVlbgorICogY2xlYXJlZC4K KyAqLworc3RhdGljIGludCB1ZnNoY2RfY2xlYXJfY21kcyhzdHJ1Y3QgdWZzX2hiYSAqaGJhLCB1 MzIgbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBtYXNrID0gMSA8PCB0YWc7 CiAKIAkvKiBjbGVhciBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbiBiZWZvcmUgcmV0cnkgKi8KIAlz cGluX2xvY2tfaXJxc2F2ZShoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXVmc2hjZF91 dHJsX2NsZWFyKGhiYSwgdGFnKTsKKwl1ZnNoY2RfdXRybF9jbGVhcihoYmEsIG1hc2spOwogCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCS8q CkBAIC0yODkxLDcgKzI5MDUsNyBAQCBzdGF0aWMgaW50IHVmc2hjZF93YWl0X2Zvcl9kZXZfY21k KHN0cnVjdCB1ZnNfaGJhICpoYmEsCiAJCWVyciA9IC1FVElNRURPVVQ7CiAJCWRldl9kYmcoaGJh LT5kZXYsICIlczogZGV2X2NtZCByZXF1ZXN0IHRpbWVkb3V0LCB0YWcgJWRcbiIsCiAJCQlfX2Z1 bmNfXywgbHJicC0+dGFza190YWcpOwotCQlpZiAoIXVmc2hjZF9jbGVhcl9jbWQoaGJhLCBscmJw LT50YXNrX3RhZykpCisJCWlmICghdWZzaGNkX2NsZWFyX2NtZHMoaGJhLCAxVSA8PCBscmJwLT50 YXNrX3RhZykpCiAJCQkvKiBzdWNjZXNzZnVsbHkgY2xlYXJlZCB0aGUgY29tbWFuZCwgcmV0cnkg aWYgbmVlZGVkICovCiAJCQllcnIgPSAtRUFHQUlOOwogCQkvKgpAQCAtNjgyMCw3ICs2ODM0LDcg QEAgc3RhdGljIGludCB1ZnNoY2RfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lf Y21uZCAqY21kKQogCS8qIGNsZWFyIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgcGVuZGluZyBmb3Ig Y29ycmVzcG9uZGluZyBMVU4gKi8KIAlmb3JfZWFjaF9zZXRfYml0KHBvcywgJmhiYS0+b3V0c3Rh bmRpbmdfcmVxcywgaGJhLT5udXRycykgewogCQlpZiAoaGJhLT5scmJbcG9zXS5sdW4gPT0gbHVu KSB7Ci0JCQllcnIgPSB1ZnNoY2RfY2xlYXJfY21kKGhiYSwgcG9zKTsKKwkJCWVyciA9IHVmc2hj ZF9jbGVhcl9jbWRzKGhiYSwgMVUgPDwgcG9zKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAJ CQlfX3Vmc2hjZF90cmFuc2Zlcl9yZXFfY29tcGwoaGJhLCAxVSA8PCBwb3MsIGZhbHNlKTsKQEAg LTY5MjIsNyArNjkzNiw3IEBAIHN0YXRpYyBpbnQgdWZzaGNkX3RyeV90b19hYm9ydF90YXNrKHN0 cnVjdCB1ZnNfaGJhICpoYmEsIGludCB0YWcpCiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHVm c2hjZF9jbGVhcl9jbWQoaGJhLCB0YWcpOworCWVyciA9IHVmc2hjZF9jbGVhcl9jbWRzKGhiYSwg MVUgPDwgdGFnKTsKIAlpZiAoZXJyKQogCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IEZhaWxlZCBj bGVhcmluZyBjbWQgYXQgdGFnICVkLCBlcnIgJWRcbiIsCiAJCQlfX2Z1bmNfXywgdGFnLCBlcnIp OwotLSAKMi4zNS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=