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 397CBC77B73 for ; Mon, 22 May 2023 15:33:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233309AbjEVPdo (ORCPT ); Mon, 22 May 2023 11:33:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230293AbjEVPdl (ORCPT ); Mon, 22 May 2023 11:33:41 -0400 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::225]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FFBAAA for ; Mon, 22 May 2023 08:33:38 -0700 (PDT) Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 2A4A31C0005; Mon, 22 May 2023 15:33:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1684769616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IMfkVryp9hj5PV2VbxjCP00/4UBpe7QvP7AMSW1tCJYsSxYTfaqfamdu967u9eZ6yiNe0t SDMkMU05PlO5frq8G1ylfScOAt07sko9Lp7twLGrUT0lgJkInzkhhAUMetD88+ho+cqzZt qtMsnt2Ya1wyWfDbJitR82/79DlbC4su/82/cN0+7fjDgKpb63mmrsMOEtaoRthcA2mCye u8N6U9wB5um5tfwEA5rW/Z7rJtHhH7MJsg5r00HOv+uqYSwz8xii/CyW7bBMIjCwLeMMw+ osue2lKX/WEXPJTx7w8p9Er2+2G31gbt2gYX0k90MBCEo/w2SGUSiTMcIo1rIg== Date: Mon, 22 May 2023 17:33:34 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230522173334.7aa6f917@xps-13> In-Reply-To: <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Arseniy, AVKrasnov@sberdevices.ru wrote on Mon, 15 May 2023 12:44:36 +0300: The title should perhaps be "only expose unprotected user OOB bytes". > This moves free bytes of OOB to non-protected ECC area. It is needed to > make JFFS2 works correctly with this NAND controller. Problem fires when > JFFS2 driver writes cleanmarker to some page and later it tries to write > to this page - write will be done successfully, but after that such page > becomes unreadable due to invalid ECC codes. This happens because second > write needs to update ECC codes, but it is impossible to do it correctly > without block erase. So idea of this patch is to "... is to use the unprotected OOB area to store the cleanmarkers, so that they can be written by the filesystem without caring much about the page being empty or not: the ECC codes will not be written anyway." ? JFFS2 is only useful on tiny NAND devices, where UBI does not fit, which are usually true SLC flashes, with the capability of writing a page with empty (0xFF) data, and still be able to write actual data to it later in a second write. > split accesses to OOB > free bytes and data on each page - now both of them does not depends on > each other. >=20 > Signed-off-by: Arseniy Krasnov > --- > drivers/mtd/nand/raw/meson_nand.c | 192 ++++++++++++++++++++++++------ > 1 file changed, 155 insertions(+), 37 deletions(-) >=20 > diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/mes= on_nand.c > index 2f4d8c84186b..8526a6b87720 100644 > --- a/drivers/mtd/nand/raw/meson_nand.c > +++ b/drivers/mtd/nand/raw/meson_nand.c > @@ -108,6 +108,9 @@ > =20 > #define PER_INFO_BYTE 8 > =20 > +#define NFC_USER_BYTES 2 > +#define NFC_OOB_PER_ECC(nand) ((nand)->ecc.bytes + NFC_USER_BYTES) > + > struct meson_nfc_nand_chip { > struct list_head node; > struct nand_chip nand; > @@ -122,6 +125,7 @@ struct meson_nfc_nand_chip { > u8 *data_buf; > __le64 *info_buf; > u32 nsels; > + u8 *oob_buf; > u8 sels[]; > }; > =20 > @@ -338,7 +342,7 @@ static u8 *meson_nfc_oob_ptr(struct nand_chip *nand, = int i) > struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > int len; > =20 > - len =3D nand->ecc.size * (i + 1) + (nand->ecc.bytes + 2) * i; > + len =3D nand->ecc.size * (i + 1) + NFC_OOB_PER_ECC(nand) * i; This... > =20 > return meson_chip->data_buf + len; > } > @@ -349,7 +353,7 @@ static u8 *meson_nfc_data_ptr(struct nand_chip *nand,= int i) > int len, temp; > =20 > temp =3D nand->ecc.size + nand->ecc.bytes; > - len =3D (temp + 2) * i; > + len =3D (temp + NFC_USER_BYTES) * i; ... and this (same below) are purely cosmetic, should be in a patch aside. > =20 > return meson_chip->data_buf + len; > } > @@ -357,29 +361,47 @@ static u8 *meson_nfc_data_ptr(struct nand_chip *nan= d, int i) > static void meson_nfc_get_data_oob(struct nand_chip *nand, > u8 *buf, u8 *oobbuf) > { > + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > + struct mtd_info *mtd =3D nand_to_mtd(nand); > int i, oob_len =3D 0; > u8 *dsrc, *osrc; > + u8 *oobtail; > =20 > - oob_len =3D nand->ecc.bytes + 2; > + oob_len =3D NFC_OOB_PER_ECC(nand); > for (i =3D 0; i < nand->ecc.steps; i++) { > if (buf) { > dsrc =3D meson_nfc_data_ptr(nand, i); > memcpy(buf, dsrc, nand->ecc.size); > buf +=3D nand->ecc.size; > } > - osrc =3D meson_nfc_oob_ptr(nand, i); > - memcpy(oobbuf, osrc, oob_len); > - oobbuf +=3D oob_len; > + > + if (oobbuf) { > + osrc =3D meson_nfc_oob_ptr(nand, i); > + memcpy(oobbuf, osrc, oob_len); > + oobbuf +=3D oob_len; > + } > } > + > + if (!oobbuf) > + return; The whole "if (oobbuf)" logic is nice to have, but should as well be in a dedicated patch. > + > + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > + (nand->ecc.size + oob_len); > + > + /* 'oobbuf' if already shifted to the start of unused area. */ is? s/unused/user/? I'm not sure I get the comment. > + memcpy(oobbuf, oobtail, mtd->oobsize - nand->ecc.steps * oob_len); > } > =20 > static void meson_nfc_set_data_oob(struct nand_chip *nand, > const u8 *buf, u8 *oobbuf) > { > + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > + struct mtd_info *mtd =3D nand_to_mtd(nand); > int i, oob_len =3D 0; > u8 *dsrc, *osrc; > + u8 *oobtail; > =20 > - oob_len =3D nand->ecc.bytes + 2; > + oob_len =3D NFC_OOB_PER_ECC(nand); > for (i =3D 0; i < nand->ecc.steps; i++) { > if (buf) { > dsrc =3D meson_nfc_data_ptr(nand, i); > @@ -390,6 +412,12 @@ static void meson_nfc_set_data_oob(struct nand_chip = *nand, > memcpy(osrc, oobbuf, oob_len); > oobbuf +=3D oob_len; > } > + > + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > + (nand->ecc.size + oob_len); > + > + /* 'oobbuf' if already shifted to the start of unused area. */ > + memcpy(oobtail, oobbuf, mtd->oobsize - nand->ecc.steps * oob_len); > } > =20 > static int meson_nfc_queue_rb(struct meson_nfc *nfc, int timeout_ms, int= cmd_read0) > @@ -436,25 +464,12 @@ static void meson_nfc_set_user_byte(struct nand_chi= p *nand, u8 *oob_buf) > { > struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > __le64 *info; > - int i, count; > - > - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2) { > - info =3D &meson_chip->info_buf[i]; > - *info |=3D oob_buf[count]; > - *info |=3D oob_buf[count + 1] << 8; > - } > -} > - > -static void meson_nfc_get_user_byte(struct nand_chip *nand, u8 *oob_buf) > -{ > - struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > - __le64 *info; > - int i, count; > + int i; > =20 > - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2) { > + for (i =3D 0; i < nand->ecc.steps; i++) { > info =3D &meson_chip->info_buf[i]; > - oob_buf[count] =3D *info; > - oob_buf[count + 1] =3D *info >> 8; > + /* Always ignore user bytes programming. */ Why? Also, maybe I should mention the helpers: mtd_ooblayout_get_eccbytes and co They are very useful to deal with OOB bytes. Everything seems extremely hardcoded in this driver, while the user can tune read/write OOB operations. > + *info |=3D 0xffff; > } > } > =20 > @@ -698,18 +713,92 @@ static int meson_nfc_write_page_raw(struct nand_chi= p *nand, const u8 *buf, > return meson_nfc_write_page_sub(nand, page, 1); > } > =20 > +static u32 meson_nfc_get_oob_bytes(struct nand_chip *nand) > +{ > + struct mtd_info *mtd =3D nand_to_mtd(nand); > + > + return mtd->oobsize - nand->ecc.steps * NFC_OOB_PER_ECC(nand); > +} > + > +static int __meson_nfc_write_oob(struct nand_chip *nand, int page, u8 *o= ob_buf) > +{ > + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > + struct mtd_info *mtd =3D nand_to_mtd(nand); > + u32 page_size =3D mtd->writesize + mtd->oobsize; > + u32 oob_bytes =3D meson_nfc_get_oob_bytes(nand); > + int ret; > + > + if (!oob_bytes) > + return 0; > + > + ret =3D nand_prog_page_begin_op(nand, page, 0, NULL, 0); > + if (ret) > + return ret; > + > + memcpy(meson_chip->oob_buf, oob_buf + (mtd->oobsize - oob_bytes), > + oob_bytes); > + > + ret =3D nand_change_write_column_op(nand, page_size - oob_bytes, > + meson_chip->oob_buf, > + oob_bytes, false); > + if (ret) > + return ret; > + > + return nand_prog_page_end_op(nand); > +} > + > +static int __meson_nfc_read_oob(struct nand_chip *nand, int page, > + u8 *oob_buf) > +{ > + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > + struct mtd_info *mtd =3D nand_to_mtd(nand); > + u32 oob_bytes; > + u32 page_size; > + int ret; > + > + oob_bytes =3D meson_nfc_get_oob_bytes(nand); > + > + if (!oob_bytes) > + return 0; > + > + ret =3D nand_read_page_op(nand, page, 0, NULL, 0); > + if (ret) > + return ret; > + > + page_size =3D mtd->writesize + mtd->oobsize; > + > + ret =3D nand_change_read_column_op(nand, page_size - oob_bytes, > + meson_chip->oob_buf, > + oob_bytes, false); > + > + if (!ret) > + memcpy(oob_buf + (mtd->oobsize - oob_bytes), > + meson_chip->oob_buf, > + oob_bytes); > + > + return ret; > +} > + > static int meson_nfc_write_page_hwecc(struct nand_chip *nand, > const u8 *buf, int oob_required, int page) > { > struct mtd_info *mtd =3D nand_to_mtd(nand); > struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > u8 *oob_buf =3D nand->oob_poi; > + int ret; > =20 > memcpy(meson_chip->data_buf, buf, mtd->writesize); > memset(meson_chip->info_buf, 0, nand->ecc.steps * PER_INFO_BYTE); > meson_nfc_set_user_byte(nand, oob_buf); > =20 > - return meson_nfc_write_page_sub(nand, page, 0); > + ret =3D meson_nfc_write_page_sub(nand, page, 0); > + if (ret) > + return ret; > + > + if (oob_required) > + ret =3D __meson_nfc_write_oob(nand, page, oob_buf); You should provide all the data including OOB bytes in a single write call, otherwise you perform two writes on the same page, that's not what this helper is expected to do. > + > + return ret; > } > =20 > static void meson_nfc_check_ecc_pages_valid(struct meson_nfc *nfc, > @@ -783,7 +872,7 @@ static int meson_nfc_read_page_raw(struct nand_chip *= nand, u8 *buf, > if (ret) > return ret; > =20 > - meson_nfc_get_data_oob(nand, buf, oob_buf); > + meson_nfc_get_data_oob(nand, buf, oob_required ? oob_buf : NULL); > =20 > return 0; > } > @@ -803,12 +892,12 @@ static int meson_nfc_read_page_hwecc(struct nand_ch= ip *nand, u8 *buf, > if (ret) > return ret; > =20 > - meson_nfc_get_user_byte(nand, oob_buf); > ret =3D meson_nfc_ecc_correct(nand, &bitflips, &correct_bitmap); > if (ret =3D=3D ECC_CHECK_RETURN_FF) { > if (buf) > memset(buf, 0xff, mtd->writesize); > memset(oob_buf, 0xff, mtd->oobsize); > + return bitflips; That is something else =3D> other fix =3D> other patch? > } else if (ret < 0) { > if ((nand->options & NAND_NEED_SCRAMBLING) || !buf) { > mtd->ecc_stats.failed++; > @@ -820,12 +909,14 @@ static int meson_nfc_read_page_hwecc(struct nand_ch= ip *nand, u8 *buf, > =20 > for (i =3D 0; i < nand->ecc.steps ; i++) { > u8 *data =3D buf + i * ecc->size; > - u8 *oob =3D nand->oob_poi + i * (ecc->bytes + 2); > + u8 *oob =3D nand->oob_poi + i * NFC_OOB_PER_ECC(nand); > =20 > if (correct_bitmap & BIT_ULL(i)) > continue; > + > ret =3D nand_check_erased_ecc_chunk(data, ecc->size, > - oob, ecc->bytes + 2, > + oob, > + NFC_OOB_PER_ECC(nand), > NULL, 0, > ecc->strength); > if (ret < 0) { > @@ -839,17 +930,30 @@ static int meson_nfc_read_page_hwecc(struct nand_ch= ip *nand, u8 *buf, > memcpy(buf, meson_chip->data_buf, mtd->writesize); > } > =20 > + if (oob_required) > + __meson_nfc_read_oob(nand, page, oob_buf); In the standalone "read_oob" hook, you have to send a READ0 command, but not when you are in the read_page hook. It is a big waste of time. > + > return bitflips; > } > =20 > static int meson_nfc_read_oob_raw(struct nand_chip *nand, int page) > { > - return meson_nfc_read_page_raw(nand, NULL, 1, page); > + return __meson_nfc_read_oob(nand, page, nand->oob_poi); > } > =20 > static int meson_nfc_read_oob(struct nand_chip *nand, int page) > { > - return meson_nfc_read_page_hwecc(nand, NULL, 1, page); > + return __meson_nfc_read_oob(nand, page, nand->oob_poi); > +} > + > +static int meson_nfc_write_oob_raw(struct nand_chip *nand, int page) > +{ > + return __meson_nfc_write_oob(nand, page, nand->oob_poi); > +} > + > +static int meson_nfc_write_oob(struct nand_chip *nand, int page) > +{ > + return __meson_nfc_write_oob(nand, page, nand->oob_poi); Do we really need these indirections? > } > =20 > static bool meson_nfc_is_buffer_dma_safe(const void *buffer) > @@ -982,7 +1086,7 @@ static int meson_ooblayout_ecc(struct mtd_info *mtd,= int section, > if (section >=3D nand->ecc.steps) > return -ERANGE; > =20 > - oobregion->offset =3D 2 + (section * (2 + nand->ecc.bytes)); > + oobregion->offset =3D NFC_USER_BYTES + section * NFC_OOB_PER_ECC(nand); The () are still needed around the '*' > oobregion->length =3D nand->ecc.bytes; > =20 > return 0; > @@ -992,12 +1096,16 @@ static int meson_ooblayout_free(struct mtd_info *m= td, int section, > struct mtd_oob_region *oobregion) > { > struct nand_chip *nand =3D mtd_to_nand(mtd); > + u32 oob_bytes =3D meson_nfc_get_oob_bytes(nand); > =20 > if (section >=3D nand->ecc.steps) > return -ERANGE; > =20 > - oobregion->offset =3D section * (2 + nand->ecc.bytes); > - oobregion->length =3D 2; > + /* Split rest of OOB area (not covered by ECC engine) per each > + * ECC section. This will be OOB data available to user. > + */ > + oobregion->offset =3D (section + nand->ecc.steps) * NFC_OOB_PER_ECC(nan= d); > + oobregion->length =3D oob_bytes / nand->ecc.steps; > =20 > return 0; > } > @@ -1184,6 +1292,9 @@ static int meson_nand_bch_mode(struct nand_chip *na= nd) > =20 > static void meson_nand_detach_chip(struct nand_chip *nand) > { > + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > + > + kfree(meson_chip->oob_buf); > meson_nfc_free_buffer(nand); > } > =20 > @@ -1225,9 +1336,9 @@ static int meson_nand_attach_chip(struct nand_chip = *nand) > nand->ecc.engine_type =3D NAND_ECC_ENGINE_TYPE_ON_HOST; > nand->ecc.write_page_raw =3D meson_nfc_write_page_raw; > nand->ecc.write_page =3D meson_nfc_write_page_hwecc; > - nand->ecc.write_oob_raw =3D nand_write_oob_std; > - nand->ecc.write_oob =3D nand_write_oob_std; > =20 > + nand->ecc.write_oob_raw =3D meson_nfc_write_oob_raw; > + nand->ecc.write_oob =3D meson_nfc_write_oob; Actually if you define the right OOB layouts, are these really needed ?? I would expect the right bytes to be picked up by the default implementation. I see nothing specific in your current implementation? > nand->ecc.read_page_raw =3D meson_nfc_read_page_raw; > nand->ecc.read_page =3D meson_nfc_read_page_hwecc; > nand->ecc.read_oob_raw =3D meson_nfc_read_oob_raw; > @@ -1237,9 +1348,16 @@ static int meson_nand_attach_chip(struct nand_chip= *nand) > dev_err(nfc->dev, "16bits bus width not supported"); > return -EINVAL; > } > + > + meson_chip->oob_buf =3D kmalloc(nand->ecc.bytes, GFP_KERNEL); devm_kmalloc? > + if (!meson_chip->oob_buf) > + return -ENOMEM; > + > ret =3D meson_chip_buffer_init(nand); > - if (ret) > + if (ret) { > + kfree(meson_chip->oob_buf); > return -ENOMEM; > + } > =20 > return ret; > } Thanks, Miqu=C3=A8l 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 01C15C7EE23 for ; Mon, 22 May 2023 15:40:29 +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=FaadJ7pBVj1oZRuHte6Gi9ldJ0Sp/QAFVhDrZwk2KJQ=; b=gZxCR1OI6jhKZT BWgTtB1y2uMDzxV374mPOI+TJVFVpYFMvonltLYiH73Kgixl1VzgqOVGjKU+QV5o+RCMEmf+Ta01H 0h/NC88wBaE86eMS45D8ktKOhN/OVBFKJYA3ii7IKY6jJbHfBkQhu76F09Z9Hi4kLOTT5e9si5XN7 ADF+exF31i3zHdSGcS2hd40gW0uclA4sYZjZW+QS7h7U87eIzLJ0jUXTtofhCr7TcDN1hOWFvpX/5 llDAAvLPC4+D8tBI+iWnxwQT2zkh9Y7P5okZ2pHH2jmEg4VgjZ2j0+Bqm7f9B1foQ3Qv78aE6JVUr Q+wW67eZCP0FTKLOVCNA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q17e3-0073Q5-1g; Mon, 22 May 2023 15:40:23 +0000 Received: from desiato.infradead.org ([90.155.92.199]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17e1-0073Oi-09; Mon, 22 May 2023 15:40:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IOqvYUx3TLV3ixZAlIHz5B0NYR dw1qC+IURV6ErdMZ2aqGeSTVRVFixalyJ3fvadSna/XSO1z37qIVVmKyC/B/6jr9X858U82+2Fc9a ZBcldNy/F/8fZdvxS4wrZ3dcANKqW+70/nkpVHIXaVvzJkPBd89QO5JmMpO4EdpH9MhkVQF9g9dDb Y6KzBSMKZxViKcZtGm2t6+9iYIHzn8sHfTK9a4FqVU/P80Iho+6NzWgsVYPLjFC+P0kuBc1N3myqX g7RBbUXm2kwMB51zd4TV+MFvGB2z2R3UWc6FI3BnLIuorfJCkIDhmGfcxUpMPaG2yRcgtT0iLLnKj V4qAhgjg==; Received: from relay5-d.mail.gandi.net ([2001:4b98:dc4:8::225]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17Xa-0023uI-2T; Mon, 22 May 2023 15:33:45 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 2A4A31C0005; Mon, 22 May 2023 15:33:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1684769616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IMfkVryp9hj5PV2VbxjCP00/4UBpe7QvP7AMSW1tCJYsSxYTfaqfamdu967u9eZ6yiNe0t SDMkMU05PlO5frq8G1ylfScOAt07sko9Lp7twLGrUT0lgJkInzkhhAUMetD88+ho+cqzZt qtMsnt2Ya1wyWfDbJitR82/79DlbC4su/82/cN0+7fjDgKpb63mmrsMOEtaoRthcA2mCye u8N6U9wB5um5tfwEA5rW/Z7rJtHhH7MJsg5r00HOv+uqYSwz8xii/CyW7bBMIjCwLeMMw+ osue2lKX/WEXPJTx7w8p9Er2+2G31gbt2gYX0k90MBCEo/w2SGUSiTMcIo1rIg== Date: Mon, 22 May 2023 17:33:34 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230522173334.7aa6f917@xps-13> In-Reply-To: <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; 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-20230522_163342_997712_49927A96 X-CRM114-Status: GOOD ( 39.29 ) 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 SGkgQXJzZW5peSwKCkFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBNb24sIDE1IE1h eSAyMDIzIDEyOjQ0OjM2ICswMzAwOgoKVGhlIHRpdGxlIHNob3VsZCBwZXJoYXBzIGJlICJvbmx5 IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIuCgo+IFRoaXMgbW92ZXMgZnJlZSBi eXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3RlZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4g bWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJv YmxlbSBmaXJlcyB3aGVuCj4gSkZGUzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21l IHBhZ2UgYW5kIGxhdGVyIGl0IHRyaWVzIHRvIHdyaXRlCj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUg d2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gYmVj b21lcyB1bnJlYWRhYmxlIGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJl Y2F1c2Ugc2Vjb25kCj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlz IGltcG9zc2libGUgdG8gZG8gaXQgY29ycmVjdGx5Cj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28g aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvCgoiLi4uIGlzIHRvIHVzZSB0aGUgdW5wcm90ZWN0ZWQg T09CIGFyZWEgdG8gc3RvcmUgdGhlIGNsZWFubWFya2Vycywgc28KdGhhdCB0aGV5IGNhbiBiZSB3 cml0dGVuIGJ5IHRoZSBmaWxlc3lzdGVtIHdpdGhvdXQgY2FyaW5nIG11Y2ggYWJvdXQKdGhlIHBh Z2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4g YW55d2F5LiIKPwoKSkZGUzIgaXMgb25seSB1c2VmdWwgb24gdGlueSBOQU5EIGRldmljZXMsIHdo ZXJlIFVCSSBkb2VzIG5vdCBmaXQsCndoaWNoIGFyZSB1c3VhbGx5IHRydWUgU0xDIGZsYXNoZXMs IHdpdGggdGhlIGNhcGFiaWxpdHkgb2Ygd3JpdGluZwphIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikg ZGF0YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKdG8gaXQgbGF0ZXIg aW4gYSBzZWNvbmQgd3JpdGUuCgo+IHNwbGl0IGFjY2Vzc2VzIHRvIE9PQgo+IGZyZWUgYnl0ZXMg YW5kIGRhdGEgb24gZWFjaCBwYWdlIC0gbm93IGJvdGggb2YgdGhlbSBkb2VzIG5vdCBkZXBlbmRz IG9uCj4gZWFjaCBvdGhlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFW S3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiAtLS0KPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVz b25fbmFuZC5jIHwgMTkyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICAxIGZpbGUg Y2hhbmdlZCwgMTU1IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9tZXNvbl9uYW5kLmMKPiBpbmRleCAyZjRkOGM4NDE4NmIuLjg1MjZhNmI4NzcyMCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiArKysgYi9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiBAQCAtMTA4LDYgKzEwOCw5IEBACj4gIAo+ ICAjZGVmaW5lIFBFUl9JTkZPX0JZVEUJCTgKPiAgCj4gKyNkZWZpbmUgTkZDX1VTRVJfQllURVMJ CTIKPiArI2RlZmluZSBORkNfT09CX1BFUl9FQ0MobmFuZCkJKChuYW5kKS0+ZWNjLmJ5dGVzICsg TkZDX1VTRVJfQllURVMpCj4gKwo+ICBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAlz dHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gIAlzdHJ1Y3QgbmFuZF9jaGlwIG5hbmQ7Cj4gQEAgLTEy Miw2ICsxMjUsNyBAQCBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAl1OCAqZGF0YV9i dWY7Cj4gIAlfX2xlNjQgKmluZm9fYnVmOwo+ICAJdTMyIG5zZWxzOwo+ICsJdTggKm9vYl9idWY7 Cj4gIAl1OCBzZWxzW107Cj4gIH07Cj4gIAo+IEBAIC0zMzgsNyArMzQyLDcgQEAgc3RhdGljIHU4 ICptZXNvbl9uZmNfb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiAgCXN0 cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5k KTsKPiAgCWludCBsZW47Cj4gIAo+IC0JbGVuID0gbmFuZC0+ZWNjLnNpemUgKiAoaSArIDEpICsg KG5hbmQtPmVjYy5ieXRlcyArIDIpICogaTsKPiArCWxlbiA9IG5hbmQtPmVjYy5zaXplICogKGkg KyAxKSArIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSAqIGk7CgpUaGlzLi4uCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNDksNyArMzUzLDcgQEAg c3RhdGljIHU4ICptZXNvbl9uZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IGkpCj4gIAlpbnQgbGVuLCB0ZW1wOwo+ICAKPiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5h bmQtPmVjYy5ieXRlczsKPiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ICsJbGVuID0gKHRlbXAg KyBORkNfVVNFUl9CWVRFUykgKiBpOwoKLi4uIGFuZCB0aGlzIChzYW1lIGJlbG93KQoKYXJlIHB1 cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUuCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNTcsMjkgKzM2MSw0NyBA QCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBp bnQgaSkKPiAgc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLAo+ICAJCQkJICAgdTggKmJ1ZiwgdTggKm9vYmJ1ZikKPiAgewo+ICsJc3RydWN0 IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiAgCWludCBpLCBv b2JfbGVuID0gMDsKPiAgCXU4ICpkc3JjLCAqb3NyYzsKPiArCXU4ICpvb2J0YWlsOwo+ICAKPiAt CW9vYl9sZW4gPSBuYW5kLT5lY2MuYnl0ZXMgKyAyOwo+ICsJb29iX2xlbiA9IE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ ICAJCWlmIChidWYpIHsKPiAgCQkJZHNyYyA9IG1lc29uX25mY19kYXRhX3B0cihuYW5kLCBpKTsK PiAgCQkJbWVtY3B5KGJ1ZiwgZHNyYywgbmFuZC0+ZWNjLnNpemUpOwo+ICAJCQlidWYgKz0gbmFu ZC0+ZWNjLnNpemU7Cj4gIAkJfQo+IC0JCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiAtCQltZW1jcHkob29iYnVmLCBvc3JjLCBvb2JfbGVuKTsKPiAtCQlvb2JidWYgKz0gb29i X2xlbjsKPiArCj4gKwkJaWYgKG9vYmJ1Zikgewo+ICsJCQlvc3JjID0gbWVzb25fbmZjX29vYl9w dHIobmFuZCwgaSk7Cj4gKwkJCW1lbWNweShvb2JidWYsIG9zcmMsIG9vYl9sZW4pOwo+ICsJCQlv b2JidWYgKz0gb29iX2xlbjsKPiArCQl9Cj4gIAl9Cj4gKwo+ICsJaWYgKCFvb2JidWYpCj4gKwkJ cmV0dXJuOwoKVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9naWMgaXMgbmljZSB0byBoYXZlLCBi dXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KYSBkZWRpY2F0ZWQgcGF0Y2guCgo+ICsKPiArCW9vYnRh aWwgPSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFu ZC0+ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNo aWZ0ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwoKCQkgICAgaXM/CnMvdW51c2Vk L3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhlIGNvbW1lbnQuCgo+ICsJbWVtY3B5KG9vYmJ1 Ziwgb29idGFpbCwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIG1lc29uX25mY19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRf Y2hpcCAqbmFuZCwKPiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gIHsKPiAr CXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChu YW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gIAlp bnQgaSwgb29iX2xlbiA9IDA7Cj4gIAl1OCAqZHNyYywgKm9zcmM7Cj4gKwl1OCAqb29idGFpbDsK PiAgCj4gLQlvb2JfbGVuID0gbmFuZC0+ZWNjLmJ5dGVzICsgMjsKPiArCW9vYl9sZW4gPSBORkNf T09CX1BFUl9FQ0MobmFuZCk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBp KyspIHsKPiAgCQlpZiAoYnVmKSB7Cj4gIAkJCWRzcmMgPSBtZXNvbl9uZmNfZGF0YV9wdHIobmFu ZCwgaSk7Cj4gQEAgLTM5MCw2ICs0MTIsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25fbmZjX3NldF9k YXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCW1lbWNweShvc3JjLCBvb2JidWYs IG9vYl9sZW4pOwo+ICAJCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ICAJfQo+ICsKPiArCW9vYnRhaWwg PSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFuZC0+ ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNoaWZ0 ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwo+ICsJbWVtY3B5KG9vYnRhaWwsIG9v YmJ1ZiwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4gIH0KPiAg Cj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3F1ZXVlX3JiKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywg aW50IHRpbWVvdXRfbXMsIGludCBjbWRfcmVhZDApCj4gQEAgLTQzNiwyNSArNDY0LDEyIEBAIHN0 YXRpYyB2b2lkIG1lc29uX25mY19zZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IHU4ICpvb2JfYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAlfX2xlNjQgKmluZm87Cj4gLQlpbnQgaSwg Y291bnQ7Cj4gLQo+IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IDIpIHsKPiAtCQlpbmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ld Owo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291bnRdOwo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291 bnQgKyAxXSA8PCA4Owo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1ZikKPiAtewo+IC0J c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+IC0JX19sZTY0ICppbmZvOwo+IC0JaW50IGksIGNvdW50Owo+ICsJaW50IGk7Cj4gIAo+ IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50 ICs9IDIpIHsKPiArCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ICAJ CWluZm8gPSAmbWVzb25fY2hpcC0+aW5mb19idWZbaV07Cj4gLQkJb29iX2J1Zltjb3VudF0gPSAq aW5mbzsKPiAtCQlvb2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ICsJCS8qIEFsd2F5 cyBpZ25vcmUgdXNlciBieXRlcyBwcm9ncmFtbWluZy4gKi8KCldoeT8KCkFsc28sIG1heWJlIEkg c2hvdWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cm10ZF9vb2JsYXlvdXRfZ2V0X2VjY2J5dGVzIGFu ZCBjbwpUaGV5IGFyZSB2ZXJ5IHVzZWZ1bCB0byBkZWFsIHdpdGggT09CIGJ5dGVzLiBFdmVyeXRo aW5nIHNlZW1zIGV4dHJlbWVseQpoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdoaWxlIHRoZSB1 c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCm9wZXJhdGlvbnMuCgo+ICsJCSppbmZvIHw9IDB4 ZmZmZjsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtNjk4LDE4ICs3MTMsOTIgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgY29uc3QgdTgg KmJ1ZiwKPiAgCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMSk7 Cj4gIH0KPiAgCj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMoc3RydWN0IG5h bmRfY2hpcCAqbmFuZCkKPiArewo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210 ZChuYW5kKTsKPiArCj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICog TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZj X3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSwgdTggKm9vYl9idWYp Cj4gK3sKPiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVz b25fbmFuZChuYW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gKwl1MzIgcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4g Kwl1MzIgb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMobmFuZCk7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmICghb29iX2J5dGVzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9 IG5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1lbWNweShtZXNvbl9jaGlwLT5vb2JfYnVm LCBvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkgICAgICAgb29iX2J5 dGVzKTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV93cml0ZV9jb2x1bW5fb3AobmFuZCwgcGFn ZV9zaXplIC0gb29iX2J5dGVzLAo+ICsJCQkJCSAgbWVzb25fY2hpcC0+b29iX2J1ZiwKPiArCQkJ CQkgIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJldHVybiBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19tZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBh Z2UsCj4gKwkJCQl1OCAqb29iX2J1ZikKPiArewo+ICsJc3RydWN0IG1lc29uX25mY19uYW5kX2No aXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiArCXUzMiBvb2JfYnl0ZXM7Cj4gKwl1MzIgcGFn ZV9zaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlvb2JfYnl0ZXMgPSBtZXNvbl9uZmNfZ2V0X29v Yl9ieXRlcyhuYW5kKTsKPiArCj4gKwlpZiAoIW9vYl9ieXRlcykKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlyZXQgPSBuYW5kX3JlYWRfcGFnZV9vcChuYW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlwYWdlX3NpemUgPSBtdGQtPndyaXRl c2l6ZSArIG10ZC0+b29ic2l6ZTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2NvbHVt bl9vcChuYW5kLCBwYWdlX3NpemUgLSBvb2JfYnl0ZXMsCj4gKwkJCQkJIG1lc29uX2NoaXAtPm9v Yl9idWYsCj4gKwkJCQkJIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsKPiArCWlmICghcmV0KQo+ICsJ CW1lbWNweShvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkJICAgICAg IG1lc29uX2NoaXAtPm9vYl9idWYsCj4gKwkJICAgICAgIG9vYl9ieXRlcyk7Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBtZXNvbl9uZmNfd3JpdGVfcGFnZV9od2Vj YyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCQkJICAgICAgY29uc3QgdTggKmJ1ZiwgaW50 IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpCj4gIHsKPiAgCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0g bmFuZF90b19tdGQobmFuZCk7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAl1OCAqb29iX2J1ZiA9IG5hbmQtPm9vYl9w b2k7Cj4gKwlpbnQgcmV0Owo+ICAKPiAgCW1lbWNweShtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgYnVm LCBtdGQtPndyaXRlc2l6ZSk7Cj4gIAltZW1zZXQobWVzb25fY2hpcC0+aW5mb19idWYsIDAsIG5h bmQtPmVjYy5zdGVwcyAqIFBFUl9JTkZPX0JZVEUpOwo+ICAJbWVzb25fbmZjX3NldF91c2VyX2J5 dGUobmFuZCwgb29iX2J1Zik7Cj4gIAo+IC0JcmV0dXJuIG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihuYW5kLCBwYWdlLCAwKTsKPiArCXJldCA9IG1lc29uX25mY193cml0ZV9wYWdlX3N1YihuYW5k LCBwYWdlLCAwKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAob29i X3JlcXVpcmVkKQo+ICsJCXJldCA9IF9fbWVzb25fbmZjX3dyaXRlX29vYihuYW5kLCBwYWdlLCBv b2JfYnVmKTsKCllvdSBzaG91bGQgcHJvdmlkZSBhbGwgdGhlIGRhdGEgaW5jbHVkaW5nIE9PQiBi eXRlcyBpbiBhIHNpbmdsZSB3cml0ZQpjYWxsLCBvdGhlcndpc2UgeW91IHBlcmZvcm0gdHdvIHdy aXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90CndoYXQgdGhpcyBoZWxwZXIgaXMgZXhw ZWN0ZWQgdG8gZG8uCgo+ICsKPiArCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25mY19jaGVja19lY2NfcGFnZXNfdmFsaWQoc3RydWN0IG1lc29uX25mYyAqbmZjLAo+ IEBAIC03ODMsNyArODcyLDcgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX3Jhdyhz dHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4g cmV0Owo+ICAKPiAtCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfYnVmKTsK PiArCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfcmVxdWlyZWQgPyBvb2Jf YnVmIDogTlVMTCk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtODAzLDEyICs4OTIsMTIg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsIHU4ICpidWYsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JbWVz b25fbmZjX2dldF91c2VyX2J5dGUobmFuZCwgb29iX2J1Zik7Cj4gIAlyZXQgPSBtZXNvbl9uZmNf ZWNjX2NvcnJlY3QobmFuZCwgJmJpdGZsaXBzLCAmY29ycmVjdF9iaXRtYXApOwo+ICAJaWYgKHJl dCA9PSBFQ0NfQ0hFQ0tfUkVUVVJOX0ZGKSB7Cj4gIAkJaWYgKGJ1ZikKPiAgCQkJbWVtc2V0KGJ1 ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOwo+ICAJCW1lbXNldChvb2JfYnVmLCAweGZmLCBtdGQt Pm9vYnNpemUpOwo+ICsJCXJldHVybiBiaXRmbGlwczsKClRoYXQgaXMgc29tZXRoaW5nIGVsc2Ug PT4gb3RoZXIgZml4ID0+IG90aGVyIHBhdGNoPwoKPiAgCX0gZWxzZSBpZiAocmV0IDwgMCkgewo+ ICAJCWlmICgobmFuZC0+b3B0aW9ucyAmIE5BTkRfTkVFRF9TQ1JBTUJMSU5HKSB8fCAhYnVmKSB7 Cj4gIAkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwo+IEBAIC04MjAsMTIgKzkwOSwxNCBAQCBz dGF0aWMgaW50IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFu ZCwgdTggKmJ1ZiwKPiAgCj4gIAkJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwcyA7IGkr Kykgewo+ICAJCQl1OCAqZGF0YSA9IGJ1ZiArIGkgKiBlY2MtPnNpemU7Cj4gLQkJCXU4ICpvb2Ig PSBuYW5kLT5vb2JfcG9pICsgaSAqIChlY2MtPmJ5dGVzICsgMik7Cj4gKwkJCXU4ICpvb2IgPSBu YW5kLT5vb2JfcG9pICsgaSAqIE5GQ19PT0JfUEVSX0VDQyhuYW5kKTsKPiAgCj4gIAkJCWlmIChj b3JyZWN0X2JpdG1hcCAmIEJJVF9VTEwoaSkpCj4gIAkJCQljb250aW51ZTsKPiArCj4gIAkJCXJl dCA9IG5hbmRfY2hlY2tfZXJhc2VkX2VjY19jaHVuayhkYXRhLAllY2MtPnNpemUsCj4gLQkJCQkJ CQkgIG9vYiwgZWNjLT5ieXRlcyArIDIsCj4gKwkJCQkJCQkgIG9vYiwKPiArCQkJCQkJCSAgTkZD X09PQl9QRVJfRUNDKG5hbmQpLAo+ICAJCQkJCQkJICBOVUxMLCAwLAo+ICAJCQkJCQkJICBlY2Mt PnN0cmVuZ3RoKTsKPiAgCQkJaWYgKHJldCA8IDApIHsKPiBAQCAtODM5LDE3ICs5MzAsMzAgQEAg c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsIHU4ICpidWYsCj4gIAkJbWVtY3B5KGJ1ZiwgbWVzb25fY2hpcC0+ZGF0YV9idWYsIG10ZC0+ d3JpdGVzaXplKTsKPiAgCX0KPiAgCj4gKwlpZiAob29iX3JlcXVpcmVkKQo+ICsJCV9fbWVzb25f bmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG9vYl9idWYpOwoKSW4gdGhlIHN0YW5kYWxvbmUgInJl YWRfb29iIiBob29rLCB5b3UgaGF2ZSB0byBzZW5kIGEgUkVBRDAgY29tbWFuZCwKYnV0IG5vdCB3 aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJpZyB3YXN0ZSBvZiB0 aW1lLgoKPiArCj4gIAlyZXR1cm4gYml0ZmxpcHM7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgbWVz b25fbmZjX3JlYWRfb29iX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAg ewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2VfcmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2Up Owo+ICsJcmV0dXJuIF9fbWVzb25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9w b2kpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFu ZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAgewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3Bh Z2VfaHdlY2MobmFuZCwgTlVMTCwgMSwgcGFnZSk7Cj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfcmVh ZF9vb2IobmFuZCwgcGFnZSwgbmFuZC0+b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWVzb25fbmZjX3dyaXRlX29vYl9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2Up Cj4gK3sKPiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwgbmFuZC0+ b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX29vYihzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiArewo+ICsJcmV0dXJuIF9fbWVzb25fbmZj X3dyaXRlX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKCkRvIHdlIHJlYWxseSBuZWVk IHRoZXNlIGluZGlyZWN0aW9ucz8KCj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIG1lc29uX25mY19p c19idWZmZXJfZG1hX3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+IEBAIC05ODIsNyArMTA4Niw3 IEBAIHN0YXRpYyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg aW50IHNlY3Rpb24sCj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gIAkJcmV0 dXJuIC1FUkFOR0U7Cj4gIAo+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9uICog KDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZDX1VTRVJf QllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOwoKVGhlICgpIGFyZSBzdGls bCBuZWVkZWQgYXJvdW5kIHRoZSAnKicKCj4gIAlvb2JyZWdpb24tPmxlbmd0aCA9IG5hbmQtPmVj Yy5ieXRlczsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtOTkyLDEyICsxMDk2LDE2IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0 aW9uLAo+ICAJCQkJc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCj4gIHsKPiAgCXN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJdTMyIG9vYl9ieXRl cyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5hbmQpOwo+ICAKPiAgCWlmIChzZWN0aW9uID49 IG5hbmQtPmVjYy5zdGVwcykKPiAgCQlyZXR1cm4gLUVSQU5HRTsKPiAgCj4gLQlvb2JyZWdpb24t Pm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5hbmQtPmVjYy5ieXRlcyk7Cj4gLQlvb2JyZWdpb24t Pmxlbmd0aCA9IDI7Cj4gKwkvKiBTcGxpdCByZXN0IG9mIE9PQiBhcmVhIChub3QgY292ZXJlZCBi eSBFQ0MgZW5naW5lKSBwZXIgZWFjaAo+ICsJICogRUNDIHNlY3Rpb24uIFRoaXMgd2lsbCBiZSBP T0IgZGF0YSBhdmFpbGFibGUgdG8gdXNlci4KPiArCSAqLwo+ICsJb29icmVnaW9uLT5vZmZzZXQg PSAoc2VjdGlvbiArIG5hbmQtPmVjYy5zdGVwcykgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4g Kwlvb2JyZWdpb24tPmxlbmd0aCA9IG9vYl9ieXRlcyAvIG5hbmQtPmVjYy5zdGVwczsKPiAgCj4g IAlyZXR1cm4gMDsKPiAgfQo+IEBAIC0xMTg0LDYgKzEyOTIsOSBAQCBzdGF0aWMgaW50IG1lc29u X25hbmRfYmNoX21vZGUoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25hbmRfZGV0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgewo+ICsJ c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+ICsKPiArCWtmcmVlKG1lc29uX2NoaXAtPm9vYl9idWYpOwo+ICAJbWVzb25fbmZjX2Zy ZWVfYnVmZmVyKG5hbmQpOwo+ICB9Cj4gIAo+IEBAIC0xMjI1LDkgKzEzMzYsOSBAQCBzdGF0aWMg aW50IG1lc29uX25hbmRfYXR0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCW5h bmQtPmVjYy5lbmdpbmVfdHlwZSA9IE5BTkRfRUNDX0VOR0lORV9UWVBFX09OX0hPU1Q7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXc7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZSA9IG1lc29uX25mY193cml0ZV9wYWdlX2h3ZWNjOwo+IC0JbmFu ZC0+ZWNjLndyaXRlX29vYl9yYXcgPSBuYW5kX3dyaXRlX29vYl9zdGQ7Cj4gLQluYW5kLT5lY2Mu d3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwo+ICAKPiArCW5hbmQtPmVjYy53cml0ZV9v b2JfcmF3ID0gbWVzb25fbmZjX3dyaXRlX29vYl9yYXc7Cj4gKwluYW5kLT5lY2Mud3JpdGVfb29i ID0gbWVzb25fbmZjX3dyaXRlX29vYjsKCkFjdHVhbGx5IGlmIHlvdSBkZWZpbmUgdGhlIHJpZ2h0 IE9PQiBsYXlvdXRzLCBhcmUgdGhlc2UgcmVhbGx5IG5lZWRlZAo/PyBJIHdvdWxkIGV4cGVjdCB0 aGUgcmlnaHQgYnl0ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0CmltcGxlbWVudGF0 aW9uLiBJIHNlZSBub3RoaW5nIHNwZWNpZmljIGluIHlvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlv bj8KCj4gIAluYW5kLT5lY2MucmVhZF9wYWdlX3JhdyA9IG1lc29uX25mY19yZWFkX3BhZ2VfcmF3 Owo+ICAJbmFuZC0+ZWNjLnJlYWRfcGFnZSA9IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2M7Cj4g IAluYW5kLT5lY2MucmVhZF9vb2JfcmF3ID0gbWVzb25fbmZjX3JlYWRfb29iX3JhdzsKPiBAQCAt MTIzNyw5ICsxMzQ4LDE2IEBAIHN0YXRpYyBpbnQgbWVzb25fbmFuZF9hdHRhY2hfY2hpcChzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kKQo+ICAJCWRldl9lcnIobmZjLT5kZXYsICIxNmJpdHMgYnVzIHdp ZHRoIG5vdCBzdXBwb3J0ZWQiKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiArCj4gKwlt ZXNvbl9jaGlwLT5vb2JfYnVmID0ga21hbGxvYyhuYW5kLT5lY2MuYnl0ZXMsIEdGUF9LRVJORUwp OwoKZGV2bV9rbWFsbG9jPwoKPiArCWlmICghbWVzb25fY2hpcC0+b29iX2J1ZikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gIAlyZXQgPSBtZXNvbl9jaGlwX2J1ZmZlcl9pbml0KG5hbmQpOwo+ IC0JaWYgKHJldCkKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVm KTsKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9CgoK VGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo= 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 493E1C77B73 for ; Mon, 22 May 2023 15:40:50 +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=BPaeQKKcEPZzrq+2XB+4oyXMVrKConjSYV3zidywmgk=; b=gqvyimrzeClJbO QOIiIABlH2wYoP+T5cFJcFjraGs+1JCf6AC1pNLENt8feWlyeVCih+59n84hXgqq7BAQwvS+UlI4x 1s6mjSXhB8a9mEvii8j0BZbvtuhFDxM3FPAmTe/Dvd0hwE/1d37lR7kZlZgBYYti5ltQHPXNqTeik 6aSEk4a87Wl/PpgwkgSXCSEb4zOH6EBCYvxaOF1Cjhrz1DhTs9LsDSSueEl90ZRVdUtsuu/j6+X4t dywIdncZnr7LhkgEqR2Wc4gH9xDZlyzuvAOqoUy6oHrDcoF3CPtA43sqDOgJ1mP4ewEWaBXzwWvm5 dj+8ehkZNNVThlIl+xfg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q17e2-0073PZ-38; Mon, 22 May 2023 15:40:22 +0000 Received: from desiato.infradead.org ([90.155.92.199]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17e1-0073Oi-09; Mon, 22 May 2023 15:40:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IOqvYUx3TLV3ixZAlIHz5B0NYR dw1qC+IURV6ErdMZ2aqGeSTVRVFixalyJ3fvadSna/XSO1z37qIVVmKyC/B/6jr9X858U82+2Fc9a ZBcldNy/F/8fZdvxS4wrZ3dcANKqW+70/nkpVHIXaVvzJkPBd89QO5JmMpO4EdpH9MhkVQF9g9dDb Y6KzBSMKZxViKcZtGm2t6+9iYIHzn8sHfTK9a4FqVU/P80Iho+6NzWgsVYPLjFC+P0kuBc1N3myqX g7RBbUXm2kwMB51zd4TV+MFvGB2z2R3UWc6FI3BnLIuorfJCkIDhmGfcxUpMPaG2yRcgtT0iLLnKj V4qAhgjg==; Received: from relay5-d.mail.gandi.net ([2001:4b98:dc4:8::225]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17Xa-0023uI-2T; Mon, 22 May 2023 15:33:45 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 2A4A31C0005; Mon, 22 May 2023 15:33:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1684769616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IMfkVryp9hj5PV2VbxjCP00/4UBpe7QvP7AMSW1tCJYsSxYTfaqfamdu967u9eZ6yiNe0t SDMkMU05PlO5frq8G1ylfScOAt07sko9Lp7twLGrUT0lgJkInzkhhAUMetD88+ho+cqzZt qtMsnt2Ya1wyWfDbJitR82/79DlbC4su/82/cN0+7fjDgKpb63mmrsMOEtaoRthcA2mCye u8N6U9wB5um5tfwEA5rW/Z7rJtHhH7MJsg5r00HOv+uqYSwz8xii/CyW7bBMIjCwLeMMw+ osue2lKX/WEXPJTx7w8p9Er2+2G31gbt2gYX0k90MBCEo/w2SGUSiTMcIo1rIg== Date: Mon, 22 May 2023 17:33:34 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230522173334.7aa6f917@xps-13> In-Reply-To: <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; 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-20230522_163342_997712_49927A96 X-CRM114-Status: GOOD ( 39.29 ) 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 SGkgQXJzZW5peSwKCkFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBNb24sIDE1IE1h eSAyMDIzIDEyOjQ0OjM2ICswMzAwOgoKVGhlIHRpdGxlIHNob3VsZCBwZXJoYXBzIGJlICJvbmx5 IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIuCgo+IFRoaXMgbW92ZXMgZnJlZSBi eXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3RlZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4g bWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJv YmxlbSBmaXJlcyB3aGVuCj4gSkZGUzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21l IHBhZ2UgYW5kIGxhdGVyIGl0IHRyaWVzIHRvIHdyaXRlCj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUg d2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gYmVj b21lcyB1bnJlYWRhYmxlIGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJl Y2F1c2Ugc2Vjb25kCj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlz IGltcG9zc2libGUgdG8gZG8gaXQgY29ycmVjdGx5Cj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28g aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvCgoiLi4uIGlzIHRvIHVzZSB0aGUgdW5wcm90ZWN0ZWQg T09CIGFyZWEgdG8gc3RvcmUgdGhlIGNsZWFubWFya2Vycywgc28KdGhhdCB0aGV5IGNhbiBiZSB3 cml0dGVuIGJ5IHRoZSBmaWxlc3lzdGVtIHdpdGhvdXQgY2FyaW5nIG11Y2ggYWJvdXQKdGhlIHBh Z2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4g YW55d2F5LiIKPwoKSkZGUzIgaXMgb25seSB1c2VmdWwgb24gdGlueSBOQU5EIGRldmljZXMsIHdo ZXJlIFVCSSBkb2VzIG5vdCBmaXQsCndoaWNoIGFyZSB1c3VhbGx5IHRydWUgU0xDIGZsYXNoZXMs IHdpdGggdGhlIGNhcGFiaWxpdHkgb2Ygd3JpdGluZwphIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikg ZGF0YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKdG8gaXQgbGF0ZXIg aW4gYSBzZWNvbmQgd3JpdGUuCgo+IHNwbGl0IGFjY2Vzc2VzIHRvIE9PQgo+IGZyZWUgYnl0ZXMg YW5kIGRhdGEgb24gZWFjaCBwYWdlIC0gbm93IGJvdGggb2YgdGhlbSBkb2VzIG5vdCBkZXBlbmRz IG9uCj4gZWFjaCBvdGhlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFW S3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiAtLS0KPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVz b25fbmFuZC5jIHwgMTkyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICAxIGZpbGUg Y2hhbmdlZCwgMTU1IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9tZXNvbl9uYW5kLmMKPiBpbmRleCAyZjRkOGM4NDE4NmIuLjg1MjZhNmI4NzcyMCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiArKysgYi9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiBAQCAtMTA4LDYgKzEwOCw5IEBACj4gIAo+ ICAjZGVmaW5lIFBFUl9JTkZPX0JZVEUJCTgKPiAgCj4gKyNkZWZpbmUgTkZDX1VTRVJfQllURVMJ CTIKPiArI2RlZmluZSBORkNfT09CX1BFUl9FQ0MobmFuZCkJKChuYW5kKS0+ZWNjLmJ5dGVzICsg TkZDX1VTRVJfQllURVMpCj4gKwo+ICBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAlz dHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gIAlzdHJ1Y3QgbmFuZF9jaGlwIG5hbmQ7Cj4gQEAgLTEy Miw2ICsxMjUsNyBAQCBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAl1OCAqZGF0YV9i dWY7Cj4gIAlfX2xlNjQgKmluZm9fYnVmOwo+ICAJdTMyIG5zZWxzOwo+ICsJdTggKm9vYl9idWY7 Cj4gIAl1OCBzZWxzW107Cj4gIH07Cj4gIAo+IEBAIC0zMzgsNyArMzQyLDcgQEAgc3RhdGljIHU4 ICptZXNvbl9uZmNfb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiAgCXN0 cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5k KTsKPiAgCWludCBsZW47Cj4gIAo+IC0JbGVuID0gbmFuZC0+ZWNjLnNpemUgKiAoaSArIDEpICsg KG5hbmQtPmVjYy5ieXRlcyArIDIpICogaTsKPiArCWxlbiA9IG5hbmQtPmVjYy5zaXplICogKGkg KyAxKSArIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSAqIGk7CgpUaGlzLi4uCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNDksNyArMzUzLDcgQEAg c3RhdGljIHU4ICptZXNvbl9uZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IGkpCj4gIAlpbnQgbGVuLCB0ZW1wOwo+ICAKPiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5h bmQtPmVjYy5ieXRlczsKPiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ICsJbGVuID0gKHRlbXAg KyBORkNfVVNFUl9CWVRFUykgKiBpOwoKLi4uIGFuZCB0aGlzIChzYW1lIGJlbG93KQoKYXJlIHB1 cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUuCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNTcsMjkgKzM2MSw0NyBA QCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBp bnQgaSkKPiAgc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLAo+ICAJCQkJICAgdTggKmJ1ZiwgdTggKm9vYmJ1ZikKPiAgewo+ICsJc3RydWN0 IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiAgCWludCBpLCBv b2JfbGVuID0gMDsKPiAgCXU4ICpkc3JjLCAqb3NyYzsKPiArCXU4ICpvb2J0YWlsOwo+ICAKPiAt CW9vYl9sZW4gPSBuYW5kLT5lY2MuYnl0ZXMgKyAyOwo+ICsJb29iX2xlbiA9IE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ ICAJCWlmIChidWYpIHsKPiAgCQkJZHNyYyA9IG1lc29uX25mY19kYXRhX3B0cihuYW5kLCBpKTsK PiAgCQkJbWVtY3B5KGJ1ZiwgZHNyYywgbmFuZC0+ZWNjLnNpemUpOwo+ICAJCQlidWYgKz0gbmFu ZC0+ZWNjLnNpemU7Cj4gIAkJfQo+IC0JCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiAtCQltZW1jcHkob29iYnVmLCBvc3JjLCBvb2JfbGVuKTsKPiAtCQlvb2JidWYgKz0gb29i X2xlbjsKPiArCj4gKwkJaWYgKG9vYmJ1Zikgewo+ICsJCQlvc3JjID0gbWVzb25fbmZjX29vYl9w dHIobmFuZCwgaSk7Cj4gKwkJCW1lbWNweShvb2JidWYsIG9zcmMsIG9vYl9sZW4pOwo+ICsJCQlv b2JidWYgKz0gb29iX2xlbjsKPiArCQl9Cj4gIAl9Cj4gKwo+ICsJaWYgKCFvb2JidWYpCj4gKwkJ cmV0dXJuOwoKVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9naWMgaXMgbmljZSB0byBoYXZlLCBi dXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KYSBkZWRpY2F0ZWQgcGF0Y2guCgo+ICsKPiArCW9vYnRh aWwgPSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFu ZC0+ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNo aWZ0ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwoKCQkgICAgaXM/CnMvdW51c2Vk L3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhlIGNvbW1lbnQuCgo+ICsJbWVtY3B5KG9vYmJ1 Ziwgb29idGFpbCwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIG1lc29uX25mY19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRf Y2hpcCAqbmFuZCwKPiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gIHsKPiAr CXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChu YW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gIAlp bnQgaSwgb29iX2xlbiA9IDA7Cj4gIAl1OCAqZHNyYywgKm9zcmM7Cj4gKwl1OCAqb29idGFpbDsK PiAgCj4gLQlvb2JfbGVuID0gbmFuZC0+ZWNjLmJ5dGVzICsgMjsKPiArCW9vYl9sZW4gPSBORkNf T09CX1BFUl9FQ0MobmFuZCk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBp KyspIHsKPiAgCQlpZiAoYnVmKSB7Cj4gIAkJCWRzcmMgPSBtZXNvbl9uZmNfZGF0YV9wdHIobmFu ZCwgaSk7Cj4gQEAgLTM5MCw2ICs0MTIsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25fbmZjX3NldF9k YXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCW1lbWNweShvc3JjLCBvb2JidWYs IG9vYl9sZW4pOwo+ICAJCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ICAJfQo+ICsKPiArCW9vYnRhaWwg PSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFuZC0+ ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNoaWZ0 ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwo+ICsJbWVtY3B5KG9vYnRhaWwsIG9v YmJ1ZiwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4gIH0KPiAg Cj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3F1ZXVlX3JiKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywg aW50IHRpbWVvdXRfbXMsIGludCBjbWRfcmVhZDApCj4gQEAgLTQzNiwyNSArNDY0LDEyIEBAIHN0 YXRpYyB2b2lkIG1lc29uX25mY19zZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IHU4ICpvb2JfYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAlfX2xlNjQgKmluZm87Cj4gLQlpbnQgaSwg Y291bnQ7Cj4gLQo+IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IDIpIHsKPiAtCQlpbmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ld Owo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291bnRdOwo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291 bnQgKyAxXSA8PCA4Owo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1ZikKPiAtewo+IC0J c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+IC0JX19sZTY0ICppbmZvOwo+IC0JaW50IGksIGNvdW50Owo+ICsJaW50IGk7Cj4gIAo+ IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50 ICs9IDIpIHsKPiArCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ICAJ CWluZm8gPSAmbWVzb25fY2hpcC0+aW5mb19idWZbaV07Cj4gLQkJb29iX2J1Zltjb3VudF0gPSAq aW5mbzsKPiAtCQlvb2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ICsJCS8qIEFsd2F5 cyBpZ25vcmUgdXNlciBieXRlcyBwcm9ncmFtbWluZy4gKi8KCldoeT8KCkFsc28sIG1heWJlIEkg c2hvdWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cm10ZF9vb2JsYXlvdXRfZ2V0X2VjY2J5dGVzIGFu ZCBjbwpUaGV5IGFyZSB2ZXJ5IHVzZWZ1bCB0byBkZWFsIHdpdGggT09CIGJ5dGVzLiBFdmVyeXRo aW5nIHNlZW1zIGV4dHJlbWVseQpoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdoaWxlIHRoZSB1 c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCm9wZXJhdGlvbnMuCgo+ICsJCSppbmZvIHw9IDB4 ZmZmZjsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtNjk4LDE4ICs3MTMsOTIgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgY29uc3QgdTgg KmJ1ZiwKPiAgCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMSk7 Cj4gIH0KPiAgCj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMoc3RydWN0IG5h bmRfY2hpcCAqbmFuZCkKPiArewo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210 ZChuYW5kKTsKPiArCj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICog TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZj X3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSwgdTggKm9vYl9idWYp Cj4gK3sKPiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVz b25fbmFuZChuYW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gKwl1MzIgcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4g Kwl1MzIgb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMobmFuZCk7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmICghb29iX2J5dGVzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9 IG5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1lbWNweShtZXNvbl9jaGlwLT5vb2JfYnVm LCBvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkgICAgICAgb29iX2J5 dGVzKTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV93cml0ZV9jb2x1bW5fb3AobmFuZCwgcGFn ZV9zaXplIC0gb29iX2J5dGVzLAo+ICsJCQkJCSAgbWVzb25fY2hpcC0+b29iX2J1ZiwKPiArCQkJ CQkgIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJldHVybiBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19tZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBh Z2UsCj4gKwkJCQl1OCAqb29iX2J1ZikKPiArewo+ICsJc3RydWN0IG1lc29uX25mY19uYW5kX2No aXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiArCXUzMiBvb2JfYnl0ZXM7Cj4gKwl1MzIgcGFn ZV9zaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlvb2JfYnl0ZXMgPSBtZXNvbl9uZmNfZ2V0X29v Yl9ieXRlcyhuYW5kKTsKPiArCj4gKwlpZiAoIW9vYl9ieXRlcykKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlyZXQgPSBuYW5kX3JlYWRfcGFnZV9vcChuYW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlwYWdlX3NpemUgPSBtdGQtPndyaXRl c2l6ZSArIG10ZC0+b29ic2l6ZTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2NvbHVt bl9vcChuYW5kLCBwYWdlX3NpemUgLSBvb2JfYnl0ZXMsCj4gKwkJCQkJIG1lc29uX2NoaXAtPm9v Yl9idWYsCj4gKwkJCQkJIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsKPiArCWlmICghcmV0KQo+ICsJ CW1lbWNweShvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkJICAgICAg IG1lc29uX2NoaXAtPm9vYl9idWYsCj4gKwkJICAgICAgIG9vYl9ieXRlcyk7Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBtZXNvbl9uZmNfd3JpdGVfcGFnZV9od2Vj YyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCQkJICAgICAgY29uc3QgdTggKmJ1ZiwgaW50 IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpCj4gIHsKPiAgCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0g bmFuZF90b19tdGQobmFuZCk7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAl1OCAqb29iX2J1ZiA9IG5hbmQtPm9vYl9w b2k7Cj4gKwlpbnQgcmV0Owo+ICAKPiAgCW1lbWNweShtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgYnVm LCBtdGQtPndyaXRlc2l6ZSk7Cj4gIAltZW1zZXQobWVzb25fY2hpcC0+aW5mb19idWYsIDAsIG5h bmQtPmVjYy5zdGVwcyAqIFBFUl9JTkZPX0JZVEUpOwo+ICAJbWVzb25fbmZjX3NldF91c2VyX2J5 dGUobmFuZCwgb29iX2J1Zik7Cj4gIAo+IC0JcmV0dXJuIG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihuYW5kLCBwYWdlLCAwKTsKPiArCXJldCA9IG1lc29uX25mY193cml0ZV9wYWdlX3N1YihuYW5k LCBwYWdlLCAwKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAob29i X3JlcXVpcmVkKQo+ICsJCXJldCA9IF9fbWVzb25fbmZjX3dyaXRlX29vYihuYW5kLCBwYWdlLCBv b2JfYnVmKTsKCllvdSBzaG91bGQgcHJvdmlkZSBhbGwgdGhlIGRhdGEgaW5jbHVkaW5nIE9PQiBi eXRlcyBpbiBhIHNpbmdsZSB3cml0ZQpjYWxsLCBvdGhlcndpc2UgeW91IHBlcmZvcm0gdHdvIHdy aXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90CndoYXQgdGhpcyBoZWxwZXIgaXMgZXhw ZWN0ZWQgdG8gZG8uCgo+ICsKPiArCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25mY19jaGVja19lY2NfcGFnZXNfdmFsaWQoc3RydWN0IG1lc29uX25mYyAqbmZjLAo+ IEBAIC03ODMsNyArODcyLDcgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX3Jhdyhz dHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4g cmV0Owo+ICAKPiAtCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfYnVmKTsK PiArCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfcmVxdWlyZWQgPyBvb2Jf YnVmIDogTlVMTCk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtODAzLDEyICs4OTIsMTIg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsIHU4ICpidWYsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JbWVz b25fbmZjX2dldF91c2VyX2J5dGUobmFuZCwgb29iX2J1Zik7Cj4gIAlyZXQgPSBtZXNvbl9uZmNf ZWNjX2NvcnJlY3QobmFuZCwgJmJpdGZsaXBzLCAmY29ycmVjdF9iaXRtYXApOwo+ICAJaWYgKHJl dCA9PSBFQ0NfQ0hFQ0tfUkVUVVJOX0ZGKSB7Cj4gIAkJaWYgKGJ1ZikKPiAgCQkJbWVtc2V0KGJ1 ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOwo+ICAJCW1lbXNldChvb2JfYnVmLCAweGZmLCBtdGQt Pm9vYnNpemUpOwo+ICsJCXJldHVybiBiaXRmbGlwczsKClRoYXQgaXMgc29tZXRoaW5nIGVsc2Ug PT4gb3RoZXIgZml4ID0+IG90aGVyIHBhdGNoPwoKPiAgCX0gZWxzZSBpZiAocmV0IDwgMCkgewo+ ICAJCWlmICgobmFuZC0+b3B0aW9ucyAmIE5BTkRfTkVFRF9TQ1JBTUJMSU5HKSB8fCAhYnVmKSB7 Cj4gIAkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwo+IEBAIC04MjAsMTIgKzkwOSwxNCBAQCBz dGF0aWMgaW50IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFu ZCwgdTggKmJ1ZiwKPiAgCj4gIAkJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwcyA7IGkr Kykgewo+ICAJCQl1OCAqZGF0YSA9IGJ1ZiArIGkgKiBlY2MtPnNpemU7Cj4gLQkJCXU4ICpvb2Ig PSBuYW5kLT5vb2JfcG9pICsgaSAqIChlY2MtPmJ5dGVzICsgMik7Cj4gKwkJCXU4ICpvb2IgPSBu YW5kLT5vb2JfcG9pICsgaSAqIE5GQ19PT0JfUEVSX0VDQyhuYW5kKTsKPiAgCj4gIAkJCWlmIChj b3JyZWN0X2JpdG1hcCAmIEJJVF9VTEwoaSkpCj4gIAkJCQljb250aW51ZTsKPiArCj4gIAkJCXJl dCA9IG5hbmRfY2hlY2tfZXJhc2VkX2VjY19jaHVuayhkYXRhLAllY2MtPnNpemUsCj4gLQkJCQkJ CQkgIG9vYiwgZWNjLT5ieXRlcyArIDIsCj4gKwkJCQkJCQkgIG9vYiwKPiArCQkJCQkJCSAgTkZD X09PQl9QRVJfRUNDKG5hbmQpLAo+ICAJCQkJCQkJICBOVUxMLCAwLAo+ICAJCQkJCQkJICBlY2Mt PnN0cmVuZ3RoKTsKPiAgCQkJaWYgKHJldCA8IDApIHsKPiBAQCAtODM5LDE3ICs5MzAsMzAgQEAg c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsIHU4ICpidWYsCj4gIAkJbWVtY3B5KGJ1ZiwgbWVzb25fY2hpcC0+ZGF0YV9idWYsIG10ZC0+ d3JpdGVzaXplKTsKPiAgCX0KPiAgCj4gKwlpZiAob29iX3JlcXVpcmVkKQo+ICsJCV9fbWVzb25f bmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG9vYl9idWYpOwoKSW4gdGhlIHN0YW5kYWxvbmUgInJl YWRfb29iIiBob29rLCB5b3UgaGF2ZSB0byBzZW5kIGEgUkVBRDAgY29tbWFuZCwKYnV0IG5vdCB3 aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJpZyB3YXN0ZSBvZiB0 aW1lLgoKPiArCj4gIAlyZXR1cm4gYml0ZmxpcHM7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgbWVz b25fbmZjX3JlYWRfb29iX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAg ewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2VfcmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2Up Owo+ICsJcmV0dXJuIF9fbWVzb25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9w b2kpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFu ZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAgewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3Bh Z2VfaHdlY2MobmFuZCwgTlVMTCwgMSwgcGFnZSk7Cj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfcmVh ZF9vb2IobmFuZCwgcGFnZSwgbmFuZC0+b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWVzb25fbmZjX3dyaXRlX29vYl9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2Up Cj4gK3sKPiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwgbmFuZC0+ b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX29vYihzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiArewo+ICsJcmV0dXJuIF9fbWVzb25fbmZj X3dyaXRlX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKCkRvIHdlIHJlYWxseSBuZWVk IHRoZXNlIGluZGlyZWN0aW9ucz8KCj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIG1lc29uX25mY19p c19idWZmZXJfZG1hX3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+IEBAIC05ODIsNyArMTA4Niw3 IEBAIHN0YXRpYyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg aW50IHNlY3Rpb24sCj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gIAkJcmV0 dXJuIC1FUkFOR0U7Cj4gIAo+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9uICog KDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZDX1VTRVJf QllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOwoKVGhlICgpIGFyZSBzdGls bCBuZWVkZWQgYXJvdW5kIHRoZSAnKicKCj4gIAlvb2JyZWdpb24tPmxlbmd0aCA9IG5hbmQtPmVj Yy5ieXRlczsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtOTkyLDEyICsxMDk2LDE2IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0 aW9uLAo+ICAJCQkJc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCj4gIHsKPiAgCXN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJdTMyIG9vYl9ieXRl cyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5hbmQpOwo+ICAKPiAgCWlmIChzZWN0aW9uID49 IG5hbmQtPmVjYy5zdGVwcykKPiAgCQlyZXR1cm4gLUVSQU5HRTsKPiAgCj4gLQlvb2JyZWdpb24t Pm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5hbmQtPmVjYy5ieXRlcyk7Cj4gLQlvb2JyZWdpb24t Pmxlbmd0aCA9IDI7Cj4gKwkvKiBTcGxpdCByZXN0IG9mIE9PQiBhcmVhIChub3QgY292ZXJlZCBi eSBFQ0MgZW5naW5lKSBwZXIgZWFjaAo+ICsJICogRUNDIHNlY3Rpb24uIFRoaXMgd2lsbCBiZSBP T0IgZGF0YSBhdmFpbGFibGUgdG8gdXNlci4KPiArCSAqLwo+ICsJb29icmVnaW9uLT5vZmZzZXQg PSAoc2VjdGlvbiArIG5hbmQtPmVjYy5zdGVwcykgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4g Kwlvb2JyZWdpb24tPmxlbmd0aCA9IG9vYl9ieXRlcyAvIG5hbmQtPmVjYy5zdGVwczsKPiAgCj4g IAlyZXR1cm4gMDsKPiAgfQo+IEBAIC0xMTg0LDYgKzEyOTIsOSBAQCBzdGF0aWMgaW50IG1lc29u X25hbmRfYmNoX21vZGUoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25hbmRfZGV0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgewo+ICsJ c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+ICsKPiArCWtmcmVlKG1lc29uX2NoaXAtPm9vYl9idWYpOwo+ICAJbWVzb25fbmZjX2Zy ZWVfYnVmZmVyKG5hbmQpOwo+ICB9Cj4gIAo+IEBAIC0xMjI1LDkgKzEzMzYsOSBAQCBzdGF0aWMg aW50IG1lc29uX25hbmRfYXR0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCW5h bmQtPmVjYy5lbmdpbmVfdHlwZSA9IE5BTkRfRUNDX0VOR0lORV9UWVBFX09OX0hPU1Q7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXc7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZSA9IG1lc29uX25mY193cml0ZV9wYWdlX2h3ZWNjOwo+IC0JbmFu ZC0+ZWNjLndyaXRlX29vYl9yYXcgPSBuYW5kX3dyaXRlX29vYl9zdGQ7Cj4gLQluYW5kLT5lY2Mu d3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwo+ICAKPiArCW5hbmQtPmVjYy53cml0ZV9v b2JfcmF3ID0gbWVzb25fbmZjX3dyaXRlX29vYl9yYXc7Cj4gKwluYW5kLT5lY2Mud3JpdGVfb29i ID0gbWVzb25fbmZjX3dyaXRlX29vYjsKCkFjdHVhbGx5IGlmIHlvdSBkZWZpbmUgdGhlIHJpZ2h0 IE9PQiBsYXlvdXRzLCBhcmUgdGhlc2UgcmVhbGx5IG5lZWRlZAo/PyBJIHdvdWxkIGV4cGVjdCB0 aGUgcmlnaHQgYnl0ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0CmltcGxlbWVudGF0 aW9uLiBJIHNlZSBub3RoaW5nIHNwZWNpZmljIGluIHlvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlv bj8KCj4gIAluYW5kLT5lY2MucmVhZF9wYWdlX3JhdyA9IG1lc29uX25mY19yZWFkX3BhZ2VfcmF3 Owo+ICAJbmFuZC0+ZWNjLnJlYWRfcGFnZSA9IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2M7Cj4g IAluYW5kLT5lY2MucmVhZF9vb2JfcmF3ID0gbWVzb25fbmZjX3JlYWRfb29iX3JhdzsKPiBAQCAt MTIzNyw5ICsxMzQ4LDE2IEBAIHN0YXRpYyBpbnQgbWVzb25fbmFuZF9hdHRhY2hfY2hpcChzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kKQo+ICAJCWRldl9lcnIobmZjLT5kZXYsICIxNmJpdHMgYnVzIHdp ZHRoIG5vdCBzdXBwb3J0ZWQiKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiArCj4gKwlt ZXNvbl9jaGlwLT5vb2JfYnVmID0ga21hbGxvYyhuYW5kLT5lY2MuYnl0ZXMsIEdGUF9LRVJORUwp OwoKZGV2bV9rbWFsbG9jPwoKPiArCWlmICghbWVzb25fY2hpcC0+b29iX2J1ZikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gIAlyZXQgPSBtZXNvbl9jaGlwX2J1ZmZlcl9pbml0KG5hbmQpOwo+ IC0JaWYgKHJldCkKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVm KTsKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9CgoK VGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg== 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 1F7F3C7EE26 for ; Mon, 22 May 2023 15:40:35 +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=uc2TZOAPoMY6b6OEyypHkNHffnPgHQUgyFa58qH8Wwg=; b=Nk92Vx/Rh3GMqI wxjx1PTxy/91anycgj6JEy+cacU8UvgAKDi1rih8MKzlut7LTJR4GcwrPDuWH9CngMFpjtrXO87nv Q3m9mPg89pqn4OjxXxjx3J18iVIoOAmzw6JRiAgCrvcvrIPiF8yCDXqlkoY/Bw1pzsMRofjCK7gc6 8vAVQKKFKfmT8yNi8brnVvqLCHqWfn1Jk2tbPXZlSTrZLaRKTGefludaa/TAW9WWs/IymCLuwjSmP BmObH89GPyyWtHDAEh6CtIWe3QjLqogU1mQUzu/bpe8F3lIZhT4aBoBudY3ahc4sWAUXqy6mDbmC8 pEJy6U6egY5PbmfUaKyg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q17e2-0073PN-1y; Mon, 22 May 2023 15:40:22 +0000 Received: from desiato.infradead.org ([90.155.92.199]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17e1-0073Oi-09; Mon, 22 May 2023 15:40:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IOqvYUx3TLV3ixZAlIHz5B0NYR dw1qC+IURV6ErdMZ2aqGeSTVRVFixalyJ3fvadSna/XSO1z37qIVVmKyC/B/6jr9X858U82+2Fc9a ZBcldNy/F/8fZdvxS4wrZ3dcANKqW+70/nkpVHIXaVvzJkPBd89QO5JmMpO4EdpH9MhkVQF9g9dDb Y6KzBSMKZxViKcZtGm2t6+9iYIHzn8sHfTK9a4FqVU/P80Iho+6NzWgsVYPLjFC+P0kuBc1N3myqX g7RBbUXm2kwMB51zd4TV+MFvGB2z2R3UWc6FI3BnLIuorfJCkIDhmGfcxUpMPaG2yRcgtT0iLLnKj V4qAhgjg==; Received: from relay5-d.mail.gandi.net ([2001:4b98:dc4:8::225]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q17Xa-0023uI-2T; Mon, 22 May 2023 15:33:45 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 2A4A31C0005; Mon, 22 May 2023 15:33:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1684769616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oTNkxoXNH5nvERaedEuKHmNcyqjQZ3XwX/bJPv/WU2E=; b=IMfkVryp9hj5PV2VbxjCP00/4UBpe7QvP7AMSW1tCJYsSxYTfaqfamdu967u9eZ6yiNe0t SDMkMU05PlO5frq8G1ylfScOAt07sko9Lp7twLGrUT0lgJkInzkhhAUMetD88+ho+cqzZt qtMsnt2Ya1wyWfDbJitR82/79DlbC4su/82/cN0+7fjDgKpb63mmrsMOEtaoRthcA2mCye u8N6U9wB5um5tfwEA5rW/Z7rJtHhH7MJsg5r00HOv+uqYSwz8xii/CyW7bBMIjCwLeMMw+ osue2lKX/WEXPJTx7w8p9Er2+2G31gbt2gYX0k90MBCEo/w2SGUSiTMcIo1rIg== Date: Mon, 22 May 2023 17:33:34 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230522173334.7aa6f917@xps-13> In-Reply-To: <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; 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-20230522_163342_997712_49927A96 X-CRM114-Status: GOOD ( 39.29 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGkgQXJzZW5peSwKCkFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBNb24sIDE1IE1h eSAyMDIzIDEyOjQ0OjM2ICswMzAwOgoKVGhlIHRpdGxlIHNob3VsZCBwZXJoYXBzIGJlICJvbmx5 IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIuCgo+IFRoaXMgbW92ZXMgZnJlZSBi eXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3RlZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4g bWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJv YmxlbSBmaXJlcyB3aGVuCj4gSkZGUzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21l IHBhZ2UgYW5kIGxhdGVyIGl0IHRyaWVzIHRvIHdyaXRlCj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUg d2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gYmVj b21lcyB1bnJlYWRhYmxlIGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJl Y2F1c2Ugc2Vjb25kCj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlz IGltcG9zc2libGUgdG8gZG8gaXQgY29ycmVjdGx5Cj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28g aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvCgoiLi4uIGlzIHRvIHVzZSB0aGUgdW5wcm90ZWN0ZWQg T09CIGFyZWEgdG8gc3RvcmUgdGhlIGNsZWFubWFya2Vycywgc28KdGhhdCB0aGV5IGNhbiBiZSB3 cml0dGVuIGJ5IHRoZSBmaWxlc3lzdGVtIHdpdGhvdXQgY2FyaW5nIG11Y2ggYWJvdXQKdGhlIHBh Z2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4g YW55d2F5LiIKPwoKSkZGUzIgaXMgb25seSB1c2VmdWwgb24gdGlueSBOQU5EIGRldmljZXMsIHdo ZXJlIFVCSSBkb2VzIG5vdCBmaXQsCndoaWNoIGFyZSB1c3VhbGx5IHRydWUgU0xDIGZsYXNoZXMs IHdpdGggdGhlIGNhcGFiaWxpdHkgb2Ygd3JpdGluZwphIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikg ZGF0YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKdG8gaXQgbGF0ZXIg aW4gYSBzZWNvbmQgd3JpdGUuCgo+IHNwbGl0IGFjY2Vzc2VzIHRvIE9PQgo+IGZyZWUgYnl0ZXMg YW5kIGRhdGEgb24gZWFjaCBwYWdlIC0gbm93IGJvdGggb2YgdGhlbSBkb2VzIG5vdCBkZXBlbmRz IG9uCj4gZWFjaCBvdGhlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFW S3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiAtLS0KPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVz b25fbmFuZC5jIHwgMTkyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICAxIGZpbGUg Y2hhbmdlZCwgMTU1IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9tZXNvbl9uYW5kLmMKPiBpbmRleCAyZjRkOGM4NDE4NmIuLjg1MjZhNmI4NzcyMCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiArKysgYi9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMKPiBAQCAtMTA4LDYgKzEwOCw5IEBACj4gIAo+ ICAjZGVmaW5lIFBFUl9JTkZPX0JZVEUJCTgKPiAgCj4gKyNkZWZpbmUgTkZDX1VTRVJfQllURVMJ CTIKPiArI2RlZmluZSBORkNfT09CX1BFUl9FQ0MobmFuZCkJKChuYW5kKS0+ZWNjLmJ5dGVzICsg TkZDX1VTRVJfQllURVMpCj4gKwo+ICBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAlz dHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gIAlzdHJ1Y3QgbmFuZF9jaGlwIG5hbmQ7Cj4gQEAgLTEy Miw2ICsxMjUsNyBAQCBzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCB7Cj4gIAl1OCAqZGF0YV9i dWY7Cj4gIAlfX2xlNjQgKmluZm9fYnVmOwo+ICAJdTMyIG5zZWxzOwo+ICsJdTggKm9vYl9idWY7 Cj4gIAl1OCBzZWxzW107Cj4gIH07Cj4gIAo+IEBAIC0zMzgsNyArMzQyLDcgQEAgc3RhdGljIHU4 ICptZXNvbl9uZmNfb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiAgCXN0 cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5k KTsKPiAgCWludCBsZW47Cj4gIAo+IC0JbGVuID0gbmFuZC0+ZWNjLnNpemUgKiAoaSArIDEpICsg KG5hbmQtPmVjYy5ieXRlcyArIDIpICogaTsKPiArCWxlbiA9IG5hbmQtPmVjYy5zaXplICogKGkg KyAxKSArIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSAqIGk7CgpUaGlzLi4uCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNDksNyArMzUzLDcgQEAg c3RhdGljIHU4ICptZXNvbl9uZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IGkpCj4gIAlpbnQgbGVuLCB0ZW1wOwo+ICAKPiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5h bmQtPmVjYy5ieXRlczsKPiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ICsJbGVuID0gKHRlbXAg KyBORkNfVVNFUl9CWVRFUykgKiBpOwoKLi4uIGFuZCB0aGlzIChzYW1lIGJlbG93KQoKYXJlIHB1 cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUuCgo+ICAKPiAgCXJldHVy biBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIGxlbjsKPiAgfQo+IEBAIC0zNTcsMjkgKzM2MSw0NyBA QCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBp bnQgaSkKPiAgc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLAo+ICAJCQkJICAgdTggKmJ1ZiwgdTggKm9vYmJ1ZikKPiAgewo+ICsJc3RydWN0 IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiAgCWludCBpLCBv b2JfbGVuID0gMDsKPiAgCXU4ICpkc3JjLCAqb3NyYzsKPiArCXU4ICpvb2J0YWlsOwo+ICAKPiAt CW9vYl9sZW4gPSBuYW5kLT5lY2MuYnl0ZXMgKyAyOwo+ICsJb29iX2xlbiA9IE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ ICAJCWlmIChidWYpIHsKPiAgCQkJZHNyYyA9IG1lc29uX25mY19kYXRhX3B0cihuYW5kLCBpKTsK PiAgCQkJbWVtY3B5KGJ1ZiwgZHNyYywgbmFuZC0+ZWNjLnNpemUpOwo+ICAJCQlidWYgKz0gbmFu ZC0+ZWNjLnNpemU7Cj4gIAkJfQo+IC0JCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiAtCQltZW1jcHkob29iYnVmLCBvc3JjLCBvb2JfbGVuKTsKPiAtCQlvb2JidWYgKz0gb29i X2xlbjsKPiArCj4gKwkJaWYgKG9vYmJ1Zikgewo+ICsJCQlvc3JjID0gbWVzb25fbmZjX29vYl9w dHIobmFuZCwgaSk7Cj4gKwkJCW1lbWNweShvb2JidWYsIG9zcmMsIG9vYl9sZW4pOwo+ICsJCQlv b2JidWYgKz0gb29iX2xlbjsKPiArCQl9Cj4gIAl9Cj4gKwo+ICsJaWYgKCFvb2JidWYpCj4gKwkJ cmV0dXJuOwoKVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9naWMgaXMgbmljZSB0byBoYXZlLCBi dXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KYSBkZWRpY2F0ZWQgcGF0Y2guCgo+ICsKPiArCW9vYnRh aWwgPSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFu ZC0+ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNo aWZ0ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwoKCQkgICAgaXM/CnMvdW51c2Vk L3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhlIGNvbW1lbnQuCgo+ICsJbWVtY3B5KG9vYmJ1 Ziwgb29idGFpbCwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIG1lc29uX25mY19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRf Y2hpcCAqbmFuZCwKPiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gIHsKPiAr CXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChu YW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gIAlp bnQgaSwgb29iX2xlbiA9IDA7Cj4gIAl1OCAqZHNyYywgKm9zcmM7Cj4gKwl1OCAqb29idGFpbDsK PiAgCj4gLQlvb2JfbGVuID0gbmFuZC0+ZWNjLmJ5dGVzICsgMjsKPiArCW9vYl9sZW4gPSBORkNf T09CX1BFUl9FQ0MobmFuZCk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBp KyspIHsKPiAgCQlpZiAoYnVmKSB7Cj4gIAkJCWRzcmMgPSBtZXNvbl9uZmNfZGF0YV9wdHIobmFu ZCwgaSk7Cj4gQEAgLTM5MCw2ICs0MTIsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25fbmZjX3NldF9k YXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCW1lbWNweShvc3JjLCBvb2JidWYs IG9vYl9sZW4pOwo+ICAJCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ICAJfQo+ICsKPiArCW9vYnRhaWwg PSBtZXNvbl9jaGlwLT5kYXRhX2J1ZiArIG5hbmQtPmVjYy5zdGVwcyAqCj4gKwkJICAobmFuZC0+ ZWNjLnNpemUgKyBvb2JfbGVuKTsKPiArCj4gKwkvKiAnb29iYnVmJyBpZiBhbHJlYWR5IHNoaWZ0 ZWQgdG8gdGhlIHN0YXJ0IG9mIHVudXNlZCBhcmVhLiAqLwo+ICsJbWVtY3B5KG9vYnRhaWwsIG9v YmJ1ZiwgbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICogb29iX2xlbik7Cj4gIH0KPiAg Cj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3F1ZXVlX3JiKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywg aW50IHRpbWVvdXRfbXMsIGludCBjbWRfcmVhZDApCj4gQEAgLTQzNiwyNSArNDY0LDEyIEBAIHN0 YXRpYyB2b2lkIG1lc29uX25mY19zZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IHU4ICpvb2JfYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAlfX2xlNjQgKmluZm87Cj4gLQlpbnQgaSwg Y291bnQ7Cj4gLQo+IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IDIpIHsKPiAtCQlpbmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ld Owo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291bnRdOwo+IC0JCSppbmZvIHw9IG9vYl9idWZbY291 bnQgKyAxXSA8PCA4Owo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1ZikKPiAtewo+IC0J c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+IC0JX19sZTY0ICppbmZvOwo+IC0JaW50IGksIGNvdW50Owo+ICsJaW50IGk7Cj4gIAo+ IC0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50 ICs9IDIpIHsKPiArCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ICAJ CWluZm8gPSAmbWVzb25fY2hpcC0+aW5mb19idWZbaV07Cj4gLQkJb29iX2J1Zltjb3VudF0gPSAq aW5mbzsKPiAtCQlvb2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ICsJCS8qIEFsd2F5 cyBpZ25vcmUgdXNlciBieXRlcyBwcm9ncmFtbWluZy4gKi8KCldoeT8KCkFsc28sIG1heWJlIEkg c2hvdWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cm10ZF9vb2JsYXlvdXRfZ2V0X2VjY2J5dGVzIGFu ZCBjbwpUaGV5IGFyZSB2ZXJ5IHVzZWZ1bCB0byBkZWFsIHdpdGggT09CIGJ5dGVzLiBFdmVyeXRo aW5nIHNlZW1zIGV4dHJlbWVseQpoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdoaWxlIHRoZSB1 c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCm9wZXJhdGlvbnMuCgo+ICsJCSppbmZvIHw9IDB4 ZmZmZjsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtNjk4LDE4ICs3MTMsOTIgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgY29uc3QgdTgg KmJ1ZiwKPiAgCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMSk7 Cj4gIH0KPiAgCj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMoc3RydWN0IG5h bmRfY2hpcCAqbmFuZCkKPiArewo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210 ZChuYW5kKTsKPiArCj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFuZC0+ZWNjLnN0ZXBzICog TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZj X3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSwgdTggKm9vYl9idWYp Cj4gK3sKPiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVz b25fbmFuZChuYW5kKTsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gKwl1MzIgcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4g Kwl1MzIgb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMobmFuZCk7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmICghb29iX2J5dGVzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9 IG5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1lbWNweShtZXNvbl9jaGlwLT5vb2JfYnVm LCBvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkgICAgICAgb29iX2J5 dGVzKTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV93cml0ZV9jb2x1bW5fb3AobmFuZCwgcGFn ZV9zaXplIC0gb29iX2J5dGVzLAo+ICsJCQkJCSAgbWVzb25fY2hpcC0+b29iX2J1ZiwKPiArCQkJ CQkgIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJldHVybiBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19tZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBh Z2UsCj4gKwkJCQl1OCAqb29iX2J1ZikKPiArewo+ICsJc3RydWN0IG1lc29uX25mY19uYW5kX2No aXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQgPSBuYW5kX3RvX210ZChuYW5kKTsKPiArCXUzMiBvb2JfYnl0ZXM7Cj4gKwl1MzIgcGFn ZV9zaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlvb2JfYnl0ZXMgPSBtZXNvbl9uZmNfZ2V0X29v Yl9ieXRlcyhuYW5kKTsKPiArCj4gKwlpZiAoIW9vYl9ieXRlcykKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlyZXQgPSBuYW5kX3JlYWRfcGFnZV9vcChuYW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlwYWdlX3NpemUgPSBtdGQtPndyaXRl c2l6ZSArIG10ZC0+b29ic2l6ZTsKPiArCj4gKwlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2NvbHVt bl9vcChuYW5kLCBwYWdlX3NpemUgLSBvb2JfYnl0ZXMsCj4gKwkJCQkJIG1lc29uX2NoaXAtPm9v Yl9idWYsCj4gKwkJCQkJIG9vYl9ieXRlcywgZmFsc2UpOwo+ICsKPiArCWlmICghcmV0KQo+ICsJ CW1lbWNweShvb2JfYnVmICsgKG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gKwkJICAgICAg IG1lc29uX2NoaXAtPm9vYl9idWYsCj4gKwkJICAgICAgIG9vYl9ieXRlcyk7Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBtZXNvbl9uZmNfd3JpdGVfcGFnZV9od2Vj YyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ICAJCQkJICAgICAgY29uc3QgdTggKmJ1ZiwgaW50 IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpCj4gIHsKPiAgCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0g bmFuZF90b19tdGQobmFuZCk7Cj4gIAlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25f Y2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gIAl1OCAqb29iX2J1ZiA9IG5hbmQtPm9vYl9w b2k7Cj4gKwlpbnQgcmV0Owo+ICAKPiAgCW1lbWNweShtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgYnVm LCBtdGQtPndyaXRlc2l6ZSk7Cj4gIAltZW1zZXQobWVzb25fY2hpcC0+aW5mb19idWYsIDAsIG5h bmQtPmVjYy5zdGVwcyAqIFBFUl9JTkZPX0JZVEUpOwo+ICAJbWVzb25fbmZjX3NldF91c2VyX2J5 dGUobmFuZCwgb29iX2J1Zik7Cj4gIAo+IC0JcmV0dXJuIG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihuYW5kLCBwYWdlLCAwKTsKPiArCXJldCA9IG1lc29uX25mY193cml0ZV9wYWdlX3N1YihuYW5k LCBwYWdlLCAwKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAob29i X3JlcXVpcmVkKQo+ICsJCXJldCA9IF9fbWVzb25fbmZjX3dyaXRlX29vYihuYW5kLCBwYWdlLCBv b2JfYnVmKTsKCllvdSBzaG91bGQgcHJvdmlkZSBhbGwgdGhlIGRhdGEgaW5jbHVkaW5nIE9PQiBi eXRlcyBpbiBhIHNpbmdsZSB3cml0ZQpjYWxsLCBvdGhlcndpc2UgeW91IHBlcmZvcm0gdHdvIHdy aXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90CndoYXQgdGhpcyBoZWxwZXIgaXMgZXhw ZWN0ZWQgdG8gZG8uCgo+ICsKPiArCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25mY19jaGVja19lY2NfcGFnZXNfdmFsaWQoc3RydWN0IG1lc29uX25mYyAqbmZjLAo+ IEBAIC03ODMsNyArODcyLDcgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX3Jhdyhz dHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4g cmV0Owo+ICAKPiAtCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfYnVmKTsK PiArCW1lc29uX25mY19nZXRfZGF0YV9vb2IobmFuZCwgYnVmLCBvb2JfcmVxdWlyZWQgPyBvb2Jf YnVmIDogTlVMTCk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtODAzLDEyICs4OTIsMTIg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsIHU4ICpidWYsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JbWVz b25fbmZjX2dldF91c2VyX2J5dGUobmFuZCwgb29iX2J1Zik7Cj4gIAlyZXQgPSBtZXNvbl9uZmNf ZWNjX2NvcnJlY3QobmFuZCwgJmJpdGZsaXBzLCAmY29ycmVjdF9iaXRtYXApOwo+ICAJaWYgKHJl dCA9PSBFQ0NfQ0hFQ0tfUkVUVVJOX0ZGKSB7Cj4gIAkJaWYgKGJ1ZikKPiAgCQkJbWVtc2V0KGJ1 ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOwo+ICAJCW1lbXNldChvb2JfYnVmLCAweGZmLCBtdGQt Pm9vYnNpemUpOwo+ICsJCXJldHVybiBiaXRmbGlwczsKClRoYXQgaXMgc29tZXRoaW5nIGVsc2Ug PT4gb3RoZXIgZml4ID0+IG90aGVyIHBhdGNoPwoKPiAgCX0gZWxzZSBpZiAocmV0IDwgMCkgewo+ ICAJCWlmICgobmFuZC0+b3B0aW9ucyAmIE5BTkRfTkVFRF9TQ1JBTUJMSU5HKSB8fCAhYnVmKSB7 Cj4gIAkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwo+IEBAIC04MjAsMTIgKzkwOSwxNCBAQCBz dGF0aWMgaW50IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFu ZCwgdTggKmJ1ZiwKPiAgCj4gIAkJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwcyA7IGkr Kykgewo+ICAJCQl1OCAqZGF0YSA9IGJ1ZiArIGkgKiBlY2MtPnNpemU7Cj4gLQkJCXU4ICpvb2Ig PSBuYW5kLT5vb2JfcG9pICsgaSAqIChlY2MtPmJ5dGVzICsgMik7Cj4gKwkJCXU4ICpvb2IgPSBu YW5kLT5vb2JfcG9pICsgaSAqIE5GQ19PT0JfUEVSX0VDQyhuYW5kKTsKPiAgCj4gIAkJCWlmIChj b3JyZWN0X2JpdG1hcCAmIEJJVF9VTEwoaSkpCj4gIAkJCQljb250aW51ZTsKPiArCj4gIAkJCXJl dCA9IG5hbmRfY2hlY2tfZXJhc2VkX2VjY19jaHVuayhkYXRhLAllY2MtPnNpemUsCj4gLQkJCQkJ CQkgIG9vYiwgZWNjLT5ieXRlcyArIDIsCj4gKwkJCQkJCQkgIG9vYiwKPiArCQkJCQkJCSAgTkZD X09PQl9QRVJfRUNDKG5hbmQpLAo+ICAJCQkJCQkJICBOVUxMLCAwLAo+ICAJCQkJCQkJICBlY2Mt PnN0cmVuZ3RoKTsKPiAgCQkJaWYgKHJldCA8IDApIHsKPiBAQCAtODM5LDE3ICs5MzAsMzAgQEAg c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsIHU4ICpidWYsCj4gIAkJbWVtY3B5KGJ1ZiwgbWVzb25fY2hpcC0+ZGF0YV9idWYsIG10ZC0+ d3JpdGVzaXplKTsKPiAgCX0KPiAgCj4gKwlpZiAob29iX3JlcXVpcmVkKQo+ICsJCV9fbWVzb25f bmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG9vYl9idWYpOwoKSW4gdGhlIHN0YW5kYWxvbmUgInJl YWRfb29iIiBob29rLCB5b3UgaGF2ZSB0byBzZW5kIGEgUkVBRDAgY29tbWFuZCwKYnV0IG5vdCB3 aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJpZyB3YXN0ZSBvZiB0 aW1lLgoKPiArCj4gIAlyZXR1cm4gYml0ZmxpcHM7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgbWVz b25fbmZjX3JlYWRfb29iX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAg ewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2VfcmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2Up Owo+ICsJcmV0dXJuIF9fbWVzb25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9w b2kpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFu ZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiAgewo+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3Bh Z2VfaHdlY2MobmFuZCwgTlVMTCwgMSwgcGFnZSk7Cj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfcmVh ZF9vb2IobmFuZCwgcGFnZSwgbmFuZC0+b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWVzb25fbmZjX3dyaXRlX29vYl9yYXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2Up Cj4gK3sKPiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwgbmFuZC0+ b29iX3BvaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX29vYihzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiArewo+ICsJcmV0dXJuIF9fbWVzb25fbmZj X3dyaXRlX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKCkRvIHdlIHJlYWxseSBuZWVk IHRoZXNlIGluZGlyZWN0aW9ucz8KCj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIG1lc29uX25mY19p c19idWZmZXJfZG1hX3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+IEBAIC05ODIsNyArMTA4Niw3 IEBAIHN0YXRpYyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg aW50IHNlY3Rpb24sCj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gIAkJcmV0 dXJuIC1FUkFOR0U7Cj4gIAo+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9uICog KDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZDX1VTRVJf QllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOwoKVGhlICgpIGFyZSBzdGls bCBuZWVkZWQgYXJvdW5kIHRoZSAnKicKCj4gIAlvb2JyZWdpb24tPmxlbmd0aCA9IG5hbmQtPmVj Yy5ieXRlczsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtOTkyLDEyICsxMDk2LDE2IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0 aW9uLAo+ICAJCQkJc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCj4gIHsKPiAgCXN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJdTMyIG9vYl9ieXRl cyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5hbmQpOwo+ICAKPiAgCWlmIChzZWN0aW9uID49 IG5hbmQtPmVjYy5zdGVwcykKPiAgCQlyZXR1cm4gLUVSQU5HRTsKPiAgCj4gLQlvb2JyZWdpb24t Pm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5hbmQtPmVjYy5ieXRlcyk7Cj4gLQlvb2JyZWdpb24t Pmxlbmd0aCA9IDI7Cj4gKwkvKiBTcGxpdCByZXN0IG9mIE9PQiBhcmVhIChub3QgY292ZXJlZCBi eSBFQ0MgZW5naW5lKSBwZXIgZWFjaAo+ICsJICogRUNDIHNlY3Rpb24uIFRoaXMgd2lsbCBiZSBP T0IgZGF0YSBhdmFpbGFibGUgdG8gdXNlci4KPiArCSAqLwo+ICsJb29icmVnaW9uLT5vZmZzZXQg PSAoc2VjdGlvbiArIG5hbmQtPmVjYy5zdGVwcykgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4g Kwlvb2JyZWdpb24tPmxlbmd0aCA9IG9vYl9ieXRlcyAvIG5hbmQtPmVjYy5zdGVwczsKPiAgCj4g IAlyZXR1cm4gMDsKPiAgfQo+IEBAIC0xMTg0LDYgKzEyOTIsOSBAQCBzdGF0aWMgaW50IG1lc29u X25hbmRfYmNoX21vZGUoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCj4gIHN0YXRpYyB2b2lk IG1lc29uX25hbmRfZGV0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgewo+ICsJ c3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5h bmQpOwo+ICsKPiArCWtmcmVlKG1lc29uX2NoaXAtPm9vYl9idWYpOwo+ICAJbWVzb25fbmZjX2Zy ZWVfYnVmZmVyKG5hbmQpOwo+ICB9Cj4gIAo+IEBAIC0xMjI1LDkgKzEzMzYsOSBAQCBzdGF0aWMg aW50IG1lc29uX25hbmRfYXR0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPiAgCW5h bmQtPmVjYy5lbmdpbmVfdHlwZSA9IE5BTkRfRUNDX0VOR0lORV9UWVBFX09OX0hPU1Q7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9yYXc7Cj4gIAlu YW5kLT5lY2Mud3JpdGVfcGFnZSA9IG1lc29uX25mY193cml0ZV9wYWdlX2h3ZWNjOwo+IC0JbmFu ZC0+ZWNjLndyaXRlX29vYl9yYXcgPSBuYW5kX3dyaXRlX29vYl9zdGQ7Cj4gLQluYW5kLT5lY2Mu d3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwo+ICAKPiArCW5hbmQtPmVjYy53cml0ZV9v b2JfcmF3ID0gbWVzb25fbmZjX3dyaXRlX29vYl9yYXc7Cj4gKwluYW5kLT5lY2Mud3JpdGVfb29i ID0gbWVzb25fbmZjX3dyaXRlX29vYjsKCkFjdHVhbGx5IGlmIHlvdSBkZWZpbmUgdGhlIHJpZ2h0 IE9PQiBsYXlvdXRzLCBhcmUgdGhlc2UgcmVhbGx5IG5lZWRlZAo/PyBJIHdvdWxkIGV4cGVjdCB0 aGUgcmlnaHQgYnl0ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0CmltcGxlbWVudGF0 aW9uLiBJIHNlZSBub3RoaW5nIHNwZWNpZmljIGluIHlvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlv bj8KCj4gIAluYW5kLT5lY2MucmVhZF9wYWdlX3JhdyA9IG1lc29uX25mY19yZWFkX3BhZ2VfcmF3 Owo+ICAJbmFuZC0+ZWNjLnJlYWRfcGFnZSA9IG1lc29uX25mY19yZWFkX3BhZ2VfaHdlY2M7Cj4g IAluYW5kLT5lY2MucmVhZF9vb2JfcmF3ID0gbWVzb25fbmZjX3JlYWRfb29iX3JhdzsKPiBAQCAt MTIzNyw5ICsxMzQ4LDE2IEBAIHN0YXRpYyBpbnQgbWVzb25fbmFuZF9hdHRhY2hfY2hpcChzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kKQo+ICAJCWRldl9lcnIobmZjLT5kZXYsICIxNmJpdHMgYnVzIHdp ZHRoIG5vdCBzdXBwb3J0ZWQiKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiArCj4gKwlt ZXNvbl9jaGlwLT5vb2JfYnVmID0ga21hbGxvYyhuYW5kLT5lY2MuYnl0ZXMsIEdGUF9LRVJORUwp OwoKZGV2bV9rbWFsbG9jPwoKPiArCWlmICghbWVzb25fY2hpcC0+b29iX2J1ZikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gIAlyZXQgPSBtZXNvbl9jaGlwX2J1ZmZlcl9pbml0KG5hbmQpOwo+ IC0JaWYgKHJldCkKPiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVm KTsKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9CgoK VGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hbWxvZ2ljCg==