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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A6E1C433F5 for ; Mon, 13 Dec 2021 09:10:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233600AbhLMJKa convert rfc822-to-8bit (ORCPT ); Mon, 13 Dec 2021 04:10:30 -0500 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:52549 "EHLO relay1-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231224AbhLMJK3 (ORCPT ); Mon, 13 Dec 2021 04:10:29 -0500 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 768B224000C; Mon, 13 Dec 2021 09:10:26 +0000 (UTC) Date: Mon, 13 Dec 2021 10:10:25 +0100 From: Miquel Raynal To: Sean Nyekjaer Cc: Boris Brezillon , linux-kernel@vger.kernel.org, Marek Szyprowski , Richard Weinberger , Vignesh Raghavendra , Boris Brezillon , linux-mtd@lists.infradead.org Subject: Re: [PATCH v5 3/4] mtd: core: protect access to MTD devices while in suspend Message-ID: <20211213101025.42c27b43@xps13> In-Reply-To: <20211210132535.gy7rqj5zblqlnz5y@skn-laptop.hadsten> References: <20211129101908.6f1aa715@xps13> <20211129094129.xn364czofrgtvfb4@skn-laptop> <63be9121-18c3-1ef2-c448-f99fb861490f@samsung.com> <20211130124131.6pgu7enjgk6y536m@skn-laptop> <20211130141551.400331c8@collabora.com> <20211130132912.v6v45boce2zbnoy3@skn-laptop> <20211130143705.5d0404aa@collabora.com> <20211203143958.40645506@xps13> <20211209140721.6ki7gznvxwyn3cze@skn-laptop.hinnerup> <20211209152811.318bdf17@xps13> <20211210132535.gy7rqj5zblqlnz5y@skn-laptop.hadsten> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sean, sean@geanix.com wrote on Fri, 10 Dec 2021 14:25:35 +0100: > On Thu, Dec 09, 2021 at 03:28:11PM +0100, Miquel Raynal wrote: > > Hi Sean, > > > > sean@geanix.com wrote on Thu, 9 Dec 2021 15:07:21 +0100: > > > > > On Fri, Dec 03, 2021 at 02:39:58PM +0100, Miquel Raynal wrote: > > > > Hello, > > > > > > > > > > Fine by me, lets drop this series. > > > > > > > > FYI I've dropped the entire series from mtd/next. I'm waiting for the > > > > fix discussed below (without abusing the chip mutex ;-) ). > > > > > > Cool, looking forward to test a patch series :) > > > > Test? You mean "write"? :) > > > > Cheers, > > Miquèl > > Hi Miquel, > > Should we us a atomic for the suspended variable? I haven't thought about it extensively, an atomic variable sound fine but I am definitely not a locking expert... > > /Sean > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c > index b3a9bc08b4bb..eb4ec9a42d49 100644 > --- a/drivers/mtd/nand/raw/nand_base.c > +++ b/drivers/mtd/nand/raw/nand_base.c > @@ -338,16 +338,19 @@ static int nand_isbad_bbm(struct nand_chip *chip, loff_t ofs) > * > * Return: -EBUSY if the chip has been suspended, 0 otherwise > */ > -static int nand_get_device(struct nand_chip *chip) > +static void nand_get_device(struct nand_chip *chip) > { > - mutex_lock(&chip->lock); > - if (chip->suspended) { > + /* Wait until the device is resumed. */ > + while (1) { > + mutex_lock(&chip->lock); > + if (!chip->suspended) { > + mutex_lock(&chip->controller->lock); > + return; > + } > mutex_unlock(&chip->lock); > - return -EBUSY; > - } > - mutex_lock(&chip->controller->lock); > > - return 0; > + wait_event(chip->resume_wq, !chip->suspended); > + } > } > > /** > @@ -576,9 +579,7 @@ static int nand_block_markbad_lowlevel(struct nand_chip *chip, loff_t ofs) > nand_erase_nand(chip, &einfo, 0); > > /* Write bad block marker to OOB */ > - ret = nand_get_device(chip); > - if (ret) > - return ret; > + nand_get_device(chip); > > ret = nand_markbad_bbm(chip, ofs); > nand_release_device(chip); > @@ -3759,9 +3760,7 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from, > ops->mode != MTD_OPS_RAW) > return -ENOTSUPP; > > - ret = nand_get_device(chip); > - if (ret) > - return ret; > + nand_get_device(chip); > > if (!ops->datbuf) > ret = nand_do_read_oob(chip, from, ops); > @@ -4352,9 +4351,7 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to, > > ops->retlen = 0; > > - ret = nand_get_device(chip); > - if (ret) > - return ret; > + nand_get_device(chip); > > switch (ops->mode) { > case MTD_OPS_PLACE_OOB: > @@ -4414,9 +4411,7 @@ int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr, > return -EIO; > > /* Grab the lock and see if the device is available */ > - ret = nand_get_device(chip); > - if (ret) > - return ret; > + nand_get_device(chip); > > /* Shift to get first page */ > page = (int)(instr->addr >> chip->page_shift); > @@ -4503,7 +4498,7 @@ static void nand_sync(struct mtd_info *mtd) > pr_debug("%s: called\n", __func__); > > /* Grab the lock and see if the device is available */ > - WARN_ON(nand_get_device(chip)); > + nand_get_device(chip); > /* Release it and go back */ > nand_release_device(chip); > } > @@ -4520,9 +4515,7 @@ static int nand_block_isbad(struct mtd_info *mtd, loff_t offs) > int ret; > > /* Select the NAND device */ > - ret = nand_get_device(chip); > - if (ret) > - return ret; > + nand_get_device(chip); > > nand_select_target(chip, chipnr); > > @@ -4593,6 +4586,8 @@ static void nand_resume(struct mtd_info *mtd) > __func__); > } > mutex_unlock(&chip->lock); > + > + wake_up_all(&chip->resume_wq); > } > > /** > @@ -5370,6 +5365,7 @@ static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips, > chip->cur_cs = -1; > > mutex_init(&chip->lock); > + init_waitqueue_head(&chip->resume_wq); > > /* Enforce the right timings for reset/detection */ > chip->current_interface_config = nand_get_reset_interface_config(); > diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h > index b2f9dd3cbd69..248054560581 100644 > --- a/include/linux/mtd/rawnand.h > +++ b/include/linux/mtd/rawnand.h > @@ -1294,6 +1294,7 @@ struct nand_chip { > /* Internals */ > struct mutex lock; > unsigned int suspended : 1; > + wait_queue_head_t resume_wq; > int cur_cs; > int read_retries; > struct nand_secure_region *secure_regions; Thanks, Miquèl 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 5E4B9C433F5 for ; Mon, 13 Dec 2021 09:19:28 +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:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=T8hHcLbybUt+RHmnl7wTAOsCtNYcvlTk0R9dC/dShLE=; b=BOYoXSCzeN+VBK g0J7j58LDmmLLbg346RdX2TtQHieW0zj6+UyXrnlhF3vyiLYaOmQEpWNrIqbtWZQ9a+LnYM+iMnQ4 geFwi2C22MvTfUjw+Qvkqjxmj1sm4LWKpPwcJzU1YSC75G+oEXhoYeX5MS7SBeAcUm4iS4vHEWyiI jCa1sPGyoyUerDzpCzRiZAOQfgrdR1AmEkUM6zT+/ts38CxLh+pUNnbWgvUa/aaPoAMts62aQEonQ 52sDjNIG4KQOnFf8AHd2HLxfQv0xg34EktB+WlUsFBwXeN/QegGcKASywOUzExy+aYBHUF0AU7KKX aPPAiG2yynBR+20emvVQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mwhTi-008aBQ-RS; Mon, 13 Dec 2021 09:18:39 +0000 Received: from relay1-d.mail.gandi.net ([217.70.183.193]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mwhLs-008X75-Rc for linux-mtd@lists.infradead.org; Mon, 13 Dec 2021 09:10:34 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 768B224000C; Mon, 13 Dec 2021 09:10:26 +0000 (UTC) Date: Mon, 13 Dec 2021 10:10:25 +0100 From: Miquel Raynal To: Sean Nyekjaer Cc: Boris Brezillon , linux-kernel@vger.kernel.org, Marek Szyprowski , Richard Weinberger , Vignesh Raghavendra , Boris Brezillon , linux-mtd@lists.infradead.org Subject: Re: [PATCH v5 3/4] mtd: core: protect access to MTD devices while in suspend Message-ID: <20211213101025.42c27b43@xps13> In-Reply-To: <20211210132535.gy7rqj5zblqlnz5y@skn-laptop.hadsten> References: <20211129101908.6f1aa715@xps13> <20211129094129.xn364czofrgtvfb4@skn-laptop> <63be9121-18c3-1ef2-c448-f99fb861490f@samsung.com> <20211130124131.6pgu7enjgk6y536m@skn-laptop> <20211130141551.400331c8@collabora.com> <20211130132912.v6v45boce2zbnoy3@skn-laptop> <20211130143705.5d0404aa@collabora.com> <20211203143958.40645506@xps13> <20211209140721.6ki7gznvxwyn3cze@skn-laptop.hinnerup> <20211209152811.318bdf17@xps13> <20211210132535.gy7rqj5zblqlnz5y@skn-laptop.hadsten> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211213_011033_214237_DF9D3F55 X-CRM114-Status: GOOD ( 26.95 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgU2VhbiwKCnNlYW5AZ2Vhbml4LmNvbSB3cm90ZSBvbiBGcmksIDEwIERlYyAyMDIxIDE0OjI1 OjM1ICswMTAwOgoKPiBPbiBUaHUsIERlYyAwOSwgMjAyMSBhdCAwMzoyODoxMVBNICswMTAwLCBN aXF1ZWwgUmF5bmFsIHdyb3RlOgo+ID4gSGkgU2VhbiwKPiA+IAo+ID4gc2VhbkBnZWFuaXguY29t IHdyb3RlIG9uIFRodSwgOSBEZWMgMjAyMSAxNTowNzoyMSArMDEwMDoKPiA+ICAgCj4gPiA+IE9u IEZyaSwgRGVjIDAzLCAyMDIxIGF0IDAyOjM5OjU4UE0gKzAxMDAsIE1pcXVlbCBSYXluYWwgd3Jv dGU6ICAKPiA+ID4gPiBIZWxsbywKPiA+ID4gPiAgICAgCj4gPiA+ID4gPiA+IEZpbmUgYnkgbWUs IGxldHMgZHJvcCB0aGlzIHNlcmllcy4gICAgCj4gPiA+ID4gCj4gPiA+ID4gRllJIEkndmUgZHJv cHBlZCB0aGUgZW50aXJlIHNlcmllcyBmcm9tIG10ZC9uZXh0LiBJJ20gd2FpdGluZyBmb3IgdGhl Cj4gPiA+ID4gZml4IGRpc2N1c3NlZCBiZWxvdyAod2l0aG91dCBhYnVzaW5nIHRoZSBjaGlwIG11 dGV4IDstKSApLiAgICAKPiA+ID4gCj4gPiA+IENvb2wsIGxvb2tpbmcgZm9yd2FyZCB0byB0ZXN0 IGEgcGF0Y2ggc2VyaWVzIDopICAKPiA+IAo+ID4gVGVzdD8gWW91IG1lYW4gIndyaXRlIj8gOikK PiA+IAo+ID4gQ2hlZXJzLAo+ID4gTWlxdcOobCAgCj4gCj4gSGkgTWlxdWVsLAo+IAo+IFNob3Vs ZCB3ZSB1cyBhIGF0b21pYyBmb3IgdGhlIHN1c3BlbmRlZCB2YXJpYWJsZT8KCkkgaGF2ZW4ndCB0 aG91Z2h0IGFib3V0IGl0IGV4dGVuc2l2ZWx5LCBhbiBhdG9taWMgdmFyaWFibGUgc291bmQgZmlu ZQpidXQgSSBhbSBkZWZpbml0ZWx5IG5vdCBhIGxvY2tpbmcgZXhwZXJ0Li4uCgo+IAo+IC9TZWFu Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jIGIvZHJp dmVycy9tdGQvbmFuZC9yYXcvbmFuZF9iYXNlLmMKPiBpbmRleCBiM2E5YmMwOGI0YmIuLmViNGVj OWE0MmQ0OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9uYW5kX2Jhc2UuYwo+ ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jCj4gQEAgLTMzOCwxNiArMzM4 LDE5IEBAIHN0YXRpYyBpbnQgbmFuZF9pc2JhZF9iYm0oc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwg bG9mZl90IG9mcykKPiAgICoKPiAgICogUmV0dXJuOiAtRUJVU1kgaWYgdGhlIGNoaXAgaGFzIGJl ZW4gc3VzcGVuZGVkLCAwIG90aGVyd2lzZQo+ICAgKi8KPiAtc3RhdGljIGludCBuYW5kX2dldF9k ZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiArc3RhdGljIHZvaWQgbmFuZF9nZXRfZGV2 aWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gIHsKPiAtCW11dGV4X2xvY2soJmNoaXAtPmxv Y2spOwo+IC0JaWYgKGNoaXAtPnN1c3BlbmRlZCkgewo+ICsJLyogV2FpdCB1bnRpbCB0aGUgZGV2 aWNlIGlzIHJlc3VtZWQuICovCj4gKwl3aGlsZSAoMSkgewo+ICsJCW11dGV4X2xvY2soJmNoaXAt PmxvY2spOwo+ICsJCWlmICghY2hpcC0+c3VzcGVuZGVkKSB7Cj4gKwkJCW11dGV4X2xvY2soJmNo aXAtPmNvbnRyb2xsZXItPmxvY2spOwo+ICsJCQlyZXR1cm47Cj4gKwkJfQo+ICAJCW11dGV4X3Vu bG9jaygmY2hpcC0+bG9jayk7Cj4gLQkJcmV0dXJuIC1FQlVTWTsKPiAtCX0KPiAtCW11dGV4X2xv Y2soJmNoaXAtPmNvbnRyb2xsZXItPmxvY2spOwo+ICAKPiAtCXJldHVybiAwOwo+ICsJCXdhaXRf ZXZlbnQoY2hpcC0+cmVzdW1lX3dxLCAhY2hpcC0+c3VzcGVuZGVkKTsKPiArCX0KPiAgfQo+ICAK PiAgLyoqCj4gQEAgLTU3Niw5ICs1NzksNyBAQCBzdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2Jh ZF9sb3dsZXZlbChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBsb2ZmX3Qgb2ZzKQo+ICAJCW5hbmRf ZXJhc2VfbmFuZChjaGlwLCAmZWluZm8sIDApOwo+ICAKPiAgCQkvKiBXcml0ZSBiYWQgYmxvY2sg bWFya2VyIHRvIE9PQiAqLwo+IC0JCXJldCA9IG5hbmRfZ2V0X2RldmljZShjaGlwKTsKPiAtCQlp ZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCW5hbmRfZ2V0X2RldmljZShjaGlwKTsKPiAg Cj4gIAkJcmV0ID0gbmFuZF9tYXJrYmFkX2JibShjaGlwLCBvZnMpOwo+ICAJCW5hbmRfcmVsZWFz ZV9kZXZpY2UoY2hpcCk7Cj4gQEAgLTM3NTksOSArMzc2MCw3IEBAIHN0YXRpYyBpbnQgbmFuZF9y ZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCj4gIAkgICAgb3BzLT5t b2RlICE9IE1URF9PUFNfUkFXKQo+ICAJCXJldHVybiAtRU5PVFNVUFA7Cj4gIAo+IC0JcmV0ID0g bmFuZF9nZXRfZGV2aWNlKGNoaXApOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJ bmFuZF9nZXRfZGV2aWNlKGNoaXApOwo+ICAKPiAgCWlmICghb3BzLT5kYXRidWYpCj4gIAkJcmV0 ID0gbmFuZF9kb19yZWFkX29vYihjaGlwLCBmcm9tLCBvcHMpOwo+IEBAIC00MzUyLDkgKzQzNTEs NyBAQCBzdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2Zm X3QgdG8sCj4gIAo+ICAJb3BzLT5yZXRsZW4gPSAwOwo+ICAKPiAtCXJldCA9IG5hbmRfZ2V0X2Rl dmljZShjaGlwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCW5hbmRfZ2V0X2Rl dmljZShjaGlwKTsKPiAgCj4gIAlzd2l0Y2ggKG9wcy0+bW9kZSkgewo+ICAJY2FzZSBNVERfT1BT X1BMQUNFX09PQjoKPiBAQCAtNDQxNCw5ICs0NDExLDcgQEAgaW50IG5hbmRfZXJhc2VfbmFuZChz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCj4gIAkJcmV0 dXJuIC1FSU87Cj4gIAo+ICAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2Ug aXMgYXZhaWxhYmxlICovCj4gLQlyZXQgPSBuYW5kX2dldF9kZXZpY2UoY2hpcCk7Cj4gLQlpZiAo cmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwluYW5kX2dldF9kZXZpY2UoY2hpcCk7Cj4gIAo+ICAJ LyogU2hpZnQgdG8gZ2V0IGZpcnN0IHBhZ2UgKi8KPiAgCXBhZ2UgPSAoaW50KShpbnN0ci0+YWRk ciA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKPiBAQCAtNDUwMyw3ICs0NDk4LDcgQEAgc3RhdGljIHZv aWQgbmFuZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQo+ICAJcHJfZGVidWcoIiVzOiBjYWxs ZWRcbiIsIF9fZnVuY19fKTsKPiAgCj4gIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhl IGRldmljZSBpcyBhdmFpbGFibGUgKi8KPiAtCVdBUk5fT04obmFuZF9nZXRfZGV2aWNlKGNoaXAp KTsKPiArCW5hbmRfZ2V0X2RldmljZShjaGlwKTsKPiAgCS8qIFJlbGVhc2UgaXQgYW5kIGdvIGJh Y2sgKi8KPiAgCW5hbmRfcmVsZWFzZV9kZXZpY2UoY2hpcCk7Cj4gIH0KPiBAQCAtNDUyMCw5ICs0 NTE1LDcgQEAgc3RhdGljIGludCBuYW5kX2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBsb2ZmX3Qgb2ZmcykKPiAgCWludCByZXQ7Cj4gIAo+ICAJLyogU2VsZWN0IHRoZSBOQU5EIGRl dmljZSAqLwo+IC0JcmV0ID0gbmFuZF9nZXRfZGV2aWNlKGNoaXApOwo+IC0JaWYgKHJldCkKPiAt CQlyZXR1cm4gcmV0Owo+ICsJbmFuZF9nZXRfZGV2aWNlKGNoaXApOwo+ICAKPiAgCW5hbmRfc2Vs ZWN0X3RhcmdldChjaGlwLCBjaGlwbnIpOwo+ICAKPiBAQCAtNDU5Myw2ICs0NTg2LDggQEAgc3Rh dGljIHZvaWQgbmFuZF9yZXN1bWUoc3RydWN0IG10ZF9pbmZvICptdGQpCj4gIAkJCV9fZnVuY19f KTsKPiAgCX0KPiAgCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Cj4gKwo+ICsJd2FrZV91cF9h bGwoJmNoaXAtPnJlc3VtZV93cSk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC01MzcwLDYgKzUzNjUs NyBAQCBzdGF0aWMgaW50IG5hbmRfc2Nhbl9pZGVudChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1 bnNpZ25lZCBpbnQgbWF4Y2hpcHMsCj4gIAljaGlwLT5jdXJfY3MgPSAtMTsKPiAgCj4gIAltdXRl eF9pbml0KCZjaGlwLT5sb2NrKTsKPiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPnJlc3Vt ZV93cSk7Cj4gIAo+ICAJLyogRW5mb3JjZSB0aGUgcmlnaHQgdGltaW5ncyBmb3IgcmVzZXQvZGV0 ZWN0aW9uICovCj4gIAljaGlwLT5jdXJyZW50X2ludGVyZmFjZV9jb25maWcgPSBuYW5kX2dldF9y ZXNldF9pbnRlcmZhY2VfY29uZmlnKCk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRk L3Jhd25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL3Jhd25hbmQuaAo+IGluZGV4IGIyZjlkZDNj YmQ2OS4uMjQ4MDU0NTYwNTgxIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3Jhd25h bmQuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvbXRkL3Jhd25hbmQuaAo+IEBAIC0xMjk0LDYgKzEy OTQsNyBAQCBzdHJ1Y3QgbmFuZF9jaGlwIHsKPiAgCS8qIEludGVybmFscyAqLwo+ICAJc3RydWN0 IG11dGV4IGxvY2s7Cj4gIAl1bnNpZ25lZCBpbnQgc3VzcGVuZGVkIDogMTsKPiArCXdhaXRfcXVl dWVfaGVhZF90IHJlc3VtZV93cTsKPiAgCWludCBjdXJfY3M7Cj4gIAlpbnQgcmVhZF9yZXRyaWVz Owo+ICAJc3RydWN0IG5hbmRfc2VjdXJlX3JlZ2lvbiAqc2VjdXJlX3JlZ2lvbnM7CgoKVGhhbmtz LApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=