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.3 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_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 931C8C0044C for ; Wed, 31 Oct 2018 08:20:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2F7532080A for ; Wed, 31 Oct 2018 08:20:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="RJTUP437" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F7532080A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727597AbeJaRRH (ORCPT ); Wed, 31 Oct 2018 13:17:07 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:33871 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726665AbeJaRRG (ORCPT ); Wed, 31 Oct 2018 13:17:06 -0400 Received: by mail-pg1-f193.google.com with SMTP id k1-v6so5591195pgq.1 for ; Wed, 31 Oct 2018 01:20:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EuyJeAjt0VzpU8BPMav3ygqDxkI3/Tz4YSQEhr29gtk=; b=RJTUP437sWK17zl93fXi0TDylzWa4+k64vu5s+v1WVQsf2etc3TbM92QfrSPdxZO1e i1CHmJSye8pZ2NBs8YRZo2F0JsVkr3cpiA4M4U+kYQKg3bZp+lMhD19YPEXRlkL0KCxU 60PnbEOp4XrIi4hkStiZsvdHvamS+xdSj76b8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EuyJeAjt0VzpU8BPMav3ygqDxkI3/Tz4YSQEhr29gtk=; b=g+Go0BChl174QCRy/fp/E+AIKkfVQyDta7jO51BEt3KNxL3hGj04+n5unNgGbbu/xT pp26djTMMUn47slGDEddiGW/lpfSOqoqIMXdMngKarFl0Ycqbh4GsAhWiSZnLBRaem0d scXvyIA6kfaSHVlAiVnt17dvkuI+XWf3ebW7aOHj9yfQRqOkovg/iNHDcSqimQQeI/lw NKXX7Iv2/md9zxC4KQ025C2p/W7mMURkZDOkCP4VXmPjJbn4n1bcDo2x+7zPbS4+vmPY HxTwTocTQHM7xhY+t3ezz5LL/UaIeh59yCGelnQJERZ4yrjO8lc2gb1dFusnpJapUqjM lWnQ== X-Gm-Message-State: AGRZ1gIcHAfn+enaqTFU13kMjS82uYPxfye4kW8EkQIoMGrGUYmm6mJE 8z98Bpkb/YO45fjvF8RvszXIAUPvuQ== X-Google-Smtp-Source: AJdET5fETXW8+jDNL4QL8Unz75pxaoAtCqJ6oAXZ8NgilsTzq56PUl2Bn2yfksLjsMIitGaX0rPQrA== X-Received: by 2002:a63:a84a:: with SMTP id i10mr2199477pgp.263.1540974000906; Wed, 31 Oct 2018 01:20:00 -0700 (PDT) Received: from vovoy-z840.tpe.corp.google.com ([2401:fa00:1:b:d89e:cfa6:3c8:e61b]) by smtp.gmail.com with ESMTPSA id f14-v6sm4833177pgr.87.2018.10.31.01.19.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Oct 2018 01:20:00 -0700 (PDT) From: Kuo-Hsin Yang To: linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-mm@kvack.org Cc: Kuo-Hsin Yang , Chris Wilson , Michal Hocko , Joonas Lahtinen , Peter Zijlstra , Andrew Morton , Dave Hansen Subject: [PATCH v3] mm, drm/i915: mark pinned shmemfs pages as unevictable Date: Wed, 31 Oct 2018 16:19:45 +0800 Message-Id: <20181031081945.207709-1-vovoy@chromium.org> X-Mailer: git-send-email 2.19.1.568.g152ad8e336-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The i915 driver uses shmemfs to allocate backing storage for gem objects. These shmemfs pages can be pinned (increased ref count) by shmem_read_mapping_page_gfp(). When a lot of pages are pinned, vmscan wastes a lot of time scanning these pinned pages. In some extreme case, all pages in the inactive anon lru are pinned, and only the inactive anon lru is scanned due to inactive_ratio, the system cannot swap and invokes the oom-killer. Mark these pinned pages as unevictable to speed up vmscan. Add check_move_lru_page() to move page to appropriate lru list. This patch was inspired by Chris Wilson's change [1]. [1]: https://patchwork.kernel.org/patch/9768741/ Cc: Chris Wilson Cc: Michal Hocko Cc: Joonas Lahtinen Cc: Peter Zijlstra Cc: Andrew Morton Cc: Dave Hansen Signed-off-by: Kuo-Hsin Yang --- The previous mapping_set_unevictable patch is worse on gem_syslatency because it defers to vmscan to move these pages to the unevictable list and the test measures latency to allocate 2MiB pages. This performance impact can be solved by explicit moving pages to the unevictable list in the i915 function. Chris, can you help to run the "igt/benchmarks/gem_syslatency -t 120 -b -m" test with this patch on your testing machine? I tried to run the test on a Celeron N4000, 4GB Ram machine. The mean value with this patch is similar to that with the mlock patch. x tip-mean.txt # current stock i915 + lock_vma-mean.txt # the old mlock patch * mapping-mean.txt # this patch N Min Max Median Avg Stddev x 60 548.898 2563.653 2149.573 1999.273 480.837 + 60 479.049 2119.902 1964.399 1893.226 314.736 * 60 455.358 3212.368 1991.308 1903.686 411.448 Changes for v3: Use check_move_lru_page instead of shmem_unlock_mapping to move pages to appropriate lru lists. Changes for v2: Squashed the two patches. Documentation/vm/unevictable-lru.rst | 4 +++- drivers/gpu/drm/i915/i915_gem.c | 20 +++++++++++++++++++- include/linux/swap.h | 1 + mm/vmscan.c | 20 +++++++++++++++++--- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Documentation/vm/unevictable-lru.rst b/Documentation/vm/unevictable-lru.rst index fdd84cb8d511..a812fb55136d 100644 --- a/Documentation/vm/unevictable-lru.rst +++ b/Documentation/vm/unevictable-lru.rst @@ -143,7 +143,7 @@ using a number of wrapper functions: Query the address space, and return true if it is completely unevictable. -These are currently used in two places in the kernel: +These are currently used in three places in the kernel: (1) By ramfs to mark the address spaces of its inodes when they are created, and this mark remains for the life of the inode. @@ -154,6 +154,8 @@ These are currently used in two places in the kernel: swapped out; the application must touch the pages manually if it wants to ensure they're in memory. + (3) By the i915 driver to mark pinned address space until it's unpinned. + Detecting Unevictable Pages --------------------------- diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 0c8aa57ce83b..6dc3ecef67e4 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2387,6 +2387,7 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj, { struct sgt_iter sgt_iter; struct page *page; + struct address_space *mapping; __i915_gem_object_release_shmem(obj, pages, true); @@ -2395,6 +2396,9 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj, if (i915_gem_object_needs_bit17_swizzle(obj)) i915_gem_object_save_bit_17_swizzle(obj, pages); + mapping = file_inode(obj->base.filp)->i_mapping; + mapping_clear_unevictable(mapping); + for_each_sgt_page(page, sgt_iter, pages) { if (obj->mm.dirty) set_page_dirty(page); @@ -2402,6 +2406,10 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj, if (obj->mm.madv == I915_MADV_WILLNEED) mark_page_accessed(page); + lock_page(page); + check_move_lru_page(page); + unlock_page(page); + put_page(page); } obj->mm.dirty = false; @@ -2559,6 +2567,7 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) * Fail silently without starting the shrinker */ mapping = obj->base.filp->f_mapping; + mapping_set_unevictable(mapping); noreclaim = mapping_gfp_constraint(mapping, ~__GFP_RECLAIM); noreclaim |= __GFP_NORETRY | __GFP_NOWARN; @@ -2630,6 +2639,10 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) } last_pfn = page_to_pfn(page); + lock_page(page); + check_move_lru_page(page); + unlock_page(page); + /* Check that the i965g/gm workaround works. */ WARN_ON((gfp & __GFP_DMA32) && (last_pfn >= 0x00100000UL)); } @@ -2673,8 +2686,13 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) err_sg: sg_mark_end(sg); err_pages: - for_each_sgt_page(page, sgt_iter, st) + mapping_clear_unevictable(mapping); + for_each_sgt_page(page, sgt_iter, st) { + lock_page(page); + check_move_lru_page(page); + unlock_page(page); put_page(page); + } sg_free_table(st); kfree(st); diff --git a/include/linux/swap.h b/include/linux/swap.h index d8a07a4f171d..a812f24d69f2 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -370,6 +370,7 @@ static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, extern int page_evictable(struct page *page); extern void check_move_unevictable_pages(struct page **, int nr_pages); +extern void check_move_lru_page(struct page *page); extern int kswapd_run(int nid); extern void kswapd_stop(int nid); diff --git a/mm/vmscan.c b/mm/vmscan.c index 62ac0c488624..2399ccaa15e7 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4184,12 +4184,11 @@ int page_evictable(struct page *page) #ifdef CONFIG_SHMEM /** - * check_move_unevictable_pages - check pages for evictability and move to appropriate zone lru list + * check_move_unevictable_pages - move evictable pages to appropriate evictable + * lru lists * @pages: array of pages to check * @nr_pages: number of pages to check * - * Checks pages for evictability and moves them to the appropriate lru list. - * * This function is only used for SysV IPC SHM_UNLOCK. */ void check_move_unevictable_pages(struct page **pages, int nr_pages) @@ -4234,3 +4233,18 @@ void check_move_unevictable_pages(struct page **pages, int nr_pages) } } #endif /* CONFIG_SHMEM */ + +/** + * check_move_lru_page - check page for evictability and move it to + * appropriate zone lru list + * @page: page to be move to appropriate lru list + * + * If this function fails to isolate an unevictable page, vmscan will handle it + * when it attempts to reclaim the page. + */ +void check_move_lru_page(struct page *page) +{ + if (!isolate_lru_page(page)) + putback_lru_page(page); +} +EXPORT_SYMBOL(check_move_lru_page); -- 2.19.1.568.g152ad8e336-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kuo-Hsin Yang Subject: [PATCH v3] mm, drm/i915: mark pinned shmemfs pages as unevictable Date: Wed, 31 Oct 2018 16:19:45 +0800 Message-ID: <20181031081945.207709-1-vovoy@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8204E6E241 for ; Wed, 31 Oct 2018 08:20:01 +0000 (UTC) Received: by mail-pg1-x544.google.com with SMTP id f8-v6so7009163pgq.5 for ; Wed, 31 Oct 2018 01:20:01 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-mm@kvack.org Cc: Michal Hocko , Peter Zijlstra , Dave Hansen , Andrew Morton List-Id: intel-gfx@lists.freedesktop.org VGhlIGk5MTUgZHJpdmVyIHVzZXMgc2htZW1mcyB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JhZ2Ug Zm9yIGdlbQpvYmplY3RzLiBUaGVzZSBzaG1lbWZzIHBhZ2VzIGNhbiBiZSBwaW5uZWQgKGluY3Jl YXNlZCByZWYgY291bnQpIGJ5CnNobWVtX3JlYWRfbWFwcGluZ19wYWdlX2dmcCgpLiBXaGVuIGEg bG90IG9mIHBhZ2VzIGFyZSBwaW5uZWQsIHZtc2Nhbgp3YXN0ZXMgYSBsb3Qgb2YgdGltZSBzY2Fu bmluZyB0aGVzZSBwaW5uZWQgcGFnZXMuIEluIHNvbWUgZXh0cmVtZSBjYXNlLAphbGwgcGFnZXMg aW4gdGhlIGluYWN0aXZlIGFub24gbHJ1IGFyZSBwaW5uZWQsIGFuZCBvbmx5IHRoZSBpbmFjdGl2 ZQphbm9uIGxydSBpcyBzY2FubmVkIGR1ZSB0byBpbmFjdGl2ZV9yYXRpbywgdGhlIHN5c3RlbSBj YW5ub3Qgc3dhcCBhbmQKaW52b2tlcyB0aGUgb29tLWtpbGxlci4gTWFyayB0aGVzZSBwaW5uZWQg cGFnZXMgYXMgdW5ldmljdGFibGUgdG8gc3BlZWQKdXAgdm1zY2FuLgoKQWRkIGNoZWNrX21vdmVf bHJ1X3BhZ2UoKSB0byBtb3ZlIHBhZ2UgdG8gYXBwcm9wcmlhdGUgbHJ1IGxpc3QuCgpUaGlzIHBh dGNoIHdhcyBpbnNwaXJlZCBieSBDaHJpcyBXaWxzb24ncyBjaGFuZ2UgWzFdLgoKWzFdOiBodHRw czovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzk3Njg3NDEvCgpDYzogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNl LmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNv bT4KQ2M6IFBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KQ2M6IEFuZHJldyBN b3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+CkNjOiBEYXZlIEhhbnNlbiA8ZGF2ZS5o YW5zZW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBLdW8tSHNpbiBZYW5nIDx2b3ZveUBjaHJv bWl1bS5vcmc+Ci0tLQpUaGUgcHJldmlvdXMgbWFwcGluZ19zZXRfdW5ldmljdGFibGUgcGF0Y2gg aXMgd29yc2Ugb24gZ2VtX3N5c2xhdGVuY3kKYmVjYXVzZSBpdCBkZWZlcnMgdG8gdm1zY2FuIHRv IG1vdmUgdGhlc2UgcGFnZXMgdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QKYW5kIHRoZSB0ZXN0IG1l YXN1cmVzIGxhdGVuY3kgdG8gYWxsb2NhdGUgMk1pQiBwYWdlcy4gVGhpcyBwZXJmb3JtYW5jZQpp bXBhY3QgY2FuIGJlIHNvbHZlZCBieSBleHBsaWNpdCBtb3ZpbmcgcGFnZXMgdG8gdGhlIHVuZXZp Y3RhYmxlIGxpc3QgaW4KdGhlIGk5MTUgZnVuY3Rpb24uCgpDaHJpcywgY2FuIHlvdSBoZWxwIHRv IHJ1biB0aGUgImlndC9iZW5jaG1hcmtzL2dlbV9zeXNsYXRlbmN5IC10IDEyMCAtYiAtbSIKdGVz dCB3aXRoIHRoaXMgcGF0Y2ggb24geW91ciB0ZXN0aW5nIG1hY2hpbmU/IEkgdHJpZWQgdG8gcnVu IHRoZSB0ZXN0IG9uCmEgQ2VsZXJvbiBONDAwMCwgNEdCIFJhbSBtYWNoaW5lLiBUaGUgbWVhbiB2 YWx1ZSB3aXRoIHRoaXMgcGF0Y2ggaXMKc2ltaWxhciB0byB0aGF0IHdpdGggdGhlIG1sb2NrIHBh dGNoLgoKeCB0aXAtbWVhbi50eHQgIyBjdXJyZW50IHN0b2NrIGk5MTUKKyBsb2NrX3ZtYS1tZWFu LnR4dCAjIHRoZSBvbGQgbWxvY2sgcGF0Y2gKKiBtYXBwaW5nLW1lYW4udHh0ICMgdGhpcyBwYXRj aAoKICAgTiAgICAgICAgTWluICAgICAgICBNYXggICAgIE1lZGlhbiAgICAgICAgQXZnICAgICBT dGRkZXYKeCA2MCAgICA1NDguODk4ICAgMjU2My42NTMgICAyMTQ5LjU3MyAgIDE5OTkuMjczICAg IDQ4MC44MzcKKyA2MCAgICA0NzkuMDQ5ICAgMjExOS45MDIgICAxOTY0LjM5OSAgIDE4OTMuMjI2 ICAgIDMxNC43MzYKKiA2MCAgICA0NTUuMzU4ICAgMzIxMi4zNjggICAxOTkxLjMwOCAgIDE5MDMu Njg2ICAgIDQxMS40NDgKCkNoYW5nZXMgZm9yIHYzOgogVXNlIGNoZWNrX21vdmVfbHJ1X3BhZ2Ug aW5zdGVhZCBvZiBzaG1lbV91bmxvY2tfbWFwcGluZyB0byBtb3ZlIHBhZ2VzCiB0byBhcHByb3By aWF0ZSBscnUgbGlzdHMuCgpDaGFuZ2VzIGZvciB2MjoKIFNxdWFzaGVkIHRoZSB0d28gcGF0Y2hl cy4KCiBEb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS5yc3QgfCAgNCArKystCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgfCAyMCArKysrKysrKysrKysrKysrKysr LQogaW5jbHVkZS9saW51eC9zd2FwLmggICAgICAgICAgICAgICAgIHwgIDEgKwogbW0vdm1zY2Fu LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgKysrKysrKysrKysrKysrKystLS0KIDQg ZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS5yc3QgYi9Eb2N1bWVudGF0aW9u L3ZtL3VuZXZpY3RhYmxlLWxydS5yc3QKaW5kZXggZmRkODRjYjhkNTExLi5hODEyZmI1NTEzNmQg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnJzdAorKysgYi9E b2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS5yc3QKQEAgLTE0Myw3ICsxNDMsNyBAQCB1 c2luZyBhIG51bWJlciBvZiB3cmFwcGVyIGZ1bmN0aW9uczoKIAlRdWVyeSB0aGUgYWRkcmVzcyBz cGFjZSwgYW5kIHJldHVybiB0cnVlIGlmIGl0IGlzIGNvbXBsZXRlbHkKIAl1bmV2aWN0YWJsZS4K IAotVGhlc2UgYXJlIGN1cnJlbnRseSB1c2VkIGluIHR3byBwbGFjZXMgaW4gdGhlIGtlcm5lbDoK K1RoZXNlIGFyZSBjdXJyZW50bHkgdXNlZCBpbiB0aHJlZSBwbGFjZXMgaW4gdGhlIGtlcm5lbDoK IAogICgxKSBCeSByYW1mcyB0byBtYXJrIHRoZSBhZGRyZXNzIHNwYWNlcyBvZiBpdHMgaW5vZGVz IHdoZW4gdGhleSBhcmUgY3JlYXRlZCwKICAgICAgYW5kIHRoaXMgbWFyayByZW1haW5zIGZvciB0 aGUgbGlmZSBvZiB0aGUgaW5vZGUuCkBAIC0xNTQsNiArMTU0LDggQEAgVGhlc2UgYXJlIGN1cnJl bnRseSB1c2VkIGluIHR3byBwbGFjZXMgaW4gdGhlIGtlcm5lbDoKICAgICAgc3dhcHBlZCBvdXQ7 IHRoZSBhcHBsaWNhdGlvbiBtdXN0IHRvdWNoIHRoZSBwYWdlcyBtYW51YWxseSBpZiBpdCB3YW50 cyB0bwogICAgICBlbnN1cmUgdGhleSdyZSBpbiBtZW1vcnkuCiAKKyAoMykgQnkgdGhlIGk5MTUg ZHJpdmVyIHRvIG1hcmsgcGlubmVkIGFkZHJlc3Mgc3BhY2UgdW50aWwgaXQncyB1bnBpbm5lZC4K KwogCiBEZXRlY3RpbmcgVW5ldmljdGFibGUgUGFnZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMGM4YWE1N2NlODNiLi42ZGMzZWNlZjY3 ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMjM4Nyw2ICsyMzg3LDcgQEAgaTkxNV9n ZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IHsKIAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKIAlfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNl X3NobWVtKG9iaiwgcGFnZXMsIHRydWUpOwogCkBAIC0yMzk1LDYgKzIzOTYsOSBAQCBpOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAog CWlmIChpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKQogCQlpOTE1X2dl bV9vYmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShvYmosIHBhZ2VzKTsKIAorCW1hcHBpbmcgPSBm aWxlX2lub2RlKG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOworCW1hcHBpbmdfY2xlYXJfdW5l dmljdGFibGUobWFwcGluZyk7CisKIAlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwg cGFnZXMpIHsKIAkJaWYgKG9iai0+bW0uZGlydHkpCiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsK QEAgLTI0MDIsNiArMjQwNiwxMCBAQCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQlpZiAob2JqLT5tbS5tYWR2ID09IEk5MTVf TUFEVl9XSUxMTkVFRCkKIAkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKIAorCQlsb2NrX3Bh Z2UocGFnZSk7CisJCWNoZWNrX21vdmVfbHJ1X3BhZ2UocGFnZSk7CisJCXVubG9ja19wYWdlKHBh Z2UpOworCiAJCXB1dF9wYWdlKHBhZ2UpOwogCX0KIAlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CkBA IC0yNTU5LDYgKzI1NjcsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNf Z3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJICogRmFpbCBzaWxlbnRseSB3 aXRob3V0IHN0YXJ0aW5nIHRoZSBzaHJpbmtlcgogCSAqLwogCW1hcHBpbmcgPSBvYmotPmJhc2Uu ZmlscC0+Zl9tYXBwaW5nOworCW1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKG1hcHBpbmcpOwogCW5v cmVjbGFpbSA9IG1hcHBpbmdfZ2ZwX2NvbnN0cmFpbnQobWFwcGluZywgfl9fR0ZQX1JFQ0xBSU0p OwogCW5vcmVjbGFpbSB8PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwogCkBAIC0yNjMw LDYgKzI2MzksMTAgQEAgc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQl9CiAJCWxhc3RfcGZuID0gcGFnZV90 b19wZm4ocGFnZSk7CiAKKwkJbG9ja19wYWdlKHBhZ2UpOworCQljaGVja19tb3ZlX2xydV9wYWdl KHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwogCQkvKiBDaGVjayB0aGF0IHRoZSBpOTY1 Zy9nbSB3b3JrYXJvdW5kIHdvcmtzLiAqLwogCQlXQVJOX09OKChnZnAgJiBfX0dGUF9ETUEzMikg JiYgKGxhc3RfcGZuID49IDB4MDAxMDAwMDBVTCkpOwogCX0KQEAgLTI2NzMsOCArMjY4NiwxMyBA QCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCiBlcnJfc2c6CiAJc2dfbWFya19lbmQoc2cpOwogZXJyX3BhZ2Vz OgotCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkKKwltYXBwaW5nX2NsZWFy X3VuZXZpY3RhYmxlKG1hcHBpbmcpOworCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVy LCBzdCkgeworCQlsb2NrX3BhZ2UocGFnZSk7CisJCWNoZWNrX21vdmVfbHJ1X3BhZ2UocGFnZSk7 CisJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwdXRfcGFnZShwYWdlKTsKKwl9CiAJc2dfZnJlZV90 YWJsZShzdCk7CiAJa2ZyZWUoc3QpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAu aCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGQ4YTA3YTRmMTcxZC4uYTgxMmYyNGQ2OWYy IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3 YXAuaApAQCAtMzcwLDYgKzM3MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5vZGVfcmVjbGFpbShz dHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBtYXNrLAogCiBleHRlcm4gaW50IHBhZ2Vf ZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIGNoZWNrX21vdmVfdW5l dmljdGFibGVfcGFnZXMoc3RydWN0IHBhZ2UgKiosIGludCBucl9wYWdlcyk7CitleHRlcm4gdm9p ZCBjaGVja19tb3ZlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAogZXh0ZXJuIGludCBr c3dhcGRfcnVuKGludCBuaWQpOwogZXh0ZXJuIHZvaWQga3N3YXBkX3N0b3AoaW50IG5pZCk7CmRp ZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDYyYWMwYzQ4ODYyNC4u MjM5OWNjYWExNWU3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpA QCAtNDE4NCwxMiArNDE4NCwxMSBAQCBpbnQgcGFnZV9ldmljdGFibGUoc3RydWN0IHBhZ2UgKnBh Z2UpCiAKICNpZmRlZiBDT05GSUdfU0hNRU0KIC8qKgotICogY2hlY2tfbW92ZV91bmV2aWN0YWJs ZV9wYWdlcyAtIGNoZWNrIHBhZ2VzIGZvciBldmljdGFiaWxpdHkgYW5kIG1vdmUgdG8gYXBwcm9w cmlhdGUgem9uZSBscnUgbGlzdAorICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlcyAtIG1v dmUgZXZpY3RhYmxlIHBhZ2VzIHRvIGFwcHJvcHJpYXRlIGV2aWN0YWJsZQorICogbHJ1IGxpc3Rz CiAgKiBAcGFnZXM6CWFycmF5IG9mIHBhZ2VzIHRvIGNoZWNrCiAgKiBAbnJfcGFnZXM6CW51bWJl ciBvZiBwYWdlcyB0byBjaGVjawogICoKLSAqIENoZWNrcyBwYWdlcyBmb3IgZXZpY3RhYmlsaXR5 IGFuZCBtb3ZlcyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBscnUgbGlzdC4KLSAqCiAgKiBUaGlz IGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3IgU3lzViBJUEMgU0hNX1VOTE9DSy4KICAqLwogdm9p ZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBu cl9wYWdlcykKQEAgLTQyMzQsMyArNDIzMywxOCBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFi bGVfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKQogCX0KIH0KICNlbmRp ZiAvKiBDT05GSUdfU0hNRU0gKi8KKworLyoqCisgKiBjaGVja19tb3ZlX2xydV9wYWdlIC0gY2hl Y2sgcGFnZSBmb3IgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlIGl0IHRvCisgKiBhcHByb3ByaWF0ZSB6 b25lIGxydSBsaXN0CisgKiBAcGFnZTogcGFnZSB0byBiZSBtb3ZlIHRvIGFwcHJvcHJpYXRlIGxy dSBsaXN0CisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscyB0byBpc29sYXRlIGFuIHVuZXZp Y3RhYmxlIHBhZ2UsIHZtc2NhbiB3aWxsIGhhbmRsZSBpdAorICogd2hlbiBpdCBhdHRlbXB0cyB0 byByZWNsYWltIHRoZSBwYWdlLgorICovCit2b2lkIGNoZWNrX21vdmVfbHJ1X3BhZ2Uoc3RydWN0 IHBhZ2UgKnBhZ2UpCit7CisJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQorCQlwdXRiYWNr X2xydV9wYWdlKHBhZ2UpOworfQorRVhQT1JUX1NZTUJPTChjaGVja19tb3ZlX2xydV9wYWdlKTsK LS0gCjIuMTkuMS41NjguZzE1MmFkOGUzMzYtZ29vZwoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==