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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 3A760C47082 for ; Thu, 3 Jun 2021 16:55:30 +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 08481613B1 for ; Thu, 3 Jun 2021 16:55:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 08481613B1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.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 67DAB6F4E2; Thu, 3 Jun 2021 16:55:12 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0E8AD6E85E; Thu, 3 Jun 2021 16:55:06 +0000 (UTC) IronPort-SDR: iAAtAmj/oajWICkSko7+xX7y8rfxs3/4yxP8IoOd0eINydMY1Z4V7Pk5AVm3WCKUXXbZYKz6bj ci7GD5nbCdZg== X-IronPort-AV: E=McAfee;i="6200,9189,10004"; a="184464192" X-IronPort-AV: E=Sophos;i="5.83,246,1616482800"; d="scan'208";a="184464192" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2021 09:54:51 -0700 IronPort-SDR: LpQn5R0AG6s55qOH8fdeouerzNCuKWNGkjC5oZFJace/6iJ2PXO9drNdwSUIu9VZbqIMPHbo1K 3uxVAXFMKL9w== X-IronPort-AV: E=Sophos;i="5.83,246,1616482800"; d="scan'208";a="400643670" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.202]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2021 09:54:50 -0700 From: Lucas De Marchi To: intel-gfx@lists.freedesktop.org Subject: [PATCH v3 1/7] drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER Date: Thu, 3 Jun 2021 09:54:22 -0700 Message-Id: <20210603165428.3625495-2-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603165428.3625495-1-lucas.demarchi@intel.com> References: <20210603165428.3625495-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This was done by the following semantic patch: @@ expression i915; @@ - INTEL_GEN(i915) + GRAPHICS_VER(i915) @@ expression i915; expression E; @@ - INTEL_GEN(i915) >= E + GRAPHICS_VER(i915) >= E @@ expression dev_priv; expression E; @@ - !IS_GEN(dev_priv, E) + GRAPHICS_VER(dev_priv) != E @@ expression dev_priv; expression E; @@ - IS_GEN(dev_priv, E) + GRAPHICS_VER(dev_priv) == E @@ expression dev_priv; expression from, until; @@ - IS_GEN_RANGE(dev_priv, from, until) + IS_GRAPHICS_VER(dev_priv, from, until) @def@ expression E; identifier id =~ "^gen$"; @@ - id = GRAPHICS_VER(E) + ver = GRAPHICS_VER(E) @@ identifier def.id; @@ - id + ver It also takes care of renaming the variable we assign to GRAPHICS_VER() so to use "ver" rather than "gen". Signed-off-by: Lucas De Marchi Reviewed-by: Matt Roper --- drivers/gpu/drm/i915/gt/debugfs_gt_pm.c | 38 +++++------ drivers/gpu/drm/i915/gt/gen2_engine_cs.c | 2 +- drivers/gpu/drm/i915/gt/gen8_engine_cs.c | 2 +- drivers/gpu/drm/i915/gt/gen8_ppgtt.c | 2 +- drivers/gpu/drm/i915/gt/intel_context_sseu.c | 2 +- drivers/gpu/drm/i915/gt/intel_engine_cs.c | 54 +++++++-------- .../drm/i915/gt/intel_execlists_submission.c | 18 ++--- drivers/gpu/drm/i915/gt/intel_ggtt.c | 18 ++--- drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 34 +++++----- drivers/gpu/drm/i915/gt/intel_gt.c | 27 ++++---- .../gpu/drm/i915/gt/intel_gt_clock_utils.c | 12 ++-- drivers/gpu/drm/i915/gt/intel_gt_irq.c | 6 +- drivers/gpu/drm/i915/gt/intel_gt_pm_irq.c | 10 +-- drivers/gpu/drm/i915/gt/intel_gtt.c | 14 ++-- drivers/gpu/drm/i915/gt/intel_llc.c | 6 +- drivers/gpu/drm/i915/gt/intel_lrc.c | 46 ++++++------- drivers/gpu/drm/i915/gt/intel_mocs.c | 8 +-- drivers/gpu/drm/i915/gt/intel_ppgtt.c | 6 +- drivers/gpu/drm/i915/gt/intel_rc6.c | 16 ++--- drivers/gpu/drm/i915/gt/intel_renderstate.c | 2 +- drivers/gpu/drm/i915/gt/intel_reset.c | 14 ++-- .../gpu/drm/i915/gt/intel_ring_submission.c | 64 +++++++++--------- drivers/gpu/drm/i915/gt/intel_rps.c | 60 ++++++++--------- drivers/gpu/drm/i915/gt/intel_sseu.c | 14 ++-- drivers/gpu/drm/i915/gt/intel_workarounds.c | 66 +++++++++---------- drivers/gpu/drm/i915/gt/selftest_engine_cs.c | 6 +- drivers/gpu/drm/i915/gt/selftest_engine_pm.c | 2 +- drivers/gpu/drm/i915/gt/selftest_execlists.c | 4 +- drivers/gpu/drm/i915/gt/selftest_gt_pm.c | 8 +-- drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 8 +-- drivers/gpu/drm/i915/gt/selftest_llc.c | 4 +- drivers/gpu/drm/i915/gt/selftest_lrc.c | 8 +-- drivers/gpu/drm/i915/gt/selftest_mocs.c | 2 +- drivers/gpu/drm/i915/gt/selftest_rc6.c | 4 +- .../drm/i915/gt/selftest_ring_submission.c | 6 +- drivers/gpu/drm/i915/gt/selftest_rps.c | 16 ++--- drivers/gpu/drm/i915/gt/selftest_timeline.c | 6 +- .../gpu/drm/i915/gt/selftest_workarounds.c | 8 +-- drivers/gpu/drm/i915/gt/uc/intel_guc.c | 4 +- drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c | 2 +- drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 2 +- .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-- drivers/gpu/drm/i915/gt/uc/intel_huc.c | 2 +- drivers/gpu/drm/i915/gt/uc/intel_uc.c | 4 +- 44 files changed, 324 insertions(+), 323 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/debugfs_gt_pm.c b/drivers/gpu/drm/i915/gt/debugfs_gt_pm.c index d4f4452ce5ed..0389bceebd06 100644 --- a/drivers/gpu/drm/i915/gt/debugfs_gt_pm.c +++ b/drivers/gpu/drm/i915/gt/debugfs_gt_pm.c @@ -85,14 +85,14 @@ static int gen6_drpc(struct seq_file *m) gt_core_status = intel_uncore_read_fw(uncore, GEN6_GT_CORE_STATUS); rcctl1 = intel_uncore_read(uncore, GEN6_RC_CONTROL); - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { gen9_powergate_enable = intel_uncore_read(uncore, GEN9_PG_ENABLE); gen9_powergate_status = intel_uncore_read(uncore, GEN9_PWRGT_DOMAIN_STATUS); } - if (INTEL_GEN(i915) <= 7) + if (GRAPHICS_VER(i915) <= 7) sandybridge_pcode_read(i915, GEN6_PCODE_READ_RC6VIDS, &rc6vids, NULL); @@ -100,7 +100,7 @@ static int gen6_drpc(struct seq_file *m) yesno(rcctl1 & GEN6_RC_CTL_RC1e_ENABLE)); seq_printf(m, "RC6 Enabled: %s\n", yesno(rcctl1 & GEN6_RC_CTL_RC6_ENABLE)); - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { seq_printf(m, "Render Well Gating Enabled: %s\n", yesno(gen9_powergate_enable & GEN9_RENDER_PG_ENABLE)); seq_printf(m, "Media Well Gating Enabled: %s\n", @@ -134,7 +134,7 @@ static int gen6_drpc(struct seq_file *m) seq_printf(m, "Core Power Down: %s\n", yesno(gt_core_status & GEN6_CORE_CPD_STATE_MASK)); - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { seq_printf(m, "Render Power Well: %s\n", (gen9_powergate_status & GEN9_PWRGT_RENDER_STATUS_MASK) ? "Up" : "Down"); @@ -150,7 +150,7 @@ static int gen6_drpc(struct seq_file *m) print_rc6_res(m, "RC6+ residency since boot:", GEN6_GT_GFX_RC6p); print_rc6_res(m, "RC6++ residency since boot:", GEN6_GT_GFX_RC6pp); - if (INTEL_GEN(i915) <= 7) { + if (GRAPHICS_VER(i915) <= 7) { seq_printf(m, "RC6 voltage: %dmV\n", GEN6_DECODE_RC6_VID(((rc6vids >> 0) & 0xff))); seq_printf(m, "RC6+ voltage: %dmV\n", @@ -250,7 +250,7 @@ static int frequency_show(struct seq_file *m, void *unused) wakeref = intel_runtime_pm_get(uncore->rpm); - if (IS_GEN(i915, 5)) { + if (GRAPHICS_VER(i915) == 5) { u16 rgvswctl = intel_uncore_read16(uncore, MEMSWCTL); u16 rgvstat = intel_uncore_read16(uncore, MEMSTAT_ILK); @@ -296,7 +296,7 @@ static int frequency_show(struct seq_file *m, void *unused) seq_printf(m, "efficient (RPe) frequency: %d MHz\n", intel_gpu_freq(rps, rps->efficient_freq)); - } else if (INTEL_GEN(i915) >= 6) { + } else if (GRAPHICS_VER(i915) >= 6) { u32 rp_state_limits; u32 gt_perf_status; u32 rp_state_cap; @@ -321,7 +321,7 @@ static int frequency_show(struct seq_file *m, void *unused) intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL); reqf = intel_uncore_read(uncore, GEN6_RPNSWREQ); - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { reqf >>= 23; } else { reqf &= ~GEN6_TURBO_DISABLE; @@ -354,7 +354,7 @@ static int frequency_show(struct seq_file *m, void *unused) intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL); - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { pm_ier = intel_uncore_read(uncore, GEN11_GPM_WGBOXPERF_INTR_ENABLE); pm_imr = intel_uncore_read(uncore, GEN11_GPM_WGBOXPERF_INTR_MASK); /* @@ -363,7 +363,7 @@ static int frequency_show(struct seq_file *m, void *unused) */ pm_isr = 0; pm_iir = 0; - } else if (INTEL_GEN(i915) >= 8) { + } else if (GRAPHICS_VER(i915) >= 8) { pm_ier = intel_uncore_read(uncore, GEN8_GT_IER(2)); pm_imr = intel_uncore_read(uncore, GEN8_GT_IMR(2)); pm_isr = intel_uncore_read(uncore, GEN8_GT_ISR(2)); @@ -386,14 +386,14 @@ static int frequency_show(struct seq_file *m, void *unused) seq_printf(m, "PM IER=0x%08x IMR=0x%08x, MASK=0x%08x\n", pm_ier, pm_imr, pm_mask); - if (INTEL_GEN(i915) <= 10) + if (GRAPHICS_VER(i915) <= 10) seq_printf(m, "PM ISR=0x%08x IIR=0x%08x\n", pm_isr, pm_iir); seq_printf(m, "pm_intrmsk_mbz: 0x%08x\n", rps->pm_intrmsk_mbz); seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status); seq_printf(m, "Render p-state ratio: %d\n", - (gt_perf_status & (INTEL_GEN(i915) >= 9 ? 0x1ff00 : 0xff00)) >> 8); + (gt_perf_status & (GRAPHICS_VER(i915) >= 9 ? 0x1ff00 : 0xff00)) >> 8); seq_printf(m, "Render p-state VID: %d\n", gt_perf_status & 0xff); seq_printf(m, "Render p-state limit: %d\n", @@ -437,20 +437,20 @@ static int frequency_show(struct seq_file *m, void *unused) max_freq = (IS_GEN9_LP(i915) ? rp_state_cap >> 0 : rp_state_cap >> 16) & 0xff; max_freq *= (IS_GEN9_BC(i915) || - INTEL_GEN(i915) >= 10 ? GEN9_FREQ_SCALER : 1); + GRAPHICS_VER(i915) >= 10 ? GEN9_FREQ_SCALER : 1); seq_printf(m, "Lowest (RPN) frequency: %dMHz\n", intel_gpu_freq(rps, max_freq)); max_freq = (rp_state_cap & 0xff00) >> 8; max_freq *= (IS_GEN9_BC(i915) || - INTEL_GEN(i915) >= 10 ? GEN9_FREQ_SCALER : 1); + GRAPHICS_VER(i915) >= 10 ? GEN9_FREQ_SCALER : 1); seq_printf(m, "Nominal (RP1) frequency: %dMHz\n", intel_gpu_freq(rps, max_freq)); max_freq = (IS_GEN9_LP(i915) ? rp_state_cap >> 16 : rp_state_cap >> 0) & 0xff; max_freq *= (IS_GEN9_BC(i915) || - INTEL_GEN(i915) >= 10 ? GEN9_FREQ_SCALER : 1); + GRAPHICS_VER(i915) >= 10 ? GEN9_FREQ_SCALER : 1); seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n", intel_gpu_freq(rps, max_freq)); seq_printf(m, "Max overclocked frequency: %dMHz\n", @@ -488,7 +488,7 @@ static int llc_show(struct seq_file *m, void *data) { struct intel_gt *gt = m->private; struct drm_i915_private *i915 = gt->i915; - const bool edram = INTEL_GEN(i915) > 8; + const bool edram = GRAPHICS_VER(i915) > 8; struct intel_rps *rps = >->rps; unsigned int max_gpu_freq, min_gpu_freq; intel_wakeref_t wakeref; @@ -500,7 +500,7 @@ static int llc_show(struct seq_file *m, void *data) min_gpu_freq = rps->min_freq; max_gpu_freq = rps->max_freq; - if (IS_GEN9_BC(i915) || INTEL_GEN(i915) >= 10) { + if (IS_GEN9_BC(i915) || GRAPHICS_VER(i915) >= 10) { /* Convert GT frequency to 50 HZ units */ min_gpu_freq /= GEN9_FREQ_SCALER; max_gpu_freq /= GEN9_FREQ_SCALER; @@ -518,7 +518,7 @@ static int llc_show(struct seq_file *m, void *data) intel_gpu_freq(rps, (gpu_freq * (IS_GEN9_BC(i915) || - INTEL_GEN(i915) >= 10 ? + GRAPHICS_VER(i915) >= 10 ? GEN9_FREQ_SCALER : 1))), ((ia_freq >> 0) & 0xff) * 100, ((ia_freq >> 8) & 0xff) * 100); @@ -580,7 +580,7 @@ static int rps_boost_show(struct seq_file *m, void *data) seq_printf(m, "Wait boosts: %d\n", READ_ONCE(rps->boosts)); - if (INTEL_GEN(i915) >= 6 && intel_rps_is_active(rps)) { + if (GRAPHICS_VER(i915) >= 6 && intel_rps_is_active(rps)) { struct intel_uncore *uncore = gt->uncore; u32 rpup, rpupei; u32 rpdown, rpdownei; diff --git a/drivers/gpu/drm/i915/gt/gen2_engine_cs.c b/drivers/gpu/drm/i915/gt/gen2_engine_cs.c index 9646200d2792..61383830505e 100644 --- a/drivers/gpu/drm/i915/gt/gen2_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/gen2_engine_cs.c @@ -74,7 +74,7 @@ int gen4_emit_flush_rcs(struct i915_request *rq, u32 mode) cmd = MI_FLUSH; if (mode & EMIT_INVALIDATE) { cmd |= MI_EXE_FLUSH; - if (IS_G4X(rq->engine->i915) || IS_GEN(rq->engine->i915, 5)) + if (IS_G4X(rq->engine->i915) || GRAPHICS_VER(rq->engine->i915) == 5) cmd |= MI_INVALIDATE_ISP; } diff --git a/drivers/gpu/drm/i915/gt/gen8_engine_cs.c b/drivers/gpu/drm/i915/gt/gen8_engine_cs.c index 732c2ed1d933..94e0a5669f90 100644 --- a/drivers/gpu/drm/i915/gt/gen8_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/gen8_engine_cs.c @@ -38,7 +38,7 @@ int gen8_emit_flush_rcs(struct i915_request *rq, u32 mode) * On GEN9: before VF_CACHE_INVALIDATE we need to emit a NULL * pipe control. */ - if (IS_GEN(rq->engine->i915, 9)) + if (GRAPHICS_VER(rq->engine->i915) == 9) vf_flush_wa = true; /* WaForGAMHang:kbl */ diff --git a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c index e3a8924d2286..21c8b7350b7a 100644 --- a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c @@ -709,7 +709,7 @@ struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt) * * Gen12 has inherited the same read-only fault issue from gen11. */ - ppgtt->vm.has_read_only = !IS_GEN_RANGE(gt->i915, 11, 12); + ppgtt->vm.has_read_only = !IS_GRAPHICS_VER(gt->i915, 11, 12); if (HAS_LMEM(gt->i915)) ppgtt->vm.alloc_pt_dma = alloc_pt_lmem; diff --git a/drivers/gpu/drm/i915/gt/intel_context_sseu.c b/drivers/gpu/drm/i915/gt/intel_context_sseu.c index 8dfd8f656aaa..e86d8255feec 100644 --- a/drivers/gpu/drm/i915/gt/intel_context_sseu.c +++ b/drivers/gpu/drm/i915/gt/intel_context_sseu.c @@ -76,7 +76,7 @@ intel_context_reconfigure_sseu(struct intel_context *ce, { int ret; - GEM_BUG_ON(INTEL_GEN(ce->engine->i915) < 8); + GEM_BUG_ON(GRAPHICS_VER(ce->engine->i915) < 8); ret = intel_context_lock_pinned(ce); if (ret) diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c index 3f9a811eb02b..54baf17b81b6 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c @@ -240,10 +240,10 @@ void intel_engine_set_hwsp_writemask(struct intel_engine_cs *engine, u32 mask) * Though they added more rings on g4x/ilk, they did not add * per-engine HWSTAM until gen6. */ - if (INTEL_GEN(engine->i915) < 6 && engine->class != RENDER_CLASS) + if (GRAPHICS_VER(engine->i915) < 6 && engine->class != RENDER_CLASS) return; - if (INTEL_GEN(engine->i915) >= 3) + if (GRAPHICS_VER(engine->i915) >= 3) ENGINE_WRITE(engine, RING_HWSTAM, mask); else ENGINE_WRITE16(engine, RING_HWSTAM, mask); @@ -315,7 +315,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id) CONFIG_DRM_I915_TIMESLICE_DURATION; /* Override to uninterruptible for OpenCL workloads. */ - if (INTEL_GEN(i915) == 12 && engine->class == RENDER_CLASS) + if (GRAPHICS_VER(i915) == 12 && engine->class == RENDER_CLASS) engine->props.preempt_timeout_ms = 0; engine->defaults = engine->props; /* never to change again */ @@ -352,8 +352,8 @@ static void __setup_engine_capabilities(struct intel_engine_cs *engine) * HEVC support is present on first engine instance * before Gen11 and on all instances afterwards. */ - if (INTEL_GEN(i915) >= 11 || - (INTEL_GEN(i915) >= 9 && engine->instance == 0)) + if (GRAPHICS_VER(i915) >= 11 || + (GRAPHICS_VER(i915) >= 9 && engine->instance == 0)) engine->uabi_capabilities |= I915_VIDEO_CLASS_CAPABILITY_HEVC; @@ -361,14 +361,14 @@ static void __setup_engine_capabilities(struct intel_engine_cs *engine) * SFC block is present only on even logical engine * instances. */ - if ((INTEL_GEN(i915) >= 11 && + if ((GRAPHICS_VER(i915) >= 11 && (engine->gt->info.vdbox_sfc_access & BIT(engine->instance))) || - (INTEL_GEN(i915) >= 9 && engine->instance == 0)) + (GRAPHICS_VER(i915) >= 9 && engine->instance == 0)) engine->uabi_capabilities |= I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC; } else if (engine->class == VIDEO_ENHANCEMENT_CLASS) { - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) engine->uabi_capabilities |= I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC; } @@ -466,7 +466,7 @@ static intel_engine_mask_t init_engine_mask(struct intel_gt *gt) info->engine_mask = INTEL_INFO(i915)->platform_engine_mask; - if (INTEL_GEN(i915) < 11) + if (GRAPHICS_VER(i915) < 11) return info->engine_mask; media_fuse = ~intel_uncore_read(uncore, GEN11_GT_VEBOX_VDBOX_DISABLE); @@ -492,7 +492,7 @@ static intel_engine_mask_t init_engine_mask(struct intel_gt *gt) * hooked up to an SFC (Scaler & Format Converter) unit. * In TGL each VDBOX has access to an SFC. */ - if (INTEL_GEN(i915) >= 12 || logical_vdbox++ % 2 == 0) + if (GRAPHICS_VER(i915) >= 12 || logical_vdbox++ % 2 == 0) gt->info.vdbox_sfc_access |= BIT(i); } drm_dbg(&i915->drm, "vdbox enable: %04x, instances: %04lx\n", @@ -729,7 +729,7 @@ static int engine_setup_common(struct intel_engine_cs *engine) intel_engine_init_whitelist(engine); intel_engine_init_ctx_wa(engine); - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) engine->flags |= I915_ENGINE_HAS_RELATIVE_MMIO; return 0; @@ -997,9 +997,9 @@ u64 intel_engine_get_active_head(const struct intel_engine_cs *engine) u64 acthd; - if (INTEL_GEN(i915) >= 8) + if (GRAPHICS_VER(i915) >= 8) acthd = ENGINE_READ64(engine, RING_ACTHD, RING_ACTHD_UDW); - else if (INTEL_GEN(i915) >= 4) + else if (GRAPHICS_VER(i915) >= 4) acthd = ENGINE_READ(engine, RING_ACTHD); else acthd = ENGINE_READ(engine, ACTHD); @@ -1011,7 +1011,7 @@ u64 intel_engine_get_last_batch_head(const struct intel_engine_cs *engine) { u64 bbaddr; - if (INTEL_GEN(engine->i915) >= 8) + if (GRAPHICS_VER(engine->i915) >= 8) bbaddr = ENGINE_READ64(engine, RING_BBADDR, RING_BBADDR_UDW); else bbaddr = ENGINE_READ(engine, RING_BBADDR); @@ -1058,7 +1058,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine) { int err = 0; - if (INTEL_GEN(engine->i915) < 3) + if (GRAPHICS_VER(engine->i915) < 3) return -ENODEV; ENGINE_TRACE(engine, "\n"); @@ -1108,7 +1108,7 @@ read_subslice_reg(const struct intel_engine_cs *engine, u32 mcr_mask, mcr_ss, mcr, old_mcr, val; enum forcewake_domains fw_domains; - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK; mcr_ss = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice); } else { @@ -1157,7 +1157,7 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine, memset(instdone, 0, sizeof(*instdone)); - switch (INTEL_GEN(i915)) { + switch (GRAPHICS_VER(i915)) { default: instdone->instdone = intel_uncore_read(uncore, RING_INSTDONE(mmio_base)); @@ -1167,7 +1167,7 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine, instdone->slice_common = intel_uncore_read(uncore, GEN7_SC_INSTDONE); - if (INTEL_GEN(i915) >= 12) { + if (GRAPHICS_VER(i915) >= 12) { instdone->slice_common_extra[0] = intel_uncore_read(uncore, GEN12_SC_INSTDONE_EXTRA); instdone->slice_common_extra[1] = @@ -1230,7 +1230,7 @@ static bool ring_is_idle(struct intel_engine_cs *engine) idle = false; /* No bit for gen2, so assume the CS parser is idle */ - if (INTEL_GEN(engine->i915) > 2 && + if (GRAPHICS_VER(engine->i915) > 2 && !(ENGINE_READ(engine, RING_MI_MODE) & MODE_IDLE)) idle = false; @@ -1327,7 +1327,7 @@ void intel_engines_reset_default_submission(struct intel_gt *gt) bool intel_engine_can_store_dword(struct intel_engine_cs *engine) { - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { case 2: return false; /* uses physical not virtual addresses */ case 3: @@ -1432,7 +1432,7 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine, struct intel_engine_execlists * const execlists = &engine->execlists; u64 addr; - if (engine->id == RENDER_CLASS && IS_GEN_RANGE(dev_priv, 4, 7)) + if (engine->id == RENDER_CLASS && IS_GRAPHICS_VER(dev_priv, 4, 7)) drm_printf(m, "\tCCID: 0x%08x\n", ENGINE_READ(engine, CCID)); if (HAS_EXECLISTS(dev_priv)) { drm_printf(m, "\tEL_STAT_HI: 0x%08x\n", @@ -1449,13 +1449,13 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine, drm_printf(m, "\tRING_CTL: 0x%08x%s\n", ENGINE_READ(engine, RING_CTL), ENGINE_READ(engine, RING_CTL) & (RING_WAIT | RING_WAIT_SEMAPHORE) ? " [waiting]" : ""); - if (INTEL_GEN(engine->i915) > 2) { + if (GRAPHICS_VER(engine->i915) > 2) { drm_printf(m, "\tRING_MODE: 0x%08x%s\n", ENGINE_READ(engine, RING_MI_MODE), ENGINE_READ(engine, RING_MI_MODE) & (MODE_IDLE) ? " [idle]" : ""); } - if (INTEL_GEN(dev_priv) >= 6) { + if (GRAPHICS_VER(dev_priv) >= 6) { drm_printf(m, "\tRING_IMR: 0x%08x\n", ENGINE_READ(engine, RING_IMR)); drm_printf(m, "\tRING_ESR: 0x%08x\n", @@ -1472,15 +1472,15 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine, addr = intel_engine_get_last_batch_head(engine); drm_printf(m, "\tBBADDR: 0x%08x_%08x\n", upper_32_bits(addr), lower_32_bits(addr)); - if (INTEL_GEN(dev_priv) >= 8) + if (GRAPHICS_VER(dev_priv) >= 8) addr = ENGINE_READ64(engine, RING_DMA_FADD, RING_DMA_FADD_UDW); - else if (INTEL_GEN(dev_priv) >= 4) + else if (GRAPHICS_VER(dev_priv) >= 4) addr = ENGINE_READ(engine, RING_DMA_FADD); else addr = ENGINE_READ(engine, DMA_FADD_I8XX); drm_printf(m, "\tDMA_FADDR: 0x%08x_%08x\n", upper_32_bits(addr), lower_32_bits(addr)); - if (INTEL_GEN(dev_priv) >= 4) { + if (GRAPHICS_VER(dev_priv) >= 4) { drm_printf(m, "\tIPEIR: 0x%08x\n", ENGINE_READ(engine, RING_IPEIR)); drm_printf(m, "\tIPEHR: 0x%08x\n", @@ -1559,7 +1559,7 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine, } rcu_read_unlock(); execlists_active_unlock_bh(execlists); - } else if (INTEL_GEN(dev_priv) > 6) { + } else if (GRAPHICS_VER(dev_priv) > 6) { drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n", ENGINE_READ(engine, RING_PP_DIR_BASE)); drm_printf(m, "\tPP_DIR_BASE_READ: 0x%08x\n", diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c index 8db200422950..fc77592d88a9 100644 --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c @@ -1847,7 +1847,7 @@ process_csb(struct intel_engine_cs *engine, struct i915_request **inactive) ENGINE_TRACE(engine, "csb[%d]: status=0x%08x:0x%08x\n", head, upper_32_bits(csb), lower_32_bits(csb)); - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) promote = gen12_csb_parse(csb); else promote = gen8_csb_parse(csb); @@ -2772,7 +2772,7 @@ static void enable_execlists(struct intel_engine_cs *engine) intel_engine_set_hwsp_writemask(engine, ~0u); /* HWSTAM */ - if (INTEL_GEN(engine->i915) >= 11) + if (GRAPHICS_VER(engine->i915) >= 11) mode = _MASKED_BIT_ENABLE(GEN11_GFX_DISABLE_LEGACY_MODE); else mode = _MASKED_BIT_ENABLE(GFX_RUN_LIST_ENABLE); @@ -3103,7 +3103,7 @@ static void execlists_park(struct intel_engine_cs *engine) static bool can_preempt(struct intel_engine_cs *engine) { - if (INTEL_GEN(engine->i915) > 8) + if (GRAPHICS_VER(engine->i915) > 8) return true; /* GPGPU on bdw requires extra w/a; not implemented */ @@ -3156,13 +3156,13 @@ logical_ring_default_vfuncs(struct intel_engine_cs *engine) engine->emit_flush = gen8_emit_flush_xcs; engine->emit_init_breadcrumb = gen8_emit_init_breadcrumb; engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_xcs; - if (INTEL_GEN(engine->i915) >= 12) { + if (GRAPHICS_VER(engine->i915) >= 12) { engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb_xcs; engine->emit_flush = gen12_emit_flush_xcs; } engine->set_default_submission = execlists_set_default_submission; - if (INTEL_GEN(engine->i915) < 11) { + if (GRAPHICS_VER(engine->i915) < 11) { engine->irq_enable = gen8_logical_ring_enable_irq; engine->irq_disable = gen8_logical_ring_disable_irq; } else { @@ -3195,7 +3195,7 @@ static void logical_ring_default_irqs(struct intel_engine_cs *engine) { unsigned int shift = 0; - if (INTEL_GEN(engine->i915) < 11) { + if (GRAPHICS_VER(engine->i915) < 11) { const u8 irq_shifts[] = { [RCS0] = GEN8_RCS_IRQ_SHIFT, [BCS0] = GEN8_BCS_IRQ_SHIFT, @@ -3215,7 +3215,7 @@ static void logical_ring_default_irqs(struct intel_engine_cs *engine) static void rcs_submission_override(struct intel_engine_cs *engine) { - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { case 12: engine->emit_flush = gen12_emit_flush_rcs; engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb_rcs; @@ -3266,13 +3266,13 @@ int intel_execlists_submission_setup(struct intel_engine_cs *engine) execlists->csb_write = &engine->status_page.addr[intel_hws_csb_write_index(i915)]; - if (INTEL_GEN(i915) < 11) + if (GRAPHICS_VER(i915) < 11) execlists->csb_size = GEN8_CSB_ENTRIES; else execlists->csb_size = GEN11_CSB_ENTRIES; engine->context_tag = GENMASK(BITS_PER_LONG - 2, 0); - if (INTEL_GEN(engine->i915) >= 11) { + if (GRAPHICS_VER(engine->i915) >= 11) { execlists->ccid |= engine->instance << (GEN11_ENGINE_INSTANCE_SHIFT - 32); execlists->ccid |= engine->class << (GEN11_ENGINE_CLASS_SHIFT - 32); } diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c index 10c23a749a95..20e46b843324 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c @@ -107,10 +107,10 @@ static bool needs_idle_maps(struct drm_i915_private *i915) if (!intel_vtd_active()) return false; - if (IS_GEN(i915, 5) && IS_MOBILE(i915)) + if (GRAPHICS_VER(i915) == 5 && IS_MOBILE(i915)) return true; - if (IS_GEN(i915, 12)) + if (GRAPHICS_VER(i915) == 12) return true; /* XXX DMAR fault reason 7 */ return false; @@ -176,7 +176,7 @@ static void guc_ggtt_invalidate(struct i915_ggtt *ggtt) gen8_ggtt_invalidate(ggtt); - if (INTEL_GEN(i915) >= 12) + if (GRAPHICS_VER(i915) >= 12) intel_uncore_write_fw(uncore, GEN12_GUC_TLB_INV_CR, GEN12_GUC_TLB_INV_CR_INVALIDATE); else @@ -832,7 +832,7 @@ static int ggtt_probe_common(struct i915_ggtt *ggtt, u64 size) * resort to an uncached mapping. The WC issue is easily caught by the * readback check when writing GTT PTE entries. */ - if (IS_GEN9_LP(i915) || INTEL_GEN(i915) >= 10) + if (IS_GEN9_LP(i915) || GRAPHICS_VER(i915) >= 10) ggtt->gsm = ioremap(phys_addr, size); else ggtt->gsm = ioremap_wc(phys_addr, size); @@ -1078,7 +1078,7 @@ static int gen6_gmch_probe(struct i915_ggtt *ggtt) ggtt->vm.pte_encode = hsw_pte_encode; else if (IS_VALLEYVIEW(i915)) ggtt->vm.pte_encode = byt_pte_encode; - else if (INTEL_GEN(i915) >= 7) + else if (GRAPHICS_VER(i915) >= 7) ggtt->vm.pte_encode = ivb_pte_encode; else ggtt->vm.pte_encode = snb_pte_encode; @@ -1150,9 +1150,9 @@ static int ggtt_probe_hw(struct i915_ggtt *ggtt, struct intel_gt *gt) ggtt->vm.dma = i915->drm.dev; dma_resv_init(&ggtt->vm._resv); - if (INTEL_GEN(i915) <= 5) + if (GRAPHICS_VER(i915) <= 5) ret = i915_gmch_probe(ggtt); - else if (INTEL_GEN(i915) < 8) + else if (GRAPHICS_VER(i915) < 8) ret = gen6_gmch_probe(ggtt); else ret = gen8_gmch_probe(ggtt); @@ -1209,7 +1209,7 @@ int i915_ggtt_probe_hw(struct drm_i915_private *i915) int i915_ggtt_enable_hw(struct drm_i915_private *i915) { - if (INTEL_GEN(i915) < 6 && !intel_enable_gtt()) + if (GRAPHICS_VER(i915) < 6 && !intel_enable_gtt()) return -EIO; return 0; @@ -1274,7 +1274,7 @@ void i915_ggtt_resume(struct i915_ggtt *ggtt) if (flush) wbinvd_on_all_cpus(); - if (INTEL_GEN(ggtt->vm.i915) >= 8) + if (GRAPHICS_VER(ggtt->vm.i915) >= 8) setup_private_pat(ggtt->vm.gt->uncore); intel_ggtt_restore_fences(ggtt); diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c index 7bf84cd21543..cac7f3f44642 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c @@ -56,7 +56,7 @@ static void i965_write_fence_reg(struct i915_fence_reg *fence) int fence_pitch_shift; u64 val; - if (INTEL_GEN(fence_to_i915(fence)) >= 6) { + if (GRAPHICS_VER(fence_to_i915(fence)) >= 6) { fence_reg_lo = FENCE_REG_GEN6_LO(fence->id); fence_reg_hi = FENCE_REG_GEN6_HI(fence->id); fence_pitch_shift = GEN6_FENCE_PITCH_SHIFT; @@ -173,9 +173,9 @@ static void fence_write(struct i915_fence_reg *fence) * and explicitly managed for internal users. */ - if (IS_GEN(i915, 2)) + if (GRAPHICS_VER(i915) == 2) i830_write_fence_reg(fence); - else if (IS_GEN(i915, 3)) + else if (GRAPHICS_VER(i915) == 3) i915_write_fence_reg(fence); else i965_write_fence_reg(fence); @@ -188,7 +188,7 @@ static void fence_write(struct i915_fence_reg *fence) static bool gpu_uses_fence_registers(struct i915_fence_reg *fence) { - return INTEL_GEN(fence_to_i915(fence)) < 4; + return GRAPHICS_VER(fence_to_i915(fence)) < 4; } static int fence_update(struct i915_fence_reg *fence, @@ -569,7 +569,7 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt) u32 swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN; u32 swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; - if (INTEL_GEN(i915) >= 8 || IS_VALLEYVIEW(i915)) { + if (GRAPHICS_VER(i915) >= 8 || IS_VALLEYVIEW(i915)) { /* * On BDW+, swizzling is not used. We leave the CPU memory * controller in charge of optimizing memory accesses without @@ -579,7 +579,7 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt) */ swizzle_x = I915_BIT_6_SWIZZLE_NONE; swizzle_y = I915_BIT_6_SWIZZLE_NONE; - } else if (INTEL_GEN(i915) >= 6) { + } else if (GRAPHICS_VER(i915) >= 6) { if (i915->preserve_bios_swizzle) { if (intel_uncore_read(uncore, DISP_ARB_CTL) & DISP_TILE_SURFACE_SWIZZLING) { @@ -611,14 +611,14 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt) swizzle_y = I915_BIT_6_SWIZZLE_NONE; } } - } else if (IS_GEN(i915, 5)) { + } else if (GRAPHICS_VER(i915) == 5) { /* * On Ironlake whatever DRAM config, GPU always do * same swizzling setup. */ swizzle_x = I915_BIT_6_SWIZZLE_9_10; swizzle_y = I915_BIT_6_SWIZZLE_9; - } else if (IS_GEN(i915, 2)) { + } else if (GRAPHICS_VER(i915) == 2) { /* * As far as we know, the 865 doesn't have these bit 6 * swizzling issues. @@ -697,7 +697,7 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt) } /* check for L-shaped memory aka modified enhanced addressing */ - if (IS_GEN(i915, 4) && + if (GRAPHICS_VER(i915) == 4 && !(intel_uncore_read(uncore, DCC2) & DCC2_MODIFIED_ENHANCED_DISABLE)) { swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN; swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; @@ -844,10 +844,10 @@ void intel_ggtt_init_fences(struct i915_ggtt *ggtt) if (!i915_ggtt_has_aperture(ggtt)) num_fences = 0; - else if (INTEL_GEN(i915) >= 7 && + else if (GRAPHICS_VER(i915) >= 7 && !(IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))) num_fences = 32; - else if (INTEL_GEN(i915) >= 4 || + else if (GRAPHICS_VER(i915) >= 4 || IS_I945G(i915) || IS_I945GM(i915) || IS_G33(i915) || IS_PINEVIEW(i915)) num_fences = 16; @@ -895,29 +895,29 @@ void intel_gt_init_swizzling(struct intel_gt *gt) struct drm_i915_private *i915 = gt->i915; struct intel_uncore *uncore = gt->uncore; - if (INTEL_GEN(i915) < 5 || + if (GRAPHICS_VER(i915) < 5 || i915->ggtt.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE) return; intel_uncore_rmw(uncore, DISP_ARB_CTL, 0, DISP_TILE_SURFACE_SWIZZLING); - if (IS_GEN(i915, 5)) + if (GRAPHICS_VER(i915) == 5) return; intel_uncore_rmw(uncore, TILECTL, 0, TILECTL_SWZCTL); - if (IS_GEN(i915, 6)) + if (GRAPHICS_VER(i915) == 6) intel_uncore_write(uncore, ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB)); - else if (IS_GEN(i915, 7)) + else if (GRAPHICS_VER(i915) == 7) intel_uncore_write(uncore, ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB)); - else if (IS_GEN(i915, 8)) + else if (GRAPHICS_VER(i915) == 8) intel_uncore_write(uncore, GAMTARBMODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_BDW)); else - MISSING_CASE(INTEL_GEN(i915)); + MISSING_CASE(GRAPHICS_VER(i915)); } diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index 3f88ecdee031..2161bf01ef8b 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -113,10 +113,10 @@ static void init_unused_rings(struct intel_gt *gt) init_unused_ring(gt, SRB1_BASE); init_unused_ring(gt, SRB2_BASE); init_unused_ring(gt, SRB3_BASE); - } else if (IS_GEN(i915, 2)) { + } else if (GRAPHICS_VER(i915) == 2) { init_unused_ring(gt, SRB0_BASE); init_unused_ring(gt, SRB1_BASE); - } else if (IS_GEN(i915, 3)) { + } else if (GRAPHICS_VER(i915) == 3) { init_unused_ring(gt, PRB1_BASE); init_unused_ring(gt, PRB2_BASE); } @@ -133,7 +133,7 @@ int intel_gt_init_hw(struct intel_gt *gt) /* Double layer security blanket, see i915_gem_init() */ intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL); - if (HAS_EDRAM(i915) && INTEL_GEN(i915) < 9) + if (HAS_EDRAM(i915) && GRAPHICS_VER(i915) < 9) intel_uncore_rmw(uncore, HSW_IDICR, 0, IDIHASHMSK(0xf)); if (IS_HASWELL(i915)) @@ -206,10 +206,10 @@ intel_gt_clear_error_registers(struct intel_gt *gt, struct intel_uncore *uncore = gt->uncore; u32 eir; - if (!IS_GEN(i915, 2)) + if (GRAPHICS_VER(i915) != 2) clear_register(uncore, PGTBL_ER); - if (INTEL_GEN(i915) < 4) + if (GRAPHICS_VER(i915) < 4) clear_register(uncore, IPEIR(RENDER_RING_BASE)); else clear_register(uncore, IPEIR_I965); @@ -227,13 +227,13 @@ intel_gt_clear_error_registers(struct intel_gt *gt, I915_MASTER_ERROR_INTERRUPT); } - if (INTEL_GEN(i915) >= 12) { + if (GRAPHICS_VER(i915) >= 12) { rmw_clear(uncore, GEN12_RING_FAULT_REG, RING_FAULT_VALID); intel_uncore_posting_read(uncore, GEN12_RING_FAULT_REG); - } else if (INTEL_GEN(i915) >= 8) { + } else if (GRAPHICS_VER(i915) >= 8) { rmw_clear(uncore, GEN8_RING_FAULT_REG, RING_FAULT_VALID); intel_uncore_posting_read(uncore, GEN8_RING_FAULT_REG); - } else if (INTEL_GEN(i915) >= 6) { + } else if (GRAPHICS_VER(i915) >= 6) { struct intel_engine_cs *engine; enum intel_engine_id id; @@ -271,7 +271,7 @@ static void gen8_check_faults(struct intel_gt *gt) i915_reg_t fault_reg, fault_data0_reg, fault_data1_reg; u32 fault; - if (INTEL_GEN(gt->i915) >= 12) { + if (GRAPHICS_VER(gt->i915) >= 12) { fault_reg = GEN12_RING_FAULT_REG; fault_data0_reg = GEN12_FAULT_TLB_DATA0; fault_data1_reg = GEN12_FAULT_TLB_DATA1; @@ -311,9 +311,9 @@ void intel_gt_check_and_clear_faults(struct intel_gt *gt) struct drm_i915_private *i915 = gt->i915; /* From GEN8 onwards we only have one 'All Engine Fault Register' */ - if (INTEL_GEN(i915) >= 8) + if (GRAPHICS_VER(i915) >= 8) gen8_check_faults(gt); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) gen6_check_faults(gt); else return; @@ -365,7 +365,7 @@ void intel_gt_flush_ggtt_writes(struct intel_gt *gt) void intel_gt_chipset_flush(struct intel_gt *gt) { wmb(); - if (INTEL_GEN(gt->i915) < 6) + if (GRAPHICS_VER(gt->i915) < 6) intel_gtt_chipset_flush(); } @@ -589,7 +589,8 @@ int intel_gt_init(struct intel_gt *gt) */ intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL); - err = intel_gt_init_scratch(gt, IS_GEN(gt->i915, 2) ? SZ_256K : SZ_4K); + err = intel_gt_init_scratch(gt, + GRAPHICS_VER(gt->i915) == 2 ? SZ_256K : SZ_4K); if (err) goto out_fw; diff --git a/drivers/gpu/drm/i915/gt/intel_gt_clock_utils.c b/drivers/gpu/drm/i915/gt/intel_gt_clock_utils.c index 582fcaee11aa..9f0e729d2d15 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_clock_utils.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_clock_utils.c @@ -76,7 +76,7 @@ static u32 read_clock_frequency(struct intel_uncore *uncore) u32 f19_2_mhz = 19200000; u32 f24_mhz = 24000000; - if (INTEL_GEN(uncore->i915) <= 4) { + if (GRAPHICS_VER(uncore->i915) <= 4) { /* * PRMs say: * @@ -85,7 +85,7 @@ static u32 read_clock_frequency(struct intel_uncore *uncore) * (“CLKCFG”) MCHBAR register) */ return RUNTIME_INFO(uncore->i915)->rawclk_freq * 1000 / 16; - } else if (INTEL_GEN(uncore->i915) <= 8) { + } else if (GRAPHICS_VER(uncore->i915) <= 8) { /* * PRMs say: * @@ -94,7 +94,7 @@ static u32 read_clock_frequency(struct intel_uncore *uncore) * rolling over every 1.5 hours). */ return f12_5_mhz; - } else if (INTEL_GEN(uncore->i915) <= 9) { + } else if (GRAPHICS_VER(uncore->i915) <= 9) { u32 ctc_reg = intel_uncore_read(uncore, CTC_MODE); u32 freq = 0; @@ -113,7 +113,7 @@ static u32 read_clock_frequency(struct intel_uncore *uncore) } return freq; - } else if (INTEL_GEN(uncore->i915) <= 12) { + } else if (GRAPHICS_VER(uncore->i915) <= 12) { u32 ctc_reg = intel_uncore_read(uncore, CTC_MODE); u32 freq = 0; @@ -128,7 +128,7 @@ static u32 read_clock_frequency(struct intel_uncore *uncore) } else { u32 c0 = intel_uncore_read(uncore, RPM_CONFIG0); - if (INTEL_GEN(uncore->i915) <= 10) + if (GRAPHICS_VER(uncore->i915) <= 10) freq = gen10_get_crystal_clock_freq(uncore, c0); else freq = gen11_get_crystal_clock_freq(uncore, c0); @@ -211,7 +211,7 @@ u64 intel_gt_ns_to_pm_interval(const struct intel_gt *gt, u64 ns) * frozen machine. */ val = div_u64_roundup(intel_gt_ns_to_clock_interval(gt, ns), 16); - if (IS_GEN(gt->i915, 6)) + if (GRAPHICS_VER(gt->i915) == 6) val = div_u64_roundup(val, 25) * 25; return val; diff --git a/drivers/gpu/drm/i915/gt/intel_gt_irq.c b/drivers/gpu/drm/i915/gt/intel_gt_irq.c index d29126c458ba..1ec63cceabf6 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_irq.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_irq.c @@ -395,7 +395,7 @@ void gen5_gt_irq_reset(struct intel_gt *gt) struct intel_uncore *uncore = gt->uncore; GEN3_IRQ_RESET(uncore, GT); - if (INTEL_GEN(gt->i915) >= 6) + if (GRAPHICS_VER(gt->i915) >= 6) GEN3_IRQ_RESET(uncore, GEN6_PM); } @@ -413,14 +413,14 @@ void gen5_gt_irq_postinstall(struct intel_gt *gt) } gt_irqs |= GT_RENDER_USER_INTERRUPT; - if (IS_GEN(gt->i915, 5)) + if (GRAPHICS_VER(gt->i915) == 5) gt_irqs |= ILK_BSD_USER_INTERRUPT; else gt_irqs |= GT_BLT_USER_INTERRUPT | GT_BSD_USER_INTERRUPT; GEN3_IRQ_INIT(uncore, GT, gt->gt_imr, gt_irqs); - if (INTEL_GEN(gt->i915) >= 6) { + if (GRAPHICS_VER(gt->i915) >= 6) { /* * RPS interrupts will get enabled/disabled on demand when RPS * itself is enabled/disabled. diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm_irq.c b/drivers/gpu/drm/i915/gt/intel_gt_pm_irq.c index 811a11ed181c..fe51f894b073 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_pm_irq.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm_irq.c @@ -16,10 +16,10 @@ static void write_pm_imr(struct intel_gt *gt) u32 mask = gt->pm_imr; i915_reg_t reg; - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { reg = GEN11_GPM_WGBOXPERF_INTR_MASK; mask <<= 16; /* pm is in upper half */ - } else if (INTEL_GEN(i915) >= 8) { + } else if (GRAPHICS_VER(i915) >= 8) { reg = GEN8_GT_IMR(2); } else { reg = GEN6_PMIMR; @@ -61,7 +61,7 @@ void gen6_gt_pm_mask_irq(struct intel_gt *gt, u32 mask) void gen6_gt_pm_reset_iir(struct intel_gt *gt, u32 reset_mask) { struct intel_uncore *uncore = gt->uncore; - i915_reg_t reg = INTEL_GEN(gt->i915) >= 8 ? GEN8_GT_IIR(2) : GEN6_PMIIR; + i915_reg_t reg = GRAPHICS_VER(gt->i915) >= 8 ? GEN8_GT_IIR(2) : GEN6_PMIIR; lockdep_assert_held(>->irq_lock); @@ -77,10 +77,10 @@ static void write_pm_ier(struct intel_gt *gt) u32 mask = gt->pm_ier; i915_reg_t reg; - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { reg = GEN11_GPM_WGBOXPERF_INTR_ENABLE; mask <<= 16; /* pm is in upper half */ - } else if (INTEL_GEN(i915) >= 8) { + } else if (GRAPHICS_VER(i915) >= 8) { reg = GEN8_GT_IER(2); } else { reg = GEN6_PMIER; diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.c b/drivers/gpu/drm/i915/gt/intel_gtt.c index 94849567143d..084ea65d59c0 100644 --- a/drivers/gpu/drm/i915/gt/intel_gtt.c +++ b/drivers/gpu/drm/i915/gt/intel_gtt.c @@ -356,7 +356,7 @@ void gtt_write_workarounds(struct intel_gt *gt) intel_uncore_write(uncore, GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_BXT); - else if (INTEL_GEN(i915) >= 9 && INTEL_GEN(i915) <= 11) + else if (GRAPHICS_VER(i915) >= 9 && GRAPHICS_VER(i915) <= 11) intel_uncore_write(uncore, GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_SKL); @@ -373,13 +373,13 @@ void gtt_write_workarounds(struct intel_gt *gt) * driver. */ if (HAS_PAGE_SIZES(i915, I915_GTT_PAGE_SIZE_64K) && - INTEL_GEN(i915) <= 10) + GRAPHICS_VER(i915) <= 10) intel_uncore_rmw(uncore, GEN8_GAMW_ECO_DEV_RW_IA, 0, GAMW_ECO_ENABLE_64K_IPS_FIELD); - if (IS_GEN_RANGE(i915, 8, 11)) { + if (IS_GRAPHICS_VER(i915, 8, 11)) { bool can_use_gtt_cache = true; /* @@ -461,7 +461,7 @@ static void bdw_setup_private_ppat(struct intel_uncore *uncore) GEN8_PPAT(7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3)); /* for scanout with eLLC */ - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) pat |= GEN8_PPAT(2, GEN8_PPAT_WB | GEN8_PPAT_ELLC_OVERRIDE); else pat |= GEN8_PPAT(2, GEN8_PPAT_WT | GEN8_PPAT_LLCELLC); @@ -510,11 +510,11 @@ void setup_private_pat(struct intel_uncore *uncore) { struct drm_i915_private *i915 = uncore->i915; - GEM_BUG_ON(INTEL_GEN(i915) < 8); + GEM_BUG_ON(GRAPHICS_VER(i915) < 8); - if (INTEL_GEN(i915) >= 12) + if (GRAPHICS_VER(i915) >= 12) tgl_setup_private_ppat(uncore); - else if (INTEL_GEN(i915) >= 10) + else if (GRAPHICS_VER(i915) >= 10) cnl_setup_private_ppat(uncore); else if (IS_CHERRYVIEW(i915) || IS_GEN9_LP(i915)) chv_setup_private_ppat(uncore); diff --git a/drivers/gpu/drm/i915/gt/intel_llc.c b/drivers/gpu/drm/i915/gt/intel_llc.c index 075d741644ae..eb1a15deed22 100644 --- a/drivers/gpu/drm/i915/gt/intel_llc.c +++ b/drivers/gpu/drm/i915/gt/intel_llc.c @@ -64,7 +64,7 @@ static bool get_ia_constants(struct intel_llc *llc, consts->min_gpu_freq = rps->min_freq; consts->max_gpu_freq = rps->max_freq; - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { /* Convert GT frequency to 50 HZ units */ consts->min_gpu_freq /= GEN9_FREQ_SCALER; consts->max_gpu_freq /= GEN9_FREQ_SCALER; @@ -83,13 +83,13 @@ static void calc_ia_freq(struct intel_llc *llc, const int diff = consts->max_gpu_freq - gpu_freq; unsigned int ia_freq = 0, ring_freq = 0; - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { /* * ring_freq = 2 * GT. ring_freq is in 100MHz units * No floor required for ring frequency on SKL. */ ring_freq = gpu_freq; - } else if (INTEL_GEN(i915) >= 8) { + } else if (GRAPHICS_VER(i915) >= 8) { /* max(2 * GT, DDR). NB: GT is 50MHz units */ ring_freq = max(consts->min_ring_freq, gpu_freq); } else if (IS_HASWELL(i915)) { diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c index aafe2a4df496..a27bac0a4bfb 100644 --- a/drivers/gpu/drm/i915/gt/intel_lrc.c +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c @@ -47,7 +47,7 @@ static void set_offsets(u32 *regs, *regs = MI_LOAD_REGISTER_IMM(count); if (flags & POSTED) *regs |= MI_LRI_FORCE_POSTED; - if (INTEL_GEN(engine->i915) >= 11) + if (GRAPHICS_VER(engine->i915) >= 11) *regs |= MI_LRI_LRM_CS_MMIO; regs++; @@ -70,7 +70,7 @@ static void set_offsets(u32 *regs, if (close) { /* Close the batch; used mainly by live_lrc_layout() */ *regs = MI_BATCH_BUFFER_END; - if (INTEL_GEN(engine->i915) >= 10) + if (GRAPHICS_VER(engine->i915) >= 10) *regs |= BIT(0); } } @@ -498,22 +498,22 @@ static const u8 *reg_offsets(const struct intel_engine_cs *engine) * addressing to automatic fixup the register state between the * physical engines for virtual engine. */ - GEM_BUG_ON(INTEL_GEN(engine->i915) >= 12 && + GEM_BUG_ON(GRAPHICS_VER(engine->i915) >= 12 && !intel_engine_has_relative_mmio(engine)); if (engine->class == RENDER_CLASS) { - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return gen12_rcs_offsets; - else if (INTEL_GEN(engine->i915) >= 11) + else if (GRAPHICS_VER(engine->i915) >= 11) return gen11_rcs_offsets; - else if (INTEL_GEN(engine->i915) >= 9) + else if (GRAPHICS_VER(engine->i915) >= 9) return gen9_rcs_offsets; else return gen8_rcs_offsets; } else { - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return gen12_xcs_offsets; - else if (INTEL_GEN(engine->i915) >= 9) + else if (GRAPHICS_VER(engine->i915) >= 9) return gen9_xcs_offsets; else return gen8_xcs_offsets; @@ -522,9 +522,9 @@ static const u8 *reg_offsets(const struct intel_engine_cs *engine) static int lrc_ring_mi_mode(const struct intel_engine_cs *engine) { - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return 0x60; - else if (INTEL_GEN(engine->i915) >= 9) + else if (GRAPHICS_VER(engine->i915) >= 9) return 0x54; else if (engine->class == RENDER_CLASS) return 0x58; @@ -534,9 +534,9 @@ static int lrc_ring_mi_mode(const struct intel_engine_cs *engine) static int lrc_ring_gpr0(const struct intel_engine_cs *engine) { - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return 0x74; - else if (INTEL_GEN(engine->i915) >= 9) + else if (GRAPHICS_VER(engine->i915) >= 9) return 0x68; else if (engine->class == RENDER_CLASS) return 0xd8; @@ -546,9 +546,9 @@ static int lrc_ring_gpr0(const struct intel_engine_cs *engine) static int lrc_ring_wa_bb_per_ctx(const struct intel_engine_cs *engine) { - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return 0x12; - else if (INTEL_GEN(engine->i915) >= 9 || engine->class == RENDER_CLASS) + else if (GRAPHICS_VER(engine->i915) >= 9 || engine->class == RENDER_CLASS) return 0x18; else return -1; @@ -581,9 +581,9 @@ static int lrc_ring_cmd_buf_cctl(const struct intel_engine_cs *engine) if (engine->class != RENDER_CLASS) return -1; - if (INTEL_GEN(engine->i915) >= 12) + if (GRAPHICS_VER(engine->i915) >= 12) return 0xb6; - else if (INTEL_GEN(engine->i915) >= 11) + else if (GRAPHICS_VER(engine->i915) >= 11) return 0xaa; else return -1; @@ -592,9 +592,9 @@ static int lrc_ring_cmd_buf_cctl(const struct intel_engine_cs *engine) static u32 lrc_ring_indirect_offset_default(const struct intel_engine_cs *engine) { - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { default: - MISSING_CASE(INTEL_GEN(engine->i915)); + MISSING_CASE(GRAPHICS_VER(engine->i915)); fallthrough; case 12: return GEN12_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT; @@ -637,7 +637,7 @@ static void init_common_regs(u32 * const regs, ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT); if (inhibit) ctl |= CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT; - if (INTEL_GEN(engine->i915) < 11) + if (GRAPHICS_VER(engine->i915) < 11) ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT | CTX_CTRL_RS_CTX_ENABLE); regs[CTX_CONTEXT_CONTROL] = ctl; @@ -805,7 +805,7 @@ __lrc_alloc_state(struct intel_context *ce, struct intel_engine_cs *engine) if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM)) context_size += I915_GTT_PAGE_SIZE; /* for redzone */ - if (INTEL_GEN(engine->i915) == 12) { + if (GRAPHICS_VER(engine->i915) == 12) { ce->wa_bb_page = context_size / PAGE_SIZE; context_size += PAGE_SIZE; } @@ -1114,7 +1114,7 @@ static u32 lrc_descriptor(const struct intel_context *ce) desc <<= GEN8_CTX_ADDRESSING_MODE_SHIFT; desc |= GEN8_CTX_VALID | GEN8_CTX_PRIVILEGE; - if (IS_GEN(ce->vm->i915, 8)) + if (GRAPHICS_VER(ce->vm->i915) == 8) desc |= GEN8_CTX_L3LLC_COHERENT; return i915_ggtt_offset(ce->state) | desc; @@ -1469,7 +1469,7 @@ void lrc_init_wa_ctx(struct intel_engine_cs *engine) if (engine->class != RENDER_CLASS) return; - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { case 12: case 11: return; @@ -1486,7 +1486,7 @@ void lrc_init_wa_ctx(struct intel_engine_cs *engine) wa_bb_fn[1] = NULL; break; default: - MISSING_CASE(INTEL_GEN(engine->i915)); + MISSING_CASE(GRAPHICS_VER(engine->i915)); return; } diff --git a/drivers/gpu/drm/i915/gt/intel_mocs.c b/drivers/gpu/drm/i915/gt/intel_mocs.c index b14138fd505c..17848807f111 100644 --- a/drivers/gpu/drm/i915/gt/intel_mocs.c +++ b/drivers/gpu/drm/i915/gt/intel_mocs.c @@ -344,11 +344,11 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915, table->size = ARRAY_SIZE(dg1_mocs_table); table->table = dg1_mocs_table; table->n_entries = GEN9_NUM_MOCS_ENTRIES; - } else if (INTEL_GEN(i915) >= 12) { + } else if (GRAPHICS_VER(i915) >= 12) { table->size = ARRAY_SIZE(tgl_mocs_table); table->table = tgl_mocs_table; table->n_entries = GEN9_NUM_MOCS_ENTRIES; - } else if (IS_GEN(i915, 11)) { + } else if (GRAPHICS_VER(i915) == 11) { table->size = ARRAY_SIZE(icl_mocs_table); table->table = icl_mocs_table; table->n_entries = GEN9_NUM_MOCS_ENTRIES; @@ -361,7 +361,7 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915, table->n_entries = GEN9_NUM_MOCS_ENTRIES; table->table = broxton_mocs_table; } else { - drm_WARN_ONCE(&i915->drm, INTEL_GEN(i915) >= 9, + drm_WARN_ONCE(&i915->drm, GRAPHICS_VER(i915) >= 9, "Platform that should have a MOCS table does not.\n"); return 0; } @@ -370,7 +370,7 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915, return 0; /* WaDisableSkipCaching:skl,bxt,kbl,glk */ - if (IS_GEN(i915, 9)) { + if (GRAPHICS_VER(i915) == 9) { int i; for (i = 0; i < table->size; i++) diff --git a/drivers/gpu/drm/i915/gt/intel_ppgtt.c b/drivers/gpu/drm/i915/gt/intel_ppgtt.c index aee3a8929245..886060f7e6fc 100644 --- a/drivers/gpu/drm/i915/gt/intel_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ppgtt.c @@ -146,9 +146,9 @@ int i915_ppgtt_init_hw(struct intel_gt *gt) gtt_write_workarounds(gt); - if (IS_GEN(i915, 6)) + if (GRAPHICS_VER(i915) == 6) gen6_ppgtt_enable(gt); - else if (IS_GEN(i915, 7)) + else if (GRAPHICS_VER(i915) == 7) gen7_ppgtt_enable(gt); return 0; @@ -157,7 +157,7 @@ int i915_ppgtt_init_hw(struct intel_gt *gt) static struct i915_ppgtt * __ppgtt_create(struct intel_gt *gt) { - if (INTEL_GEN(gt->i915) < 8) + if (GRAPHICS_VER(gt->i915) < 8) return gen6_ppgtt_create(gt); else return gen8_ppgtt_create(gt); diff --git a/drivers/gpu/drm/i915/gt/intel_rc6.c b/drivers/gpu/drm/i915/gt/intel_rc6.c index 3b7e62debe7e..259d7eb4e165 100644 --- a/drivers/gpu/drm/i915/gt/intel_rc6.c +++ b/drivers/gpu/drm/i915/gt/intel_rc6.c @@ -109,7 +109,7 @@ static void gen11_rc6_enable(struct intel_rc6 *rc6) GEN9_MEDIA_PG_ENABLE | GEN11_MEDIA_SAMPLER_PG_ENABLE; - if (INTEL_GEN(gt->i915) >= 12) { + if (GRAPHICS_VER(gt->i915) >= 12) { for (i = 0; i < I915_MAX_VCS; i++) if (HAS_ENGINE(gt, _VCS(i))) pg_enable |= (VDN_HCP_POWERGATE_ENABLE(i) | @@ -126,7 +126,7 @@ static void gen9_rc6_enable(struct intel_rc6 *rc6) enum intel_engine_id id; /* 2b: Program RC6 thresholds.*/ - if (INTEL_GEN(rc6_to_i915(rc6)) >= 10) { + if (GRAPHICS_VER(rc6_to_i915(rc6)) >= 10) { set(uncore, GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16 | 85); set(uncore, GEN10_MEDIA_WAKE_RATE_LIMIT, 150); } else if (IS_SKYLAKE(rc6_to_i915(rc6))) { @@ -249,9 +249,9 @@ static void gen6_rc6_enable(struct intel_rc6 *rc6) rc6vids = 0; ret = sandybridge_pcode_read(i915, GEN6_PCODE_READ_RC6VIDS, &rc6vids, NULL); - if (IS_GEN(i915, 6) && ret) { + if (GRAPHICS_VER(i915) == 6 && ret) { drm_dbg(&i915->drm, "Couldn't check for BIOS workaround\n"); - } else if (IS_GEN(i915, 6) && + } else if (GRAPHICS_VER(i915) == 6 && (GEN6_DECODE_RC6_VID(rc6vids & 0xff) < 450)) { drm_dbg(&i915->drm, "You should update your BIOS. Correcting minimum rc6 voltage (%dmV->%dmV)\n", @@ -515,7 +515,7 @@ static void __intel_rc6_disable(struct intel_rc6 *rc6) struct intel_uncore *uncore = rc6_to_uncore(rc6); intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL); - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) set(uncore, GEN9_PG_ENABLE, 0); set(uncore, GEN6_RC_CONTROL, 0); set(uncore, GEN6_RC_STATE, 0); @@ -575,13 +575,13 @@ void intel_rc6_enable(struct intel_rc6 *rc6) chv_rc6_enable(rc6); else if (IS_VALLEYVIEW(i915)) vlv_rc6_enable(rc6); - else if (INTEL_GEN(i915) >= 11) + else if (GRAPHICS_VER(i915) >= 11) gen11_rc6_enable(rc6); - else if (INTEL_GEN(i915) >= 9) + else if (GRAPHICS_VER(i915) >= 9) gen9_rc6_enable(rc6); else if (IS_BROADWELL(i915)) gen8_rc6_enable(rc6); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) gen6_rc6_enable(rc6); rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; diff --git a/drivers/gpu/drm/i915/gt/intel_renderstate.c b/drivers/gpu/drm/i915/gt/intel_renderstate.c index b03e197b1d99..b575cd6e0b7a 100644 --- a/drivers/gpu/drm/i915/gt/intel_renderstate.c +++ b/drivers/gpu/drm/i915/gt/intel_renderstate.c @@ -15,7 +15,7 @@ render_state_get_rodata(const struct intel_engine_cs *engine) if (engine->class != RENDER_CLASS) return NULL; - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { case 6: return &gen6_null_state; case 7: diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c index 8091846d955b..72251638d4ea 100644 --- a/drivers/gpu/drm/i915/gt/intel_reset.c +++ b/drivers/gpu/drm/i915/gt/intel_reset.c @@ -421,7 +421,7 @@ static int gen11_lock_sfc(struct intel_engine_cs *engine, struct intel_engine_cs *paired_vecs; if (engine->class != VIDEO_DECODE_CLASS || - !IS_GEN(engine->i915, 12)) + GRAPHICS_VER(engine->i915) != 12) return 0; /* @@ -633,7 +633,7 @@ static int gen8_reset_engines(struct intel_gt *gt, */ } - if (INTEL_GEN(gt->i915) >= 11) + if (GRAPHICS_VER(gt->i915) >= 11) ret = gen11_reset_engines(gt, engine_mask, retry); else ret = gen6_reset_engines(gt, engine_mask, retry); @@ -662,17 +662,17 @@ static reset_func intel_get_gpu_reset(const struct intel_gt *gt) if (is_mock_gt(gt)) return mock_reset; - else if (INTEL_GEN(i915) >= 8) + else if (GRAPHICS_VER(i915) >= 8) return gen8_reset_engines; - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) return gen6_reset_engines; - else if (INTEL_GEN(i915) >= 5) + else if (GRAPHICS_VER(i915) >= 5) return ilk_do_reset; else if (IS_G4X(i915)) return g4x_do_reset; else if (IS_G33(i915) || IS_PINEVIEW(i915)) return g33_do_reset; - else if (INTEL_GEN(i915) >= 3) + else if (GRAPHICS_VER(i915) >= 3) return i915_do_reset; else return NULL; @@ -724,7 +724,7 @@ bool intel_has_reset_engine(const struct intel_gt *gt) int intel_reset_guc(struct intel_gt *gt) { u32 guc_domain = - INTEL_GEN(gt->i915) >= 11 ? GEN11_GRDOM_GUC : GEN9_GRDOM_GUC; + GRAPHICS_VER(gt->i915) >= 11 ? GEN11_GRDOM_GUC : GEN9_GRDOM_GUC; int ret; GEM_BUG_ON(!HAS_GT_UC(gt->i915)); diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c index 2b6dffcc2262..0c423f096e2b 100644 --- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c +++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c @@ -29,7 +29,7 @@ static void set_hwstam(struct intel_engine_cs *engine, u32 mask) * lost interrupts following a reset. */ if (engine->class == RENDER_CLASS) { - if (INTEL_GEN(engine->i915) >= 6) + if (GRAPHICS_VER(engine->i915) >= 6) mask &= ~BIT(0); else mask &= ~I915_USER_INTERRUPT; @@ -43,7 +43,7 @@ static void set_hws_pga(struct intel_engine_cs *engine, phys_addr_t phys) u32 addr; addr = lower_32_bits(phys); - if (INTEL_GEN(engine->i915) >= 4) + if (GRAPHICS_VER(engine->i915) >= 4) addr |= (phys >> 28) & 0xf0; intel_uncore_write(engine->uncore, HWS_PGA, addr); @@ -71,7 +71,7 @@ static void set_hwsp(struct intel_engine_cs *engine, u32 offset) * The ring status page addresses are no longer next to the rest of * the ring registers as of gen7. */ - if (IS_GEN(engine->i915, 7)) { + if (GRAPHICS_VER(engine->i915) == 7) { switch (engine->id) { /* * No more rings exist on Gen7. Default case is only to shut up @@ -93,7 +93,7 @@ static void set_hwsp(struct intel_engine_cs *engine, u32 offset) hwsp = VEBOX_HWS_PGA_GEN7; break; } - } else if (IS_GEN(engine->i915, 6)) { + } else if (GRAPHICS_VER(engine->i915) == 6) { hwsp = RING_HWS_PGA_GEN6(engine->mmio_base); } else { hwsp = RING_HWS_PGA(engine->mmio_base); @@ -105,7 +105,7 @@ static void set_hwsp(struct intel_engine_cs *engine, u32 offset) static void flush_cs_tlb(struct intel_engine_cs *engine) { - if (!IS_GEN_RANGE(engine->i915, 6, 7)) + if (!IS_GRAPHICS_VER(engine->i915, 6, 7)) return; /* ring should be idle before issuing a sync flush*/ @@ -153,7 +153,7 @@ static void set_pp_dir(struct intel_engine_cs *engine) ENGINE_WRITE_FW(engine, RING_PP_DIR_DCLV, PP_DIR_DCLV_2G); ENGINE_WRITE_FW(engine, RING_PP_DIR_BASE, pp_dir(vm)); - if (INTEL_GEN(engine->i915) >= 7) { + if (GRAPHICS_VER(engine->i915) >= 7) { ENGINE_WRITE_FW(engine, RING_MODE_GEN7, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)); @@ -229,7 +229,7 @@ static int xcs_resume(struct intel_engine_cs *engine) 5000, 0, NULL)) goto err; - if (INTEL_GEN(engine->i915) > 2) + if (GRAPHICS_VER(engine->i915) > 2) ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING)); @@ -646,9 +646,9 @@ static int mi_set_context(struct i915_request *rq, u32 *cs; len = 4; - if (IS_GEN(i915, 7)) + if (GRAPHICS_VER(i915) == 7) len += 2 + (num_engines ? 4 * num_engines + 6 : 0); - else if (IS_GEN(i915, 5)) + else if (GRAPHICS_VER(i915) == 5) len += 2; if (flags & MI_FORCE_RESTORE) { GEM_BUG_ON(flags & MI_RESTORE_INHIBIT); @@ -662,7 +662,7 @@ static int mi_set_context(struct i915_request *rq, return PTR_ERR(cs); /* WaProgramMiArbOnOffAroundMiSetContext:ivb,vlv,hsw,bdw,chv */ - if (IS_GEN(i915, 7)) { + if (GRAPHICS_VER(i915) == 7) { *cs++ = MI_ARB_ON_OFF | MI_ARB_DISABLE; if (num_engines) { struct intel_engine_cs *signaller; @@ -678,7 +678,7 @@ static int mi_set_context(struct i915_request *rq, GEN6_PSMI_SLEEP_MSG_DISABLE); } } - } else if (IS_GEN(i915, 5)) { + } else if (GRAPHICS_VER(i915) == 5) { /* * This w/a is only listed for pre-production ilk a/b steppings, * but is also mentioned for programming the powerctx. To be @@ -716,7 +716,7 @@ static int mi_set_context(struct i915_request *rq, */ *cs++ = MI_NOOP; - if (IS_GEN(i915, 7)) { + if (GRAPHICS_VER(i915) == 7) { if (num_engines) { struct intel_engine_cs *signaller; i915_reg_t last_reg = {}; /* keep gcc quiet */ @@ -740,7 +740,7 @@ static int mi_set_context(struct i915_request *rq, *cs++ = MI_NOOP; } *cs++ = MI_ARB_ON_OFF | MI_ARB_ENABLE; - } else if (IS_GEN(i915, 5)) { + } else if (GRAPHICS_VER(i915) == 5) { *cs++ = MI_SUSPEND_FLUSH; } @@ -1001,7 +1001,7 @@ static void ring_release(struct intel_engine_cs *engine) { struct drm_i915_private *dev_priv = engine->i915; - drm_WARN_ON(&dev_priv->drm, INTEL_GEN(dev_priv) > 2 && + drm_WARN_ON(&dev_priv->drm, GRAPHICS_VER(dev_priv) > 2 && (ENGINE_READ(engine, RING_MI_MODE) & MODE_IDLE) == 0); intel_engine_cleanup_common(engine); @@ -1029,13 +1029,13 @@ static void setup_irq(struct intel_engine_cs *engine) intel_engine_set_irq_handler(engine, irq_handler); - if (INTEL_GEN(i915) >= 6) { + if (GRAPHICS_VER(i915) >= 6) { engine->irq_enable = gen6_irq_enable; engine->irq_disable = gen6_irq_disable; - } else if (INTEL_GEN(i915) >= 5) { + } else if (GRAPHICS_VER(i915) >= 5) { engine->irq_enable = gen5_irq_enable; engine->irq_disable = gen5_irq_disable; - } else if (INTEL_GEN(i915) >= 3) { + } else if (GRAPHICS_VER(i915) >= 3) { engine->irq_enable = gen3_irq_enable; engine->irq_disable = gen3_irq_disable; } else { @@ -1049,7 +1049,7 @@ static void setup_common(struct intel_engine_cs *engine) struct drm_i915_private *i915 = engine->i915; /* gen8+ are only supported with execlists */ - GEM_BUG_ON(INTEL_GEN(i915) >= 8); + GEM_BUG_ON(GRAPHICS_VER(i915) >= 8); setup_irq(engine); @@ -1070,14 +1070,14 @@ static void setup_common(struct intel_engine_cs *engine) * engine->emit_init_breadcrumb(). */ engine->emit_fini_breadcrumb = gen3_emit_breadcrumb; - if (IS_GEN(i915, 5)) + if (GRAPHICS_VER(i915) == 5) engine->emit_fini_breadcrumb = gen5_emit_breadcrumb; engine->set_default_submission = i9xx_set_default_submission; - if (INTEL_GEN(i915) >= 6) + if (GRAPHICS_VER(i915) >= 6) engine->emit_bb_start = gen6_emit_bb_start; - else if (INTEL_GEN(i915) >= 4) + else if (GRAPHICS_VER(i915) >= 4) engine->emit_bb_start = gen4_emit_bb_start; else if (IS_I830(i915) || IS_I845G(i915)) engine->emit_bb_start = i830_emit_bb_start; @@ -1094,16 +1094,16 @@ static void setup_rcs(struct intel_engine_cs *engine) engine->irq_enable_mask = GT_RENDER_USER_INTERRUPT; - if (INTEL_GEN(i915) >= 7) { + if (GRAPHICS_VER(i915) >= 7) { engine->emit_flush = gen7_emit_flush_rcs; engine->emit_fini_breadcrumb = gen7_emit_breadcrumb_rcs; - } else if (IS_GEN(i915, 6)) { + } else if (GRAPHICS_VER(i915) == 6) { engine->emit_flush = gen6_emit_flush_rcs; engine->emit_fini_breadcrumb = gen6_emit_breadcrumb_rcs; - } else if (IS_GEN(i915, 5)) { + } else if (GRAPHICS_VER(i915) == 5) { engine->emit_flush = gen4_emit_flush_rcs; } else { - if (INTEL_GEN(i915) < 4) + if (GRAPHICS_VER(i915) < 4) engine->emit_flush = gen2_emit_flush; else engine->emit_flush = gen4_emit_flush_rcs; @@ -1118,20 +1118,20 @@ static void setup_vcs(struct intel_engine_cs *engine) { struct drm_i915_private *i915 = engine->i915; - if (INTEL_GEN(i915) >= 6) { + if (GRAPHICS_VER(i915) >= 6) { /* gen6 bsd needs a special wa for tail updates */ - if (IS_GEN(i915, 6)) + if (GRAPHICS_VER(i915) == 6) engine->set_default_submission = gen6_bsd_set_default_submission; engine->emit_flush = gen6_emit_flush_vcs; engine->irq_enable_mask = GT_BSD_USER_INTERRUPT; - if (IS_GEN(i915, 6)) + if (GRAPHICS_VER(i915) == 6) engine->emit_fini_breadcrumb = gen6_emit_breadcrumb_xcs; else engine->emit_fini_breadcrumb = gen7_emit_breadcrumb_xcs; } else { engine->emit_flush = gen4_emit_flush_vcs; - if (IS_GEN(i915, 5)) + if (GRAPHICS_VER(i915) == 5) engine->irq_enable_mask = ILK_BSD_USER_INTERRUPT; else engine->irq_enable_mask = I915_BSD_USER_INTERRUPT; @@ -1145,7 +1145,7 @@ static void setup_bcs(struct intel_engine_cs *engine) engine->emit_flush = gen6_emit_flush_xcs; engine->irq_enable_mask = GT_BLT_USER_INTERRUPT; - if (IS_GEN(i915, 6)) + if (GRAPHICS_VER(i915) == 6) engine->emit_fini_breadcrumb = gen6_emit_breadcrumb_xcs; else engine->emit_fini_breadcrumb = gen7_emit_breadcrumb_xcs; @@ -1155,7 +1155,7 @@ static void setup_vecs(struct intel_engine_cs *engine) { struct drm_i915_private *i915 = engine->i915; - GEM_BUG_ON(INTEL_GEN(i915) < 7); + GEM_BUG_ON(GRAPHICS_VER(i915) < 7); engine->emit_flush = gen6_emit_flush_xcs; engine->irq_enable_mask = PM_VEBOX_USER_INTERRUPT; @@ -1203,7 +1203,7 @@ static struct i915_vma *gen7_ctx_vma(struct intel_engine_cs *engine) struct i915_vma *vma; int size, err; - if (!IS_GEN(engine->i915, 7) || engine->class != RENDER_CLASS) + if (GRAPHICS_VER(engine->i915) != 7 || engine->class != RENDER_CLASS) return 0; err = gen7_ctx_switch_bb_setup(engine, NULL /* probe size */); diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c index 97cab1b99871..06e9a8ed4e03 100644 --- a/drivers/gpu/drm/i915/gt/intel_rps.c +++ b/drivers/gpu/drm/i915/gt/intel_rps.c @@ -196,7 +196,7 @@ static void rps_reset_interrupts(struct intel_rps *rps) struct intel_gt *gt = rps_to_gt(rps); spin_lock_irq(>->irq_lock); - if (INTEL_GEN(gt->i915) >= 11) + if (GRAPHICS_VER(gt->i915) >= 11) gen11_rps_reset_interrupts(rps); else gen6_rps_reset_interrupts(rps); @@ -630,7 +630,7 @@ static u32 rps_limits(struct intel_rps *rps, u8 val) * frequency, if the down threshold expires in that window we will not * receive a down interrupt. */ - if (INTEL_GEN(rps_to_i915(rps)) >= 9) { + if (GRAPHICS_VER(rps_to_i915(rps)) >= 9) { limits = rps->max_freq_softlimit << 23; if (val <= rps->min_freq_softlimit) limits |= rps->min_freq_softlimit << 14; @@ -697,7 +697,7 @@ static void rps_set_power(struct intel_rps *rps, int new_power) intel_gt_ns_to_pm_interval(gt, ei_down * threshold_down * 10)); set(uncore, GEN6_RP_CONTROL, - (INTEL_GEN(gt->i915) > 9 ? 0 : GEN6_RP_MEDIA_TURBO) | + (GRAPHICS_VER(gt->i915) > 9 ? 0 : GEN6_RP_MEDIA_TURBO) | GEN6_RP_MEDIA_HW_NORMAL_MODE | GEN6_RP_MEDIA_IS_GFX | GEN6_RP_ENABLE | @@ -771,7 +771,7 @@ static int gen6_rps_set(struct intel_rps *rps, u8 val) struct drm_i915_private *i915 = rps_to_i915(rps); u32 swreq; - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) swreq = GEN9_FREQUENCY(val); else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) swreq = HSW_FREQUENCY(val); @@ -812,14 +812,14 @@ static int rps_set(struct intel_rps *rps, u8 val, bool update) if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) err = vlv_rps_set(rps, val); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) err = gen6_rps_set(rps, val); else err = gen5_rps_set(rps, val); if (err) return err; - if (update && INTEL_GEN(i915) >= 6) + if (update && GRAPHICS_VER(i915) >= 6) gen6_rps_set_thresholds(rps, val); rps->last_freq = val; @@ -853,7 +853,7 @@ void intel_rps_unpark(struct intel_rps *rps) if (intel_rps_uses_timer(rps)) rps_start_timer(rps); - if (IS_GEN(rps_to_i915(rps), 5)) + if (GRAPHICS_VER(rps_to_i915(rps)) == 5) gen5_rps_update(rps); } @@ -999,7 +999,7 @@ static void gen6_rps_init(struct intel_rps *rps) rps->efficient_freq = rps->rp1_freq; if (IS_HASWELL(i915) || IS_BROADWELL(i915) || - IS_GEN9_BC(i915) || INTEL_GEN(i915) >= 10) { + IS_GEN9_BC(i915) || GRAPHICS_VER(i915) >= 10) { u32 ddcc_status = 0; if (sandybridge_pcode_read(i915, @@ -1012,7 +1012,7 @@ static void gen6_rps_init(struct intel_rps *rps) rps->max_freq); } - if (IS_GEN9_BC(i915) || INTEL_GEN(i915) >= 10) { + if (IS_GEN9_BC(i915) || GRAPHICS_VER(i915) >= 10) { /* Store the frequency values in 16.66 MHZ units, which is * the natural hardware unit for SKL */ @@ -1048,7 +1048,7 @@ static bool gen9_rps_enable(struct intel_rps *rps) struct intel_uncore *uncore = gt->uncore; /* Program defaults and thresholds for RPS */ - if (IS_GEN(gt->i915, 9)) + if (GRAPHICS_VER(gt->i915) == 9) intel_uncore_write_fw(uncore, GEN6_RC_VIDEO_FREQ, GEN9_FREQUENCY(rps->rp1_freq)); @@ -1365,16 +1365,16 @@ void intel_rps_enable(struct intel_rps *rps) enabled = chv_rps_enable(rps); else if (IS_VALLEYVIEW(i915)) enabled = vlv_rps_enable(rps); - else if (INTEL_GEN(i915) >= 9) + else if (GRAPHICS_VER(i915) >= 9) enabled = gen9_rps_enable(rps); - else if (INTEL_GEN(i915) >= 8) + else if (GRAPHICS_VER(i915) >= 8) enabled = gen8_rps_enable(rps); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) enabled = gen6_rps_enable(rps); else if (IS_IRONLAKE_M(i915)) enabled = gen5_rps_enable(rps); else - MISSING_CASE(INTEL_GEN(i915)); + MISSING_CASE(GRAPHICS_VER(i915)); intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL); if (!enabled) return; @@ -1393,7 +1393,7 @@ void intel_rps_enable(struct intel_rps *rps) if (has_busy_stats(rps)) intel_rps_set_timer(rps); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) intel_rps_set_interrupts(rps); else /* Ironlake currently uses intel_ips.ko */ {} @@ -1414,7 +1414,7 @@ void intel_rps_disable(struct intel_rps *rps) intel_rps_clear_interrupts(rps); intel_rps_clear_timer(rps); - if (INTEL_GEN(i915) >= 6) + if (GRAPHICS_VER(i915) >= 6) gen6_rps_disable(rps); else if (IS_IRONLAKE_M(i915)) gen5_rps_disable(rps); @@ -1453,14 +1453,14 @@ int intel_gpu_freq(struct intel_rps *rps, int val) { struct drm_i915_private *i915 = rps_to_i915(rps); - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) return DIV_ROUND_CLOSEST(val * GT_FREQUENCY_MULTIPLIER, GEN9_FREQ_SCALER); else if (IS_CHERRYVIEW(i915)) return chv_gpu_freq(rps, val); else if (IS_VALLEYVIEW(i915)) return byt_gpu_freq(rps, val); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) return val * GT_FREQUENCY_MULTIPLIER; else return val; @@ -1470,14 +1470,14 @@ int intel_freq_opcode(struct intel_rps *rps, int val) { struct drm_i915_private *i915 = rps_to_i915(rps); - if (INTEL_GEN(i915) >= 9) + if (GRAPHICS_VER(i915) >= 9) return DIV_ROUND_CLOSEST(val * GEN9_FREQ_SCALER, GT_FREQUENCY_MULTIPLIER); else if (IS_CHERRYVIEW(i915)) return chv_freq_opcode(rps, val); else if (IS_VALLEYVIEW(i915)) return byt_freq_opcode(rps, val); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) return DIV_ROUND_CLOSEST(val, GT_FREQUENCY_MULTIPLIER); else return val; @@ -1770,7 +1770,7 @@ void gen6_rps_irq_handler(struct intel_rps *rps, u32 pm_iir) spin_unlock(>->irq_lock); } - if (INTEL_GEN(gt->i915) >= 8) + if (GRAPHICS_VER(gt->i915) >= 8) return; if (pm_iir & PM_VEBOX_USER_INTERRUPT) @@ -1833,7 +1833,7 @@ void intel_rps_init(struct intel_rps *rps) chv_rps_init(rps); else if (IS_VALLEYVIEW(i915)) vlv_rps_init(rps); - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) gen6_rps_init(rps); else if (IS_IRONLAKE_M(i915)) gen5_rps_init(rps); @@ -1843,7 +1843,7 @@ void intel_rps_init(struct intel_rps *rps) rps->min_freq_softlimit = rps->min_freq; /* After setting max-softlimit, find the overclock max freq */ - if (IS_GEN(i915, 6) || IS_IVYBRIDGE(i915) || IS_HASWELL(i915)) { + if (GRAPHICS_VER(i915) == 6 || IS_IVYBRIDGE(i915) || IS_HASWELL(i915)) { u32 params = 0; sandybridge_pcode_read(i915, GEN6_READ_OC_PARAMS, @@ -1872,16 +1872,16 @@ void intel_rps_init(struct intel_rps *rps) * * TODO: verify if this can be reproduced on VLV,CHV. */ - if (INTEL_GEN(i915) <= 7) + if (GRAPHICS_VER(i915) <= 7) rps->pm_intrmsk_mbz |= GEN6_PM_RP_UP_EI_EXPIRED; - if (INTEL_GEN(i915) >= 8 && INTEL_GEN(i915) < 11) + if (GRAPHICS_VER(i915) >= 8 && GRAPHICS_VER(i915) < 11) rps->pm_intrmsk_mbz |= GEN8_PMINTR_DISABLE_REDIRECT_TO_GUC; } void intel_rps_sanitize(struct intel_rps *rps) { - if (INTEL_GEN(rps_to_i915(rps)) >= 6) + if (GRAPHICS_VER(rps_to_i915(rps)) >= 6) rps_disable_interrupts(rps); } @@ -1892,11 +1892,11 @@ u32 intel_rps_get_cagf(struct intel_rps *rps, u32 rpstat) if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) cagf = (rpstat >> 8) & 0xff; - else if (INTEL_GEN(i915) >= 9) + else if (GRAPHICS_VER(i915) >= 9) cagf = (rpstat & GEN9_CAGF_MASK) >> GEN9_CAGF_SHIFT; else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) cagf = (rpstat & HSW_CAGF_MASK) >> HSW_CAGF_SHIFT; - else if (INTEL_GEN(i915) >= 6) + else if (GRAPHICS_VER(i915) >= 6) cagf = (rpstat & GEN6_CAGF_MASK) >> GEN6_CAGF_SHIFT; else cagf = gen5_invert_freq(rps, (rpstat & MEMSTAT_PSTATE_MASK) >> @@ -1915,7 +1915,7 @@ static u32 read_cagf(struct intel_rps *rps) vlv_punit_get(i915); freq = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS); vlv_punit_put(i915); - } else if (INTEL_GEN(i915) >= 6) { + } else if (GRAPHICS_VER(i915) >= 6) { freq = intel_uncore_read(uncore, GEN6_RPSTAT1); } else { freq = intel_uncore_read(uncore, MEMSTAT_ILK); @@ -1968,7 +1968,7 @@ void intel_rps_driver_register(struct intel_rps *rps) * We only register the i915 ips part with intel-ips once everything is * set up, to avoid intel-ips sneaking in and reading bogus values. */ - if (IS_GEN(gt->i915, 5)) { + if (GRAPHICS_VER(gt->i915) == 5) { GEM_BUG_ON(ips_mchdev); rcu_assign_pointer(ips_mchdev, gt->i915); ips_ping_for_i915_load(); diff --git a/drivers/gpu/drm/i915/gt/intel_sseu.c b/drivers/gpu/drm/i915/gt/intel_sseu.c index 0d9f74aec8fe..367fd44b81c8 100644 --- a/drivers/gpu/drm/i915/gt/intel_sseu.c +++ b/drivers/gpu/drm/i915/gt/intel_sseu.c @@ -590,13 +590,13 @@ void intel_sseu_info_init(struct intel_gt *gt) cherryview_sseu_info_init(gt); else if (IS_BROADWELL(i915)) bdw_sseu_info_init(gt); - else if (IS_GEN(i915, 9)) + else if (GRAPHICS_VER(i915) == 9) gen9_sseu_info_init(gt); - else if (IS_GEN(i915, 10)) + else if (GRAPHICS_VER(i915) == 10) gen10_sseu_info_init(gt); - else if (IS_GEN(i915, 11)) + else if (GRAPHICS_VER(i915) == 11) gen11_sseu_info_init(gt); - else if (INTEL_GEN(i915) >= 12) + else if (GRAPHICS_VER(i915) >= 12) gen12_sseu_info_init(gt); } @@ -613,7 +613,7 @@ u32 intel_sseu_make_rpcs(struct intel_gt *gt, * No explicit RPCS request is needed to ensure full * slice/subslice/EU enablement prior to Gen9. */ - if (INTEL_GEN(i915) < 9) + if (GRAPHICS_VER(i915) < 9) return 0; /* @@ -651,7 +651,7 @@ u32 intel_sseu_make_rpcs(struct intel_gt *gt, * subslices are enabled, or a count between one and four on the first * slice. */ - if (IS_GEN(i915, 11) && + if (GRAPHICS_VER(i915) == 11 && slices == 1 && subslices > min_t(u8, 4, hweight8(sseu->subslice_mask[0]) / 2)) { GEM_BUG_ON(subslices & 1); @@ -669,7 +669,7 @@ u32 intel_sseu_make_rpcs(struct intel_gt *gt, if (sseu->has_slice_pg) { u32 mask, val = slices; - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { mask = GEN11_RPCS_S_CNT_MASK; val <<= GEN11_RPCS_S_CNT_SHIFT; } else { diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c index 62cb9ee5bfc3..b62d1e31a645 100644 --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c @@ -699,9 +699,9 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine, if (IS_DG1(i915)) dg1_ctx_workarounds_init(engine, wal); - else if (IS_GEN(i915, 12)) + else if (GRAPHICS_VER(i915) == 12) gen12_ctx_workarounds_init(engine, wal); - else if (IS_GEN(i915, 11)) + else if (GRAPHICS_VER(i915) == 11) icl_ctx_workarounds_init(engine, wal); else if (IS_CANNONLAKE(i915)) cnl_ctx_workarounds_init(engine, wal); @@ -719,14 +719,14 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine, chv_ctx_workarounds_init(engine, wal); else if (IS_BROADWELL(i915)) bdw_ctx_workarounds_init(engine, wal); - else if (IS_GEN(i915, 7)) + else if (GRAPHICS_VER(i915) == 7) gen7_ctx_workarounds_init(engine, wal); - else if (IS_GEN(i915, 6)) + else if (GRAPHICS_VER(i915) == 6) gen6_ctx_workarounds_init(engine, wal); - else if (INTEL_GEN(i915) < 8) + else if (GRAPHICS_VER(i915) < 8) ; else - MISSING_CASE(INTEL_GEN(i915)); + MISSING_CASE(GRAPHICS_VER(i915)); wa_init_finish(wal); } @@ -950,7 +950,7 @@ wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal) unsigned int slice, subslice; u32 l3_en, mcr, mcr_mask; - GEM_BUG_ON(INTEL_GEN(i915) < 10); + GEM_BUG_ON(GRAPHICS_VER(i915) < 10); /* * WaProgramMgsrForL3BankSpecificMmioReads: cnl,icl @@ -980,7 +980,7 @@ wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal) * of every MMIO read. */ - if (INTEL_GEN(i915) >= 10 && is_power_of_2(sseu->slice_mask)) { + if (GRAPHICS_VER(i915) >= 10 && is_power_of_2(sseu->slice_mask)) { u32 l3_fuse = intel_uncore_read(&i915->uncore, GEN10_MIRROR_FUSE3) & GEN10_L3BANK_MASK; @@ -1002,7 +1002,7 @@ wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal) } subslice--; - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { mcr = GEN11_MCR_SLICE(slice) | GEN11_MCR_SUBSLICE(subslice); mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK; } else { @@ -1171,9 +1171,9 @@ gt_init_workarounds(struct drm_i915_private *i915, struct i915_wa_list *wal) dg1_gt_workarounds_init(i915, wal); else if (IS_TIGERLAKE(i915)) tgl_gt_workarounds_init(i915, wal); - else if (IS_GEN(i915, 12)) + else if (GRAPHICS_VER(i915) == 12) gen12_gt_workarounds_init(i915, wal); - else if (IS_GEN(i915, 11)) + else if (GRAPHICS_VER(i915) == 11) icl_gt_workarounds_init(i915, wal); else if (IS_CANNONLAKE(i915)) cnl_gt_workarounds_init(i915, wal); @@ -1193,18 +1193,18 @@ gt_init_workarounds(struct drm_i915_private *i915, struct i915_wa_list *wal) vlv_gt_workarounds_init(i915, wal); else if (IS_IVYBRIDGE(i915)) ivb_gt_workarounds_init(i915, wal); - else if (IS_GEN(i915, 6)) + else if (GRAPHICS_VER(i915) == 6) snb_gt_workarounds_init(i915, wal); - else if (IS_GEN(i915, 5)) + else if (GRAPHICS_VER(i915) == 5) ilk_gt_workarounds_init(i915, wal); else if (IS_G4X(i915)) g4x_gt_workarounds_init(i915, wal); - else if (IS_GEN(i915, 4)) + else if (GRAPHICS_VER(i915) == 4) gen4_gt_workarounds_init(i915, wal); - else if (INTEL_GEN(i915) <= 8) + else if (GRAPHICS_VER(i915) <= 8) ; else - MISSING_CASE(INTEL_GEN(i915)); + MISSING_CASE(GRAPHICS_VER(i915)); } void intel_gt_init_workarounds(struct drm_i915_private *i915) @@ -1558,9 +1558,9 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine) if (IS_DG1(i915)) dg1_whitelist_build(engine); - else if (IS_GEN(i915, 12)) + else if (GRAPHICS_VER(i915) == 12) tgl_whitelist_build(engine); - else if (IS_GEN(i915, 11)) + else if (GRAPHICS_VER(i915) == 11) icl_whitelist_build(engine); else if (IS_CANNONLAKE(i915)) cnl_whitelist_build(engine); @@ -1576,10 +1576,10 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine) bxt_whitelist_build(engine); else if (IS_SKYLAKE(i915)) skl_whitelist_build(engine); - else if (INTEL_GEN(i915) <= 8) + else if (GRAPHICS_VER(i915) <= 8) ; else - MISSING_CASE(INTEL_GEN(i915)); + MISSING_CASE(GRAPHICS_VER(i915)); wa_init_finish(w); } @@ -1695,7 +1695,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) ENABLE_SMALLPL); } - if (IS_GEN(i915, 11)) { + if (GRAPHICS_VER(i915) == 11) { /* This is not an Wa. Enable for better image quality */ wa_masked_en(wal, _3D_CHICKEN3, @@ -1793,7 +1793,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) FF_DOP_CLOCK_GATE_DISABLE); } - if (IS_GEN_RANGE(i915, 9, 12)) { + if (IS_GRAPHICS_VER(i915, 9, 12)) { /* FtrPerCtxtPreemptionGranularityControl:skl,bxt,kbl,cfl,cnl,icl,tgl */ wa_masked_en(wal, GEN7_FF_SLICE_CS_CHICKEN1, @@ -1817,7 +1817,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) GEN9_POOLED_EU_LOAD_BALANCING_FIX_DISABLE); } - if (IS_GEN(i915, 9)) { + if (GRAPHICS_VER(i915) == 9) { /* WaContextSwitchWithConcurrentTLBInvalidate:skl,bxt,kbl,glk,cfl */ wa_masked_en(wal, GEN9_CSFE_CHICKEN1_RCS, @@ -1921,7 +1921,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE); } - if (IS_GEN(i915, 7)) { + if (GRAPHICS_VER(i915) == 7) { /* WaBCSVCSTlbInvalidationMode:ivb,vlv,hsw */ wa_masked_en(wal, GFX_MODE_GEN7, @@ -1953,7 +1953,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) GEN6_WIZ_HASHING_16x4); } - if (IS_GEN_RANGE(i915, 6, 7)) + if (IS_GRAPHICS_VER(i915, 6, 7)) /* * We need to disable the AsyncFlip performance optimisations in * order to use MI_WAIT_FOR_EVENT within the CS. It should @@ -1965,7 +1965,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) MI_MODE, ASYNC_FLIP_PERF_DISABLE); - if (IS_GEN(i915, 6)) { + if (GRAPHICS_VER(i915) == 6) { /* * Required for the hardware to program scanline values for * waiting @@ -2019,14 +2019,14 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) CM0_STC_EVICT_DISABLE_LRA_SNB); } - if (IS_GEN_RANGE(i915, 4, 6)) + if (IS_GRAPHICS_VER(i915, 4, 6)) /* WaTimedSingleVertexDispatch:cl,bw,ctg,elk,ilk,snb */ wa_add(wal, MI_MODE, 0, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH), /* XXX bit doesn't stick on Broadwater */ IS_I965G(i915) ? 0 : VS_TIMER_DISPATCH); - if (IS_GEN(i915, 4)) + if (GRAPHICS_VER(i915) == 4) /* * Disable CONSTANT_BUFFER before it is loaded from the context * image. For as it is loaded, it is executed and the stored @@ -2058,7 +2058,7 @@ xcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) static void engine_init_workarounds(struct intel_engine_cs *engine, struct i915_wa_list *wal) { - if (I915_SELFTEST_ONLY(INTEL_GEN(engine->i915) < 4)) + if (I915_SELFTEST_ONLY(GRAPHICS_VER(engine->i915) < 4)) return; if (engine->class == RENDER_CLASS) @@ -2071,7 +2071,7 @@ void intel_engine_init_workarounds(struct intel_engine_cs *engine) { struct i915_wa_list *wal = &engine->wa_list; - if (INTEL_GEN(engine->i915) < 4) + if (GRAPHICS_VER(engine->i915) < 4) return; wa_init_start(wal, "engine", engine->name); @@ -2112,9 +2112,9 @@ static bool mcr_range(struct drm_i915_private *i915, u32 offset) const struct mcr_range *mcr_ranges; int i; - if (INTEL_GEN(i915) >= 12) + if (GRAPHICS_VER(i915) >= 12) mcr_ranges = mcr_ranges_gen12; - else if (INTEL_GEN(i915) >= 8) + else if (GRAPHICS_VER(i915) >= 8) mcr_ranges = mcr_ranges_gen8; else return false; @@ -2143,7 +2143,7 @@ wa_list_srm(struct i915_request *rq, u32 srm, *cs; srm = MI_STORE_REGISTER_MEM | MI_SRM_LRM_GLOBAL_GTT; - if (INTEL_GEN(i915) >= 8) + if (GRAPHICS_VER(i915) >= 8) srm++; for (i = 0, wa = wal->list; i < wal->count; i++, wa++) { diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c index 3453eb77c498..64abf5feabfa 100644 --- a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c @@ -52,7 +52,7 @@ static int write_timestamp(struct i915_request *rq, int slot) return PTR_ERR(cs); cmd = MI_STORE_REGISTER_MEM | MI_USE_GGTT; - if (INTEL_GEN(rq->engine->i915) >= 8) + if (GRAPHICS_VER(rq->engine->i915) >= 8) cmd++; *cs++ = cmd; *cs++ = i915_mmio_reg_offset(RING_TIMESTAMP(rq->engine->mmio_base)); @@ -125,7 +125,7 @@ static int perf_mi_bb_start(void *arg) enum intel_engine_id id; int err = 0; - if (INTEL_GEN(gt->i915) < 7) /* for per-engine CS_TIMESTAMP */ + if (GRAPHICS_VER(gt->i915) < 7) /* for per-engine CS_TIMESTAMP */ return 0; perf_begin(gt); @@ -249,7 +249,7 @@ static int perf_mi_noop(void *arg) enum intel_engine_id id; int err = 0; - if (INTEL_GEN(gt->i915) < 7) /* for per-engine CS_TIMESTAMP */ + if (GRAPHICS_VER(gt->i915) < 7) /* for per-engine CS_TIMESTAMP */ return 0; perf_begin(gt); diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_pm.c b/drivers/gpu/drm/i915/gt/selftest_engine_pm.c index 2c898622bdfb..72cca3f0da21 100644 --- a/drivers/gpu/drm/i915/gt/selftest_engine_pm.c +++ b/drivers/gpu/drm/i915/gt/selftest_engine_pm.c @@ -198,7 +198,7 @@ static int live_engine_timestamps(void *arg) * the same CS clock. */ - if (INTEL_GEN(gt->i915) < 8) + if (GRAPHICS_VER(gt->i915) < 8) return 0; for_each_engine(engine, gt, id) { diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm/i915/gt/selftest_execlists.c index 1f93591a8c69..ea2203af0764 100644 --- a/drivers/gpu/drm/i915/gt/selftest_execlists.c +++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c @@ -3269,7 +3269,7 @@ static int live_preempt_user(void *arg) if (!intel_engine_has_preemption(engine)) continue; - if (IS_GEN(gt->i915, 8) && engine->class != RENDER_CLASS) + if (GRAPHICS_VER(gt->i915) == 8 && engine->class != RENDER_CLASS) continue; /* we need per-context GPR */ if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) { @@ -4293,7 +4293,7 @@ static int live_virtual_preserved(void *arg) return 0; /* As we use CS_GPR we cannot run before they existed on all engines. */ - if (INTEL_GEN(gt->i915) < 9) + if (GRAPHICS_VER(gt->i915) < 9) return 0; for (class = 0; class <= MAX_ENGINE_CLASS; class++) { diff --git a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c index c0845bf72dd3..b9441217ca3d 100644 --- a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c +++ b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c @@ -74,10 +74,10 @@ static int live_gt_clocks(void *arg) return 0; } - if (INTEL_GEN(gt->i915) < 4) /* Any CS_TIMESTAMP? */ + if (GRAPHICS_VER(gt->i915) < 4) /* Any CS_TIMESTAMP? */ return 0; - if (IS_GEN(gt->i915, 5)) + if (GRAPHICS_VER(gt->i915) == 5) /* * XXX CS_TIMESTAMP low dword is dysfunctional? * @@ -86,7 +86,7 @@ static int live_gt_clocks(void *arg) */ return 0; - if (IS_GEN(gt->i915, 4)) + if (GRAPHICS_VER(gt->i915) == 4) /* * XXX CS_TIMESTAMP appears gibberish * @@ -105,7 +105,7 @@ static int live_gt_clocks(void *arg) u64 time; u64 dt; - if (INTEL_GEN(engine->i915) < 7 && engine->id != RCS0) + if (GRAPHICS_VER(engine->i915) < 7 && engine->id != RCS0) continue; measure_clocks(engine, &cycles, &dt); diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c index 5b63d4df8c93..853246fad05f 100644 --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c @@ -180,7 +180,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) goto cancel_rq; batch = h->batch; - if (INTEL_GEN(gt->i915) >= 8) { + if (GRAPHICS_VER(gt->i915) >= 8) { *batch++ = MI_STORE_DWORD_IMM_GEN4; *batch++ = lower_32_bits(hws_address(hws, rq)); *batch++ = upper_32_bits(hws_address(hws, rq)); @@ -194,7 +194,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) *batch++ = MI_BATCH_BUFFER_START | 1 << 8 | 1; *batch++ = lower_32_bits(vma->node.start); *batch++ = upper_32_bits(vma->node.start); - } else if (INTEL_GEN(gt->i915) >= 6) { + } else if (GRAPHICS_VER(gt->i915) >= 6) { *batch++ = MI_STORE_DWORD_IMM_GEN4; *batch++ = 0; *batch++ = lower_32_bits(hws_address(hws, rq)); @@ -207,7 +207,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) *batch++ = MI_NOOP; *batch++ = MI_BATCH_BUFFER_START | 1 << 8; *batch++ = lower_32_bits(vma->node.start); - } else if (INTEL_GEN(gt->i915) >= 4) { + } else if (GRAPHICS_VER(gt->i915) >= 4) { *batch++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT; *batch++ = 0; *batch++ = lower_32_bits(hws_address(hws, rq)); @@ -243,7 +243,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) } flags = 0; - if (INTEL_GEN(gt->i915) <= 5) + if (GRAPHICS_VER(gt->i915) <= 5) flags |= I915_DISPATCH_SECURE; err = rq->engine->emit_bb_start(rq, vma->node.start, PAGE_SIZE, flags); diff --git a/drivers/gpu/drm/i915/gt/selftest_llc.c b/drivers/gpu/drm/i915/gt/selftest_llc.c index 94006f117bbd..459b775f163a 100644 --- a/drivers/gpu/drm/i915/gt/selftest_llc.c +++ b/drivers/gpu/drm/i915/gt/selftest_llc.c @@ -44,7 +44,7 @@ static int gen6_verify_ring_freq(struct intel_llc *llc) if (found != ia_freq) { pr_err("Min freq table(%d/[%d, %d]):%dMHz did not match expected CPU freq, found %d, expected %d\n", gpu_freq, consts.min_gpu_freq, consts.max_gpu_freq, - intel_gpu_freq(rps, gpu_freq * (INTEL_GEN(i915) >= 9 ? GEN9_FREQ_SCALER : 1)), + intel_gpu_freq(rps, gpu_freq * (GRAPHICS_VER(i915) >= 9 ? GEN9_FREQ_SCALER : 1)), found, ia_freq); err = -EINVAL; break; @@ -54,7 +54,7 @@ static int gen6_verify_ring_freq(struct intel_llc *llc) if (found != ring_freq) { pr_err("Min freq table(%d/[%d, %d]):%dMHz did not match expected ring freq, found %d, expected %d\n", gpu_freq, consts.min_gpu_freq, consts.max_gpu_freq, - intel_gpu_freq(rps, gpu_freq * (INTEL_GEN(i915) >= 9 ? GEN9_FREQ_SCALER : 1)), + intel_gpu_freq(rps, gpu_freq * (GRAPHICS_VER(i915) >= 9 ? GEN9_FREQ_SCALER : 1)), found, ring_freq); err = -EINVAL; break; diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c index d8f6623524e8..3119016d9910 100644 --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c @@ -584,7 +584,7 @@ static int __live_lrc_gpr(struct intel_engine_cs *engine, int err; int n; - if (INTEL_GEN(engine->i915) < 9 && engine->class != RENDER_CLASS) + if (GRAPHICS_VER(engine->i915) < 9 && engine->class != RENDER_CLASS) return 0; /* GPR only on rcs0 for gen8 */ err = gpr_make_dirty(engine->kernel_context); @@ -1389,10 +1389,10 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) static bool skip_isolation(const struct intel_engine_cs *engine) { - if (engine->class == COPY_ENGINE_CLASS && INTEL_GEN(engine->i915) == 9) + if (engine->class == COPY_ENGINE_CLASS && GRAPHICS_VER(engine->i915) == 9) return true; - if (engine->class == RENDER_CLASS && INTEL_GEN(engine->i915) == 11) + if (engine->class == RENDER_CLASS && GRAPHICS_VER(engine->i915) == 11) return true; return false; @@ -1551,7 +1551,7 @@ static int __live_lrc_indirect_ctx_bb(struct intel_engine_cs *engine) /* We use the already reserved extra page in context state */ if (!a->wa_bb_page) { GEM_BUG_ON(b->wa_bb_page); - GEM_BUG_ON(INTEL_GEN(engine->i915) == 12); + GEM_BUG_ON(GRAPHICS_VER(engine->i915) == 12); goto unpin_b; } diff --git a/drivers/gpu/drm/i915/gt/selftest_mocs.c b/drivers/gpu/drm/i915/gt/selftest_mocs.c index e55a887d11e2..b9bb0e6e97f7 100644 --- a/drivers/gpu/drm/i915/gt/selftest_mocs.c +++ b/drivers/gpu/drm/i915/gt/selftest_mocs.c @@ -183,7 +183,7 @@ static bool mcr_range(struct drm_i915_private *i915, u32 offset) * which only controls CPU initiated MMIO. Routing does not * work for CS access so we cannot verify them on this path. */ - return INTEL_GEN(i915) >= 8 && offset >= 0xb000 && offset <= 0xb4ff; + return GRAPHICS_VER(i915) >= 8 && offset >= 0xb000 && offset <= 0xb4ff; } static int check_l3cc_table(struct intel_engine_cs *engine, diff --git a/drivers/gpu/drm/i915/gt/selftest_rc6.c b/drivers/gpu/drm/i915/gt/selftest_rc6.c index 710f825f6e5a..8c70b7e12074 100644 --- a/drivers/gpu/drm/i915/gt/selftest_rc6.c +++ b/drivers/gpu/drm/i915/gt/selftest_rc6.c @@ -140,7 +140,7 @@ static const u32 *__live_rc6_ctx(struct intel_context *ce) } cmd = MI_STORE_REGISTER_MEM | MI_USE_GGTT; - if (INTEL_GEN(rq->engine->i915) >= 8) + if (GRAPHICS_VER(rq->engine->i915) >= 8) cmd++; *cs++ = cmd; @@ -193,7 +193,7 @@ int live_rc6_ctx_wa(void *arg) int err = 0; /* A read of CTX_INFO upsets rc6. Poke the bear! */ - if (INTEL_GEN(gt->i915) < 8) + if (GRAPHICS_VER(gt->i915) < 8) return 0; engines = randomised_engines(gt, &prng, &count); diff --git a/drivers/gpu/drm/i915/gt/selftest_ring_submission.c b/drivers/gpu/drm/i915/gt/selftest_ring_submission.c index c12e74171b63..041954408d0f 100644 --- a/drivers/gpu/drm/i915/gt/selftest_ring_submission.c +++ b/drivers/gpu/drm/i915/gt/selftest_ring_submission.c @@ -41,10 +41,10 @@ static struct i915_vma *create_wally(struct intel_engine_cs *engine) return ERR_CAST(cs); } - if (INTEL_GEN(engine->i915) >= 6) { + if (GRAPHICS_VER(engine->i915) >= 6) { *cs++ = MI_STORE_DWORD_IMM_GEN4; *cs++ = 0; - } else if (INTEL_GEN(engine->i915) >= 4) { + } else if (GRAPHICS_VER(engine->i915) >= 4) { *cs++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT; *cs++ = 0; } else { @@ -266,7 +266,7 @@ static int live_ctx_switch_wa(void *arg) if (!intel_engine_can_store_dword(engine)) continue; - if (IS_GEN_RANGE(gt->i915, 4, 5)) + if (IS_GRAPHICS_VER(gt->i915, 4, 5)) continue; /* MI_STORE_DWORD is privileged! */ saved_wa = fetch_and_zero(&engine->wa_ctx.vma); diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c b/drivers/gpu/drm/i915/gt/selftest_rps.c index 3ca1bd5793c3..7ee2513e15f9 100644 --- a/drivers/gpu/drm/i915/gt/selftest_rps.c +++ b/drivers/gpu/drm/i915/gt/selftest_rps.c @@ -204,7 +204,7 @@ static void show_pstate_limits(struct intel_rps *rps) i915_mmio_reg_offset(BXT_RP_STATE_CAP), intel_uncore_read(rps_to_uncore(rps), BXT_RP_STATE_CAP)); - } else if (IS_GEN(i915, 9)) { + } else if (GRAPHICS_VER(i915) == 9) { pr_info("P_STATE_LIMITS[%x]: 0x%08x\n", i915_mmio_reg_offset(GEN9_RP_STATE_LIMITS), intel_uncore_read(rps_to_uncore(rps), @@ -222,7 +222,7 @@ int live_rps_clock_interval(void *arg) struct igt_spinner spin; int err = 0; - if (!intel_rps_is_enabled(rps) || INTEL_GEN(gt->i915) < 6) + if (!intel_rps_is_enabled(rps) || GRAPHICS_VER(gt->i915) < 6) return 0; if (igt_spinner_init(&spin, gt)) @@ -506,7 +506,7 @@ static void show_pcu_config(struct intel_rps *rps) min_gpu_freq = rps->min_freq; max_gpu_freq = rps->max_freq; - if (INTEL_GEN(i915) >= 9) { + if (GRAPHICS_VER(i915) >= 9) { /* Convert GT frequency to 50 HZ units */ min_gpu_freq /= GEN9_FREQ_SCALER; max_gpu_freq /= GEN9_FREQ_SCALER; @@ -614,7 +614,7 @@ int live_rps_frequency_cs(void *arg) if (!intel_rps_is_enabled(rps)) return 0; - if (INTEL_GEN(gt->i915) < 8) /* for CS simplicity */ + if (GRAPHICS_VER(gt->i915) < 8) /* for CS simplicity */ return 0; if (CPU_LATENCY >= 0) @@ -755,7 +755,7 @@ int live_rps_frequency_srm(void *arg) if (!intel_rps_is_enabled(rps)) return 0; - if (INTEL_GEN(gt->i915) < 8) /* for CS simplicity */ + if (GRAPHICS_VER(gt->i915) < 8) /* for CS simplicity */ return 0; if (CPU_LATENCY >= 0) @@ -1031,7 +1031,7 @@ int live_rps_interrupt(void *arg) * First, let's check whether or not we are receiving interrupts. */ - if (!intel_rps_has_interrupts(rps) || INTEL_GEN(gt->i915) < 6) + if (!intel_rps_has_interrupts(rps) || GRAPHICS_VER(gt->i915) < 6) return 0; intel_gt_pm_get(gt); @@ -1136,7 +1136,7 @@ int live_rps_power(void *arg) * that theory. */ - if (!intel_rps_is_enabled(rps) || INTEL_GEN(gt->i915) < 6) + if (!intel_rps_is_enabled(rps) || GRAPHICS_VER(gt->i915) < 6) return 0; if (!librapl_supported(gt->i915)) @@ -1240,7 +1240,7 @@ int live_rps_dynamic(void *arg) * moving parts into dynamic reclocking based on load. */ - if (!intel_rps_is_enabled(rps) || INTEL_GEN(gt->i915) < 6) + if (!intel_rps_is_enabled(rps) || GRAPHICS_VER(gt->i915) < 6) return 0; if (igt_spinner_init(&spin, gt)) diff --git a/drivers/gpu/drm/i915/gt/selftest_timeline.c b/drivers/gpu/drm/i915/gt/selftest_timeline.c index 9adbd9d147be..64da0c91dec1 100644 --- a/drivers/gpu/drm/i915/gt/selftest_timeline.c +++ b/drivers/gpu/drm/i915/gt/selftest_timeline.c @@ -457,12 +457,12 @@ static int emit_ggtt_store_dw(struct i915_request *rq, u32 addr, u32 value) if (IS_ERR(cs)) return PTR_ERR(cs); - if (INTEL_GEN(rq->engine->i915) >= 8) { + if (GRAPHICS_VER(rq->engine->i915) >= 8) { *cs++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT; *cs++ = addr; *cs++ = 0; *cs++ = value; - } else if (INTEL_GEN(rq->engine->i915) >= 4) { + } else if (GRAPHICS_VER(rq->engine->i915) >= 4) { *cs++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT; *cs++ = 0; *cs++ = addr; @@ -992,7 +992,7 @@ static int live_hwsp_read(void *arg) * even across multiple wraps. */ - if (INTEL_GEN(gt->i915) < 8) /* CS convenience [SRM/LRM] */ + if (GRAPHICS_VER(gt->i915) < 8) /* CS convenience [SRM/LRM] */ return 0; tl = intel_timeline_create(gt); diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c index 64937ec3f2dc..c30754daf4b1 100644 --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c @@ -145,7 +145,7 @@ read_nonprivs(struct intel_context *ce) goto err_req; srm = MI_STORE_REGISTER_MEM | MI_SRM_LRM_GLOBAL_GTT; - if (INTEL_GEN(engine->i915) >= 8) + if (GRAPHICS_VER(engine->i915) >= 8) srm++; cs = intel_ring_begin(rq, 4 * RING_MAX_NONPRIV_SLOTS); @@ -546,7 +546,7 @@ static int check_dirty_whitelist(struct intel_context *ce) srm = MI_STORE_REGISTER_MEM; lrm = MI_LOAD_REGISTER_MEM; - if (INTEL_GEN(engine->i915) >= 8) + if (GRAPHICS_VER(engine->i915) >= 8) lrm++, srm++; pr_debug("%s: Writing garbage to %x\n", @@ -749,7 +749,7 @@ static int live_dirty_whitelist(void *arg) /* Can the user write to the whitelisted registers? */ - if (INTEL_GEN(gt->i915) < 7) /* minimum requirement for LRI, SRM, LRM */ + if (GRAPHICS_VER(gt->i915) < 7) /* minimum requirement for LRI, SRM, LRM */ return 0; for_each_engine(engine, gt, id) { @@ -829,7 +829,7 @@ static int read_whitelisted_registers(struct intel_context *ce, goto err_req; srm = MI_STORE_REGISTER_MEM; - if (INTEL_GEN(engine->i915) >= 8) + if (GRAPHICS_VER(engine->i915) >= 8) srm++; cs = intel_ring_begin(rq, 4 * engine->whitelist.count); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c index adae04c47aab..84f806911370 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c @@ -60,7 +60,7 @@ void intel_guc_init_send_regs(struct intel_guc *guc) enum forcewake_domains fw_domains = 0; unsigned int i; - if (INTEL_GEN(gt->i915) >= 11) { + if (GRAPHICS_VER(gt->i915) >= 11) { guc->send_regs.base = i915_mmio_reg_offset(GEN11_SOFT_SCRATCH(0)); guc->send_regs.count = GEN11_SOFT_SCRATCH_COUNT; @@ -176,7 +176,7 @@ void intel_guc_init_early(struct intel_guc *guc) mutex_init(&guc->send_mutex); spin_lock_init(&guc->irq_lock); - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { guc->notify_reg = GEN11_GUC_HOST_INTERRUPT; guc->interrupts.reset = gen11_reset_guc_interrupts; guc->interrupts.enable = gen11_enable_guc_interrupts; diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c index 17526717368c..b32fafba2a90 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c @@ -162,7 +162,7 @@ static void __guc_ads_init(struct intel_guc *guc) blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK] = gt->info.vdbox_sfc_access; - if (INTEL_GEN(i915) >= 12 && !IS_DGFX(i915)) { + if (GRAPHICS_VER(i915) >= 12 && !IS_DGFX(i915)) { u32 distdbreg = intel_uncore_read(gt->uncore, GEN12_DIST_DBS_POPULATED); blob->system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_DOORBELL_COUNT_PER_SQIDI] = diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c index 2270d6b3b272..76fe766ad1bc 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c @@ -30,7 +30,7 @@ static void guc_prepare_xfer(struct intel_uncore *uncore) else intel_uncore_write(uncore, GEN9_GT_PM_CONFIG, GT_DOORBELL_ENABLE); - if (IS_GEN(uncore->i915, 9)) { + if (GRAPHICS_VER(uncore->i915) == 9) { /* DOP Clock Gating Enable for GuC clocks */ intel_uncore_rmw(uncore, GEN7_MISCCPCTL, 0, GEN8_DOP_CLOCK_GATE_GUC_ENABLE); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c index 335719f17490..541f6da1ec47 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c @@ -438,7 +438,7 @@ static void guc_interrupts_capture(struct intel_gt *gt) u32 irqs = GT_CONTEXT_SWITCH_INTERRUPT; u32 dmask = irqs << 16 | irqs; - GEM_BUG_ON(INTEL_GEN(gt->i915) < 11); + GEM_BUG_ON(GRAPHICS_VER(gt->i915) < 11); /* Don't handle the ctx switch interrupt in GuC submission mode */ intel_uncore_rmw(uncore, GEN11_RENDER_COPY_INTR_ENABLE, dmask, 0); @@ -451,7 +451,7 @@ static void guc_interrupts_release(struct intel_gt *gt) u32 irqs = GT_CONTEXT_SWITCH_INTERRUPT; u32 dmask = irqs << 16 | irqs; - GEM_BUG_ON(INTEL_GEN(gt->i915) < 11); + GEM_BUG_ON(GRAPHICS_VER(gt->i915) < 11); /* Handle ctx switch interrupts again */ intel_uncore_rmw(uncore, GEN11_RENDER_COPY_INTR_ENABLE, 0, dmask); @@ -648,7 +648,7 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine) engine->emit_flush = gen8_emit_flush_xcs; engine->emit_init_breadcrumb = gen8_emit_init_breadcrumb; engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_xcs; - if (INTEL_GEN(engine->i915) >= 12) { + if (GRAPHICS_VER(engine->i915) >= 12) { engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb_xcs; engine->emit_flush = gen12_emit_flush_xcs; } @@ -670,7 +670,7 @@ static void guc_default_vfuncs(struct intel_engine_cs *engine) static void rcs_submission_override(struct intel_engine_cs *engine) { - switch (INTEL_GEN(engine->i915)) { + switch (GRAPHICS_VER(engine->i915)) { case 12: engine->emit_flush = gen12_emit_flush_rcs; engine->emit_fini_breadcrumb = gen12_emit_fini_breadcrumb_rcs; @@ -700,7 +700,7 @@ int intel_guc_submission_setup(struct intel_engine_cs *engine) * The setup relies on several assumptions (e.g. irqs always enabled) * that are only valid on gen11+ */ - GEM_BUG_ON(INTEL_GEN(i915) < 11); + GEM_BUG_ON(GRAPHICS_VER(i915) < 11); tasklet_setup(&engine->execlists.tasklet, guc_submission_tasklet); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc.c b/drivers/gpu/drm/i915/gt/uc/intel_huc.c index 56d2144dc6a0..fc5387b410a2 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_huc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc.c @@ -43,7 +43,7 @@ void intel_huc_init_early(struct intel_huc *huc) intel_uc_fw_init_early(&huc->fw, INTEL_UC_FW_TYPE_HUC); - if (INTEL_GEN(i915) >= 11) { + if (GRAPHICS_VER(i915) >= 11) { huc->status.reg = GEN11_HUC_KERNEL_LOAD_INFO; huc->status.mask = HUC_LOAD_SUCCESSFUL; huc->status.value = HUC_LOAD_SUCCESSFUL; diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c index 6abb8f2dc33d..6c2bf4b6bc10 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c @@ -23,7 +23,7 @@ static void uc_expand_default_options(struct intel_uc *uc) return; /* Don't enable GuC/HuC on pre-Gen12 */ - if (INTEL_GEN(i915) < 12) { + if (GRAPHICS_VER(i915) < 12) { i915->params.enable_guc = 0; return; } @@ -467,7 +467,7 @@ static int __uc_init_hw(struct intel_uc *uc) /* WaEnableuKernelHeaderValidFix:skl */ /* WaEnableGuCBootHashCheckNotSet:skl,bxt,kbl */ - if (IS_GEN(i915, 9)) + if (GRAPHICS_VER(i915) == 9) attempts = 3; else attempts = 1; -- 2.31.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 C0EA0C4709B for ; Thu, 3 Jun 2021 16:55:23 +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 89235613F1 for ; Thu, 3 Jun 2021 16:55:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 89235613F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 566CB6F4DB; Thu, 3 Jun 2021 16:55:09 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0E8AD6E85E; Thu, 3 Jun 2021 16:55:06 +0000 (UTC) IronPort-SDR: iAAtAmj/oajWICkSko7+xX7y8rfxs3/4yxP8IoOd0eINydMY1Z4V7Pk5AVm3WCKUXXbZYKz6bj ci7GD5nbCdZg== X-IronPort-AV: E=McAfee;i="6200,9189,10004"; a="184464192" X-IronPort-AV: E=Sophos;i="5.83,246,1616482800"; d="scan'208";a="184464192" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2021 09:54:51 -0700 IronPort-SDR: LpQn5R0AG6s55qOH8fdeouerzNCuKWNGkjC5oZFJace/6iJ2PXO9drNdwSUIu9VZbqIMPHbo1K 3uxVAXFMKL9w== X-IronPort-AV: E=Sophos;i="5.83,246,1616482800"; d="scan'208";a="400643670" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.202]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2021 09:54:50 -0700 From: Lucas De Marchi To: intel-gfx@lists.freedesktop.org Date: Thu, 3 Jun 2021 09:54:22 -0700 Message-Id: <20210603165428.3625495-2-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603165428.3625495-1-lucas.demarchi@intel.com> References: <20210603165428.3625495-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 1/7] drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhpcyB3YXMgZG9uZSBieSB0aGUgZm9sbG93aW5nIHNlbWFudGljIHBhdGNoOgoKCUBAIGV4cHJl c3Npb24gaTkxNTsgQEAKCS0gSU5URUxfR0VOKGk5MTUpCgkrIEdSQVBISUNTX1ZFUihpOTE1KQoK CUBAIGV4cHJlc3Npb24gaTkxNTsgZXhwcmVzc2lvbiBFOyBAQAoJLSBJTlRFTF9HRU4oaTkxNSkg Pj0gRQoJKyBHUkFQSElDU19WRVIoaTkxNSkgPj0gRQoKCUBAIGV4cHJlc3Npb24gZGV2X3ByaXY7 IGV4cHJlc3Npb24gRTsgQEAKCS0gIUlTX0dFTihkZXZfcHJpdiwgRSkKCSsgR1JBUEhJQ1NfVkVS KGRldl9wcml2KSAhPSBFCgoJQEAgZXhwcmVzc2lvbiBkZXZfcHJpdjsgZXhwcmVzc2lvbiBFOyBA QAoJLSBJU19HRU4oZGV2X3ByaXYsIEUpCgkrIEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPT0gRQoK CUBACglleHByZXNzaW9uIGRldl9wcml2OwoJZXhwcmVzc2lvbiBmcm9tLCB1bnRpbDsKCUBACgkt IElTX0dFTl9SQU5HRShkZXZfcHJpdiwgZnJvbSwgdW50aWwpCgkrIElTX0dSQVBISUNTX1ZFUihk ZXZfcHJpdiwgZnJvbSwgdW50aWwpCgoJQGRlZkAKCWV4cHJlc3Npb24gRTsKCWlkZW50aWZpZXIg aWQgPX4gIl5nZW4kIjsKCUBACgktIGlkID0gR1JBUEhJQ1NfVkVSKEUpCgkrIHZlciA9IEdSQVBI SUNTX1ZFUihFKQoKCUBACglpZGVudGlmaWVyIGRlZi5pZDsKCUBACgktIGlkCgkrIHZlcgoKSXQg YWxzbyB0YWtlcyBjYXJlIG9mIHJlbmFtaW5nIHRoZSB2YXJpYWJsZSB3ZSBhc3NpZ24gdG8gR1JB UEhJQ1NfVkVSKCkKc28gdG8gdXNlICJ2ZXIiIHJhdGhlciB0aGFuICJnZW4iLgoKU2lnbmVkLW9m Zi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+ClJldmlld2Vk LWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2RlYnVnZnNfZ3RfcG0uYyAgICAgICB8IDM4ICsrKysrLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5jICAgICAgfCAgMiArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYyAgICAgIHwgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYyAgICAgICAgICB8ICAyICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3NzZXUuYyAgfCAgMiArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMgICAgIHwgNTQgKysrKysrKy0tLS0tLS0t CiAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYyAgfCAxOCArKy0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jICAgICAgICAgIHwgMTggKyst LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHRfZmVuY2luZy5jICB8IDM0ICsr KysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgICAgICAgICAgICB8 IDI3ICsrKystLS0tCiAuLi4vZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2Nsb2NrX3V0aWxzLmMg ICAgfCAxMiArKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYyAgICAg ICAgfCAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMgICAg IHwgMTAgKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndHQuYyAgICAgICAgICAg fCAxNCArKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAg fCAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgICAgICAgICAgIHwg NDYgKysrKysrLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jICAg ICAgICAgIHwgIDggKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9wcGd0dC5jICAg ICAgICAgfCAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2LmMgICAgICAg ICAgIHwgMTYgKystLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlbmRlcnN0YXRl LmMgICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jICAgICAg ICAgfCAxNCArKy0tCiAuLi4vZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5j ICAgfCA2NCArKysrKysrKystLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jwcy5jICAgICAgICAgICB8IDYwICsrKysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9zc2V1LmMgICAgICAgICAgfCAxNCArKy0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jICAgfCA2NiArKysrKysrKystLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfY3MuYyAgfCAgNiArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMgIHwgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jICB8ICA0ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ndF9wbS5jICAgICAgfCAgOCArLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5jICB8ICA4ICstLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgICAgICAgIHwgIDQgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jICAgICAgICB8ICA4ICstLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jICAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jICAgICAgICB8ICA0ICstCiAuLi4vZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfcmluZ19zdWJtaXNzaW9uLmMgICAgfCAgNiArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfcnBzLmMgICAgICAgIHwgMTYgKystLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMgICB8ICA2ICstCiAuLi4vZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgICAgfCAgOCArLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3VjL2ludGVsX2d1Yy5jICAgICAgICB8ICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF9ndWNfYWRzLmMgICAgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv dWMvaW50ZWxfZ3VjX2Z3LmMgICAgIHwgIDIgKy0KIC4uLi9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uYyB8IDEwICstLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfaHVjLmMgICAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX3VjLmMgICAgICAgICB8ICA0ICstCiA0NCBmaWxlcyBjaGFuZ2VkLCAzMjQgaW5zZXJ0aW9u cygrKSwgMzIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2RlYnVnZnNfZ3RfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2RlYnVnZnNfZ3Rf cG0uYwppbmRleCBkNGY0NDUyY2U1ZWQuLjAzODliY2VlYmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2RlYnVnZnNfZ3RfcG0uYwpAQCAtODUsMTQgKzg1LDE0IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9kcnBjKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAlndF9jb3JlX3N0YXR1cyA9IGludGVsX3VuY29y ZV9yZWFkX2Z3KHVuY29yZSwgR0VONl9HVF9DT1JFX1NUQVRVUyk7CiAKIAlyY2N0bDEgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjZfUkNfQ09OVFJPTCk7Ci0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSA5KSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KSB7CiAJCWdlbjlfcG93 ZXJnYXRlX2VuYWJsZSA9CiAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjlfUEdfRU5B QkxFKTsKIAkJZ2VuOV9wb3dlcmdhdGVfc3RhdHVzID0KIAkJCWludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgR0VOOV9QV1JHVF9ET01BSU5fU1RBVFVTKTsKIAl9CiAKLQlpZiAoSU5URUxfR0VOKGk5 MTUpIDw9IDcpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA3KQogCQlzYW5keWJyaWRnZV9w Y29kZV9yZWFkKGk5MTUsIEdFTjZfUENPREVfUkVBRF9SQzZWSURTLAogCQkJCSAgICAgICAmcmM2 dmlkcywgTlVMTCk7CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgaW50IGdlbjZfZHJwYyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJCSAgIHllc25vKHJjY3RsMSAmIEdFTjZfUkNfQ1RMX1JDMWVf RU5BQkxFKSk7CiAJc2VxX3ByaW50ZihtLCAiUkM2IEVuYWJsZWQ6ICVzXG4iLAogCQkgICB5ZXNu byhyY2N0bDEgJiBHRU42X1JDX0NUTF9SQzZfRU5BQkxFKSk7Ci0JaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA5KSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KSB7CiAJCXNlcV9wcmludGYo bSwgIlJlbmRlciBXZWxsIEdhdGluZyBFbmFibGVkOiAlc1xuIiwKIAkJCSAgIHllc25vKGdlbjlf cG93ZXJnYXRlX2VuYWJsZSAmIEdFTjlfUkVOREVSX1BHX0VOQUJMRSkpOwogCQlzZXFfcHJpbnRm KG0sICJNZWRpYSBXZWxsIEdhdGluZyBFbmFibGVkOiAlc1xuIiwKQEAgLTEzNCw3ICsxMzQsNyBA QCBzdGF0aWMgaW50IGdlbjZfZHJwYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAKIAlzZXFfcHJpbnRm KG0sICJDb3JlIFBvd2VyIERvd246ICVzXG4iLAogCQkgICB5ZXNubyhndF9jb3JlX3N0YXR1cyAm IEdFTjZfQ09SRV9DUERfU1RBVEVfTUFTSykpOwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkg eworCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewogCQlzZXFfcHJpbnRmKG0sICJSZW5k ZXIgUG93ZXIgV2VsbDogJXNcbiIsCiAJCQkgICAoZ2VuOV9wb3dlcmdhdGVfc3RhdHVzICYKIAkJ CSAgICBHRU45X1BXUkdUX1JFTkRFUl9TVEFUVVNfTUFTSykgPyAiVXAiIDogIkRvd24iKTsKQEAg LTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgaW50IGdlbjZfZHJwYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0p CiAJcHJpbnRfcmM2X3JlcyhtLCAiUkM2KyByZXNpZGVuY3kgc2luY2UgYm9vdDoiLCBHRU42X0dU X0dGWF9SQzZwKTsKIAlwcmludF9yYzZfcmVzKG0sICJSQzYrKyByZXNpZGVuY3kgc2luY2UgYm9v dDoiLCBHRU42X0dUX0dGWF9SQzZwcCk7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpIHsK KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDcpIHsKIAkJc2VxX3ByaW50ZihtLCAiUkM2ICAg dm9sdGFnZTogJWRtVlxuIiwKIAkJCSAgIEdFTjZfREVDT0RFX1JDNl9WSUQoKChyYzZ2aWRzID4+ IDApICYgMHhmZikpKTsKIAkJc2VxX3ByaW50ZihtLCAiUkM2KyAgdm9sdGFnZTogJWRtVlxuIiwK QEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFf ZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCiAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0 KHVuY29yZS0+cnBtKTsKIAotCWlmIChJU19HRU4oaTkxNSwgNSkpIHsKKwlpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDUpIHsKIAkJdTE2IHJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1 bmNvcmUsIE1FTVNXQ1RMKTsKIAkJdTE2IHJndnN0YXQgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVu Y29yZSwgTUVNU1RBVF9JTEspOwogCkBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIGludCBmcmVx dWVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAogCQlzZXFfcHJp bnRmKG0sICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCiAJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKLQl9IGVsc2UgaWYgKElOVEVM X0dFTihpOTE1KSA+PSA2KSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikg ewogCQl1MzIgcnBfc3RhdGVfbGltaXRzOwogCQl1MzIgZ3RfcGVyZl9zdGF0dXM7CiAJCXUzMiBy cF9zdGF0ZV9jYXA7CkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGludCBmcmVxdWVuY3lfc2hv dyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKIAogCQlyZXFmID0gaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBHRU42X1JQTlNXUkVRKTsKLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5 KSB7CisJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewogCQkJcmVxZiA+Pj0gMjM7CiAJ CX0gZWxzZSB7CiAJCQlyZXFmICY9IH5HRU42X1RVUkJPX0RJU0FCTEU7CkBAIC0zNTQsNyArMzU0 LDcgQEAgc3RhdGljIGludCBmcmVxdWVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KnVudXNlZCkKIAogCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCh1bmNvcmUsIEZPUkNFV0FL RV9BTEwpOwogCi0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpIHsKKwkJaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA+PSAxMSkgewogCQkJcG1faWVyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3Jl LCBHRU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfRU5BQkxFKTsKIAkJCXBtX2ltciA9IGludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgR0VOMTFfR1BNX1dHQk9YUEVSRl9JTlRSX01BU0spOwogCQkJLyoK QEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFf ZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJICovCiAJCQlwbV9pc3IgPSAwOwogCQkJcG1faWly ID0gMDsKLQkJfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgeworCQl9IGVsc2UgaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KSB7CiAJCQlwbV9pZXIgPSBpbnRlbF91bmNvcmVfcmVh ZCh1bmNvcmUsIEdFTjhfR1RfSUVSKDIpKTsKIAkJCXBtX2ltciA9IGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgR0VOOF9HVF9JTVIoMikpOwogCQkJcG1faXNyID0gaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBHRU44X0dUX0lTUigyKSk7CkBAIC0zODYsMTQgKzM4NiwxNCBAQCBzdGF0aWMgaW50 IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCiAJCXNl cV9wcmludGYobSwgIlBNIElFUj0weCUwOHggSU1SPTB4JTA4eCwgTUFTSz0weCUwOHhcbiIsCiAJ CQkgICBwbV9pZXIsIHBtX2ltciwgcG1fbWFzayk7Ci0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0g MTApCisJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPD0gMTApCiAJCQlzZXFfcHJpbnRmKG0sICJQ TSBJU1I9MHglMDh4IElJUj0weCUwOHhcbiIsCiAJCQkJICAgcG1faXNyLCBwbV9paXIpOwogCQlz ZXFfcHJpbnRmKG0sICJwbV9pbnRybXNrX21iejogMHglMDh4XG4iLAogCQkJICAgcnBzLT5wbV9p bnRybXNrX21ieik7CiAJCXNlcV9wcmludGYobSwgIkdUX1BFUkZfU1RBVFVTOiAweCUwOHhcbiIs IGd0X3BlcmZfc3RhdHVzKTsKIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgcmF0aW86 ICVkXG4iLAotCQkJICAgKGd0X3BlcmZfc3RhdHVzICYgKElOVEVMX0dFTihpOTE1KSA+PSA5ID8g MHgxZmYwMCA6IDB4ZmYwMCkpID4+IDgpOworCQkJICAgKGd0X3BlcmZfc3RhdHVzICYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA5ID8gMHgxZmYwMCA6IDB4ZmYwMCkpID4+IDgpOwogCQlzZXFfcHJp bnRmKG0sICJSZW5kZXIgcC1zdGF0ZSBWSUQ6ICVkXG4iLAogCQkJICAgZ3RfcGVyZl9zdGF0dXMg JiAweGZmKTsKIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgbGltaXQ6ICVkXG4iLApA QCAtNDM3LDIwICs0MzcsMjAgQEAgc3RhdGljIGludCBmcmVxdWVuY3lfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJbWF4X2ZyZXEgPSAoSVNfR0VOOV9MUChpOTE1KSA/ IHJwX3N0YXRlX2NhcCA+PiAwIDoKIAkJCSAgICBycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsK IAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoaTkxNSkgfHwKLQkJCSAgICAgSU5URUxfR0VOKGk5 MTUpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOworCQkJICAgICBHUkFQSElDU19WRVIo aTkxNSkgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7CiAJCXNlcV9wcmludGYobSwgIkxv d2VzdCAoUlBOKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAogCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBz LCBtYXhfZnJlcSkpOwogCiAJCW1heF9mcmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4ZmYwMCkgPj4g ODsKIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoaTkxNSkgfHwKLQkJCSAgICAgSU5URUxfR0VO KGk5MTUpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOworCQkJICAgICBHUkFQSElDU19W RVIoaTkxNSkgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7CiAJCXNlcV9wcmludGYobSwg Ik5vbWluYWwgKFJQMSkgZnJlcXVlbmN5OiAlZE1IelxuIiwKIAkJCSAgIGludGVsX2dwdV9mcmVx KHJwcywgbWF4X2ZyZXEpKTsKIAogCQltYXhfZnJlcSA9IChJU19HRU45X0xQKGk5MTUpID8gcnBf c3RhdGVfY2FwID4+IDE2IDoKIAkJCSAgICBycF9zdGF0ZV9jYXAgPj4gMCkgJiAweGZmOwogCQlt YXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhpOTE1KSB8fAotCQkJICAgICBJTlRFTF9HRU4oaTkxNSkg Pj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7CisJCQkgICAgIEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKIAkJc2VxX3ByaW50ZihtLCAiTWF4IG5v bi1vdmVyY2xvY2tlZCAoUlAwKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAogCQkJICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwogCQlzZXFfcHJpbnRmKG0sICJNYXggb3ZlcmNsb2NrZWQg ZnJlcXVlbmN5OiAlZE1IelxuIiwKQEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMgaW50IGxsY19z aG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5p OTE1OwotCWNvbnN0IGJvb2wgZWRyYW0gPSBJTlRFTF9HRU4oaTkxNSkgPiA4OworCWNvbnN0IGJv b2wgZWRyYW0gPSBHUkFQSElDU19WRVIoaTkxNSkgPiA4OwogCXN0cnVjdCBpbnRlbF9ycHMgKnJw cyA9ICZndC0+cnBzOwogCXVuc2lnbmVkIGludCBtYXhfZ3B1X2ZyZXEsIG1pbl9ncHVfZnJlcTsK IAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKQEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0aWMgaW50 IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIAogCW1pbl9ncHVfZnJl cSA9IHJwcy0+bWluX2ZyZXE7CiAJbWF4X2dwdV9mcmVxID0gcnBzLT5tYXhfZnJlcTsKLQlpZiAo SVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwlpZiAoSVNfR0VO OV9CQyhpOTE1KSB8fCBHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApIHsKIAkJLyogQ29udmVydCBH VCBmcmVxdWVuY3kgdG8gNTAgSFogdW5pdHMgKi8KIAkJbWluX2dwdV9mcmVxIC89IEdFTjlfRlJF UV9TQ0FMRVI7CiAJCW1heF9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwpAQCAtNTE4LDcg KzUxOCw3IEBAIHN0YXRpYyBpbnQgbGxjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpk YXRhKQogCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLAogCQkJCQkgIChncHVfZnJlcSAqCiAJCQkJ CSAgIChJU19HRU45X0JDKGk5MTUpIHx8Ci0JCQkJCSAgICBJTlRFTF9HRU4oaTkxNSkgPj0gMTAg PworCQkJCQkgICAgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwID8KIAkJCQkJICAgIEdFTjlfRlJF UV9TQ0FMRVIgOiAxKSkpLAogCQkJICAgKChpYV9mcmVxID4+IDApICYgMHhmZikgKiAxMDAsCiAJ CQkgICAoKGlhX2ZyZXEgPj4gOCkgJiAweGZmKSAqIDEwMCk7CkBAIC01ODAsNyArNTgwLDcgQEAg c3RhdGljIGludCBycHNfYm9vc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEp CiAKIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIsIFJFQURfT05DRShycHMtPmJv b3N0cykpOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2ICYmIGludGVsX3Jwc19pc19hY3Rp dmUocnBzKSkgeworCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNiAmJiBpbnRlbF9ycHNfaXNf YWN0aXZlKHJwcykpIHsKIAkJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29y ZTsKIAkJdTMyIHJwdXAsIHJwdXBlaTsKIAkJdTMyIHJwZG93biwgcnBkb3duZWk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYwppbmRleCA5NjQ2MjAwZDI3OTIuLjYxMzgz ODMwNTA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVf Y3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5jCkBAIC03 NCw3ICs3NCw3IEBAIGludCBnZW40X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCB1MzIgbW9kZSkKIAljbWQgPSBNSV9GTFVTSDsKIAlpZiAobW9kZSAmIEVNSVRfSU5WQUxJ REFURSkgewogCQljbWQgfD0gTUlfRVhFX0ZMVVNIOwotCQlpZiAoSVNfRzRYKHJxLT5lbmdpbmUt Pmk5MTUpIHx8IElTX0dFTihycS0+ZW5naW5lLT5pOTE1LCA1KSkKKwkJaWYgKElTX0c0WChycS0+ ZW5naW5lLT5pOTE1KSB8fCBHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPT0gNSkKIAkJ CWNtZCB8PSBNSV9JTlZBTElEQVRFX0lTUDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9n ZW44X2VuZ2luZV9jcy5jCmluZGV4IDczMmMyZWQxZDkzMy4uOTRlMGE1NjY5ZjkwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmMKQEAgLTM4LDcgKzM4LDcgQEAgaW50 IGdlbjhfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQog CQkgKiBPbiBHRU45OiBiZWZvcmUgVkZfQ0FDSEVfSU5WQUxJREFURSB3ZSBuZWVkIHRvIGVtaXQg YSBOVUxMCiAJCSAqIHBpcGUgY29udHJvbC4KIAkJICovCi0JCWlmIChJU19HRU4ocnEtPmVuZ2lu ZS0+aTkxNSwgOSkpCisJCWlmIChHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPT0gOSkK IAkJCXZmX2ZsdXNoX3dhID0gdHJ1ZTsKIAogCQkvKiBXYUZvckdBTUhhbmc6a2JsICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMKaW5kZXggZTNhODkyNGQyMjg2Li4yMWM4YjczNTBi N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMKQEAgLTcwOSw3ICs3MDksNyBA QCBzdHJ1Y3QgaTkxNV9wcGd0dCAqZ2VuOF9wcGd0dF9jcmVhdGUoc3RydWN0IGludGVsX2d0ICpn dCkKIAkgKgogCSAqIEdlbjEyIGhhcyBpbmhlcml0ZWQgdGhlIHNhbWUgcmVhZC1vbmx5IGZhdWx0 IGlzc3VlIGZyb20gZ2VuMTEuCiAJICovCi0JcHBndHQtPnZtLmhhc19yZWFkX29ubHkgPSAhSVNf R0VOX1JBTkdFKGd0LT5pOTE1LCAxMSwgMTIpOworCXBwZ3R0LT52bS5oYXNfcmVhZF9vbmx5ID0g IUlTX0dSQVBISUNTX1ZFUihndC0+aTkxNSwgMTEsIDEyKTsKIAogCWlmIChIQVNfTE1FTShndC0+ aTkxNSkpCiAJCXBwZ3R0LT52bS5hbGxvY19wdF9kbWEgPSBhbGxvY19wdF9sbWVtOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3NzZXUuYwppbmRleCA4ZGZkOGY2NTZh YWEuLmU4NmQ4MjU1ZmVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfY29udGV4dF9zc2V1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29u dGV4dF9zc2V1LmMKQEAgLTc2LDcgKzc2LDcgQEAgaW50ZWxfY29udGV4dF9yZWNvbmZpZ3VyZV9z c2V1KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKIHsKIAlpbnQgcmV0OwogCi0JR0VNX0JVR19P TihJTlRFTF9HRU4oY2UtPmVuZ2luZS0+aTkxNSkgPCA4KTsKKwlHRU1fQlVHX09OKEdSQVBISUNT X1ZFUihjZS0+ZW5naW5lLT5pOTE1KSA8IDgpOwogCiAJcmV0ID0gaW50ZWxfY29udGV4dF9sb2Nr X3Bpbm5lZChjZSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5n aW5lX2NzLmMKaW5kZXggM2Y5YTgxMWViMDJiLi41NGJhZjE3YjgxYjYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCkBAIC0yNDAsMTAgKzI0MCwxMCBAQCB2b2lk IGludGVsX2VuZ2luZV9zZXRfaHdzcF93cml0ZW1hc2soc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLCB1MzIgbWFzaykKIAkgKiBUaG91Z2ggdGhleSBhZGRlZCBtb3JlIHJpbmdzIG9uIGc0 eC9pbGssIHRoZXkgZGlkIG5vdCBhZGQKIAkgKiBwZXItZW5naW5lIEhXU1RBTSB1bnRpbCBnZW42 LgogCSAqLwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDYgJiYgZW5naW5lLT5jbGFz cyAhPSBSRU5ERVJfQ0xBU1MpCisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgNiAm JiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKIAkJcmV0dXJuOwogCi0JaWYgKElOVEVM X0dFTihlbmdpbmUtPmk5MTUpID49IDMpCisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDMpCiAJCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSFdTVEFNLCBtYXNrKTsKIAllbHNl CiAJCUVOR0lORV9XUklURTE2KGVuZ2luZSwgUklOR19IV1NUQU0sIG1hc2spOwpAQCAtMzE1LDcg KzMxNSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIGVudW0gaW50ZWxfZW5naW5lX2lkIGlkKQogCQlDT05GSUdfRFJNX0k5MTVfVElNRVNMSUNF X0RVUkFUSU9OOwogCiAJLyogT3ZlcnJpZGUgdG8gdW5pbnRlcnJ1cHRpYmxlIGZvciBPcGVuQ0wg d29ya2xvYWRzLiAqLwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPT0gMTIgJiYgZW5naW5lLT5jbGFz cyA9PSBSRU5ERVJfQ0xBU1MpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMiAmJiBlbmdp bmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykKIAkJZW5naW5lLT5wcm9wcy5wcmVlbXB0X3RpbWVv dXRfbXMgPSAwOwogCiAJZW5naW5lLT5kZWZhdWx0cyA9IGVuZ2luZS0+cHJvcHM7IC8qIG5ldmVy IHRvIGNoYW5nZSBhZ2FpbiAqLwpAQCAtMzUyLDggKzM1Miw4IEBAIHN0YXRpYyB2b2lkIF9fc2V0 dXBfZW5naW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJ CSAqIEhFVkMgc3VwcG9ydCBpcyBwcmVzZW50IG9uIGZpcnN0IGVuZ2luZSBpbnN0YW5jZQogCQkg KiBiZWZvcmUgR2VuMTEgYW5kIG9uIGFsbCBpbnN0YW5jZXMgYWZ0ZXJ3YXJkcy4KIAkJICovCi0J CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEgfHwKLQkJICAgIChJTlRFTF9HRU4oaTkxNSkgPj0g OSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQorCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49 IDExIHx8CisJCSAgICAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkgJiYgZW5naW5lLT5pbnN0YW5j ZSA9PSAwKSkKIAkJCWVuZ2luZS0+dWFiaV9jYXBhYmlsaXRpZXMgfD0KIAkJCQlJOTE1X1ZJREVP X0NMQVNTX0NBUEFCSUxJVFlfSEVWQzsKIApAQCAtMzYxLDE0ICszNjEsMTQgQEAgc3RhdGljIHZv aWQgX19zZXR1cF9lbmdpbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIAkJICogU0ZDIGJsb2NrIGlzIHByZXNlbnQgb25seSBvbiBldmVuIGxvZ2ljYWwgZW5n aW5lCiAJCSAqIGluc3RhbmNlcy4KIAkJICovCi0JCWlmICgoSU5URUxfR0VOKGk5MTUpID49IDEx ICYmCisJCWlmICgoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExICYmCiAJCSAgICAgKGVuZ2luZS0+ Z3QtPmluZm8udmRib3hfc2ZjX2FjY2VzcyAmCiAJCSAgICAgIEJJVChlbmdpbmUtPmluc3RhbmNl KSkpIHx8Ci0JCSAgICAoSU5URUxfR0VOKGk5MTUpID49IDkgJiYgZW5naW5lLT5pbnN0YW5jZSA9 PSAwKSkKKwkJICAgIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSAmJiBlbmdpbmUtPmluc3RhbmNl ID09IDApKQogCQkJZW5naW5lLT51YWJpX2NhcGFiaWxpdGllcyB8PQogCQkJCUk5MTVfVklERU9f QU5EX0VOSEFOQ0VfQ0xBU1NfQ0FQQUJJTElUWV9TRkM7CiAJfSBlbHNlIGlmIChlbmdpbmUtPmNs YXNzID09IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTKSB7Ci0JCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gOSkKKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQogCQkJZW5naW5lLT51YWJpX2Nh cGFiaWxpdGllcyB8PQogCQkJCUk5MTVfVklERU9fQU5EX0VOSEFOQ0VfQ0xBU1NfQ0FQQUJJTElU WV9TRkM7CiAJfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190 IGluaXRfZW5naW5lX21hc2soc3RydWN0IGludGVsX2d0ICpndCkKIAogCWluZm8tPmVuZ2luZV9t YXNrID0gSU5URUxfSU5GTyhpOTE1KS0+cGxhdGZvcm1fZW5naW5lX21hc2s7CiAKLQlpZiAoSU5U RUxfR0VOKGk5MTUpIDwgMTEpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDExKQogCQlyZXR1 cm4gaW5mby0+ZW5naW5lX21hc2s7CiAKIAltZWRpYV9mdXNlID0gfmludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgR0VOMTFfR1RfVkVCT1hfVkRCT1hfRElTQUJMRSk7CkBAIC00OTIsNyArNDkyLDcg QEAgc3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QgaW5pdF9lbmdpbmVfbWFzayhzdHJ1Y3QgaW50 ZWxfZ3QgKmd0KQogCQkgKiBob29rZWQgdXAgdG8gYW4gU0ZDIChTY2FsZXIgJiBGb3JtYXQgQ29u dmVydGVyKSB1bml0LgogCQkgKiBJbiBUR0wgZWFjaCBWREJPWCBoYXMgYWNjZXNzIHRvIGFuIFNG Qy4KIAkJICovCi0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIgfHwgbG9naWNhbF92ZGJveCsr ICUgMiA9PSAwKQorCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEyIHx8IGxvZ2ljYWxfdmRi b3grKyAlIDIgPT0gMCkKIAkJCWd0LT5pbmZvLnZkYm94X3NmY19hY2Nlc3MgfD0gQklUKGkpOwog CX0KIAlkcm1fZGJnKCZpOTE1LT5kcm0sICJ2ZGJveCBlbmFibGU6ICUwNHgsIGluc3RhbmNlczog JTA0bHhcbiIsCkBAIC03MjksNyArNzI5LDcgQEAgc3RhdGljIGludCBlbmdpbmVfc2V0dXBfY29t bW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlpbnRlbF9lbmdpbmVfaW5pdF93 aGl0ZWxpc3QoZW5naW5lKTsKIAlpbnRlbF9lbmdpbmVfaW5pdF9jdHhfd2EoZW5naW5lKTsKIAot CWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKKwlpZiAoR1JBUEhJQ1NfVkVSKGVu Z2luZS0+aTkxNSkgPj0gMTIpCiAJCWVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFTX1JF TEFUSVZFX01NSU87CiAKIAlyZXR1cm4gMDsKQEAgLTk5Nyw5ICs5OTcsOSBAQCB1NjQgaW50ZWxf ZW5naW5lX2dldF9hY3RpdmVfaGVhZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCiAKIAl1NjQgYWN0aGQ7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCisJaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA+PSA4KQogCQlhY3RoZCA9IEVOR0lORV9SRUFENjQoZW5naW5lLCBS SU5HX0FDVEhELCBSSU5HX0FDVEhEX1VEVyk7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDQpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDQpCiAJCWFjdGhkID0gRU5HSU5F X1JFQUQoZW5naW5lLCBSSU5HX0FDVEhEKTsKIAllbHNlCiAJCWFjdGhkID0gRU5HSU5FX1JFQUQo ZW5naW5lLCBBQ1RIRCk7CkBAIC0xMDExLDcgKzEwMTEsNyBAQCB1NjQgaW50ZWxfZW5naW5lX2dl dF9sYXN0X2JhdGNoX2hlYWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQog ewogCXU2NCBiYmFkZHI7CiAKLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkKKwlp ZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gOCkKIAkJYmJhZGRyID0gRU5HSU5FX1JF QUQ2NChlbmdpbmUsIFJJTkdfQkJBRERSLCBSSU5HX0JCQUREUl9VRFcpOwogCWVsc2UKIAkJYmJh ZGRyID0gRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0JCQUREUik7CkBAIC0xMDU4LDcgKzEwNTgs NyBAQCBpbnQgaW50ZWxfZW5naW5lX3N0b3BfY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogewogCWludCBlcnIgPSAwOwogCi0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwg MykKKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCAzKQogCQlyZXR1cm4gLUVOT0RF VjsKIAogCUVOR0lORV9UUkFDRShlbmdpbmUsICJcbiIpOwpAQCAtMTEwOCw3ICsxMTA4LDcgQEAg cmVhZF9zdWJzbGljZV9yZWcoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAog CXUzMiBtY3JfbWFzaywgbWNyX3NzLCBtY3IsIG9sZF9tY3IsIHZhbDsKIAllbnVtIGZvcmNld2Fr ZV9kb21haW5zIGZ3X2RvbWFpbnM7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7CisJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewogCQltY3JfbWFzayA9IEdFTjExX01DUl9T TElDRV9NQVNLIHwgR0VOMTFfTUNSX1NVQlNMSUNFX01BU0s7CiAJCW1jcl9zcyA9IEdFTjExX01D Ul9TTElDRShzbGljZSkgfCBHRU4xMV9NQ1JfU1VCU0xJQ0Uoc3Vic2xpY2UpOwogCX0gZWxzZSB7 CkBAIC0xMTU3LDcgKzExNTcsNyBAQCB2b2lkIGludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoY29u c3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCiAJbWVtc2V0KGluc3Rkb25lLCAw LCBzaXplb2YoKmluc3Rkb25lKSk7CiAKLQlzd2l0Y2ggKElOVEVMX0dFTihpOTE1KSkgeworCXN3 aXRjaCAoR1JBUEhJQ1NfVkVSKGk5MTUpKSB7CiAJZGVmYXVsdDoKIAkJaW5zdGRvbmUtPmluc3Rk b25lID0KIAkJCWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUklOR19JTlNURE9ORShtbWlvX2Jh c2UpKTsKQEAgLTExNjcsNyArMTE2Nyw3IEBAIHZvaWQgaW50ZWxfZW5naW5lX2dldF9pbnN0ZG9u ZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAKIAkJaW5zdGRvbmUtPnNs aWNlX2NvbW1vbiA9CiAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjdfU0NfSU5TVERP TkUpOwotCQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7CisJCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPj0gMTIpIHsKIAkJCWluc3Rkb25lLT5zbGljZV9jb21tb25fZXh0cmFbMF0gPQogCQkJ CWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOMTJfU0NfSU5TVERPTkVfRVhUUkEpOwogCQkJ aW5zdGRvbmUtPnNsaWNlX2NvbW1vbl9leHRyYVsxXSA9CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBz dGF0aWMgYm9vbCByaW5nX2lzX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQog CQlpZGxlID0gZmFsc2U7CiAKIAkvKiBObyBiaXQgZm9yIGdlbjIsIHNvIGFzc3VtZSB0aGUgQ1Mg cGFyc2VyIGlzIGlkbGUgKi8KLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPiAyICYmCisJ aWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID4gMiAmJgogCSAgICAhKEVOR0lORV9SRUFE KGVuZ2luZSwgUklOR19NSV9NT0RFKSAmIE1PREVfSURMRSkpCiAJCWlkbGUgPSBmYWxzZTsKIApA QCAtMTMyNyw3ICsxMzI3LDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVzX3Jlc2V0X2RlZmF1bHRfc3Vi bWlzc2lvbihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogCiBib29sIGludGVsX2VuZ2luZV9jYW5fc3Rv cmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewotCXN3aXRjaCAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKKwlzd2l0Y2ggKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5 MTUpKSB7CiAJY2FzZSAyOgogCQlyZXR1cm4gZmFsc2U7IC8qIHVzZXMgcGh5c2ljYWwgbm90IHZp cnR1YWwgYWRkcmVzc2VzICovCiAJY2FzZSAzOgpAQCAtMTQzMiw3ICsxNDMyLDcgQEAgc3RhdGlj IHZvaWQgaW50ZWxfZW5naW5lX3ByaW50X3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlz dHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CiAJdTY0IGFkZHI7CiAKLQlpZiAoZW5naW5lLT5pZCA9 PSBSRU5ERVJfQ0xBU1MgJiYgSVNfR0VOX1JBTkdFKGRldl9wcml2LCA0LCA3KSkKKwlpZiAoZW5n aW5lLT5pZCA9PSBSRU5ERVJfQ0xBU1MgJiYgSVNfR1JBUEhJQ1NfVkVSKGRldl9wcml2LCA0LCA3 KSkKIAkJZHJtX3ByaW50ZihtLCAiXHRDQ0lEOiAweCUwOHhcbiIsIEVOR0lORV9SRUFEKGVuZ2lu ZSwgQ0NJRCkpOwogCWlmIChIQVNfRVhFQ0xJU1RTKGRldl9wcml2KSkgewogCQlkcm1fcHJpbnRm KG0sICJcdEVMX1NUQVRfSEk6IDB4JTA4eFxuIiwKQEAgLTE0NDksMTMgKzE0NDksMTMgQEAgc3Rh dGljIHZvaWQgaW50ZWxfZW5naW5lX3ByaW50X3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCiAJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0NUTDogICAweCUwOHglc1xuIiwK IAkJICAgRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0NUTCksCiAJCSAgIEVOR0lORV9SRUFEKGVu Z2luZSwgUklOR19DVEwpICYgKFJJTkdfV0FJVCB8IFJJTkdfV0FJVF9TRU1BUEhPUkUpID8gIiBb d2FpdGluZ10iIDogIiIpOwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDIpIHsKKwlp ZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPiAyKSB7CiAJCWRybV9wcmludGYobSwgIlx0 UklOR19NT0RFOiAgMHglMDh4JXNcbiIsCiAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdf TUlfTU9ERSksCiAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfTUlfTU9ERSkgJiAoTU9E RV9JRExFKSA/ICIgW2lkbGVdIiA6ICIiKTsKIAl9CiAKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA2KSB7CisJaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPj0gNikgewogCQlkcm1fcHJp bnRmKG0sICJcdFJJTkdfSU1SOiAgIDB4JTA4eFxuIiwKIAkJCSAgIEVOR0lORV9SRUFEKGVuZ2lu ZSwgUklOR19JTVIpKTsKIAkJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0VTUjogICAweCUwOHhcbiIs CkBAIC0xNDcyLDE1ICsxNDcyLDE1IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9wcmludF9y ZWdpc3RlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCWFkZHIgPSBpbnRlbF9l bmdpbmVfZ2V0X2xhc3RfYmF0Y2hfaGVhZChlbmdpbmUpOwogCWRybV9wcmludGYobSwgIlx0QkJB RERSOiAweCUwOHhfJTA4eFxuIiwKIAkJICAgdXBwZXJfMzJfYml0cyhhZGRyKSwgbG93ZXJfMzJf Yml0cyhhZGRyKSk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKKwlpZiAoR1JBUEhJ Q1NfVkVSKGRldl9wcml2KSA+PSA4KQogCQlhZGRyID0gRU5HSU5FX1JFQUQ2NChlbmdpbmUsIFJJ TkdfRE1BX0ZBREQsIFJJTkdfRE1BX0ZBRERfVURXKTsKLQllbHNlIGlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGRldl9wcml2KSA+PSA0KQogCQlh ZGRyID0gRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0RNQV9GQUREKTsKIAllbHNlCiAJCWFkZHIg PSBFTkdJTkVfUkVBRChlbmdpbmUsIERNQV9GQUREX0k4WFgpOwogCWRybV9wcmludGYobSwgIlx0 RE1BX0ZBRERSOiAweCUwOHhfJTA4eFxuIiwKIAkJICAgdXBwZXJfMzJfYml0cyhhZGRyKSwgbG93 ZXJfMzJfYml0cyhhZGRyKSk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgeworCWlm IChHUkFQSElDU19WRVIoZGV2X3ByaXYpID49IDQpIHsKIAkJZHJtX3ByaW50ZihtLCAiXHRJUEVJ UjogMHglMDh4XG4iLAogCQkJICAgRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0lQRUlSKSk7CiAJ CWRybV9wcmludGYobSwgIlx0SVBFSFI6IDB4JTA4eFxuIiwKQEAgLTE1NTksNyArMTU1OSw3IEBA IHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9wcmludF9yZWdpc3RlcnMoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlleGVjbGlzdHNf YWN0aXZlX3VubG9ja19iaChleGVjbGlzdHMpOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+IDYpIHsKKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPiA2KSB7CiAJ CWRybV9wcmludGYobSwgIlx0UFBfRElSX0JBU0U6IDB4JTA4eFxuIiwKIAkJCSAgIEVOR0lORV9S RUFEKGVuZ2luZSwgUklOR19QUF9ESVJfQkFTRSkpOwogCQlkcm1fcHJpbnRmKG0sICJcdFBQX0RJ Ul9CQVNFX1JFQUQ6IDB4JTA4eFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCmluZGV4IDhkYjIwMDQyMjk1MC4uZmM3NzU5 MmQ4OGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlz dHNfc3VibWlzc2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNs aXN0c19zdWJtaXNzaW9uLmMKQEAgLTE4NDcsNyArMTg0Nyw3IEBAIHByb2Nlc3NfY3NiKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfcmVxdWVzdCAqKmluYWN0aXZl KQogCQlFTkdJTkVfVFJBQ0UoZW5naW5lLCAiY3NiWyVkXTogc3RhdHVzPTB4JTA4eDoweCUwOHhc biIsCiAJCQkgICAgIGhlYWQsIHVwcGVyXzMyX2JpdHMoY3NiKSwgbG93ZXJfMzJfYml0cyhjc2Ip KTsKIAotCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCisJCWlmIChHUkFQSElD U19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKIAkJCXByb21vdGUgPSBnZW4xMl9jc2JfcGFyc2Uo Y3NiKTsKIAkJZWxzZQogCQkJcHJvbW90ZSA9IGdlbjhfY3NiX3BhcnNlKGNzYik7CkBAIC0yNzcy LDcgKzI3NzIsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfZXhlY2xpc3RzKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIAogCWludGVsX2VuZ2luZV9zZXRfaHdzcF93cml0ZW1hc2soZW5n aW5lLCB+MHUpOyAvKiBIV1NUQU0gKi8KIAotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ PSAxMSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTEpCiAJCW1vZGUgPSBf TUFTS0VEX0JJVF9FTkFCTEUoR0VOMTFfR0ZYX0RJU0FCTEVfTEVHQUNZX01PREUpOwogCWVsc2UK IAkJbW9kZSA9IF9NQVNLRURfQklUX0VOQUJMRShHRlhfUlVOX0xJU1RfRU5BQkxFKTsKQEAgLTMx MDMsNyArMzEwMyw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19wYXJrKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIAogc3RhdGljIGJvb2wgY2FuX3ByZWVtcHQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQogewotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDgp CisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID4gOCkKIAkJcmV0dXJuIHRydWU7CiAK IAkvKiBHUEdQVSBvbiBiZHcgcmVxdWlyZXMgZXh0cmEgdy9hOyBub3QgaW1wbGVtZW50ZWQgKi8K QEAgLTMxNTYsMTMgKzMxNTYsMTMgQEAgbG9naWNhbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2Vt aXRfZmx1c2hfeGNzOwogCWVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIgPSBnZW44X2VtaXRf aW5pdF9icmVhZGNydW1iOwogCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW44X2Vt aXRfZmluaV9icmVhZGNydW1iX3hjczsKLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTIpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpIHsKIAkJZW5naW5l LT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjEyX2VtaXRfZmluaV9icmVhZGNydW1iX3hjczsK IAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF94Y3M7CiAJfQogCWVuZ2lu ZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9IGV4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNz aW9uOwogCi0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKKwlpZiAoR1JBUEhJ Q1NfVkVSKGVuZ2luZS0+aTkxNSkgPCAxMSkgewogCQllbmdpbmUtPmlycV9lbmFibGUgPSBnZW44 X2xvZ2ljYWxfcmluZ19lbmFibGVfaXJxOwogCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuOF9s b2dpY2FsX3JpbmdfZGlzYWJsZV9pcnE7CiAJfSBlbHNlIHsKQEAgLTMxOTUsNyArMzE5NSw3IEBA IHN0YXRpYyB2b2lkIGxvZ2ljYWxfcmluZ19kZWZhdWx0X2lycXMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogewogCXVuc2lnbmVkIGludCBzaGlmdCA9IDA7CiAKLQlpZiAoSU5URUxf R0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkgeworCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1 KSA8IDExKSB7CiAJCWNvbnN0IHU4IGlycV9zaGlmdHNbXSA9IHsKIAkJCVtSQ1MwXSAgPSBHRU44 X1JDU19JUlFfU0hJRlQsCiAJCQlbQkNTMF0gID0gR0VOOF9CQ1NfSVJRX1NISUZULApAQCAtMzIx NSw3ICszMjE1LDcgQEAgc3RhdGljIHZvaWQgbG9naWNhbF9yaW5nX2RlZmF1bHRfaXJxcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIHN0YXRpYyB2b2lkIHJjc19zdWJtaXNzaW9u X292ZXJyaWRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKLQlzd2l0Y2ggKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7CisJc3dpdGNoIChHUkFQSElDU19WRVIoZW5naW5lLT5p OTE1KSkgewogCWNhc2UgMTI6CiAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjEyX2VtaXRfZmx1 c2hfcmNzOwogCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuMTJfZW1pdF9maW5p X2JyZWFkY3J1bWJfcmNzOwpAQCAtMzI2NiwxMyArMzI2NiwxMyBAQCBpbnQgaW50ZWxfZXhlY2xp c3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWV4 ZWNsaXN0cy0+Y3NiX3dyaXRlID0KIAkJJmVuZ2luZS0+c3RhdHVzX3BhZ2UuYWRkcltpbnRlbF9o d3NfY3NiX3dyaXRlX2luZGV4KGk5MTUpXTsKIAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPCAxMSkK KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgMTEpCiAJCWV4ZWNsaXN0cy0+Y3NiX3NpemUgPSBH RU44X0NTQl9FTlRSSUVTOwogCWVsc2UKIAkJZXhlY2xpc3RzLT5jc2Jfc2l6ZSA9IEdFTjExX0NT Ql9FTlRSSUVTOwogCiAJZW5naW5lLT5jb250ZXh0X3RhZyA9IEdFTk1BU0soQklUU19QRVJfTE9O RyAtIDIsIDApOwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMSkgeworCWlmIChH UkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkgewogCQlleGVjbGlzdHMtPmNjaWQgfD0g ZW5naW5lLT5pbnN0YW5jZSA8PCAoR0VOMTFfRU5HSU5FX0lOU1RBTkNFX1NISUZUIC0gMzIpOwog CQlleGVjbGlzdHMtPmNjaWQgfD0gZW5naW5lLT5jbGFzcyA8PCAoR0VOMTFfRU5HSU5FX0NMQVNT X1NISUZUIC0gMzIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2dndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYwppbmRleCAx MGMyM2E3NDlhOTUuLjIwZTQ2Yjg0MzMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dn dHQuYwpAQCAtMTA3LDEwICsxMDcsMTAgQEAgc3RhdGljIGJvb2wgbmVlZHNfaWRsZV9tYXBzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCWlmICghaW50ZWxfdnRkX2FjdGl2ZSgpKQog CQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoSVNfR0VOKGk5MTUsIDUpICYmIElTX01PQklMRShpOTE1 KSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUgJiYgSVNfTU9CSUxFKGk5MTUpKQogCQly ZXR1cm4gdHJ1ZTsKIAotCWlmIChJU19HRU4oaTkxNSwgMTIpKQorCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPT0gMTIpCiAJCXJldHVybiB0cnVlOyAvKiBYWFggRE1BUiBmYXVsdCByZWFzb24gNyAq LwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGd1Y19n Z3R0X2ludmFsaWRhdGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKIAogCWdlbjhfZ2d0dF9pbnZh bGlkYXRlKGdndHQpOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMikKKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpID49IDEyKQogCQlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU4x Ml9HVUNfVExCX0lOVl9DUiwKIAkJCQkgICAgICBHRU4xMl9HVUNfVExCX0lOVl9DUl9JTlZBTElE QVRFKTsKIAllbHNlCkBAIC04MzIsNyArODMyLDcgQEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2Nv bW1vbihzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCB1NjQgc2l6ZSkKIAkgKiByZXNvcnQgdG8gYW4g dW5jYWNoZWQgbWFwcGluZy4gVGhlIFdDIGlzc3VlIGlzIGVhc2lseSBjYXVnaHQgYnkgdGhlCiAJ ICogcmVhZGJhY2sgY2hlY2sgd2hlbiB3cml0aW5nIEdUVCBQVEUgZW50cmllcy4KIAkgKi8KLQlp ZiAoSVNfR0VOOV9MUChpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApCisJaWYgKElTX0dF TjlfTFAoaTkxNSkgfHwgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwKQogCQlnZ3R0LT5nc20gPSBp b3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7CiAJZWxzZQogCQlnZ3R0LT5nc20gPSBpb3JlbWFwX3dj KHBoeXNfYWRkciwgc2l6ZSk7CkBAIC0xMDc4LDcgKzEwNzgsNyBAQCBzdGF0aWMgaW50IGdlbjZf Z21jaF9wcm9iZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQogCQlnZ3R0LT52bS5wdGVfZW5jb2Rl ID0gaHN3X3B0ZV9lbmNvZGU7CiAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKIAkJZ2d0 dC0+dm0ucHRlX2VuY29kZSA9IGJ5dF9wdGVfZW5jb2RlOwotCWVsc2UgaWYgKElOVEVMX0dFTihp OTE1KSA+PSA3KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA3KQogCQlnZ3R0LT52 bS5wdGVfZW5jb2RlID0gaXZiX3B0ZV9lbmNvZGU7CiAJZWxzZQogCQlnZ3R0LT52bS5wdGVfZW5j b2RlID0gc25iX3B0ZV9lbmNvZGU7CkBAIC0xMTUwLDkgKzExNTAsOSBAQCBzdGF0aWMgaW50IGdn dHRfcHJvYmVfaHcoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgc3RydWN0IGludGVsX2d0ICpndCkK IAlnZ3R0LT52bS5kbWEgPSBpOTE1LT5kcm0uZGV2OwogCWRtYV9yZXN2X2luaXQoJmdndHQtPnZt Ll9yZXN2KTsKIAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gNSkKKwlpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpIDw9IDUpCiAJCXJldCA9IGk5MTVfZ21jaF9wcm9iZShnZ3R0KTsKLQllbHNlIGlmIChJ TlRFTF9HRU4oaTkxNSkgPCA4KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDgpCiAJ CXJldCA9IGdlbjZfZ21jaF9wcm9iZShnZ3R0KTsKIAllbHNlCiAJCXJldCA9IGdlbjhfZ21jaF9w cm9iZShnZ3R0KTsKQEAgLTEyMDksNyArMTIwOSw3IEBAIGludCBpOTE1X2dndHRfcHJvYmVfaHco c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAKIGludCBpOTE1X2dndHRfZW5hYmxlX2h3 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewotCWlmIChJTlRFTF9HRU4oaTkxNSkg PCA2ICYmICFpbnRlbF9lbmFibGVfZ3R0KCkpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDYg JiYgIWludGVsX2VuYWJsZV9ndHQoKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gMDsKQEAg LTEyNzQsNyArMTI3NCw3IEBAIHZvaWQgaTkxNV9nZ3R0X3Jlc3VtZShzdHJ1Y3QgaTkxNV9nZ3R0 ICpnZ3R0KQogCWlmIChmbHVzaCkKIAkJd2JpbnZkX29uX2FsbF9jcHVzKCk7CiAKLQlpZiAoSU5U RUxfR0VOKGdndHQtPnZtLmk5MTUpID49IDgpCisJaWYgKEdSQVBISUNTX1ZFUihnZ3R0LT52bS5p OTE1KSA+PSA4KQogCQlzZXR1cF9wcml2YXRlX3BhdChnZ3R0LT52bS5ndC0+dW5jb3JlKTsKIAog CWludGVsX2dndHRfcmVzdG9yZV9mZW5jZXMoZ2d0dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2dndHRfZmVuY2luZy5jCmluZGV4IDdiZjg0Y2QyMTU0My4uY2FjN2YzZjQ0NjQy IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNpbmcu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNpbmcuYwpAQCAt NTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBpOTY1X3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgaTkx NV9mZW5jZV9yZWcgKmZlbmNlKQogCWludCBmZW5jZV9waXRjaF9zaGlmdDsKIAl1NjQgdmFsOwog Ci0JaWYgKElOVEVMX0dFTihmZW5jZV90b19pOTE1KGZlbmNlKSkgPj0gNikgeworCWlmIChHUkFQ SElDU19WRVIoZmVuY2VfdG9faTkxNShmZW5jZSkpID49IDYpIHsKIAkJZmVuY2VfcmVnX2xvID0g RkVOQ0VfUkVHX0dFTjZfTE8oZmVuY2UtPmlkKTsKIAkJZmVuY2VfcmVnX2hpID0gRkVOQ0VfUkVH X0dFTjZfSEkoZmVuY2UtPmlkKTsKIAkJZmVuY2VfcGl0Y2hfc2hpZnQgPSBHRU42X0ZFTkNFX1BJ VENIX1NISUZUOwpAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRpYyB2b2lkIGZlbmNlX3dyaXRlKHN0 cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCiAJICogYW5kIGV4cGxpY2l0bHkgbWFuYWdlZCBm b3IgaW50ZXJuYWwgdXNlcnMuCiAJICovCiAKLQlpZiAoSVNfR0VOKGk5MTUsIDIpKQorCWlmIChH UkFQSElDU19WRVIoaTkxNSkgPT0gMikKIAkJaTgzMF93cml0ZV9mZW5jZV9yZWcoZmVuY2UpOwot CWVsc2UgaWYgKElTX0dFTihpOTE1LCAzKSkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkg PT0gMykKIAkJaTkxNV93cml0ZV9mZW5jZV9yZWcoZmVuY2UpOwogCWVsc2UKIAkJaTk2NV93cml0 ZV9mZW5jZV9yZWcoZmVuY2UpOwpAQCAtMTg4LDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGZlbmNl X3dyaXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCiAKIHN0YXRpYyBib29sIGdwdV91 c2VzX2ZlbmNlX3JlZ2lzdGVycyhzdHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlKQogewotCXJl dHVybiBJTlRFTF9HRU4oZmVuY2VfdG9faTkxNShmZW5jZSkpIDwgNDsKKwlyZXR1cm4gR1JBUEhJ Q1NfVkVSKGZlbmNlX3RvX2k5MTUoZmVuY2UpKSA8IDQ7CiB9CiAKIHN0YXRpYyBpbnQgZmVuY2Vf dXBkYXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCkBAIC01NjksNyArNTY5LDcgQEAg c3RhdGljIHZvaWQgZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkK IAl1MzIgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJdTMyIHN3aXp6 bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCi0JaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA4IHx8IElTX1ZBTExFWVZJRVcoaTkxNSkpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDggfHwgSVNfVkFMTEVZVklFVyhpOTE1KSkgewogCQkvKgogCQkgKiBPbiBCRFcrLCBzd2l6 emxpbmcgaXMgbm90IHVzZWQuIFdlIGxlYXZlIHRoZSBDUFUgbWVtb3J5CiAJCSAqIGNvbnRyb2xs ZXIgaW4gY2hhcmdlIG9mIG9wdGltaXppbmcgbWVtb3J5IGFjY2Vzc2VzIHdpdGhvdXQKQEAgLTU3 OSw3ICs1NzksNyBAQCBzdGF0aWMgdm9pZCBkZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgaTkx NV9nZ3R0ICpnZ3R0KQogCQkgKi8KIAkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05P TkU7CiAJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwotCX0gZWxzZSBpZiAo SU5URUxfR0VOKGk5MTUpID49IDYpIHsKKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA2KSB7CiAJCWlmIChpOTE1LT5wcmVzZXJ2ZV9iaW9zX3N3aXp6bGUpIHsKIAkJCWlmIChpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIERJU1BfQVJCX0NUTCkgJgogCQkJICAgIERJU1BfVElMRV9T VVJGQUNFX1NXSVpaTElORykgewpAQCAtNjExLDE0ICs2MTEsMTQgQEAgc3RhdGljIHZvaWQgZGV0 ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKIAkJCQlzd2l6emxlX3kg PSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKIAkJCX0KIAkJfQotCX0gZWxzZSBpZiAoSVNfR0VO KGk5MTUsIDUpKSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkgewogCQkv KgogCQkgKiBPbiBJcm9ubGFrZSB3aGF0ZXZlciBEUkFNIGNvbmZpZywgR1BVIGFsd2F5cyBkbwog CQkgKiBzYW1lIHN3aXp6bGluZyBzZXR1cC4KIAkJICovCiAJCXN3aXp6bGVfeCA9IEk5MTVfQklU XzZfU1dJWlpMRV85XzEwOwogCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKLQl9 IGVsc2UgaWYgKElTX0dFTihpOTE1LCAyKSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID09IDIpIHsKIAkJLyoKIAkJICogQXMgZmFyIGFzIHdlIGtub3csIHRoZSA4NjUgZG9lc24n dCBoYXZlIHRoZXNlIGJpdCA2CiAJCSAqIHN3aXp6bGluZyBpc3N1ZXMuCkBAIC02OTcsNyArNjk3 LDcgQEAgc3RhdGljIHZvaWQgZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGk5MTVfZ2d0dCAq Z2d0dCkKIAkJfQogCiAJCS8qIGNoZWNrIGZvciBMLXNoYXBlZCBtZW1vcnkgYWthIG1vZGlmaWVk IGVuaGFuY2VkIGFkZHJlc3NpbmcgKi8KLQkJaWYgKElTX0dFTihpOTE1LCA0KSAmJgorCQlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDQgJiYKIAkJICAgICEoaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBEQ0MyKSAmIERDQzJfTU9ESUZJRURfRU5IQU5DRURfRElTQUJMRSkpIHsKIAkJCXN3aXp6 bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCQkJc3dpenpsZV95ID0gSTkxNV9C SVRfNl9TV0laWkxFX1VOS05PV047CkBAIC04NDQsMTAgKzg0NCwxMCBAQCB2b2lkIGludGVsX2dn dHRfaW5pdF9mZW5jZXMoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKIAogCWlmICghaTkxNV9nZ3R0 X2hhc19hcGVydHVyZShnZ3R0KSkKIAkJbnVtX2ZlbmNlcyA9IDA7Ci0JZWxzZSBpZiAoSU5URUxf R0VOKGk5MTUpID49IDcgJiYKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNyAmJgog CQkgIShJU19WQUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpKQogCQludW1f ZmVuY2VzID0gMzI7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQgfHwKKwllbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gNCB8fAogCQkgSVNfSTk0NUcoaTkxNSkgfHwgSVNfSTk0 NUdNKGk5MTUpIHx8CiAJCSBJU19HMzMoaTkxNSkgfHwgSVNfUElORVZJRVcoaTkxNSkpCiAJCW51 bV9mZW5jZXMgPSAxNjsKQEAgLTg5NSwyOSArODk1LDI5IEBAIHZvaWQgaW50ZWxfZ3RfaW5pdF9z d2l6emxpbmcoc3RydWN0IGludGVsX2d0ICpndCkKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGd0LT5pOTE1OwogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNv cmU7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNSB8fAorCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPCA1IHx8CiAJICAgIGk5MTUtPmdndHQuYml0XzZfc3dpenpsZV94ID09IEk5MTVfQklUXzZf U1dJWlpMRV9OT05FKQogCQlyZXR1cm47CiAKIAlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgRElT UF9BUkJfQ1RMLCAwLCBESVNQX1RJTEVfU1VSRkFDRV9TV0laWkxJTkcpOwogCi0JaWYgKElTX0dF TihpOTE1LCA1KSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCiAJCXJldHVybjsKIAog CWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBUSUxFQ1RMLCAwLCBUSUxFQ1RMX1NXWkNUTCk7CiAK LQlpZiAoSVNfR0VOKGk5MTUsIDYpKQorCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikKIAkJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKIAkJCQkgICBBUkJfTU9ERSwKIAkJCQkgICBfTUFT S0VEX0JJVF9FTkFCTEUoQVJCX01PREVfU1dJWlpMRV9TTkIpKTsKLQllbHNlIGlmIChJU19HRU4o aTkxNSwgNykpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDcpCiAJCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsCiAJCQkJICAgQVJCX01PREUsCiAJCQkJICAgX01BU0tFRF9CSVRf RU5BQkxFKEFSQl9NT0RFX1NXSVpaTEVfSVZCKSk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDgp KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA4KQogCQlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLAogCQkJCSAgIEdBTVRBUkJNT0RFLAogCQkJCSAgIF9NQVNLRURfQklUX0VOQUJM RShBUkJfTU9ERV9TV0laWkxFX0JEVykpOwogCWVsc2UKLQkJTUlTU0lOR19DQVNFKElOVEVMX0dF TihpOTE1KSk7CisJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkxNSkpOwogfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2d0LmMKaW5kZXggM2Y4OGVjZGVlMDMxLi4yMTYxYmYwMWVmOGIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYwpAQCAtMTEzLDEwICsxMTMsMTAgQEAgc3RhdGlj IHZvaWQgaW5pdF91bnVzZWRfcmluZ3Moc3RydWN0IGludGVsX2d0ICpndCkKIAkJaW5pdF91bnVz ZWRfcmluZyhndCwgU1JCMV9CQVNFKTsKIAkJaW5pdF91bnVzZWRfcmluZyhndCwgU1JCMl9CQVNF KTsKIAkJaW5pdF91bnVzZWRfcmluZyhndCwgU1JCM19CQVNFKTsKLQl9IGVsc2UgaWYgKElTX0dF TihpOTE1LCAyKSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDIpIHsKIAkJ aW5pdF91bnVzZWRfcmluZyhndCwgU1JCMF9CQVNFKTsKIAkJaW5pdF91bnVzZWRfcmluZyhndCwg U1JCMV9CQVNFKTsKLQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCAzKSkgeworCX0gZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDMpIHsKIAkJaW5pdF91bnVzZWRfcmluZyhndCwgUFJCMV9C QVNFKTsKIAkJaW5pdF91bnVzZWRfcmluZyhndCwgUFJCMl9CQVNFKTsKIAl9CkBAIC0xMzMsNyAr MTMzLDcgQEAgaW50IGludGVsX2d0X2luaXRfaHcoc3RydWN0IGludGVsX2d0ICpndCkKIAkvKiBE b3VibGUgbGF5ZXIgc2VjdXJpdHkgYmxhbmtldCwgc2VlIGk5MTVfZ2VtX2luaXQoKSAqLwogCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CiAKLQlpZiAo SEFTX0VEUkFNKGk5MTUpICYmIElOVEVMX0dFTihpOTE1KSA8IDkpCisJaWYgKEhBU19FRFJBTShp OTE1KSAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCA5KQogCQlpbnRlbF91bmNvcmVfcm13KHVuY29y ZSwgSFNXX0lESUNSLCAwLCBJRElIQVNITVNLKDB4ZikpOwogCiAJaWYgKElTX0hBU1dFTEwoaTkx NSkpCkBAIC0yMDYsMTAgKzIwNiwxMCBAQCBpbnRlbF9ndF9jbGVhcl9lcnJvcl9yZWdpc3RlcnMo c3RydWN0IGludGVsX2d0ICpndCwKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+ dW5jb3JlOwogCXUzMiBlaXI7CiAKLQlpZiAoIUlTX0dFTihpOTE1LCAyKSkKKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpICE9IDIpCiAJCWNsZWFyX3JlZ2lzdGVyKHVuY29yZSwgUEdUQkxfRVIpOwog Ci0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDQpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDQp CiAJCWNsZWFyX3JlZ2lzdGVyKHVuY29yZSwgSVBFSVIoUkVOREVSX1JJTkdfQkFTRSkpOwogCWVs c2UKIAkJY2xlYXJfcmVnaXN0ZXIodW5jb3JlLCBJUEVJUl9JOTY1KTsKQEAgLTIyNywxMyArMjI3 LDEzIEBAIGludGVsX2d0X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0 LAogCQkJCSAgIEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCk7CiAJfQogCi0JaWYgKElOVEVM X0dFTihpOTE1KSA+PSAxMikgeworCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTIpIHsKIAkJ cm13X2NsZWFyKHVuY29yZSwgR0VOMTJfUklOR19GQVVMVF9SRUcsIFJJTkdfRkFVTFRfVkFMSUQp OwogCQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgR0VOMTJfUklOR19GQVVMVF9S RUcpOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpIHsKKwl9IGVsc2UgaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA+PSA4KSB7CiAJCXJtd19jbGVhcih1bmNvcmUsIEdFTjhfUklOR19G QVVMVF9SRUcsIFJJTkdfRkFVTFRfVkFMSUQpOwogCQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFk KHVuY29yZSwgR0VOOF9SSU5HX0ZBVUxUX1JFRyk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkx NSkgPj0gNikgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKIAkJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsK IApAQCAtMjcxLDcgKzI3MSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfY2hlY2tfZmF1bHRzKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCiAJaTkxNV9yZWdfdCBmYXVsdF9yZWcsIGZhdWx0X2RhdGEwX3JlZywg ZmF1bHRfZGF0YTFfcmVnOwogCXUzMiBmYXVsdDsKIAotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUp ID49IDEyKSB7CisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gMTIpIHsKIAkJZmF1bHRf cmVnID0gR0VOMTJfUklOR19GQVVMVF9SRUc7CiAJCWZhdWx0X2RhdGEwX3JlZyA9IEdFTjEyX0ZB VUxUX1RMQl9EQVRBMDsKIAkJZmF1bHRfZGF0YTFfcmVnID0gR0VOMTJfRkFVTFRfVExCX0RBVEEx OwpAQCAtMzExLDkgKzMxMSw5IEBAIHZvaWQgaW50ZWxfZ3RfY2hlY2tfYW5kX2NsZWFyX2ZhdWx0 cyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g Z3QtPmk5MTU7CiAKIAkvKiBGcm9tIEdFTjggb253YXJkcyB3ZSBvbmx5IGhhdmUgb25lICdBbGwg RW5naW5lIEZhdWx0IFJlZ2lzdGVyJyAqLwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwlp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpCiAJCWdlbjhfY2hlY2tfZmF1bHRzKGd0KTsKLQll bHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gNikKIAkJZ2VuNl9jaGVja19mYXVsdHMoZ3QpOwogCWVsc2UKIAkJcmV0dXJuOwpAQCAt MzY1LDcgKzM2NSw3IEBAIHZvaWQgaW50ZWxfZ3RfZmx1c2hfZ2d0dF93cml0ZXMoc3RydWN0IGlu dGVsX2d0ICpndCkKIHZvaWQgaW50ZWxfZ3RfY2hpcHNldF9mbHVzaChzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQogewogCXdtYigpOwotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNikKKwlpZiAoR1JB UEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDYpCiAJCWludGVsX2d0dF9jaGlwc2V0X2ZsdXNoKCk7CiB9 CiAKQEAgLTU4OSw3ICs1ODksOCBAQCBpbnQgaW50ZWxfZ3RfaW5pdChzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQogCSAqLwogCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNF V0FLRV9BTEwpOwogCi0JZXJyID0gaW50ZWxfZ3RfaW5pdF9zY3JhdGNoKGd0LCBJU19HRU4oZ3Qt Pmk5MTUsIDIpID8gU1pfMjU2SyA6IFNaXzRLKTsKKwllcnIgPSBpbnRlbF9ndF9pbml0X3NjcmF0 Y2goZ3QsCisJCQkJICAgIEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gMiA/IFNaXzI1NksgOiBT Wl80Syk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2Nsb2NrX3V0aWxzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9ndF9jbG9ja191dGlscy5jCmluZGV4IDU4MmZjYWVlMTFhYS4uOWYwZTcy OWQyZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9jbG9j a191dGlscy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2Nsb2NrX3V0 aWxzLmMKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIHUzMiByZWFkX2Nsb2NrX2ZyZXF1ZW5jeShz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCiAJdTMyIGYxOV8yX21oeiA9IDE5MjAwMDAwOwog CXUzMiBmMjRfbWh6ID0gMjQwMDAwMDA7CiAKLQlpZiAoSU5URUxfR0VOKHVuY29yZS0+aTkxNSkg PD0gNCkgeworCWlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSA0KSB7CiAJCS8qCiAJ CSAqIFBSTXMgc2F5OgogCQkgKgpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdTMyIHJlYWRfY2xv Y2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIAkJICogICAgICAo4oCc Q0xLQ0ZH4oCdKSBNQ0hCQVIgcmVnaXN0ZXIpCiAJCSAqLwogCQlyZXR1cm4gUlVOVElNRV9JTkZP KHVuY29yZS0+aTkxNSktPnJhd2Nsa19mcmVxICogMTAwMCAvIDE2OwotCX0gZWxzZSBpZiAoSU5U RUxfR0VOKHVuY29yZS0+aTkxNSkgPD0gOCkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKHVu Y29yZS0+aTkxNSkgPD0gOCkgewogCQkvKgogCQkgKiBQUk1zIHNheToKIAkJICoKQEAgLTk0LDcg Kzk0LDcgQEAgc3RhdGljIHUzMiByZWFkX2Nsb2NrX2ZyZXF1ZW5jeShzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUpCiAJCSAqICAgICAgcm9sbGluZyBvdmVyIGV2ZXJ5IDEuNSBob3VycykuCiAJ CSAqLwogCQlyZXR1cm4gZjEyXzVfbWh6OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKHVuY29yZS0+ aTkxNSkgPD0gOSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKHVuY29yZS0+aTkxNSkgPD0g OSkgewogCQl1MzIgY3RjX3JlZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgQ1RDX01PREUp OwogCQl1MzIgZnJlcSA9IDA7CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgdTMyIHJlYWRf Y2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIAkJfQogCiAJCXJl dHVybiBmcmVxOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKHVuY29yZS0+aTkxNSkgPD0gMTIpIHsK Kwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUpIDw9IDEyKSB7CiAJCXUzMiBj dGNfcmVnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDVENfTU9ERSk7CiAJCXUzMiBmcmVx ID0gMDsKIApAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyB1MzIgcmVhZF9jbG9ja19mcmVxdWVu Y3koc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQogCQl9IGVsc2UgewogCQkJdTMyIGMwID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSUE1fQ09ORklHMCk7CiAKLQkJCWlmIChJTlRFTF9H RU4odW5jb3JlLT5pOTE1KSA8PSAxMCkKKwkJCWlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1 KSA8PSAxMCkKIAkJCQlmcmVxID0gZ2VuMTBfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1bmNvcmUs IGMwKTsKIAkJCWVsc2UKIAkJCQlmcmVxID0gZ2VuMTFfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1 bmNvcmUsIGMwKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCB1NjQgaW50ZWxfZ3RfbnNfdG9fcG1faW50 ZXJ2YWwoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCwgdTY0IG5zKQogCSAqIGZyb3plbiBtYWNo aW5lLgogCSAqLwogCXZhbCA9IGRpdl91NjRfcm91bmR1cChpbnRlbF9ndF9uc190b19jbG9ja19p bnRlcnZhbChndCwgbnMpLCAxNik7Ci0JaWYgKElTX0dFTihndC0+aTkxNSwgNikpCisJaWYgKEdS QVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNikKIAkJdmFsID0gZGl2X3U2NF9yb3VuZHVwKHZhbCwg MjUpICogMjU7CiAKIAlyZXR1cm4gdmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9p cnEuYwppbmRleCBkMjkxMjZjNDU4YmEuLjFlYzYzY2NlYWJmNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIGdlbjVfZ3RfaXJx X3Jlc2V0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gZ3QtPnVuY29yZTsKIAogCUdFTjNfSVJRX1JFU0VUKHVuY29yZSwgR1QpOwotCWlmIChJTlRF TF9HRU4oZ3QtPmk5MTUpID49IDYpCisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gNikK IAkJR0VOM19JUlFfUkVTRVQodW5jb3JlLCBHRU42X1BNKTsKIH0KIApAQCAtNDEzLDE0ICs0MTMs MTQgQEAgdm9pZCBnZW41X2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQog CX0KIAogCWd0X2lycXMgfD0gR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUOwotCWlmIChJU19HRU4o Z3QtPmk5MTUsIDUpKQorCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID09IDUpCiAJCWd0X2ly cXMgfD0gSUxLX0JTRF9VU0VSX0lOVEVSUlVQVDsKIAllbHNlCiAJCWd0X2lycXMgfD0gR1RfQkxU X1VTRVJfSU5URVJSVVBUIHwgR1RfQlNEX1VTRVJfSU5URVJSVVBUOwogCiAJR0VOM19JUlFfSU5J VCh1bmNvcmUsIEdULCBndC0+Z3RfaW1yLCBndF9pcnFzKTsKIAotCWlmIChJTlRFTF9HRU4oZ3Qt Pmk5MTUpID49IDYpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA2KSB7CiAJCS8q CiAJCSAqIFJQUyBpbnRlcnJ1cHRzIHdpbGwgZ2V0IGVuYWJsZWQvZGlzYWJsZWQgb24gZGVtYW5k IHdoZW4gUlBTCiAJCSAqIGl0c2VsZiBpcyBlbmFibGVkL2Rpc2FibGVkLgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndF9wbV9pcnEuYwppbmRleCA4MTFhMTFlZDE4MWMuLmZlNTFmODk0 YjA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJx LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMKQEAgLTE2 LDEwICsxNiwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9wbV9pbXIoc3RydWN0IGludGVsX2d0ICpn dCkKIAl1MzIgbWFzayA9IGd0LT5wbV9pbXI7CiAJaTkxNV9yZWdfdCByZWc7CiAKLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDExKSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewog CQlyZWcgPSBHRU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfTUFTSzsKIAkJbWFzayA8PD0gMTY7IC8q IHBtIGlzIGluIHVwcGVyIGhhbGYgKi8KLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4 KSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkgewogCQlyZWcgPSBHRU44 X0dUX0lNUigyKTsKIAl9IGVsc2UgewogCQlyZWcgPSBHRU42X1BNSU1SOwpAQCAtNjEsNyArNjEs NyBAQCB2b2lkIGdlbjZfZ3RfcG1fbWFza19pcnEoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIG1h c2spCiB2b2lkIGdlbjZfZ3RfcG1fcmVzZXRfaWlyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBy ZXNldF9tYXNrKQogewogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7 Ci0JaTkxNV9yZWdfdCByZWcgPSBJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDggPyBHRU44X0dUX0lJ UigyKSA6IEdFTjZfUE1JSVI7CisJaTkxNV9yZWdfdCByZWcgPSBHUkFQSElDU19WRVIoZ3QtPmk5 MTUpID49IDggPyBHRU44X0dUX0lJUigyKSA6IEdFTjZfUE1JSVI7CiAKIAlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZndC0+aXJxX2xvY2spOwogCkBAIC03NywxMCArNzcsMTAgQEAgc3RhdGljIHZvaWQg d3JpdGVfcG1faWVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJdTMyIG1hc2sgPSBndC0+cG1faWVy OwogCWk5MTVfcmVnX3QgcmVnOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgeworCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsKIAkJcmVnID0gR0VOMTFfR1BNX1dHQk9YUEVS Rl9JTlRSX0VOQUJMRTsKIAkJbWFzayA8PD0gMTY7IC8qIHBtIGlzIGluIHVwcGVyIGhhbGYgKi8K LQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KSB7CisJfSBlbHNlIGlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOCkgewogCQlyZWcgPSBHRU44X0dUX0lFUigyKTsKIAl9IGVsc2Ugewog CQlyZWcgPSBHRU42X1BNSUVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndHQuYwppbmRleCA5 NDg0OTU2NzE0M2QuLjA4NGVhNjVkNTljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0 LmMKQEAgLTM1Niw3ICszNTYsNyBAQCB2b2lkIGd0dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KQogCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAogCQkJCSAgIEdFTjhf TDNfTFJBXzFfR1BHUFUsCiAJCQkJICAgR0VOOV9MM19MUkFfMV9HUEdQVV9ERUZBVUxUX1ZBTFVF X0JYVCk7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkgJiYgSU5URUxfR0VOKGk5MTUp IDw9IDExKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ICYmIEdSQVBISUNTX1ZF UihpOTE1KSA8PSAxMSkKIAkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKIAkJCQkgICBHRU44 X0wzX0xSQV8xX0dQR1BVLAogCQkJCSAgIEdFTjlfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxV RV9TS0wpOwpAQCAtMzczLDEzICszNzMsMTMgQEAgdm9pZCBndHRfd3JpdGVfd29ya2Fyb3VuZHMo c3RydWN0IGludGVsX2d0ICpndCkKIAkgKiBkcml2ZXIuCiAJICovCiAJaWYgKEhBU19QQUdFX1NJ WkVTKGk5MTUsIEk5MTVfR1RUX1BBR0VfU0laRV82NEspICYmCi0JICAgIElOVEVMX0dFTihpOTE1 KSA8PSAxMCkKKwkgICAgR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDEwKQogCQlpbnRlbF91bmNvcmVf cm13KHVuY29yZSwKIAkJCQkgR0VOOF9HQU1XX0VDT19ERVZfUldfSUEsCiAJCQkJIDAsCiAJCQkJ IEdBTVdfRUNPX0VOQUJMRV82NEtfSVBTX0ZJRUxEKTsKIAotCWlmIChJU19HRU5fUkFOR0UoaTkx NSwgOCwgMTEpKSB7CisJaWYgKElTX0dSQVBISUNTX1ZFUihpOTE1LCA4LCAxMSkpIHsKIAkJYm9v bCBjYW5fdXNlX2d0dF9jYWNoZSA9IHRydWU7CiAKIAkJLyoKQEAgLTQ2MSw3ICs0NjEsNyBAQCBz dGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSkKIAkgICAgICBHRU44X1BQQVQoNywgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQ0VM TEMgfCBHRU44X1BQQVRfQUdFKDMpKTsKIAogCS8qIGZvciBzY2Fub3V0IHdpdGggZUxMQyAqLwot CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkp CiAJCXBhdCB8PSBHRU44X1BQQVQoMiwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0VMTENfT1ZF UlJJREUpOwogCWVsc2UKIAkJcGF0IHw9IEdFTjhfUFBBVCgyLCBHRU44X1BQQVRfV1QgfCBHRU44 X1BQQVRfTExDRUxMQyk7CkBAIC01MTAsMTEgKzUxMCwxMSBAQCB2b2lkIHNldHVwX3ByaXZhdGVf cGF0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHVuY29yZS0+aTkxNTsKIAotCUdFTV9CVUdfT04oSU5URUxfR0VOKGk5MTUp IDwgOCk7CisJR0VNX0JVR19PTihHUkFQSElDU19WRVIoaTkxNSkgPCA4KTsKIAotCWlmIChJTlRF TF9HRU4oaTkxNSkgPj0gMTIpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKIAkJdGds X3NldHVwX3ByaXZhdGVfcHBhdCh1bmNvcmUpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+ PSAxMCkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApCiAJCWNubF9zZXR1cF9w cml2YXRlX3BwYXQodW5jb3JlKTsKIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpIHx8IElT X0dFTjlfTFAoaTkxNSkpCiAJCWNodl9zZXR1cF9wcml2YXRlX3BwYXQodW5jb3JlKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKaW5kZXggMDc1ZDc0MTY0NGFlLi5lYjFhMTVkZWVkMjIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp YyBib29sIGdldF9pYV9jb25zdGFudHMoc3RydWN0IGludGVsX2xsYyAqbGxjLAogCiAJY29uc3Rz LT5taW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwogCWNvbnN0cy0+bWF4X2dwdV9mcmVxID0g cnBzLT5tYXhfZnJlcTsKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpIHsKKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpID49IDkpIHsKIAkJLyogQ29udmVydCBHVCBmcmVxdWVuY3kgdG8gNTAgSFog dW5pdHMgKi8KIAkJY29uc3RzLT5taW5fZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKIAkJ Y29uc3RzLT5tYXhfZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKQEAgLTgzLDEzICs4Mywx MyBAQCBzdGF0aWMgdm9pZCBjYWxjX2lhX2ZyZXEoc3RydWN0IGludGVsX2xsYyAqbGxjLAogCWNv bnN0IGludCBkaWZmID0gY29uc3RzLT5tYXhfZ3B1X2ZyZXEgLSBncHVfZnJlcTsKIAl1bnNpZ25l ZCBpbnQgaWFfZnJlcSA9IDAsIHJpbmdfZnJlcSA9IDA7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUp ID49IDkpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpIHsKIAkJLyoKIAkJICogcmlu Z19mcmVxID0gMiAqIEdULiByaW5nX2ZyZXEgaXMgaW4gMTAwTUh6IHVuaXRzCiAJCSAqIE5vIGZs b29yIHJlcXVpcmVkIGZvciByaW5nIGZyZXF1ZW5jeSBvbiBTS0wuCiAJCSAqLwogCQlyaW5nX2Zy ZXEgPSBncHVfZnJlcTsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KSB7CisJfSBl bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkgewogCQkvKiBtYXgoMiAqIEdULCBERFIp LiBOQjogR1QgaXMgNTBNSHogdW5pdHMgKi8KIAkJcmluZ19mcmVxID0gbWF4KGNvbnN0cy0+bWlu X3JpbmdfZnJlcSwgZ3B1X2ZyZXEpOwogCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChpOTE1KSkgewpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwppbmRleCBhYWZlMmE0ZGY0OTYuLmEyN2JhYzBh NGJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKQEAgLTQ3LDcgKzQ3LDcgQEAg c3RhdGljIHZvaWQgc2V0X29mZnNldHModTMyICpyZWdzLAogCQkqcmVncyA9IE1JX0xPQURfUkVH SVNURVJfSU1NKGNvdW50KTsKIAkJaWYgKGZsYWdzICYgUE9TVEVEKQogCQkJKnJlZ3MgfD0gTUlf TFJJX0ZPUkNFX1BPU1RFRDsKLQkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQor CQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTEpCiAJCQkqcmVncyB8PSBNSV9M UklfTFJNX0NTX01NSU87CiAJCXJlZ3MrKzsKIApAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9p ZCBzZXRfb2Zmc2V0cyh1MzIgKnJlZ3MsCiAJaWYgKGNsb3NlKSB7CiAJCS8qIENsb3NlIHRoZSBi YXRjaDsgdXNlZCBtYWlubHkgYnkgbGl2ZV9scmNfbGF5b3V0KCkgKi8KIAkJKnJlZ3MgPSBNSV9C QVRDSF9CVUZGRVJfRU5EOwotCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTApCisJ CWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMCkKIAkJCSpyZWdzIHw9IEJJVCgw KTsKIAl9CiB9CkBAIC00OTgsMjIgKzQ5OCwyMiBAQCBzdGF0aWMgY29uc3QgdTggKnJlZ19vZmZz ZXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkgKiBhZGRyZXNzaW5n IHRvIGF1dG9tYXRpYyBmaXh1cCB0aGUgcmVnaXN0ZXIgc3RhdGUgYmV0d2VlbiB0aGUKIAkgKiBw aHlzaWNhbCBlbmdpbmVzIGZvciB2aXJ0dWFsIGVuZ2luZS4KIAkgKi8KLQlHRU1fQlVHX09OKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyICYmCisJR0VNX0JVR19PTihHUkFQSElDU19WRVIo ZW5naW5lLT5pOTE1KSA+PSAxMiAmJgogCQkgICAhaW50ZWxfZW5naW5lX2hhc19yZWxhdGl2ZV9t bWlvKGVuZ2luZSkpOwogCiAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7Ci0J CWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKKwkJaWYgKEdSQVBISUNTX1ZFUihl bmdpbmUtPmk5MTUpID49IDEyKQogCQkJcmV0dXJuIGdlbjEyX3Jjc19vZmZzZXRzOwotCQllbHNl IGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMSkKKwkJZWxzZSBpZiAoR1JBUEhJQ1Nf VkVSKGVuZ2luZS0+aTkxNSkgPj0gMTEpCiAJCQlyZXR1cm4gZ2VuMTFfcmNzX29mZnNldHM7Ci0J CWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCisJCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDkpCiAJCQlyZXR1cm4gZ2VuOV9yY3Nfb2Zmc2V0czsK IAkJZWxzZQogCQkJcmV0dXJuIGdlbjhfcmNzX29mZnNldHM7CiAJfSBlbHNlIHsKLQkJaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQorCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPj0gMTIpCiAJCQlyZXR1cm4gZ2VuMTJfeGNzX29mZnNldHM7Ci0JCWVsc2UgaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCisJCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdp bmUtPmk5MTUpID49IDkpCiAJCQlyZXR1cm4gZ2VuOV94Y3Nfb2Zmc2V0czsKIAkJZWxzZQogCQkJ cmV0dXJuIGdlbjhfeGNzX29mZnNldHM7CkBAIC01MjIsOSArNTIyLDkgQEAgc3RhdGljIGNvbnN0 IHU4ICpyZWdfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAK IHN0YXRpYyBpbnQgbHJjX3JpbmdfbWlfbW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCiB7Ci0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQorCWlmIChH UkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKIAkJcmV0dXJuIDB4NjA7Ci0JZWxzZSBp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOSkKKwllbHNlIGlmIChHUkFQSElDU19WRVIo ZW5naW5lLT5pOTE1KSA+PSA5KQogCQlyZXR1cm4gMHg1NDsKIAllbHNlIGlmIChlbmdpbmUtPmNs YXNzID09IFJFTkRFUl9DTEFTUykKIAkJcmV0dXJuIDB4NTg7CkBAIC01MzQsOSArNTM0LDkgQEAg c3RhdGljIGludCBscmNfcmluZ19taV9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKIAogc3RhdGljIGludCBscmNfcmluZ19ncHIwKGNvbnN0IHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIHsKLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIp CisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQogCQlyZXR1cm4gMHg3NDsK LQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQorCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDkpCiAJCXJldHVybiAweDY4OwogCWVsc2UgaWYgKGVu Z2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQogCQlyZXR1cm4gMHhkODsKQEAgLTU0Niw5ICs1 NDYsOSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX2dwcjAoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogCiBzdGF0aWMgaW50IGxyY19yaW5nX3dhX2JiX3Blcl9jdHgoY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewotCWlmIChJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSA+PSAxMikKKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpCiAJ CXJldHVybiAweDEyOwotCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkgfHwg ZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVu Z2luZS0+aTkxNSkgPj0gOSB8fCBlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykKIAkJcmV0 dXJuIDB4MTg7CiAJZWxzZQogCQlyZXR1cm4gLTE7CkBAIC01ODEsOSArNTgxLDkgQEAgc3RhdGlj IGludCBscmNfcmluZ19jbWRfYnVmX2NjdGwoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogCWlmIChlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKIAkJcmV0dXJuIC0x OwogCi0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQorCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA+PSAxMikKIAkJcmV0dXJuIDB4YjY7Ci0JZWxzZSBpZiAoSU5URUxf R0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPj0gMTEpCiAJCXJldHVybiAweGFhOwogCWVsc2UKIAkJcmV0dXJuIC0xOwpAQCAtNTky LDkgKzU5Miw5IEBAIHN0YXRpYyBpbnQgbHJjX3JpbmdfY21kX2J1Zl9jY3RsKGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHN0YXRpYyB1MzIKIGxyY19yaW5nX2luZGlyZWN0 X29mZnNldF9kZWZhdWx0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsK LQlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7CisJc3dpdGNoIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSkgewogCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSk7CisJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1 KSk7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgMTI6CiAJCXJldHVybiBHRU4xMl9DVFhfUkNTX0lO RElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKQEAgLTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgdm9p ZCBpbml0X2NvbW1vbl9yZWdzKHUzMiAqIGNvbnN0IHJlZ3MsCiAJY3RsIHw9IF9NQVNLRURfQklU X0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpOwogCWlmIChpbmhp Yml0KQogCQljdGwgfD0gQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQ7Ci0JaWYg KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpCisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUt Pmk5MTUpIDwgMTEpCiAJCWN0bCB8PSBfTUFTS0VEX0JJVF9ESVNBQkxFKENUWF9DVFJMX0VOR0lO RV9DVFhfU0FWRV9JTkhJQklUIHwKIAkJCQkJICAgQ1RYX0NUUkxfUlNfQ1RYX0VOQUJMRSk7CiAJ cmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9IGN0bDsKQEAgLTgwNSw3ICs4MDUsNyBAQCBfX2xy Y19hbGxvY19zdGF0ZShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfREVCVUdfR0VN KSkKIAkJY29udGV4dF9zaXplICs9IEk5MTVfR1RUX1BBR0VfU0laRTsgLyogZm9yIHJlZHpvbmUg Ki8KIAotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA9PSAxMikgeworCWlmIChHUkFQSElD U19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMikgewogCQljZS0+d2FfYmJfcGFnZSA9IGNvbnRleHRf c2l6ZSAvIFBBR0VfU0laRTsKIAkJY29udGV4dF9zaXplICs9IFBBR0VfU0laRTsKIAl9CkBAIC0x MTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgdTMyIGxyY19kZXNjcmlwdG9yKGNvbnN0IHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSkKIAlkZXNjIDw8PSBHRU44X0NUWF9BRERSRVNTSU5HX01PREVfU0hJ RlQ7CiAKIAlkZXNjIHw9IEdFTjhfQ1RYX1ZBTElEIHwgR0VOOF9DVFhfUFJJVklMRUdFOwotCWlm IChJU19HRU4oY2UtPnZtLT5pOTE1LCA4KSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGNlLT52bS0+aTkx NSkgPT0gOCkKIAkJZGVzYyB8PSBHRU44X0NUWF9MM0xMQ19DT0hFUkVOVDsKIAogCXJldHVybiBp OTE1X2dndHRfb2Zmc2V0KGNlLT5zdGF0ZSkgfCBkZXNjOwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAg dm9pZCBscmNfaW5pdF93YV9jdHgoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlm IChlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgeworCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkpIHsKIAljYXNlIDEyOgogCWNhc2UgMTE6CiAJCXJldHVybjsKQEAgLTE0ODYsNyArMTQ4 Niw3IEBAIHZvaWQgbHJjX2luaXRfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKIAkJd2FfYmJfZm5bMV0gPSBOVUxMOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlNSVNTSU5H X0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOworCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1Nf VkVSKGVuZ2luZS0+aTkxNSkpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9tb2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9tb2NzLmMKaW5kZXggYjE0MTM4ZmQ1MDVjLi4xNzg0ODgwN2YxMTEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9tb2NzLmMKQEAgLTM0NCwxMSArMzQ0LDExIEBAIHN0YXRpYyB1bnNp Z25lZCBpbnQgZ2V0X21vY3Nfc2V0dGluZ3MoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCiAJCXRhYmxlLT5zaXplID0gQVJSQVlfU0laRShkZzFfbW9jc190YWJsZSk7CiAJCXRh YmxlLT50YWJsZSA9IGRnMV9tb2NzX3RhYmxlOwogCQl0YWJsZS0+bl9lbnRyaWVzID0gR0VOOV9O VU1fTU9DU19FTlRSSUVTOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7CisJ fSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTIpIHsKIAkJdGFibGUtPnNpemUgID0g QVJSQVlfU0laRSh0Z2xfbW9jc190YWJsZSk7CiAJCXRhYmxlLT50YWJsZSA9IHRnbF9tb2NzX3Rh YmxlOwogCQl0YWJsZS0+bl9lbnRyaWVzID0gR0VOOV9OVU1fTU9DU19FTlRSSUVTOwotCX0gZWxz ZSBpZiAoSVNfR0VOKGk5MTUsIDExKSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID09IDExKSB7CiAJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUoaWNsX21vY3NfdGFibGUpOwog CQl0YWJsZS0+dGFibGUgPSBpY2xfbW9jc190YWJsZTsKIAkJdGFibGUtPm5fZW50cmllcyA9IEdF TjlfTlVNX01PQ1NfRU5UUklFUzsKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGdldF9tb2NzX3NldHRpbmdzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAogCQl0YWJsZS0+bl9lbnRyaWVzID0gR0VOOV9OVU1fTU9DU19FTlRSSUVTOwogCQl0YWJsZS0+ dGFibGUgPSBicm94dG9uX21vY3NfdGFibGU7CiAJfSBlbHNlIHsKLQkJZHJtX1dBUk5fT05DRSgm aTkxNS0+ZHJtLCBJTlRFTF9HRU4oaTkxNSkgPj0gOSwKKwkJZHJtX1dBUk5fT05DRSgmaTkxNS0+ ZHJtLCBHUkFQSElDU19WRVIoaTkxNSkgPj0gOSwKIAkJCSAgICAgICJQbGF0Zm9ybSB0aGF0IHNo b3VsZCBoYXZlIGEgTU9DUyB0YWJsZSBkb2VzIG5vdC5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBA IC0zNzAsNyArMzcwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbW9jc19zZXR0aW5ncyhj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJcmV0dXJuIDA7CiAKIAkvKiBX YURpc2FibGVTa2lwQ2FjaGluZzpza2wsYnh0LGtibCxnbGsgKi8KLQlpZiAoSVNfR0VOKGk5MTUs IDkpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA5KSB7CiAJCWludCBpOwogCiAJCWZv ciAoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3BwZ3R0LmMKaW5kZXggYWVlM2E4OTI5MjQ1Li44ODYwNjBmN2U2ZmMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3BwZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcHBndHQuYwpAQCAtMTQ2LDkgKzE0Niw5IEBAIGludCBpOTE1X3BwZ3R0 X2luaXRfaHcoc3RydWN0IGludGVsX2d0ICpndCkKIAogCWd0dF93cml0ZV93b3JrYXJvdW5kcyhn dCk7CiAKLQlpZiAoSVNfR0VOKGk5MTUsIDYpKQorCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0g NikKIAkJZ2VuNl9wcGd0dF9lbmFibGUoZ3QpOwotCWVsc2UgaWYgKElTX0dFTihpOTE1LCA3KSkK KwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykKIAkJZ2VuN19wcGd0dF9lbmFibGUo Z3QpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTcsNyArMTU3LDcgQEAgaW50IGk5MTVfcHBndHRfaW5p dF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogc3RhdGljIHN0cnVjdCBpOTE1X3BwZ3R0ICoKIF9f cHBndHRfY3JlYXRlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7Ci0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPCA4KQorCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkKIAkJcmV0dXJuIGdl bjZfcHBndHRfY3JlYXRlKGd0KTsKIAllbHNlCiAJCXJldHVybiBnZW44X3BwZ3R0X2NyZWF0ZShn dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5jCmluZGV4IDNiN2U2MmRlYmU3ZS4uMjU5 ZDdlYjRlMTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYwpAQCAtMTA5LDcgKzEw OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjExX3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2 KQogCQlHRU45X01FRElBX1BHX0VOQUJMRSB8CiAJCUdFTjExX01FRElBX1NBTVBMRVJfUEdfRU5B QkxFOwogCi0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTIpIHsKKwlpZiAoR1JBUEhJQ1Nf VkVSKGd0LT5pOTE1KSA+PSAxMikgewogCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhfVkNTOyBp KyspCiAJCQlpZiAoSEFTX0VOR0lORShndCwgX1ZDUyhpKSkpCiAJCQkJcGdfZW5hYmxlIHw9IChW RE5fSENQX1BPV0VSR0FURV9FTkFCTEUoaSkgfApAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyB2 b2lkIGdlbjlfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCiAJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQ7CiAKIAkvKiAyYjogUHJvZ3JhbSBSQzYgdGhyZXNob2xkcy4qLwotCWlmIChJ TlRFTF9HRU4ocmM2X3RvX2k5MTUocmM2KSkgPj0gMTApIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKHJj Nl90b19pOTE1KHJjNikpID49IDEwKSB7CiAJCXNldCh1bmNvcmUsIEdFTjZfUkM2X1dBS0VfUkFU RV9MSU1JVCwgNTQgPDwgMTYgfCA4NSk7CiAJCXNldCh1bmNvcmUsIEdFTjEwX01FRElBX1dBS0Vf UkFURV9MSU1JVCwgMTUwKTsKIAl9IGVsc2UgaWYgKElTX1NLWUxBS0UocmM2X3RvX2k5MTUocmM2 KSkpIHsKQEAgLTI0OSw5ICsyNDksOSBAQCBzdGF0aWMgdm9pZCBnZW42X3JjNl9lbmFibGUoc3Ry dWN0IGludGVsX3JjNiAqcmM2KQogCXJjNnZpZHMgPSAwOwogCXJldCA9IHNhbmR5YnJpZGdlX3Bj b2RlX3JlYWQoaTkxNSwgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMsCiAJCQkJICAgICAmcmM2dmlk cywgTlVMTCk7Ci0JaWYgKElTX0dFTihpOTE1LCA2KSAmJiByZXQpIHsKKwlpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDYgJiYgcmV0KSB7CiAJCWRybV9kYmcoJmk5MTUtPmRybSwgIkNvdWxkbid0 IGNoZWNrIGZvciBCSU9TIHdvcmthcm91bmRcbiIpOwotCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUs IDYpICYmCisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNiAmJgogCQkgICAoR0VO Nl9ERUNPREVfUkM2X1ZJRChyYzZ2aWRzICYgMHhmZikgPCA0NTApKSB7CiAJCWRybV9kYmcoJmk5 MTUtPmRybSwKIAkJCSJZb3Ugc2hvdWxkIHVwZGF0ZSB5b3VyIEJJT1MuIENvcnJlY3RpbmcgbWlu aW11bSByYzYgdm9sdGFnZSAoJWRtVi0+JWRtVilcbiIsCkBAIC01MTUsNyArNTE1LDcgQEAgc3Rh dGljIHZvaWQgX19pbnRlbF9yYzZfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCiAJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcmM2X3RvX3VuY29yZShyYzYpOwogCiAJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQlpZiAoSU5URUxf R0VOKGk5MTUpID49IDkpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQogCQlzZXQodW5j b3JlLCBHRU45X1BHX0VOQUJMRSwgMCk7CiAJc2V0KHVuY29yZSwgR0VONl9SQ19DT05UUk9MLCAw KTsKIAlzZXQodW5jb3JlLCBHRU42X1JDX1NUQVRFLCAwKTsKQEAgLTU3NSwxMyArNTc1LDEzIEBA IHZvaWQgaW50ZWxfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCiAJCWNodl9yYzZf ZW5hYmxlKHJjNik7CiAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKIAkJdmx2X3JjNl9l bmFibGUocmM2KTsKLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpCisJZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKQogCQlnZW4xMV9yYzZfZW5hYmxlKHJjNik7Ci0JZWxz ZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDkpCiAJCWdlbjlfcmM2X2VuYWJsZShyYzYpOwogCWVsc2UgaWYgKElTX0JST0FEV0VMTChp OTE1KSkKIAkJZ2VuOF9yYzZfZW5hYmxlKHJjNik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUp ID49IDYpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCiAJCWdlbjZfcmM2X2Vu YWJsZShyYzYpOwogCiAJcmM2LT5tYW51YWwgPSByYzYtPmN0bF9lbmFibGUgJiBHRU42X1JDX0NU TF9SQzZfRU5BQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmVuZGVyc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlbmRlcnN0YXRl LmMKaW5kZXggYjAzZTE5N2IxZDk5Li5iNTc1Y2Q2ZTBiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3JlbmRlcnN0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcmVuZGVyc3RhdGUuYwpAQCAtMTUsNyArMTUsNyBAQCByZW5kZXJfc3Rh dGVfZ2V0X3JvZGF0YShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJaWYg KGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQogCQlyZXR1cm4gTlVMTDsKIAotCXN3aXRj aCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKKwlzd2l0Y2ggKEdSQVBISUNTX1ZFUihlbmdp bmUtPmk5MTUpKSB7CiAJY2FzZSA2OgogCQlyZXR1cm4gJmdlbjZfbnVsbF9zdGF0ZTsKIAljYXNl IDc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYwppbmRleCA4MDkxODQ2ZDk1NWIu LjcyMjUxNjM4ZDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmVzZXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jCkBAIC00 MjEsNyArNDIxLDcgQEAgc3RhdGljIGludCBnZW4xMV9sb2NrX3NmYyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCiAJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnBhaXJlZF92ZWNzOwog CiAJCWlmIChlbmdpbmUtPmNsYXNzICE9IFZJREVPX0RFQ09ERV9DTEFTUyB8fAotCQkgICAgIUlT X0dFTihlbmdpbmUtPmk5MTUsIDEyKSkKKwkJICAgIEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ICE9IDEyKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMg aW50IGdlbjhfcmVzZXRfZW5naW5lcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAogCQkgKi8KIAl9CiAK LQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5p OTE1KSA+PSAxMSkKIAkJcmV0ID0gZ2VuMTFfcmVzZXRfZW5naW5lcyhndCwgZW5naW5lX21hc2ss IHJldHJ5KTsKIAllbHNlCiAJCXJldCA9IGdlbjZfcmVzZXRfZW5naW5lcyhndCwgZW5naW5lX21h c2ssIHJldHJ5KTsKQEAgLTY2MiwxNyArNjYyLDE3IEBAIHN0YXRpYyByZXNldF9mdW5jIGludGVs X2dldF9ncHVfcmVzZXQoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCkKIAogCWlmIChpc19tb2Nr X2d0KGd0KSkKIAkJcmV0dXJuIG1vY2tfcmVzZXQ7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUp ID49IDgpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpCiAJCXJldHVybiBnZW44 X3Jlc2V0X2VuZ2luZXM7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCisJZWxzZSBp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCiAJCXJldHVybiBnZW42X3Jlc2V0X2VuZ2luZXM7 Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDUpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID49IDUpCiAJCXJldHVybiBpbGtfZG9fcmVzZXQ7CiAJZWxzZSBpZiAoSVNfRzRYKGk5 MTUpKQogCQlyZXR1cm4gZzR4X2RvX3Jlc2V0OwogCWVsc2UgaWYgKElTX0czMyhpOTE1KSB8fCBJ U19QSU5FVklFVyhpOTE1KSkKIAkJcmV0dXJuIGczM19kb19yZXNldDsKLQllbHNlIGlmIChJTlRF TF9HRU4oaTkxNSkgPj0gMykKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMykKIAkJ cmV0dXJuIGk5MTVfZG9fcmVzZXQ7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKQEAgLTcyNCw3ICs3 MjQsNyBAQCBib29sIGludGVsX2hhc19yZXNldF9lbmdpbmUoY29uc3Qgc3RydWN0IGludGVsX2d0 ICpndCkKIGludCBpbnRlbF9yZXNldF9ndWMoc3RydWN0IGludGVsX2d0ICpndCkKIHsKIAl1MzIg Z3VjX2RvbWFpbiA9Ci0JCUlOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEgPyBHRU4xMV9HUkRPTV9H VUMgOiBHRU45X0dSRE9NX0dVQzsKKwkJR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSAxMSA/IEdF TjExX0dSRE9NX0dVQyA6IEdFTjlfR1JET01fR1VDOwogCWludCByZXQ7CiAKIAlHRU1fQlVHX09O KCFIQVNfR1RfVUMoZ3QtPmk5MTUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfcmluZ19zdWJtaXNzaW9uLmMKaW5kZXggMmI2ZGZmY2MyMjYyLi4wYzQyM2YwOTZlMmIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jCkBA IC0yOSw3ICsyOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9od3N0YW0oc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCB1MzIgbWFzaykKIAkgKiBsb3N0IGludGVycnVwdHMgZm9sbG93aW5nIGEg cmVzZXQuCiAJICovCiAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7Ci0JCWlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA2KQorCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2lu ZS0+aTkxNSkgPj0gNikKIAkJCW1hc2sgJj0gfkJJVCgwKTsKIAkJZWxzZQogCQkJbWFzayAmPSB+ STkxNV9VU0VSX0lOVEVSUlVQVDsKQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2h3 c19wZ2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBwaHlzX2FkZHJfdCBwaHlzKQog CXUzMiBhZGRyOwogCiAJYWRkciA9IGxvd2VyXzMyX2JpdHMocGh5cyk7Ci0JaWYgKElOVEVMX0dF TihlbmdpbmUtPmk5MTUpID49IDQpCisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49 IDQpCiAJCWFkZHIgfD0gKHBoeXMgPj4gMjgpICYgMHhmMDsKIAogCWludGVsX3VuY29yZV93cml0 ZShlbmdpbmUtPnVuY29yZSwgSFdTX1BHQSwgYWRkcik7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRp YyB2b2lkIHNldF9od3NwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG9mZnNl dCkKIAkgKiBUaGUgcmluZyBzdGF0dXMgcGFnZSBhZGRyZXNzZXMgYXJlIG5vIGxvbmdlciBuZXh0 IHRvIHRoZSByZXN0IG9mCiAJICogdGhlIHJpbmcgcmVnaXN0ZXJzIGFzIG9mIGdlbjcuCiAJICov Ci0JaWYgKElTX0dFTihlbmdpbmUtPmk5MTUsIDcpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihlbmdp bmUtPmk5MTUpID09IDcpIHsKIAkJc3dpdGNoIChlbmdpbmUtPmlkKSB7CiAJCS8qCiAJCSAqIE5v IG1vcmUgcmluZ3MgZXhpc3Qgb24gR2VuNy4gRGVmYXVsdCBjYXNlIGlzIG9ubHkgdG8gc2h1dCB1 cApAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRfaHdzcChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsIHUzMiBvZmZzZXQpCiAJCQlod3NwID0gVkVCT1hfSFdTX1BHQV9HRU43 OwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKElTX0dFTihlbmdpbmUtPmk5MTUsIDYpKSB7 CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSA2KSB7CiAJCWh3c3Ag PSBSSU5HX0hXU19QR0FfR0VONihlbmdpbmUtPm1taW9fYmFzZSk7CiAJfSBlbHNlIHsKIAkJaHdz cCA9IFJJTkdfSFdTX1BHQShlbmdpbmUtPm1taW9fYmFzZSk7CkBAIC0xMDUsNyArMTA1LDcgQEAg c3RhdGljIHZvaWQgc2V0X2h3c3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIg b2Zmc2V0KQogCiBzdGF0aWMgdm9pZCBmbHVzaF9jc190bGIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQogewotCWlmICghSVNfR0VOX1JBTkdFKGVuZ2luZS0+aTkxNSwgNiwgNykpCisJ aWYgKCFJU19HUkFQSElDU19WRVIoZW5naW5lLT5pOTE1LCA2LCA3KSkKIAkJcmV0dXJuOwogCiAJ LyogcmluZyBzaG91bGQgYmUgaWRsZSBiZWZvcmUgaXNzdWluZyBhIHN5bmMgZmx1c2gqLwpAQCAt MTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9wcF9kaXIoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogCUVOR0lORV9XUklURV9GVyhlbmdpbmUsIFJJTkdfUFBfRElSX0RDTFYs IFBQX0RJUl9EQ0xWXzJHKTsKIAlFTkdJTkVfV1JJVEVfRlcoZW5naW5lLCBSSU5HX1BQX0RJUl9C QVNFLCBwcF9kaXIodm0pKTsKIAotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA3KSB7 CisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDcpIHsKIAkJRU5HSU5FX1dSSVRF X0ZXKGVuZ2luZSwKIAkJCQlSSU5HX01PREVfR0VONywKIAkJCQlfTUFTS0VEX0JJVF9FTkFCTEUo R0ZYX1BQR1RUX0VOQUJMRSkpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyBpbnQgeGNzX3Jl c3VtZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCQkJCSA1MDAwLCAwLCBOVUxM KSkKIAkJZ290byBlcnI7CiAKLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPiAyKQorCWlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+IDIpCiAJCUVOR0lORV9XUklURV9GVyhlbmdp bmUsCiAJCQkJUklOR19NSV9NT0RFLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFNUT1BfUklORykpOwog CkBAIC02NDYsOSArNjQ2LDkgQEAgc3RhdGljIGludCBtaV9zZXRfY29udGV4dChzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKIAl1MzIgKmNzOwogCiAJbGVuID0gNDsKLQlpZiAoSVNfR0VOKGk5MTUs IDcpKQorCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykKIAkJbGVuICs9IDIgKyAobnVtX2Vu Z2luZXMgPyA0ICogbnVtX2VuZ2luZXMgKyA2IDogMCk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUs IDUpKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KQogCQlsZW4gKz0gMjsKIAlp ZiAoZmxhZ3MgJiBNSV9GT1JDRV9SRVNUT1JFKSB7CiAJCUdFTV9CVUdfT04oZmxhZ3MgJiBNSV9S RVNUT1JFX0lOSElCSVQpOwpAQCAtNjYyLDcgKzY2Miw3IEBAIHN0YXRpYyBpbnQgbWlfc2V0X2Nv bnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJCXJldHVybiBQVFJfRVJSKGNzKTsKIAog CS8qIFdhUHJvZ3JhbU1pQXJiT25PZmZBcm91bmRNaVNldENvbnRleHQ6aXZiLHZsdixoc3csYmR3 LGNodiAqLwotCWlmIChJU19HRU4oaTkxNSwgNykpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID09IDcpIHsKIAkJKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7CiAJCWlm IChudW1fZW5naW5lcykgewogCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwpA QCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEsCiAJCQkJCQlHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpOwogCQkJfQog CQl9Ci0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpIHsKKwl9IGVsc2UgaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA9PSA1KSB7CiAJCS8qCiAJCSAqIFRoaXMgdy9hIGlzIG9ubHkgbGlzdGVkIGZv ciBwcmUtcHJvZHVjdGlvbiBpbGsgYS9iIHN0ZXBwaW5ncywKIAkJICogYnV0IGlzIGFsc28gbWVu dGlvbmVkIGZvciBwcm9ncmFtbWluZyB0aGUgcG93ZXJjdHguIFRvIGJlCkBAIC03MTYsNyArNzE2 LDcgQEAgc3RhdGljIGludCBtaV9zZXRfY29udGV4dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwK IAkgKi8KIAkqY3MrKyA9IE1JX05PT1A7CiAKLQlpZiAoSVNfR0VOKGk5MTUsIDcpKSB7CisJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KSB7CiAJCWlmIChudW1fZW5naW5lcykgewogCQkJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwogCQkJaTkxNV9yZWdfdCBsYXN0X3JlZyA9 IHt9OyAvKiBrZWVwIGdjYyBxdWlldCAqLwpAQCAtNzQwLDcgKzc0MCw3IEBAIHN0YXRpYyBpbnQg bWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJCQkqY3MrKyA9IE1JX05P T1A7CiAJCX0KIAkJKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKLQl9IGVs c2UgaWYgKElTX0dFTihpOTE1LCA1KSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID09IDUpIHsKIAkJKmNzKysgPSBNSV9TVVNQRU5EX0ZMVVNIOwogCX0KIApAQCAtMTAwMSw3ICsx MDAxLDcgQEAgc3RhdGljIHZvaWQgcmluZ19yZWxlYXNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUt Pmk5MTU7CiAKLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgSU5URUxfR0VOKGRldl9wcml2 KSA+IDIgJiYKKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgR1JBUEhJQ1NfVkVSKGRldl9w cml2KSA+IDIgJiYKIAkJICAgIChFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfTUlfTU9ERSkgJiBN T0RFX0lETEUpID09IDApOwogCiAJaW50ZWxfZW5naW5lX2NsZWFudXBfY29tbW9uKGVuZ2luZSk7 CkBAIC0xMDI5LDEzICsxMDI5LDEzIEBAIHN0YXRpYyB2b2lkIHNldHVwX2lycShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAlpbnRlbF9lbmdpbmVfc2V0X2lycV9oYW5kbGVyKGVu Z2luZSwgaXJxX2hhbmRsZXIpOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7CisJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KSB7CiAJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjZf aXJxX2VuYWJsZTsKIAkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdlbjZfaXJxX2Rpc2FibGU7Ci0J fSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNSkgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID49IDUpIHsKIAkJZW5naW5lLT5pcnFfZW5hYmxlID0gZ2VuNV9pcnFfZW5hYmxl OwogCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuNV9pcnFfZGlzYWJsZTsKLQl9IGVsc2UgaWYg KElOVEVMX0dFTihpOTE1KSA+PSAzKSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkg Pj0gMykgewogCQllbmdpbmUtPmlycV9lbmFibGUgPSBnZW4zX2lycV9lbmFibGU7CiAJCWVuZ2lu ZS0+aXJxX2Rpc2FibGUgPSBnZW4zX2lycV9kaXNhYmxlOwogCX0gZWxzZSB7CkBAIC0xMDQ5LDcg KzEwNDksNyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1 OwogCiAJLyogZ2VuOCsgYXJlIG9ubHkgc3VwcG9ydGVkIHdpdGggZXhlY2xpc3RzICovCi0JR0VN X0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPj0gOCk7CisJR0VNX0JVR19PTihHUkFQSElDU19WRVIo aTkxNSkgPj0gOCk7CiAKIAlzZXR1cF9pcnEoZW5naW5lKTsKIApAQCAtMTA3MCwxNCArMTA3MCwx NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogCSAqIGVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIoKS4KIAkgKi8KIAllbmdpbmUt PmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuM19lbWl0X2JyZWFkY3J1bWI7Ci0JaWYgKElTX0dF TihpOTE1LCA1KSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCiAJCWVuZ2luZS0+ZW1p dF9maW5pX2JyZWFkY3J1bWIgPSBnZW41X2VtaXRfYnJlYWRjcnVtYjsKIAogCWVuZ2luZS0+c2V0 X2RlZmF1bHRfc3VibWlzc2lvbiA9IGk5eHhfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKIAotCWlm IChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCiAJ CWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9IGdlbjZfZW1pdF9iYl9zdGFydDsKLQllbHNlIGlmIChJ TlRFTF9HRU4oaTkxNSkgPj0gNCkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNCkK IAkJZW5naW5lLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuNF9lbWl0X2JiX3N0YXJ0OwogCWVsc2UgaWYg KElTX0k4MzAoaTkxNSkgfHwgSVNfSTg0NUcoaTkxNSkpCiAJCWVuZ2luZS0+ZW1pdF9iYl9zdGFy dCA9IGk4MzBfZW1pdF9iYl9zdGFydDsKQEAgLTEwOTQsMTYgKzEwOTQsMTYgQEAgc3RhdGljIHZv aWQgc2V0dXBfcmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWVuZ2luZS0+ aXJxX2VuYWJsZV9tYXNrID0gR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUOwogCi0JaWYgKElOVEVM X0dFTihpOTE1KSA+PSA3KSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA3KSB7CiAJCWVu Z2luZS0+ZW1pdF9mbHVzaCA9IGdlbjdfZW1pdF9mbHVzaF9yY3M7CiAJCWVuZ2luZS0+ZW1pdF9m aW5pX2JyZWFkY3J1bWIgPSBnZW43X2VtaXRfYnJlYWRjcnVtYl9yY3M7Ci0JfSBlbHNlIGlmIChJ U19HRU4oaTkxNSwgNikpIHsKKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KSB7 CiAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfZW1pdF9mbHVzaF9yY3M7CiAJCWVuZ2luZS0+ ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVtYl9yY3M7Ci0JfSBlbHNl IGlmIChJU19HRU4oaTkxNSwgNSkpIHsKKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9 PSA1KSB7CiAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfZW1pdF9mbHVzaF9yY3M7CiAJfSBl bHNlIHsKLQkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDQpCisJCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPCA0KQogCQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMl9lbWl0X2ZsdXNoOwogCQllbHNl CiAJCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hfcmNzOwpAQCAtMTExOCwy MCArMTExOCwyMCBAQCBzdGF0aWMgdm9pZCBzZXR1cF92Y3Moc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5p OTE1OwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7CisJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA2KSB7CiAJCS8qIGdlbjYgYnNkIG5lZWRzIGEgc3BlY2lhbCB3YSBmb3IgdGFpbCB1 cGRhdGVzICovCi0JCWlmIChJU19HRU4oaTkxNSwgNikpCisJCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPT0gNikKIAkJCWVuZ2luZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9IGdlbjZfYnNkX3Nl dF9kZWZhdWx0X3N1Ym1pc3Npb247CiAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfZW1pdF9m bHVzaF92Y3M7CiAJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfQlNEX1VTRVJfSU5URVJS VVBUOwogCi0JCWlmIChJU19HRU4oaTkxNSwgNikpCisJCWlmIChHUkFQSElDU19WRVIoaTkxNSkg PT0gNikKIAkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRj cnVtYl94Y3M7CiAJCWVsc2UKIAkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43 X2VtaXRfYnJlYWRjcnVtYl94Y3M7CiAJfSBlbHNlIHsKIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuNF9lbWl0X2ZsdXNoX3ZjczsKLQkJaWYgKElTX0dFTihpOTE1LCA1KSkKKwkJaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA9PSA1KQogCQkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBJTEtfQlNE X1VTRVJfSU5URVJSVVBUOwogCQllbHNlCiAJCQllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEk5 MTVfQlNEX1VTRVJfSU5URVJSVVBUOwpAQCAtMTE0NSw3ICsxMTQ1LDcgQEAgc3RhdGljIHZvaWQg c2V0dXBfYmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW42X2VtaXRfZmx1c2hfeGNzOwogCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0g R1RfQkxUX1VTRVJfSU5URVJSVVBUOwogCi0JaWYgKElTX0dFTihpOTE1LCA2KSkKKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID09IDYpCiAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBn ZW42X2VtaXRfYnJlYWRjcnVtYl94Y3M7CiAJZWxzZQogCQllbmdpbmUtPmVtaXRfZmluaV9icmVh ZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1bWJfeGNzOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAg c3RhdGljIHZvaWQgc2V0dXBfdmVjcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7CiAKLQlHRU1f QlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDcpOworCUdFTV9CVUdfT04oR1JBUEhJQ1NfVkVSKGk5 MTUpIDwgNyk7CiAKIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2VtaXRfZmx1c2hfeGNzOwog CWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gUE1fVkVCT1hfVVNFUl9JTlRFUlJVUFQ7CkBAIC0x MjAzLDcgKzEyMDMsNyBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpnZW43X2N0eF92bWEoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCWlu dCBzaXplLCBlcnI7CiAKLQlpZiAoIUlTX0dFTihlbmdpbmUtPmk5MTUsIDcpIHx8IGVuZ2luZS0+ Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQorCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSAh PSA3IHx8IGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQogCQlyZXR1cm4gMDsKIAogCWVy ciA9IGdlbjdfY3R4X3N3aXRjaF9iYl9zZXR1cChlbmdpbmUsIE5VTEwgLyogcHJvYmUgc2l6ZSAq Lyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jCmluZGV4IDk3Y2FiMWI5OTg3MS4uMDZl OWE4ZWQ0ZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYwpAQCAtMTk2LDcgKzE5 Niw3IEBAIHN0YXRpYyB2b2lkIHJwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKIAlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CiAKIAlzcGluX2xv Y2tfaXJxKCZndC0+aXJxX2xvY2spOwotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExKQor CWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDExKQogCQlnZW4xMV9ycHNfcmVzZXRfaW50 ZXJydXB0cyhycHMpOwogCWVsc2UKIAkJZ2VuNl9ycHNfcmVzZXRfaW50ZXJydXB0cyhycHMpOwpA QCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyB1MzIgcnBzX2xpbWl0cyhzdHJ1Y3QgaW50ZWxfcnBz ICpycHMsIHU4IHZhbCkKIAkgKiBmcmVxdWVuY3ksIGlmIHRoZSBkb3duIHRocmVzaG9sZCBleHBp cmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90CiAJICogcmVjZWl2ZSBhIGRvd24gaW50ZXJy dXB0LgogCSAqLwotCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBzKSkgPj0gOSkgeworCWlm IChHUkFQSElDU19WRVIocnBzX3RvX2k5MTUocnBzKSkgPj0gOSkgewogCQlsaW1pdHMgPSBycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyMzsKIAkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKIAkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKQEAg LTY5Nyw3ICs2OTcsNyBAQCBzdGF0aWMgdm9pZCBycHNfc2V0X3Bvd2VyKHN0cnVjdCBpbnRlbF9y cHMgKnJwcywgaW50IG5ld19wb3dlcikKIAkgICAgaW50ZWxfZ3RfbnNfdG9fcG1faW50ZXJ2YWwo Z3QsIGVpX2Rvd24gKiB0aHJlc2hvbGRfZG93biAqIDEwKSk7CiAKIAlzZXQodW5jb3JlLCBHRU42 X1JQX0NPTlRST0wsCi0JICAgIChJTlRFTF9HRU4oZ3QtPmk5MTUpID4gOSA/IDAgOiBHRU42X1JQ X01FRElBX1RVUkJPKSB8CisJICAgIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID4gOSA/IDAgOiBH RU42X1JQX01FRElBX1RVUkJPKSB8CiAJICAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUg fAogCSAgICBHRU42X1JQX01FRElBX0lTX0dGWCB8CiAJICAgIEdFTjZfUlBfRU5BQkxFIHwKQEAg LTc3MSw3ICs3NzEsNyBAQCBzdGF0aWMgaW50IGdlbjZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMsIHU4IHZhbCkKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7CiAJdTMyIHN3cmVxOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQorCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKIAkJc3dyZXEgPSBHRU45X0ZSRVFVRU5DWSh2YWwp OwogCWVsc2UgaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQogCQlz d3JlcSA9IEhTV19GUkVRVUVOQ1kodmFsKTsKQEAgLTgxMiwxNCArODEyLDE0IEBAIHN0YXRpYyBp bnQgcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCwgYm9vbCB1cGRhdGUpCiAK IAlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQogCQllcnIg PSB2bHZfcnBzX3NldChycHMsIHZhbCk7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYp CisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCiAJCWVyciA9IGdlbjZfcnBzX3Nl dChycHMsIHZhbCk7CiAJZWxzZQogCQllcnIgPSBnZW41X3Jwc19zZXQocnBzLCB2YWwpOwogCWlm IChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAodXBkYXRlICYmIElOVEVMX0dFTihpOTE1KSA+ PSA2KQorCWlmICh1cGRhdGUgJiYgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCiAJCWdlbjZfcnBz X3NldF90aHJlc2hvbGRzKHJwcywgdmFsKTsKIAlycHMtPmxhc3RfZnJlcSA9IHZhbDsKIApAQCAt ODUzLDcgKzg1Myw3IEBAIHZvaWQgaW50ZWxfcnBzX3VucGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCiAJaWYgKGludGVsX3Jwc191c2VzX3RpbWVyKHJwcykpCiAJCXJwc19zdGFydF90aW1lcihy cHMpOwogCi0JaWYgKElTX0dFTihycHNfdG9faTkxNShycHMpLCA1KSkKKwlpZiAoR1JBUEhJQ1Nf VkVSKHJwc190b19pOTE1KHJwcykpID09IDUpCiAJCWdlbjVfcnBzX3VwZGF0ZShycHMpOwogfQog CkBAIC05OTksNyArOTk5LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9ycHNfaW5pdChzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCiAKIAlycHMtPmVmZmljaWVudF9mcmVxID0gcnBzLT5ycDFfZnJlcTsKIAlp ZiAoSVNfSEFTV0VMTChpOTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkgfHwKLQkgICAgSVNfR0VO OV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwkgICAgSVNfR0VOOV9CQyhp OTE1KSB8fCBHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApIHsKIAkJdTMyIGRkY2Nfc3RhdHVzID0g MDsKIAogCQlpZiAoc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChpOTE1LApAQCAtMTAxMiw3ICsxMDEy LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCiAJ CQkJCXJwcy0+bWF4X2ZyZXEpOwogCX0KIAotCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVM X0dFTihpOTE1KSA+PSAxMCkgeworCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IEdSQVBISUNTX1ZF UihpOTE1KSA+PSAxMCkgewogCQkvKiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42 NiBNSFogdW5pdHMsIHdoaWNoIGlzCiAJCSAqIHRoZSBuYXR1cmFsIGhhcmR3YXJlIHVuaXQgZm9y IFNLTAogCQkgKi8KQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBib29sIGdlbjlfcnBzX2Vu YWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gZ3QtPnVuY29yZTsKIAogCS8qIFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9y IFJQUyAqLwotCWlmIChJU19HRU4oZ3QtPmk5MTUsIDkpKQorCWlmIChHUkFQSElDU19WRVIoZ3Qt Pmk5MTUpID09IDkpCiAJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfVklE RU9fRlJFUSwKIAkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7CiAKQEAg LTEzNjUsMTYgKzEzNjUsMTYgQEAgdm9pZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9y cHMgKnJwcykKIAkJZW5hYmxlZCA9IGNodl9ycHNfZW5hYmxlKHJwcyk7CiAJZWxzZSBpZiAoSVNf VkFMTEVZVklFVyhpOTE1KSkKIAkJZW5hYmxlZCA9IHZsdl9ycHNfZW5hYmxlKHJwcyk7Ci0JZWxz ZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDkpCiAJCWVuYWJsZWQgPSBnZW45X3Jwc19lbmFibGUocnBzKTsKLQllbHNlIGlmIChJTlRF TF9HRU4oaTkxNSkgPj0gOCkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkKIAkJ ZW5hYmxlZCA9IGdlbjhfcnBzX2VuYWJsZShycHMpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA2KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQogCQllbmFibGVkID0g Z2VuNl9ycHNfZW5hYmxlKHJwcyk7CiAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKIAkJ ZW5hYmxlZCA9IGdlbjVfcnBzX2VuYWJsZShycHMpOwogCWVsc2UKLQkJTUlTU0lOR19DQVNFKElO VEVMX0dFTihpOTE1KSk7CisJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkxNSkpOwogCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CiAJaWYgKCFl bmFibGVkKQogCQlyZXR1cm47CkBAIC0xMzkzLDcgKzEzOTMsNyBAQCB2b2lkIGludGVsX3Jwc19l bmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQogCiAJaWYgKGhhc19idXN5X3N0YXRzKHJwcykp CiAJCWludGVsX3Jwc19zZXRfdGltZXIocnBzKTsKLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNikKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKIAkJaW50ZWxfcnBzX3Nl dF9pbnRlcnJ1cHRzKHJwcyk7CiAJZWxzZQogCQkvKiBJcm9ubGFrZSBjdXJyZW50bHkgdXNlcyBp bnRlbF9pcHMua28gKi8ge30KQEAgLTE0MTQsNyArMTQxNCw3IEBAIHZvaWQgaW50ZWxfcnBzX2Rp c2FibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQogCWludGVsX3Jwc19jbGVhcl9pbnRlcnJ1cHRz KHJwcyk7CiAJaW50ZWxfcnBzX2NsZWFyX3RpbWVyKHJwcyk7CiAKLQlpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQogCQlnZW42X3Jwc19kaXNh YmxlKHJwcyk7CiAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKIAkJZ2VuNV9ycHNfZGlz YWJsZShycHMpOwpAQCAtMTQ1MywxNCArMTQ1MywxNCBAQCBpbnQgaW50ZWxfZ3B1X2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKIAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCiAJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VCh2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUiwKIAkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIp OwogCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCiAJCXJldHVybiBjaHZfZ3B1X2ZyZXEo cnBzLCB2YWwpOwogCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCiAJCXJldHVybiBieXRf Z3B1X2ZyZXEocnBzLCB2YWwpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCWVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQogCQlyZXR1cm4gdmFsICogR1RfRlJFUVVF TkNZX01VTFRJUExJRVI7CiAJZWxzZQogCQlyZXR1cm4gdmFsOwpAQCAtMTQ3MCwxNCArMTQ3MCwx NCBAQCBpbnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFs KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK IAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49 IDkpCiAJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHRU45X0ZSRVFfU0NBTEVSLAog CQkJCQkgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwogCWVsc2UgaWYgKElTX0NIRVJSWVZJRVco aTkxNSkpCiAJCXJldHVybiBjaHZfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwogCWVsc2UgaWYgKElT X1ZBTExFWVZJRVcoaTkxNSkpCiAJCXJldHVybiBieXRfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwot CWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA2KQogCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lf TVVMVElQTElFUik7CiAJZWxzZQogCQlyZXR1cm4gdmFsOwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAg dm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9p aXIpCiAJCXNwaW5fdW5sb2NrKCZndC0+aXJxX2xvY2spOwogCX0KIAotCWlmIChJTlRFTF9HRU4o Z3QtPmk5MTUpID49IDgpCisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gOCkKIAkJcmV0 dXJuOwogCiAJaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQpAQCAtMTgzMyw3 ICsxODMzLDcgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCiAJ CWNodl9ycHNfaW5pdChycHMpOwogCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCiAJCXZs dl9ycHNfaW5pdChycHMpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQogCQlnZW42X3Jwc19pbml0KHJwcyk7CiAJZWxz ZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKIAkJZ2VuNV9ycHNfaW5pdChycHMpOwpAQCAtMTg0 Myw3ICsxODQzLDcgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMp CiAJcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPSBycHMtPm1pbl9mcmVxOwogCiAJLyogQWZ0ZXIg c2V0dGluZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRoZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KLQlp ZiAoSVNfR0VOKGk5MTUsIDYpIHx8IElTX0lWWUJSSURHRShpOTE1KSB8fCBJU19IQVNXRUxMKGk5 MTUpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2IHx8IElTX0lWWUJSSURHRShpOTE1 KSB8fCBJU19IQVNXRUxMKGk5MTUpKSB7CiAJCXUzMiBwYXJhbXMgPSAwOwogCiAJCXNhbmR5YnJp ZGdlX3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9SRUFEX09DX1BBUkFNUywKQEAgLTE4NzIsMTYgKzE4 NzIsMTYgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCiAJICoK IAkgKiBUT0RPOiB2ZXJpZnkgaWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNlZCBvbiBWTFYsQ0hWLgog CSAqLwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gNykKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp IDw9IDcpCiAJCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVE OwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4ICYmIElOVEVMX0dFTihpOTE1KSA8IDExKQor CWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCAxMSkK IAkJcnBzLT5wbV9pbnRybXNrX21ieiB8PSBHRU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RP X0dVQzsKIH0KIAogdm9pZCBpbnRlbF9ycHNfc2FuaXRpemUoc3RydWN0IGludGVsX3JwcyAqcnBz KQogewotCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBzKSkgPj0gNikKKwlpZiAoR1JBUEhJ Q1NfVkVSKHJwc190b19pOTE1KHJwcykpID49IDYpCiAJCXJwc19kaXNhYmxlX2ludGVycnVwdHMo cnBzKTsKIH0KIApAQCAtMTg5MiwxMSArMTg5MiwxMSBAQCB1MzIgaW50ZWxfcnBzX2dldF9jYWdm KHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdCkKIAogCWlmIChJU19WQUxMRVlWSUVX KGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCiAJCWNhZ2YgPSAocnBzdGF0ID4+IDgpICYg MHhmZjsKLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwllbHNlIGlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOSkKIAkJY2FnZiA9IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4g R0VOOV9DQUdGX1NISUZUOwogCWVsc2UgaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURX RUxMKGk5MTUpKQogCQljYWdmID0gKHJwc3RhdCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdG X1NISUZUOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA2KQogCQljYWdmID0gKHJwc3RhdCAmIEdFTjZfQ0FHRl9NQVNLKSA+ PiBHRU42X0NBR0ZfU0hJRlQ7CiAJZWxzZQogCQljYWdmID0gZ2VuNV9pbnZlcnRfZnJlcShycHMs IChycHN0YXQgJiBNRU1TVEFUX1BTVEFURV9NQVNLKSA+PgpAQCAtMTkxNSw3ICsxOTE1LDcgQEAg c3RhdGljIHUzMiByZWFkX2NhZ2Yoc3RydWN0IGludGVsX3JwcyAqcnBzKQogCQl2bHZfcHVuaXRf Z2V0KGk5MTUpOwogCQlmcmVxID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9G UkVRX1NUUyk7CiAJCXZsdl9wdW5pdF9wdXQoaTkxNSk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4o aTkxNSkgPj0gNikgeworCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKIAkJ ZnJlcSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUFNUQVQxKTsKIAl9IGVsc2Ug ewogCQlmcmVxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1TVEFUX0lMSyk7CkBAIC0x OTY4LDcgKzE5NjgsNyBAQCB2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQogCSAqIFdlIG9ubHkgcmVnaXN0ZXIgdGhlIGk5MTUgaXBzIHBhcnQgd2l0 aCBpbnRlbC1pcHMgb25jZSBldmVyeXRoaW5nIGlzCiAJICogc2V0IHVwLCB0byBhdm9pZCBpbnRl bC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFsdWVzLgogCSAqLwotCWlmIChJ U19HRU4oZ3QtPmk5MTUsIDUpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNSkg ewogCQlHRU1fQlVHX09OKGlwc19tY2hkZXYpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21j aGRldiwgZ3QtPmk5MTUpOwogCQlpcHNfcGluZ19mb3JfaTkxNV9sb2FkKCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9zc2V1LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9zc2V1LmMKaW5kZXggMGQ5Zjc0YWVjOGZlLi4zNjdmZDQ0YjgxYzggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9zc2V1LmMKQEAgLTU5MCwxMyArNTkwLDEzIEBAIHZv aWQgaW50ZWxfc3NldV9pbmZvX2luaXQoc3RydWN0IGludGVsX2d0ICpndCkKIAkJY2hlcnJ5dmll d19zc2V1X2luZm9faW5pdChndCk7CiAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQogCQli ZHdfc3NldV9pbmZvX2luaXQoZ3QpOwotCWVsc2UgaWYgKElTX0dFTihpOTE1LCA5KSkKKwllbHNl IGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkKIAkJZ2VuOV9zc2V1X2luZm9faW5pdChndCk7 Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEwKSkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPT0gMTApCiAJCWdlbjEwX3NzZXVfaW5mb19pbml0KGd0KTsKLQllbHNlIGlmIChJU19HRU4o aTkxNSwgMTEpKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMSkKIAkJZ2VuMTFf c3NldV9pbmZvX2luaXQoZ3QpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMikKKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTIpCiAJCWdlbjEyX3NzZXVfaW5mb19pbml0 KGd0KTsKIH0KIApAQCAtNjEzLDcgKzYxMyw3IEBAIHUzMiBpbnRlbF9zc2V1X21ha2VfcnBjcyhz dHJ1Y3QgaW50ZWxfZ3QgKmd0LAogCSAqIE5vIGV4cGxpY2l0IFJQQ1MgcmVxdWVzdCBpcyBuZWVk ZWQgdG8gZW5zdXJlIGZ1bGwKIAkgKiBzbGljZS9zdWJzbGljZS9FVSBlbmFibGVtZW50IHByaW9y IHRvIEdlbjkuCiAJICovCi0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDkpCisJaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA8IDkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTY1MSw3ICs2NTEsNyBAQCB1 MzIgaW50ZWxfc3NldV9tYWtlX3JwY3Moc3RydWN0IGludGVsX2d0ICpndCwKIAkgKiBzdWJzbGlj ZXMgYXJlIGVuYWJsZWQsIG9yIGEgY291bnQgYmV0d2VlbiBvbmUgYW5kIGZvdXIgb24gdGhlIGZp cnN0CiAJICogc2xpY2UuCiAJICovCi0JaWYgKElTX0dFTihpOTE1LCAxMSkgJiYKKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID09IDExICYmCiAJICAgIHNsaWNlcyA9PSAxICYmCiAJICAgIHN1YnNs aWNlcyA+IG1pbl90KHU4LCA0LCBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrWzBdKSAvIDIp KSB7CiAJCUdFTV9CVUdfT04oc3Vic2xpY2VzICYgMSk7CkBAIC02NjksNyArNjY5LDcgQEAgdTMy IGludGVsX3NzZXVfbWFrZV9ycGNzKHN0cnVjdCBpbnRlbF9ndCAqZ3QsCiAJaWYgKHNzZXUtPmhh c19zbGljZV9wZykgewogCQl1MzIgbWFzaywgdmFsID0gc2xpY2VzOwogCi0JCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gMTEpIHsKKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewogCQkJ bWFzayA9IEdFTjExX1JQQ1NfU19DTlRfTUFTSzsKIAkJCXZhbCA8PD0gR0VOMTFfUlBDU19TX0NO VF9TSElGVDsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3Jr YXJvdW5kcy5jCmluZGV4IDYyY2I5ZWU1YmZjMy4uYjYyZDFlMzFhNjQ1IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKQEAgLTY5OSw5ICs2OTksOSBAQCBf X2ludGVsX2VuZ2luZV9pbml0X2N0eF93YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs CiAKIAlpZiAoSVNfREcxKGk5MTUpKQogCQlkZzFfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5l LCB3YWwpOwotCWVsc2UgaWYgKElTX0dFTihpOTE1LCAxMikpCisJZWxzZSBpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDEyKQogCQlnZW4xMl9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdh bCk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDExKSkKKwllbHNlIGlmIChHUkFQSElDU19WRVIo aTkxNSkgPT0gMTEpCiAJCWljbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7CiAJ ZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShpOTE1KSkKIAkJY25sX2N0eF93b3JrYXJvdW5kc19pbml0 KGVuZ2luZSwgd2FsKTsKQEAgLTcxOSwxNCArNzE5LDE0IEBAIF9faW50ZWxfZW5naW5lX2luaXRf Y3R4X3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJY2h2X2N0eF93b3JrYXJv dW5kc19pbml0KGVuZ2luZSwgd2FsKTsKIAllbHNlIGlmIChJU19CUk9BRFdFTEwoaTkxNSkpCiAJ CWJkd19jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Ci0JZWxzZSBpZiAoSVNfR0VO KGk5MTUsIDcpKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KQogCQlnZW43X2N0 eF93b3JrYXJvdW5kc19pbml0KGVuZ2luZSwgd2FsKTsKLQllbHNlIGlmIChJU19HRU4oaTkxNSwg NikpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpCiAJCWdlbjZfY3R4X3dvcmth cm91bmRzX2luaXQoZW5naW5lLCB3YWwpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8IDgp CisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgOCkKIAkJOwogCWVsc2UKLQkJTUlTU0lO R19DQVNFKElOVEVMX0dFTihpOTE1KSk7CisJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkx NSkpOwogCiAJd2FfaW5pdF9maW5pc2god2FsKTsKIH0KQEAgLTk1MCw3ICs5NTAsNyBAQCB3YV9p bml0X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVfd2FfbGlz dCAqd2FsKQogCXVuc2lnbmVkIGludCBzbGljZSwgc3Vic2xpY2U7CiAJdTMyIGwzX2VuLCBtY3Is IG1jcl9tYXNrOwogCi0JR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCAxMCk7CisJR0VNX0JV R19PTihHUkFQSElDU19WRVIoaTkxNSkgPCAxMCk7CiAKIAkvKgogCSAqIFdhUHJvZ3JhbU1nc3JG b3JMM0JhbmtTcGVjaWZpY01taW9SZWFkczogY25sLGljbApAQCAtOTgwLDcgKzk4MCw3IEBAIHdh X2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaTkxNV93YV9s aXN0ICp3YWwpCiAJICogb2YgZXZlcnkgTU1JTyByZWFkLgogCSAqLwogCi0JaWYgKElOVEVMX0dF TihpOTE1KSA+PSAxMCAmJiBpc19wb3dlcl9vZl8yKHNzZXUtPnNsaWNlX21hc2spKSB7CisJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCAmJiBpc19wb3dlcl9vZl8yKHNzZXUtPnNsaWNlX21h c2spKSB7CiAJCXUzMiBsM19mdXNlID0KIAkJCWludGVsX3VuY29yZV9yZWFkKCZpOTE1LT51bmNv cmUsIEdFTjEwX01JUlJPUl9GVVNFMykgJgogCQkJR0VOMTBfTDNCQU5LX01BU0s7CkBAIC0xMDAy LDcgKzEwMDIsNyBAQCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg c3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQogCX0KIAlzdWJzbGljZS0tOwogCi0JaWYgKElOVEVM X0dFTihpOTE1KSA+PSAxMSkgeworCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsKIAkJ bWNyID0gR0VOMTFfTUNSX1NMSUNFKHNsaWNlKSB8IEdFTjExX01DUl9TVUJTTElDRShzdWJzbGlj ZSk7CiAJCW1jcl9tYXNrID0gR0VOMTFfTUNSX1NMSUNFX01BU0sgfCBHRU4xMV9NQ1JfU1VCU0xJ Q0VfTUFTSzsKIAl9IGVsc2UgewpAQCAtMTE3MSw5ICsxMTcxLDkgQEAgZ3RfaW5pdF93b3JrYXJv dW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVfd2FfbGlzdCAq d2FsKQogCQlkZzFfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwogCWVsc2UgaWYgKElT X1RJR0VSTEFLRShpOTE1KSkKIAkJdGdsX2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsK LQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTIpKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSAxMikKIAkJZ2VuMTJfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwotCWVsc2Ug aWYgKElTX0dFTihpOTE1LCAxMSkpCisJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDEx KQogCQlpY2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwogCWVsc2UgaWYgKElTX0NB Tk5PTkxBS0UoaTkxNSkpCiAJCWNubF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7CkBA IC0xMTkzLDE4ICsxMTkzLDE4IEBAIGd0X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKIAkJdmx2X2d0X3dvcmth cm91bmRzX2luaXQoaTkxNSwgd2FsKTsKIAllbHNlIGlmIChJU19JVllCUklER0UoaTkxNSkpCiAJ CWl2Yl9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5 MTUsIDYpKQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQogCQlzbmJfZ3Rfd29y a2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwotCWVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkKKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkKIAkJaWxrX2d0X3dvcmthcm91bmRzX2lu aXQoaTkxNSwgd2FsKTsKIAllbHNlIGlmIChJU19HNFgoaTkxNSkpCiAJCWc0eF9ndF93b3JrYXJv dW5kc19pbml0KGk5MTUsIHdhbCk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDQpKQorCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA0KQogCQlnZW40X2d0X3dvcmthcm91bmRzX2luaXQo aTkxNSwgd2FsKTsKLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPD0gOCkKKwllbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPD0gOCkKIAkJOwogCWVsc2UKLQkJTUlTU0lOR19DQVNFKElOVEVM X0dFTihpOTE1KSk7CisJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoaTkxNSkpOwogfQogCiB2 b2lkIGludGVsX2d0X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCkBAIC0xNTU4LDkgKzE1NTgsOSBAQCB2b2lkIGludGVsX2VuZ2luZV9pbml0X3doaXRlbGlz dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAlpZiAoSVNfREcxKGk5MTUpKQog CQlkZzFfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSk7Ci0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEy KSkKKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTIpCiAJCXRnbF93aGl0ZWxpc3Rf YnVpbGQoZW5naW5lKTsKLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQorCWVsc2UgaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA9PSAxMSkKIAkJaWNsX3doaXRlbGlzdF9idWlsZChlbmdpbmUpOwog CWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpCiAJCWNubF93aGl0ZWxpc3RfYnVpbGQoZW5n aW5lKTsKQEAgLTE1NzYsMTAgKzE1NzYsMTAgQEAgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF93aGl0 ZWxpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCQlieHRfd2hpdGVsaXN0X2J1 aWxkKGVuZ2luZSk7CiAJZWxzZSBpZiAoSVNfU0tZTEFLRShpOTE1KSkKIAkJc2tsX3doaXRlbGlz dF9idWlsZChlbmdpbmUpOwotCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8PSA4KQorCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA4KQogCQk7CiAJZWxzZQotCQlNSVNTSU5HX0NBU0Uo SU5URUxfR0VOKGk5MTUpKTsKKwkJTUlTU0lOR19DQVNFKEdSQVBISUNTX1ZFUihpOTE1KSk7CiAK IAl3YV9pbml0X2ZpbmlzaCh3KTsKIH0KQEAgLTE2OTUsNyArMTY5NSw3IEBAIHJjc19lbmdpbmVf d2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xp c3QgKndhbCkKIAkJCSAgICAgRU5BQkxFX1NNQUxMUEwpOwogCX0KIAotCWlmIChJU19HRU4oaTkx NSwgMTEpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMSkgewogCQkvKiBUaGlzIGlz IG5vdCBhbiBXYS4gRW5hYmxlIGZvciBiZXR0ZXIgaW1hZ2UgcXVhbGl0eSAqLwogCQl3YV9tYXNr ZWRfZW4od2FsLAogCQkJICAgICBfM0RfQ0hJQ0tFTjMsCkBAIC0xNzkzLDcgKzE3OTMsNyBAQCBy Y3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwpCiAJCQkgICAgIEZGX0RPUF9DTE9DS19HQVRFX0RJU0FCTEUpOwog CX0KIAotCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgOSwgMTIpKSB7CisJaWYgKElTX0dSQVBISUNT X1ZFUihpOTE1LCA5LCAxMikpIHsKIAkJLyogRnRyUGVyQ3R4dFByZWVtcHRpb25HcmFudWxhcml0 eUNvbnRyb2w6c2tsLGJ4dCxrYmwsY2ZsLGNubCxpY2wsdGdsICovCiAJCXdhX21hc2tlZF9lbih3 YWwsCiAJCQkgICAgIEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjEsCkBAIC0xODE3LDcgKzE4MTcs NyBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCiAJCQkgICAgIEdFTjlfUE9PTEVEX0VVX0xPQURfQkFM QU5DSU5HX0ZJWF9ESVNBQkxFKTsKIAl9CiAKLQlpZiAoSVNfR0VOKGk5MTUsIDkpKSB7CisJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA9PSA5KSB7CiAJCS8qIFdhQ29udGV4dFN3aXRjaFdpdGhDb25j dXJyZW50VExCSW52YWxpZGF0ZTpza2wsYnh0LGtibCxnbGssY2ZsICovCiAJCXdhX21hc2tlZF9l bih3YWwsCiAJCQkgICAgIEdFTjlfQ1NGRV9DSElDS0VOMV9SQ1MsCkBAIC0xOTIxLDcgKzE5MjEs NyBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCiAJCQkJICAgICBHRU43X1BTRF9TSU5HTEVfUE9SVF9E SVNQQVRDSF9FTkFCTEUpOwogCX0KIAotCWlmIChJU19HRU4oaTkxNSwgNykpIHsKKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID09IDcpIHsKIAkJLyogV2FCQ1NWQ1NUbGJJbnZhbGlkYXRpb25Nb2Rl Oml2Yix2bHYsaHN3ICovCiAJCXdhX21hc2tlZF9lbih3YWwsCiAJCQkgICAgIEdGWF9NT0RFX0dF TjcsCkBAIC0xOTUzLDcgKzE5NTMsNyBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCiAJCSAgICAgICBH RU42X1dJWl9IQVNISU5HXzE2eDQpOwogCX0KIAotCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgNiwg NykpCisJaWYgKElTX0dSQVBISUNTX1ZFUihpOTE1LCA2LCA3KSkKIAkJLyoKIAkJICogV2UgbmVl ZCB0byBkaXNhYmxlIHRoZSBBc3luY0ZsaXAgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucyBpbgog CQkgKiBvcmRlciB0byB1c2UgTUlfV0FJVF9GT1JfRVZFTlQgd2l0aGluIHRoZSBDUy4gSXQgc2hv dWxkCkBAIC0xOTY1LDcgKzE5NjUsNyBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCiAJCQkgICAgIE1J X01PREUsCiAJCQkgICAgIEFTWU5DX0ZMSVBfUEVSRl9ESVNBQkxFKTsKIAotCWlmIChJU19HRU4o aTkxNSwgNikpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpIHsKIAkJLyoKIAkJICog UmVxdWlyZWQgZm9yIHRoZSBoYXJkd2FyZSB0byBwcm9ncmFtIHNjYW5saW5lIHZhbHVlcyBmb3IK IAkJICogd2FpdGluZwpAQCAtMjAxOSwxNCArMjAxOSwxNCBAQCByY3NfZW5naW5lX3dhX2luaXQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwp CiAJCQkgICAgICBDTTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQik7CiAJfQogCi0JaWYgKElT X0dFTl9SQU5HRShpOTE1LCA0LCA2KSkKKwlpZiAoSVNfR1JBUEhJQ1NfVkVSKGk5MTUsIDQsIDYp KQogCQkvKiBXYVRpbWVkU2luZ2xlVmVydGV4RGlzcGF0Y2g6Y2wsYncsY3RnLGVsayxpbGssc25i ICovCiAJCXdhX2FkZCh3YWwsIE1JX01PREUsCiAJCSAgICAgICAwLCBfTUFTS0VEX0JJVF9FTkFC TEUoVlNfVElNRVJfRElTUEFUQ0gpLAogCQkgICAgICAgLyogWFhYIGJpdCBkb2Vzbid0IHN0aWNr IG9uIEJyb2Fkd2F0ZXIgKi8KIAkJICAgICAgIElTX0k5NjVHKGk5MTUpID8gMCA6IFZTX1RJTUVS X0RJU1BBVENIKTsKIAotCWlmIChJU19HRU4oaTkxNSwgNCkpCisJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA9PSA0KQogCQkvKgogCQkgKiBEaXNhYmxlIENPTlNUQU5UX0JVRkZFUiBiZWZvcmUgaXQg aXMgbG9hZGVkIGZyb20gdGhlIGNvbnRleHQKIAkJICogaW1hZ2UuIEZvciBhcyBpdCBpcyBsb2Fk ZWQsIGl0IGlzIGV4ZWN1dGVkIGFuZCB0aGUgc3RvcmVkCkBAIC0yMDU4LDcgKzIwNTgsNyBAQCB4 Y3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwpCiBzdGF0aWMgdm9pZAogZW5naW5lX2luaXRfd29ya2Fyb3VuZHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwp CiB7Ci0JaWYgKEk5MTVfU0VMRlRFU1RfT05MWShJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDQp KQorCWlmIChJOTE1X1NFTEZURVNUX09OTFkoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA0 KSkKIAkJcmV0dXJuOwogCiAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQpAQCAt MjA3MSw3ICsyMDcxLDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF93b3JrYXJvdW5kcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2Fs ID0gJmVuZ2luZS0+d2FfbGlzdDsKIAotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDQp CisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgNCkKIAkJcmV0dXJuOwogCiAJd2Ff aW5pdF9zdGFydCh3YWwsICJlbmdpbmUiLCBlbmdpbmUtPm5hbWUpOwpAQCAtMjExMiw5ICsyMTEy LDkgQEAgc3RhdGljIGJvb2wgbWNyX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LCB1MzIgb2Zmc2V0KQogCWNvbnN0IHN0cnVjdCBtY3JfcmFuZ2UgKm1jcl9yYW5nZXM7CiAJaW50 IGk7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKQorCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gMTIpCiAJCW1jcl9yYW5nZXMgPSBtY3JfcmFuZ2VzX2dlbjEyOwotCWVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA4KQorCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQog CQltY3JfcmFuZ2VzID0gbWNyX3Jhbmdlc19nZW44OwogCWVsc2UKIAkJcmV0dXJuIGZhbHNlOwpA QCAtMjE0Myw3ICsyMTQzLDcgQEAgd2FfbGlzdF9zcm0oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs CiAJdTMyIHNybSwgKmNzOwogCiAJc3JtID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfU1JN X0xSTV9HTE9CQUxfR1RUOwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpID49IDgpCiAJCXNybSsrOwogCiAJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxp c3Q7IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKaW5kZXggMzQ1M2ViNzdjNDk4Li42NGFiZjVmZWFiZmEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jCkBAIC01 Miw3ICs1Miw3IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGltZXN0YW1wKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLCBpbnQgc2xvdCkKIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwogCiAJY21kID0gTUlfU1RP UkVfUkVHSVNURVJfTUVNIHwgTUlfVVNFX0dHVFQ7Ci0JaWYgKElOVEVMX0dFTihycS0+ZW5naW5l LT5pOTE1KSA+PSA4KQorCWlmIChHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPj0gOCkK IAkJY21kKys7CiAJKmNzKysgPSBjbWQ7CiAJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChS SU5HX1RJTUVTVEFNUChycS0+ZW5naW5lLT5tbWlvX2Jhc2UpKTsKQEAgLTEyNSw3ICsxMjUsNyBA QCBzdGF0aWMgaW50IHBlcmZfbWlfYmJfc3RhcnQodm9pZCAqYXJnKQogCWVudW0gaW50ZWxfZW5n aW5lX2lkIGlkOwogCWludCBlcnIgPSAwOwogCi0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA3 KSAvKiBmb3IgcGVyLWVuZ2luZSBDU19USU1FU1RBTVAgKi8KKwlpZiAoR1JBUEhJQ1NfVkVSKGd0 LT5pOTE1KSA8IDcpIC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwogCQlyZXR1cm4g MDsKIAogCXBlcmZfYmVnaW4oZ3QpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBpbnQgcGVy Zl9taV9ub29wKHZvaWQgKmFyZykKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKIAlpbnQgZXJy ID0gMDsKIAotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogZm9yIHBlci1lbmdpbmUg Q1NfVElNRVNUQU1QICovCisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA3KSAvKiBmb3Ig cGVyLWVuZ2luZSBDU19USU1FU1RBTVAgKi8KIAkJcmV0dXJuIDA7CiAKIAlwZXJmX2JlZ2luKGd0 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9w bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMKaW5kZXgg MmM4OTg2MjJiZGZiLi43MmNjYTNmMGRhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jCkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIGludCBsaXZl X2VuZ2luZV90aW1lc3RhbXBzKHZvaWQgKmFyZykKIAkgKiB0aGUgc2FtZSBDUyBjbG9jay4KIAkg Ki8KIAotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkKKwlpZiAoR1JBUEhJQ1NfVkVSKGd0 LT5pOTE1KSA8IDgpCiAJCXJldHVybiAwOwogCiAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3Qs IGlkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVj bGlzdHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCmlu ZGV4IDFmOTM1OTFhOGM2OS4uZWEyMjAzYWYwNzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYwpAQCAtMzI2OSw3ICszMjY5LDcgQEAgc3RhdGljIGlu dCBsaXZlX3ByZWVtcHRfdXNlcih2b2lkICphcmcpCiAJCWlmICghaW50ZWxfZW5naW5lX2hhc19w cmVlbXB0aW9uKGVuZ2luZSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoSVNfR0VOKGd0LT5pOTE1 LCA4KSAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKKwkJaWYgKEdSQVBISUNTX1ZF UihndC0+aTkxNSkgPT0gOCAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKIAkJCWNv bnRpbnVlOyAvKiB3ZSBuZWVkIHBlci1jb250ZXh0IEdQUiAqLwogCiAJCWlmIChpZ3RfbGl2ZV90 ZXN0X2JlZ2luKCZ0LCBndC0+aTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSkpIHsKQEAgLTQy OTMsNyArNDI5Myw3IEBAIHN0YXRpYyBpbnQgbGl2ZV92aXJ0dWFsX3ByZXNlcnZlZCh2b2lkICph cmcpCiAJCXJldHVybiAwOwogCiAJLyogQXMgd2UgdXNlIENTX0dQUiB3ZSBjYW5ub3QgcnVuIGJl Zm9yZSB0aGV5IGV4aXN0ZWQgb24gYWxsIGVuZ2luZXMuICovCi0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPCA5KQorCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOSkKIAkJcmV0dXJuIDA7 CiAKIAlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPD0gTUFYX0VOR0lORV9DTEFTUzsgY2xhc3MrKykg ewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZ3RfcG0uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMKaW5kZXggYzA4NDViZjcy ZGQzLi5iOTQ0MTIxN2NhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X2d0X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZ3Rf cG0uYwpAQCAtNzQsMTAgKzc0LDEwIEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9jbG9ja3Modm9pZCAq YXJnKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDQpIC8q IEFueSBDU19USU1FU1RBTVA/ICovCisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA0KSAv KiBBbnkgQ1NfVElNRVNUQU1QPyAqLwogCQlyZXR1cm4gMDsKIAotCWlmIChJU19HRU4oZ3QtPmk5 MTUsIDUpKQorCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID09IDUpCiAJCS8qCiAJCSAqIFhY WCBDU19USU1FU1RBTVAgbG93IGR3b3JkIGlzIGR5c2Z1bmN0aW9uYWw/CiAJCSAqCkBAIC04Niw3 ICs4Niw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9jbG9ja3Modm9pZCAqYXJnKQogCQkgKi8KIAkJ cmV0dXJuIDA7CiAKLQlpZiAoSVNfR0VOKGd0LT5pOTE1LCA0KSkKKwlpZiAoR1JBUEhJQ1NfVkVS KGd0LT5pOTE1KSA9PSA0KQogCQkvKgogCQkgKiBYWFggQ1NfVElNRVNUQU1QIGFwcGVhcnMgZ2li YmVyaXNoCiAJCSAqCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIGludCBsaXZlX2d0X2Nsb2Nr cyh2b2lkICphcmcpCiAJCXU2NCB0aW1lOwogCQl1NjQgZHQ7CiAKLQkJaWYgKElOVEVMX0dFTihl bmdpbmUtPmk5MTUpIDwgNyAmJiBlbmdpbmUtPmlkICE9IFJDUzApCisJCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA8IDcgJiYgZW5naW5lLT5pZCAhPSBSQ1MwKQogCQkJY29udGludWU7 CiAKIAkJbWVhc3VyZV9jbG9ja3MoZW5naW5lLCAmY3ljbGVzLCAmZHQpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwppbmRleCA1YjYzZDRkZjhjOTMuLjg1 MzI0NmZhZDA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf aGFuZ2NoZWNrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2No ZWNrLmMKQEAgLTE4MCw3ICsxODAsNyBAQCBoYW5nX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5n ICpoLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCWdvdG8gY2FuY2VsX3JxOwog CiAJYmF0Y2ggPSBoLT5iYXRjaDsKLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSA4KSB7CisJ aWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gOCkgewogCQkqYmF0Y2grKyA9IE1JX1NUT1JF X0RXT1JEX0lNTV9HRU40OwogCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3Mo aHdzLCBycSkpOwogCQkqYmF0Y2grKyA9IHVwcGVyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBy cSkpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcg KmgsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJKmJhdGNoKysgPSBNSV9CQVRD SF9CVUZGRVJfU1RBUlQgfCAxIDw8IDggfCAxOwogCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMo dm1hLT5ub2RlLnN0YXJ0KTsKIAkJKmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKHZtYS0+bm9kZS5z dGFydCk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDYpIHsKKwl9IGVsc2Ug aWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gNikgewogCQkqYmF0Y2grKyA9IE1JX1NUT1JF X0RXT1JEX0lNTV9HRU40OwogCQkqYmF0Y2grKyA9IDA7CiAJCSpiYXRjaCsrID0gbG93ZXJfMzJf Yml0cyhod3NfYWRkcmVzcyhod3MsIHJxKSk7CkBAIC0yMDcsNyArMjA3LDcgQEAgaGFuZ19jcmVh dGVfcmVxdWVzdChzdHJ1Y3QgaGFuZyAqaCwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogCQkqYmF0Y2grKyA9IE1JX05PT1A7CiAJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NU QVJUIHwgMSA8PCA4OwogCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0 KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gNCkgeworCX0gZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA0KSB7CiAJCSpiYXRjaCsrID0gTUlfU1RPUkVfRFdP UkRfSU1NX0dFTjQgfCBNSV9VU0VfR0dUVDsKIAkJKmJhdGNoKysgPSAwOwogCQkqYmF0Y2grKyA9 IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOwpAQCAtMjQzLDcgKzI0Myw3IEBA IGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKIAl9CiAKIAlmbGFncyA9IDA7Ci0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkg PD0gNSkKKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8PSA1KQogCQlmbGFncyB8PSBJOTE1 X0RJU1BBVENIX1NFQ1VSRTsKIAogCWVyciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQocnEs IHZtYS0+bm9kZS5zdGFydCwgUEFHRV9TSVpFLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2xsYy5jCmluZGV4IDk0MDA2ZjExN2JiZC4uNDU5Yjc3NWYxNjNhIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYwpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMg aW50IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJCWlmIChm b3VuZCAhPSBpYV9mcmVxKSB7CiAJCQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRd KTolZE1IeiBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIENQVSBmcmVxLCBmb3VuZCAlZCwgZXhwZWN0 ZWQgJWRcbiIsCiAJCQkgICAgICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0 cy5tYXhfZ3B1X2ZyZXEsCi0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAq IChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCisJCQkgICAg ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChHUkFQSElDU19WRVIoaTkxNSkgPj0g OSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCiAJCQkgICAgICAgZm91bmQsIGlhX2ZyZXEpOwog CQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgaW50 IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJCWlmIChmb3Vu ZCAhPSByaW5nX2ZyZXEpIHsKIAkJCXByX2VycigiTWluIGZyZXEgdGFibGUoJWQvWyVkLCAlZF0p OiVkTUh6IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgcmluZyBmcmVxLCBmb3VuZCAlZCwgZXhwZWN0 ZWQgJWRcbiIsCiAJCQkgICAgICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0 cy5tYXhfZ3B1X2ZyZXEsCi0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAq IChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCisJCQkgICAg ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChHUkFQSElDU19WRVIoaTkxNSkgPj0g OSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCiAJCQkgICAgICAgZm91bmQsIHJpbmdfZnJlcSk7 CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2xyYy5jCmluZGV4IGQ4ZjY2MjM1MjRlOC4uMzExOTAxNmQ5OTEwIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwpAQCAtNTg0LDcgKzU4NCw3IEBAIHN0YXRpYyBpbnQg X19saXZlX2xyY19ncHIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCWludCBlcnI7 CiAJaW50IG47CiAKLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA5ICYmIGVuZ2luZS0+ Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQorCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8 IDkgJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCiAJCXJldHVybiAwOyAvKiBHUFIg b25seSBvbiByY3MwIGZvciBnZW44ICovCiAKIAllcnIgPSBncHJfbWFrZV9kaXJ0eShlbmdpbmUt Pmtlcm5lbF9jb250ZXh0KTsKQEAgLTEzODksMTAgKzEzODksMTAgQEAgc3RhdGljIGludCBfX2xy Y19pc29sYXRpb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgcG9pc29uKQog CiBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCiB7Ci0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gQ09QWV9FTkdJTkVfQ0xBU1MgJiYg SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0gOSkKKwlpZiAoZW5naW5lLT5jbGFzcyA9PSBDT1BZ X0VOR0lORV9DTEFTUyAmJiBHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSA5KQogCQlyZXR1 cm4gdHJ1ZTsKIAotCWlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUyAmJiBJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA9PSAxMSkKKwlpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xB U1MgJiYgR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPT0gMTEpCiAJCXJldHVybiB0cnVlOwog CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTU1MSw3ICsxNTUxLDcgQEAgc3RhdGljIGludCBfX2xpdmVf bHJjX2luZGlyZWN0X2N0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJLyog V2UgdXNlIHRoZSBhbHJlYWR5IHJlc2VydmVkIGV4dHJhIHBhZ2UgaW4gY29udGV4dCBzdGF0ZSAq LwogCWlmICghYS0+d2FfYmJfcGFnZSkgewogCQlHRU1fQlVHX09OKGItPndhX2JiX3BhZ2UpOwot CQlHRU1fQlVHX09OKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID09IDEyKTsKKwkJR0VNX0JVR19P TihHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMik7CiAJCWdvdG8gdW5waW5fYjsKIAl9 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21vY3MuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21vY3MuYwppbmRleCBlNTVhODg3ZDEx ZTIuLmI5YmIwZTZlOTdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfbW9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X21vY3Mu YwpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyBib29sIG1jcl9yYW5nZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIG9mZnNldCkKIAkgKiB3aGljaCBvbmx5IGNvbnRyb2xzIENQ VSBpbml0aWF0ZWQgTU1JTy4gUm91dGluZyBkb2VzIG5vdAogCSAqIHdvcmsgZm9yIENTIGFjY2Vz cyBzbyB3ZSBjYW5ub3QgdmVyaWZ5IHRoZW0gb24gdGhpcyBwYXRoLgogCSAqLwotCXJldHVybiBJ TlRFTF9HRU4oaTkxNSkgPj0gOCAmJiBvZmZzZXQgPj0gMHhiMDAwICYmIG9mZnNldCA8PSAweGI0 ZmY7CisJcmV0dXJuIEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4ICYmIG9mZnNldCA+PSAweGIwMDAg JiYgb2Zmc2V0IDw9IDB4YjRmZjsKIH0KIAogc3RhdGljIGludCBjaGVja19sM2NjX3RhYmxlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRl c3RfcmM2LmMKaW5kZXggNzEwZjgyNWY2ZTVhLi44YzcwYjdlMTIwNzQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGNvbnN0 IHUzMiAqX19saXZlX3JjNl9jdHgoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQogCX0KIAogCWNt ZCA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1VTRV9HR1RUOwotCWlmIChJTlRFTF9HRU4o cnEtPmVuZ2luZS0+aTkxNSkgPj0gOCkKKwlpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5 MTUpID49IDgpCiAJCWNtZCsrOwogCiAJKmNzKysgPSBjbWQ7CkBAIC0xOTMsNyArMTkzLDcgQEAg aW50IGxpdmVfcmM2X2N0eF93YSh2b2lkICphcmcpCiAJaW50IGVyciA9IDA7CiAKIAkvKiBBIHJl YWQgb2YgQ1RYX0lORk8gdXBzZXRzIHJjNi4gUG9rZSB0aGUgYmVhciEgKi8KLQlpZiAoSU5URUxf R0VOKGd0LT5pOTE1KSA8IDgpCisJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA4KQogCQly ZXR1cm4gMDsKIAogCWVuZ2luZXMgPSByYW5kb21pc2VkX2VuZ2luZXMoZ3QsICZwcm5nLCAmY291 bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmluZ19z dWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yaW5nX3N1Ym1p c3Npb24uYwppbmRleCBjMTJlNzQxNzFiNjMuLjA0MTk1NDQwOGQwZiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmluZ19zdWJtaXNzaW9uLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmluZ19zdWJtaXNzaW9uLmMKQEAgLTQxLDEw ICs0MSwxMCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVfd2FsbHkoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCQlyZXR1cm4gRVJSX0NBU1QoY3MpOwogCX0KIAotCWlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA2KSB7CisJaWYgKEdSQVBISUNTX1ZFUihlbmdp bmUtPmk5MTUpID49IDYpIHsKIAkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKIAkJ KmNzKysgPSAwOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gNCkgewor CX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gNCkgewogCQkqY3MrKyA9 IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40IHwgTUlfVVNFX0dHVFQ7CiAJCSpjcysrID0gMDsKIAl9 IGVsc2UgewpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9jdHhfc3dpdGNoX3dh KHZvaWQgKmFyZykKIAkJaWYgKCFpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3JkKGVuZ2luZSkp CiAJCQljb250aW51ZTsKIAotCQlpZiAoSVNfR0VOX1JBTkdFKGd0LT5pOTE1LCA0LCA1KSkKKwkJ aWYgKElTX0dSQVBISUNTX1ZFUihndC0+aTkxNSwgNCwgNSkpCiAJCQljb250aW51ZTsgLyogTUlf U1RPUkVfRFdPUkQgaXMgcHJpdmlsZWdlZCEgKi8KIAogCQlzYXZlZF93YSA9IGZldGNoX2FuZF96 ZXJvKCZlbmdpbmUtPndhX2N0eC52bWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfcnBzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9y cHMuYwppbmRleCAzY2ExYmQ1NzkzYzMuLjdlZTI1MTNlMTVmOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcnBzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfcnBzLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgdm9pZCBzaG93 X3BzdGF0ZV9saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzKQogCQkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoQlhUX1JQX1NUQVRFX0NBUCksCiAJCQlpbnRlbF91bmNvcmVfcmVhZChycHNfdG9fdW5j b3JlKHJwcyksCiAJCQkJCSAgQlhUX1JQX1NUQVRFX0NBUCkpOwotCX0gZWxzZSBpZiAoSVNfR0VO KGk5MTUsIDkpKSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkgewogCQlw cl9pbmZvKCJQX1NUQVRFX0xJTUlUU1sleF06IDB4JTA4eFxuIiwKIAkJCWk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjlfUlBfU1RBVEVfTElNSVRTKSwKIAkJCWludGVsX3VuY29yZV9yZWFkKHJwc190 b191bmNvcmUocnBzKSwKQEAgLTIyMiw3ICsyMjIsNyBAQCBpbnQgbGl2ZV9ycHNfY2xvY2tfaW50 ZXJ2YWwodm9pZCAqYXJnKQogCXN0cnVjdCBpZ3Rfc3Bpbm5lciBzcGluOwogCWludCBlcnIgPSAw OwogCi0JaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMpIHx8IElOVEVMX0dFTihndC0+aTkx NSkgPCA2KQorCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSB8fCBHUkFQSElDU19WRVIo Z3QtPmk5MTUpIDwgNikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWd0X3NwaW5uZXJfaW5pdCgmc3Bp biwgZ3QpKQpAQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcGN1X2NvbmZpZyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCiAKIAltaW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwog CW1heF9ncHVfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5 KSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KSB7CiAJCS8qIENvbnZlcnQgR1QgZnJl cXVlbmN5IHRvIDUwIEhaIHVuaXRzICovCiAJCW1pbl9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NB TEVSOwogCQltYXhfZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKQEAgLTYxNCw3ICs2MTQs NyBAQCBpbnQgbGl2ZV9ycHNfZnJlcXVlbmN5X2NzKHZvaWQgKmFyZykKIAlpZiAoIWludGVsX3Jw c19pc19lbmFibGVkKHJwcykpCiAJCXJldHVybiAwOwogCi0JaWYgKElOVEVMX0dFTihndC0+aTkx NSkgPCA4KSAvKiBmb3IgQ1Mgc2ltcGxpY2l0eSAqLworCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpIDwgOCkgLyogZm9yIENTIHNpbXBsaWNpdHkgKi8KIAkJcmV0dXJuIDA7CiAKIAlpZiAoQ1BV X0xBVEVOQ1kgPj0gMCkKQEAgLTc1NSw3ICs3NTUsNyBAQCBpbnQgbGl2ZV9ycHNfZnJlcXVlbmN5 X3NybSh2b2lkICphcmcpCiAJaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMpKQogCQlyZXR1 cm4gMDsKIAotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkgLyogZm9yIENTIHNpbXBsaWNp dHkgKi8KKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDgpIC8qIGZvciBDUyBzaW1wbGlj aXR5ICovCiAJCXJldHVybiAwOwogCiAJaWYgKENQVV9MQVRFTkNZID49IDApCkBAIC0xMDMxLDcg KzEwMzEsNyBAQCBpbnQgbGl2ZV9ycHNfaW50ZXJydXB0KHZvaWQgKmFyZykKIAkgKiBGaXJzdCwg bGV0J3MgY2hlY2sgd2hldGhlciBvciBub3Qgd2UgYXJlIHJlY2VpdmluZyBpbnRlcnJ1cHRzLgog CSAqLwogCi0JaWYgKCFpbnRlbF9ycHNfaGFzX2ludGVycnVwdHMocnBzKSB8fCBJTlRFTF9HRU4o Z3QtPmk5MTUpIDwgNikKKwlpZiAoIWludGVsX3Jwc19oYXNfaW50ZXJydXB0cyhycHMpIHx8IEdS QVBISUNTX1ZFUihndC0+aTkxNSkgPCA2KQogCQlyZXR1cm4gMDsKIAogCWludGVsX2d0X3BtX2dl dChndCk7CkBAIC0xMTM2LDcgKzExMzYsNyBAQCBpbnQgbGl2ZV9ycHNfcG93ZXIodm9pZCAqYXJn KQogCSAqIHRoYXQgdGhlb3J5LgogCSAqLwogCi0JaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChy cHMpIHx8IElOVEVMX0dFTihndC0+aTkxNSkgPCA2KQorCWlmICghaW50ZWxfcnBzX2lzX2VuYWJs ZWQocnBzKSB8fCBHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgNikKIAkJcmV0dXJuIDA7CiAKIAlp ZiAoIWxpYnJhcGxfc3VwcG9ydGVkKGd0LT5pOTE1KSkKQEAgLTEyNDAsNyArMTI0MCw3IEBAIGlu dCBsaXZlX3Jwc19keW5hbWljKHZvaWQgKmFyZykKIAkgKiBtb3ZpbmcgcGFydHMgaW50byBkeW5h bWljIHJlY2xvY2tpbmcgYmFzZWQgb24gbG9hZC4KIAkgKi8KIAotCWlmICghaW50ZWxfcnBzX2lz X2VuYWJsZWQocnBzKSB8fCBJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNikKKwlpZiAoIWludGVsX3Jw c19pc19lbmFibGVkKHJwcykgfHwgR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDYpCiAJCXJldHVy biAwOwogCiAJaWYgKGlndF9zcGlubmVyX2luaXQoJnNwaW4sIGd0KSkKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jCmluZGV4IDlhZGJkOWQxNDdiZS4uNjRkYTBj OTFkZWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF90aW1l bGluZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMK QEAgLTQ1NywxMiArNDU3LDEyIEBAIHN0YXRpYyBpbnQgZW1pdF9nZ3R0X3N0b3JlX2R3KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgYWRkciwgdTMyIHZhbHVlKQogCWlmIChJU19FUlIoY3Mp KQogCQlyZXR1cm4gUFRSX0VSUihjcyk7CiAKLQlpZiAoSU5URUxfR0VOKHJxLT5lbmdpbmUtPmk5 MTUpID49IDgpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUpID49IDgpIHsK IAkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONCB8IE1JX1VTRV9HR1RUOwogCQkqY3Mr KyA9IGFkZHI7CiAJCSpjcysrID0gMDsKIAkJKmNzKysgPSB2YWx1ZTsKLQl9IGVsc2UgaWYgKElO VEVMX0dFTihycS0+ZW5naW5lLT5pOTE1KSA+PSA0KSB7CisJfSBlbHNlIGlmIChHUkFQSElDU19W RVIocnEtPmVuZ2luZS0+aTkxNSkgPj0gNCkgewogCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lN TV9HRU40IHwgTUlfVVNFX0dHVFQ7CiAJCSpjcysrID0gMDsKIAkJKmNzKysgPSBhZGRyOwpAQCAt OTkyLDcgKzk5Miw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9od3NwX3JlYWQodm9pZCAqYXJnKQogCSAq IGV2ZW4gYWNyb3NzIG11bHRpcGxlIHdyYXBzLgogCSAqLwogCi0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPCA4KSAvKiBDUyBjb252ZW5pZW5jZSBbU1JNL0xSTV0gKi8KKwlpZiAoR1JBUEhJQ1Nf VkVSKGd0LT5pOTE1KSA8IDgpIC8qIENTIGNvbnZlbmllbmNlIFtTUk0vTFJNXSAqLwogCQlyZXR1 cm4gMDsKIAogCXRsID0gaW50ZWxfdGltZWxpbmVfY3JlYXRlKGd0KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCmluZGV4IDY0OTM3ZWMzZjJkYy4u YzMwNzU0ZGFmNGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF93b3JrYXJvdW5kcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dv cmthcm91bmRzLmMKQEAgLTE0NSw3ICsxNDUsNyBAQCByZWFkX25vbnByaXZzKHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKIAkJZ290byBlcnJfcmVxOwogCiAJc3JtID0gTUlfU1RPUkVfUkVHSVNU RVJfTUVNIHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA+PSA4KQorCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA4KQogCQlzcm0r KzsKIAogCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCAqIFJJTkdfTUFYX05PTlBSSVZfU0xP VFMpOwpAQCAtNTQ2LDcgKzU0Niw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0 KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKIAogCQlzcm0gPSBNSV9TVE9SRV9SRUdJU1RFUl9N RU07CiAJCWxybSA9IE1JX0xPQURfUkVHSVNURVJfTUVNOwotCQlpZiAoSU5URUxfR0VOKGVuZ2lu ZS0+aTkxNSkgPj0gOCkKKwkJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDgpCiAJ CQlscm0rKywgc3JtKys7CiAKIAkJcHJfZGVidWcoIiVzOiBXcml0aW5nIGdhcmJhZ2UgdG8gJXhc biIsCkBAIC03NDksNyArNzQ5LDcgQEAgc3RhdGljIGludCBsaXZlX2RpcnR5X3doaXRlbGlzdCh2 b2lkICphcmcpCiAKIAkvKiBDYW4gdGhlIHVzZXIgd3JpdGUgdG8gdGhlIHdoaXRlbGlzdGVkIHJl Z2lzdGVycz8gKi8KIAotCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogbWluaW11bSBy ZXF1aXJlbWVudCBmb3IgTFJJLCBTUk0sIExSTSAqLworCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpIDwgNykgLyogbWluaW11bSByZXF1aXJlbWVudCBmb3IgTFJJLCBTUk0sIExSTSAqLwogCQly ZXR1cm4gMDsKIAogCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgewpAQCAtODI5LDcg KzgyOSw3IEBAIHN0YXRpYyBpbnQgcmVhZF93aGl0ZWxpc3RlZF9yZWdpc3RlcnMoc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAogCQlnb3RvIGVycl9yZXE7CiAKIAlzcm0gPSBNSV9TVE9SRV9SRUdJ U1RFUl9NRU07Ci0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDgpCisJaWYgKEdSQVBI SUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDgpCiAJCXNybSsrOwogCiAJY3MgPSBpbnRlbF9yaW5n X2JlZ2luKHJxLCA0ICogZW5naW5lLT53aGl0ZWxpc3QuY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWMuYwppbmRleCBhZGFlMDRjNDdhYWIuLjg0ZjgwNjkxMTM3MCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKQEAgLTYwLDcgKzYwLDcgQEAgdm9p ZCBpbnRlbF9ndWNfaW5pdF9zZW5kX3JlZ3Moc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCWVudW0g Zm9yY2V3YWtlX2RvbWFpbnMgZndfZG9tYWlucyA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlp ZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMSkgeworCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpID49IDExKSB7CiAJCWd1Yy0+c2VuZF9yZWdzLmJhc2UgPQogCQkJCWk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjExX1NPRlRfU0NSQVRDSCgwKSk7CiAJCWd1Yy0+c2VuZF9yZWdzLmNvdW50ID0g R0VOMTFfU09GVF9TQ1JBVENIX0NPVU5UOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgaW50ZWxf Z3VjX2luaXRfZWFybHkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCiAJbXV0ZXhfaW5pdCgmZ3Vj LT5zZW5kX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmZ3VjLT5pcnFfbG9jayk7Ci0JaWYgKElO VEVMX0dFTihpOTE1KSA+PSAxMSkgeworCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsK IAkJZ3VjLT5ub3RpZnlfcmVnID0gR0VOMTFfR1VDX0hPU1RfSU5URVJSVVBUOwogCQlndWMtPmlu dGVycnVwdHMucmVzZXQgPSBnZW4xMV9yZXNldF9ndWNfaW50ZXJydXB0czsKIAkJZ3VjLT5pbnRl cnJ1cHRzLmVuYWJsZSA9IGdlbjExX2VuYWJsZV9ndWNfaW50ZXJydXB0czsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYwppbmRleCAxNzUyNjcxNzM2OGMuLmIzMmZh ZmJhMmE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj X2Fkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYwpA QCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIF9fZ3VjX2Fkc19pbml0KHN0cnVjdCBpbnRl bF9ndWMgKmd1YykKIAlibG9iLT5zeXN0ZW1faW5mby5nZW5lcmljX2d0X3N5c2luZm9bR1VDX0dF TkVSSUNfR1RfU1lTSU5GT19WREJPWF9TRkNfU1VQUE9SVF9NQVNLXSA9CiAJCWd0LT5pbmZvLnZk Ym94X3NmY19hY2Nlc3M7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyICYmICFJU19ER0ZY KGk5MTUpKSB7CisJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMiAmJiAhSVNfREdGWChpOTE1 KSkgewogCQl1MzIgZGlzdGRicmVnID0gaW50ZWxfdW5jb3JlX3JlYWQoZ3QtPnVuY29yZSwKIAkJ CQkJCSAgR0VOMTJfRElTVF9EQlNfUE9QVUxBVEVEKTsKIAkJYmxvYi0+c3lzdGVtX2luZm8uZ2Vu ZXJpY19ndF9zeXNpbmZvW0dVQ19HRU5FUklDX0dUX1NZU0lORk9fRE9PUkJFTExfQ09VTlRfUEVS X1NRSURJXSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9n dWNfZncuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jCmluZGV4 IDIyNzBkNmIzYjI3Mi4uNzZmZTc2NmFkMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9pbnRlbF9ndWNfZncuYwpAQCAtMzAsNyArMzAsNyBAQCBzdGF0aWMgdm9pZCBndWNfcHJlcGFy ZV94ZmVyKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIAllbHNlCiAJCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIEdFTjlfR1RfUE1fQ09ORklHLCBHVF9ET09SQkVMTF9FTkFCTEUpOwog Ci0JaWYgKElTX0dFTih1bmNvcmUtPmk5MTUsIDkpKSB7CisJaWYgKEdSQVBISUNTX1ZFUih1bmNv cmUtPmk5MTUpID09IDkpIHsKIAkJLyogRE9QIENsb2NrIEdhdGluZyBFbmFibGUgZm9yIEd1QyBj bG9ja3MgKi8KIAkJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjdfTUlTQ0NQQ1RMLAogCQkJ CSAwLCBHRU44X0RPUF9DTE9DS19HQVRFX0dVQ19FTkFCTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKaW5kZXggMzM1NzE5ZjE3NDkw Li41NDFmNmRhMWVjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uYwpAQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19p bnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0IGludGVsX2d0ICpndCkKIAl1MzIgaXJxcyA9IEdUX0NP TlRFWFRfU1dJVENIX0lOVEVSUlVQVDsKIAl1MzIgZG1hc2sgPSBpcnFzIDw8IDE2IHwgaXJxczsK IAotCUdFTV9CVUdfT04oSU5URUxfR0VOKGd0LT5pOTE1KSA8IDExKTsKKwlHRU1fQlVHX09OKEdS QVBISUNTX1ZFUihndC0+aTkxNSkgPCAxMSk7CiAKIAkvKiBEb24ndCBoYW5kbGUgdGhlIGN0eCBz d2l0Y2ggaW50ZXJydXB0IGluIEd1QyBzdWJtaXNzaW9uIG1vZGUgKi8KIAlpbnRlbF91bmNvcmVf cm13KHVuY29yZSwgR0VOMTFfUkVOREVSX0NPUFlfSU5UUl9FTkFCTEUsIGRtYXNrLCAwKTsKQEAg LTQ1MSw3ICs0NTEsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0c19yZWxlYXNlKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCiAJdTMyIGlycXMgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQ7 CiAJdTMyIGRtYXNrID0gaXJxcyA8PCAxNiB8IGlycXM7CiAKLQlHRU1fQlVHX09OKElOVEVMX0dF TihndC0+aTkxNSkgPCAxMSk7CisJR0VNX0JVR19PTihHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwg MTEpOwogCiAJLyogSGFuZGxlIGN0eCBzd2l0Y2ggaW50ZXJydXB0cyBhZ2FpbiAqLwogCWludGVs X3VuY29yZV9ybXcodW5jb3JlLCBHRU4xMV9SRU5ERVJfQ09QWV9JTlRSX0VOQUJMRSwgMCwgZG1h c2spOwpAQCAtNjQ4LDcgKzY0OCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19kZWZhdWx0X3ZmdW5jcyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2Vu OF9lbWl0X2ZsdXNoX3hjczsKIAllbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iID0gZ2VuOF9l bWl0X2luaXRfYnJlYWRjcnVtYjsKIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2Vu OF9lbWl0X2ZpbmlfYnJlYWRjcnVtYl94Y3M7Ci0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUp ID49IDEyKSB7CisJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKSB7CiAJCWVu Z2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl94 Y3M7CiAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjEyX2VtaXRfZmx1c2hfeGNzOwogCX0KQEAg LTY3MCw3ICs2NzAsNyBAQCBzdGF0aWMgdm9pZCBndWNfZGVmYXVsdF92ZnVuY3Moc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiBzdGF0aWMgdm9pZCByY3Nfc3VibWlzc2lvbl9vdmVy cmlkZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7Ci0Jc3dpdGNoIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSkgeworCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkp IHsKIAljYXNlIDEyOgogCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW4xMl9lbWl0X2ZsdXNoX3Jj czsKIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjEyX2VtaXRfZmluaV9icmVh ZGNydW1iX3JjczsKQEAgLTcwMCw3ICs3MDAsNyBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25f c2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCSAqIFRoZSBzZXR1cCByZWxp ZXMgb24gc2V2ZXJhbCBhc3N1bXB0aW9ucyAoZS5nLiBpcnFzIGFsd2F5cyBlbmFibGVkKQogCSAq IHRoYXQgYXJlIG9ubHkgdmFsaWQgb24gZ2VuMTErCiAJICovCi0JR0VNX0JVR19PTihJTlRFTF9H RU4oaTkxNSkgPCAxMSk7CisJR0VNX0JVR19PTihHUkFQSElDU19WRVIoaTkxNSkgPCAxMSk7CiAK IAl0YXNrbGV0X3NldHVwKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LCBndWNfc3VibWlzc2lv bl90YXNrbGV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfaHVjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMuYwppbmRleCA1 NmQyMTQ0ZGM2YTAuLmZjNTM4N2I0MTBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfaHVjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfaHVjLmMKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBpbnRlbF9odWNfaW5pdF9lYXJseShzdHJ1 Y3QgaW50ZWxfaHVjICpodWMpCiAKIAlpbnRlbF91Y19md19pbml0X2Vhcmx5KCZodWMtPmZ3LCBJ TlRFTF9VQ19GV19UWVBFX0hVQyk7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7CisJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewogCQlodWMtPnN0YXR1cy5yZWcgPSBHRU4x MV9IVUNfS0VSTkVMX0xPQURfSU5GTzsKIAkJaHVjLT5zdGF0dXMubWFzayA9IEhVQ19MT0FEX1NV Q0NFU1NGVUw7CiAJCWh1Yy0+c3RhdHVzLnZhbHVlID0gSFVDX0xPQURfU1VDQ0VTU0ZVTDsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5jCmluZGV4IDZhYmI4ZjJkYzMzZC4uNmMyYmY0 YjZiYzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjLmMKQEAgLTIzLDcgKzIz LDcgQEAgc3RhdGljIHZvaWQgdWNfZXhwYW5kX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgaW50ZWxf dWMgKnVjKQogCQlyZXR1cm47CiAKIAkvKiBEb24ndCBlbmFibGUgR3VDL0h1QyBvbiBwcmUtR2Vu MTIgKi8KLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTIpIHsKKwlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpIDwgMTIpIHsKIAkJaTkxNS0+cGFyYW1zLmVuYWJsZV9ndWMgPSAwOwogCQlyZXR1cm47CiAJ fQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHN0YXRpYyBpbnQgX191Y19pbml0X2h3KHN0cnVjdCBpbnRl bF91YyAqdWMpCiAKIAkvKiBXYUVuYWJsZXVLZXJuZWxIZWFkZXJWYWxpZEZpeDpza2wgKi8KIAkv KiBXYUVuYWJsZUd1Q0Jvb3RIYXNoQ2hlY2tOb3RTZXQ6c2tsLGJ4dCxrYmwgKi8KLQlpZiAoSVNf R0VOKGk5MTUsIDkpKQorCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkKIAkJYXR0ZW1wdHMg PSAzOwogCWVsc2UKIAkJYXR0ZW1wdHMgPSAxOwotLSAKMi4zMS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK