From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96B7AC33C9C for ; Fri, 15 Nov 2019 05:55:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6803B2073A for ; Fri, 15 Nov 2019 05:55:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="fgq2HbUm" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727615AbfKOFzR (ORCPT ); Fri, 15 Nov 2019 00:55:17 -0500 Received: from hqemgate16.nvidia.com ([216.228.121.65]:10740 "EHLO hqemgate16.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727476AbfKOFyC (ORCPT ); Fri, 15 Nov 2019 00:54:02 -0500 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 14 Nov 2019 21:53:46 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 14 Nov 2019 21:53:46 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 14 Nov 2019 21:53:46 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 15 Nov 2019 05:53:45 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Fri, 15 Nov 2019 05:53:45 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Thu, 14 Nov 2019 21:53:45 -0800 From: John Hubbard To: Andrew Morton CC: Al Viro , Alex Williamson , Benjamin Herrenschmidt , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Christoph Hellwig , Dan Williams , Daniel Vetter , Dave Chinner , David Airlie , "David S . Miller" , Ira Weiny , Jan Kara , Jason Gunthorpe , Jens Axboe , Jonathan Corbet , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Magnus Karlsson , Mauro Carvalho Chehab , Michael Ellerman , Michal Hocko , Mike Kravetz , Paul Mackerras , Shuah Khan , Vlastimil Babka , , , , , , , , , , , , , LKML , John Hubbard Subject: [PATCH v5 24/24] mm, tree-wide: rename put_user_page*() to unpin_user_page*() Date: Thu, 14 Nov 2019 21:53:40 -0800 Message-ID: <20191115055340.1825745-25-jhubbard@nvidia.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1573797226; bh=STzExVj+9tzBfJU2bAe+2a5wKbBXpDTeZdAEjVWwxYo=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Transfer-Encoding:Content-Type; b=fgq2HbUmLwZt8sMtmHStunjU2h2x48zs6ALgNOdkOca3A7EluDhjmi1kxykMiJZ2R uawnlW9ZH9+FFbXpSIzXECa/HYO9D1OZrD7eq6opLINmSnPE+FSHcSRLyeyD50bBOi DcF0GajCOlwRupOCe9dPxmZFS7Lemsm28diMyt+iI5iFiG8AMa09417uvpCBnGjslY SP4jinLKAYRud8zS7dF58YuAdmTJhhjPsbSYiqANVedXTEhDXDT7hgL6dqDKiGJJuY eaieXiOdzg1ikcvcOaoc5LbfMxrHc7dtbE1j8cRwSopUFEB2MMoNnVodPGol5t98sX U/uSBI6N6hITw== Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org In order to provide a clearer, more symmetric API for pinning and unpinning DMA pages. This way, pin_user_pages*() calls match up with unpin_user_pages*() calls, and the API is a lot closer to being self-explanatory. Signed-off-by: John Hubbard --- Documentation/core-api/pin_user_pages.rst | 2 +- arch/powerpc/mm/book3s64/iommu_api.c | 6 +-- drivers/gpu/drm/via/via_dmablit.c | 4 +- drivers/infiniband/core/umem.c | 2 +- drivers/infiniband/hw/hfi1/user_pages.c | 2 +- drivers/infiniband/hw/mthca/mthca_memfree.c | 6 +-- drivers/infiniband/hw/qib/qib_user_pages.c | 2 +- drivers/infiniband/hw/qib/qib_user_sdma.c | 6 +-- drivers/infiniband/hw/usnic/usnic_uiom.c | 2 +- drivers/infiniband/sw/siw/siw_mem.c | 2 +- drivers/media/v4l2-core/videobuf-dma-sg.c | 4 +- drivers/platform/goldfish/goldfish_pipe.c | 4 +- drivers/vfio/vfio_iommu_type1.c | 2 +- fs/io_uring.c | 4 +- include/linux/mm.h | 30 +++++++------- include/linux/mmzone.h | 2 +- mm/gup.c | 46 ++++++++++----------- mm/gup_benchmark.c | 2 +- mm/process_vm_access.c | 4 +- net/xdp/xdp_umem.c | 2 +- 20 files changed, 67 insertions(+), 67 deletions(-) diff --git a/Documentation/core-api/pin_user_pages.rst b/Documentation/core= -api/pin_user_pages.rst index baa288a44a77..6d93ef203561 100644 --- a/Documentation/core-api/pin_user_pages.rst +++ b/Documentation/core-api/pin_user_pages.rst @@ -220,7 +220,7 @@ since the system was booted, via two new /proc/vmstat e= ntries: :: /proc/vmstat/nr_foll_pin_requested =20 Those are both going to show zero, unless CONFIG_DEBUG_VM is set. This is -because there is a noticeable performance drop in put_user_page(), when th= ey +because there is a noticeable performance drop in unpin_user_page(), when = they are activated. =20 References diff --git a/arch/powerpc/mm/book3s64/iommu_api.c b/arch/powerpc/mm/book3s6= 4/iommu_api.c index 196383e8e5a9..dd7aa5a4f33c 100644 --- a/arch/powerpc/mm/book3s64/iommu_api.c +++ b/arch/powerpc/mm/book3s64/iommu_api.c @@ -168,7 +168,7 @@ static long mm_iommu_do_alloc(struct mm_struct *mm, uns= igned long ua, =20 free_exit: /* free the references taken */ - put_user_pages(mem->hpages, pinned); + unpin_user_pages(mem->hpages, pinned); =20 vfree(mem->hpas); kfree(mem); @@ -211,8 +211,8 @@ static void mm_iommu_unpin(struct mm_iommu_table_group_= mem_t *mem) if (!page) continue; =20 - put_user_pages_dirty_lock(&mem->hpages[i], 1, - MM_IOMMU_TABLE_GROUP_PAGE_DIRTY); + unpin_user_pages_dirty_lock(&mem->hpages[i], 1, + MM_IOMMU_TABLE_GROUP_PAGE_DIRTY); =20 mem->hpas[i] =3D 0; } diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dm= ablit.c index 37c5e572993a..719d036c9384 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c @@ -188,8 +188,8 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_= t *vsg) kfree(vsg->desc_pages); /* fall through */ case dr_via_pages_locked: - put_user_pages_dirty_lock(vsg->pages, vsg->num_pages, - (vsg->direction =3D=3D DMA_FROM_DEVICE)); + unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages, + (vsg->direction =3D=3D DMA_FROM_DEVICE)); /* fall through */ case dr_via_pages_alloc: vfree(vsg->pages); diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.= c index 2c287ced3439..119a147da904 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -54,7 +54,7 @@ static void __ib_umem_release(struct ib_device *dev, stru= ct ib_umem *umem, int d =20 for_each_sg_page(umem->sg_head.sgl, &sg_iter, umem->sg_nents, 0) { page =3D sg_page_iter_page(&sg_iter); - put_user_pages_dirty_lock(&page, 1, umem->writable && dirty); + unpin_user_pages_dirty_lock(&page, 1, umem->writable && dirty); } =20 sg_free_table(&umem->sg_head); diff --git a/drivers/infiniband/hw/hfi1/user_pages.c b/drivers/infiniband/h= w/hfi1/user_pages.c index 9a94761765c0..3b505006c0a6 100644 --- a/drivers/infiniband/hw/hfi1/user_pages.c +++ b/drivers/infiniband/hw/hfi1/user_pages.c @@ -118,7 +118,7 @@ int hfi1_acquire_user_pages(struct mm_struct *mm, unsig= ned long vaddr, size_t np void hfi1_release_user_pages(struct mm_struct *mm, struct page **p, size_t npages, bool dirty) { - put_user_pages_dirty_lock(p, npages, dirty); + unpin_user_pages_dirty_lock(p, npages, dirty); =20 if (mm) { /* during close after signal, mm can be NULL */ atomic64_sub(npages, &mm->pinned_vm); diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniba= nd/hw/mthca/mthca_memfree.c index 8269ab040c21..78a48aea3faf 100644 --- a/drivers/infiniband/hw/mthca/mthca_memfree.c +++ b/drivers/infiniband/hw/mthca/mthca_memfree.c @@ -482,7 +482,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mth= ca_uar *uar, =20 ret =3D pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); if (ret < 0) { - put_user_page(pages[0]); + unpin_user_page(pages[0]); goto out; } =20 @@ -490,7 +490,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mth= ca_uar *uar, mthca_uarc_virt(dev, uar, i)); if (ret) { pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); - put_user_page(sg_page(&db_tab->page[i].mem)); + unpin_user_page(sg_page(&db_tab->page[i].mem)); goto out; } =20 @@ -556,7 +556,7 @@ void mthca_cleanup_user_db_tab(struct mthca_dev *dev, s= truct mthca_uar *uar, if (db_tab->page[i].uvirt) { mthca_UNMAP_ICM(dev, mthca_uarc_virt(dev, uar, i), 1); pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); - put_user_page(sg_page(&db_tab->page[i].mem)); + unpin_user_page(sg_page(&db_tab->page[i].mem)); } } =20 diff --git a/drivers/infiniband/hw/qib/qib_user_pages.c b/drivers/infiniban= d/hw/qib/qib_user_pages.c index 7fc4b5f81fcd..342e3172ca40 100644 --- a/drivers/infiniband/hw/qib/qib_user_pages.c +++ b/drivers/infiniband/hw/qib/qib_user_pages.c @@ -40,7 +40,7 @@ static void __qib_release_user_pages(struct page **p, size_t num_pages, int dirty) { - put_user_pages_dirty_lock(p, num_pages, dirty); + unpin_user_pages_dirty_lock(p, num_pages, dirty); } =20 /** diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband= /hw/qib/qib_user_sdma.c index 1a3cc2957e3a..a67599b5a550 100644 --- a/drivers/infiniband/hw/qib/qib_user_sdma.c +++ b/drivers/infiniband/hw/qib/qib_user_sdma.c @@ -317,7 +317,7 @@ static int qib_user_sdma_page_to_frags(const struct qib= _devdata *dd, * the caller can ignore this page. */ if (put) { - put_user_page(page); + unpin_user_page(page); } else { /* coalesce case */ kunmap(page); @@ -631,7 +631,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *= dev, kunmap(pkt->addr[i].page); =20 if (pkt->addr[i].put_page) - put_user_page(pkt->addr[i].page); + unpin_user_page(pkt->addr[i].page); else __free_page(pkt->addr[i].page); } else if (pkt->addr[i].kvaddr) { @@ -706,7 +706,7 @@ static int qib_user_sdma_pin_pages(const struct qib_dev= data *dd, /* if error, return all pages not managed by pkt */ free_pages: while (i < j) - put_user_page(pages[i++]); + unpin_user_page(pages[i++]); =20 done: return ret; diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/= hw/usnic/usnic_uiom.c index 600896727d34..bd9f944b68fc 100644 --- a/drivers/infiniband/hw/usnic/usnic_uiom.c +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c @@ -75,7 +75,7 @@ static void usnic_uiom_put_pages(struct list_head *chunk_= list, int dirty) for_each_sg(chunk->page_list, sg, chunk->nents, i) { page =3D sg_page(sg); pa =3D sg_phys(sg); - put_user_pages_dirty_lock(&page, 1, dirty); + unpin_user_pages_dirty_lock(&page, 1, dirty); usnic_dbg("pa: %pa\n", &pa); } kfree(chunk); diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/si= w/siw_mem.c index e53b07dcfed5..e2061dc0b043 100644 --- a/drivers/infiniband/sw/siw/siw_mem.c +++ b/drivers/infiniband/sw/siw/siw_mem.c @@ -63,7 +63,7 @@ struct siw_mem *siw_mem_id2obj(struct siw_device *sdev, i= nt stag_index) static void siw_free_plist(struct siw_page_chunk *chunk, int num_pages, bool dirty) { - put_user_pages_dirty_lock(chunk->plist, num_pages, dirty); + unpin_user_pages_dirty_lock(chunk->plist, num_pages, dirty); } =20 void siw_umem_release(struct siw_umem *umem, bool dirty) diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2= -core/videobuf-dma-sg.c index 162a2633b1e3..13b65ed9e74c 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c @@ -349,8 +349,8 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma) BUG_ON(dma->sglen); =20 if (dma->pages) { - put_user_pages_dirty_lock(dma->pages, dma->nr_pages, - dma->direction =3D=3D DMA_FROM_DEVICE); + unpin_user_pages_dirty_lock(dma->pages, dma->nr_pages, + dma->direction =3D=3D DMA_FROM_DEVICE); kfree(dma->pages); dma->pages =3D NULL; } diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/g= oldfish/goldfish_pipe.c index 635a8bc1b480..bf523df2a90d 100644 --- a/drivers/platform/goldfish/goldfish_pipe.c +++ b/drivers/platform/goldfish/goldfish_pipe.c @@ -360,8 +360,8 @@ static int transfer_max_buffers(struct goldfish_pipe *p= ipe, =20 *consumed_size =3D pipe->command_buffer->rw_params.consumed_size; =20 - put_user_pages_dirty_lock(pipe->pages, pages_count, - !is_write && *consumed_size > 0); + unpin_user_pages_dirty_lock(pipe->pages, pages_count, + !is_write && *consumed_size > 0); =20 mutex_unlock(&pipe->lock); return 0; diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type= 1.c index 18aa36b56896..c48ac1567f14 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -328,7 +328,7 @@ static int put_pfn(unsigned long pfn, int prot) if (!is_invalid_reserved_pfn(pfn)) { struct page *page =3D pfn_to_page(pfn); =20 - put_user_pages_dirty_lock(&page, 1, prot & IOMMU_WRITE); + unpin_user_pages_dirty_lock(&page, 1, prot & IOMMU_WRITE); return 1; } return 0; diff --git a/fs/io_uring.c b/fs/io_uring.c index cff64bd00db9..75ce5b386ffd 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3312,7 +3312,7 @@ static int io_sqe_buffer_unregister(struct io_ring_ct= x *ctx) struct io_mapped_ubuf *imu =3D &ctx->user_bufs[i]; =20 for (j =3D 0; j < imu->nr_bvecs; j++) - put_user_page(imu->bvec[j].bv_page); + unpin_user_page(imu->bvec[j].bv_page); =20 if (ctx->account_mem) io_unaccount_mem(ctx->user, imu->nr_bvecs); @@ -3457,7 +3457,7 @@ static int io_sqe_buffer_register(struct io_ring_ctx = *ctx, void __user *arg, * release any pages we did get */ if (pret > 0) - put_user_pages(pages, pret); + unpin_user_pages(pages, pret); if (ctx->account_mem) io_unaccount_mem(ctx->user, nr_pages); kvfree(imu->bvec); diff --git a/include/linux/mm.h b/include/linux/mm.h index db872766480f..dc5fa3df826f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1080,18 +1080,18 @@ static inline void put_page(struct page *page) * made against the page. ("gup-pinned" is another term for the latter). * * With this scheme, get_user_pages() becomes special: such pages are mark= ed - * as distinct from normal pages. As such, the put_user_page() call (and i= ts + * as distinct from normal pages. As such, the unpin_user_page() call (and= its * variants) must be used in order to release gup-pinned pages. * * Choice of value: * * By making GUP_PIN_COUNTING_BIAS a power of two, debugging of page refer= ence - * counts with respect to get_user_pages() and put_user_page() becomes sim= pler, - * due to the fact that adding an even power of two to the page refcount h= as - * the effect of using only the upper N bits, for the code that counts up = using - * the bias value. This means that the lower bits are left for the exclusi= ve - * use of the original code that increments and decrements by one (or at l= east, - * by much smaller values than the bias value). + * counts with respect to get_user_pages() and unpin_user_page() becomes + * simpler, due to the fact that adding an even power of two to the page + * refcount has the effect of using only the upper N bits, for the code th= at + * counts up using the bias value. This means that the lower bits are left= for + * the exclusive use of the original code that increments and decrements b= y one + * (or at least, by much smaller values than the bias value). * * Of course, once the lower bits overflow into the upper bits (and this i= s * OK, because subtraction recovers the original values), then visual insp= ection @@ -1106,10 +1106,10 @@ static inline void put_page(struct page *page) */ #define GUP_PIN_COUNTING_BIAS (1UL << 10) =20 -void put_user_page(struct page *page); -void put_user_pages_dirty_lock(struct page **pages, unsigned long npages, - bool make_dirty); -void put_user_pages(struct page **pages, unsigned long npages); +void unpin_user_page(struct page *page); +void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages= , + bool make_dirty); +void unpin_user_pages(struct page **pages, unsigned long npages); =20 /** * page_dma_pinned() - report if a page is pinned for DMA. @@ -2660,7 +2660,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, #define FOLL_ANON 0x8000 /* don't do file mappings */ #define FOLL_LONGTERM 0x10000 /* mapping lifetime is indefinite: see below= */ #define FOLL_SPLIT_PMD 0x20000 /* split huge pmd before returning */ -#define FOLL_PIN 0x40000 /* pages must be released via put_user_page() */ +#define FOLL_PIN 0x40000 /* pages must be released via unpin_user_page */ =20 /* * FOLL_PIN and FOLL_LONGTERM may be used in various combinations with eac= h @@ -2695,7 +2695,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * Direct IO). This lets the filesystem know that some non-file-system ent= ity is * potentially changing the pages' data. In contrast to FOLL_GET (whose pa= ges * are released via put_page()), FOLL_PIN pages must be released, ultimate= ly, by - * a call to put_user_page(). + * a call to unpin_user_page(). * * FOLL_PIN is similar to FOLL_GET: both of these pin pages. They use diff= erent * and separate refcounting mechanisms, however, and that means that each = has @@ -2703,7 +2703,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * * FOLL_GET: get_user_pages*() to acquire, and put_page() to release. * - * FOLL_PIN: pin_user_pages*() to acquire, and put_user_pages to relea= se. + * FOLL_PIN: pin_user_pages*() to acquire, and unpin_user_pages to rel= ease. * * FOLL_PIN and FOLL_GET are mutually exclusive for a given function call. * (The underlying pages may experience both FOLL_GET-based and FOLL_PIN-b= ased @@ -2713,7 +2713,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * FOLL_PIN should be set internally by the pin_user_pages*() APIs, never * directly by the caller. That's in order to help avoid mismatches when * releasing pages: get_user_pages*() pages must be released via put_page(= ), - * while pin_user_pages*() pages must be released via put_user_page(). + * while pin_user_pages*() pages must be released via unpin_user_page(). * * Please see Documentation/vm/pin_user_pages.rst for more information. */ diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 0485cba38d23..d66c1fb9d45e 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -245,7 +245,7 @@ enum node_stat_item { NR_WRITTEN, /* page writings since bootup */ NR_KERNEL_MISC_RECLAIMABLE, /* reclaimable non-slab kernel pages */ NR_FOLL_PIN_REQUESTED, /* via: pin_user_page(), gup flag: FOLL_PIN */ - NR_FOLL_PIN_RETURNED, /* pages returned via put_user_page() */ + NR_FOLL_PIN_RETURNED, /* pages returned via unpin_user_page() */ NR_VM_NODE_STAT_ITEMS }; =20 diff --git a/mm/gup.c b/mm/gup.c index 783cc5f23c79..9cbb72399182 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -110,15 +110,15 @@ static bool __put_devmap_managed_user_page(struct pag= e *page) #endif /* CONFIG_DEV_PAGEMAP_OPS */ =20 /** - * put_user_page() - release a dma-pinned page + * unpin_user_page() - release a dma-pinned page * @page: pointer to page to be released * * Pages that were pinned via pin_user_pages*() must be released via eithe= r - * put_user_page(), or one of the put_user_pages*() routines. This is so t= hat - * such pages can be separately tracked and uniquely handled. In particula= r, - * interactions with RDMA and filesystems need special handling. + * unpin_user_page(), or one of the unpin_user_pages*() routines. This is = so + * that such pages can be separately tracked and uniquely handled. In + * particular, interactions with RDMA and filesystems need special handlin= g. */ -void put_user_page(struct page *page) +void unpin_user_page(struct page *page) { page =3D compound_head(page); =20 @@ -136,10 +136,10 @@ void put_user_page(struct page *page) =20 __update_proc_vmstat(page, NR_FOLL_PIN_RETURNED, 1); } -EXPORT_SYMBOL(put_user_page); +EXPORT_SYMBOL(unpin_user_page); =20 /** - * put_user_pages_dirty_lock() - release and optionally dirty gup-pinned p= ages + * unpin_user_pages_dirty_lock() - release and optionally dirty gup-pinned= pages * @pages: array of pages to be maybe marked dirty, and definitely releas= ed. * @npages: number of pages in the @pages array. * @make_dirty: whether to mark the pages dirty @@ -149,19 +149,19 @@ EXPORT_SYMBOL(put_user_page); * * For each page in the @pages array, make that page (or its head page, if= a * compound page) dirty, if @make_dirty is true, and if the page was previ= ously - * listed as clean. In any case, releases all pages using put_user_page(), - * possibly via put_user_pages(), for the non-dirty case. + * listed as clean. In any case, releases all pages using unpin_user_page(= ), + * possibly via unpin_user_pages(), for the non-dirty case. * - * Please see the put_user_page() documentation for details. + * Please see the unpin_user_page() documentation for details. * * set_page_dirty_lock() is used internally. If instead, set_page_dirty() = is * required, then the caller should a) verify that this is really correct, * because _lock() is usually required, and b) hand code it: - * set_page_dirty_lock(), put_user_page(). + * set_page_dirty_lock(), unpin_user_page(). * */ -void put_user_pages_dirty_lock(struct page **pages, unsigned long npages, - bool make_dirty) +void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages= , + bool make_dirty) { unsigned long index; =20 @@ -172,7 +172,7 @@ void put_user_pages_dirty_lock(struct page **pages, uns= igned long npages, */ =20 if (!make_dirty) { - put_user_pages(pages, npages); + unpin_user_pages(pages, npages); return; } =20 @@ -200,21 +200,21 @@ void put_user_pages_dirty_lock(struct page **pages, u= nsigned long npages, */ if (!PageDirty(page)) set_page_dirty_lock(page); - put_user_page(page); + unpin_user_page(page); } } -EXPORT_SYMBOL(put_user_pages_dirty_lock); +EXPORT_SYMBOL(unpin_user_pages_dirty_lock); =20 /** - * put_user_pages() - release an array of gup-pinned pages. + * unpin_user_pages() - release an array of gup-pinned pages. * @pages: array of pages to be marked dirty and released. * @npages: number of pages in the @pages array. * - * For each page in the @pages array, release the page using put_user_page= (). + * For each page in the @pages array, release the page using unpin_user_pa= ge(). * - * Please see the put_user_page() documentation for details. + * Please see the unpin_user_page() documentation for details. */ -void put_user_pages(struct page **pages, unsigned long npages) +void unpin_user_pages(struct page **pages, unsigned long npages) { unsigned long index; =20 @@ -224,9 +224,9 @@ void put_user_pages(struct page **pages, unsigned long = npages) * single operation to the head page should suffice. */ for (index =3D 0; index < npages; index++) - put_user_page(pages[index]); + unpin_user_page(pages[index]); } -EXPORT_SYMBOL(put_user_pages); +EXPORT_SYMBOL(unpin_user_pages); =20 #ifdef CONFIG_MMU static struct page *no_page_table(struct vm_area_struct *vma, @@ -1953,7 +1953,7 @@ static void __maybe_unused undo_dev_pagemap(int *nr, = int nr_start, =20 ClearPageReferenced(page); if (flags & FOLL_PIN) - put_user_page(page); + unpin_user_page(page); else put_page(page); } diff --git a/mm/gup_benchmark.c b/mm/gup_benchmark.c index 1ac089ad815f..76d32db48af8 100644 --- a/mm/gup_benchmark.c +++ b/mm/gup_benchmark.c @@ -35,7 +35,7 @@ static void put_back_pages(int cmd, struct page **pages, = unsigned long nr_pages) =20 case PIN_FAST_BENCHMARK: case PIN_BENCHMARK: - put_user_pages(pages, nr_pages); + unpin_user_pages(pages, nr_pages); break; } } diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c index fd20ab675b85..de41e830cdac 100644 --- a/mm/process_vm_access.c +++ b/mm/process_vm_access.c @@ -126,8 +126,8 @@ static int process_vm_rw_single_vec(unsigned long addr, pa +=3D pinned_pages * PAGE_SIZE; =20 /* If vm_write is set, the pages need to be made dirty: */ - put_user_pages_dirty_lock(process_pages, pinned_pages, - vm_write); + unpin_user_pages_dirty_lock(process_pages, pinned_pages, + vm_write); } =20 return rc; diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c index d071003b5e76..ac182c38f7b0 100644 --- a/net/xdp/xdp_umem.c +++ b/net/xdp/xdp_umem.c @@ -212,7 +212,7 @@ static int xdp_umem_map_pages(struct xdp_umem *umem) =20 static void xdp_umem_unpin_pages(struct xdp_umem *umem) { - put_user_pages_dirty_lock(umem->pgs, umem->npgs, true); + unpin_user_pages_dirty_lock(umem->pgs, umem->npgs, true); =20 kfree(umem->pgs); umem->pgs =3D NULL; --=20 2.24.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41218C432C3 for ; Fri, 15 Nov 2019 06:34:00 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B8F95206D4 for ; Fri, 15 Nov 2019 06:33:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="fgq2HbUm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B8F95206D4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 47DpTd5cH9zF4Pf for ; Fri, 15 Nov 2019 17:33:57 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nvidia.com (client-ip=216.228.121.65; helo=hqemgate16.nvidia.com; envelope-from=jhubbard@nvidia.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=nvidia.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=nvidia.com header.i=@nvidia.com header.b="fgq2HbUm"; dkim-atps=neutral Received: from hqemgate16.nvidia.com (hqemgate16.nvidia.com [216.228.121.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 47Dnbf11VqzF7HD for ; Fri, 15 Nov 2019 16:54:05 +1100 (AEDT) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 14 Nov 2019 21:53:46 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 14 Nov 2019 21:53:46 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 14 Nov 2019 21:53:46 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 15 Nov 2019 05:53:45 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Fri, 15 Nov 2019 05:53:45 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7, 5, 8, 10121) id ; Thu, 14 Nov 2019 21:53:45 -0800 From: John Hubbard To: Andrew Morton Subject: [PATCH v5 24/24] mm, tree-wide: rename put_user_page*() to unpin_user_page*() Date: Thu, 14 Nov 2019 21:53:40 -0800 Message-ID: <20191115055340.1825745-25-jhubbard@nvidia.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1573797226; bh=STzExVj+9tzBfJU2bAe+2a5wKbBXpDTeZdAEjVWwxYo=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Transfer-Encoding:Content-Type; b=fgq2HbUmLwZt8sMtmHStunjU2h2x48zs6ALgNOdkOca3A7EluDhjmi1kxykMiJZ2R uawnlW9ZH9+FFbXpSIzXECa/HYO9D1OZrD7eq6opLINmSnPE+FSHcSRLyeyD50bBOi DcF0GajCOlwRupOCe9dPxmZFS7Lemsm28diMyt+iI5iFiG8AMa09417uvpCBnGjslY SP4jinLKAYRud8zS7dF58YuAdmTJhhjPsbSYiqANVedXTEhDXDT7hgL6dqDKiGJJuY eaieXiOdzg1ikcvcOaoc5LbfMxrHc7dtbE1j8cRwSopUFEB2MMoNnVodPGol5t98sX U/uSBI6N6hITw== X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michal Hocko , Jan Kara , kvm@vger.kernel.org, linux-doc@vger.kernel.org, David Airlie , Dave Chinner , dri-devel@lists.freedesktop.org, LKML , linux-mm@kvack.org, Paul Mackerras , linux-kselftest@vger.kernel.org, Ira Weiny , Jonathan Corbet , linux-rdma@vger.kernel.org, Christoph Hellwig , Jason Gunthorpe , Vlastimil Babka , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-media@vger.kernel.org, Shuah Khan , John Hubbard , linux-block@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Al Viro , Dan Williams , Mauro Carvalho Chehab , Magnus Karlsson , Jens Axboe , netdev@vger.kernel.org, Alex Williamson , Daniel Vetter , linux-fsdevel@vger.kernel.org, bpf@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "David S . Miller" , Mike Kravetz Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" In order to provide a clearer, more symmetric API for pinning and unpinning DMA pages. This way, pin_user_pages*() calls match up with unpin_user_pages*() calls, and the API is a lot closer to being self-explanatory. Signed-off-by: John Hubbard --- Documentation/core-api/pin_user_pages.rst | 2 +- arch/powerpc/mm/book3s64/iommu_api.c | 6 +-- drivers/gpu/drm/via/via_dmablit.c | 4 +- drivers/infiniband/core/umem.c | 2 +- drivers/infiniband/hw/hfi1/user_pages.c | 2 +- drivers/infiniband/hw/mthca/mthca_memfree.c | 6 +-- drivers/infiniband/hw/qib/qib_user_pages.c | 2 +- drivers/infiniband/hw/qib/qib_user_sdma.c | 6 +-- drivers/infiniband/hw/usnic/usnic_uiom.c | 2 +- drivers/infiniband/sw/siw/siw_mem.c | 2 +- drivers/media/v4l2-core/videobuf-dma-sg.c | 4 +- drivers/platform/goldfish/goldfish_pipe.c | 4 +- drivers/vfio/vfio_iommu_type1.c | 2 +- fs/io_uring.c | 4 +- include/linux/mm.h | 30 +++++++------- include/linux/mmzone.h | 2 +- mm/gup.c | 46 ++++++++++----------- mm/gup_benchmark.c | 2 +- mm/process_vm_access.c | 4 +- net/xdp/xdp_umem.c | 2 +- 20 files changed, 67 insertions(+), 67 deletions(-) diff --git a/Documentation/core-api/pin_user_pages.rst b/Documentation/core= -api/pin_user_pages.rst index baa288a44a77..6d93ef203561 100644 --- a/Documentation/core-api/pin_user_pages.rst +++ b/Documentation/core-api/pin_user_pages.rst @@ -220,7 +220,7 @@ since the system was booted, via two new /proc/vmstat e= ntries: :: /proc/vmstat/nr_foll_pin_requested =20 Those are both going to show zero, unless CONFIG_DEBUG_VM is set. This is -because there is a noticeable performance drop in put_user_page(), when th= ey +because there is a noticeable performance drop in unpin_user_page(), when = they are activated. =20 References diff --git a/arch/powerpc/mm/book3s64/iommu_api.c b/arch/powerpc/mm/book3s6= 4/iommu_api.c index 196383e8e5a9..dd7aa5a4f33c 100644 --- a/arch/powerpc/mm/book3s64/iommu_api.c +++ b/arch/powerpc/mm/book3s64/iommu_api.c @@ -168,7 +168,7 @@ static long mm_iommu_do_alloc(struct mm_struct *mm, uns= igned long ua, =20 free_exit: /* free the references taken */ - put_user_pages(mem->hpages, pinned); + unpin_user_pages(mem->hpages, pinned); =20 vfree(mem->hpas); kfree(mem); @@ -211,8 +211,8 @@ static void mm_iommu_unpin(struct mm_iommu_table_group_= mem_t *mem) if (!page) continue; =20 - put_user_pages_dirty_lock(&mem->hpages[i], 1, - MM_IOMMU_TABLE_GROUP_PAGE_DIRTY); + unpin_user_pages_dirty_lock(&mem->hpages[i], 1, + MM_IOMMU_TABLE_GROUP_PAGE_DIRTY); =20 mem->hpas[i] =3D 0; } diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dm= ablit.c index 37c5e572993a..719d036c9384 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c @@ -188,8 +188,8 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_= t *vsg) kfree(vsg->desc_pages); /* fall through */ case dr_via_pages_locked: - put_user_pages_dirty_lock(vsg->pages, vsg->num_pages, - (vsg->direction =3D=3D DMA_FROM_DEVICE)); + unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages, + (vsg->direction =3D=3D DMA_FROM_DEVICE)); /* fall through */ case dr_via_pages_alloc: vfree(vsg->pages); diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.= c index 2c287ced3439..119a147da904 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -54,7 +54,7 @@ static void __ib_umem_release(struct ib_device *dev, stru= ct ib_umem *umem, int d =20 for_each_sg_page(umem->sg_head.sgl, &sg_iter, umem->sg_nents, 0) { page =3D sg_page_iter_page(&sg_iter); - put_user_pages_dirty_lock(&page, 1, umem->writable && dirty); + unpin_user_pages_dirty_lock(&page, 1, umem->writable && dirty); } =20 sg_free_table(&umem->sg_head); diff --git a/drivers/infiniband/hw/hfi1/user_pages.c b/drivers/infiniband/h= w/hfi1/user_pages.c index 9a94761765c0..3b505006c0a6 100644 --- a/drivers/infiniband/hw/hfi1/user_pages.c +++ b/drivers/infiniband/hw/hfi1/user_pages.c @@ -118,7 +118,7 @@ int hfi1_acquire_user_pages(struct mm_struct *mm, unsig= ned long vaddr, size_t np void hfi1_release_user_pages(struct mm_struct *mm, struct page **p, size_t npages, bool dirty) { - put_user_pages_dirty_lock(p, npages, dirty); + unpin_user_pages_dirty_lock(p, npages, dirty); =20 if (mm) { /* during close after signal, mm can be NULL */ atomic64_sub(npages, &mm->pinned_vm); diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniba= nd/hw/mthca/mthca_memfree.c index 8269ab040c21..78a48aea3faf 100644 --- a/drivers/infiniband/hw/mthca/mthca_memfree.c +++ b/drivers/infiniband/hw/mthca/mthca_memfree.c @@ -482,7 +482,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mth= ca_uar *uar, =20 ret =3D pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); if (ret < 0) { - put_user_page(pages[0]); + unpin_user_page(pages[0]); goto out; } =20 @@ -490,7 +490,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mth= ca_uar *uar, mthca_uarc_virt(dev, uar, i)); if (ret) { pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); - put_user_page(sg_page(&db_tab->page[i].mem)); + unpin_user_page(sg_page(&db_tab->page[i].mem)); goto out; } =20 @@ -556,7 +556,7 @@ void mthca_cleanup_user_db_tab(struct mthca_dev *dev, s= truct mthca_uar *uar, if (db_tab->page[i].uvirt) { mthca_UNMAP_ICM(dev, mthca_uarc_virt(dev, uar, i), 1); pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); - put_user_page(sg_page(&db_tab->page[i].mem)); + unpin_user_page(sg_page(&db_tab->page[i].mem)); } } =20 diff --git a/drivers/infiniband/hw/qib/qib_user_pages.c b/drivers/infiniban= d/hw/qib/qib_user_pages.c index 7fc4b5f81fcd..342e3172ca40 100644 --- a/drivers/infiniband/hw/qib/qib_user_pages.c +++ b/drivers/infiniband/hw/qib/qib_user_pages.c @@ -40,7 +40,7 @@ static void __qib_release_user_pages(struct page **p, size_t num_pages, int dirty) { - put_user_pages_dirty_lock(p, num_pages, dirty); + unpin_user_pages_dirty_lock(p, num_pages, dirty); } =20 /** diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband= /hw/qib/qib_user_sdma.c index 1a3cc2957e3a..a67599b5a550 100644 --- a/drivers/infiniband/hw/qib/qib_user_sdma.c +++ b/drivers/infiniband/hw/qib/qib_user_sdma.c @@ -317,7 +317,7 @@ static int qib_user_sdma_page_to_frags(const struct qib= _devdata *dd, * the caller can ignore this page. */ if (put) { - put_user_page(page); + unpin_user_page(page); } else { /* coalesce case */ kunmap(page); @@ -631,7 +631,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *= dev, kunmap(pkt->addr[i].page); =20 if (pkt->addr[i].put_page) - put_user_page(pkt->addr[i].page); + unpin_user_page(pkt->addr[i].page); else __free_page(pkt->addr[i].page); } else if (pkt->addr[i].kvaddr) { @@ -706,7 +706,7 @@ static int qib_user_sdma_pin_pages(const struct qib_dev= data *dd, /* if error, return all pages not managed by pkt */ free_pages: while (i < j) - put_user_page(pages[i++]); + unpin_user_page(pages[i++]); =20 done: return ret; diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/= hw/usnic/usnic_uiom.c index 600896727d34..bd9f944b68fc 100644 --- a/drivers/infiniband/hw/usnic/usnic_uiom.c +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c @@ -75,7 +75,7 @@ static void usnic_uiom_put_pages(struct list_head *chunk_= list, int dirty) for_each_sg(chunk->page_list, sg, chunk->nents, i) { page =3D sg_page(sg); pa =3D sg_phys(sg); - put_user_pages_dirty_lock(&page, 1, dirty); + unpin_user_pages_dirty_lock(&page, 1, dirty); usnic_dbg("pa: %pa\n", &pa); } kfree(chunk); diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/si= w/siw_mem.c index e53b07dcfed5..e2061dc0b043 100644 --- a/drivers/infiniband/sw/siw/siw_mem.c +++ b/drivers/infiniband/sw/siw/siw_mem.c @@ -63,7 +63,7 @@ struct siw_mem *siw_mem_id2obj(struct siw_device *sdev, i= nt stag_index) static void siw_free_plist(struct siw_page_chunk *chunk, int num_pages, bool dirty) { - put_user_pages_dirty_lock(chunk->plist, num_pages, dirty); + unpin_user_pages_dirty_lock(chunk->plist, num_pages, dirty); } =20 void siw_umem_release(struct siw_umem *umem, bool dirty) diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2= -core/videobuf-dma-sg.c index 162a2633b1e3..13b65ed9e74c 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c @@ -349,8 +349,8 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma) BUG_ON(dma->sglen); =20 if (dma->pages) { - put_user_pages_dirty_lock(dma->pages, dma->nr_pages, - dma->direction =3D=3D DMA_FROM_DEVICE); + unpin_user_pages_dirty_lock(dma->pages, dma->nr_pages, + dma->direction =3D=3D DMA_FROM_DEVICE); kfree(dma->pages); dma->pages =3D NULL; } diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/g= oldfish/goldfish_pipe.c index 635a8bc1b480..bf523df2a90d 100644 --- a/drivers/platform/goldfish/goldfish_pipe.c +++ b/drivers/platform/goldfish/goldfish_pipe.c @@ -360,8 +360,8 @@ static int transfer_max_buffers(struct goldfish_pipe *p= ipe, =20 *consumed_size =3D pipe->command_buffer->rw_params.consumed_size; =20 - put_user_pages_dirty_lock(pipe->pages, pages_count, - !is_write && *consumed_size > 0); + unpin_user_pages_dirty_lock(pipe->pages, pages_count, + !is_write && *consumed_size > 0); =20 mutex_unlock(&pipe->lock); return 0; diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type= 1.c index 18aa36b56896..c48ac1567f14 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -328,7 +328,7 @@ static int put_pfn(unsigned long pfn, int prot) if (!is_invalid_reserved_pfn(pfn)) { struct page *page =3D pfn_to_page(pfn); =20 - put_user_pages_dirty_lock(&page, 1, prot & IOMMU_WRITE); + unpin_user_pages_dirty_lock(&page, 1, prot & IOMMU_WRITE); return 1; } return 0; diff --git a/fs/io_uring.c b/fs/io_uring.c index cff64bd00db9..75ce5b386ffd 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3312,7 +3312,7 @@ static int io_sqe_buffer_unregister(struct io_ring_ct= x *ctx) struct io_mapped_ubuf *imu =3D &ctx->user_bufs[i]; =20 for (j =3D 0; j < imu->nr_bvecs; j++) - put_user_page(imu->bvec[j].bv_page); + unpin_user_page(imu->bvec[j].bv_page); =20 if (ctx->account_mem) io_unaccount_mem(ctx->user, imu->nr_bvecs); @@ -3457,7 +3457,7 @@ static int io_sqe_buffer_register(struct io_ring_ctx = *ctx, void __user *arg, * release any pages we did get */ if (pret > 0) - put_user_pages(pages, pret); + unpin_user_pages(pages, pret); if (ctx->account_mem) io_unaccount_mem(ctx->user, nr_pages); kvfree(imu->bvec); diff --git a/include/linux/mm.h b/include/linux/mm.h index db872766480f..dc5fa3df826f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1080,18 +1080,18 @@ static inline void put_page(struct page *page) * made against the page. ("gup-pinned" is another term for the latter). * * With this scheme, get_user_pages() becomes special: such pages are mark= ed - * as distinct from normal pages. As such, the put_user_page() call (and i= ts + * as distinct from normal pages. As such, the unpin_user_page() call (and= its * variants) must be used in order to release gup-pinned pages. * * Choice of value: * * By making GUP_PIN_COUNTING_BIAS a power of two, debugging of page refer= ence - * counts with respect to get_user_pages() and put_user_page() becomes sim= pler, - * due to the fact that adding an even power of two to the page refcount h= as - * the effect of using only the upper N bits, for the code that counts up = using - * the bias value. This means that the lower bits are left for the exclusi= ve - * use of the original code that increments and decrements by one (or at l= east, - * by much smaller values than the bias value). + * counts with respect to get_user_pages() and unpin_user_page() becomes + * simpler, due to the fact that adding an even power of two to the page + * refcount has the effect of using only the upper N bits, for the code th= at + * counts up using the bias value. This means that the lower bits are left= for + * the exclusive use of the original code that increments and decrements b= y one + * (or at least, by much smaller values than the bias value). * * Of course, once the lower bits overflow into the upper bits (and this i= s * OK, because subtraction recovers the original values), then visual insp= ection @@ -1106,10 +1106,10 @@ static inline void put_page(struct page *page) */ #define GUP_PIN_COUNTING_BIAS (1UL << 10) =20 -void put_user_page(struct page *page); -void put_user_pages_dirty_lock(struct page **pages, unsigned long npages, - bool make_dirty); -void put_user_pages(struct page **pages, unsigned long npages); +void unpin_user_page(struct page *page); +void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages= , + bool make_dirty); +void unpin_user_pages(struct page **pages, unsigned long npages); =20 /** * page_dma_pinned() - report if a page is pinned for DMA. @@ -2660,7 +2660,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, #define FOLL_ANON 0x8000 /* don't do file mappings */ #define FOLL_LONGTERM 0x10000 /* mapping lifetime is indefinite: see below= */ #define FOLL_SPLIT_PMD 0x20000 /* split huge pmd before returning */ -#define FOLL_PIN 0x40000 /* pages must be released via put_user_page() */ +#define FOLL_PIN 0x40000 /* pages must be released via unpin_user_page */ =20 /* * FOLL_PIN and FOLL_LONGTERM may be used in various combinations with eac= h @@ -2695,7 +2695,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * Direct IO). This lets the filesystem know that some non-file-system ent= ity is * potentially changing the pages' data. In contrast to FOLL_GET (whose pa= ges * are released via put_page()), FOLL_PIN pages must be released, ultimate= ly, by - * a call to put_user_page(). + * a call to unpin_user_page(). * * FOLL_PIN is similar to FOLL_GET: both of these pin pages. They use diff= erent * and separate refcounting mechanisms, however, and that means that each = has @@ -2703,7 +2703,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * * FOLL_GET: get_user_pages*() to acquire, and put_page() to release. * - * FOLL_PIN: pin_user_pages*() to acquire, and put_user_pages to relea= se. + * FOLL_PIN: pin_user_pages*() to acquire, and unpin_user_pages to rel= ease. * * FOLL_PIN and FOLL_GET are mutually exclusive for a given function call. * (The underlying pages may experience both FOLL_GET-based and FOLL_PIN-b= ased @@ -2713,7 +2713,7 @@ struct page *follow_page(struct vm_area_struct *vma, = unsigned long address, * FOLL_PIN should be set internally by the pin_user_pages*() APIs, never * directly by the caller. That's in order to help avoid mismatches when * releasing pages: get_user_pages*() pages must be released via put_page(= ), - * while pin_user_pages*() pages must be released via put_user_page(). + * while pin_user_pages*() pages must be released via unpin_user_page(). * * Please see Documentation/vm/pin_user_pages.rst for more information. */ diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 0485cba38d23..d66c1fb9d45e 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -245,7 +245,7 @@ enum node_stat_item { NR_WRITTEN, /* page writings since bootup */ NR_KERNEL_MISC_RECLAIMABLE, /* reclaimable non-slab kernel pages */ NR_FOLL_PIN_REQUESTED, /* via: pin_user_page(), gup flag: FOLL_PIN */ - NR_FOLL_PIN_RETURNED, /* pages returned via put_user_page() */ + NR_FOLL_PIN_RETURNED, /* pages returned via unpin_user_page() */ NR_VM_NODE_STAT_ITEMS }; =20 diff --git a/mm/gup.c b/mm/gup.c index 783cc5f23c79..9cbb72399182 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -110,15 +110,15 @@ static bool __put_devmap_managed_user_page(struct pag= e *page) #endif /* CONFIG_DEV_PAGEMAP_OPS */ =20 /** - * put_user_page() - release a dma-pinned page + * unpin_user_page() - release a dma-pinned page * @page: pointer to page to be released * * Pages that were pinned via pin_user_pages*() must be released via eithe= r - * put_user_page(), or one of the put_user_pages*() routines. This is so t= hat - * such pages can be separately tracked and uniquely handled. In particula= r, - * interactions with RDMA and filesystems need special handling. + * unpin_user_page(), or one of the unpin_user_pages*() routines. This is = so + * that such pages can be separately tracked and uniquely handled. In + * particular, interactions with RDMA and filesystems need special handlin= g. */ -void put_user_page(struct page *page) +void unpin_user_page(struct page *page) { page =3D compound_head(page); =20 @@ -136,10 +136,10 @@ void put_user_page(struct page *page) =20 __update_proc_vmstat(page, NR_FOLL_PIN_RETURNED, 1); } -EXPORT_SYMBOL(put_user_page); +EXPORT_SYMBOL(unpin_user_page); =20 /** - * put_user_pages_dirty_lock() - release and optionally dirty gup-pinned p= ages + * unpin_user_pages_dirty_lock() - release and optionally dirty gup-pinned= pages * @pages: array of pages to be maybe marked dirty, and definitely releas= ed. * @npages: number of pages in the @pages array. * @make_dirty: whether to mark the pages dirty @@ -149,19 +149,19 @@ EXPORT_SYMBOL(put_user_page); * * For each page in the @pages array, make that page (or its head page, if= a * compound page) dirty, if @make_dirty is true, and if the page was previ= ously - * listed as clean. In any case, releases all pages using put_user_page(), - * possibly via put_user_pages(), for the non-dirty case. + * listed as clean. In any case, releases all pages using unpin_user_page(= ), + * possibly via unpin_user_pages(), for the non-dirty case. * - * Please see the put_user_page() documentation for details. + * Please see the unpin_user_page() documentation for details. * * set_page_dirty_lock() is used internally. If instead, set_page_dirty() = is * required, then the caller should a) verify that this is really correct, * because _lock() is usually required, and b) hand code it: - * set_page_dirty_lock(), put_user_page(). + * set_page_dirty_lock(), unpin_user_page(). * */ -void put_user_pages_dirty_lock(struct page **pages, unsigned long npages, - bool make_dirty) +void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages= , + bool make_dirty) { unsigned long index; =20 @@ -172,7 +172,7 @@ void put_user_pages_dirty_lock(struct page **pages, uns= igned long npages, */ =20 if (!make_dirty) { - put_user_pages(pages, npages); + unpin_user_pages(pages, npages); return; } =20 @@ -200,21 +200,21 @@ void put_user_pages_dirty_lock(struct page **pages, u= nsigned long npages, */ if (!PageDirty(page)) set_page_dirty_lock(page); - put_user_page(page); + unpin_user_page(page); } } -EXPORT_SYMBOL(put_user_pages_dirty_lock); +EXPORT_SYMBOL(unpin_user_pages_dirty_lock); =20 /** - * put_user_pages() - release an array of gup-pinned pages. + * unpin_user_pages() - release an array of gup-pinned pages. * @pages: array of pages to be marked dirty and released. * @npages: number of pages in the @pages array. * - * For each page in the @pages array, release the page using put_user_page= (). + * For each page in the @pages array, release the page using unpin_user_pa= ge(). * - * Please see the put_user_page() documentation for details. + * Please see the unpin_user_page() documentation for details. */ -void put_user_pages(struct page **pages, unsigned long npages) +void unpin_user_pages(struct page **pages, unsigned long npages) { unsigned long index; =20 @@ -224,9 +224,9 @@ void put_user_pages(struct page **pages, unsigned long = npages) * single operation to the head page should suffice. */ for (index =3D 0; index < npages; index++) - put_user_page(pages[index]); + unpin_user_page(pages[index]); } -EXPORT_SYMBOL(put_user_pages); +EXPORT_SYMBOL(unpin_user_pages); =20 #ifdef CONFIG_MMU static struct page *no_page_table(struct vm_area_struct *vma, @@ -1953,7 +1953,7 @@ static void __maybe_unused undo_dev_pagemap(int *nr, = int nr_start, =20 ClearPageReferenced(page); if (flags & FOLL_PIN) - put_user_page(page); + unpin_user_page(page); else put_page(page); } diff --git a/mm/gup_benchmark.c b/mm/gup_benchmark.c index 1ac089ad815f..76d32db48af8 100644 --- a/mm/gup_benchmark.c +++ b/mm/gup_benchmark.c @@ -35,7 +35,7 @@ static void put_back_pages(int cmd, struct page **pages, = unsigned long nr_pages) =20 case PIN_FAST_BENCHMARK: case PIN_BENCHMARK: - put_user_pages(pages, nr_pages); + unpin_user_pages(pages, nr_pages); break; } } diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c index fd20ab675b85..de41e830cdac 100644 --- a/mm/process_vm_access.c +++ b/mm/process_vm_access.c @@ -126,8 +126,8 @@ static int process_vm_rw_single_vec(unsigned long addr, pa +=3D pinned_pages * PAGE_SIZE; =20 /* If vm_write is set, the pages need to be made dirty: */ - put_user_pages_dirty_lock(process_pages, pinned_pages, - vm_write); + unpin_user_pages_dirty_lock(process_pages, pinned_pages, + vm_write); } =20 return rc; diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c index d071003b5e76..ac182c38f7b0 100644 --- a/net/xdp/xdp_umem.c +++ b/net/xdp/xdp_umem.c @@ -212,7 +212,7 @@ static int xdp_umem_map_pages(struct xdp_umem *umem) =20 static void xdp_umem_unpin_pages(struct xdp_umem *umem) { - put_user_pages_dirty_lock(umem->pgs, umem->npgs, true); + unpin_user_pages_dirty_lock(umem->pgs, umem->npgs, true); =20 kfree(umem->pgs); umem->pgs =3D NULL; --=20 2.24.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Hubbard Subject: [PATCH v5 24/24] mm, tree-wide: rename put_user_page*() to unpin_user_page*() Date: Thu, 14 Nov 2019 21:53:40 -0800 Message-ID: <20191115055340.1825745-25-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from hqemgate16.nvidia.com (hqemgate16.nvidia.com [216.228.121.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id DAA616E17C for ; Fri, 15 Nov 2019 05:53:52 +0000 (UTC) In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrew Morton Cc: Michal Hocko , Jan Kara , kvm@vger.kernel.org, linux-doc@vger.kernel.org, David Airlie , Dave Chinner , dri-devel@lists.freedesktop.org, LKML , linux-mm@kvack.org, Paul Mackerras , linux-kselftest@vger.kernel.org, Ira Weiny , Jonathan Corbet , linux-rdma@vger.kernel.org, Michael Ellerman , Christoph Hellwig , Jason Gunthorpe , Vlastimil Babka , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-media@vger.kernel.org, Shuah Khan , John Hubbard , linux-block@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Al Viro , Dan Williams List-Id: dri-devel@lists.freedesktop.org SW4gb3JkZXIgdG8gcHJvdmlkZSBhIGNsZWFyZXIsIG1vcmUgc3ltbWV0cmljIEFQSSBmb3IgcGlu bmluZwphbmQgdW5waW5uaW5nIERNQSBwYWdlcy4gVGhpcyB3YXksIHBpbl91c2VyX3BhZ2VzKigp IGNhbGxzCm1hdGNoIHVwIHdpdGggdW5waW5fdXNlcl9wYWdlcyooKSBjYWxscywgYW5kIHRoZSBB UEkgaXMgYSBsb3QKY2xvc2VyIHRvIGJlaW5nIHNlbGYtZXhwbGFuYXRvcnkuCgpTaWduZWQtb2Zm LWJ5OiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlv bi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgICB8ICAyICstCiBhcmNoL3Bvd2VycGMvbW0v Ym9vazNzNjQvaW9tbXVfYXBpLmMgICAgICAgIHwgIDYgKy0tCiBkcml2ZXJzL2dwdS9kcm0vdmlh L3ZpYV9kbWFibGl0LmMgICAgICAgICAgIHwgIDQgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9jb3Jl L3VtZW0uYyAgICAgICAgICAgICAgfCAgMiArLQogZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEv dXNlcl9wYWdlcy5jICAgICB8ICAyICstCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRo Y2FfbWVtZnJlZS5jIHwgIDYgKy0tCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91c2Vy X3BhZ2VzLmMgIHwgIDIgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2Rt YS5jICAgfCAgNiArLS0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY191aW9tLmMg ICAgfCAgMiArLQogZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfbWVtLmMgICAgICAgICB8 ICAyICstCiBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cuYyAgIHwgIDQg Ky0KIGRyaXZlcnMvcGxhdGZvcm0vZ29sZGZpc2gvZ29sZGZpc2hfcGlwZS5jICAgfCAgNCArLQog ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICAgICAgICB8ICAyICstCiBmcy9p b191cmluZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0KIGluY2x1ZGUv bGludXgvbW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMCArKysrKysrLS0tLS0tLQog aW5jbHVkZS9saW51eC9tbXpvbmUuaCAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBtbS9n dXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDYgKysrKysrKysrKy0t LS0tLS0tLS0tCiBtbS9ndXBfYmVuY2htYXJrLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDIgKy0KIG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMgICAgICAgICAgICAgICAgICAgICAgfCAgNCAr LQogbmV0L3hkcC94ZHBfdW1lbS5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiAy MCBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3Vt ZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGJhYTI4OGE0NGE3Ny4u NmQ5M2VmMjAzNTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2Vy X3BhZ2VzLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJz dApAQCAtMjIwLDcgKzIyMCw3IEBAIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3 byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CiAgICAgL3Byb2Mvdm1zdGF0L25yX2ZvbGxf cGluX3JlcXVlc3RlZAogCiBUaG9zZSBhcmUgYm90aCBnb2luZyB0byBzaG93IHplcm8sIHVubGVz cyBDT05GSUdfREVCVUdfVk0gaXMgc2V0LiBUaGlzIGlzCi1iZWNhdXNlIHRoZXJlIGlzIGEgbm90 aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHB1dF91c2VyX3BhZ2UoKSwgd2hlbiB0aGV5Citi ZWNhdXNlIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHVucGluX3Vz ZXJfcGFnZSgpLCB3aGVuIHRoZXkKIGFyZSBhY3RpdmF0ZWQuCiAKIFJlZmVyZW5jZXMKZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYyBiL2FyY2gvcG93ZXJw Yy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYwppbmRleCAxOTYzODNlOGU1YTkuLmRkN2FhNWE0ZjMz YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2lvbW11X2FwaS5jCisrKyBi L2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYwpAQCAtMTY4LDcgKzE2OCw3IEBA IHN0YXRpYyBsb25nIG1tX2lvbW11X2RvX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNp Z25lZCBsb25nIHVhLAogCiBmcmVlX2V4aXQ6CiAJLyogZnJlZSB0aGUgcmVmZXJlbmNlcyB0YWtl biAqLwotCXB1dF91c2VyX3BhZ2VzKG1lbS0+aHBhZ2VzLCBwaW5uZWQpOworCXVucGluX3VzZXJf cGFnZXMobWVtLT5ocGFnZXMsIHBpbm5lZCk7CiAKIAl2ZnJlZShtZW0tPmhwYXMpOwogCWtmcmVl KG1lbSk7CkBAIC0yMTEsOCArMjExLDggQEAgc3RhdGljIHZvaWQgbW1faW9tbXVfdW5waW4oc3Ry dWN0IG1tX2lvbW11X3RhYmxlX2dyb3VwX21lbV90ICptZW0pCiAJCWlmICghcGFnZSkKIAkJCWNv bnRpbnVlOwogCi0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJm1lbS0+aHBhZ2VzW2ldLCAx LAotCQkJCQkgIE1NX0lPTU1VX1RBQkxFX0dST1VQX1BBR0VfRElSVFkpOworCQl1bnBpbl91c2Vy X3BhZ2VzX2RpcnR5X2xvY2soJm1lbS0+aHBhZ2VzW2ldLCAxLAorCQkJCQkgICAgTU1fSU9NTVVf VEFCTEVfR1JPVVBfUEFHRV9ESVJUWSk7CiAKIAkJbWVtLT5ocGFzW2ldID0gMDsKIAl9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmMgYi9kcml2ZXJzL2dwdS9k cm0vdmlhL3ZpYV9kbWFibGl0LmMKaW5kZXggMzdjNWU1NzI5OTNhLi43MTlkMDM2YzkzODQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYWJsaXQuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmMKQEAgLTE4OCw4ICsxODgsOCBAQCB2aWFfZnJlZV9z Z19pbmZvKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkcm1fdmlhX3NnX2luZm9fdCAqdnNnKQogCQlr ZnJlZSh2c2ctPmRlc2NfcGFnZXMpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIGRyX3Zp YV9wYWdlc19sb2NrZWQ6Ci0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodnNnLT5wYWdlcywg dnNnLT5udW1fcGFnZXMsCi0JCQkJCSAgKHZzZy0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklD RSkpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodnNnLT5wYWdlcywgdnNnLT5udW1f cGFnZXMsCisJCQkJCSAgICh2c2ctPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpKTsKIAkJ LyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBkcl92aWFfcGFnZXNfYWxsb2M6CiAJCXZmcmVlKHZz Zy0+cGFnZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jIGIv ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCmluZGV4IDJjMjg3Y2VkMzQzOS4uMTE5YTE0 N2RhOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMKKysrIGIv ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyB2 b2lkIF9faWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3Vt ZW0gKnVtZW0sIGludCBkCiAKIAlmb3JfZWFjaF9zZ19wYWdlKHVtZW0tPnNnX2hlYWQuc2dsLCAm c2dfaXRlciwgdW1lbS0+c2dfbmVudHMsIDApIHsKIAkJcGFnZSA9IHNnX3BhZ2VfaXRlcl9wYWdl KCZzZ19pdGVyKTsKLQkJcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jaygmcGFnZSwgMSwgdW1lbS0+ d3JpdGFibGUgJiYgZGlydHkpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2Us IDEsIHVtZW0tPndyaXRhYmxlICYmIGRpcnR5KTsKIAl9CiAKIAlzZ19mcmVlX3RhYmxlKCZ1bWVt LT5zZ19oZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3VzZXJf cGFnZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3VzZXJfcGFnZXMuYwppbmRleCA5 YTk0NzYxNzY1YzAuLjNiNTA1MDA2YzBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L2hmaTEvdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3Vz ZXJfcGFnZXMuYwpAQCAtMTE4LDcgKzExOCw3IEBAIGludCBoZmkxX2FjcXVpcmVfdXNlcl9wYWdl cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc2l6ZV90IG5wCiB2 b2lkIGhmaTFfcmVsZWFzZV91c2VyX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qg cGFnZSAqKnAsCiAJCQkgICAgIHNpemVfdCBucGFnZXMsIGJvb2wgZGlydHkpCiB7Ci0JcHV0X3Vz ZXJfcGFnZXNfZGlydHlfbG9jayhwLCBucGFnZXMsIGRpcnR5KTsKKwl1bnBpbl91c2VyX3BhZ2Vz X2RpcnR5X2xvY2socCwgbnBhZ2VzLCBkaXJ0eSk7CiAKIAlpZiAobW0pIHsgLyogZHVyaW5nIGNs b3NlIGFmdGVyIHNpZ25hbCwgbW0gY2FuIGJlIE5VTEwgKi8KIAkJYXRvbWljNjRfc3ViKG5wYWdl cywgJm1tLT5waW5uZWRfdm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210 aGNhL210aGNhX21lbWZyZWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9t ZW1mcmVlLmMKaW5kZXggODI2OWFiMDQwYzIxLi43OGE0OGFlYTNmYWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKKysrIGIvZHJpdmVycy9p bmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwpAQCAtNDgyLDcgKzQ4Miw3IEBAIGlu dCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91 YXIgKnVhciwKIAogCXJldCA9IHBjaV9tYXBfc2coZGV2LT5wZGV2LCAmZGJfdGFiLT5wYWdlW2ld Lm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHV0X3VzZXJf cGFnZShwYWdlc1swXSk7CisJCXVucGluX3VzZXJfcGFnZShwYWdlc1swXSk7CiAJCWdvdG8gb3V0 OwogCX0KIApAQCAtNDkwLDcgKzQ5MCw3IEBAIGludCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3Qg bXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhciwKIAkJCQkgbXRoY2FfdWFyY192 aXJ0KGRldiwgdWFyLCBpKSk7CiAJaWYgKHJldCkgewogCQlwY2lfdW5tYXBfc2coZGV2LT5wZGV2 LCAmZGJfdGFiLT5wYWdlW2ldLm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXB1dF91c2Vy X3BhZ2Uoc2dfcGFnZSgmZGJfdGFiLT5wYWdlW2ldLm1lbSkpOworCQl1bnBpbl91c2VyX3BhZ2Uo c2dfcGFnZSgmZGJfdGFiLT5wYWdlW2ldLm1lbSkpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU1 Niw3ICs1NTYsNyBAQCB2b2lkIG10aGNhX2NsZWFudXBfdXNlcl9kYl90YWIoc3RydWN0IG10aGNh X2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIsCiAJCWlmIChkYl90YWItPnBhZ2VbaV0u dXZpcnQpIHsKIAkJCW10aGNhX1VOTUFQX0lDTShkZXYsIG10aGNhX3VhcmNfdmlydChkZXYsIHVh ciwgaSksIDEpOwogCQkJcGNpX3VubWFwX3NnKGRldi0+cGRldiwgJmRiX3RhYi0+cGFnZVtpXS5t ZW0sIDEsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJcHV0X3VzZXJfcGFnZShzZ19wYWdlKCZkYl90 YWItPnBhZ2VbaV0ubWVtKSk7CisJCQl1bnBpbl91c2VyX3BhZ2Uoc2dfcGFnZSgmZGJfdGFiLT5w YWdlW2ldLm1lbSkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQv aHcvcWliL3FpYl91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91 c2VyX3BhZ2VzLmMKaW5kZXggN2ZjNGI1ZjgxZmNkLi4zNDJlMzE3MmNhNDAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfcGFnZXMuYworKysgYi9kcml2ZXJz L2luZmluaWJhbmQvaHcvcWliL3FpYl91c2VyX3BhZ2VzLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHN0 YXRpYyB2b2lkIF9fcWliX3JlbGVhc2VfdXNlcl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnAsIHNpemVf dCBudW1fcGFnZXMsCiAJCQkJICAgICBpbnQgZGlydHkpCiB7Ci0JcHV0X3VzZXJfcGFnZXNfZGly dHlfbG9jayhwLCBudW1fcGFnZXMsIGRpcnR5KTsKKwl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xv Y2socCwgbnVtX3BhZ2VzLCBkaXJ0eSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9p bmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcv cWliL3FpYl91c2VyX3NkbWEuYwppbmRleCAxYTNjYzI5NTdlM2EuLmE2NzU5OWI1YTU1MCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKKysrIGIv ZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKQEAgLTMxNyw3ICszMTcs NyBAQCBzdGF0aWMgaW50IHFpYl91c2VyX3NkbWFfcGFnZV90b19mcmFncyhjb25zdCBzdHJ1Y3Qg cWliX2RldmRhdGEgKmRkLAogCQkgKiB0aGUgY2FsbGVyIGNhbiBpZ25vcmUgdGhpcyBwYWdlLgog CQkgKi8KIAkJaWYgKHB1dCkgewotCQkJcHV0X3VzZXJfcGFnZShwYWdlKTsKKwkJCXVucGluX3Vz ZXJfcGFnZShwYWdlKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGNvYWxlc2NlIGNhc2UgKi8KIAkJCWt1 bm1hcChwYWdlKTsKQEAgLTYzMSw3ICs2MzEsNyBAQCBzdGF0aWMgdm9pZCBxaWJfdXNlcl9zZG1h X2ZyZWVfcGt0X2ZyYWcoc3RydWN0IGRldmljZSAqZGV2LAogCQkJa3VubWFwKHBrdC0+YWRkcltp XS5wYWdlKTsKIAogCQlpZiAocGt0LT5hZGRyW2ldLnB1dF9wYWdlKQotCQkJcHV0X3VzZXJfcGFn ZShwa3QtPmFkZHJbaV0ucGFnZSk7CisJCQl1bnBpbl91c2VyX3BhZ2UocGt0LT5hZGRyW2ldLnBh Z2UpOwogCQllbHNlCiAJCQlfX2ZyZWVfcGFnZShwa3QtPmFkZHJbaV0ucGFnZSk7CiAJfSBlbHNl IGlmIChwa3QtPmFkZHJbaV0ua3ZhZGRyKSB7CkBAIC03MDYsNyArNzA2LDcgQEAgc3RhdGljIGlu dCBxaWJfdXNlcl9zZG1hX3Bpbl9wYWdlcyhjb25zdCBzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLAog CS8qIGlmIGVycm9yLCByZXR1cm4gYWxsIHBhZ2VzIG5vdCBtYW5hZ2VkIGJ5IHBrdCAqLwogZnJl ZV9wYWdlczoKIAl3aGlsZSAoaSA8IGopCi0JCXB1dF91c2VyX3BhZ2UocGFnZXNbaSsrXSk7CisJ CXVucGluX3VzZXJfcGFnZShwYWdlc1tpKytdKTsKIAogZG9uZToKIAlyZXR1cm4gcmV0OwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX3Vpb20uYyBiL2RyaXZl cnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY191aW9tLmMKaW5kZXggNjAwODk2NzI3ZDM0Li5i ZDlmOTQ0YjY4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25p Y191aW9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX3Vpb20uYwpA QCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCB1c25pY191aW9tX3B1dF9wYWdlcyhzdHJ1Y3Qg bGlzdF9oZWFkICpjaHVua19saXN0LCBpbnQgZGlydHkpCiAJCWZvcl9lYWNoX3NnKGNodW5rLT5w YWdlX2xpc3QsIHNnLCBjaHVuay0+bmVudHMsIGkpIHsKIAkJCXBhZ2UgPSBzZ19wYWdlKHNnKTsK IAkJCXBhID0gc2dfcGh5cyhzZyk7Ci0JCQlwdXRfdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZwYWdl LCAxLCBkaXJ0eSk7CisJCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2UsIDEsIGRp cnR5KTsKIAkJCXVzbmljX2RiZygicGE6ICVwYVxuIiwgJnBhKTsKIAkJfQogCQlrZnJlZShjaHVu ayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0uYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X21lbS5jCmluZGV4IGU1M2IwN2RjZmVkNS4uZTIw NjFkYzBiMDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0u YworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0uYwpAQCAtNjMsNyArNjMs NyBAQCBzdHJ1Y3Qgc2l3X21lbSAqc2l3X21lbV9pZDJvYmooc3RydWN0IHNpd19kZXZpY2UgKnNk ZXYsIGludCBzdGFnX2luZGV4KQogc3RhdGljIHZvaWQgc2l3X2ZyZWVfcGxpc3Qoc3RydWN0IHNp d19wYWdlX2NodW5rICpjaHVuaywgaW50IG51bV9wYWdlcywKIAkJCSAgIGJvb2wgZGlydHkpCiB7 Ci0JcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhjaHVuay0+cGxpc3QsIG51bV9wYWdlcywgZGly dHkpOworCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhjaHVuay0+cGxpc3QsIG51bV9wYWdl cywgZGlydHkpOwogfQogCiB2b2lkIHNpd191bWVtX3JlbGVhc2Uoc3RydWN0IHNpd191bWVtICp1 bWVtLCBib29sIGRpcnR5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlk ZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cu YwppbmRleCAxNjJhMjYzM2IxZTMuLjEzYjY1ZWQ5ZTc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9t ZWRpYS92NGwyLWNvcmUvdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92NGwy LWNvcmUvdmlkZW9idWYtZG1hLXNnLmMKQEAgLTM0OSw4ICszNDksOCBAQCBpbnQgdmlkZW9idWZf ZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQogCUJVR19PTihkbWEtPnNnbGVu KTsKIAogCWlmIChkbWEtPnBhZ2VzKSB7Ci0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soZG1h LT5wYWdlcywgZG1hLT5ucl9wYWdlcywKLQkJCQkJICBkbWEtPmRpcmVjdGlvbiA9PSBETUFfRlJP TV9ERVZJQ0UpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soZG1hLT5wYWdlcywgZG1h LT5ucl9wYWdlcywKKwkJCQkJICAgIGRtYS0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSk7 CiAJCWtmcmVlKGRtYS0+cGFnZXMpOwogCQlkbWEtPnBhZ2VzID0gTlVMTDsKIAl9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNoX3BpcGUuYyBiL2RyaXZlcnMv cGxhdGZvcm0vZ29sZGZpc2gvZ29sZGZpc2hfcGlwZS5jCmluZGV4IDYzNWE4YmMxYjQ4MC4uYmY1 MjNkZjJhOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNo X3BpcGUuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNoX3BpcGUuYwpA QCAtMzYwLDggKzM2MCw4IEBAIHN0YXRpYyBpbnQgdHJhbnNmZXJfbWF4X2J1ZmZlcnMoc3RydWN0 IGdvbGRmaXNoX3BpcGUgKnBpcGUsCiAKIAkqY29uc3VtZWRfc2l6ZSA9IHBpcGUtPmNvbW1hbmRf YnVmZmVyLT5yd19wYXJhbXMuY29uc3VtZWRfc2l6ZTsKIAotCXB1dF91c2VyX3BhZ2VzX2RpcnR5 X2xvY2socGlwZS0+cGFnZXMsIHBhZ2VzX2NvdW50LAotCQkJCSAgIWlzX3dyaXRlICYmICpjb25z dW1lZF9zaXplID4gMCk7CisJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKHBpcGUtPnBhZ2Vz LCBwYWdlc19jb3VudCwKKwkJCQkgICAgIWlzX3dyaXRlICYmICpjb25zdW1lZF9zaXplID4gMCk7 CiAKIAltdXRleF91bmxvY2soJnBpcGUtPmxvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11 X3R5cGUxLmMKaW5kZXggMThhYTM2YjU2ODk2Li5jNDhhYzE1NjdmMTQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMKKysrIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfdHlwZTEuYwpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBpbnQgcHV0X3Bmbih1bnNpZ25l ZCBsb25nIHBmbiwgaW50IHByb3QpCiAJaWYgKCFpc19pbnZhbGlkX3Jlc2VydmVkX3BmbihwZm4p KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlwdXRfdXNl cl9wYWdlc19kaXJ0eV9sb2NrKCZwYWdlLCAxLCBwcm90ICYgSU9NTVVfV1JJVEUpOworCQl1bnBp bl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2UsIDEsIHByb3QgJiBJT01NVV9XUklURSk7CiAJ CXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2lvX3VyaW5nLmMgYi9m cy9pb191cmluZy5jCmluZGV4IGNmZjY0YmQwMGRiOS4uNzVjZTViMzg2ZmZkIDEwMDY0NAotLS0g YS9mcy9pb191cmluZy5jCisrKyBiL2ZzL2lvX3VyaW5nLmMKQEAgLTMzMTIsNyArMzMxMiw3IEBA IHN0YXRpYyBpbnQgaW9fc3FlX2J1ZmZlcl91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAq Y3R4KQogCQlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9ICZjdHgtPnVzZXJfYnVmc1tpXTsK IAogCQlmb3IgKGogPSAwOyBqIDwgaW11LT5ucl9idmVjczsgaisrKQotCQkJcHV0X3VzZXJfcGFn ZShpbXUtPmJ2ZWNbal0uYnZfcGFnZSk7CisJCQl1bnBpbl91c2VyX3BhZ2UoaW11LT5idmVjW2pd LmJ2X3BhZ2UpOwogCiAJCWlmIChjdHgtPmFjY291bnRfbWVtKQogCQkJaW9fdW5hY2NvdW50X21l bShjdHgtPnVzZXIsIGltdS0+bnJfYnZlY3MpOwpAQCAtMzQ1Nyw3ICszNDU3LDcgQEAgc3RhdGlj IGludCBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lk IF9fdXNlciAqYXJnLAogCQkJICogcmVsZWFzZSBhbnkgcGFnZXMgd2UgZGlkIGdldAogCQkJICov CiAJCQlpZiAocHJldCA+IDApCi0JCQkJcHV0X3VzZXJfcGFnZXMocGFnZXMsIHByZXQpOworCQkJ CXVucGluX3VzZXJfcGFnZXMocGFnZXMsIHByZXQpOwogCQkJaWYgKGN0eC0+YWNjb3VudF9tZW0p CiAJCQkJaW9fdW5hY2NvdW50X21lbShjdHgtPnVzZXIsIG5yX3BhZ2VzKTsKIAkJCWt2ZnJlZShp bXUtPmJ2ZWMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51 eC9tbS5oCmluZGV4IGRiODcyNzY2NDgwZi4uZGM1ZmEzZGY4MjZmIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDgwLDE4ICsxMDgw LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAq IG1hZGUgYWdhaW5zdCB0aGUgcGFnZS4gKCJndXAtcGlubmVkIiBpcyBhbm90aGVyIHRlcm0gZm9y IHRoZSBsYXR0ZXIpLgogICoKICAqIFdpdGggdGhpcyBzY2hlbWUsIGdldF91c2VyX3BhZ2VzKCkg YmVjb21lcyBzcGVjaWFsOiBzdWNoIHBhZ2VzIGFyZSBtYXJrZWQKLSAqIGFzIGRpc3RpbmN0IGZy b20gbm9ybWFsIHBhZ2VzLiBBcyBzdWNoLCB0aGUgcHV0X3VzZXJfcGFnZSgpIGNhbGwgKGFuZCBp dHMKKyAqIGFzIGRpc3RpbmN0IGZyb20gbm9ybWFsIHBhZ2VzLiBBcyBzdWNoLCB0aGUgdW5waW5f dXNlcl9wYWdlKCkgY2FsbCAoYW5kIGl0cwogICogdmFyaWFudHMpIG11c3QgYmUgdXNlZCBpbiBv cmRlciB0byByZWxlYXNlIGd1cC1waW5uZWQgcGFnZXMuCiAgKgogICogQ2hvaWNlIG9mIHZhbHVl OgogICoKICAqIEJ5IG1ha2luZyBHVVBfUElOX0NPVU5USU5HX0JJQVMgYSBwb3dlciBvZiB0d28s IGRlYnVnZ2luZyBvZiBwYWdlIHJlZmVyZW5jZQotICogY291bnRzIHdpdGggcmVzcGVjdCB0byBn ZXRfdXNlcl9wYWdlcygpIGFuZCBwdXRfdXNlcl9wYWdlKCkgYmVjb21lcyBzaW1wbGVyLAotICog ZHVlIHRvIHRoZSBmYWN0IHRoYXQgYWRkaW5nIGFuIGV2ZW4gcG93ZXIgb2YgdHdvIHRvIHRoZSBw YWdlIHJlZmNvdW50IGhhcwotICogdGhlIGVmZmVjdCBvZiB1c2luZyBvbmx5IHRoZSB1cHBlciBO IGJpdHMsIGZvciB0aGUgY29kZSB0aGF0IGNvdW50cyB1cCB1c2luZwotICogdGhlIGJpYXMgdmFs dWUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbG93ZXIgYml0cyBhcmUgbGVmdCBmb3IgdGhlIGV4Y2x1 c2l2ZQotICogdXNlIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHRoYXQgaW5jcmVtZW50cyBhbmQgZGVj cmVtZW50cyBieSBvbmUgKG9yIGF0IGxlYXN0LAotICogYnkgbXVjaCBzbWFsbGVyIHZhbHVlcyB0 aGFuIHRoZSBiaWFzIHZhbHVlKS4KKyAqIGNvdW50cyB3aXRoIHJlc3BlY3QgdG8gZ2V0X3VzZXJf cGFnZXMoKSBhbmQgdW5waW5fdXNlcl9wYWdlKCkgYmVjb21lcworICogc2ltcGxlciwgZHVlIHRv IHRoZSBmYWN0IHRoYXQgYWRkaW5nIGFuIGV2ZW4gcG93ZXIgb2YgdHdvIHRvIHRoZSBwYWdlCisg KiByZWZjb3VudCBoYXMgdGhlIGVmZmVjdCBvZiB1c2luZyBvbmx5IHRoZSB1cHBlciBOIGJpdHMs IGZvciB0aGUgY29kZSB0aGF0CisgKiBjb3VudHMgdXAgdXNpbmcgdGhlIGJpYXMgdmFsdWUuIFRo aXMgbWVhbnMgdGhhdCB0aGUgbG93ZXIgYml0cyBhcmUgbGVmdCBmb3IKKyAqIHRoZSBleGNsdXNp dmUgdXNlIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHRoYXQgaW5jcmVtZW50cyBhbmQgZGVjcmVtZW50 cyBieSBvbmUKKyAqIChvciBhdCBsZWFzdCwgYnkgbXVjaCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRo ZSBiaWFzIHZhbHVlKS4KICAqCiAgKiBPZiBjb3Vyc2UsIG9uY2UgdGhlIGxvd2VyIGJpdHMgb3Zl cmZsb3cgaW50byB0aGUgdXBwZXIgYml0cyAoYW5kIHRoaXMgaXMKICAqIE9LLCBiZWNhdXNlIHN1 YnRyYWN0aW9uIHJlY292ZXJzIHRoZSBvcmlnaW5hbCB2YWx1ZXMpLCB0aGVuIHZpc3VhbCBpbnNw ZWN0aW9uCkBAIC0xMTA2LDEwICsxMTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGFn ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqLwogI2RlZmluZSBHVVBfUElOX0NPVU5USU5HX0JJQVMg KDFVTCA8PCAxMCkKIAotdm9pZCBwdXRfdXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLXZv aWQgcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25l ZCBsb25nIG5wYWdlcywKLQkJCSAgICAgICBib29sIG1ha2VfZGlydHkpOwotdm9pZCBwdXRfdXNl cl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7Cit2b2lk IHVucGluX3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIHVucGluX3VzZXJfcGFn ZXNfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcywK KwkJCQkgYm9vbCBtYWtlX2RpcnR5KTsKK3ZvaWQgdW5waW5fdXNlcl9wYWdlcyhzdHJ1Y3QgcGFn ZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiAKIC8qKgogICogcGFnZV9kbWFfcGlu bmVkKCkgLSByZXBvcnQgaWYgYSBwYWdlIGlzIHBpbm5lZCBmb3IgRE1BLgpAQCAtMjY2MCw3ICsy NjYwLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAjZGVmaW5lIEZPTExfQU5PTgkweDgwMDAJLyog ZG9uJ3QgZG8gZmlsZSBtYXBwaW5ncyAqLwogI2RlZmluZSBGT0xMX0xPTkdURVJNCTB4MTAwMDAJ LyogbWFwcGluZyBsaWZldGltZSBpcyBpbmRlZmluaXRlOiBzZWUgYmVsb3cgKi8KICNkZWZpbmUg Rk9MTF9TUExJVF9QTUQJMHgyMDAwMAkvKiBzcGxpdCBodWdlIHBtZCBiZWZvcmUgcmV0dXJuaW5n ICovCi0jZGVmaW5lIEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2 aWEgcHV0X3VzZXJfcGFnZSgpICovCisjZGVmaW5lIEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMg bXVzdCBiZSByZWxlYXNlZCB2aWEgdW5waW5fdXNlcl9wYWdlICovCiAKIC8qCiAgKiBGT0xMX1BJ TiBhbmQgRk9MTF9MT05HVEVSTSBtYXkgYmUgdXNlZCBpbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyB3 aXRoIGVhY2gKQEAgLTI2OTUsNyArMjY5NSw3IEBAIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogICogRGly ZWN0IElPKS4gVGhpcyBsZXRzIHRoZSBmaWxlc3lzdGVtIGtub3cgdGhhdCBzb21lIG5vbi1maWxl LXN5c3RlbSBlbnRpdHkgaXMKICAqIHBvdGVudGlhbGx5IGNoYW5naW5nIHRoZSBwYWdlcycgZGF0 YS4gSW4gY29udHJhc3QgdG8gRk9MTF9HRVQgKHdob3NlIHBhZ2VzCiAgKiBhcmUgcmVsZWFzZWQg dmlhIHB1dF9wYWdlKCkpLCBGT0xMX1BJTiBwYWdlcyBtdXN0IGJlIHJlbGVhc2VkLCB1bHRpbWF0 ZWx5LCBieQotICogYSBjYWxsIHRvIHB1dF91c2VyX3BhZ2UoKS4KKyAqIGEgY2FsbCB0byB1bnBp bl91c2VyX3BhZ2UoKS4KICAqCiAgKiBGT0xMX1BJTiBpcyBzaW1pbGFyIHRvIEZPTExfR0VUOiBi b3RoIG9mIHRoZXNlIHBpbiBwYWdlcy4gVGhleSB1c2UgZGlmZmVyZW50CiAgKiBhbmQgc2VwYXJh dGUgcmVmY291bnRpbmcgbWVjaGFuaXNtcywgaG93ZXZlciwgYW5kIHRoYXQgbWVhbnMgdGhhdCBl YWNoIGhhcwpAQCAtMjcwMyw3ICsyNzAzLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAgKgogICog ICAgIEZPTExfR0VUOiBnZXRfdXNlcl9wYWdlcyooKSB0byBhY3F1aXJlLCBhbmQgcHV0X3BhZ2Uo KSB0byByZWxlYXNlLgogICoKLSAqICAgICBGT0xMX1BJTjogcGluX3VzZXJfcGFnZXMqKCkgdG8g YWNxdWlyZSwgYW5kIHB1dF91c2VyX3BhZ2VzIHRvIHJlbGVhc2UuCisgKiAgICAgRk9MTF9QSU46 IHBpbl91c2VyX3BhZ2VzKigpIHRvIGFjcXVpcmUsIGFuZCB1bnBpbl91c2VyX3BhZ2VzIHRvIHJl bGVhc2UuCiAgKgogICogRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxseSBleGNsdXNp dmUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24gY2FsbC4KICAqIChUaGUgdW5kZXJseWluZyBwYWdlcyBt YXkgZXhwZXJpZW5jZSBib3RoIEZPTExfR0VULWJhc2VkIGFuZCBGT0xMX1BJTi1iYXNlZApAQCAt MjcxMyw3ICsyNzEzLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAgKiBGT0xMX1BJTiBzaG91bGQg YmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91c2VyX3BhZ2VzKigpIEFQSXMsIG5ldmVyCiAg KiBkaXJlY3RseSBieSB0aGUgY2FsbGVyLiBUaGF0J3MgaW4gb3JkZXIgdG8gaGVscCBhdm9pZCBt aXNtYXRjaGVzIHdoZW4KICAqIHJlbGVhc2luZyBwYWdlczogZ2V0X3VzZXJfcGFnZXMqKCkgcGFn ZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3BhZ2UoKSwKLSAqIHdoaWxlIHBpbl91c2VyX3Bh Z2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQgdmlhIHB1dF91c2VyX3BhZ2UoKS4KKyAqIHdo aWxlIHBpbl91c2VyX3BhZ2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQgdmlhIHVucGluX3Vz ZXJfcGFnZSgpLgogICoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9waW5fdXNlcl9w YWdlcy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDA0ODVjYmEzOGQy My4uZDY2YzFmYjlkNDVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBi L2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTI0NSw3ICsyNDUsNyBAQCBlbnVtIG5vZGVfc3Rh dF9pdGVtIHsKIAlOUl9XUklUVEVOLAkJLyogcGFnZSB3cml0aW5ncyBzaW5jZSBib290dXAgKi8K IAlOUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSwJLyogcmVjbGFpbWFibGUgbm9uLXNsYWIga2Vy bmVsIHBhZ2VzICovCiAJTlJfRk9MTF9QSU5fUkVRVUVTVEVELAkvKiB2aWE6IHBpbl91c2VyX3Bh Z2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovCi0JTlJfRk9MTF9QSU5fUkVUVVJORUQsCS8qIHBh Z2VzIHJldHVybmVkIHZpYSBwdXRfdXNlcl9wYWdlKCkgKi8KKwlOUl9GT0xMX1BJTl9SRVRVUk5F RCwJLyogcGFnZXMgcmV0dXJuZWQgdmlhIHVucGluX3VzZXJfcGFnZSgpICovCiAJTlJfVk1fTk9E RV9TVEFUX0lURU1TCiB9OwogCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4 IDc4M2NjNWYyM2M3OS4uOWNiYjcyMzk5MTgyIDEwMDY0NAotLS0gYS9tbS9ndXAuYworKysgYi9t bS9ndXAuYwpAQCAtMTEwLDE1ICsxMTAsMTUgQEAgc3RhdGljIGJvb2wgX19wdXRfZGV2bWFwX21h bmFnZWRfdXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogI2VuZGlmIC8qIENPTkZJR19ERVZf UEFHRU1BUF9PUFMgKi8KIAogLyoqCi0gKiBwdXRfdXNlcl9wYWdlKCkgLSByZWxlYXNlIGEgZG1h LXBpbm5lZCBwYWdlCisgKiB1bnBpbl91c2VyX3BhZ2UoKSAtIHJlbGVhc2UgYSBkbWEtcGlubmVk IHBhZ2UKICAqIEBwYWdlOiAgICAgICAgICAgIHBvaW50ZXIgdG8gcGFnZSB0byBiZSByZWxlYXNl ZAogICoKICAqIFBhZ2VzIHRoYXQgd2VyZSBwaW5uZWQgdmlhIHBpbl91c2VyX3BhZ2VzKigpIG11 c3QgYmUgcmVsZWFzZWQgdmlhIGVpdGhlcgotICogcHV0X3VzZXJfcGFnZSgpLCBvciBvbmUgb2Yg dGhlIHB1dF91c2VyX3BhZ2VzKigpIHJvdXRpbmVzLiBUaGlzIGlzIHNvIHRoYXQKLSAqIHN1Y2gg cGFnZXMgY2FuIGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQgdW5pcXVlbHkgaGFuZGxlZC4gSW4g cGFydGljdWxhciwKLSAqIGludGVyYWN0aW9ucyB3aXRoIFJETUEgYW5kIGZpbGVzeXN0ZW1zIG5l ZWQgc3BlY2lhbCBoYW5kbGluZy4KKyAqIHVucGluX3VzZXJfcGFnZSgpLCBvciBvbmUgb2YgdGhl IHVucGluX3VzZXJfcGFnZXMqKCkgcm91dGluZXMuIFRoaXMgaXMgc28KKyAqIHRoYXQgc3VjaCBw YWdlcyBjYW4gYmUgc2VwYXJhdGVseSB0cmFja2VkIGFuZCB1bmlxdWVseSBoYW5kbGVkLiBJbgor ICogcGFydGljdWxhciwgaW50ZXJhY3Rpb25zIHdpdGggUkRNQSBhbmQgZmlsZXN5c3RlbXMgbmVl ZCBzcGVjaWFsIGhhbmRsaW5nLgogICovCi12b2lkIHB1dF91c2VyX3BhZ2Uoc3RydWN0IHBhZ2Ug KnBhZ2UpCit2b2lkIHVucGluX3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlwYWdl ID0gY29tcG91bmRfaGVhZChwYWdlKTsKIApAQCAtMTM2LDEwICsxMzYsMTAgQEAgdm9pZCBwdXRf dXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCiAJX191cGRhdGVfcHJvY192bXN0YXQocGFn ZSwgTlJfRk9MTF9QSU5fUkVUVVJORUQsIDEpOwogfQotRVhQT1JUX1NZTUJPTChwdXRfdXNlcl9w YWdlKTsKK0VYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTsKIAogLyoqCi0gKiBwdXRfdXNl cl9wYWdlc19kaXJ0eV9sb2NrKCkgLSByZWxlYXNlIGFuZCBvcHRpb25hbGx5IGRpcnR5IGd1cC1w aW5uZWQgcGFnZXMKKyAqIHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygpIC0gcmVsZWFzZSBh bmQgb3B0aW9uYWxseSBkaXJ0eSBndXAtcGlubmVkIHBhZ2VzCiAgKiBAcGFnZXM6ICBhcnJheSBv ZiBwYWdlcyB0byBiZSBtYXliZSBtYXJrZWQgZGlydHksIGFuZCBkZWZpbml0ZWx5IHJlbGVhc2Vk LgogICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBAcGFnZXMgYXJyYXkuCiAgKiBA bWFrZV9kaXJ0eTogd2hldGhlciB0byBtYXJrIHRoZSBwYWdlcyBkaXJ0eQpAQCAtMTQ5LDE5ICsx NDksMTkgQEAgRVhQT1JUX1NZTUJPTChwdXRfdXNlcl9wYWdlKTsKICAqCiAgKiBGb3IgZWFjaCBw YWdlIGluIHRoZSBAcGFnZXMgYXJyYXksIG1ha2UgdGhhdCBwYWdlIChvciBpdHMgaGVhZCBwYWdl LCBpZiBhCiAgKiBjb21wb3VuZCBwYWdlKSBkaXJ0eSwgaWYgQG1ha2VfZGlydHkgaXMgdHJ1ZSwg YW5kIGlmIHRoZSBwYWdlIHdhcyBwcmV2aW91c2x5Ci0gKiBsaXN0ZWQgYXMgY2xlYW4uIEluIGFu eSBjYXNlLCByZWxlYXNlcyBhbGwgcGFnZXMgdXNpbmcgcHV0X3VzZXJfcGFnZSgpLAotICogcG9z c2libHkgdmlhIHB1dF91c2VyX3BhZ2VzKCksIGZvciB0aGUgbm9uLWRpcnR5IGNhc2UuCisgKiBs aXN0ZWQgYXMgY2xlYW4uIEluIGFueSBjYXNlLCByZWxlYXNlcyBhbGwgcGFnZXMgdXNpbmcgdW5w aW5fdXNlcl9wYWdlKCksCisgKiBwb3NzaWJseSB2aWEgdW5waW5fdXNlcl9wYWdlcygpLCBmb3Ig dGhlIG5vbi1kaXJ0eSBjYXNlLgogICoKLSAqIFBsZWFzZSBzZWUgdGhlIHB1dF91c2VyX3BhZ2Uo KSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICogUGxlYXNlIHNlZSB0aGUgdW5waW5fdXNl cl9wYWdlKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KICAqCiAgKiBzZXRfcGFnZV9kaXJ0 eV9sb2NrKCkgaXMgdXNlZCBpbnRlcm5hbGx5LiBJZiBpbnN0ZWFkLCBzZXRfcGFnZV9kaXJ0eSgp IGlzCiAgKiByZXF1aXJlZCwgdGhlbiB0aGUgY2FsbGVyIHNob3VsZCBhKSB2ZXJpZnkgdGhhdCB0 aGlzIGlzIHJlYWxseSBjb3JyZWN0LAogICogYmVjYXVzZSBfbG9jaygpIGlzIHVzdWFsbHkgcmVx dWlyZWQsIGFuZCBiKSBoYW5kIGNvZGUgaXQ6Ci0gKiBzZXRfcGFnZV9kaXJ0eV9sb2NrKCksIHB1 dF91c2VyX3BhZ2UoKS4KKyAqIHNldF9wYWdlX2RpcnR5X2xvY2soKSwgdW5waW5fdXNlcl9wYWdl KCkuCiAgKgogICovCi12b2lkIHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0IHBhZ2Ug KipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMsCi0JCQkgICAgICAgYm9vbCBtYWtlX2RpcnR5 KQordm9pZCB1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKipwYWdlcywg dW5zaWduZWQgbG9uZyBucGFnZXMsCisJCQkJIGJvb2wgbWFrZV9kaXJ0eSkKIHsKIAl1bnNpZ25l ZCBsb25nIGluZGV4OwogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBwdXRfdXNlcl9wYWdlc19k aXJ0eV9sb2NrKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLAogCSAq LwogCiAJaWYgKCFtYWtlX2RpcnR5KSB7Ci0JCXB1dF91c2VyX3BhZ2VzKHBhZ2VzLCBucGFnZXMp OworCQl1bnBpbl91c2VyX3BhZ2VzKHBhZ2VzLCBucGFnZXMpOwogCQlyZXR1cm47CiAJfQogCkBA IC0yMDAsMjEgKzIwMCwyMSBAQCB2b2lkIHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0 IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMsCiAJCSAqLwogCQlpZiAoIVBhZ2VE aXJ0eShwYWdlKSkKIAkJCXNldF9wYWdlX2RpcnR5X2xvY2socGFnZSk7Ci0JCXB1dF91c2VyX3Bh Z2UocGFnZSk7CisJCXVucGluX3VzZXJfcGFnZShwYWdlKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9M KHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2spOworRVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3Bh Z2VzX2RpcnR5X2xvY2spOwogCiAvKioKLSAqIHB1dF91c2VyX3BhZ2VzKCkgLSByZWxlYXNlIGFu IGFycmF5IG9mIGd1cC1waW5uZWQgcGFnZXMuCisgKiB1bnBpbl91c2VyX3BhZ2VzKCkgLSByZWxl YXNlIGFuIGFycmF5IG9mIGd1cC1waW5uZWQgcGFnZXMuCiAgKiBAcGFnZXM6ICBhcnJheSBvZiBw YWdlcyB0byBiZSBtYXJrZWQgZGlydHkgYW5kIHJlbGVhc2VkLgogICogQG5wYWdlczogbnVtYmVy IG9mIHBhZ2VzIGluIHRoZSBAcGFnZXMgYXJyYXkuCiAgKgotICogRm9yIGVhY2ggcGFnZSBpbiB0 aGUgQHBhZ2VzIGFycmF5LCByZWxlYXNlIHRoZSBwYWdlIHVzaW5nIHB1dF91c2VyX3BhZ2UoKS4K KyAqIEZvciBlYWNoIHBhZ2UgaW4gdGhlIEBwYWdlcyBhcnJheSwgcmVsZWFzZSB0aGUgcGFnZSB1 c2luZyB1bnBpbl91c2VyX3BhZ2UoKS4KICAqCi0gKiBQbGVhc2Ugc2VlIHRoZSBwdXRfdXNlcl9w YWdlKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAqIFBsZWFzZSBzZWUgdGhlIHVucGlu X3VzZXJfcGFnZSgpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCiAgKi8KLXZvaWQgcHV0X3Vz ZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMpCit2b2lk IHVucGluX3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFn ZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmRleDsKIApAQCAtMjI0LDkgKzIyNCw5IEBAIHZvaWQg cHV0X3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMp CiAJICogc2luZ2xlIG9wZXJhdGlvbiB0byB0aGUgaGVhZCBwYWdlIHNob3VsZCBzdWZmaWNlLgog CSAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5wYWdlczsgaW5kZXgrKykKLQkJcHV0X3Vz ZXJfcGFnZShwYWdlc1tpbmRleF0pOworCQl1bnBpbl91c2VyX3BhZ2UocGFnZXNbaW5kZXhdKTsK IH0KLUVYUE9SVF9TWU1CT0wocHV0X3VzZXJfcGFnZXMpOworRVhQT1JUX1NZTUJPTCh1bnBpbl91 c2VyX3BhZ2VzKTsKIAogI2lmZGVmIENPTkZJR19NTVUKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbm9f cGFnZV90YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTE5NTMsNyArMTk1Myw3 IEBAIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIHVuZG9fZGV2X3BhZ2VtYXAoaW50ICpuciwg aW50IG5yX3N0YXJ0LAogCiAJCUNsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CiAJCWlmIChmbGFn cyAmIEZPTExfUElOKQotCQkJcHV0X3VzZXJfcGFnZShwYWdlKTsKKwkJCXVucGluX3VzZXJfcGFn ZShwYWdlKTsKIAkJZWxzZQogCQkJcHV0X3BhZ2UocGFnZSk7CiAJfQpkaWZmIC0tZ2l0IGEvbW0v Z3VwX2JlbmNobWFyay5jIGIvbW0vZ3VwX2JlbmNobWFyay5jCmluZGV4IDFhYzA4OWFkODE1Zi4u NzZkMzJkYjQ4YWY4IDEwMDY0NAotLS0gYS9tbS9ndXBfYmVuY2htYXJrLmMKKysrIGIvbW0vZ3Vw X2JlbmNobWFyay5jCkBAIC0zNSw3ICszNSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2Vz KGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAK IAljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKIAljYXNlIFBJTl9CRU5DSE1BUks6Ci0JCXB1dF91 c2VyX3BhZ2VzKHBhZ2VzLCBucl9wYWdlcyk7CisJCXVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5y X3BhZ2VzKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vcHJvY2Vzc192bV9hY2Nl c3MuYyBiL21tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKaW5kZXggZmQyMGFiNjc1Yjg1Li5kZTQxZTgz MGNkYWMgMTAwNjQ0Ci0tLSBhL21tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKKysrIGIvbW0vcHJvY2Vz c192bV9hY2Nlc3MuYwpAQCAtMTI2LDggKzEyNiw4IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc192bV9y d19zaW5nbGVfdmVjKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcGEgKz0gcGlubmVkX3BhZ2VzICog UEFHRV9TSVpFOwogCiAJCS8qIElmIHZtX3dyaXRlIGlzIHNldCwgdGhlIHBhZ2VzIG5lZWQgdG8g YmUgbWFkZSBkaXJ0eTogKi8KLQkJcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhwcm9jZXNzX3Bh Z2VzLCBwaW5uZWRfcGFnZXMsCi0JCQkJCSAgdm1fd3JpdGUpOworCQl1bnBpbl91c2VyX3BhZ2Vz X2RpcnR5X2xvY2socHJvY2Vzc19wYWdlcywgcGlubmVkX3BhZ2VzLAorCQkJCQkgICAgdm1fd3Jp dGUpOwogCX0KIAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL25ldC94ZHAveGRwX3VtZW0uYyBi L25ldC94ZHAveGRwX3VtZW0uYwppbmRleCBkMDcxMDAzYjVlNzYuLmFjMTgyYzM4ZjdiMCAxMDA2 NDQKLS0tIGEvbmV0L3hkcC94ZHBfdW1lbS5jCisrKyBiL25ldC94ZHAveGRwX3VtZW0uYwpAQCAt MjEyLDcgKzIxMiw3IEBAIHN0YXRpYyBpbnQgeGRwX3VtZW1fbWFwX3BhZ2VzKHN0cnVjdCB4ZHBf dW1lbSAqdW1lbSkKIAogc3RhdGljIHZvaWQgeGRwX3VtZW1fdW5waW5fcGFnZXMoc3RydWN0IHhk cF91bWVtICp1bWVtKQogewotCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodW1lbS0+cGdzLCB1 bWVtLT5ucGdzLCB0cnVlKTsKKwl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodW1lbS0+cGdz LCB1bWVtLT5ucGdzLCB0cnVlKTsKIAogCWtmcmVlKHVtZW0tPnBncyk7CiAJdW1lbS0+cGdzID0g TlVMTDsKLS0gCjIuMjQuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6F17C33C9B for ; Fri, 15 Nov 2019 05:54:39 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 99A0B20733 for ; Fri, 15 Nov 2019 05:54:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99A0B20733 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DEC676E235; Fri, 15 Nov 2019 05:54:31 +0000 (UTC) Received: from hqemgate16.nvidia.com (hqemgate16.nvidia.com [216.228.121.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id DAA616E17C for ; Fri, 15 Nov 2019 05:53:52 +0000 (UTC) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 14 Nov 2019 21:53:46 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 14 Nov 2019 21:53:46 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 14 Nov 2019 21:53:46 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 15 Nov 2019 05:53:45 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Fri, 15 Nov 2019 05:53:45 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7, 5, 8, 10121) id ; Thu, 14 Nov 2019 21:53:45 -0800 From: John Hubbard To: Andrew Morton Subject: [PATCH v5 24/24] mm, tree-wide: rename put_user_page*() to unpin_user_page*() Date: Thu, 14 Nov 2019 21:53:40 -0800 Message-ID: <20191115055340.1825745-25-jhubbard@nvidia.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1573797226; bh=STzExVj+9tzBfJU2bAe+2a5wKbBXpDTeZdAEjVWwxYo=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Transfer-Encoding:Content-Type; b=fgq2HbUmLwZt8sMtmHStunjU2h2x48zs6ALgNOdkOca3A7EluDhjmi1kxykMiJZ2R uawnlW9ZH9+FFbXpSIzXECa/HYO9D1OZrD7eq6opLINmSnPE+FSHcSRLyeyD50bBOi DcF0GajCOlwRupOCe9dPxmZFS7Lemsm28diMyt+iI5iFiG8AMa09417uvpCBnGjslY SP4jinLKAYRud8zS7dF58YuAdmTJhhjPsbSYiqANVedXTEhDXDT7hgL6dqDKiGJJuY eaieXiOdzg1ikcvcOaoc5LbfMxrHc7dtbE1j8cRwSopUFEB2MMoNnVodPGol5t98sX U/uSBI6N6hITw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michal Hocko , Jan Kara , kvm@vger.kernel.org, linux-doc@vger.kernel.org, David Airlie , Dave Chinner , dri-devel@lists.freedesktop.org, LKML , linux-mm@kvack.org, Paul Mackerras , linux-kselftest@vger.kernel.org, Ira Weiny , Jonathan Corbet , linux-rdma@vger.kernel.org, Michael Ellerman , Christoph Hellwig , Jason Gunthorpe , Vlastimil Babka , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-media@vger.kernel.org, Shuah Khan , John Hubbard , linux-block@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Al Viro , Dan Williams , Mauro Carvalho Chehab , Magnus Karlsson , Jens Axboe , netdev@vger.kernel.org, Alex Williamson , linux-fsdevel@vger.kernel.org, bpf@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "David S . Miller" , Mike Kravetz Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191115055340.yRS-KZuFlgt3Zh2A1gMKHkI4EtmPHJUDZnmMheWaH5s@z> SW4gb3JkZXIgdG8gcHJvdmlkZSBhIGNsZWFyZXIsIG1vcmUgc3ltbWV0cmljIEFQSSBmb3IgcGlu bmluZwphbmQgdW5waW5uaW5nIERNQSBwYWdlcy4gVGhpcyB3YXksIHBpbl91c2VyX3BhZ2VzKigp IGNhbGxzCm1hdGNoIHVwIHdpdGggdW5waW5fdXNlcl9wYWdlcyooKSBjYWxscywgYW5kIHRoZSBB UEkgaXMgYSBsb3QKY2xvc2VyIHRvIGJlaW5nIHNlbGYtZXhwbGFuYXRvcnkuCgpTaWduZWQtb2Zm LWJ5OiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlv bi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgICB8ICAyICstCiBhcmNoL3Bvd2VycGMvbW0v Ym9vazNzNjQvaW9tbXVfYXBpLmMgICAgICAgIHwgIDYgKy0tCiBkcml2ZXJzL2dwdS9kcm0vdmlh L3ZpYV9kbWFibGl0LmMgICAgICAgICAgIHwgIDQgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9jb3Jl L3VtZW0uYyAgICAgICAgICAgICAgfCAgMiArLQogZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEv dXNlcl9wYWdlcy5jICAgICB8ICAyICstCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRo Y2FfbWVtZnJlZS5jIHwgIDYgKy0tCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91c2Vy X3BhZ2VzLmMgIHwgIDIgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2Rt YS5jICAgfCAgNiArLS0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY191aW9tLmMg ICAgfCAgMiArLQogZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfbWVtLmMgICAgICAgICB8 ICAyICstCiBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cuYyAgIHwgIDQg Ky0KIGRyaXZlcnMvcGxhdGZvcm0vZ29sZGZpc2gvZ29sZGZpc2hfcGlwZS5jICAgfCAgNCArLQog ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICAgICAgICB8ICAyICstCiBmcy9p b191cmluZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0KIGluY2x1ZGUv bGludXgvbW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMCArKysrKysrLS0tLS0tLQog aW5jbHVkZS9saW51eC9tbXpvbmUuaCAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBtbS9n dXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDYgKysrKysrKysrKy0t LS0tLS0tLS0tCiBtbS9ndXBfYmVuY2htYXJrLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDIgKy0KIG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMgICAgICAgICAgICAgICAgICAgICAgfCAgNCAr LQogbmV0L3hkcC94ZHBfdW1lbS5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiAy MCBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3Vt ZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGJhYTI4OGE0NGE3Ny4u NmQ5M2VmMjAzNTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2Vy X3BhZ2VzLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJz dApAQCAtMjIwLDcgKzIyMCw3IEBAIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3 byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CiAgICAgL3Byb2Mvdm1zdGF0L25yX2ZvbGxf cGluX3JlcXVlc3RlZAogCiBUaG9zZSBhcmUgYm90aCBnb2luZyB0byBzaG93IHplcm8sIHVubGVz cyBDT05GSUdfREVCVUdfVk0gaXMgc2V0LiBUaGlzIGlzCi1iZWNhdXNlIHRoZXJlIGlzIGEgbm90 aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHB1dF91c2VyX3BhZ2UoKSwgd2hlbiB0aGV5Citi ZWNhdXNlIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHVucGluX3Vz ZXJfcGFnZSgpLCB3aGVuIHRoZXkKIGFyZSBhY3RpdmF0ZWQuCiAKIFJlZmVyZW5jZXMKZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYyBiL2FyY2gvcG93ZXJw Yy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYwppbmRleCAxOTYzODNlOGU1YTkuLmRkN2FhNWE0ZjMz YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2lvbW11X2FwaS5jCisrKyBi L2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9pb21tdV9hcGkuYwpAQCAtMTY4LDcgKzE2OCw3IEBA IHN0YXRpYyBsb25nIG1tX2lvbW11X2RvX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNp Z25lZCBsb25nIHVhLAogCiBmcmVlX2V4aXQ6CiAJLyogZnJlZSB0aGUgcmVmZXJlbmNlcyB0YWtl biAqLwotCXB1dF91c2VyX3BhZ2VzKG1lbS0+aHBhZ2VzLCBwaW5uZWQpOworCXVucGluX3VzZXJf cGFnZXMobWVtLT5ocGFnZXMsIHBpbm5lZCk7CiAKIAl2ZnJlZShtZW0tPmhwYXMpOwogCWtmcmVl KG1lbSk7CkBAIC0yMTEsOCArMjExLDggQEAgc3RhdGljIHZvaWQgbW1faW9tbXVfdW5waW4oc3Ry dWN0IG1tX2lvbW11X3RhYmxlX2dyb3VwX21lbV90ICptZW0pCiAJCWlmICghcGFnZSkKIAkJCWNv bnRpbnVlOwogCi0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJm1lbS0+aHBhZ2VzW2ldLCAx LAotCQkJCQkgIE1NX0lPTU1VX1RBQkxFX0dST1VQX1BBR0VfRElSVFkpOworCQl1bnBpbl91c2Vy X3BhZ2VzX2RpcnR5X2xvY2soJm1lbS0+aHBhZ2VzW2ldLCAxLAorCQkJCQkgICAgTU1fSU9NTVVf VEFCTEVfR1JPVVBfUEFHRV9ESVJUWSk7CiAKIAkJbWVtLT5ocGFzW2ldID0gMDsKIAl9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmMgYi9kcml2ZXJzL2dwdS9k cm0vdmlhL3ZpYV9kbWFibGl0LmMKaW5kZXggMzdjNWU1NzI5OTNhLi43MTlkMDM2YzkzODQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2RtYWJsaXQuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdmlhL3ZpYV9kbWFibGl0LmMKQEAgLTE4OCw4ICsxODgsOCBAQCB2aWFfZnJlZV9z Z19pbmZvKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkcm1fdmlhX3NnX2luZm9fdCAqdnNnKQogCQlr ZnJlZSh2c2ctPmRlc2NfcGFnZXMpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIGRyX3Zp YV9wYWdlc19sb2NrZWQ6Ci0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodnNnLT5wYWdlcywg dnNnLT5udW1fcGFnZXMsCi0JCQkJCSAgKHZzZy0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklD RSkpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodnNnLT5wYWdlcywgdnNnLT5udW1f cGFnZXMsCisJCQkJCSAgICh2c2ctPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpKTsKIAkJ LyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBkcl92aWFfcGFnZXNfYWxsb2M6CiAJCXZmcmVlKHZz Zy0+cGFnZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jIGIv ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCmluZGV4IDJjMjg3Y2VkMzQzOS4uMTE5YTE0 N2RhOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMKKysrIGIv ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyB2 b2lkIF9faWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3Vt ZW0gKnVtZW0sIGludCBkCiAKIAlmb3JfZWFjaF9zZ19wYWdlKHVtZW0tPnNnX2hlYWQuc2dsLCAm c2dfaXRlciwgdW1lbS0+c2dfbmVudHMsIDApIHsKIAkJcGFnZSA9IHNnX3BhZ2VfaXRlcl9wYWdl KCZzZ19pdGVyKTsKLQkJcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jaygmcGFnZSwgMSwgdW1lbS0+ d3JpdGFibGUgJiYgZGlydHkpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2Us IDEsIHVtZW0tPndyaXRhYmxlICYmIGRpcnR5KTsKIAl9CiAKIAlzZ19mcmVlX3RhYmxlKCZ1bWVt LT5zZ19oZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3VzZXJf cGFnZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3VzZXJfcGFnZXMuYwppbmRleCA5 YTk0NzYxNzY1YzAuLjNiNTA1MDA2YzBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L2hmaTEvdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL3Vz ZXJfcGFnZXMuYwpAQCAtMTE4LDcgKzExOCw3IEBAIGludCBoZmkxX2FjcXVpcmVfdXNlcl9wYWdl cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc2l6ZV90IG5wCiB2 b2lkIGhmaTFfcmVsZWFzZV91c2VyX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qg cGFnZSAqKnAsCiAJCQkgICAgIHNpemVfdCBucGFnZXMsIGJvb2wgZGlydHkpCiB7Ci0JcHV0X3Vz ZXJfcGFnZXNfZGlydHlfbG9jayhwLCBucGFnZXMsIGRpcnR5KTsKKwl1bnBpbl91c2VyX3BhZ2Vz X2RpcnR5X2xvY2socCwgbnBhZ2VzLCBkaXJ0eSk7CiAKIAlpZiAobW0pIHsgLyogZHVyaW5nIGNs b3NlIGFmdGVyIHNpZ25hbCwgbW0gY2FuIGJlIE5VTEwgKi8KIAkJYXRvbWljNjRfc3ViKG5wYWdl cywgJm1tLT5waW5uZWRfdm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210 aGNhL210aGNhX21lbWZyZWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9t ZW1mcmVlLmMKaW5kZXggODI2OWFiMDQwYzIxLi43OGE0OGFlYTNmYWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKKysrIGIvZHJpdmVycy9p bmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwpAQCAtNDgyLDcgKzQ4Miw3IEBAIGlu dCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91 YXIgKnVhciwKIAogCXJldCA9IHBjaV9tYXBfc2coZGV2LT5wZGV2LCAmZGJfdGFiLT5wYWdlW2ld Lm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHV0X3VzZXJf cGFnZShwYWdlc1swXSk7CisJCXVucGluX3VzZXJfcGFnZShwYWdlc1swXSk7CiAJCWdvdG8gb3V0 OwogCX0KIApAQCAtNDkwLDcgKzQ5MCw3IEBAIGludCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3Qg bXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhciwKIAkJCQkgbXRoY2FfdWFyY192 aXJ0KGRldiwgdWFyLCBpKSk7CiAJaWYgKHJldCkgewogCQlwY2lfdW5tYXBfc2coZGV2LT5wZGV2 LCAmZGJfdGFiLT5wYWdlW2ldLm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXB1dF91c2Vy X3BhZ2Uoc2dfcGFnZSgmZGJfdGFiLT5wYWdlW2ldLm1lbSkpOworCQl1bnBpbl91c2VyX3BhZ2Uo c2dfcGFnZSgmZGJfdGFiLT5wYWdlW2ldLm1lbSkpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU1 Niw3ICs1NTYsNyBAQCB2b2lkIG10aGNhX2NsZWFudXBfdXNlcl9kYl90YWIoc3RydWN0IG10aGNh X2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIsCiAJCWlmIChkYl90YWItPnBhZ2VbaV0u dXZpcnQpIHsKIAkJCW10aGNhX1VOTUFQX0lDTShkZXYsIG10aGNhX3VhcmNfdmlydChkZXYsIHVh ciwgaSksIDEpOwogCQkJcGNpX3VubWFwX3NnKGRldi0+cGRldiwgJmRiX3RhYi0+cGFnZVtpXS5t ZW0sIDEsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJcHV0X3VzZXJfcGFnZShzZ19wYWdlKCZkYl90 YWItPnBhZ2VbaV0ubWVtKSk7CisJCQl1bnBpbl91c2VyX3BhZ2Uoc2dfcGFnZSgmZGJfdGFiLT5w YWdlW2ldLm1lbSkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQv aHcvcWliL3FpYl91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91 c2VyX3BhZ2VzLmMKaW5kZXggN2ZjNGI1ZjgxZmNkLi4zNDJlMzE3MmNhNDAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfcGFnZXMuYworKysgYi9kcml2ZXJz L2luZmluaWJhbmQvaHcvcWliL3FpYl91c2VyX3BhZ2VzLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHN0 YXRpYyB2b2lkIF9fcWliX3JlbGVhc2VfdXNlcl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnAsIHNpemVf dCBudW1fcGFnZXMsCiAJCQkJICAgICBpbnQgZGlydHkpCiB7Ci0JcHV0X3VzZXJfcGFnZXNfZGly dHlfbG9jayhwLCBudW1fcGFnZXMsIGRpcnR5KTsKKwl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xv Y2socCwgbnVtX3BhZ2VzLCBkaXJ0eSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9p bmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcv cWliL3FpYl91c2VyX3NkbWEuYwppbmRleCAxYTNjYzI5NTdlM2EuLmE2NzU5OWI1YTU1MCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKKysrIGIv ZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKQEAgLTMxNyw3ICszMTcs NyBAQCBzdGF0aWMgaW50IHFpYl91c2VyX3NkbWFfcGFnZV90b19mcmFncyhjb25zdCBzdHJ1Y3Qg cWliX2RldmRhdGEgKmRkLAogCQkgKiB0aGUgY2FsbGVyIGNhbiBpZ25vcmUgdGhpcyBwYWdlLgog CQkgKi8KIAkJaWYgKHB1dCkgewotCQkJcHV0X3VzZXJfcGFnZShwYWdlKTsKKwkJCXVucGluX3Vz ZXJfcGFnZShwYWdlKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGNvYWxlc2NlIGNhc2UgKi8KIAkJCWt1 bm1hcChwYWdlKTsKQEAgLTYzMSw3ICs2MzEsNyBAQCBzdGF0aWMgdm9pZCBxaWJfdXNlcl9zZG1h X2ZyZWVfcGt0X2ZyYWcoc3RydWN0IGRldmljZSAqZGV2LAogCQkJa3VubWFwKHBrdC0+YWRkcltp XS5wYWdlKTsKIAogCQlpZiAocGt0LT5hZGRyW2ldLnB1dF9wYWdlKQotCQkJcHV0X3VzZXJfcGFn ZShwa3QtPmFkZHJbaV0ucGFnZSk7CisJCQl1bnBpbl91c2VyX3BhZ2UocGt0LT5hZGRyW2ldLnBh Z2UpOwogCQllbHNlCiAJCQlfX2ZyZWVfcGFnZShwa3QtPmFkZHJbaV0ucGFnZSk7CiAJfSBlbHNl IGlmIChwa3QtPmFkZHJbaV0ua3ZhZGRyKSB7CkBAIC03MDYsNyArNzA2LDcgQEAgc3RhdGljIGlu dCBxaWJfdXNlcl9zZG1hX3Bpbl9wYWdlcyhjb25zdCBzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLAog CS8qIGlmIGVycm9yLCByZXR1cm4gYWxsIHBhZ2VzIG5vdCBtYW5hZ2VkIGJ5IHBrdCAqLwogZnJl ZV9wYWdlczoKIAl3aGlsZSAoaSA8IGopCi0JCXB1dF91c2VyX3BhZ2UocGFnZXNbaSsrXSk7CisJ CXVucGluX3VzZXJfcGFnZShwYWdlc1tpKytdKTsKIAogZG9uZToKIAlyZXR1cm4gcmV0OwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX3Vpb20uYyBiL2RyaXZl cnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY191aW9tLmMKaW5kZXggNjAwODk2NzI3ZDM0Li5i ZDlmOTQ0YjY4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25p Y191aW9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX3Vpb20uYwpA QCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCB1c25pY191aW9tX3B1dF9wYWdlcyhzdHJ1Y3Qg bGlzdF9oZWFkICpjaHVua19saXN0LCBpbnQgZGlydHkpCiAJCWZvcl9lYWNoX3NnKGNodW5rLT5w YWdlX2xpc3QsIHNnLCBjaHVuay0+bmVudHMsIGkpIHsKIAkJCXBhZ2UgPSBzZ19wYWdlKHNnKTsK IAkJCXBhID0gc2dfcGh5cyhzZyk7Ci0JCQlwdXRfdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZwYWdl LCAxLCBkaXJ0eSk7CisJCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2UsIDEsIGRp cnR5KTsKIAkJCXVzbmljX2RiZygicGE6ICVwYVxuIiwgJnBhKTsKIAkJfQogCQlrZnJlZShjaHVu ayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0uYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X21lbS5jCmluZGV4IGU1M2IwN2RjZmVkNS4uZTIw NjFkYzBiMDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0u YworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19tZW0uYwpAQCAtNjMsNyArNjMs NyBAQCBzdHJ1Y3Qgc2l3X21lbSAqc2l3X21lbV9pZDJvYmooc3RydWN0IHNpd19kZXZpY2UgKnNk ZXYsIGludCBzdGFnX2luZGV4KQogc3RhdGljIHZvaWQgc2l3X2ZyZWVfcGxpc3Qoc3RydWN0IHNp d19wYWdlX2NodW5rICpjaHVuaywgaW50IG51bV9wYWdlcywKIAkJCSAgIGJvb2wgZGlydHkpCiB7 Ci0JcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhjaHVuay0+cGxpc3QsIG51bV9wYWdlcywgZGly dHkpOworCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhjaHVuay0+cGxpc3QsIG51bV9wYWdl cywgZGlydHkpOwogfQogCiB2b2lkIHNpd191bWVtX3JlbGVhc2Uoc3RydWN0IHNpd191bWVtICp1 bWVtLCBib29sIGRpcnR5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlk ZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cu YwppbmRleCAxNjJhMjYzM2IxZTMuLjEzYjY1ZWQ5ZTc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9t ZWRpYS92NGwyLWNvcmUvdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92NGwy LWNvcmUvdmlkZW9idWYtZG1hLXNnLmMKQEAgLTM0OSw4ICszNDksOCBAQCBpbnQgdmlkZW9idWZf ZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQogCUJVR19PTihkbWEtPnNnbGVu KTsKIAogCWlmIChkbWEtPnBhZ2VzKSB7Ci0JCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soZG1h LT5wYWdlcywgZG1hLT5ucl9wYWdlcywKLQkJCQkJICBkbWEtPmRpcmVjdGlvbiA9PSBETUFfRlJP TV9ERVZJQ0UpOworCQl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soZG1hLT5wYWdlcywgZG1h LT5ucl9wYWdlcywKKwkJCQkJICAgIGRtYS0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSk7 CiAJCWtmcmVlKGRtYS0+cGFnZXMpOwogCQlkbWEtPnBhZ2VzID0gTlVMTDsKIAl9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNoX3BpcGUuYyBiL2RyaXZlcnMv cGxhdGZvcm0vZ29sZGZpc2gvZ29sZGZpc2hfcGlwZS5jCmluZGV4IDYzNWE4YmMxYjQ4MC4uYmY1 MjNkZjJhOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNo X3BpcGUuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL2dvbGRmaXNoL2dvbGRmaXNoX3BpcGUuYwpA QCAtMzYwLDggKzM2MCw4IEBAIHN0YXRpYyBpbnQgdHJhbnNmZXJfbWF4X2J1ZmZlcnMoc3RydWN0 IGdvbGRmaXNoX3BpcGUgKnBpcGUsCiAKIAkqY29uc3VtZWRfc2l6ZSA9IHBpcGUtPmNvbW1hbmRf YnVmZmVyLT5yd19wYXJhbXMuY29uc3VtZWRfc2l6ZTsKIAotCXB1dF91c2VyX3BhZ2VzX2RpcnR5 X2xvY2socGlwZS0+cGFnZXMsIHBhZ2VzX2NvdW50LAotCQkJCSAgIWlzX3dyaXRlICYmICpjb25z dW1lZF9zaXplID4gMCk7CisJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKHBpcGUtPnBhZ2Vz LCBwYWdlc19jb3VudCwKKwkJCQkgICAgIWlzX3dyaXRlICYmICpjb25zdW1lZF9zaXplID4gMCk7 CiAKIAltdXRleF91bmxvY2soJnBpcGUtPmxvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11 X3R5cGUxLmMKaW5kZXggMThhYTM2YjU2ODk2Li5jNDhhYzE1NjdmMTQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMKKysrIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfdHlwZTEuYwpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBpbnQgcHV0X3Bmbih1bnNpZ25l ZCBsb25nIHBmbiwgaW50IHByb3QpCiAJaWYgKCFpc19pbnZhbGlkX3Jlc2VydmVkX3BmbihwZm4p KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlwdXRfdXNl cl9wYWdlc19kaXJ0eV9sb2NrKCZwYWdlLCAxLCBwcm90ICYgSU9NTVVfV1JJVEUpOworCQl1bnBp bl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soJnBhZ2UsIDEsIHByb3QgJiBJT01NVV9XUklURSk7CiAJ CXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2lvX3VyaW5nLmMgYi9m cy9pb191cmluZy5jCmluZGV4IGNmZjY0YmQwMGRiOS4uNzVjZTViMzg2ZmZkIDEwMDY0NAotLS0g YS9mcy9pb191cmluZy5jCisrKyBiL2ZzL2lvX3VyaW5nLmMKQEAgLTMzMTIsNyArMzMxMiw3IEBA IHN0YXRpYyBpbnQgaW9fc3FlX2J1ZmZlcl91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAq Y3R4KQogCQlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9ICZjdHgtPnVzZXJfYnVmc1tpXTsK IAogCQlmb3IgKGogPSAwOyBqIDwgaW11LT5ucl9idmVjczsgaisrKQotCQkJcHV0X3VzZXJfcGFn ZShpbXUtPmJ2ZWNbal0uYnZfcGFnZSk7CisJCQl1bnBpbl91c2VyX3BhZ2UoaW11LT5idmVjW2pd LmJ2X3BhZ2UpOwogCiAJCWlmIChjdHgtPmFjY291bnRfbWVtKQogCQkJaW9fdW5hY2NvdW50X21l bShjdHgtPnVzZXIsIGltdS0+bnJfYnZlY3MpOwpAQCAtMzQ1Nyw3ICszNDU3LDcgQEAgc3RhdGlj IGludCBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lk IF9fdXNlciAqYXJnLAogCQkJICogcmVsZWFzZSBhbnkgcGFnZXMgd2UgZGlkIGdldAogCQkJICov CiAJCQlpZiAocHJldCA+IDApCi0JCQkJcHV0X3VzZXJfcGFnZXMocGFnZXMsIHByZXQpOworCQkJ CXVucGluX3VzZXJfcGFnZXMocGFnZXMsIHByZXQpOwogCQkJaWYgKGN0eC0+YWNjb3VudF9tZW0p CiAJCQkJaW9fdW5hY2NvdW50X21lbShjdHgtPnVzZXIsIG5yX3BhZ2VzKTsKIAkJCWt2ZnJlZShp bXUtPmJ2ZWMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51 eC9tbS5oCmluZGV4IGRiODcyNzY2NDgwZi4uZGM1ZmEzZGY4MjZmIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDgwLDE4ICsxMDgw LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAq IG1hZGUgYWdhaW5zdCB0aGUgcGFnZS4gKCJndXAtcGlubmVkIiBpcyBhbm90aGVyIHRlcm0gZm9y IHRoZSBsYXR0ZXIpLgogICoKICAqIFdpdGggdGhpcyBzY2hlbWUsIGdldF91c2VyX3BhZ2VzKCkg YmVjb21lcyBzcGVjaWFsOiBzdWNoIHBhZ2VzIGFyZSBtYXJrZWQKLSAqIGFzIGRpc3RpbmN0IGZy b20gbm9ybWFsIHBhZ2VzLiBBcyBzdWNoLCB0aGUgcHV0X3VzZXJfcGFnZSgpIGNhbGwgKGFuZCBp dHMKKyAqIGFzIGRpc3RpbmN0IGZyb20gbm9ybWFsIHBhZ2VzLiBBcyBzdWNoLCB0aGUgdW5waW5f dXNlcl9wYWdlKCkgY2FsbCAoYW5kIGl0cwogICogdmFyaWFudHMpIG11c3QgYmUgdXNlZCBpbiBv cmRlciB0byByZWxlYXNlIGd1cC1waW5uZWQgcGFnZXMuCiAgKgogICogQ2hvaWNlIG9mIHZhbHVl OgogICoKICAqIEJ5IG1ha2luZyBHVVBfUElOX0NPVU5USU5HX0JJQVMgYSBwb3dlciBvZiB0d28s IGRlYnVnZ2luZyBvZiBwYWdlIHJlZmVyZW5jZQotICogY291bnRzIHdpdGggcmVzcGVjdCB0byBn ZXRfdXNlcl9wYWdlcygpIGFuZCBwdXRfdXNlcl9wYWdlKCkgYmVjb21lcyBzaW1wbGVyLAotICog ZHVlIHRvIHRoZSBmYWN0IHRoYXQgYWRkaW5nIGFuIGV2ZW4gcG93ZXIgb2YgdHdvIHRvIHRoZSBw YWdlIHJlZmNvdW50IGhhcwotICogdGhlIGVmZmVjdCBvZiB1c2luZyBvbmx5IHRoZSB1cHBlciBO IGJpdHMsIGZvciB0aGUgY29kZSB0aGF0IGNvdW50cyB1cCB1c2luZwotICogdGhlIGJpYXMgdmFs dWUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbG93ZXIgYml0cyBhcmUgbGVmdCBmb3IgdGhlIGV4Y2x1 c2l2ZQotICogdXNlIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHRoYXQgaW5jcmVtZW50cyBhbmQgZGVj cmVtZW50cyBieSBvbmUgKG9yIGF0IGxlYXN0LAotICogYnkgbXVjaCBzbWFsbGVyIHZhbHVlcyB0 aGFuIHRoZSBiaWFzIHZhbHVlKS4KKyAqIGNvdW50cyB3aXRoIHJlc3BlY3QgdG8gZ2V0X3VzZXJf cGFnZXMoKSBhbmQgdW5waW5fdXNlcl9wYWdlKCkgYmVjb21lcworICogc2ltcGxlciwgZHVlIHRv IHRoZSBmYWN0IHRoYXQgYWRkaW5nIGFuIGV2ZW4gcG93ZXIgb2YgdHdvIHRvIHRoZSBwYWdlCisg KiByZWZjb3VudCBoYXMgdGhlIGVmZmVjdCBvZiB1c2luZyBvbmx5IHRoZSB1cHBlciBOIGJpdHMs IGZvciB0aGUgY29kZSB0aGF0CisgKiBjb3VudHMgdXAgdXNpbmcgdGhlIGJpYXMgdmFsdWUuIFRo aXMgbWVhbnMgdGhhdCB0aGUgbG93ZXIgYml0cyBhcmUgbGVmdCBmb3IKKyAqIHRoZSBleGNsdXNp dmUgdXNlIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHRoYXQgaW5jcmVtZW50cyBhbmQgZGVjcmVtZW50 cyBieSBvbmUKKyAqIChvciBhdCBsZWFzdCwgYnkgbXVjaCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRo ZSBiaWFzIHZhbHVlKS4KICAqCiAgKiBPZiBjb3Vyc2UsIG9uY2UgdGhlIGxvd2VyIGJpdHMgb3Zl cmZsb3cgaW50byB0aGUgdXBwZXIgYml0cyAoYW5kIHRoaXMgaXMKICAqIE9LLCBiZWNhdXNlIHN1 YnRyYWN0aW9uIHJlY292ZXJzIHRoZSBvcmlnaW5hbCB2YWx1ZXMpLCB0aGVuIHZpc3VhbCBpbnNw ZWN0aW9uCkBAIC0xMTA2LDEwICsxMTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGFn ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqLwogI2RlZmluZSBHVVBfUElOX0NPVU5USU5HX0JJQVMg KDFVTCA8PCAxMCkKIAotdm9pZCBwdXRfdXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLXZv aWQgcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25l ZCBsb25nIG5wYWdlcywKLQkJCSAgICAgICBib29sIG1ha2VfZGlydHkpOwotdm9pZCBwdXRfdXNl cl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7Cit2b2lk IHVucGluX3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIHVucGluX3VzZXJfcGFn ZXNfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcywK KwkJCQkgYm9vbCBtYWtlX2RpcnR5KTsKK3ZvaWQgdW5waW5fdXNlcl9wYWdlcyhzdHJ1Y3QgcGFn ZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiAKIC8qKgogICogcGFnZV9kbWFfcGlu bmVkKCkgLSByZXBvcnQgaWYgYSBwYWdlIGlzIHBpbm5lZCBmb3IgRE1BLgpAQCAtMjY2MCw3ICsy NjYwLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAjZGVmaW5lIEZPTExfQU5PTgkweDgwMDAJLyog ZG9uJ3QgZG8gZmlsZSBtYXBwaW5ncyAqLwogI2RlZmluZSBGT0xMX0xPTkdURVJNCTB4MTAwMDAJ LyogbWFwcGluZyBsaWZldGltZSBpcyBpbmRlZmluaXRlOiBzZWUgYmVsb3cgKi8KICNkZWZpbmUg Rk9MTF9TUExJVF9QTUQJMHgyMDAwMAkvKiBzcGxpdCBodWdlIHBtZCBiZWZvcmUgcmV0dXJuaW5n ICovCi0jZGVmaW5lIEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2 aWEgcHV0X3VzZXJfcGFnZSgpICovCisjZGVmaW5lIEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMg bXVzdCBiZSByZWxlYXNlZCB2aWEgdW5waW5fdXNlcl9wYWdlICovCiAKIC8qCiAgKiBGT0xMX1BJ TiBhbmQgRk9MTF9MT05HVEVSTSBtYXkgYmUgdXNlZCBpbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyB3 aXRoIGVhY2gKQEAgLTI2OTUsNyArMjY5NSw3IEBAIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogICogRGly ZWN0IElPKS4gVGhpcyBsZXRzIHRoZSBmaWxlc3lzdGVtIGtub3cgdGhhdCBzb21lIG5vbi1maWxl LXN5c3RlbSBlbnRpdHkgaXMKICAqIHBvdGVudGlhbGx5IGNoYW5naW5nIHRoZSBwYWdlcycgZGF0 YS4gSW4gY29udHJhc3QgdG8gRk9MTF9HRVQgKHdob3NlIHBhZ2VzCiAgKiBhcmUgcmVsZWFzZWQg dmlhIHB1dF9wYWdlKCkpLCBGT0xMX1BJTiBwYWdlcyBtdXN0IGJlIHJlbGVhc2VkLCB1bHRpbWF0 ZWx5LCBieQotICogYSBjYWxsIHRvIHB1dF91c2VyX3BhZ2UoKS4KKyAqIGEgY2FsbCB0byB1bnBp bl91c2VyX3BhZ2UoKS4KICAqCiAgKiBGT0xMX1BJTiBpcyBzaW1pbGFyIHRvIEZPTExfR0VUOiBi b3RoIG9mIHRoZXNlIHBpbiBwYWdlcy4gVGhleSB1c2UgZGlmZmVyZW50CiAgKiBhbmQgc2VwYXJh dGUgcmVmY291bnRpbmcgbWVjaGFuaXNtcywgaG93ZXZlciwgYW5kIHRoYXQgbWVhbnMgdGhhdCBl YWNoIGhhcwpAQCAtMjcwMyw3ICsyNzAzLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAgKgogICog ICAgIEZPTExfR0VUOiBnZXRfdXNlcl9wYWdlcyooKSB0byBhY3F1aXJlLCBhbmQgcHV0X3BhZ2Uo KSB0byByZWxlYXNlLgogICoKLSAqICAgICBGT0xMX1BJTjogcGluX3VzZXJfcGFnZXMqKCkgdG8g YWNxdWlyZSwgYW5kIHB1dF91c2VyX3BhZ2VzIHRvIHJlbGVhc2UuCisgKiAgICAgRk9MTF9QSU46 IHBpbl91c2VyX3BhZ2VzKigpIHRvIGFjcXVpcmUsIGFuZCB1bnBpbl91c2VyX3BhZ2VzIHRvIHJl bGVhc2UuCiAgKgogICogRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxseSBleGNsdXNp dmUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24gY2FsbC4KICAqIChUaGUgdW5kZXJseWluZyBwYWdlcyBt YXkgZXhwZXJpZW5jZSBib3RoIEZPTExfR0VULWJhc2VkIGFuZCBGT0xMX1BJTi1iYXNlZApAQCAt MjcxMyw3ICsyNzEzLDcgQEAgc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAgKiBGT0xMX1BJTiBzaG91bGQg YmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91c2VyX3BhZ2VzKigpIEFQSXMsIG5ldmVyCiAg KiBkaXJlY3RseSBieSB0aGUgY2FsbGVyLiBUaGF0J3MgaW4gb3JkZXIgdG8gaGVscCBhdm9pZCBt aXNtYXRjaGVzIHdoZW4KICAqIHJlbGVhc2luZyBwYWdlczogZ2V0X3VzZXJfcGFnZXMqKCkgcGFn ZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3BhZ2UoKSwKLSAqIHdoaWxlIHBpbl91c2VyX3Bh Z2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQgdmlhIHB1dF91c2VyX3BhZ2UoKS4KKyAqIHdo aWxlIHBpbl91c2VyX3BhZ2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQgdmlhIHVucGluX3Vz ZXJfcGFnZSgpLgogICoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9waW5fdXNlcl9w YWdlcy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDA0ODVjYmEzOGQy My4uZDY2YzFmYjlkNDVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBi L2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTI0NSw3ICsyNDUsNyBAQCBlbnVtIG5vZGVfc3Rh dF9pdGVtIHsKIAlOUl9XUklUVEVOLAkJLyogcGFnZSB3cml0aW5ncyBzaW5jZSBib290dXAgKi8K IAlOUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSwJLyogcmVjbGFpbWFibGUgbm9uLXNsYWIga2Vy bmVsIHBhZ2VzICovCiAJTlJfRk9MTF9QSU5fUkVRVUVTVEVELAkvKiB2aWE6IHBpbl91c2VyX3Bh Z2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovCi0JTlJfRk9MTF9QSU5fUkVUVVJORUQsCS8qIHBh Z2VzIHJldHVybmVkIHZpYSBwdXRfdXNlcl9wYWdlKCkgKi8KKwlOUl9GT0xMX1BJTl9SRVRVUk5F RCwJLyogcGFnZXMgcmV0dXJuZWQgdmlhIHVucGluX3VzZXJfcGFnZSgpICovCiAJTlJfVk1fTk9E RV9TVEFUX0lURU1TCiB9OwogCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4 IDc4M2NjNWYyM2M3OS4uOWNiYjcyMzk5MTgyIDEwMDY0NAotLS0gYS9tbS9ndXAuYworKysgYi9t bS9ndXAuYwpAQCAtMTEwLDE1ICsxMTAsMTUgQEAgc3RhdGljIGJvb2wgX19wdXRfZGV2bWFwX21h bmFnZWRfdXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogI2VuZGlmIC8qIENPTkZJR19ERVZf UEFHRU1BUF9PUFMgKi8KIAogLyoqCi0gKiBwdXRfdXNlcl9wYWdlKCkgLSByZWxlYXNlIGEgZG1h LXBpbm5lZCBwYWdlCisgKiB1bnBpbl91c2VyX3BhZ2UoKSAtIHJlbGVhc2UgYSBkbWEtcGlubmVk IHBhZ2UKICAqIEBwYWdlOiAgICAgICAgICAgIHBvaW50ZXIgdG8gcGFnZSB0byBiZSByZWxlYXNl ZAogICoKICAqIFBhZ2VzIHRoYXQgd2VyZSBwaW5uZWQgdmlhIHBpbl91c2VyX3BhZ2VzKigpIG11 c3QgYmUgcmVsZWFzZWQgdmlhIGVpdGhlcgotICogcHV0X3VzZXJfcGFnZSgpLCBvciBvbmUgb2Yg dGhlIHB1dF91c2VyX3BhZ2VzKigpIHJvdXRpbmVzLiBUaGlzIGlzIHNvIHRoYXQKLSAqIHN1Y2gg cGFnZXMgY2FuIGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQgdW5pcXVlbHkgaGFuZGxlZC4gSW4g cGFydGljdWxhciwKLSAqIGludGVyYWN0aW9ucyB3aXRoIFJETUEgYW5kIGZpbGVzeXN0ZW1zIG5l ZWQgc3BlY2lhbCBoYW5kbGluZy4KKyAqIHVucGluX3VzZXJfcGFnZSgpLCBvciBvbmUgb2YgdGhl IHVucGluX3VzZXJfcGFnZXMqKCkgcm91dGluZXMuIFRoaXMgaXMgc28KKyAqIHRoYXQgc3VjaCBw YWdlcyBjYW4gYmUgc2VwYXJhdGVseSB0cmFja2VkIGFuZCB1bmlxdWVseSBoYW5kbGVkLiBJbgor ICogcGFydGljdWxhciwgaW50ZXJhY3Rpb25zIHdpdGggUkRNQSBhbmQgZmlsZXN5c3RlbXMgbmVl ZCBzcGVjaWFsIGhhbmRsaW5nLgogICovCi12b2lkIHB1dF91c2VyX3BhZ2Uoc3RydWN0IHBhZ2Ug KnBhZ2UpCit2b2lkIHVucGluX3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlwYWdl ID0gY29tcG91bmRfaGVhZChwYWdlKTsKIApAQCAtMTM2LDEwICsxMzYsMTAgQEAgdm9pZCBwdXRf dXNlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCiAJX191cGRhdGVfcHJvY192bXN0YXQocGFn ZSwgTlJfRk9MTF9QSU5fUkVUVVJORUQsIDEpOwogfQotRVhQT1JUX1NZTUJPTChwdXRfdXNlcl9w YWdlKTsKK0VYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTsKIAogLyoqCi0gKiBwdXRfdXNl cl9wYWdlc19kaXJ0eV9sb2NrKCkgLSByZWxlYXNlIGFuZCBvcHRpb25hbGx5IGRpcnR5IGd1cC1w aW5uZWQgcGFnZXMKKyAqIHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygpIC0gcmVsZWFzZSBh bmQgb3B0aW9uYWxseSBkaXJ0eSBndXAtcGlubmVkIHBhZ2VzCiAgKiBAcGFnZXM6ICBhcnJheSBv ZiBwYWdlcyB0byBiZSBtYXliZSBtYXJrZWQgZGlydHksIGFuZCBkZWZpbml0ZWx5IHJlbGVhc2Vk LgogICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBAcGFnZXMgYXJyYXkuCiAgKiBA bWFrZV9kaXJ0eTogd2hldGhlciB0byBtYXJrIHRoZSBwYWdlcyBkaXJ0eQpAQCAtMTQ5LDE5ICsx NDksMTkgQEAgRVhQT1JUX1NZTUJPTChwdXRfdXNlcl9wYWdlKTsKICAqCiAgKiBGb3IgZWFjaCBw YWdlIGluIHRoZSBAcGFnZXMgYXJyYXksIG1ha2UgdGhhdCBwYWdlIChvciBpdHMgaGVhZCBwYWdl LCBpZiBhCiAgKiBjb21wb3VuZCBwYWdlKSBkaXJ0eSwgaWYgQG1ha2VfZGlydHkgaXMgdHJ1ZSwg YW5kIGlmIHRoZSBwYWdlIHdhcyBwcmV2aW91c2x5Ci0gKiBsaXN0ZWQgYXMgY2xlYW4uIEluIGFu eSBjYXNlLCByZWxlYXNlcyBhbGwgcGFnZXMgdXNpbmcgcHV0X3VzZXJfcGFnZSgpLAotICogcG9z c2libHkgdmlhIHB1dF91c2VyX3BhZ2VzKCksIGZvciB0aGUgbm9uLWRpcnR5IGNhc2UuCisgKiBs aXN0ZWQgYXMgY2xlYW4uIEluIGFueSBjYXNlLCByZWxlYXNlcyBhbGwgcGFnZXMgdXNpbmcgdW5w aW5fdXNlcl9wYWdlKCksCisgKiBwb3NzaWJseSB2aWEgdW5waW5fdXNlcl9wYWdlcygpLCBmb3Ig dGhlIG5vbi1kaXJ0eSBjYXNlLgogICoKLSAqIFBsZWFzZSBzZWUgdGhlIHB1dF91c2VyX3BhZ2Uo KSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICogUGxlYXNlIHNlZSB0aGUgdW5waW5fdXNl cl9wYWdlKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KICAqCiAgKiBzZXRfcGFnZV9kaXJ0 eV9sb2NrKCkgaXMgdXNlZCBpbnRlcm5hbGx5LiBJZiBpbnN0ZWFkLCBzZXRfcGFnZV9kaXJ0eSgp IGlzCiAgKiByZXF1aXJlZCwgdGhlbiB0aGUgY2FsbGVyIHNob3VsZCBhKSB2ZXJpZnkgdGhhdCB0 aGlzIGlzIHJlYWxseSBjb3JyZWN0LAogICogYmVjYXVzZSBfbG9jaygpIGlzIHVzdWFsbHkgcmVx dWlyZWQsIGFuZCBiKSBoYW5kIGNvZGUgaXQ6Ci0gKiBzZXRfcGFnZV9kaXJ0eV9sb2NrKCksIHB1 dF91c2VyX3BhZ2UoKS4KKyAqIHNldF9wYWdlX2RpcnR5X2xvY2soKSwgdW5waW5fdXNlcl9wYWdl KCkuCiAgKgogICovCi12b2lkIHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0IHBhZ2Ug KipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMsCi0JCQkgICAgICAgYm9vbCBtYWtlX2RpcnR5 KQordm9pZCB1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKipwYWdlcywg dW5zaWduZWQgbG9uZyBucGFnZXMsCisJCQkJIGJvb2wgbWFrZV9kaXJ0eSkKIHsKIAl1bnNpZ25l ZCBsb25nIGluZGV4OwogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBwdXRfdXNlcl9wYWdlc19k aXJ0eV9sb2NrKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLAogCSAq LwogCiAJaWYgKCFtYWtlX2RpcnR5KSB7Ci0JCXB1dF91c2VyX3BhZ2VzKHBhZ2VzLCBucGFnZXMp OworCQl1bnBpbl91c2VyX3BhZ2VzKHBhZ2VzLCBucGFnZXMpOwogCQlyZXR1cm47CiAJfQogCkBA IC0yMDAsMjEgKzIwMCwyMSBAQCB2b2lkIHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2soc3RydWN0 IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMsCiAJCSAqLwogCQlpZiAoIVBhZ2VE aXJ0eShwYWdlKSkKIAkJCXNldF9wYWdlX2RpcnR5X2xvY2socGFnZSk7Ci0JCXB1dF91c2VyX3Bh Z2UocGFnZSk7CisJCXVucGluX3VzZXJfcGFnZShwYWdlKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9M KHB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2spOworRVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3Bh Z2VzX2RpcnR5X2xvY2spOwogCiAvKioKLSAqIHB1dF91c2VyX3BhZ2VzKCkgLSByZWxlYXNlIGFu IGFycmF5IG9mIGd1cC1waW5uZWQgcGFnZXMuCisgKiB1bnBpbl91c2VyX3BhZ2VzKCkgLSByZWxl YXNlIGFuIGFycmF5IG9mIGd1cC1waW5uZWQgcGFnZXMuCiAgKiBAcGFnZXM6ICBhcnJheSBvZiBw YWdlcyB0byBiZSBtYXJrZWQgZGlydHkgYW5kIHJlbGVhc2VkLgogICogQG5wYWdlczogbnVtYmVy IG9mIHBhZ2VzIGluIHRoZSBAcGFnZXMgYXJyYXkuCiAgKgotICogRm9yIGVhY2ggcGFnZSBpbiB0 aGUgQHBhZ2VzIGFycmF5LCByZWxlYXNlIHRoZSBwYWdlIHVzaW5nIHB1dF91c2VyX3BhZ2UoKS4K KyAqIEZvciBlYWNoIHBhZ2UgaW4gdGhlIEBwYWdlcyBhcnJheSwgcmVsZWFzZSB0aGUgcGFnZSB1 c2luZyB1bnBpbl91c2VyX3BhZ2UoKS4KICAqCi0gKiBQbGVhc2Ugc2VlIHRoZSBwdXRfdXNlcl9w YWdlKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAqIFBsZWFzZSBzZWUgdGhlIHVucGlu X3VzZXJfcGFnZSgpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCiAgKi8KLXZvaWQgcHV0X3Vz ZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMpCit2b2lk IHVucGluX3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFn ZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmRleDsKIApAQCAtMjI0LDkgKzIyNCw5IEBAIHZvaWQg cHV0X3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBucGFnZXMp CiAJICogc2luZ2xlIG9wZXJhdGlvbiB0byB0aGUgaGVhZCBwYWdlIHNob3VsZCBzdWZmaWNlLgog CSAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5wYWdlczsgaW5kZXgrKykKLQkJcHV0X3Vz ZXJfcGFnZShwYWdlc1tpbmRleF0pOworCQl1bnBpbl91c2VyX3BhZ2UocGFnZXNbaW5kZXhdKTsK IH0KLUVYUE9SVF9TWU1CT0wocHV0X3VzZXJfcGFnZXMpOworRVhQT1JUX1NZTUJPTCh1bnBpbl91 c2VyX3BhZ2VzKTsKIAogI2lmZGVmIENPTkZJR19NTVUKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbm9f cGFnZV90YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTE5NTMsNyArMTk1Myw3 IEBAIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIHVuZG9fZGV2X3BhZ2VtYXAoaW50ICpuciwg aW50IG5yX3N0YXJ0LAogCiAJCUNsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CiAJCWlmIChmbGFn cyAmIEZPTExfUElOKQotCQkJcHV0X3VzZXJfcGFnZShwYWdlKTsKKwkJCXVucGluX3VzZXJfcGFn ZShwYWdlKTsKIAkJZWxzZQogCQkJcHV0X3BhZ2UocGFnZSk7CiAJfQpkaWZmIC0tZ2l0IGEvbW0v Z3VwX2JlbmNobWFyay5jIGIvbW0vZ3VwX2JlbmNobWFyay5jCmluZGV4IDFhYzA4OWFkODE1Zi4u NzZkMzJkYjQ4YWY4IDEwMDY0NAotLS0gYS9tbS9ndXBfYmVuY2htYXJrLmMKKysrIGIvbW0vZ3Vw X2JlbmNobWFyay5jCkBAIC0zNSw3ICszNSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9iYWNrX3BhZ2Vz KGludCBjbWQsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAK IAljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKIAljYXNlIFBJTl9CRU5DSE1BUks6Ci0JCXB1dF91 c2VyX3BhZ2VzKHBhZ2VzLCBucl9wYWdlcyk7CisJCXVucGluX3VzZXJfcGFnZXMocGFnZXMsIG5y X3BhZ2VzKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vcHJvY2Vzc192bV9hY2Nl c3MuYyBiL21tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKaW5kZXggZmQyMGFiNjc1Yjg1Li5kZTQxZTgz MGNkYWMgMTAwNjQ0Ci0tLSBhL21tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKKysrIGIvbW0vcHJvY2Vz c192bV9hY2Nlc3MuYwpAQCAtMTI2LDggKzEyNiw4IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc192bV9y d19zaW5nbGVfdmVjKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcGEgKz0gcGlubmVkX3BhZ2VzICog UEFHRV9TSVpFOwogCiAJCS8qIElmIHZtX3dyaXRlIGlzIHNldCwgdGhlIHBhZ2VzIG5lZWQgdG8g YmUgbWFkZSBkaXJ0eTogKi8KLQkJcHV0X3VzZXJfcGFnZXNfZGlydHlfbG9jayhwcm9jZXNzX3Bh Z2VzLCBwaW5uZWRfcGFnZXMsCi0JCQkJCSAgdm1fd3JpdGUpOworCQl1bnBpbl91c2VyX3BhZ2Vz X2RpcnR5X2xvY2socHJvY2Vzc19wYWdlcywgcGlubmVkX3BhZ2VzLAorCQkJCQkgICAgdm1fd3Jp dGUpOwogCX0KIAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL25ldC94ZHAveGRwX3VtZW0uYyBi L25ldC94ZHAveGRwX3VtZW0uYwppbmRleCBkMDcxMDAzYjVlNzYuLmFjMTgyYzM4ZjdiMCAxMDA2 NDQKLS0tIGEvbmV0L3hkcC94ZHBfdW1lbS5jCisrKyBiL25ldC94ZHAveGRwX3VtZW0uYwpAQCAt MjEyLDcgKzIxMiw3IEBAIHN0YXRpYyBpbnQgeGRwX3VtZW1fbWFwX3BhZ2VzKHN0cnVjdCB4ZHBf dW1lbSAqdW1lbSkKIAogc3RhdGljIHZvaWQgeGRwX3VtZW1fdW5waW5fcGFnZXMoc3RydWN0IHhk cF91bWVtICp1bWVtKQogewotCXB1dF91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodW1lbS0+cGdzLCB1 bWVtLT5ucGdzLCB0cnVlKTsKKwl1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2sodW1lbS0+cGdz LCB1bWVtLT5ucGdzLCB0cnVlKTsKIAogCWtmcmVlKHVtZW0tPnBncyk7CiAJdW1lbS0+cGdzID0g TlVMTDsKLS0gCjIuMjQuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVs