From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6614501510595215360 X-Received: by 2002:a67:7a02:: with SMTP id v2mr26936868vsc.34.1540058644217; Sat, 20 Oct 2018 11:04:04 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 2002:a1f:6604:: with SMTP id a4ls4472060vkc.4.gmail; Sat, 20 Oct 2018 11:04:03 -0700 (PDT) X-Google-Smtp-Source: ACcGV61WSw8b+wDivCZPG49Upd8+Wo/Tvwg/XkttyAfLWJUlY1hJ6RzTP40RZ89vD98IKbV6fx2m X-Received: by 2002:a1f:18d8:: with SMTP id 207mr16361643vky.14.1540058643113; Sat, 20 Oct 2018 11:04:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1540058643; cv=none; d=google.com; s=arc-20160816; b=Ok4HVQLGhx9clikxNKes7f3ZbvzlkHRah8wWN3rwpDIOcVxNiljDReFp+MdDs5FoP5 +3AafysD4zCfczpnMmG1Rtv3rt78hgAg159jSYnA8dt/cTi5Dwcgn8vCin2m9o+x7NIo ZiP+NSCzRYRUHiCvmavO1fjWpJQi/Foy5XQZKeg8QQKUWOCnqsLBSrqPkMQyQq+mRLJW yWvdXY7wSC6DC3sUispKq0ztjJS3Kvf6CkIN2RGEls1/cv8QdldfaWD8tnJnDJZd5BfL UtgyWt+PEIF1Dv7ADcUxHyMya2TskVy/syfdANNyT7AT8g3LpF6NcQHJKAYW6/DuHhaN n+rA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:content-disposition:mime-version:message-id:subject:cc :to:from:date:dkim-signature; bh=WzL0hkXykdOpU/H6pXBKZ5gwa19svK6NxUR+rOSscvw=; b=tyzWH/GDBAek5u1bR6XG03l0mT+xNzf3Fg4aq47IdnxuCD9mWZiZB/slUV9SX0mwoK nsV+As+Y48932q3wN3vqsB/vvbFV9WQyCuradv55hLD1yhMnQ+gy+w/SxRJ9zWSKkM9n WaZofHezlDpedNJ+3q3FFznMlCKDI+sAzr2D7kibSccY5id63Yz38LHS6UzHLhze1+fo OrN6Ch626MiE8yj4M+EWhfQlHZPqt3VjNLyu1xFodGOm9jv+O+0QhLlPnAnfRoHbhh1e 3RgiaDY3RA9LmxT1eEVy+U+3EtfmxJM3DR/13Awj07KatL9ASzpriC2Nl6VBt+GReaze SHGw== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lramNGvI; spf=pass (google.com: domain of mamtashukla555@gmail.com designates 2607:f8b0:4864:20::643 as permitted sender) smtp.mailfrom=mamtashukla555@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com. [2607:f8b0:4864:20::643]) by gmr-mx.google.com with ESMTPS id a71si1412911vsb.1.2018.10.20.11.04.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 20 Oct 2018 11:04:03 -0700 (PDT) Received-SPF: pass (google.com: domain of mamtashukla555@gmail.com designates 2607:f8b0:4864:20::643 as permitted sender) client-ip=2607:f8b0:4864:20::643; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lramNGvI; spf=pass (google.com: domain of mamtashukla555@gmail.com designates 2607:f8b0:4864:20::643 as permitted sender) smtp.mailfrom=mamtashukla555@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: by mail-pl1-x643.google.com with SMTP id f18-v6so17260838plr.1 for ; Sat, 20 Oct 2018 11:04:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=WzL0hkXykdOpU/H6pXBKZ5gwa19svK6NxUR+rOSscvw=; b=lramNGvIEuHufJCMbeBHV9E+BOuLJDZP+ulTq22yCBwhcA1I2XDL+PFZg3fRMjKBeQ Ecu9ZjumMca4ac7v0K41rirBnGCAmUcRCt8H/e6YH2jUB3+HqYQ8dz2DAHjrBTjq6FK9 glXWwLAg/l5d1BlcYPbX7WI/P4XWDEy2Ukwx4MM5y6vkMcpI+U0wuHNGjQJUuT1xIB18 +NgOxy8vARr80LlRwK5l4PuG3OAEnanZ/iFY+k34qjHHGFb7Pr1lVih0Crk0VoAOxoVr nyGTqQpRjEY2Y5jKo0hZtO2SyOPZ2VTH0ZXnFJ7Ix4cUdrb4nLDCZRqup/JGIB41Xe/o naOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=WzL0hkXykdOpU/H6pXBKZ5gwa19svK6NxUR+rOSscvw=; b=tQqQIwLNTDWgVbF+Jjz0FmqX5D3ALmB8n3UbRCMzGmhOLg9qSYa7l4G8I1r5LRQnaB NFjhNhIq6NxhuHJpTLfCHYljcVZ55NwsxAEfI2VpHd+itrG5QhS99zp7zu7VBrn1V433 TvqjtuPe/kJxa11aI9aVz98U76D/5ZfpM9pGlkkru/zLvNre719OlUaURTaci7deOS6G 6H5zaphPhdi+WdpuJj8ZslJQBl0gincHWXcOPK6/eRELN2RflNEy0BLxaXav7irJEhiN 0HtNmd/xqCBUFTm/KK2zOPHEH/pLS2T6Wo+/L2QCyQS0+KFs9Cjd93C172rmPA+ZywpD vOTA== X-Gm-Message-State: ABuFfog4gvX0BIdKc1UIrYUOZekgkQ6L8/fWSBiArOc+3KQ9RdSZv0VS LaHK7Sn6XZscJFzJigWgss0= X-Received: by 2002:a17:902:a40c:: with SMTP id p12-v6mr38969555plq.165.1540058639944; Sat, 20 Oct 2018 11:03:59 -0700 (PDT) Return-Path: Received: from armorer ([59.97.10.197]) by smtp.gmail.com with ESMTPSA id d197-v6sm35962662pga.1.2018.10.20.11.03.57 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 20 Oct 2018 11:03:59 -0700 (PDT) Date: Sat, 20 Oct 2018 23:33:54 +0530 From: Mamta Shukla To: outreachy-kernel@googlegroups.com Cc: dri-devel@lists.freedesktop.org, daniel.vetter@ffwll.ch, robdclark@gmail.com, airlied@linux.ie, sean@poorly.run Subject: [PATCH DRM] drm: msm: disp: dpu1: Use DRM_DEV_* instead of DPU_* Message-ID: <20181020180354.GA338@armorer> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Use DRM_DEV_ERROR/DEBUG instead of DPU_ERROR/DEBUG to generate drm-formatted specific log messages in the Kernel log in case of multiple instances. Signed-off-by: Mamta Shukla --- drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | 58 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 60 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 176 ++++++++++----------- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 134 ++++++++-------- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 40 ++--- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 42 ++--- drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c | 10 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c | 4 +- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 90 +++++------ drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 10 +- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 134 ++++++++-------- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 96 +++++------ drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 32 ++-- 21 files changed, 451 insertions(+), 451 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c index 879c13f..b9aa452 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c @@ -84,12 +84,12 @@ static int _dpu_core_irq_enable(struct dpu_kms *dpu_kms, int irq_idx) if (!dpu_kms || !dpu_kms->hw_intr || !dpu_kms->irq_obj.enable_counts || !dpu_kms->irq_obj.irq_counts) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } if (irq_idx < 0 || irq_idx >= dpu_kms->hw_intr->irq_idx_tbl_size) { - DPU_ERROR("invalid IRQ index: [%d]\n", irq_idx); + DRM_DEV_ERROR("invalid IRQ index: [%d]\n", irq_idx); return -EINVAL; } @@ -102,15 +102,15 @@ static int _dpu_core_irq_enable(struct dpu_kms *dpu_kms, int irq_idx) dpu_kms->hw_intr, irq_idx); if (ret) - DPU_ERROR("Fail to enable IRQ for irq_idx:%d\n", + DRM_DEV_ERROR("Fail to enable IRQ for irq_idx:%d\n", irq_idx); - DPU_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); + DRM_DEV_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); spin_lock_irqsave(&dpu_kms->irq_obj.cb_lock, irq_flags); /* empty callback list but interrupt is enabled */ if (list_empty(&dpu_kms->irq_obj.irq_cb_tbl[irq_idx])) - DPU_ERROR("irq_idx=%d enabled with no callback\n", + DRM_DEV_ERROR("irq_idx=%d enabled with no callback\n", irq_idx); spin_unlock_irqrestore(&dpu_kms->irq_obj.cb_lock, irq_flags); } @@ -123,7 +123,7 @@ int dpu_core_irq_enable(struct dpu_kms *dpu_kms, int *irq_idxs, u32 irq_count) int i, ret = 0, counts; if (!dpu_kms || !irq_idxs || !irq_count) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } @@ -147,12 +147,12 @@ static int _dpu_core_irq_disable(struct dpu_kms *dpu_kms, int irq_idx) int ret = 0, enable_count; if (!dpu_kms || !dpu_kms->hw_intr || !dpu_kms->irq_obj.enable_counts) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } if (irq_idx < 0 || irq_idx >= dpu_kms->hw_intr->irq_idx_tbl_size) { - DPU_ERROR("invalid IRQ index: [%d]\n", irq_idx); + DRM_DEV_ERROR("invalid IRQ index: [%d]\n", irq_idx); return -EINVAL; } @@ -165,9 +165,9 @@ static int _dpu_core_irq_disable(struct dpu_kms *dpu_kms, int irq_idx) dpu_kms->hw_intr, irq_idx); if (ret) - DPU_ERROR("Fail to disable IRQ for irq_idx:%d\n", + DRM_DEV_ERROR("Fail to disable IRQ for irq_idx:%d\n", irq_idx); - DPU_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); + DRM_DEV_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); } return ret; @@ -178,7 +178,7 @@ int dpu_core_irq_disable(struct dpu_kms *dpu_kms, int *irq_idxs, u32 irq_count) int i, ret = 0, counts; if (!dpu_kms || !irq_idxs || !irq_count) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } @@ -199,7 +199,7 @@ u32 dpu_core_irq_read(struct dpu_kms *dpu_kms, int irq_idx, bool clear) return 0; if (irq_idx < 0) { - DPU_ERROR("[%pS] invalid irq_idx=%d\n", + DRM_DEV_ERROR("[%pS] invalid irq_idx=%d\n", __builtin_return_address(0), irq_idx); return 0; } @@ -214,12 +214,12 @@ int dpu_core_irq_register_callback(struct dpu_kms *dpu_kms, int irq_idx, unsigned long irq_flags; if (!dpu_kms || !dpu_kms->irq_obj.irq_cb_tbl) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } if (!register_irq_cb || !register_irq_cb->func) { - DPU_ERROR("invalid irq_cb:%d func:%d\n", + DRM_DEV_ERROR("invalid irq_cb:%d func:%d\n", register_irq_cb != NULL, register_irq_cb ? register_irq_cb->func != NULL : -1); @@ -227,11 +227,11 @@ int dpu_core_irq_register_callback(struct dpu_kms *dpu_kms, int irq_idx, } if (irq_idx < 0 || irq_idx >= dpu_kms->hw_intr->irq_idx_tbl_size) { - DPU_ERROR("invalid IRQ index: [%d]\n", irq_idx); + DRM_DEV_ERROR("invalid IRQ index: [%d]\n", irq_idx); return -EINVAL; } - DPU_DEBUG("[%pS] irq_idx=%d\n", __builtin_return_address(0), irq_idx); + DRM_DEV_DEBUG("[%pS] irq_idx=%d\n", __builtin_return_address(0), irq_idx); spin_lock_irqsave(&dpu_kms->irq_obj.cb_lock, irq_flags); trace_dpu_core_irq_register_callback(irq_idx, register_irq_cb); @@ -249,12 +249,12 @@ int dpu_core_irq_unregister_callback(struct dpu_kms *dpu_kms, int irq_idx, unsigned long irq_flags; if (!dpu_kms || !dpu_kms->irq_obj.irq_cb_tbl) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } if (!register_irq_cb || !register_irq_cb->func) { - DPU_ERROR("invalid irq_cb:%d func:%d\n", + DRM_DEV_ERROR("invalid irq_cb:%d func:%d\n", register_irq_cb != NULL, register_irq_cb ? register_irq_cb->func != NULL : -1); @@ -262,11 +262,11 @@ int dpu_core_irq_unregister_callback(struct dpu_kms *dpu_kms, int irq_idx, } if (irq_idx < 0 || irq_idx >= dpu_kms->hw_intr->irq_idx_tbl_size) { - DPU_ERROR("invalid IRQ index: [%d]\n", irq_idx); + DRM_DEV_ERROR("invalid IRQ index: [%d]\n", irq_idx); return -EINVAL; } - DPU_DEBUG("[%pS] irq_idx=%d\n", __builtin_return_address(0), irq_idx); + DRM_DEV_DEBUG("[%pS] irq_idx=%d\n", __builtin_return_address(0), irq_idx); spin_lock_irqsave(&dpu_kms->irq_obj.cb_lock, irq_flags); trace_dpu_core_irq_unregister_callback(irq_idx, register_irq_cb); @@ -274,7 +274,7 @@ int dpu_core_irq_unregister_callback(struct dpu_kms *dpu_kms, int irq_idx, /* empty callback list but interrupt is still enabled */ if (list_empty(&dpu_kms->irq_obj.irq_cb_tbl[irq_idx]) && atomic_read(&dpu_kms->irq_obj.enable_counts[irq_idx])) - DPU_ERROR("irq_idx=%d enabled with no callback\n", irq_idx); + DRM_DEV_ERROR("irq_idx=%d enabled with no callback\n", irq_idx); spin_unlock_irqrestore(&dpu_kms->irq_obj.cb_lock, irq_flags); return 0; @@ -320,7 +320,7 @@ static int dpu_debugfs_core_irq_show(struct seq_file *s, void *v) int i, irq_count, enable_count, cb_count; if (!irq_obj || !irq_obj->enable_counts || !irq_obj->irq_cb_tbl) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return 0; } @@ -377,13 +377,13 @@ void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms) int i; if (!dpu_kms) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return; } else if (!dpu_kms->dev) { - DPU_ERROR("invalid drm device\n"); + DRM_DEV_ERROR("invalid drm device\n"); return; } else if (!dpu_kms->dev->dev_private) { - DPU_ERROR("invalid device private\n"); + DRM_DEV_ERROR("invalid device private\n"); return; } priv = dpu_kms->dev->dev_private; @@ -421,13 +421,13 @@ void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms) int i; if (!dpu_kms) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return; } else if (!dpu_kms->dev) { - DPU_ERROR("invalid drm device\n"); + DRM_DEV_ERROR("invalid drm device\n"); return; } else if (!dpu_kms->dev->dev_private) { - DPU_ERROR("invalid device private\n"); + DRM_DEV_ERROR("invalid device private\n"); return; } priv = dpu_kms->dev->dev_private; @@ -436,7 +436,7 @@ void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms) for (i = 0; i < dpu_kms->irq_obj.total_irqs; i++) if (atomic_read(&dpu_kms->irq_obj.enable_counts[i]) || !list_empty(&dpu_kms->irq_obj.irq_cb_tbl[i])) - DPU_ERROR("irq_idx=%d still enabled/registered\n", i); + DRM_DEV_ERROR("irq_idx=%d still enabled/registered\n", i); dpu_clear_all_irqs(dpu_kms); dpu_disable_all_irqs(dpu_kms); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c index 41c5191..5e4aca2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c @@ -44,13 +44,13 @@ static struct dpu_kms *_dpu_crtc_get_kms(struct drm_crtc *crtc) struct msm_drm_private *priv; if (!crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid device\n"); + DRM_DEV_ERROR("invalid device\n"); return NULL; } priv = crtc->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return NULL; } @@ -73,7 +73,7 @@ static bool _dpu_core_video_mode_intf_connected(struct drm_crtc *crtc) drm_for_each_crtc(tmp_crtc, crtc->dev) { if ((dpu_crtc_get_intf_mode(tmp_crtc) == INTF_MODE_VIDEO) && _dpu_core_perf_crtc_is_power_on(tmp_crtc)) { - DPU_DEBUG("video interface connected crtc:%d\n", + DRM_DEV_DEBUG("video interface connected crtc:%d\n", tmp_crtc->base.id); intf_connected = true; goto end; @@ -93,7 +93,7 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms, int i; if (!kms || !kms->catalog || !crtc || !state || !perf) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } @@ -121,7 +121,7 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms, perf->core_clk_rate = kms->perf.fix_core_clk_rate; } - DPU_DEBUG( + DRM_DEV_DEBUG( "crtc=%d clk_rate=%llu core_ib=%llu core_ab=%llu llcc_ib=%llu llcc_ab=%llu mem_ib=%llu mem_ab=%llu\n", crtc->base.id, perf->core_clk_rate, perf->max_per_pipe_ib[DPU_POWER_HANDLE_DBUS_ID_MNOC], @@ -145,13 +145,13 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, int i; if (!crtc || !state) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return -EINVAL; } kms = _dpu_crtc_get_kms(crtc); if (!kms || !kms->catalog) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return 0; } @@ -177,7 +177,7 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, struct dpu_crtc_state *tmp_cstate = to_dpu_crtc_state(tmp_crtc->state); - DPU_DEBUG("crtc:%d bw:%llu ctrl:%d\n", + DRM_DEV_DEBUG("crtc:%d bw:%llu ctrl:%d\n", tmp_crtc->base.id, tmp_cstate->new_perf.bw_ctl[i], tmp_cstate->bw_control); @@ -193,7 +193,7 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, /* convert bandwidth to kb */ bw = DIV_ROUND_UP_ULL(bw_sum_of_intfs, 1000); - DPU_DEBUG("calculated bandwidth=%uk\n", bw); + DRM_DEV_DEBUG("calculated bandwidth=%uk\n", bw); is_video_mode = dpu_crtc_get_intf_mode(crtc) == INTF_MODE_VIDEO; threshold = (is_video_mode || @@ -201,15 +201,15 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, kms->catalog->perf.max_bw_low : kms->catalog->perf.max_bw_high; - DPU_DEBUG("final threshold bw limit = %d\n", threshold); + DRM_DEV_DEBUG("final threshold bw limit = %d\n", threshold); if (!dpu_cstate->bw_control) { - DPU_DEBUG("bypass bandwidth check\n"); + DRM_DEV_DEBUG("bypass bandwidth check\n"); } else if (!threshold) { - DPU_ERROR("no bandwidth limits specified\n"); + DRM_DEV_ERROR("no bandwidth limits specified\n"); return -E2BIG; } else if (bw > threshold) { - DPU_ERROR("exceeds bandwidth: %ukb > %ukb\n", bw, + DRM_DEV_ERROR("exceeds bandwidth: %ukb > %ukb\n", bw, threshold); return -E2BIG; } @@ -238,7 +238,7 @@ static int _dpu_core_perf_crtc_update_bus(struct dpu_kms *kms, max(perf.max_per_pipe_ib[bus_id], dpu_cstate->new_perf.max_per_pipe_ib[bus_id]); - DPU_DEBUG("crtc=%d bus_id=%d bw=%llu\n", + DRM_DEV_DEBUG("crtc=%d bus_id=%d bw=%llu\n", tmp_crtc->base.id, bus_id, dpu_cstate->new_perf.bw_ctl[bus_id]); } @@ -263,13 +263,13 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc) int i; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } kms = _dpu_crtc_get_kms(crtc); if (!kms || !kms->catalog) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return; } @@ -295,7 +295,7 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc) /* Release the bandwidth */ if (kms->perf.enable_bw_release) { trace_dpu_cmd_release_bw(crtc->base.id); - DPU_DEBUG("Release BW crtc=%d\n", crtc->base.id); + DRM_DEV_DEBUG("Release BW crtc=%d\n", crtc->base.id); for (i = 0; i < DPU_POWER_HANDLE_DBUS_ID_MAX; i++) { dpu_crtc->cur_perf.bw_ctl[i] = 0; _dpu_core_perf_crtc_update_bus(kms, crtc, i); @@ -333,7 +333,7 @@ static u64 _dpu_core_perf_get_core_clk_rate(struct dpu_kms *kms) if (kms->perf.perf_tune.mode == DPU_PERF_MODE_FIXED) clk_rate = kms->perf.fix_core_clk_rate; - DPU_DEBUG("clk:%llu\n", clk_rate); + DRM_DEV_DEBUG("clk:%llu\n", clk_rate); return clk_rate; } @@ -352,13 +352,13 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, int ret; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return -EINVAL; } kms = _dpu_crtc_get_kms(crtc); if (!kms || !kms->catalog) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return -EINVAL; } priv = kms->dev->dev_private; @@ -366,7 +366,7 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, dpu_crtc = to_dpu_crtc(crtc); dpu_cstate = to_dpu_crtc_state(crtc->state); - DPU_DEBUG("crtc:%d stop_req:%d core_clk:%llu\n", + DRM_DEV_DEBUG("crtc:%d stop_req:%d core_clk:%llu\n", crtc->base.id, stop_req, kms->perf.core_clk_rate); old = &dpu_crtc->cur_perf; @@ -389,7 +389,7 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, old->bw_ctl[i]) || (new->max_per_pipe_ib[i] < old->max_per_pipe_ib[i])))) { - DPU_DEBUG( + DRM_DEV_DEBUG( "crtc=%d p=%d new_bw=%llu,old_bw=%llu\n", crtc->base.id, params_changed, new->bw_ctl[i], old->bw_ctl[i]); @@ -408,7 +408,7 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, update_clk = 1; } } else { - DPU_DEBUG("crtc=%d disable\n", crtc->base.id); + DRM_DEV_DEBUG("crtc=%d disable\n", crtc->base.id); memset(old, 0, sizeof(*old)); memset(new, 0, sizeof(*new)); update_bus = ~0; @@ -425,7 +425,7 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, if (update_bus & BIT(i)) { ret = _dpu_core_perf_crtc_update_bus(kms, crtc, i); if (ret) { - DPU_ERROR("crtc-%d: failed to update bw vote for bus-%d\n", + DRM_DEV_ERROR("crtc-%d: failed to update bw vote for bus-%d\n", crtc->base.id, i); return ret; } @@ -443,13 +443,13 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, ret = _dpu_core_perf_set_core_clk_rate(kms, clk_rate); if (ret) { - DPU_ERROR("failed to set %s clock rate %llu\n", + DRM_DEV_ERROR("failed to set %s clock rate %llu\n", kms->perf.core_clk->clk_name, clk_rate); return ret; } kms->perf.core_clk_rate = clk_rate; - DPU_DEBUG("update clk rate = %lld HZ\n", clk_rate); + DRM_DEV_DEBUG("update clk rate = %lld HZ\n", clk_rate); } return 0; } @@ -550,7 +550,7 @@ int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, priv = perf->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid KMS reference\n"); + DRM_DEV_ERROR("invalid KMS reference\n"); return -EINVAL; } @@ -558,7 +558,7 @@ int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, perf->debugfs_root = debugfs_create_dir("core_perf", parent); if (!perf->debugfs_root) { - DPU_ERROR("failed to create core perf debugfs\n"); + DRM_DEV_ERROR("failed to create core perf debugfs\n"); return -EINVAL; } @@ -604,7 +604,7 @@ int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, void dpu_core_perf_destroy(struct dpu_core_perf *perf) { if (!perf) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } @@ -629,7 +629,7 @@ int dpu_core_perf_init(struct dpu_core_perf *perf, perf->max_core_clk_rate = core_clk->max_rate; if (!perf->max_core_clk_rate) { - DPU_DEBUG("optional max core clk rate, use default\n"); + DRM_DEV_DEBUG("optional max core clk rate, use default\n"); perf->max_core_clk_rate = DPU_PERF_DEFAULT_MAX_CORE_CLK_RATE; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index 80cbf75..b5be9b6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -54,12 +54,12 @@ static inline struct dpu_kms *_dpu_crtc_get_kms(struct drm_crtc *crtc) struct msm_drm_private *priv; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return NULL; } priv = crtc->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return NULL; } @@ -73,19 +73,19 @@ static inline int _dpu_crtc_power_enable(struct dpu_crtc *dpu_crtc, bool enable) struct dpu_kms *dpu_kms; if (!dpu_crtc) { - DPU_ERROR("invalid dpu crtc\n"); + DRM_DEV_ERROR("invalid dpu crtc\n"); return -EINVAL; } crtc = &dpu_crtc->base; if (!crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid drm device\n"); + DRM_DEV_ERROR("invalid drm device\n"); return -EINVAL; } priv = crtc->dev->dev_private; if (!priv->kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return -EINVAL; } @@ -125,17 +125,17 @@ static void _dpu_crtc_rp_reclaim(struct dpu_crtc_respool *rp, bool force) crtc = _dpu_crtc_rp_to_crtc(rp); if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } - DPU_DEBUG("crtc%d.%u %s\n", crtc->base.id, rp->sequence_id, + DRM_DEV_DEBUG("crtc%d.%u %s\n", crtc->base.id, rp->sequence_id, force ? "destroy" : "free_unused"); list_for_each_entry_safe(res, next, &rp->res_list, list) { if (!force && !(res->flags & DPU_CRTC_RES_FLAG_FREE)) continue; - DPU_DEBUG("crtc%d.%u reclaim res:0x%x/0x%llx/%pK/%d\n", + DRM_DEV_DEBUG("crtc%d.%u reclaim res:0x%x/0x%llx/%pK/%d\n", crtc->base.id, rp->sequence_id, res->type, res->tag, res->val, atomic_read(&res->refcount)); @@ -180,7 +180,7 @@ static void _dpu_crtc_rp_destroy(struct dpu_crtc_respool *rp) */ static void *_dpu_crtc_hw_blk_get(void *val, u32 type, u64 tag) { - DPU_DEBUG("res:%d/0x%llx/%pK\n", type, tag, val); + DRM_DEV_DEBUG("res:%d/0x%llx/%pK\n", type, tag, val); return dpu_hw_blk_get(val, type, tag); } @@ -191,7 +191,7 @@ static void *_dpu_crtc_hw_blk_get(void *val, u32 type, u64 tag) */ static void _dpu_crtc_hw_blk_put(void *val) { - DPU_DEBUG("res://%pK\n", val); + DRM_DEV_DEBUG("res://%pK\n", val); dpu_hw_blk_put(val); } @@ -208,17 +208,17 @@ static void _dpu_crtc_rp_duplicate(struct dpu_crtc_respool *rp, struct drm_crtc *crtc; if (!rp || !dup_rp || !rp->rp_head) { - DPU_ERROR("invalid resource pool\n"); + DRM_DEV_ERROR("invalid resource pool\n"); return; } crtc = _dpu_crtc_rp_to_crtc(rp); if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } - DPU_DEBUG("crtc%d.%u duplicate\n", crtc->base.id, rp->sequence_id); + DRM_DEV_DEBUG("crtc%d.%u duplicate\n", crtc->base.id, rp->sequence_id); mutex_lock(rp->rp_lock); dup_rp->sequence_id = rp->sequence_id + 1; @@ -237,7 +237,7 @@ static void _dpu_crtc_rp_duplicate(struct dpu_crtc_respool *rp, dup_res->val = res->val; dup_res->ops = res->ops; dup_res->flags = DPU_CRTC_RES_FLAG_FREE; - DPU_DEBUG("crtc%d.%u dup res:0x%x/0x%llx/%pK/%d\n", + DRM_DEV_DEBUG("crtc%d.%u dup res:0x%x/0x%llx/%pK/%d\n", crtc->base.id, dup_rp->sequence_id, dup_res->type, dup_res->tag, dup_res->val, atomic_read(&dup_res->refcount)); @@ -264,7 +264,7 @@ static void _dpu_crtc_rp_reset(struct dpu_crtc_respool *rp, struct mutex *rp_lock, struct list_head *rp_head) { if (!rp || !rp_lock || !rp_head) { - DPU_ERROR("invalid resource pool\n"); + DRM_DEV_ERROR("invalid resource pool\n"); return; } @@ -284,7 +284,7 @@ static void dpu_crtc_destroy(struct drm_crtc *crtc) { struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc); - DPU_DEBUG("\n"); + DRM_DEV_DEBUG("\n"); if (!crtc) return; @@ -352,7 +352,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, bool bg_alpha_enable = false; if (!dpu_crtc || !mixer) { - DPU_ERROR("invalid dpu_crtc or mixer\n"); + DRM_DEV_ERROR("invalid dpu_crtc or mixer\n"); return; } @@ -371,7 +371,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, dpu_plane_get_ctl_flush(plane, ctl, &flush_mask); - DPU_DEBUG("crtc %d stage:%d - plane %d sspp %d fb %d\n", + DRM_DEV_DEBUG("crtc %d stage:%d - plane %d sspp %d fb %d\n", crtc->base.id, pstate->stage, plane->base.id, @@ -380,7 +380,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, format = to_dpu_format(msm_framebuffer_format(pstate->base.fb)); if (!format) { - DPU_ERROR("invalid format\n"); + DRM_DEV_ERROR("invalid format\n"); return; } @@ -437,16 +437,16 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) dpu_crtc_state = to_dpu_crtc_state(crtc->state); mixer = dpu_crtc->mixers; - DPU_DEBUG("%s\n", dpu_crtc->name); + DRM_DEV_DEBUG("%s\n", dpu_crtc->name); if (dpu_crtc->num_mixers > CRTC_DUAL_MIXERS) { - DPU_ERROR("invalid number mixers: %d\n", dpu_crtc->num_mixers); + DRM_DEV_ERROR("invalid number mixers: %d\n", dpu_crtc->num_mixers); return; } for (i = 0; i < dpu_crtc->num_mixers; i++) { if (!mixer[i].hw_lm || !mixer[i].hw_ctl) { - DPU_ERROR("invalid lm or ctl assigned to mixer\n"); + DRM_DEV_ERROR("invalid lm or ctl assigned to mixer\n"); return; } mixer[i].mixer_op_mode = 0; @@ -473,7 +473,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) /* stage config flush mask */ ctl->ops.update_pending_flush(ctl, mixer[i].flush_mask); - DPU_DEBUG("lm %d, op_mode 0x%X, ctl %d, flush mask 0x%x\n", + DRM_DEV_DEBUG("lm %d, op_mode 0x%X, ctl %d, flush mask 0x%x\n", mixer[i].hw_lm->idx - LM_0, mixer[i].mixer_op_mode, ctl->idx - CTL_0, @@ -515,7 +515,7 @@ enum dpu_intf_mode dpu_crtc_get_intf_mode(struct drm_crtc *crtc) struct drm_encoder *encoder; if (!crtc || !crtc->dev) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return INTF_MODE_NONE; } @@ -552,13 +552,13 @@ static void dpu_crtc_frame_event_work(struct kthread_work *work) bool frame_done = false; if (!work) { - DPU_ERROR("invalid work handle\n"); + DRM_DEV_ERROR("invalid work handle\n"); return; } fevent = container_of(work, struct dpu_crtc_frame_event, work); if (!fevent->crtc || !fevent->crtc->state) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } @@ -567,7 +567,7 @@ static void dpu_crtc_frame_event_work(struct kthread_work *work) dpu_kms = _dpu_crtc_get_kms(crtc); if (!dpu_kms) { - DPU_ERROR("invalid kms handle\n"); + DRM_DEV_ERROR("invalid kms handle\n"); return; } priv = dpu_kms->dev->dev_private; @@ -606,7 +606,7 @@ static void dpu_crtc_frame_event_work(struct kthread_work *work) } if (fevent->event & DPU_ENCODER_FRAME_EVENT_PANEL_DEAD) - DPU_ERROR("crtc%d ts:%lld received panel dead event\n", + DRM_DEV_ERROR("crtc%d ts:%lld received panel dead event\n", crtc->base.id, ktime_to_ns(fevent->ts)); if (frame_done) @@ -637,7 +637,7 @@ static void dpu_crtc_frame_event_cb(void *data, u32 event) u32 crtc_id; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } @@ -673,7 +673,7 @@ void dpu_crtc_complete_commit(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { if (!crtc || !crtc->state) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } trace_dpu_crtc_complete_commit(DRMID(crtc)); @@ -704,7 +704,7 @@ static void _dpu_crtc_setup_mixer_for_encoder( /* CTL may be <= LMs, if <, multiple LMs controlled by 1 CTL */ if (!dpu_rm_get_hw(rm, &ctl_iter)) { - DPU_DEBUG("no ctl assigned to lm %d, using previous\n", + DRM_DEV_DEBUG("no ctl assigned to lm %d, using previous\n", mixer->hw_lm->idx - LM_0); mixer->hw_ctl = last_valid_ctl; } else { @@ -714,7 +714,7 @@ static void _dpu_crtc_setup_mixer_for_encoder( /* Shouldn't happen, mixers are always >= ctls */ if (!mixer->hw_ctl) { - DPU_ERROR("no valid ctls found for lm %d\n", + DRM_DEV_ERROR("no valid ctls found for lm %d\n", mixer->hw_lm->idx - LM_0); return; } @@ -722,9 +722,9 @@ static void _dpu_crtc_setup_mixer_for_encoder( mixer->encoder = enc; dpu_crtc->num_mixers++; - DPU_DEBUG("setup mixer %d: lm %d\n", + DRM_DEV_DEBUG("setup mixer %d: lm %d\n", i, mixer->hw_lm->idx - LM_0); - DPU_DEBUG("setup mixer %d: ctl %d\n", + DRM_DEV_DEBUG("setup mixer %d: ctl %d\n", i, mixer->hw_ctl->idx - CTL_0); } } @@ -760,7 +760,7 @@ static void _dpu_crtc_setup_lm_bounds(struct drm_crtc *crtc, int i; if (!crtc || !state) { - DPU_ERROR("invalid args\n"); + DRM_DEV_ERROR("invalid args\n"); return; } @@ -793,17 +793,17 @@ static void dpu_crtc_atomic_begin(struct drm_crtc *crtc, struct dpu_crtc_smmu_state_data *smmu_state; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } if (!crtc->state->enable) { - DPU_DEBUG("crtc%d -> enable %d, skip atomic_begin\n", + DRM_DEV_DEBUG("crtc%d -> enable %d, skip atomic_begin\n", crtc->base.id, crtc->state->enable); return; } - DPU_DEBUG("crtc%d\n", crtc->base.id); + DRM_DEV_DEBUG("crtc%d\n", crtc->base.id); dpu_crtc = to_dpu_crtc(crtc); dev = crtc->dev; @@ -862,17 +862,17 @@ static void dpu_crtc_atomic_flush(struct drm_crtc *crtc, struct dpu_crtc_state *cstate; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } if (!crtc->state->enable) { - DPU_DEBUG("crtc%d -> enable %d, skip atomic_flush\n", + DRM_DEV_DEBUG("crtc%d -> enable %d, skip atomic_flush\n", crtc->base.id, crtc->state->enable); return; } - DPU_DEBUG("crtc%d\n", crtc->base.id); + DRM_DEV_DEBUG("crtc%d\n", crtc->base.id); dpu_crtc = to_dpu_crtc(crtc); cstate = to_dpu_crtc_state(crtc->state); @@ -880,14 +880,14 @@ static void dpu_crtc_atomic_flush(struct drm_crtc *crtc, priv = dev->dev_private; if (crtc->index >= ARRAY_SIZE(priv->event_thread)) { - DPU_ERROR("invalid crtc index[%d]\n", crtc->index); + DRM_DEV_ERROR("invalid crtc index[%d]\n", crtc->index); return; } event_thread = &priv->event_thread[crtc->index]; if (dpu_crtc->event) { - DPU_DEBUG("already received dpu_crtc->event\n"); + DRM_DEV_DEBUG("already received dpu_crtc->event\n"); } else { spin_lock_irqsave(&dev->event_lock, flags); dpu_crtc->event = crtc->state->event; @@ -942,14 +942,14 @@ static void dpu_crtc_destroy_state(struct drm_crtc *crtc, struct dpu_crtc_state *cstate; if (!crtc || !state) { - DPU_ERROR("invalid argument(s)\n"); + DRM_DEV_ERROR("invalid argument(s)\n"); return; } dpu_crtc = to_dpu_crtc(crtc); cstate = to_dpu_crtc_state(state); - DPU_DEBUG("crtc%d\n", crtc->base.id); + DRM_DEV_DEBUG("crtc%d\n", crtc->base.id); _dpu_crtc_rp_destroy(&cstate->rp); @@ -964,13 +964,13 @@ static int _dpu_crtc_wait_for_frame_done(struct drm_crtc *crtc) int ret, rc = 0; if (!crtc) { - DPU_ERROR("invalid argument\n"); + DRM_DEV_ERROR("invalid argument\n"); return -EINVAL; } dpu_crtc = to_dpu_crtc(crtc); if (!atomic_read(&dpu_crtc->frame_pending)) { - DPU_DEBUG("no frames pending\n"); + DRM_DEV_DEBUG("no frames pending\n"); return 0; } @@ -997,7 +997,7 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc) int ret; if (!crtc) { - DPU_ERROR("invalid argument\n"); + DRM_DEV_ERROR("invalid argument\n"); return; } dev = crtc->dev; @@ -1005,7 +1005,7 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc) dpu_kms = _dpu_crtc_get_kms(crtc); if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev_private) { - DPU_ERROR("invalid argument\n"); + DRM_DEV_ERROR("invalid argument\n"); return; } @@ -1040,7 +1040,7 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc) ret = _dpu_crtc_wait_for_frame_done(crtc); DPU_ATRACE_END("wait_for_frame_done_event"); if (ret) { - DPU_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", + DRM_DEV_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&dpu_crtc->frame_pending)); goto end; @@ -1048,9 +1048,9 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc) if (atomic_inc_return(&dpu_crtc->frame_pending) == 1) { /* acquire bandwidth and other resources */ - DPU_DEBUG("crtc%d first commit\n", crtc->base.id); + DRM_DEV_DEBUG("crtc%d first commit\n", crtc->base.id); } else - DPU_DEBUG("crtc%d commit\n", crtc->base.id); + DRM_DEV_DEBUG("crtc%d commit\n", crtc->base.id); dpu_crtc->play_count++; @@ -1083,7 +1083,7 @@ static int _dpu_crtc_vblank_enable_no_lock( struct drm_encoder *enc; if (!dpu_crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return -EINVAL; } @@ -1145,14 +1145,14 @@ static void _dpu_crtc_set_suspend(struct drm_crtc *crtc, bool enable) int ret = 0; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } dpu_crtc = to_dpu_crtc(crtc); priv = crtc->dev->dev_private; if (!priv->kms) { - DPU_ERROR("invalid crtc kms\n"); + DRM_DEV_ERROR("invalid crtc kms\n"); return; } dpu_kms = to_dpu_kms(priv->kms); @@ -1167,12 +1167,12 @@ static void _dpu_crtc_set_suspend(struct drm_crtc *crtc, bool enable) */ trace_dpu_crtc_set_suspend(DRMID(&dpu_crtc->base), enable, dpu_crtc); if (dpu_crtc->suspend == enable) - DPU_DEBUG("crtc%d suspend already set to %d, ignoring update\n", + DRM_DEV_DEBUG("crtc%d suspend already set to %d, ignoring update\n", crtc->base.id, enable); else if (dpu_crtc->enabled && dpu_crtc->vblank_requested) { ret = _dpu_crtc_vblank_enable_no_lock(dpu_crtc, !enable); if (ret) - DPU_ERROR("%s vblank enable failed: %d\n", + DRM_DEV_ERROR("%s vblank enable failed: %d\n", dpu_crtc->name, ret); } @@ -1191,7 +1191,7 @@ static struct drm_crtc_state *dpu_crtc_duplicate_state(struct drm_crtc *crtc) struct dpu_crtc_state *cstate, *old_cstate; if (!crtc || !crtc->state) { - DPU_ERROR("invalid argument(s)\n"); + DRM_DEV_ERROR("invalid argument(s)\n"); return NULL; } @@ -1199,7 +1199,7 @@ static struct drm_crtc_state *dpu_crtc_duplicate_state(struct drm_crtc *crtc) old_cstate = to_dpu_crtc_state(crtc->state); cstate = kmemdup(old_cstate, sizeof(*old_cstate), GFP_KERNEL); if (!cstate) { - DPU_ERROR("failed to allocate state\n"); + DRM_DEV_ERROR("failed to allocate state\n"); return NULL; } @@ -1223,7 +1223,7 @@ static void dpu_crtc_reset(struct drm_crtc *crtc) struct dpu_crtc_state *cstate; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } @@ -1240,7 +1240,7 @@ static void dpu_crtc_reset(struct drm_crtc *crtc) dpu_crtc = to_dpu_crtc(crtc); cstate = kzalloc(sizeof(*cstate), GFP_KERNEL); if (!cstate) { - DPU_ERROR("failed to allocate state\n"); + DRM_DEV_ERROR("failed to allocate state\n"); return; } @@ -1260,7 +1260,7 @@ static void dpu_crtc_handle_power_event(u32 event_type, void *arg) u32 i, misr_status; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } dpu_crtc = to_dpu_crtc(crtc); @@ -1308,7 +1308,7 @@ static void dpu_crtc_handle_power_event(u32 event_type, void *arg) */ break; default: - DPU_DEBUG("event:%d not handled\n", event_type); + DRM_DEV_DEBUG("event:%d not handled\n", event_type); break; } @@ -1326,7 +1326,7 @@ static void dpu_crtc_disable(struct drm_crtc *crtc) unsigned long flags; if (!crtc || !crtc->dev || !crtc->dev->dev_private || !crtc->state) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } dpu_crtc = to_dpu_crtc(crtc); @@ -1346,7 +1346,7 @@ static void dpu_crtc_disable(struct drm_crtc *crtc) /* wait for frame_event_done completion */ if (_dpu_crtc_wait_for_frame_done(crtc)) - DPU_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", + DRM_DEV_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&dpu_crtc->frame_pending)); @@ -1355,7 +1355,7 @@ static void dpu_crtc_disable(struct drm_crtc *crtc) dpu_crtc->vblank_requested) { ret = _dpu_crtc_vblank_enable_no_lock(dpu_crtc, false); if (ret) - DPU_ERROR("%s vblank enable failed: %d\n", + DRM_DEV_ERROR("%s vblank enable failed: %d\n", dpu_crtc->name, ret); } dpu_crtc->enabled = false; @@ -1406,7 +1406,7 @@ static void dpu_crtc_enable(struct drm_crtc *crtc, int ret; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return; } priv = crtc->dev->dev_private; @@ -1427,7 +1427,7 @@ static void dpu_crtc_enable(struct drm_crtc *crtc, dpu_crtc->vblank_requested) { ret = _dpu_crtc_vblank_enable_no_lock(dpu_crtc, true); if (ret) - DPU_ERROR("%s vblank enable failed: %d\n", + DRM_DEV_ERROR("%s vblank enable failed: %d\n", dpu_crtc->name, ret); } dpu_crtc->enabled = true; @@ -1472,7 +1472,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, struct drm_rect crtc_rect = { 0 }; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return -EINVAL; } @@ -1482,13 +1482,13 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, cstate = to_dpu_crtc_state(state); if (!state->enable || !state->active) { - DPU_DEBUG("crtc%d -> enable %d, active %d, skip atomic_check\n", + DRM_DEV_DEBUG("crtc%d -> enable %d, active %d, skip atomic_check\n", crtc->base.id, state->enable, state->active); goto end; } mode = &state->adjusted_mode; - DPU_DEBUG("%s: check", dpu_crtc->name); + DRM_DEV_DEBUG("%s: check", dpu_crtc->name); /* force a full mode set if active state changed */ if (state->active_changed) @@ -1509,7 +1509,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, if (IS_ERR_OR_NULL(pstate)) { rc = PTR_ERR(pstate); - DPU_ERROR("%s: failed to get plane%d state, %d\n", + DRM_DEV_ERROR("%s: failed to get plane%d state, %d\n", dpu_crtc->name, plane->base.id, rc); goto end; } @@ -1537,8 +1537,8 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, dst = drm_plane_state_dest(pstate); if (!drm_rect_intersect(&clip, &dst) || !drm_rect_equals(&clip, &dst)) { - DPU_ERROR("invalid vertical/horizontal destination\n"); - DPU_ERROR("display: " DRM_RECT_FMT " plane: " + DRM_DEV_ERROR("invalid vertical/horizontal destination\n"); + DRM_DEV_ERROR("display: " DRM_RECT_FMT " plane: " DRM_RECT_FMT "\n", DRM_RECT_ARG(&crtc_rect), DRM_RECT_ARG(&dst)); rc = -E2BIG; @@ -1551,7 +1551,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, dpu_plane_clear_multirect(pipe_staged[i]); if (is_dpu_plane_virtual(pipe_staged[i]->plane)) { - DPU_ERROR( + DRM_DEV_ERROR( "r1 only virt plane:%d not supported\n", pipe_staged[i]->plane->base.id); rc = -EINVAL; @@ -1571,13 +1571,13 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, /* verify z_pos setting before using it */ if (z_pos >= DPU_STAGE_MAX - DPU_STAGE_0) { - DPU_ERROR("> %d plane stages assigned\n", + DRM_DEV_ERROR("> %d plane stages assigned\n", DPU_STAGE_MAX - DPU_STAGE_0); rc = -EINVAL; goto end; } else if (pstates[i].drm_pstate->crtc_x < mixer_width) { if (left_zpos_cnt == 2) { - DPU_ERROR("> 2 planes @ stage %d on left\n", + DRM_DEV_ERROR("> 2 planes @ stage %d on left\n", z_pos); rc = -EINVAL; goto end; @@ -1586,7 +1586,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, } else { if (right_zpos_cnt == 2) { - DPU_ERROR("> 2 planes @ stage %d on right\n", + DRM_DEV_ERROR("> 2 planes @ stage %d on right\n", z_pos); rc = -EINVAL; goto end; @@ -1595,12 +1595,12 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, } pstates[i].dpu_pstate->stage = z_pos + DPU_STAGE_0; - DPU_DEBUG("%s: zpos %d", dpu_crtc->name, z_pos); + DRM_DEV_DEBUG("%s: zpos %d", dpu_crtc->name, z_pos); } for (i = 0; i < multirect_count; i++) { if (dpu_plane_validate_multirect_v2(&multirect_plane[i])) { - DPU_ERROR( + DRM_DEV_ERROR( "multirect validation failed for planes (%d - %d)\n", multirect_plane[i].r0->plane->base.id, multirect_plane[i].r1->plane->base.id); @@ -1611,7 +1611,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, rc = dpu_core_perf_crtc_check(crtc, state); if (rc) { - DPU_ERROR("crtc%d failed performance check %d\n", + DRM_DEV_ERROR("crtc%d failed performance check %d\n", crtc->base.id, rc); goto end; } @@ -1653,13 +1653,13 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, * - planes in source split must have same dest yoff and height */ if (right_pid < left_pid) { - DPU_ERROR( + DRM_DEV_ERROR( "invalid src split cfg. priority mismatch. stage: %d left: %d right: %d\n", stage, left_pid, right_pid); rc = -EINVAL; goto end; } else if (right_rect.x1 != drm_rect_width(&left_rect)) { - DPU_ERROR("non-contiguous coordinates for src split. " + DRM_DEV_ERROR("non-contiguous coordinates for src split. " "stage: %d left: " DRM_RECT_FMT " right: " DRM_RECT_FMT "\n", stage, DRM_RECT_ARG(&left_rect), @@ -1668,7 +1668,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, goto end; } else if (left_rect.y1 != right_rect.y1 || drm_rect_height(&left_rect) != drm_rect_height(&right_rect)) { - DPU_ERROR("source split at stage: %d. invalid " + DRM_DEV_ERROR("source split at stage: %d. invalid " "yoff/height: left: " DRM_RECT_FMT " right: " DRM_RECT_FMT "\n", stage, DRM_RECT_ARG(&left_rect), @@ -1690,7 +1690,7 @@ int dpu_crtc_vblank(struct drm_crtc *crtc, bool en) int ret; if (!crtc) { - DPU_ERROR("invalid crtc\n"); + DRM_DEV_ERROR("invalid crtc\n"); return -EINVAL; } dpu_crtc = to_dpu_crtc(crtc); @@ -1700,7 +1700,7 @@ int dpu_crtc_vblank(struct drm_crtc *crtc, bool en) if (dpu_crtc->enabled && !dpu_crtc->suspend) { ret = _dpu_crtc_vblank_enable_no_lock(dpu_crtc, en); if (ret) - DPU_ERROR("%s vblank enable failed: %d\n", + DRM_DEV_ERROR("%s vblank enable failed: %d\n", dpu_crtc->name, ret); } dpu_crtc->vblank_requested = en; @@ -1847,7 +1847,7 @@ static ssize_t _dpu_crtc_misr_setup(struct file *file, dpu_crtc = file->private_data; buff_copy = min_t(size_t, count, MISR_BUFF_SIZE); if (copy_from_user(buf, user_buf, buff_copy)) { - DPU_ERROR("buffer copy failed\n"); + DRM_DEV_ERROR("buffer copy failed\n"); return -EINVAL; } @@ -2133,6 +2133,6 @@ struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane) dpu_crtc->phandle = &kms->phandle; - DPU_DEBUG("%s: successfully initialized crtc\n", dpu_crtc->name); + DRM_DEV_DEBUG("%s: successfully initialized crtc\n", dpu_crtc->name); return crtc; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index 1b4de34..5ce5d4d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -35,19 +35,19 @@ #include "dpu_trace.h" #include "dpu_core_irq.h" -#define DPU_DEBUG_ENC(e, fmt, ...) DPU_DEBUG("enc%d " fmt,\ +#define DPU_DEBUG_ENC(e, fmt, ...) DRM_DEV_DEBUG("enc%d " fmt,\ (e) ? (e)->base.base.id : -1, ##__VA_ARGS__) -#define DPU_ERROR_ENC(e, fmt, ...) DPU_ERROR("enc%d " fmt,\ +#define DPU_ERROR_ENC(e, fmt, ...) DRM_DEV_ERROR("enc%d " fmt,\ (e) ? (e)->base.base.id : -1, ##__VA_ARGS__) -#define DPU_DEBUG_PHYS(p, fmt, ...) DPU_DEBUG("enc%d intf%d pp%d " fmt,\ +#define DPU_DEBUG_PHYS(p, fmt, ...) DRM_DEV_DEBUG("enc%d intf%d pp%d " fmt,\ (p) ? (p)->parent->base.id : -1, \ (p) ? (p)->intf_idx - INTF_0 : -1, \ (p) ? ((p)->hw_pp ? (p)->hw_pp->idx - PINGPONG_0 : -1) : -1, \ ##__VA_ARGS__) -#define DPU_ERROR_PHYS(p, fmt, ...) DPU_ERROR("enc%d intf%d pp%d " fmt,\ +#define DPU_ERROR_PHYS(p, fmt, ...) DRM_DEV_ERROR("enc%d intf%d pp%d " fmt,\ (p) ? (p)->parent->base.id : -1, \ (p) ? (p)->intf_idx - INTF_0 : -1, \ (p) ? ((p)->hw_pp ? (p)->hw_pp->idx - PINGPONG_0 : -1) : -1, \ @@ -225,19 +225,19 @@ static inline int _dpu_encoder_power_enable(struct dpu_encoder_virt *dpu_enc, struct dpu_kms *dpu_kms; if (!dpu_enc) { - DPU_ERROR("invalid dpu enc\n"); + DRM_DEV_ERROR("invalid dpu enc\n"); return -EINVAL; } drm_enc = &dpu_enc->base; if (!drm_enc->dev || !drm_enc->dev->dev_private) { - DPU_ERROR("drm device invalid\n"); + DRM_DEV_ERROR("drm device invalid\n"); return -EINVAL; } priv = drm_enc->dev->dev_private; if (!priv->kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return -EINVAL; } @@ -276,7 +276,7 @@ int dpu_encoder_helper_wait_for_irq(struct dpu_encoder_phys *phys_enc, int ret; if (!phys_enc || !wait_info || intr_idx >= INTR_IDX_MAX) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } irq = &phys_enc->irq[intr_idx]; @@ -351,7 +351,7 @@ int dpu_encoder_helper_register_irq(struct dpu_encoder_phys *phys_enc, int ret = 0; if (!phys_enc || intr_idx >= INTR_IDX_MAX) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return -EINVAL; } irq = &phys_enc->irq[intr_idx]; @@ -406,7 +406,7 @@ int dpu_encoder_helper_unregister_irq(struct dpu_encoder_phys *phys_enc, int ret; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return -EINVAL; } irq = &phys_enc->irq[intr_idx]; @@ -450,7 +450,7 @@ void dpu_encoder_get_hw_resources(struct drm_encoder *drm_enc, int i = 0; if (!hw_res || !drm_enc || !conn_state) { - DPU_ERROR("invalid argument(s), drm_enc %d, res %d, state %d\n", + DRM_DEV_ERROR("invalid argument(s), drm_enc %d, res %d, state %d\n", drm_enc != 0, hw_res != 0, conn_state != 0); return; } @@ -476,7 +476,7 @@ static void dpu_encoder_destroy(struct drm_encoder *drm_enc) int i = 0; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -517,7 +517,7 @@ void dpu_encoder_helper_split_config( struct msm_display_info *disp_info; if (!phys_enc || !phys_enc->hw_mdptop || !phys_enc->parent) { - DPU_ERROR("invalid arg(s), encoder %d\n", phys_enc != 0); + DRM_DEV_ERROR("invalid arg(s), encoder %d\n", phys_enc != 0); return; } @@ -608,7 +608,7 @@ static int dpu_encoder_virt_atomic_check( int ret = 0; if (!drm_enc || !crtc_state || !conn_state) { - DPU_ERROR("invalid arg(s), drm_enc %d, crtc/conn state %d/%d\n", + DRM_DEV_ERROR("invalid arg(s), drm_enc %d, crtc/conn state %d/%d\n", drm_enc != 0, crtc_state != 0, conn_state != 0); return -EINVAL; } @@ -685,11 +685,11 @@ static void _dpu_encoder_update_vsync_source(struct dpu_encoder_virt *dpu_enc, int i; if (!dpu_enc || !disp_info) { - DPU_ERROR("invalid param dpu_enc:%d or disp_info:%d\n", + DRM_DEV_ERROR("invalid param dpu_enc:%d or disp_info:%d\n", dpu_enc != NULL, disp_info != NULL); return; } else if (dpu_enc->num_phys_encs > ARRAY_SIZE(dpu_enc->hw_pp)) { - DPU_ERROR("invalid num phys enc %d/%d\n", + DRM_DEV_ERROR("invalid num phys enc %d/%d\n", dpu_enc->num_phys_encs, (int) ARRAY_SIZE(dpu_enc->hw_pp)); return; @@ -701,13 +701,13 @@ static void _dpu_encoder_update_vsync_source(struct dpu_encoder_virt *dpu_enc, dpu_kms = to_dpu_kms(priv->kms); if (!dpu_kms) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return; } hw_mdptop = dpu_kms->hw_mdp; if (!hw_mdptop) { - DPU_ERROR("invalid mdptop\n"); + DRM_DEV_ERROR("invalid mdptop\n"); return; } @@ -732,7 +732,7 @@ static void _dpu_encoder_irq_control(struct drm_encoder *drm_enc, bool enable) int i; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -762,7 +762,7 @@ static void _dpu_encoder_resource_control_helper(struct drm_encoder *drm_enc, trace_dpu_enc_rc_helper(DRMID(drm_enc), enable); if (!dpu_enc->cur_master) { - DPU_ERROR("encoder master not set\n"); + DRM_DEV_ERROR("encoder master not set\n"); return; } @@ -793,7 +793,7 @@ static int dpu_encoder_resource_control(struct drm_encoder *drm_enc, if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private || !drm_enc->crtc) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return -EINVAL; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -802,7 +802,7 @@ static int dpu_encoder_resource_control(struct drm_encoder *drm_enc, MSM_DISPLAY_CAP_VID_MODE; if (drm_enc->crtc->index >= ARRAY_SIZE(priv->disp_thread)) { - DPU_ERROR("invalid crtc index\n"); + DRM_DEV_ERROR("invalid crtc index\n"); return -EINVAL; } disp_thread = &priv->disp_thread[drm_enc->crtc->index]; @@ -1022,7 +1022,7 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, int i = 0, ret; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -1094,20 +1094,20 @@ static void _dpu_encoder_virt_enable_helper(struct drm_encoder *drm_enc) struct dpu_kms *dpu_kms; if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } priv = drm_enc->dev->dev_private; dpu_kms = to_dpu_kms(priv->kms); if (!dpu_kms) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); if (!dpu_enc || !dpu_enc->cur_master) { - DPU_ERROR("invalid dpu encoder/master\n"); + DRM_DEV_ERROR("invalid dpu encoder/master\n"); return; } @@ -1132,7 +1132,7 @@ void dpu_encoder_virt_restore(struct drm_encoder *drm_enc) int i; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -1157,7 +1157,7 @@ static void dpu_encoder_virt_enable(struct drm_encoder *drm_enc) struct drm_display_mode *cur_mode = NULL; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -1178,7 +1178,7 @@ static void dpu_encoder_virt_enable(struct drm_encoder *drm_enc) } if (!dpu_enc->cur_master) { - DPU_ERROR("virt encoder has no master! num_phys %d\n", i); + DRM_DEV_ERROR("virt encoder has no master! num_phys %d\n", i); return; } @@ -1221,13 +1221,13 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) int i = 0; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } else if (!drm_enc->dev) { - DPU_ERROR("invalid dev\n"); + DRM_DEV_ERROR("invalid dev\n"); return; } else if (!drm_enc->dev->dev_private) { - DPU_ERROR("invalid dev_private\n"); + DRM_DEV_ERROR("invalid dev_private\n"); return; } @@ -1255,7 +1255,7 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) /* after phys waits for frame-done, should be no more frames pending */ if (atomic_xchg(&dpu_enc->frame_done_timeout, 0)) { - DPU_ERROR("enc%d timeout pending\n", drm_enc->base.id); + DRM_DEV_ERROR("enc%d timeout pending\n", drm_enc->base.id); del_timer_sync(&dpu_enc->frame_done_timer); } @@ -1333,7 +1333,7 @@ void dpu_encoder_register_vblank_callback(struct drm_encoder *drm_enc, enable = vbl_cb ? true : false; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } trace_dpu_enc_vblank_cb(DRMID(drm_enc), enable); @@ -1362,7 +1362,7 @@ void dpu_encoder_register_frame_event_callback(struct drm_encoder *drm_enc, enable = frame_event_cb ? true : false; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } trace_dpu_enc_frame_event_cb(DRMID(drm_enc), enable); @@ -1428,7 +1428,7 @@ static void dpu_encoder_off_work(struct kthread_work *work) struct dpu_encoder_virt, delayed_off_work.work); if (!dpu_enc) { - DPU_ERROR("invalid dpu encoder\n"); + DRM_DEV_ERROR("invalid dpu encoder\n"); return; } @@ -1453,19 +1453,19 @@ static inline void _dpu_encoder_trigger_flush(struct drm_encoder *drm_enc, u32 ret = UINT_MAX; if (!drm_enc || !phys) { - DPU_ERROR("invalid argument(s), drm_enc %d, phys_enc %d\n", + DRM_DEV_ERROR("invalid argument(s), drm_enc %d, phys_enc %d\n", drm_enc != 0, phys != 0); return; } if (!phys->hw_pp) { - DPU_ERROR("invalid pingpong hw\n"); + DRM_DEV_ERROR("invalid pingpong hw\n"); return; } ctl = phys->hw_ctl; if (!ctl || !ctl->ops.trigger_flush) { - DPU_ERROR("missing trigger cb\n"); + DRM_DEV_ERROR("missing trigger cb\n"); return; } @@ -1490,12 +1490,12 @@ static inline void _dpu_encoder_trigger_flush(struct drm_encoder *drm_enc, static inline void _dpu_encoder_trigger_start(struct dpu_encoder_phys *phys) { if (!phys) { - DPU_ERROR("invalid argument(s)\n"); + DRM_DEV_ERROR("invalid argument(s)\n"); return; } if (!phys->hw_pp) { - DPU_ERROR("invalid pingpong hw\n"); + DRM_DEV_ERROR("invalid pingpong hw\n"); return; } @@ -1508,7 +1508,7 @@ void dpu_encoder_helper_trigger_start(struct dpu_encoder_phys *phys_enc) struct dpu_hw_ctl *ctl; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -1551,7 +1551,7 @@ void dpu_encoder_helper_hw_reset(struct dpu_encoder_phys *phys_enc) int rc; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } dpu_enc = to_dpu_encoder_virt(phys_enc->parent); @@ -1588,7 +1588,7 @@ static void _dpu_encoder_kickoff_phys(struct dpu_encoder_virt *dpu_enc) unsigned long lock_flags; if (!dpu_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -1639,7 +1639,7 @@ void dpu_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc) struct msm_display_info *disp_info; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -1676,19 +1676,19 @@ static u32 _dpu_encoder_calculate_linetime(struct dpu_encoder_virt *dpu_enc, return 0; if (!dpu_enc->cur_master->ops.get_line_count) { - DPU_ERROR("get_line_count function not defined\n"); + DRM_DEV_ERROR("get_line_count function not defined\n"); return 0; } pclk_rate = mode->clock; /* pixel clock in kHz */ if (pclk_rate == 0) { - DPU_ERROR("pclk is 0, cannot calculate line time\n"); + DRM_DEV_ERROR("pclk is 0, cannot calculate line time\n"); return 0; } pclk_period = DIV_ROUND_UP_ULL(1000000000ull, pclk_rate); if (pclk_period == 0) { - DPU_ERROR("pclk period is 0\n"); + DRM_DEV_ERROR("pclk period is 0\n"); return 0; } @@ -1698,7 +1698,7 @@ static u32 _dpu_encoder_calculate_linetime(struct dpu_encoder_virt *dpu_enc, */ line_time = (pclk_period * mode->htotal) / 1000; if (line_time == 0) { - DPU_ERROR("line time calculation is 0\n"); + DRM_DEV_ERROR("line time calculation is 0\n"); return 0; } @@ -1722,7 +1722,7 @@ static int _dpu_encoder_wakeup_time(struct drm_encoder *drm_enc, dpu_enc = to_dpu_encoder_virt(drm_enc); if (!drm_enc->crtc || !drm_enc->crtc->state) { - DPU_ERROR("crtc/crtc state object is NULL\n"); + DRM_DEV_ERROR("crtc/crtc state object is NULL\n"); return -EINVAL; } mode = &drm_enc->crtc->state->adjusted_mode; @@ -1740,7 +1740,7 @@ static int _dpu_encoder_wakeup_time(struct drm_encoder *drm_enc, time_to_vsync = line_time * (vtotal - cur_line); if (time_to_vsync == 0) { - DPU_ERROR("time to vsync should not be zero, vtotal=%d\n", + DRM_DEV_ERROR("time to vsync should not be zero, vtotal=%d\n", vtotal); return -EINVAL; } @@ -1766,19 +1766,19 @@ static void dpu_encoder_vsync_event_handler(struct timer_list *t) if (!drm_enc->dev || !drm_enc->dev->dev_private || !drm_enc->crtc) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } priv = drm_enc->dev->dev_private; if (drm_enc->crtc->index >= ARRAY_SIZE(priv->event_thread)) { - DPU_ERROR("invalid crtc index\n"); + DRM_DEV_ERROR("invalid crtc index\n"); return; } event_thread = &priv->event_thread[drm_enc->crtc->index]; if (!event_thread) { - DPU_ERROR("event_thread not found for crtc:%d\n", + DRM_DEV_ERROR("event_thread not found for crtc:%d\n", drm_enc->crtc->index); return; } @@ -1793,7 +1793,7 @@ static void dpu_encoder_vsync_event_work_handler(struct kthread_work *work) ktime_t wakeup_time; if (!dpu_enc) { - DPU_ERROR("invalid dpu encoder\n"); + DRM_DEV_ERROR("invalid dpu encoder\n"); return; } @@ -1814,7 +1814,7 @@ void dpu_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc, unsigned int i; if (!drm_enc || !params) { - DPU_ERROR("invalid args\n"); + DRM_DEV_ERROR("invalid args\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -1855,7 +1855,7 @@ void dpu_encoder_kickoff(struct drm_encoder *drm_enc) unsigned int i; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } DPU_ATRACE_BEGIN("encoder_kickoff"); @@ -1897,7 +1897,7 @@ void dpu_encoder_prepare_commit(struct drm_encoder *drm_enc) int i; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -2085,7 +2085,7 @@ static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) char name[DPU_NAME_SIZE]; if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private) { - DPU_ERROR("invalid encoder or kms\n"); + DRM_DEV_ERROR("invalid encoder or kms\n"); return -EINVAL; } @@ -2215,7 +2215,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, struct dpu_enc_phys_init_params phys_params; if (!dpu_enc || !dpu_kms) { - DPU_ERROR("invalid arg(s), enc %d kms %d\n", + DRM_DEV_ERROR("invalid arg(s), enc %d kms %d\n", dpu_enc != 0, dpu_kms != 0); return -EINVAL; } @@ -2226,7 +2226,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, phys_params.parent_ops = &dpu_encoder_parent_ops; phys_params.enc_spinlock = &dpu_enc->enc_spinlock; - DPU_DEBUG("\n"); + DRM_DEV_DEBUG("\n"); if (disp_info->intf_type == DRM_MODE_CONNECTOR_DSI) { *drm_enc_mode = DRM_MODE_ENCODER_DSI; @@ -2246,7 +2246,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, dpu_enc->display_num_of_h_tiles = disp_info->num_of_h_tiles; - DPU_DEBUG("dsi_info->num_of_h_tiles %d\n", disp_info->num_of_h_tiles); + DRM_DEV_DEBUG("dsi_info->num_of_h_tiles %d\n", disp_info->num_of_h_tiles); if ((disp_info->capabilities & MSM_DISPLAY_CAP_CMD_MODE) || (disp_info->capabilities & MSM_DISPLAY_CAP_VID_MODE)) @@ -2271,7 +2271,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, phys_params.split_role = ENC_ROLE_SOLO; } - DPU_DEBUG("h_tile_instance %d = %d, split_role %d\n", + DRM_DEV_DEBUG("h_tile_instance %d = %d, split_role %d\n", i, controller_id, phys_params.split_role); phys_params.intf_idx = dpu_encoder_get_intf(dpu_kms->catalog, @@ -2314,7 +2314,7 @@ static void dpu_encoder_frame_done_timeout(struct timer_list *t) u32 event; if (!drm_enc->dev || !drm_enc->dev->dev_private) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } priv = drm_enc->dev->dev_private; @@ -2397,7 +2397,7 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc, return ret; fail: - DPU_ERROR("failed to create encoder\n"); + DRM_DEV_ERROR("failed to create encoder\n"); if (drm_enc) dpu_encoder_destroy(drm_enc); @@ -2436,7 +2436,7 @@ int dpu_encoder_wait_for_event(struct drm_encoder *drm_enc, int i, ret = 0; if (!drm_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return -EINVAL; } dpu_enc = to_dpu_encoder_virt(drm_enc); @@ -2481,7 +2481,7 @@ enum dpu_intf_mode dpu_encoder_get_intf_mode(struct drm_encoder *encoder) int i; if (!encoder) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return INTF_MODE_NONE; } dpu_enc = to_dpu_encoder_virt(encoder); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c index 3084675..31b48b8 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c @@ -19,12 +19,12 @@ #include "dpu_formats.h" #include "dpu_trace.h" -#define DPU_DEBUG_CMDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ +#define DPU_DEBUG_CMDENC(e, fmt, ...) DRM_DEV_DEBUG("enc%d intf%d " fmt, \ (e) && (e)->base.parent ? \ (e)->base.parent->base.id : -1, \ (e) ? (e)->base.intf_idx - INTF_0 : -1, ##__VA_ARGS__) -#define DPU_ERROR_CMDENC(e, fmt, ...) DPU_ERROR("enc%d intf%d " fmt, \ +#define DPU_ERROR_CMDENC(e, fmt, ...) DRM_DEV_ERROR("enc%d intf%d " fmt, \ (e) && (e)->base.parent ? \ (e)->base.parent->base.id : -1, \ (e) ? (e)->base.intf_idx - INTF_0 : -1, ##__VA_ARGS__) @@ -201,7 +201,7 @@ static void dpu_encoder_phys_cmd_mode_set( int i, instance; if (!phys_enc || !mode || !adj_mode) { - DPU_ERROR("invalid args\n"); + DRM_DEV_ERROR("invalid args\n"); return; } phys_enc->cached_mode = *adj_mode; @@ -286,7 +286,7 @@ static int _dpu_encoder_phys_cmd_wait_for_idle( int ret; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return -EINVAL; } @@ -312,7 +312,7 @@ static int dpu_encoder_phys_cmd_control_vblank_irq( int refcount; if (!phys_enc || !phys_enc->hw_pp) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return -EINVAL; } @@ -395,7 +395,7 @@ static void dpu_encoder_phys_cmd_tearcheck_config( struct dpu_kms *dpu_kms; if (!phys_enc || !phys_enc->hw_pp) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } mode = &phys_enc->cached_mode; @@ -410,7 +410,7 @@ static void dpu_encoder_phys_cmd_tearcheck_config( dpu_kms = phys_enc->dpu_kms; if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev_private) { - DPU_ERROR("invalid device\n"); + DRM_DEV_ERROR("invalid device\n"); return; } priv = dpu_kms->dev->dev_private; @@ -477,7 +477,7 @@ static void _dpu_encoder_phys_cmd_pingpong_config( if (!phys_enc || !phys_enc->hw_ctl || !phys_enc->hw_pp || !phys_enc->hw_ctl->ops.setup_intf_cfg) { - DPU_ERROR("invalid arg(s), enc %d\n", phys_enc != 0); + DRM_DEV_ERROR("invalid arg(s), enc %d\n", phys_enc != 0); return; } @@ -506,7 +506,7 @@ static void dpu_encoder_phys_cmd_enable_helper( u32 flush_mask = 0; if (!phys_enc || !phys_enc->hw_ctl || !phys_enc->hw_pp) { - DPU_ERROR("invalid arg(s), encoder %d\n", phys_enc != 0); + DRM_DEV_ERROR("invalid arg(s), encoder %d\n", phys_enc != 0); return; } @@ -531,14 +531,14 @@ static void dpu_encoder_phys_cmd_enable(struct dpu_encoder_phys *phys_enc) to_dpu_encoder_phys_cmd(phys_enc); if (!phys_enc || !phys_enc->hw_pp) { - DPU_ERROR("invalid phys encoder\n"); + DRM_DEV_ERROR("invalid phys encoder\n"); return; } DPU_DEBUG_CMDENC(cmd_enc, "pp %d\n", phys_enc->hw_pp->idx - PINGPONG_0); if (phys_enc->enable_state == DPU_ENC_ENABLED) { - DPU_ERROR("already enabled\n"); + DRM_DEV_ERROR("already enabled\n"); return; } @@ -587,7 +587,7 @@ static void dpu_encoder_phys_cmd_disable(struct dpu_encoder_phys *phys_enc) to_dpu_encoder_phys_cmd(phys_enc); if (!phys_enc || !phys_enc->hw_pp) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } DRM_DEBUG_KMS("id:%u pp:%d state:%d\n", DRMID(phys_enc->parent), @@ -610,7 +610,7 @@ static void dpu_encoder_phys_cmd_destroy(struct dpu_encoder_phys *phys_enc) to_dpu_encoder_phys_cmd(phys_enc); if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } kfree(cmd_enc); @@ -625,12 +625,12 @@ static void dpu_encoder_phys_cmd_get_hw_resources( to_dpu_encoder_phys_cmd(phys_enc); if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } if ((phys_enc->intf_idx - INTF_0) >= INTF_MAX) { - DPU_ERROR("invalid intf idx:%d\n", phys_enc->intf_idx); + DRM_DEV_ERROR("invalid intf idx:%d\n", phys_enc->intf_idx); return; } @@ -647,7 +647,7 @@ static void dpu_encoder_phys_cmd_prepare_for_kickoff( int ret; if (!phys_enc || !phys_enc->hw_pp) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } DRM_DEBUG_KMS("id:%u pp:%d pending_cnt:%d\n", DRMID(phys_enc->parent), @@ -681,7 +681,7 @@ static int _dpu_encoder_phys_cmd_wait_for_ctl_start( int ret; if (!phys_enc || !phys_enc->hw_ctl) { - DPU_ERROR("invalid argument(s)\n"); + DRM_DEV_ERROR("invalid argument(s)\n"); return -EINVAL; } @@ -827,12 +827,12 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( struct dpu_encoder_irq *irq; int i, ret = 0; - DPU_DEBUG("intf %d\n", p->intf_idx - INTF_0); + DRM_DEV_DEBUG("intf %d\n", p->intf_idx - INTF_0); cmd_enc = kzalloc(sizeof(*cmd_enc), GFP_KERNEL); if (!cmd_enc) { ret = -ENOMEM; - DPU_ERROR("failed to allocate\n"); + DRM_DEV_ERROR("failed to allocate\n"); goto fail; } phys_enc = &cmd_enc->base; @@ -840,7 +840,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( hw_mdp = dpu_rm_get_mdp(&p->dpu_kms->rm); if (IS_ERR_OR_NULL(hw_mdp)) { ret = PTR_ERR(hw_mdp); - DPU_ERROR("failed to get mdptop\n"); + DRM_DEV_ERROR("failed to get mdptop\n"); goto fail_mdp_init; } phys_enc->hw_mdptop = hw_mdp; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c index 14fc7c2..f645650 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c @@ -17,13 +17,13 @@ #include "dpu_formats.h" #include "dpu_trace.h" -#define DPU_DEBUG_VIDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ +#define DPU_DEBUG_VIDENC(e, fmt, ...) DRM_DEV_DEBUG("enc%d intf%d " fmt, \ (e) && (e)->base.parent ? \ (e)->base.parent->base.id : -1, \ (e) && (e)->hw_intf ? \ (e)->hw_intf->idx - INTF_0 : -1, ##__VA_ARGS__) -#define DPU_ERROR_VIDENC(e, fmt, ...) DPU_ERROR("enc%d intf%d " fmt, \ +#define DPU_ERROR_VIDENC(e, fmt, ...) DRM_DEV_ERROR("enc%d intf%d " fmt, \ (e) && (e)->base.parent ? \ (e)->base.parent->base.id : -1, \ (e) && (e)->hw_intf ? \ @@ -56,11 +56,11 @@ static void drm_mode_to_intf_timing_params( || (mode->vsync_start < mode->vdisplay) || (mode->hsync_end < mode->hsync_start) || (mode->vsync_end < mode->vsync_start)) { - DPU_ERROR( + DRM_DEV_ERROR( "invalid params - hstart:%d,hend:%d,htot:%d,hdisplay:%d\n", mode->hsync_start, mode->hsync_end, mode->htotal, mode->hdisplay); - DPU_ERROR("vstart:%d,vend:%d,vtot:%d,vdisplay:%d\n", + DRM_DEV_ERROR("vstart:%d,vend:%d,vtot:%d,vdisplay:%d\n", mode->vsync_start, mode->vsync_end, mode->vtotal, mode->vdisplay); return; @@ -251,14 +251,14 @@ static void dpu_encoder_phys_vid_setup_timing_engine( struct dpu_hw_intf_cfg intf_cfg = { 0 }; if (!phys_enc || !phys_enc->hw_ctl->ops.setup_intf_cfg) { - DPU_ERROR("invalid encoder %d\n", phys_enc != 0); + DRM_DEV_ERROR("invalid encoder %d\n", phys_enc != 0); return; } mode = phys_enc->cached_mode; vid_enc = to_dpu_encoder_phys_vid(phys_enc); if (!vid_enc->hw_intf->ops.setup_timing_gen) { - DPU_ERROR("timing engine setup is not supported\n"); + DRM_DEV_ERROR("timing engine setup is not supported\n"); return; } @@ -401,7 +401,7 @@ static void dpu_encoder_phys_vid_mode_set( struct dpu_encoder_phys_vid *vid_enc; if (!phys_enc || !phys_enc->dpu_kms) { - DPU_ERROR("invalid encoder/kms\n"); + DRM_DEV_ERROR("invalid encoder/kms\n"); return; } @@ -441,7 +441,7 @@ static int dpu_encoder_phys_vid_control_vblank_irq( int refcount; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return -EINVAL; } @@ -487,7 +487,7 @@ static void dpu_encoder_phys_vid_enable(struct dpu_encoder_phys *phys_enc) if (!phys_enc || !phys_enc->parent || !phys_enc->parent->dev || !phys_enc->parent->dev->dev_private) { - DPU_ERROR("invalid encoder/device\n"); + DRM_DEV_ERROR("invalid encoder/device\n"); return; } priv = phys_enc->parent->dev->dev_private; @@ -496,7 +496,7 @@ static void dpu_encoder_phys_vid_enable(struct dpu_encoder_phys *phys_enc) intf = vid_enc->hw_intf; ctl = phys_enc->hw_ctl; if (!vid_enc->hw_intf || !phys_enc->hw_ctl) { - DPU_ERROR("invalid hw_intf %d hw_ctl %d\n", + DRM_DEV_ERROR("invalid hw_intf %d hw_ctl %d\n", vid_enc->hw_intf != 0, phys_enc->hw_ctl != 0); return; } @@ -536,7 +536,7 @@ static void dpu_encoder_phys_vid_destroy(struct dpu_encoder_phys *phys_enc) struct dpu_encoder_phys_vid *vid_enc; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -553,14 +553,14 @@ static void dpu_encoder_phys_vid_get_hw_resources( struct dpu_encoder_phys_vid *vid_enc; if (!phys_enc || !hw_res) { - DPU_ERROR("invalid arg(s), enc %d hw_res %d conn_state %d\n", + DRM_DEV_ERROR("invalid arg(s), enc %d hw_res %d conn_state %d\n", phys_enc != 0, hw_res != 0, conn_state != 0); return; } vid_enc = to_dpu_encoder_phys_vid(phys_enc); if (!vid_enc->hw_intf) { - DPU_ERROR("invalid arg(s), hw_intf\n"); + DRM_DEV_ERROR("invalid arg(s), hw_intf\n"); return; } @@ -620,7 +620,7 @@ static void dpu_encoder_phys_vid_prepare_for_kickoff( int rc; if (!phys_enc || !params) { - DPU_ERROR("invalid encoder/parameters\n"); + DRM_DEV_ERROR("invalid encoder/parameters\n"); return; } vid_enc = to_dpu_encoder_phys_vid(phys_enc); @@ -651,14 +651,14 @@ static void dpu_encoder_phys_vid_disable(struct dpu_encoder_phys *phys_enc) if (!phys_enc || !phys_enc->parent || !phys_enc->parent->dev || !phys_enc->parent->dev->dev_private) { - DPU_ERROR("invalid encoder/device\n"); + DRM_DEV_ERROR("invalid encoder/device\n"); return; } priv = phys_enc->parent->dev->dev_private; vid_enc = to_dpu_encoder_phys_vid(phys_enc); if (!vid_enc->hw_intf || !phys_enc->hw_ctl) { - DPU_ERROR("invalid hw_intf %d hw_ctl %d\n", + DRM_DEV_ERROR("invalid hw_intf %d hw_ctl %d\n", vid_enc->hw_intf != 0, phys_enc->hw_ctl != 0); return; } @@ -669,7 +669,7 @@ static void dpu_encoder_phys_vid_disable(struct dpu_encoder_phys *phys_enc) return; if (phys_enc->enable_state == DPU_ENC_DISABLED) { - DPU_ERROR("already disabled\n"); + DRM_DEV_ERROR("already disabled\n"); return; } @@ -707,7 +707,7 @@ static void dpu_encoder_phys_vid_handle_post_kickoff( struct dpu_encoder_phys_vid *vid_enc; if (!phys_enc) { - DPU_ERROR("invalid encoder\n"); + DRM_DEV_ERROR("invalid encoder\n"); return; } @@ -849,7 +849,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init( hw_mdp = dpu_rm_get_mdp(&p->dpu_kms->rm); if (IS_ERR_OR_NULL(hw_mdp)) { ret = PTR_ERR(hw_mdp); - DPU_ERROR("failed to get mdptop\n"); + DRM_DEV_ERROR("failed to get mdptop\n"); goto fail; } phys_enc->hw_mdptop = hw_mdp; @@ -871,7 +871,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init( if (!vid_enc->hw_intf) { ret = -EINVAL; - DPU_ERROR("failed to get hw_intf\n"); + DRM_DEV_ERROR("failed to get hw_intf\n"); goto fail; } @@ -914,7 +914,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init( return phys_enc; fail: - DPU_ERROR("failed to create encoder\n"); + DRM_DEV_ERROR("failed to create encoder\n"); if (vid_enc) dpu_encoder_phys_vid_destroy(phys_enc); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c index bfcd165..48e2042 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c @@ -1090,7 +1090,7 @@ const struct dpu_format *dpu_get_dpu_format_ext( * Currently only support exactly zero or one modifier. * All planes use the same modifier. */ - DPU_DEBUG("plane format modifier 0x%llX\n", modifier); + DRM_DEV_DEBUG("plane format modifier 0x%llX\n", modifier); switch (modifier) { case 0: @@ -1100,11 +1100,11 @@ const struct dpu_format *dpu_get_dpu_format_ext( case DRM_FORMAT_MOD_QCOM_COMPRESSED: map = dpu_format_map_ubwc; map_size = ARRAY_SIZE(dpu_format_map_ubwc); - DPU_DEBUG("found fmt: %4.4s DRM_FORMAT_MOD_QCOM_COMPRESSED\n", + DRM_DEV_DEBUG("found fmt: %4.4s DRM_FORMAT_MOD_QCOM_COMPRESSED\n", (char *)&format); break; default: - DPU_ERROR("unsupported format modifier %llX\n", modifier); + DRM_DEV_ERROR("unsupported format modifier %llX\n", modifier); return NULL; } @@ -1116,10 +1116,10 @@ const struct dpu_format *dpu_get_dpu_format_ext( } if (fmt == NULL) - DPU_ERROR("unsupported fmt: %4.4s modifier 0x%llX\n", + DRM_DEV_ERROR("unsupported fmt: %4.4s modifier 0x%llX\n", (char *)&format, modifier); else - DPU_DEBUG("fmt %4.4s mod 0x%llX ubwc %d yuv %d\n", + DRM_DEV_DEBUG("fmt %4.4s mod 0x%llX ubwc %d yuv %d\n", (char *)&format, modifier, DPU_FORMAT_IS_UBWC(fmt), DPU_FORMAT_IS_YUV(fmt)); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c index 44ee063..70624d6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c @@ -504,7 +504,7 @@ struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev) } } - DPU_ERROR("unsupported chipset id:%X\n", hw_rev); + DRM_DEV_ERROR("unsupported chipset id:%X\n", hw_rev); dpu_hw_catalog_deinit(dpu_cfg); return ERR_PTR(-ENODEV); } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c index 554874b..805c71f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_cdm.c @@ -297,7 +297,7 @@ struct dpu_hw_cdm *dpu_hw_cdm_init(enum dpu_cdm idx, rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_CDM, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c index 06be7cf..87888af 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c @@ -520,7 +520,7 @@ struct dpu_hw_ctl *dpu_hw_ctl_init(enum dpu_ctl idx, rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_CTL, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c index d280df5..3542393 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c @@ -328,7 +328,7 @@ struct dpu_hw_intf *dpu_hw_intf_init(enum dpu_intf idx, rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_INTF, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c index 4ab72b0..a5e75a4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c @@ -241,7 +241,7 @@ struct dpu_hw_mixer *dpu_hw_lm_init(enum dpu_lm idx, rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_LM, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c index cc3a623..79c14d6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c @@ -230,7 +230,7 @@ struct dpu_hw_pingpong *dpu_hw_pingpong_init(enum dpu_pingpong idx, rc = dpu_hw_blk_init(&c->base, DPU_HW_BLK_PINGPONG, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c index c25b52a..be29c8c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c @@ -732,7 +732,7 @@ struct dpu_hw_pipe *dpu_hw_sspp_init(enum dpu_sspp idx, rc = dpu_hw_blk_init(&hw_pipe->base, DPU_HW_BLK_SSPP, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c index db2798e..aec73b6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c @@ -375,7 +375,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx, rc = dpu_hw_blk_init(&mdp->base, DPU_HW_BLK_TOP, idx, &dpu_hw_ops); if (rc) { - DPU_ERROR("failed to init hw blk %d\n", rc); + DRM_DEV_ERROR("failed to init hw blk %d\n", rc); goto blk_init_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c index d5e6ce0..7af43a8 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c @@ -44,7 +44,7 @@ int dpu_irq_postinstall(struct msm_kms *kms) int rc; if (!kms) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return -EINVAL; } @@ -58,7 +58,7 @@ void dpu_irq_uninstall(struct msm_kms *kms) struct dpu_kms *dpu_kms = to_dpu_kms(kms); if (!kms) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 7dd6bd2..b221ff5 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -82,7 +82,7 @@ static int _dpu_danger_signal_status(struct seq_file *s, int i; if (!kms || !kms->dev || !kms->dev->dev_private || !kms->hw_mdp) { - DPU_ERROR("invalid arg(s)\n"); + DRM_DEV_ERROR("invalid arg(s)\n"); return 0; } @@ -150,7 +150,7 @@ static int dpu_debugfs_danger_init(struct dpu_kms *dpu_kms, dpu_kms->debugfs_danger = debugfs_create_dir("danger", parent); if (!dpu_kms->debugfs_danger) { - DPU_ERROR("failed to create danger debugfs\n"); + DRM_DEV_ERROR("failed to create danger debugfs\n"); return -EINVAL; } @@ -281,7 +281,7 @@ static int _dpu_debugfs_init(struct dpu_kms *dpu_kms) rc = dpu_core_perf_debugfs_init(&dpu_kms->perf, dpu_kms->debugfs_root); if (rc) { - DPU_ERROR("failed to init perf %d\n", rc); + DRM_DEV_ERROR("failed to init perf %d\n", rc); return rc; } @@ -409,19 +409,19 @@ static void dpu_kms_wait_for_commit_done(struct msm_kms *kms, int ret; if (!kms || !crtc || !crtc->state) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return; } dev = crtc->dev; if (!crtc->state->enable) { - DPU_DEBUG("[crtc:%d] not enable\n", crtc->base.id); + DRM_DEV_DEBUG("[crtc:%d] not enable\n", crtc->base.id); return; } if (!crtc->state->active) { - DPU_DEBUG("[crtc:%d] not active\n", crtc->base.id); + DRM_DEV_DEBUG("[crtc:%d] not active\n", crtc->base.id); return; } @@ -436,7 +436,7 @@ static void dpu_kms_wait_for_commit_done(struct msm_kms *kms, trace_dpu_kms_wait_for_commit_done(DRMID(crtc)); ret = dpu_encoder_wait_for_event(encoder, MSM_ENC_COMMIT_DONE); if (ret && ret != -EWOULDBLOCK) { - DPU_ERROR("wait for commit done returned %d\n", ret); + DRM_DEV_ERROR("wait for commit done returned %d\n", ret); break; } } @@ -452,7 +452,7 @@ static void _dpu_kms_initialize_dsi(struct drm_device *dev, /*TODO: Support two independent DSI connectors */ encoder = dpu_encoder_init(dev, DRM_MODE_CONNECTOR_DSI); if (IS_ERR_OR_NULL(encoder)) { - DPU_ERROR("encoder init failed for dsi display\n"); + DRM_DEV_ERROR("encoder init failed for dsi display\n"); return; } @@ -460,13 +460,13 @@ static void _dpu_kms_initialize_dsi(struct drm_device *dev, for (i = 0; i < ARRAY_SIZE(priv->dsi); i++) { if (!priv->dsi[i]) { - DPU_DEBUG("invalid msm_dsi for ctrl %d\n", i); + DRM_DEV_DEBUG("invalid msm_dsi for ctrl %d\n", i); return; } rc = msm_dsi_modeset_init(priv->dsi[i], dev, encoder); if (rc) { - DPU_ERROR("modeset_init failed for dsi[%d], rc = %d\n", + DRM_DEV_ERROR("modeset_init failed for dsi[%d], rc = %d\n", i, rc); continue; } @@ -499,13 +499,13 @@ static void _dpu_kms_drm_obj_destroy(struct dpu_kms *dpu_kms) int i; if (!dpu_kms) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return; } else if (!dpu_kms->dev) { - DPU_ERROR("invalid dev\n"); + DRM_DEV_ERROR("invalid dev\n"); return; } else if (!dpu_kms->dev->dev_private) { - DPU_ERROR("invalid dev_private\n"); + DRM_DEV_ERROR("invalid dev_private\n"); return; } priv = dpu_kms->dev->dev_private; @@ -540,7 +540,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms) int max_crtc_count; if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return -EINVAL; } @@ -567,7 +567,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms) plane = dpu_plane_init(dev, catalog->sspp[i].id, primary, (1UL << max_crtc_count) - 1, 0); if (IS_ERR(plane)) { - DPU_ERROR("dpu_plane_init failed\n"); + DRM_DEV_ERROR("dpu_plane_init failed\n"); ret = PTR_ERR(plane); goto fail; } @@ -607,7 +607,7 @@ static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor) int rc; if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev) { - DPU_ERROR("invalid dpu_kms\n"); + DRM_DEV_ERROR("invalid dpu_kms\n"); return -EINVAL; } @@ -615,7 +615,7 @@ static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor) rc = _dpu_debugfs_init(dpu_kms); if (rc) - DPU_ERROR("dpu_debugfs init failed: %d\n", rc); + DRM_DEV_ERROR("dpu_debugfs init failed: %d\n", rc); return rc; } @@ -688,7 +688,7 @@ static void dpu_kms_destroy(struct msm_kms *kms) struct dpu_kms *dpu_kms; if (!kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return; } @@ -843,7 +843,7 @@ static void _dpu_kms_set_encoder_mode(struct msm_kms *kms, rc = dpu_encoder_setup(encoder->dev, encoder, &info); if (rc) - DPU_ERROR("failed to setup DPU encoder %d: rc:%d\n", + DRM_DEV_ERROR("failed to setup DPU encoder %d: rc:%d\n", encoder->base.id, rc); } @@ -912,7 +912,7 @@ static int _dpu_kms_mmu_init(struct dpu_kms *dpu_kms) ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports, ARRAY_SIZE(iommu_ports)); if (ret) { - DPU_ERROR("failed to attach iommu %d\n", ret); + DRM_DEV_ERROR("failed to attach iommu %d\n", ret); msm_gem_address_space_put(aspace); goto fail; } @@ -968,14 +968,14 @@ static int dpu_kms_hw_init(struct msm_kms *kms) int i, rc = -EINVAL; if (!kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); goto end; } dpu_kms = to_dpu_kms(kms); dev = dpu_kms->dev; if (!dev) { - DPU_ERROR("invalid device\n"); + DRM_DEV_ERROR("invalid device\n"); goto end; } @@ -987,14 +987,14 @@ static int dpu_kms_hw_init(struct msm_kms *kms) priv = dev->dev_private; if (!priv) { - DPU_ERROR("invalid private data\n"); + DRM_DEV_ERROR("invalid private data\n"); goto dbg_destroy; } dpu_kms->mmio = msm_ioremap(dpu_kms->pdev, "mdp", "mdp"); if (IS_ERR(dpu_kms->mmio)) { rc = PTR_ERR(dpu_kms->mmio); - DPU_ERROR("mdp register memory map failed: %d\n", rc); + DRM_DEV_ERROR("mdp register memory map failed: %d\n", rc); dpu_kms->mmio = NULL; goto error; } @@ -1004,7 +1004,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) dpu_kms->vbif[VBIF_RT] = msm_ioremap(dpu_kms->pdev, "vbif", "vbif"); if (IS_ERR(dpu_kms->vbif[VBIF_RT])) { rc = PTR_ERR(dpu_kms->vbif[VBIF_RT]); - DPU_ERROR("vbif register memory map failed: %d\n", rc); + DRM_DEV_ERROR("vbif register memory map failed: %d\n", rc); dpu_kms->vbif[VBIF_RT] = NULL; goto error; } @@ -1012,7 +1012,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) dpu_kms->vbif[VBIF_NRT] = msm_ioremap(dpu_kms->pdev, "vbif_nrt", "vbif_nrt"); if (IS_ERR(dpu_kms->vbif[VBIF_NRT])) { dpu_kms->vbif[VBIF_NRT] = NULL; - DPU_DEBUG("VBIF NRT is not defined"); + DRM_DEV_DEBUG("VBIF NRT is not defined"); } else { dpu_kms->vbif_len[VBIF_NRT] = dpu_iomap_size(dpu_kms->pdev, "vbif_nrt"); @@ -1021,7 +1021,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) dpu_kms->reg_dma = msm_ioremap(dpu_kms->pdev, "regdma", "regdma"); if (IS_ERR(dpu_kms->reg_dma)) { dpu_kms->reg_dma = NULL; - DPU_DEBUG("REG_DMA is not defined"); + DRM_DEV_DEBUG("REG_DMA is not defined"); } else { dpu_kms->reg_dma_len = dpu_iomap_size(dpu_kms->pdev, "regdma"); } @@ -1032,7 +1032,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) rc = PTR_ERR(dpu_kms->core_client); if (!dpu_kms->core_client) rc = -EINVAL; - DPU_ERROR("dpu power client create failed: %d\n", rc); + DRM_DEV_ERROR("dpu power client create failed: %d\n", rc); dpu_kms->core_client = NULL; goto error; } @@ -1048,7 +1048,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) rc = PTR_ERR(dpu_kms->catalog); if (!dpu_kms->catalog) rc = -EINVAL; - DPU_ERROR("catalog init failed: %d\n", rc); + DRM_DEV_ERROR("catalog init failed: %d\n", rc); dpu_kms->catalog = NULL; goto power_error; } @@ -1061,14 +1061,14 @@ static int dpu_kms_hw_init(struct msm_kms *kms) */ rc = _dpu_kms_mmu_init(dpu_kms); if (rc) { - DPU_ERROR("dpu_kms_mmu_init failed: %d\n", rc); + DRM_DEV_ERROR("dpu_kms_mmu_init failed: %d\n", rc); goto power_error; } rc = dpu_rm_init(&dpu_kms->rm, dpu_kms->catalog, dpu_kms->mmio, dpu_kms->dev); if (rc) { - DPU_ERROR("rm init failed: %d\n", rc); + DRM_DEV_ERROR("rm init failed: %d\n", rc); goto power_error; } @@ -1079,7 +1079,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) rc = PTR_ERR(dpu_kms->hw_mdp); if (!dpu_kms->hw_mdp) rc = -EINVAL; - DPU_ERROR("failed to get hw_mdp: %d\n", rc); + DRM_DEV_ERROR("failed to get hw_mdp: %d\n", rc); dpu_kms->hw_mdp = NULL; goto power_error; } @@ -1093,7 +1093,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]); if (!dpu_kms->hw_vbif[vbif_idx]) rc = -EINVAL; - DPU_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc); + DRM_DEV_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc); dpu_kms->hw_vbif[vbif_idx] = NULL; goto power_error; } @@ -1103,14 +1103,14 @@ static int dpu_kms_hw_init(struct msm_kms *kms) &dpu_kms->phandle, _dpu_kms_get_clk(dpu_kms, "core")); if (rc) { - DPU_ERROR("failed to init perf %d\n", rc); + DRM_DEV_ERROR("failed to init perf %d\n", rc); goto perf_err; } dpu_kms->hw_intr = dpu_hw_intr_init(dpu_kms->mmio, dpu_kms->catalog); if (IS_ERR_OR_NULL(dpu_kms->hw_intr)) { rc = PTR_ERR(dpu_kms->hw_intr); - DPU_ERROR("hw_intr init failed: %d\n", rc); + DRM_DEV_ERROR("hw_intr init failed: %d\n", rc); dpu_kms->hw_intr = NULL; goto hw_intr_init_err; } @@ -1121,7 +1121,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms) */ rc = _dpu_kms_drm_obj_init(dpu_kms); if (rc) { - DPU_ERROR("modeset init failed: %d\n", rc); + DRM_DEV_ERROR("modeset init failed: %d\n", rc); goto drm_obj_init_err; } @@ -1175,7 +1175,7 @@ struct msm_kms *dpu_kms_init(struct drm_device *dev) int irq; if (!dev || !dev->dev_private) { - DPU_ERROR("drm device node invalid\n"); + DRM_DEV_ERROR("drm device node invalid\n"); return ERR_PTR(-EINVAL); } @@ -1184,7 +1184,7 @@ struct msm_kms *dpu_kms_init(struct drm_device *dev) irq = irq_of_parse_and_map(dpu_kms->pdev->dev.of_node, 0); if (irq < 0) { - DPU_ERROR("failed to get irq: %d\n", irq); + DRM_DEV_ERROR("failed to get irq: %d\n", irq); return ERR_PTR(irq); } dpu_kms->base.irq = irq; @@ -1208,7 +1208,7 @@ static int dpu_bind(struct device *dev, struct device *master, void *data) mp = &dpu_kms->mp; ret = msm_dss_parse_clock(pdev, mp); if (ret) { - DPU_ERROR("failed to parse clocks, ret=%d\n", ret); + DRM_DEV_ERROR("failed to parse clocks, ret=%d\n", ret); return ret; } @@ -1268,18 +1268,18 @@ static int __maybe_unused dpu_runtime_suspend(struct device *dev) ddev = dpu_kms->dev; if (!ddev) { - DPU_ERROR("invalid drm_device\n"); + DRM_DEV_ERROR("invalid drm_device\n"); goto exit; } rc = dpu_power_resource_enable(&dpu_kms->phandle, dpu_kms->core_client, false); if (rc) - DPU_ERROR("resource disable failed: %d\n", rc); + DRM_DEV_ERROR("resource disable failed: %d\n", rc); rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, false); if (rc) - DPU_ERROR("clock disable failed rc:%d\n", rc); + DRM_DEV_ERROR("clock disable failed rc:%d\n", rc); exit: return rc; @@ -1295,20 +1295,20 @@ static int __maybe_unused dpu_runtime_resume(struct device *dev) ddev = dpu_kms->dev; if (!ddev) { - DPU_ERROR("invalid drm_device\n"); + DRM_DEV_ERROR("invalid drm_device\n"); goto exit; } rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, true); if (rc) { - DPU_ERROR("clock enable failed rc:%d\n", rc); + DRM_DEV_ERROR("clock enable failed rc:%d\n", rc); goto exit; } rc = dpu_power_resource_enable(&dpu_kms->phandle, dpu_kms->core_client, true); if (rc) - DPU_ERROR("resource enable failed: %d\n", rc); + DRM_DEV_ERROR("resource enable failed: %d\n", rc); exit: return rc; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c index 9e533b8..ee26c1d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c @@ -105,7 +105,7 @@ static int _dpu_mdss_irq_domain_add(struct dpu_mdss *dpu_mdss) domain = irq_domain_add_linear(dev->of_node, 32, &dpu_mdss_irqdomain_ops, dpu_mdss); if (!domain) { - DPU_ERROR("failed to add irq_domain\n"); + DRM_DEV_ERROR("failed to add irq_domain\n"); return -EINVAL; } @@ -131,7 +131,7 @@ static int dpu_mdss_enable(struct msm_mdss *mdss) ret = msm_dss_enable_clk(mp->clk_config, mp->num_clk, true); if (ret) - DPU_ERROR("clock enable failed, ret:%d\n", ret); + DRM_DEV_ERROR("clock enable failed, ret:%d\n", ret); return ret; } @@ -144,7 +144,7 @@ static int dpu_mdss_disable(struct msm_mdss *mdss) ret = msm_dss_enable_clk(mp->clk_config, mp->num_clk, false); if (ret) - DPU_ERROR("clock disable failed, ret:%d\n", ret); + DRM_DEV_ERROR("clock disable failed, ret:%d\n", ret); return ret; } @@ -204,7 +204,7 @@ int dpu_mdss_init(struct drm_device *dev) mp = &dpu_mdss->mp; ret = msm_dss_parse_clock(pdev, mp); if (ret) { - DPU_ERROR("failed to parse clocks, ret=%d\n", ret); + DRM_DEV_ERROR("failed to parse clocks, ret=%d\n", ret); goto clk_parse_err; } @@ -218,7 +218,7 @@ int dpu_mdss_init(struct drm_device *dev) ret = devm_request_irq(dev->dev, platform_get_irq(pdev, 0), dpu_mdss_irq, 0, "dpu_mdss_isr", dpu_mdss); if (ret) { - DPU_ERROR("failed to init irq: %d\n", ret); + DRM_DEV_ERROR("failed to init irq: %d\n", ret); goto irq_error; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c index ec959f8..1ce5749 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -33,10 +33,10 @@ #include "dpu_vbif.h" #include "dpu_plane.h" -#define DPU_DEBUG_PLANE(pl, fmt, ...) DPU_DEBUG("plane%d " fmt,\ +#define DPU_DEBUG_PLANE(pl, fmt, ...) DRM_DEV_DEBUG("plane%d " fmt,\ (pl) ? (pl)->base.base.id : -1, ##__VA_ARGS__) -#define DPU_ERROR_PLANE(pl, fmt, ...) DPU_ERROR("plane%d " fmt,\ +#define DPU_ERROR_PLANE(pl, fmt, ...) DRM_DEV_ERROR("plane%d " fmt,\ (pl) ? (pl)->base.base.id : -1, ##__VA_ARGS__) #define DECIMATED_DIMENSION(dim, deci) (((dim) + ((1 << (deci)) - 1)) >> (deci)) @@ -161,7 +161,7 @@ static inline int _dpu_plane_calc_fill_level(struct drm_plane *plane, u32 total_fl; if (!plane || !fmt || !plane->state || !src_width || !fmt->bpp) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return 0; } @@ -172,7 +172,7 @@ static inline int _dpu_plane_calc_fill_level(struct drm_plane *plane, list_for_each_entry(tmp, &pdpu->mplane_list, mplane_list) { if (!dpu_plane_enabled(tmp->base.state)) continue; - DPU_DEBUG("plane%d/%d src_width:%d/%d\n", + DRM_DEV_DEBUG("plane%d/%d src_width:%d/%d\n", pdpu->base.base.id, tmp->base.base.id, src_width, drm_rect_width(&tmp->pipe_cfg.src_rect)); @@ -200,7 +200,7 @@ static inline int _dpu_plane_calc_fill_level(struct drm_plane *plane, } } - DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s w:%u fl:%u\n", + DRM_DEV_DEBUG("plane%u: pnum:%d fmt: %4.4s w:%u fl:%u\n", plane->base.id, pdpu->pipe - SSPP_VIG0, (char *)&fmt->base.pixel_format, src_width, total_fl); @@ -247,7 +247,7 @@ static void _dpu_plane_set_qos_lut(struct drm_plane *plane, u32 total_fl = 0, lut_usage; if (!plane || !fb) { - DPU_ERROR("invalid arguments plane %d fb %d\n", + DRM_DEV_ERROR("invalid arguments plane %d fb %d\n", plane != 0, fb != 0); return; } @@ -255,7 +255,7 @@ static void _dpu_plane_set_qos_lut(struct drm_plane *plane, pdpu = to_dpu_plane(plane); if (!pdpu->pipe_hw || !pdpu->pipe_sblk || !pdpu->catalog) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } else if (!pdpu->pipe_hw->ops.setup_creq_lut) { return; @@ -285,7 +285,7 @@ static void _dpu_plane_set_qos_lut(struct drm_plane *plane, (fmt) ? fmt->base.pixel_format : 0, pdpu->is_rt_pipe, total_fl, qos_lut, lut_usage); - DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s rt:%d fl:%u lut:0x%llx\n", + DRM_DEV_DEBUG("plane%u: pnum:%d fmt: %4.4s rt:%d fl:%u lut:0x%llx\n", plane->base.id, pdpu->pipe - SSPP_VIG0, fmt ? (char *)&fmt->base.pixel_format : NULL, @@ -307,14 +307,14 @@ static void _dpu_plane_set_danger_lut(struct drm_plane *plane, u32 danger_lut, safe_lut; if (!plane || !fb) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } pdpu = to_dpu_plane(plane); if (!pdpu->pipe_hw || !pdpu->pipe_sblk || !pdpu->catalog) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } else if (!pdpu->pipe_hw->ops.setup_danger_safe_lut) { return; @@ -352,7 +352,7 @@ static void _dpu_plane_set_danger_lut(struct drm_plane *plane, pdpu->pipe_qos_cfg.danger_lut, pdpu->pipe_qos_cfg.safe_lut); - DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s mode:%d luts[0x%x, 0x%x]\n", + DRM_DEV_DEBUG("plane%u: pnum:%d fmt: %4.4s mode:%d luts[0x%x, 0x%x]\n", plane->base.id, pdpu->pipe - SSPP_VIG0, fmt ? (char *)&fmt->base.pixel_format : NULL, @@ -376,14 +376,14 @@ static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, struct dpu_plane *pdpu; if (!plane) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } pdpu = to_dpu_plane(plane); if (!pdpu->pipe_hw || !pdpu->pipe_sblk) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } else if (!pdpu->pipe_hw->ops.setup_qos_ctrl) { return; @@ -410,7 +410,7 @@ static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, pdpu->pipe_qos_cfg.danger_safe_en = false; } - DPU_DEBUG("plane%u: pnum:%d ds:%d vb:%d pri[0x%x, 0x%x] is_rt:%d\n", + DRM_DEV_DEBUG("plane%u: pnum:%d ds:%d vb:%d pri[0x%x, 0x%x] is_rt:%d\n", plane->base.id, pdpu->pipe - SSPP_VIG0, pdpu->pipe_qos_cfg.danger_safe_en, @@ -430,13 +430,13 @@ int dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) struct dpu_kms *dpu_kms; if (!plane || !plane->dev) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return -EINVAL; } priv = plane->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid KMS reference\n"); + DRM_DEV_ERROR("invalid KMS reference\n"); return -EINVAL; } @@ -468,21 +468,21 @@ static void _dpu_plane_set_ot_limit(struct drm_plane *plane, struct dpu_kms *dpu_kms; if (!plane || !plane->dev || !crtc) { - DPU_ERROR("invalid arguments plane %d crtc %d\n", + DRM_DEV_ERROR("invalid arguments plane %d crtc %d\n", plane != 0, crtc != 0); return; } priv = plane->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid KMS reference\n"); + DRM_DEV_ERROR("invalid KMS reference\n"); return; } dpu_kms = to_dpu_kms(priv->kms); pdpu = to_dpu_plane(plane); if (!pdpu->pipe_hw) { - DPU_ERROR("invalid pipe reference\n"); + DRM_DEV_ERROR("invalid pipe reference\n"); return; } @@ -512,20 +512,20 @@ static void _dpu_plane_set_qos_remap(struct drm_plane *plane) struct dpu_kms *dpu_kms; if (!plane || !plane->dev) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } priv = plane->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid KMS reference\n"); + DRM_DEV_ERROR("invalid KMS reference\n"); return; } dpu_kms = to_dpu_kms(priv->kms); pdpu = to_dpu_plane(plane); if (!pdpu->pipe_hw) { - DPU_ERROR("invalid pipe reference\n"); + DRM_DEV_ERROR("invalid pipe reference\n"); return; } @@ -536,7 +536,7 @@ static void _dpu_plane_set_qos_remap(struct drm_plane *plane) qos_params.num = pdpu->pipe_hw->idx - SSPP_VIG0; qos_params.is_rt = pdpu->is_rt_pipe; - DPU_DEBUG("plane%d pipe:%d vbif:%d xin:%d rt:%d, clk_ctrl:%d\n", + DRM_DEV_DEBUG("plane%d pipe:%d vbif:%d xin:%d rt:%d, clk_ctrl:%d\n", plane->base.id, qos_params.num, qos_params.vbif_idx, qos_params.xin_id, qos_params.is_rt, @@ -556,13 +556,13 @@ static int _dpu_plane_get_aspace( struct dpu_kms *kms; if (!pdpu || !pstate || !aspace) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return -EINVAL; } kms = _dpu_plane_get_kms(&pdpu->base); if (!kms) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return -EINVAL; } @@ -581,7 +581,7 @@ static inline void _dpu_plane_set_scanout(struct drm_plane *plane, int ret; if (!plane || !pstate || !pipe_cfg || !fb) { - DPU_ERROR( + DRM_DEV_ERROR( "invalid arg(s), plane %d state %d cfg %d fb %d\n", plane != 0, pstate != 0, pipe_cfg != 0, fb != 0); return; @@ -624,7 +624,7 @@ static void _dpu_plane_setup_scaler3(struct dpu_plane *pdpu, if (!pdpu || !pstate || !scale_cfg || !fmt || !chroma_subsmpl_h || !chroma_subsmpl_v) { - DPU_ERROR( + DRM_DEV_ERROR( "pdpu %d pstate %d scale_cfg %d fmt %d smp_h %d smp_v %d\n", !!pdpu, !!pstate, !!scale_cfg, !!fmt, chroma_subsmpl_h, chroma_subsmpl_v); @@ -715,7 +715,7 @@ static inline void _dpu_plane_setup_csc(struct dpu_plane *pdpu) }; if (!pdpu) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } @@ -738,7 +738,7 @@ static void _dpu_plane_setup_scaler(struct dpu_plane *pdpu, uint32_t chroma_subsmpl_h, chroma_subsmpl_v; if (!pdpu || !fmt || !pstate) { - DPU_ERROR("invalid arg(s), plane %d fmt %d state %d\n", + DRM_DEV_ERROR("invalid arg(s), plane %d fmt %d state %d\n", pdpu != 0, fmt != 0, pstate != 0); return; } @@ -776,7 +776,7 @@ static int _dpu_plane_color_fill(struct dpu_plane *pdpu, struct dpu_plane_state *pstate; if (!pdpu || !pdpu->base.state) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return -EINVAL; } @@ -881,7 +881,7 @@ int dpu_plane_validate_multirect_v2(struct dpu_multirect_plane_states *plane) dpu_plane[i] = to_dpu_plane(drm_state[i]->plane); if (pstate[i] == NULL) { - DPU_ERROR("DPU plane state of plane id %d is NULL\n", + DRM_DEV_ERROR("DPU plane state of plane id %d is NULL\n", drm_state[i]->plane->base.id); return -EINVAL; } @@ -941,7 +941,7 @@ int dpu_plane_validate_multirect_v2(struct dpu_multirect_plane_states *plane) pstate[R0]->multirect_mode = DPU_SSPP_MULTIRECT_TIME_MX; pstate[R1]->multirect_mode = DPU_SSPP_MULTIRECT_TIME_MX; } else { - DPU_ERROR( + DRM_DEV_ERROR( "No multirect mode possible for the planes (%d - %d)\n", drm_state[R0]->plane->base.id, drm_state[R1]->plane->base.id); @@ -976,7 +976,7 @@ void dpu_plane_get_ctl_flush(struct drm_plane *plane, struct dpu_hw_ctl *ctl, struct dpu_plane_state *pstate; if (!plane || !flush_sspp) { - DPU_ERROR("invalid parameters\n"); + DRM_DEV_ERROR("invalid parameters\n"); return; } @@ -1027,7 +1027,7 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane, ret = msm_framebuffer_prepare(new_state->fb, pstate->aspace); if (ret) { - DPU_ERROR("failed to prepare framebuffer\n"); + DRM_DEV_ERROR("failed to prepare framebuffer\n"); return ret; } } @@ -1091,7 +1091,7 @@ static int dpu_plane_sspp_atomic_check(struct drm_plane *plane, int hscale = 1, vscale = 1; if (!plane || !state) { - DPU_ERROR("invalid arg(s), plane %d state %d\n", + DRM_DEV_ERROR("invalid arg(s), plane %d state %d\n", plane != 0, state != 0); ret = -EINVAL; goto exit; @@ -1205,7 +1205,7 @@ void dpu_plane_flush(struct drm_plane *plane) struct dpu_plane_state *pstate; if (!plane || !plane->state) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } @@ -1259,13 +1259,13 @@ static int dpu_plane_sspp_atomic_update(struct drm_plane *plane, struct drm_rect src, dst; if (!plane) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return -EINVAL; } else if (!plane->state) { - DPU_ERROR("invalid plane state\n"); + DRM_DEV_ERROR("invalid plane state\n"); return -EINVAL; } else if (!old_state) { - DPU_ERROR("invalid old state\n"); + DRM_DEV_ERROR("invalid old state\n"); return -EINVAL; } @@ -1398,13 +1398,13 @@ static void _dpu_plane_atomic_disable(struct drm_plane *plane, struct dpu_plane_state *pstate; if (!plane) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } else if (!plane->state) { - DPU_ERROR("invalid plane state\n"); + DRM_DEV_ERROR("invalid plane state\n"); return; } else if (!old_state) { - DPU_ERROR("invalid old state\n"); + DRM_DEV_ERROR("invalid old state\n"); return; } @@ -1430,10 +1430,10 @@ static void dpu_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *state; if (!plane) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } else if (!plane->state) { - DPU_ERROR("invalid plane state\n"); + DRM_DEV_ERROR("invalid plane state\n"); return; } @@ -1459,7 +1459,7 @@ void dpu_plane_restore(struct drm_plane *plane) struct dpu_plane *pdpu; if (!plane || !plane->state) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } @@ -1498,7 +1498,7 @@ static void dpu_plane_destroy_state(struct drm_plane *plane, struct dpu_plane_state *pstate; if (!plane || !state) { - DPU_ERROR("invalid arg(s), plane %d state %d\n", + DRM_DEV_ERROR("invalid arg(s), plane %d state %d\n", plane != 0, state != 0); return; } @@ -1520,10 +1520,10 @@ static void dpu_plane_destroy_state(struct drm_plane *plane, struct dpu_plane_state *old_state; if (!plane) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return NULL; } else if (!plane->state) { - DPU_ERROR("invalid plane state\n"); + DRM_DEV_ERROR("invalid plane state\n"); return NULL; } @@ -1550,7 +1550,7 @@ static void dpu_plane_reset(struct drm_plane *plane) struct dpu_plane_state *pstate; if (!plane) { - DPU_ERROR("invalid plane\n"); + DRM_DEV_ERROR("invalid plane\n"); return; } @@ -1608,10 +1608,10 @@ static void _dpu_plane_set_danger_state(struct dpu_kms *kms, bool enable) drm_for_each_plane(plane, kms->dev) { if (plane->fb && plane->state) { dpu_plane_danger_signal_ctrl(plane, enable); - DPU_DEBUG("plane:%d img:%dx%d ", + DRM_DEV_DEBUG("plane:%d img:%dx%d ", plane->base.id, plane->fb->width, plane->fb->height); - DPU_DEBUG("src[%d,%d,%d,%d] dst[%d,%d,%d,%d]\n", + DRM_DEV_DEBUG("src[%d,%d,%d,%d] dst[%d,%d,%d,%d]\n", plane->state->src_x >> 16, plane->state->src_y >> 16, plane->state->src_w >> 16, @@ -1619,7 +1619,7 @@ static void _dpu_plane_set_danger_state(struct dpu_kms *kms, bool enable) plane->state->crtc_x, plane->state->crtc_y, plane->state->crtc_w, plane->state->crtc_h); } else { - DPU_DEBUG("Inactive plane:%d\n", plane->base.id); + DRM_DEV_DEBUG("Inactive plane:%d\n", plane->base.id); } } } @@ -1648,12 +1648,12 @@ static ssize_t _dpu_plane_danger_write(struct file *file, if (disable_panic) { /* Disable panic signal for all active pipes */ - DPU_DEBUG("Disabling danger:\n"); + DRM_DEV_DEBUG("Disabling danger:\n"); _dpu_plane_set_danger_state(kms, false); kms->has_danger_ctrl = false; } else { /* Enable panic signal for all active pipes */ - DPU_DEBUG("Enabling danger:\n"); + DRM_DEV_DEBUG("Enabling danger:\n"); kms->has_danger_ctrl = true; _dpu_plane_set_danger_state(kms, true); } @@ -1676,13 +1676,13 @@ static int _dpu_plane_init_debugfs(struct drm_plane *plane) const struct dpu_sspp_cfg *cfg = 0; if (!plane || !plane->dev) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return -EINVAL; } priv = plane->dev->dev_private; if (!priv || !priv->kms) { - DPU_ERROR("invalid KMS reference\n"); + DRM_DEV_ERROR("invalid KMS reference\n"); return -EINVAL; } @@ -1840,31 +1840,31 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, int ret = -EINVAL; if (!dev) { - DPU_ERROR("[%u]device is NULL\n", pipe); + DRM_DEV_ERROR("[%u]device is NULL\n", pipe); goto exit; } priv = dev->dev_private; if (!priv) { - DPU_ERROR("[%u]private data is NULL\n", pipe); + DRM_DEV_ERROR("[%u]private data is NULL\n", pipe); goto exit; } if (!priv->kms) { - DPU_ERROR("[%u]invalid KMS reference\n", pipe); + DRM_DEV_ERROR("[%u]invalid KMS reference\n", pipe); goto exit; } kms = to_dpu_kms(priv->kms); if (!kms->catalog) { - DPU_ERROR("[%u]invalid catalog reference\n", pipe); + DRM_DEV_ERROR("[%u]invalid catalog reference\n", pipe); goto exit; } /* create and zero local structure */ pdpu = kzalloc(sizeof(*pdpu), GFP_KERNEL); if (!pdpu) { - DPU_ERROR("[%u]failed to allocate local plane struct\n", pipe); + DRM_DEV_ERROR("[%u]failed to allocate local plane struct\n", pipe); ret = -ENOMEM; goto exit; } @@ -1885,11 +1885,11 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, pdpu->pipe_hw = dpu_hw_sspp_init(pipe, kms->mmio, kms->catalog, master_plane_id != 0); if (IS_ERR(pdpu->pipe_hw)) { - DPU_ERROR("[%u]SSPP init failed\n", pipe); + DRM_DEV_ERROR("[%u]SSPP init failed\n", pipe); ret = PTR_ERR(pdpu->pipe_hw); goto clean_plane; } else if (!pdpu->pipe_hw->cap || !pdpu->pipe_hw->cap->sblk) { - DPU_ERROR("[%u]SSPP init returned invalid cfg\n", pipe); + DRM_DEV_ERROR("[%u]SSPP init returned invalid cfg\n", pipe); goto clean_sspp; } @@ -1897,7 +1897,7 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, pdpu->features = pdpu->pipe_hw->cap->features; pdpu->pipe_sblk = pdpu->pipe_hw->cap->sblk; if (!pdpu->pipe_sblk) { - DPU_ERROR("[%u]invalid sblk\n", pipe); + DRM_DEV_ERROR("[%u]invalid sblk\n", pipe); goto clean_sspp; } @@ -1912,7 +1912,7 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, ARRAY_SIZE(pdpu->formats)); if (!pdpu->nformats) { - DPU_ERROR("[%u]no valid formats for plane\n", pipe); + DRM_DEV_ERROR("[%u]no valid formats for plane\n", pipe); goto clean_sspp; } @@ -1939,7 +1939,7 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, ret = drm_plane_create_zpos_property(plane, 0, 0, zpos_max); if (ret) - DPU_ERROR("failed to install zpos property, rc = %d\n", ret); + DRM_DEV_ERROR("failed to install zpos property, rc = %d\n", ret); /* success! finalize initialization */ drm_plane_helper_add(plane, &dpu_plane_helper_funcs); @@ -1949,7 +1949,7 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev, mutex_init(&pdpu->lock); - DPU_DEBUG("%s created for pipe:%u id:%u virtual:%u\n", pdpu->pipe_name, + DRM_DEV_DEBUG("%s created for pipe:%u id:%u virtual:%u\n", pdpu->pipe_name, pipe, plane->base.id, master_plane_id); return plane; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c index 13c0a36..f1d0f8f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -119,7 +119,7 @@ static void _dpu_rm_print_rsvps( struct dpu_rm_hw_blk *blk; enum dpu_hw_blk_type type; - DPU_DEBUG("%d\n", stage); + DRM_DEV_DEBUG("%d\n", stage); list_for_each_entry(rsvp, &rm->rsvps, list) { DRM_DEBUG_KMS("%d rsvp[s%ue%u] topology %d\n", stage, rsvp->seq, @@ -173,7 +173,7 @@ static bool _dpu_rm_get_hw_locked(struct dpu_rm *rm, struct dpu_rm_hw_iter *i) struct list_head *blk_list; if (!rm || !i || i->type >= DPU_HW_BLK_MAX) { - DPU_ERROR("invalid rm\n"); + DRM_DEV_ERROR("invalid rm\n"); return false; } @@ -181,7 +181,7 @@ static bool _dpu_rm_get_hw_locked(struct dpu_rm *rm, struct dpu_rm_hw_iter *i) blk_list = &rm->hw_blks[i->type]; if (i->blk && (&i->blk->list == blk_list)) { - DPU_DEBUG("attempt resume iteration past last\n"); + DRM_DEV_DEBUG("attempt resume iteration past last\n"); return false; } @@ -191,20 +191,20 @@ static bool _dpu_rm_get_hw_locked(struct dpu_rm *rm, struct dpu_rm_hw_iter *i) struct dpu_rm_rsvp *rsvp = i->blk->rsvp; if (i->blk->type != i->type) { - DPU_ERROR("found incorrect block type %d on %d list\n", + DRM_DEV_ERROR("found incorrect block type %d on %d list\n", i->blk->type, i->type); return false; } if ((i->enc_id == 0) || (rsvp && rsvp->enc_id == i->enc_id)) { i->hw = i->blk->hw; - DPU_DEBUG("found type %d id %d for enc %d\n", + DRM_DEV_DEBUG("found type %d id %d for enc %d\n", i->type, i->blk->id, i->enc_id); return true; } } - DPU_DEBUG("no match, type %d for enc %d\n", i->type, i->enc_id); + DRM_DEV_DEBUG("no match, type %d for enc %d\n", i->type, i->enc_id); return false; } @@ -244,7 +244,7 @@ static void _dpu_rm_hw_destroy(enum dpu_hw_blk_type type, void *hw) /* Top is a singleton, not managed in hw_blks list */ case DPU_HW_BLK_MAX: default: - DPU_ERROR("unsupported block type %d\n", type); + DRM_DEV_ERROR("unsupported block type %d\n", type); break; } } @@ -257,7 +257,7 @@ int dpu_rm_destroy(struct dpu_rm *rm) enum dpu_hw_blk_type type; if (!rm) { - DPU_ERROR("invalid rm\n"); + DRM_DEV_ERROR("invalid rm\n"); return -EINVAL; } @@ -320,12 +320,12 @@ static int _dpu_rm_hw_blk_create( /* Top is a singleton, not managed in hw_blks list */ case DPU_HW_BLK_MAX: default: - DPU_ERROR("unsupported block type %d\n", type); + DRM_DEV_ERROR("unsupported block type %d\n", type); return -EINVAL; } if (IS_ERR_OR_NULL(hw)) { - DPU_ERROR("failed hw object creation: type %d, err %ld\n", + DRM_DEV_ERROR("failed hw object creation: type %d, err %ld\n", type, PTR_ERR(hw)); return -EFAULT; } @@ -353,7 +353,7 @@ int dpu_rm_init(struct dpu_rm *rm, enum dpu_hw_blk_type type; if (!rm || !cat || !mmio || !dev) { - DPU_ERROR("invalid kms\n"); + DRM_DEV_ERROR("invalid kms\n"); return -EINVAL; } @@ -373,7 +373,7 @@ int dpu_rm_init(struct dpu_rm *rm, if (IS_ERR_OR_NULL(rm->hw_mdp)) { rc = PTR_ERR(rm->hw_mdp); rm->hw_mdp = NULL; - DPU_ERROR("failed: mdp hw not available\n"); + DRM_DEV_ERROR("failed: mdp hw not available\n"); goto fail; } @@ -382,14 +382,14 @@ int dpu_rm_init(struct dpu_rm *rm, struct dpu_lm_cfg *lm = &cat->mixer[i]; if (lm->pingpong == PINGPONG_MAX) { - DPU_DEBUG("skip mixer %d without pingpong\n", lm->id); + DRM_DEV_DEBUG("skip mixer %d without pingpong\n", lm->id); continue; } rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_LM, cat->mixer[i].id, &cat->mixer[i]); if (rc) { - DPU_ERROR("failed: lm hw not available\n"); + DRM_DEV_ERROR("failed: lm hw not available\n"); goto fail; } @@ -400,7 +400,7 @@ int dpu_rm_init(struct dpu_rm *rm, * Don't expect to have hw where lm max widths differ. * If found, take the min. */ - DPU_ERROR("unsupported: lm maxwidth differs\n"); + DRM_DEV_ERROR("unsupported: lm maxwidth differs\n"); if (rm->lm_max_width > lm->sblk->maxwidth) rm->lm_max_width = lm->sblk->maxwidth; } @@ -410,21 +410,21 @@ int dpu_rm_init(struct dpu_rm *rm, rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_PINGPONG, cat->pingpong[i].id, &cat->pingpong[i]); if (rc) { - DPU_ERROR("failed: pp hw not available\n"); + DRM_DEV_ERROR("failed: pp hw not available\n"); goto fail; } } for (i = 0; i < cat->intf_count; i++) { if (cat->intf[i].type == INTF_NONE) { - DPU_DEBUG("skip intf %d with type none\n", i); + DRM_DEV_DEBUG("skip intf %d with type none\n", i); continue; } rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_INTF, cat->intf[i].id, &cat->intf[i]); if (rc) { - DPU_ERROR("failed: intf hw not available\n"); + DRM_DEV_ERROR("failed: intf hw not available\n"); goto fail; } } @@ -433,7 +433,7 @@ int dpu_rm_init(struct dpu_rm *rm, rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_CTL, cat->ctl[i].id, &cat->ctl[i]); if (rc) { - DPU_ERROR("failed: ctl hw not available\n"); + DRM_DEV_ERROR("failed: ctl hw not available\n"); goto fail; } } @@ -442,7 +442,7 @@ int dpu_rm_init(struct dpu_rm *rm, rc = _dpu_rm_hw_blk_create(rm, cat, mmio, DPU_HW_BLK_CDM, cat->cdm[i].id, &cat->cdm[i]); if (rc) { - DPU_ERROR("failed: cdm hw not available\n"); + DRM_DEV_ERROR("failed: cdm hw not available\n"); goto fail; } } @@ -483,7 +483,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks( *pp = NULL; - DPU_DEBUG("check lm %d pp %d\n", + DRM_DEV_DEBUG("check lm %d pp %d\n", lm_cfg->id, lm_cfg->pingpong); /* Check if this layer mixer is a peer of the proposed primary LM */ @@ -492,7 +492,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks( to_dpu_hw_mixer(primary_lm->hw)->cap; if (!test_bit(lm_cfg->id, &prim_lm_cfg->lm_pair_mask)) { - DPU_DEBUG("lm %d not peer of lm %d\n", lm_cfg->id, + DRM_DEV_DEBUG("lm %d not peer of lm %d\n", lm_cfg->id, prim_lm_cfg->id); return false; } @@ -500,7 +500,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks( /* Already reserved? */ if (RESERVED_BY_OTHER(lm, rsvp)) { - DPU_DEBUG("lm %d already reserved\n", lm_cfg->id); + DRM_DEV_DEBUG("lm %d already reserved\n", lm_cfg->id); return false; } @@ -513,12 +513,12 @@ static bool _dpu_rm_check_lm_and_get_connected_blks( } if (!*pp) { - DPU_ERROR("failed to get pp on lm %d\n", lm_cfg->pingpong); + DRM_DEV_ERROR("failed to get pp on lm %d\n", lm_cfg->pingpong); return false; } if (RESERVED_BY_OTHER(*pp, rsvp)) { - DPU_DEBUG("lm %d pp %d already reserved\n", lm->id, + DRM_DEV_DEBUG("lm %d pp %d already reserved\n", lm->id, (*pp)->id); return false; } @@ -539,7 +539,7 @@ static int _dpu_rm_reserve_lms( int i, rc = 0; if (!reqs->topology->num_lm) { - DPU_ERROR("invalid number of lm: %d\n", reqs->topology->num_lm); + DRM_DEV_ERROR("invalid number of lm: %d\n", reqs->topology->num_lm); return -EINVAL; } @@ -579,7 +579,7 @@ static int _dpu_rm_reserve_lms( } if (lm_count != reqs->topology->num_lm) { - DPU_DEBUG("unable to find appropriate mixers\n"); + DRM_DEV_DEBUG("unable to find appropriate mixers\n"); return -ENAVAIL; } @@ -619,13 +619,13 @@ static int _dpu_rm_reserve_ctls( has_split_display = BIT(DPU_CTL_SPLIT_DISPLAY) & features; - DPU_DEBUG("ctl %d caps 0x%lX\n", iter.blk->id, features); + DRM_DEV_DEBUG("ctl %d caps 0x%lX\n", iter.blk->id, features); if (top->needs_split_display != has_split_display) continue; ctls[i] = iter.blk; - DPU_DEBUG("ctl %d match\n", iter.blk->id); + DRM_DEV_DEBUG("ctl %d match\n", iter.blk->id); if (++i == top->num_ctl) break; @@ -679,7 +679,7 @@ static int _dpu_rm_reserve_cdm( } if (!iter.hw) { - DPU_ERROR("couldn't reserve cdm for type %d id %d\n", type, id); + DRM_DEV_ERROR("couldn't reserve cdm for type %d id %d\n", type, id); return -ENAVAIL; } @@ -703,7 +703,7 @@ static int _dpu_rm_reserve_intf( continue; if (RESERVED_BY_OTHER(iter.blk, rsvp)) { - DPU_ERROR("type %d id %d already reserved\n", type, id); + DRM_DEV_ERROR("type %d id %d already reserved\n", type, id); return -ENAVAIL; } @@ -715,7 +715,7 @@ static int _dpu_rm_reserve_intf( /* Shouldn't happen since intfs are fixed at probe */ if (!iter.hw) { - DPU_ERROR("couldn't find type %d id %d\n", type, id); + DRM_DEV_ERROR("couldn't find type %d id %d\n", type, id); return -EINVAL; } @@ -765,7 +765,7 @@ static int _dpu_rm_make_next_rsvp( ret = _dpu_rm_reserve_lms(rm, rsvp, reqs); if (ret) { - DPU_ERROR("unable to find appropriate mixers\n"); + DRM_DEV_ERROR("unable to find appropriate mixers\n"); return ret; } @@ -781,7 +781,7 @@ static int _dpu_rm_make_next_rsvp( _dpu_rm_reserve_ctls(rm, rsvp, &topology); } if (ret) { - DPU_ERROR("unable to find appropriate CTL\n"); + DRM_DEV_ERROR("unable to find appropriate CTL\n"); return ret; } @@ -816,7 +816,7 @@ static int _dpu_rm_populate_requirements( } if (!reqs->topology) { - DPU_ERROR("invalid topology for the display\n"); + DRM_DEV_ERROR("invalid topology for the display\n"); return -EINVAL; } @@ -846,7 +846,7 @@ static struct dpu_rm_rsvp *_dpu_rm_get_rsvp( struct dpu_rm_rsvp *i; if (!rm || !enc) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return NULL; } @@ -891,7 +891,7 @@ static void _dpu_rm_release_rsvp( if (!rsvp) return; - DPU_DEBUG("rel rsvp %d enc %d\n", rsvp->seq, rsvp->enc_id); + DRM_DEV_DEBUG("rel rsvp %d enc %d\n", rsvp->seq, rsvp->enc_id); list_for_each_entry_safe(rsvp_c, rsvp_n, &rm->rsvps, list) { if (rsvp == rsvp_c) { @@ -904,13 +904,13 @@ static void _dpu_rm_release_rsvp( list_for_each_entry(blk, &rm->hw_blks[type], list) { if (blk->rsvp == rsvp) { blk->rsvp = NULL; - DPU_DEBUG("rel rsvp %d enc %d %d %d\n", + DRM_DEV_DEBUG("rel rsvp %d enc %d %d %d\n", rsvp->seq, rsvp->enc_id, blk->type, blk->id); } if (blk->rsvp_nxt == rsvp) { blk->rsvp_nxt = NULL; - DPU_DEBUG("rel rsvp_nxt %d enc %d %d %d\n", + DRM_DEV_DEBUG("rel rsvp_nxt %d enc %d %d %d\n", rsvp->seq, rsvp->enc_id, blk->type, blk->id); } @@ -926,7 +926,7 @@ void dpu_rm_release(struct dpu_rm *rm, struct drm_encoder *enc) struct drm_connector *conn; if (!rm || !enc) { - DPU_ERROR("invalid params\n"); + DRM_DEV_ERROR("invalid params\n"); return; } @@ -934,13 +934,13 @@ void dpu_rm_release(struct dpu_rm *rm, struct drm_encoder *enc) rsvp = _dpu_rm_get_rsvp(rm, enc); if (!rsvp) { - DPU_ERROR("failed to find rsvp for enc %d\n", enc->base.id); + DRM_DEV_ERROR("failed to find rsvp for enc %d\n", enc->base.id); goto end; } conn = _dpu_rm_get_connector(enc); if (!conn) { - DPU_ERROR("failed to get connector for enc %d\n", enc->base.id); + DRM_DEV_ERROR("failed to get connector for enc %d\n", enc->base.id); goto end; } @@ -988,7 +988,7 @@ int dpu_rm_reserve( int ret; if (!rm || !enc || !crtc_state || !conn_state) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return -EINVAL; } @@ -1007,7 +1007,7 @@ int dpu_rm_reserve( ret = _dpu_rm_populate_requirements(rm, enc, crtc_state, conn_state, &reqs, topology); if (ret) { - DPU_ERROR("failed to populate hw requirements\n"); + DRM_DEV_ERROR("failed to populate hw requirements\n"); goto end; } @@ -1035,7 +1035,7 @@ int dpu_rm_reserve( * atomic_check phase by using this CLEAR bit */ if (rsvp_cur && test_only && RM_RQ_CLEAR(&reqs)) { - DPU_DEBUG("test_only & CLEAR: clear rsvp[s%de%d]\n", + DRM_DEV_DEBUG("test_only & CLEAR: clear rsvp[s%de%d]\n", rsvp_cur->seq, rsvp_cur->enc_id); _dpu_rm_release_rsvp(rm, rsvp_cur, conn_state->connector); rsvp_cur = NULL; @@ -1049,7 +1049,7 @@ int dpu_rm_reserve( _dpu_rm_print_rsvps(rm, DPU_RM_STAGE_AFTER_RSVPNEXT); if (ret) { - DPU_ERROR("failed to reserve hw resources: %d\n", ret); + DRM_DEV_ERROR("failed to reserve hw resources: %d\n", ret); _dpu_rm_release_rsvp(rm, rsvp_nxt, conn_state->connector); } else if (test_only && !RM_RQ_LOCK(&reqs)) { /* @@ -1057,12 +1057,12 @@ int dpu_rm_reserve( * However, if the user requests LOCK, then keep the reservation * made during the atomic_check phase. */ - DPU_DEBUG("test_only: discard test rsvp[s%de%d]\n", + DRM_DEV_DEBUG("test_only: discard test rsvp[s%de%d]\n", rsvp_nxt->seq, rsvp_nxt->enc_id); _dpu_rm_release_rsvp(rm, rsvp_nxt, conn_state->connector); } else { if (test_only && RM_RQ_LOCK(&reqs)) - DPU_DEBUG("test_only & LOCK: lock rsvp[s%de%d]\n", + DRM_DEV_DEBUG("test_only & LOCK: lock rsvp[s%de%d]\n", rsvp_nxt->seq, rsvp_nxt->enc_id); _dpu_rm_release_rsvp(rm, rsvp_cur, conn_state->connector); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c index 2955282..a22489a 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c @@ -31,7 +31,7 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id) int rc; if (!vbif || !vbif->cap || !vbif->ops.get_halt_ctrl) { - DPU_ERROR("invalid arguments vbif %d\n", vbif != 0); + DRM_DEV_ERROR("invalid arguments vbif %d\n", vbif != 0); return -EINVAL; } @@ -49,11 +49,11 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id) if (!status) { rc = -ETIMEDOUT; - DPU_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n", + DRM_DEV_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n", vbif->idx - VBIF_0, xin_id); } else { rc = 0; - DPU_DEBUG("VBIF %d client %d is halted\n", + DRM_DEV_DEBUG("VBIF %d client %d is halted\n", vbif->idx - VBIF_0, xin_id); } @@ -94,7 +94,7 @@ static void _dpu_vbif_apply_dynamic_ot_limit(struct dpu_hw_vbif *vbif, } } - DPU_DEBUG("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n", + DRM_DEV_DEBUG("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n", vbif->idx - VBIF_0, params->xin_id, params->width, params->height, params->frame_rate, pps, *ot_lim); @@ -113,7 +113,7 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif, u32 val; if (!vbif || !vbif->cap) { - DPU_ERROR("invalid arguments vbif %d\n", vbif != 0); + DRM_DEV_ERROR("invalid arguments vbif %d\n", vbif != 0); return -EINVAL; } @@ -140,7 +140,7 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif, } exit: - DPU_DEBUG("vbif:%d xin:%d ot_lim:%d\n", + DRM_DEV_DEBUG("vbif:%d xin:%d ot_lim:%d\n", vbif->idx - VBIF_0, params->xin_id, ot_lim); return ot_lim; } @@ -162,7 +162,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms, int ret, i; if (!dpu_kms) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } mdp = dpu_kms->hw_mdp; @@ -174,7 +174,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms, } if (!vbif || !mdp) { - DPU_DEBUG("invalid arguments vbif %d mdp %d\n", + DRM_DEV_DEBUG("invalid arguments vbif %d mdp %d\n", vbif != 0, mdp != 0); return; } @@ -224,7 +224,7 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms, int i; if (!dpu_kms || !params || !dpu_kms->hw_mdp) { - DPU_ERROR("invalid arguments\n"); + DRM_DEV_ERROR("invalid arguments\n"); return; } mdp = dpu_kms->hw_mdp; @@ -238,12 +238,12 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms, } if (!vbif || !vbif->cap) { - DPU_ERROR("invalid vbif %d\n", params->vbif_idx); + DRM_DEV_ERROR("invalid vbif %d\n", params->vbif_idx); return; } if (!vbif->ops.set_qos_remap || !mdp->ops.setup_clk_force_ctrl) { - DPU_DEBUG("qos remap not supported\n"); + DRM_DEV_DEBUG("qos remap not supported\n"); return; } @@ -251,14 +251,14 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms, &vbif->cap->qos_nrt_tbl; if (!qos_tbl->npriority_lvl || !qos_tbl->priority_lvl) { - DPU_DEBUG("qos tbl not defined\n"); + DRM_DEV_DEBUG("qos tbl not defined\n"); return; } forced_on = mdp->ops.setup_clk_force_ctrl(mdp, params->clk_ctrl, true); for (i = 0; i < qos_tbl->npriority_lvl; i++) { - DPU_DEBUG("vbif:%d xin:%d lvl:%d/%d\n", + DRM_DEV_DEBUG("vbif:%d xin:%d lvl:%d/%d\n", params->vbif_idx, params->xin_id, i, qos_tbl->priority_lvl[i]); vbif->ops.set_qos_remap(vbif, params->xin_id, i, @@ -275,7 +275,7 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms) u32 i, pnd, src; if (!dpu_kms) { - DPU_ERROR("invalid argument\n"); + DRM_DEV_ERROR("invalid argument\n"); return; } @@ -297,7 +297,7 @@ void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms) int i, j; if (!dpu_kms) { - DPU_ERROR("invalid argument\n"); + DRM_DEV_ERROR("invalid argument\n"); return; } @@ -326,7 +326,7 @@ int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root) dpu_kms->debugfs_vbif = debugfs_create_dir("vbif", debugfs_root); if (!dpu_kms->debugfs_vbif) { - DPU_ERROR("failed to create vbif debugfs\n"); + DRM_DEV_ERROR("failed to create vbif debugfs\n"); return -EINVAL; } -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mamta Shukla Subject: [PATCH DRM] drm: msm: disp: dpu1: Use DRM_DEV_* instead of DPU_* Date: Sat, 20 Oct 2018 23:33:54 +0530 Message-ID: <20181020180354.GA338@armorer> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pl1-x644.google.com (mail-pl1-x644.google.com [IPv6:2607:f8b0:4864:20::644]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2656A6E2B7 for ; Sat, 20 Oct 2018 18:04:02 +0000 (UTC) Received: by mail-pl1-x644.google.com with SMTP id y11-v6so17244893plt.3 for ; Sat, 20 Oct 2018 11:04:02 -0700 (PDT) Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: outreachy-kernel@googlegroups.com Cc: airlied@linux.ie, daniel.vetter@ffwll.ch, sean@poorly.run, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VXNlIERSTV9ERVZfRVJST1IvREVCVUcgaW5zdGVhZCBvZiBEUFVfRVJST1IvREVCVUcgIHRvIGdl bmVyYXRlCmRybS1mb3JtYXR0ZWQgc3BlY2lmaWMgbG9nIG1lc3NhZ2VzIGluIHRoZSBLZXJuZWwg bG9nIGluIGNhc2Ugb2YKbXVsdGlwbGUgaW5zdGFuY2VzLgoKU2lnbmVkLW9mZi1ieTogTWFtdGEg U2h1a2xhIDxtYW10YXNodWtsYTU1NUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMgICAgICAgfCAgNTggKysrLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jICAgICAgfCAgNjAgKysrLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICAgICAgfCAxNzYg KysrKysrKysrKy0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5jICAgICAgICB8IDEzNCArKysrKysrKy0tLS0tLS0tCiAuLi4vZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfY21kLmMgICB8ICA0MCArKy0tLQogLi4uL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jICAgfCAgNDIgKystLS0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mb3JtYXRzLmMgICAgICAgIHwgIDEwICst CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jICAgICB8ICAg MiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NkbS5jICAgICAgICAg fCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYyAgICAg ICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5j ICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xt LmMgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19waW5ncG9uZy5jICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfc3NwcC5jICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3RvcC5jICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9pcnEuYyAgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAgICAgICB8ICA5MCArKysrKy0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X21kc3MuYyAgICAgICAgICAgfCAgMTAgKy0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jICAgICAgICAgIHwgMTM0ICsr KysrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jICAg ICAgICAgICAgIHwgIDk2ICsrKysrLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfdmJpZi5jICAgICAgICAgICB8ICAzMiArKy0tCiAyMSBmaWxlcyBjaGFuZ2VkLCA0NTEg aW5zZXJ0aW9ucygrKSwgNDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKaW5kZXggODc5YzEzZi4uYjlhYTQ1MiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMKQEAgLTg0LDEyICs4NCwx MiBAQCBzdGF0aWMgaW50IF9kcHVfY29yZV9pcnFfZW5hYmxlKHN0cnVjdCBkcHVfa21zICpkcHVf a21zLCBpbnQgaXJxX2lkeCkKIAlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmh3X2ludHIgfHwK IAkJCSFkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3VudHMgfHwKIAkJCSFkcHVfa21zLT5pcnFf b2JqLmlycV9jb3VudHMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCURS TV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQog CiAJaWYgKGlycV9pZHggPCAwIHx8IGlycV9pZHggPj0gZHB1X2ttcy0+aHdfaW50ci0+aXJxX2lk eF90Ymxfc2l6ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgSVJRIGluZGV4OiBbJWRdXG4iLCBp cnFfaWR4KTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBJUlEgaW5kZXg6IFslZF1cbiIsIGly cV9pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEwMiwxNSArMTAyLDE1IEBAIHN0 YXRpYyBpbnQgX2RwdV9jb3JlX2lycV9lbmFibGUoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIGlu dCBpcnFfaWR4KQogCQkJCWRwdV9rbXMtPmh3X2ludHIsCiAJCQkJaXJxX2lkeCk7CiAJCWlmIChy ZXQpCi0JCQlEUFVfRVJST1IoIkZhaWwgdG8gZW5hYmxlIElSUSBmb3IgaXJxX2lkeDolZFxuIiwK KwkJCURSTV9ERVZfRVJST1IoIkZhaWwgdG8gZW5hYmxlIElSUSBmb3IgaXJxX2lkeDolZFxuIiwK IAkJCQkJaXJxX2lkeCk7CiAKLQkJRFBVX0RFQlVHKCJpcnFfaWR4PSVkIHJldD0lZFxuIiwgaXJx X2lkeCwgcmV0KTsKKwkJRFJNX0RFVl9ERUJVRygiaXJxX2lkeD0lZCByZXQ9JWRcbiIsIGlycV9p ZHgsIHJldCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRwdV9rbXMtPmlycV9vYmouY2JfbG9j aywgaXJxX2ZsYWdzKTsKIAkJLyogZW1wdHkgY2FsbGJhY2sgbGlzdCBidXQgaW50ZXJydXB0IGlz IGVuYWJsZWQgKi8KIAkJaWYgKGxpc3RfZW1wdHkoJmRwdV9rbXMtPmlycV9vYmouaXJxX2NiX3Ri bFtpcnFfaWR4XSkpCi0JCQlEUFVfRVJST1IoImlycV9pZHg9JWQgZW5hYmxlZCB3aXRoIG5vIGNh bGxiYWNrXG4iLAorCQkJRFJNX0RFVl9FUlJPUigiaXJxX2lkeD0lZCBlbmFibGVkIHdpdGggbm8g Y2FsbGJhY2tcbiIsCiAJCQkJCWlycV9pZHgpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk cHVfa21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9mbGFncyk7CiAJfQpAQCAtMTIzLDcgKzEyMyw3 IEBAIGludCBkcHVfY29yZV9pcnFfZW5hYmxlKHN0cnVjdCBkcHVfa21zICpkcHVfa21zLCBpbnQg KmlycV9pZHhzLCB1MzIgaXJxX2NvdW50KQogCWludCBpLCByZXQgPSAwLCBjb3VudHM7CiAKIAlp ZiAoIWRwdV9rbXMgfHwgIWlycV9pZHhzIHx8ICFpcnFfY291bnQpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIHBhcmFtc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsK IAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBzdGF0aWMgaW50 IF9kcHVfY29yZV9pcnFfZGlzYWJsZShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9p ZHgpCiAJaW50IHJldCA9IDAsIGVuYWJsZV9jb3VudDsKIAogCWlmICghZHB1X2ttcyB8fCAhZHB1 X2ttcy0+aHdfaW50ciB8fCAhZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291bnRzKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBh cmFtc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChpcnFfaWR4IDwgMCB8fCBp cnFfaWR4ID49IGRwdV9rbXMtPmh3X2ludHItPmlycV9pZHhfdGJsX3NpemUpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIElSUSBpbmRleDogWyVkXVxuIiwgaXJxX2lkeCk7CisJCURSTV9ERVZfRVJS T1IoImludmFsaWQgSVJRIGluZGV4OiBbJWRdXG4iLCBpcnFfaWR4KTsKIAkJcmV0dXJuIC1FSU5W QUw7CiAJfQogCkBAIC0xNjUsOSArMTY1LDkgQEAgc3RhdGljIGludCBfZHB1X2NvcmVfaXJxX2Rp c2FibGUoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIGludCBpcnFfaWR4KQogCQkJCWRwdV9rbXMt Pmh3X2ludHIsCiAJCQkJaXJxX2lkeCk7CiAJCWlmIChyZXQpCi0JCQlEUFVfRVJST1IoIkZhaWwg dG8gZGlzYWJsZSBJUlEgZm9yIGlycV9pZHg6JWRcbiIsCisJCQlEUk1fREVWX0VSUk9SKCJGYWls IHRvIGRpc2FibGUgSVJRIGZvciBpcnFfaWR4OiVkXG4iLAogCQkJCQlpcnFfaWR4KTsKLQkJRFBV X0RFQlVHKCJpcnFfaWR4PSVkIHJldD0lZFxuIiwgaXJxX2lkeCwgcmV0KTsKKwkJRFJNX0RFVl9E RUJVRygiaXJxX2lkeD0lZCByZXQ9JWRcbiIsIGlycV9pZHgsIHJldCk7CiAJfQogCiAJcmV0dXJu IHJldDsKQEAgLTE3OCw3ICsxNzgsNyBAQCBpbnQgZHB1X2NvcmVfaXJxX2Rpc2FibGUoc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXMsIGludCAqaXJxX2lkeHMsIHUzMiBpcnFfY291bnQpCiAJaW50IGks IHJldCA9IDAsIGNvdW50czsKIAogCWlmICghZHB1X2ttcyB8fCAhaXJxX2lkeHMgfHwgIWlycV9j b3VudCkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBwYXJhbXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5OSw3 ICsxOTksNyBAQCB1MzIgZHB1X2NvcmVfaXJxX3JlYWQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMs IGludCBpcnFfaWR4LCBib29sIGNsZWFyKQogCQlyZXR1cm4gMDsKIAogCWlmIChpcnFfaWR4IDwg MCkgewotCQlEUFVfRVJST1IoIlslcFNdIGludmFsaWQgaXJxX2lkeD0lZFxuIiwKKwkJRFJNX0RF Vl9FUlJPUigiWyVwU10gaW52YWxpZCBpcnFfaWR4PSVkXG4iLAogCQkJCV9fYnVpbHRpbl9yZXR1 cm5fYWRkcmVzcygwKSwgaXJxX2lkeCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTIxNCwxMiArMjE0 LDEyIEBAIGludCBkcHVfY29yZV9pcnFfcmVnaXN0ZXJfY2FsbGJhY2soc3RydWN0IGRwdV9rbXMg KmRwdV9rbXMsIGludCBpcnFfaWR4LAogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJaWYg KCFkcHVfa21zIHx8ICFkcHVfa21zLT5pcnFfb2JqLmlycV9jYl90YmwpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1zXG4i KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFyZWdpc3Rlcl9pcnFfY2IgfHwgIXJl Z2lzdGVyX2lycV9jYi0+ZnVuYykgewotCQlEUFVfRVJST1IoImludmFsaWQgaXJxX2NiOiVkIGZ1 bmM6JWRcbiIsCisJCURSTV9ERVZfRVJST1IoImludmFsaWQgaXJxX2NiOiVkIGZ1bmM6JWRcbiIs CiAJCQkJcmVnaXN0ZXJfaXJxX2NiICE9IE5VTEwsCiAJCQkJcmVnaXN0ZXJfaXJxX2NiID8KIAkJ CQkJcmVnaXN0ZXJfaXJxX2NiLT5mdW5jICE9IE5VTEwgOiAtMSk7CkBAIC0yMjcsMTEgKzIyNywx MSBAQCBpbnQgZHB1X2NvcmVfaXJxX3JlZ2lzdGVyX2NhbGxiYWNrKHN0cnVjdCBkcHVfa21zICpk cHVfa21zLCBpbnQgaXJxX2lkeCwKIAl9CiAKIAlpZiAoaXJxX2lkeCA8IDAgfHwgaXJxX2lkeCA+ PSBkcHVfa21zLT5od19pbnRyLT5pcnFfaWR4X3RibF9zaXplKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBJUlEgaW5kZXg6IFslZF1cbiIsIGlycV9pZHgpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIElSUSBpbmRleDogWyVkXVxuIiwgaXJxX2lkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0K IAotCURQVV9ERUJVRygiWyVwU10gaXJxX2lkeD0lZFxuIiwgX19idWlsdGluX3JldHVybl9hZGRy ZXNzKDApLCBpcnFfaWR4KTsKKwlEUk1fREVWX0RFQlVHKCJbJXBTXSBpcnFfaWR4PSVkXG4iLCBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGlycV9pZHgpOwogCiAJc3Bpbl9sb2NrX2lycXNh dmUoJmRwdV9rbXMtPmlycV9vYmouY2JfbG9jaywgaXJxX2ZsYWdzKTsKIAl0cmFjZV9kcHVfY29y ZV9pcnFfcmVnaXN0ZXJfY2FsbGJhY2soaXJxX2lkeCwgcmVnaXN0ZXJfaXJxX2NiKTsKQEAgLTI0 OSwxMiArMjQ5LDEyIEBAIGludCBkcHVfY29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFjayhzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9pZHgsCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxh Z3M7CiAKIAlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmlycV9vYmouaXJxX2NiX3RibCkgewot CQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxp ZCBwYXJhbXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIXJlZ2lzdGVyX2ly cV9jYiB8fCAhcmVnaXN0ZXJfaXJxX2NiLT5mdW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBp cnFfY2I6JWQgZnVuYzolZFxuIiwKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBpcnFfY2I6JWQg ZnVuYzolZFxuIiwKIAkJCQlyZWdpc3Rlcl9pcnFfY2IgIT0gTlVMTCwKIAkJCQlyZWdpc3Rlcl9p cnFfY2IgPwogCQkJCQlyZWdpc3Rlcl9pcnFfY2ItPmZ1bmMgIT0gTlVMTCA6IC0xKTsKQEAgLTI2 MiwxMSArMjYyLDExIEBAIGludCBkcHVfY29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFjayhzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9pZHgsCiAJfQogCiAJaWYgKGlycV9pZHggPCAw IHx8IGlycV9pZHggPj0gZHB1X2ttcy0+aHdfaW50ci0+aXJxX2lkeF90Ymxfc2l6ZSkgewotCQlE UFVfRVJST1IoImludmFsaWQgSVJRIGluZGV4OiBbJWRdXG4iLCBpcnFfaWR4KTsKKwkJRFJNX0RF Vl9FUlJPUigiaW52YWxpZCBJUlEgaW5kZXg6IFslZF1cbiIsIGlycV9pZHgpOwogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CiAKLQlEUFVfREVCVUcoIlslcFNdIGlycV9pZHg9JWRcbiIsIF9fYnVpbHRp bl9yZXR1cm5fYWRkcmVzcygwKSwgaXJxX2lkeCk7CisJRFJNX0RFVl9ERUJVRygiWyVwU10gaXJx X2lkeD0lZFxuIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBpcnFfaWR4KTsKIAogCXNw aW5fbG9ja19pcnFzYXZlKCZkcHVfa21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9mbGFncyk7CiAJ dHJhY2VfZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJfY2FsbGJhY2soaXJxX2lkeCwgcmVnaXN0ZXJf aXJxX2NiKTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBpbnQgZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJf Y2FsbGJhY2soc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIGludCBpcnFfaWR4LAogCS8qIGVtcHR5 IGNhbGxiYWNrIGxpc3QgYnV0IGludGVycnVwdCBpcyBzdGlsbCBlbmFibGVkICovCiAJaWYgKGxp c3RfZW1wdHkoJmRwdV9rbXMtPmlycV9vYmouaXJxX2NiX3RibFtpcnFfaWR4XSkgJiYKIAkJCWF0 b21pY19yZWFkKCZkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3VudHNbaXJxX2lkeF0pKQotCQlE UFVfRVJST1IoImlycV9pZHg9JWQgZW5hYmxlZCB3aXRoIG5vIGNhbGxiYWNrXG4iLCBpcnFfaWR4 KTsKKwkJRFJNX0RFVl9FUlJPUigiaXJxX2lkeD0lZCBlbmFibGVkIHdpdGggbm8gY2FsbGJhY2tc biIsIGlycV9pZHgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwdV9rbXMtPmlycV9vYmou Y2JfbG9jaywgaXJxX2ZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHN0 YXRpYyBpbnQgZHB1X2RlYnVnZnNfY29yZV9pcnFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKnYpCiAJaW50IGksIGlycV9jb3VudCwgZW5hYmxlX2NvdW50LCBjYl9jb3VudDsKIAogCWlm ICghaXJxX29iaiB8fCAhaXJxX29iai0+ZW5hYmxlX2NvdW50cyB8fCAhaXJxX29iai0+aXJxX2Ni X3RibCkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZf RVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzc3 LDEzICszNzcsMTMgQEAgdm9pZCBkcHVfY29yZV9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHB1X2tt cyAqZHB1X2ttcykKIAlpbnQgaTsKIAogCWlmICghZHB1X2ttcykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgZHB1X2ttc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7 CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKCFkcHVfa21zLT5kZXYpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGRybSBkZXZpY2VcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGRybSBkZXZp Y2VcbiIpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmICghZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0 ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgZGV2aWNlIHByaXZhdGVcbiIpOworCQlEUk1fREVW X0VSUk9SKCJpbnZhbGlkIGRldmljZSBwcml2YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlwcml2 ID0gZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTQyMSwxMyArNDIxLDEzIEBAIHZvaWQg ZHB1X2NvcmVfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIAlpbnQgaTsK IAogCWlmICghZHB1X2ttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJ CURSTV9ERVZfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CiAJCXJldHVybjsKIAl9IGVsc2Ug aWYgKCFkcHVfa21zLT5kZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRybSBkZXZpY2VcbiIp OworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGRybSBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJ fSBlbHNlIGlmICghZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImlu dmFsaWQgZGV2aWNlIHByaXZhdGVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGRldmlj ZSBwcml2YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlwcml2ID0gZHB1X2ttcy0+ZGV2LT5kZXZf cHJpdmF0ZTsKQEAgLTQzNiw3ICs0MzYsNyBAQCB2b2lkIGRwdV9jb3JlX2lycV91bmluc3RhbGwo c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJZm9yIChpID0gMDsgaSA8IGRwdV9rbXMtPmlycV9v YmoudG90YWxfaXJxczsgaSsrKQogCQlpZiAoYXRvbWljX3JlYWQoJmRwdV9rbXMtPmlycV9vYmou ZW5hYmxlX2NvdW50c1tpXSkgfHwKIAkJCQkhbGlzdF9lbXB0eSgmZHB1X2ttcy0+aXJxX29iai5p cnFfY2JfdGJsW2ldKSkKLQkJCURQVV9FUlJPUigiaXJxX2lkeD0lZCBzdGlsbCBlbmFibGVkL3Jl Z2lzdGVyZWRcbiIsIGkpOworCQkJRFJNX0RFVl9FUlJPUigiaXJxX2lkeD0lZCBzdGlsbCBlbmFi bGVkL3JlZ2lzdGVyZWRcbiIsIGkpOwogCiAJZHB1X2NsZWFyX2FsbF9pcnFzKGRwdV9rbXMpOwog CWRwdV9kaXNhYmxlX2FsbF9pcnFzKGRwdV9rbXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCmluZGV4IDQxYzUxOTEuLjVlNGFjYTIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKQEAgLTQ0LDEzICs0 NCwxMyBAQCBzdGF0aWMgc3RydWN0IGRwdV9rbXMgKl9kcHVfY3J0Y19nZXRfa21zKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwogCiAJaWYgKCFj cnRjLT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGRldmljZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZGV2aWNlXG4iKTsKIAkJ cmV0dXJuIE5VTEw7CiAJfQogCiAJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAJaWYg KCFwcml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGttc1xuIik7CisJ CURSTV9ERVZfRVJST1IoImludmFsaWQga21zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBA IC03Myw3ICs3Myw3IEBAIHN0YXRpYyBib29sIF9kcHVfY29yZV92aWRlb19tb2RlX2ludGZfY29u bmVjdGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlkcm1fZm9yX2VhY2hfY3J0Yyh0bXBfY3J0 YywgY3J0Yy0+ZGV2KSB7CiAJCWlmICgoZHB1X2NydGNfZ2V0X2ludGZfbW9kZSh0bXBfY3J0Yykg PT0gSU5URl9NT0RFX1ZJREVPKSAmJgogCQkJCV9kcHVfY29yZV9wZXJmX2NydGNfaXNfcG93ZXJf b24odG1wX2NydGMpKSB7Ci0JCQlEUFVfREVCVUcoInZpZGVvIGludGVyZmFjZSBjb25uZWN0ZWQg Y3J0YzolZFxuIiwKKwkJCURSTV9ERVZfREVCVUcoInZpZGVvIGludGVyZmFjZSBjb25uZWN0ZWQg Y3J0YzolZFxuIiwKIAkJCQl0bXBfY3J0Yy0+YmFzZS5pZCk7CiAJCQlpbnRmX2Nvbm5lY3RlZCA9 IHRydWU7CiAJCQlnb3RvIGVuZDsKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9j b3JlX3BlcmZfY2FsY19jcnRjKHN0cnVjdCBkcHVfa21zICprbXMsCiAJaW50IGk7CiAKIAlpZiAo IWttcyB8fCAha21zLT5jYXRhbG9nIHx8ICFjcnRjIHx8ICFzdGF0ZSB8fCAhcGVyZikgewotCQlE UFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBz dGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jYWxjX2NydGMoc3RydWN0IGRwdV9rbXMgKmttcywK IAkJcGVyZi0+Y29yZV9jbGtfcmF0ZSA9IGttcy0+cGVyZi5maXhfY29yZV9jbGtfcmF0ZTsKIAl9 CiAKLQlEUFVfREVCVUcoCisJRFJNX0RFVl9ERUJVRygKIAkJImNydGM9JWQgY2xrX3JhdGU9JWxs dSBjb3JlX2liPSVsbHUgY29yZV9hYj0lbGx1IGxsY2NfaWI9JWxsdSBsbGNjX2FiPSVsbHUgbWVt X2liPSVsbHUgbWVtX2FiPSVsbHVcbiIsCiAJCQljcnRjLT5iYXNlLmlkLCBwZXJmLT5jb3JlX2Ns a19yYXRlLAogCQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NTk9DXSwKQEAgLTE0NSwxMyArMTQ1LDEzIEBAIGludCBkcHVfY29yZV9wZXJmX2NydGNfY2hl Y2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWludCBpOwogCiAJaWYgKCFjcnRjIHx8ICFzdGF0 ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCURSTV9ERVZfRVJST1IoImlu dmFsaWQgY3J0Y1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWttcyA9IF9kcHVfY3J0 Y19nZXRfa21zKGNydGMpOwogCWlmICgha21zIHx8ICFrbXMtPmNhdGFsb2cpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBh cmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBpbnQg ZHB1X2NvcmVfcGVyZl9jcnRjX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKnRtcF9jc3RhdGUgPQogCQkJCQl0b19kcHVfY3J0Y19zdGF0ZSh0 bXBfY3J0Yy0+c3RhdGUpOwogCi0JCQkJRFBVX0RFQlVHKCJjcnRjOiVkIGJ3OiVsbHUgY3RybDol ZFxuIiwKKwkJCQlEUk1fREVWX0RFQlVHKCJjcnRjOiVkIGJ3OiVsbHUgY3RybDolZFxuIiwKIAkJ CQkJdG1wX2NydGMtPmJhc2UuaWQsCiAJCQkJCXRtcF9jc3RhdGUtPm5ld19wZXJmLmJ3X2N0bFtp XSwKIAkJCQkJdG1wX2NzdGF0ZS0+YndfY29udHJvbCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgaW50 IGRwdV9jb3JlX3BlcmZfY3J0Y19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIAkJLyog Y29udmVydCBiYW5kd2lkdGggdG8ga2IgKi8KIAkJYncgPSBESVZfUk9VTkRfVVBfVUxMKGJ3X3N1 bV9vZl9pbnRmcywgMTAwMCk7Ci0JCURQVV9ERUJVRygiY2FsY3VsYXRlZCBiYW5kd2lkdGg9JXVr XG4iLCBidyk7CisJCURSTV9ERVZfREVCVUcoImNhbGN1bGF0ZWQgYmFuZHdpZHRoPSV1a1xuIiwg YncpOwogCiAJCWlzX3ZpZGVvX21vZGUgPSBkcHVfY3J0Y19nZXRfaW50Zl9tb2RlKGNydGMpID09 IElOVEZfTU9ERV9WSURFTzsKIAkJdGhyZXNob2xkID0gKGlzX3ZpZGVvX21vZGUgfHwKQEAgLTIw MSwxNSArMjAxLDE1IEBAIGludCBkcHVfY29yZV9wZXJmX2NydGNfY2hlY2soc3RydWN0IGRybV9j cnRjICpjcnRjLAogCQkJa21zLT5jYXRhbG9nLT5wZXJmLm1heF9id19sb3cgOgogCQkJa21zLT5j YXRhbG9nLT5wZXJmLm1heF9id19oaWdoOwogCi0JCURQVV9ERUJVRygiZmluYWwgdGhyZXNob2xk IGJ3IGxpbWl0ID0gJWRcbiIsIHRocmVzaG9sZCk7CisJCURSTV9ERVZfREVCVUcoImZpbmFsIHRo cmVzaG9sZCBidyBsaW1pdCA9ICVkXG4iLCB0aHJlc2hvbGQpOwogCiAJCWlmICghZHB1X2NzdGF0 ZS0+YndfY29udHJvbCkgewotCQkJRFBVX0RFQlVHKCJieXBhc3MgYmFuZHdpZHRoIGNoZWNrXG4i KTsKKwkJCURSTV9ERVZfREVCVUcoImJ5cGFzcyBiYW5kd2lkdGggY2hlY2tcbiIpOwogCQl9IGVs c2UgaWYgKCF0aHJlc2hvbGQpIHsKLQkJCURQVV9FUlJPUigibm8gYmFuZHdpZHRoIGxpbWl0cyBz cGVjaWZpZWRcbiIpOworCQkJRFJNX0RFVl9FUlJPUigibm8gYmFuZHdpZHRoIGxpbWl0cyBzcGVj aWZpZWRcbiIpOwogCQkJcmV0dXJuIC1FMkJJRzsKIAkJfSBlbHNlIGlmIChidyA+IHRocmVzaG9s ZCkgewotCQkJRFBVX0VSUk9SKCJleGNlZWRzIGJhbmR3aWR0aDogJXVrYiA+ICV1a2JcbiIsIGJ3 LAorCQkJRFJNX0RFVl9FUlJPUigiZXhjZWVkcyBiYW5kd2lkdGg6ICV1a2IgPiAldWtiXG4iLCBi dywKIAkJCQkJdGhyZXNob2xkKTsKIAkJCXJldHVybiAtRTJCSUc7CiAJCX0KQEAgLTIzOCw3ICsy MzgsNyBAQCBzdGF0aWMgaW50IF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3Qg ZHB1X2ttcyAqa21zLAogCQkJCW1heChwZXJmLm1heF9wZXJfcGlwZV9pYltidXNfaWRdLAogCQkJ CWRwdV9jc3RhdGUtPm5ld19wZXJmLm1heF9wZXJfcGlwZV9pYltidXNfaWRdKTsKIAotCQkJRFBV X0RFQlVHKCJjcnRjPSVkIGJ1c19pZD0lZCBidz0lbGx1XG4iLAorCQkJRFJNX0RFVl9ERUJVRygi Y3J0Yz0lZCBidXNfaWQ9JWQgYnc9JWxsdVxuIiwKIAkJCQl0bXBfY3J0Yy0+YmFzZS5pZCwgYnVz X2lkLAogCQkJCWRwdV9jc3RhdGUtPm5ld19wZXJmLmJ3X2N0bFtidXNfaWRdKTsKIAkJfQpAQCAt MjYzLDEzICsyNjMsMTMgQEAgdm9pZCBkcHVfY29yZV9wZXJmX2NydGNfcmVsZWFzZV9idyhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCiAJaW50IGk7CiAKIAlpZiAoIWNydGMpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOwog CQlyZXR1cm47CiAJfQogCiAJa21zID0gX2RwdV9jcnRjX2dldF9rbXMoY3J0Yyk7CiAJaWYgKCFr bXMgfHwgIWttcy0+Y2F0YWxvZykgewotCQlEUFVfRVJST1IoImludmFsaWQga21zXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yOTUs NyArMjk1LDcgQEAgdm9pZCBkcHVfY29yZV9wZXJmX2NydGNfcmVsZWFzZV9idyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJLyogUmVsZWFzZSB0aGUgYmFuZHdpZHRoICovCiAJaWYgKGttcy0+cGVy Zi5lbmFibGVfYndfcmVsZWFzZSkgewogCQl0cmFjZV9kcHVfY21kX3JlbGVhc2VfYncoY3J0Yy0+ YmFzZS5pZCk7Ci0JCURQVV9ERUJVRygiUmVsZWFzZSBCVyBjcnRjPSVkXG4iLCBjcnRjLT5iYXNl LmlkKTsKKwkJRFJNX0RFVl9ERUJVRygiUmVsZWFzZSBCVyBjcnRjPSVkXG4iLCBjcnRjLT5iYXNl LmlkKTsKIAkJZm9yIChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkr KykgewogCQkJZHB1X2NydGMtPmN1cl9wZXJmLmJ3X2N0bFtpXSA9IDA7CiAJCQlfZHB1X2NvcmVf cGVyZl9jcnRjX3VwZGF0ZV9idXMoa21zLCBjcnRjLCBpKTsKQEAgLTMzMyw3ICszMzMsNyBAQCBz dGF0aWMgdTY0IF9kcHVfY29yZV9wZXJmX2dldF9jb3JlX2Nsa19yYXRlKHN0cnVjdCBkcHVfa21z ICprbXMpCiAJaWYgKGttcy0+cGVyZi5wZXJmX3R1bmUubW9kZSA9PSBEUFVfUEVSRl9NT0RFX0ZJ WEVEKQogCQljbGtfcmF0ZSA9IGttcy0+cGVyZi5maXhfY29yZV9jbGtfcmF0ZTsKIAotCURQVV9E RUJVRygiY2xrOiVsbHVcbiIsIGNsa19yYXRlKTsKKwlEUk1fREVWX0RFQlVHKCJjbGs6JWxsdVxu IiwgY2xrX3JhdGUpOwogCiAJcmV0dXJuIGNsa19yYXRlOwogfQpAQCAtMzUyLDEzICszNTIsMTMg QEAgaW50IGRwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAog CWludCByZXQ7CiAKIAlpZiAoIWNydGMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIp OworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsK IAl9CiAKIAlrbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKIAlpZiAoIWttcyB8fCAha21z LT5jYXRhbG9nKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIpOworCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIGttc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwcml2ID0ga21z LT5kZXYtPmRldl9wcml2YXRlOwpAQCAtMzY2LDcgKzM2Niw3IEBAIGludCBkcHVfY29yZV9wZXJm X2NydGNfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlkcHVfY3J0YyA9IHRvX2RwdV9j cnRjKGNydGMpOwogCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7 CiAKLQlEUFVfREVCVUcoImNydGM6JWQgc3RvcF9yZXE6JWQgY29yZV9jbGs6JWxsdVxuIiwKKwlE Uk1fREVWX0RFQlVHKCJjcnRjOiVkIHN0b3BfcmVxOiVkIGNvcmVfY2xrOiVsbHVcbiIsCiAJCQlj cnRjLT5iYXNlLmlkLCBzdG9wX3JlcSwga21zLT5wZXJmLmNvcmVfY2xrX3JhdGUpOwogCiAJb2xk ID0gJmRwdV9jcnRjLT5jdXJfcGVyZjsKQEAgLTM4OSw3ICszODksNyBAQCBpbnQgZHB1X2NvcmVf cGVyZl9jcnRjX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJCQlvbGQtPmJ3X2N0 bFtpXSkgfHwKIAkJCQkgIChuZXctPm1heF9wZXJfcGlwZV9pYltpXSA8CiAJCQkJCQlvbGQtPm1h eF9wZXJfcGlwZV9pYltpXSkpKSkgewotCQkJCURQVV9ERUJVRygKKwkJCQlEUk1fREVWX0RFQlVH KAogCQkJCQkiY3J0Yz0lZCBwPSVkIG5ld19idz0lbGx1LG9sZF9idz0lbGx1XG4iLAogCQkJCQlj cnRjLT5iYXNlLmlkLCBwYXJhbXNfY2hhbmdlZCwKIAkJCQkJbmV3LT5id19jdGxbaV0sIG9sZC0+ YndfY3RsW2ldKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBpbnQgZHB1X2NvcmVfcGVyZl9jcnRjX3Vw ZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQl1cGRhdGVfY2xrID0gMTsKIAkJfQogCX0g ZWxzZSB7Ci0JCURQVV9ERUJVRygiY3J0Yz0lZCBkaXNhYmxlXG4iLCBjcnRjLT5iYXNlLmlkKTsK KwkJRFJNX0RFVl9ERUJVRygiY3J0Yz0lZCBkaXNhYmxlXG4iLCBjcnRjLT5iYXNlLmlkKTsKIAkJ bWVtc2V0KG9sZCwgMCwgc2l6ZW9mKCpvbGQpKTsKIAkJbWVtc2V0KG5ldywgMCwgc2l6ZW9mKCpu ZXcpKTsKIAkJdXBkYXRlX2J1cyA9IH4wOwpAQCAtNDI1LDcgKzQyNSw3IEBAIGludCBkcHVfY29y ZV9wZXJmX2NydGNfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJaWYgKHVwZGF0ZV9i dXMgJiBCSVQoaSkpIHsKIAkJCXJldCA9IF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhr bXMsIGNydGMsIGkpOwogCQkJaWYgKHJldCkgewotCQkJCURQVV9FUlJPUigiY3J0Yy0lZDogZmFp bGVkIHRvIHVwZGF0ZSBidyB2b3RlIGZvciBidXMtJWRcbiIsCisJCQkJRFJNX0RFVl9FUlJPUigi Y3J0Yy0lZDogZmFpbGVkIHRvIHVwZGF0ZSBidyB2b3RlIGZvciBidXMtJWRcbiIsCiAJCQkJCSAg Y3J0Yy0+YmFzZS5pZCwgaSk7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KQEAgLTQ0MywxMyArNDQz LDEzIEBAIGludCBkcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKIAogCQlyZXQgPSBfZHB1X2NvcmVfcGVyZl9zZXRfY29yZV9jbGtfcmF0ZShrbXMsIGNsa19y YXRlKTsKIAkJaWYgKHJldCkgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gc2V0ICVzIGNsb2Nr IHJhdGUgJWxsdVxuIiwKKwkJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBzZXQgJXMgY2xvY2sg cmF0ZSAlbGx1XG4iLAogCQkJCQlrbXMtPnBlcmYuY29yZV9jbGstPmNsa19uYW1lLCBjbGtfcmF0 ZSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJa21zLT5wZXJmLmNvcmVfY2xrX3JhdGUgPSBj bGtfcmF0ZTsKLQkJRFBVX0RFQlVHKCJ1cGRhdGUgY2xrIHJhdGUgPSAlbGxkIEhaXG4iLCBjbGtf cmF0ZSk7CisJCURSTV9ERVZfREVCVUcoInVwZGF0ZSBjbGsgcmF0ZSA9ICVsbGQgSFpcbiIsIGNs a19yYXRlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01NTAsNyArNTUwLDcgQEAgaW50IGRwdV9j b3JlX3BlcmZfZGVidWdmc19pbml0KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmLAogCiAJcHJp diA9IHBlcmYtPmRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAg LTU1OCw3ICs1NTgsNyBAQCBpbnQgZHB1X2NvcmVfcGVyZl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRw dV9jb3JlX3BlcmYgKnBlcmYsCiAKIAlwZXJmLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0 ZV9kaXIoImNvcmVfcGVyZiIsIHBhcmVudCk7CiAJaWYgKCFwZXJmLT5kZWJ1Z2ZzX3Jvb3QpIHsK LQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGNvcmUgcGVyZiBkZWJ1Z2ZzXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBjb3JlIHBlcmYgZGVidWdmc1xuIik7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjA0LDcgKzYwNCw3IEBAIGludCBkcHVfY29yZV9w ZXJmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHB1X2NvcmVfcGVyZiAqcGVyZiwKIHZvaWQgZHB1X2Nv cmVfcGVyZl9kZXN0cm95KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmKQogewogCWlmICghcGVy ZikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJS T1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYyOSw3ICs2 MjksNyBAQCBpbnQgZHB1X2NvcmVfcGVyZl9pbml0KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJm LAogCiAJcGVyZi0+bWF4X2NvcmVfY2xrX3JhdGUgPSBjb3JlX2Nsay0+bWF4X3JhdGU7CiAJaWYg KCFwZXJmLT5tYXhfY29yZV9jbGtfcmF0ZSkgewotCQlEUFVfREVCVUcoIm9wdGlvbmFsIG1heCBj b3JlIGNsayByYXRlLCB1c2UgZGVmYXVsdFxuIik7CisJCURSTV9ERVZfREVCVUcoIm9wdGlvbmFs IG1heCBjb3JlIGNsayByYXRlLCB1c2UgZGVmYXVsdFxuIik7CiAJCXBlcmYtPm1heF9jb3JlX2Ns a19yYXRlID0gRFBVX1BFUkZfREVGQVVMVF9NQVhfQ09SRV9DTEtfUkFURTsKIAl9CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4IDgwY2JmNzUuLmI1YmU5YjYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtNTQsMTIgKzU0 LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRwdV9rbXMgKl9kcHVfY3J0Y19nZXRfa21zKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwogCiAJ aWYgKCFjcnRjIHx8ICFjcnRjLT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNy dGNcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZh dGU7CiAJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGtt c1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQga21zXG4iKTsKIAkJcmV0dXJuIE5VTEw7 CiAJfQogCkBAIC03MywxOSArNzMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9jcnRjX3Bv d2VyX2VuYWJsZShzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjLCBib29sIGVuYWJsZSkKIAlzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAogCWlmICghZHB1X2NydGMpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGRwdSBjcnRjXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBkcHUgY3J0Y1xu Iik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWNydGMgPSAmZHB1X2NydGMtPmJhc2U7CiAJ aWYgKCFjcnRjLT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGRybSBkZXZpY2VcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGRybSBk ZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlwcml2ID0gY3J0Yy0+ZGV2LT5k ZXZfcHJpdmF0ZTsKIAlpZiAoIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQga21z XG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CiAKQEAgLTEyNSwxNyArMTI1LDE3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ycF9y ZWNsYWltKHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sICpycCwgYm9vbCBmb3JjZSkKIAogCWNydGMg PSBfZHB1X2NydGNfcnBfdG9fY3J0YyhycCk7CiAJaWYgKCFjcnRjKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBjcnRjXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKIAkJ cmV0dXJuOwogCX0KIAotCURQVV9ERUJVRygiY3J0YyVkLiV1ICVzXG4iLCBjcnRjLT5iYXNlLmlk LCBycC0+c2VxdWVuY2VfaWQsCisJRFJNX0RFVl9ERUJVRygiY3J0YyVkLiV1ICVzXG4iLCBjcnRj LT5iYXNlLmlkLCBycC0+c2VxdWVuY2VfaWQsCiAJCQlmb3JjZSA/ICJkZXN0cm95IiA6ICJmcmVl X3VudXNlZCIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgbmV4dCwgJnJwLT5y ZXNfbGlzdCwgbGlzdCkgewogCQlpZiAoIWZvcmNlICYmICEocmVzLT5mbGFncyAmIERQVV9DUlRD X1JFU19GTEFHX0ZSRUUpKQogCQkJY29udGludWU7Ci0JCURQVV9ERUJVRygiY3J0YyVkLiV1IHJl Y2xhaW0gcmVzOjB4JXgvMHglbGx4LyVwSy8lZFxuIiwKKwkJRFJNX0RFVl9ERUJVRygiY3J0YyVk LiV1IHJlY2xhaW0gcmVzOjB4JXgvMHglbGx4LyVwSy8lZFxuIiwKIAkJCQljcnRjLT5iYXNlLmlk LCBycC0+c2VxdWVuY2VfaWQsCiAJCQkJcmVzLT50eXBlLCByZXMtPnRhZywgcmVzLT52YWwsCiAJ CQkJYXRvbWljX3JlYWQoJnJlcy0+cmVmY291bnQpKTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfcnBfZGVzdHJveShzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnAp CiAgKi8KIHN0YXRpYyB2b2lkICpfZHB1X2NydGNfaHdfYmxrX2dldCh2b2lkICp2YWwsIHUzMiB0 eXBlLCB1NjQgdGFnKQogewotCURQVV9ERUJVRygicmVzOiVkLzB4JWxseC8lcEtcbiIsIHR5cGUs IHRhZywgdmFsKTsKKwlEUk1fREVWX0RFQlVHKCJyZXM6JWQvMHglbGx4LyVwS1xuIiwgdHlwZSwg dGFnLCB2YWwpOwogCXJldHVybiBkcHVfaHdfYmxrX2dldCh2YWwsIHR5cGUsIHRhZyk7CiB9CiAK QEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCAqX2RwdV9jcnRjX2h3X2Jsa19nZXQodm9p ZCAqdmFsLCB1MzIgdHlwZSwgdTY0IHRhZykKICAqLwogc3RhdGljIHZvaWQgX2RwdV9jcnRjX2h3 X2Jsa19wdXQodm9pZCAqdmFsKQogewotCURQVV9ERUJVRygicmVzOi8vJXBLXG4iLCB2YWwpOwor CURSTV9ERVZfREVCVUcoInJlczovLyVwS1xuIiwgdmFsKTsKIAlkcHVfaHdfYmxrX3B1dCh2YWwp OwogfQogCkBAIC0yMDgsMTcgKzIwOCwxNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfcnBfZHVw bGljYXRlKHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sICpycCwKIAlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7CiAKIAlpZiAoIXJwIHx8ICFkdXBfcnAgfHwgIXJwLT5ycF9oZWFkKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCByZXNvdXJjZSBwb29sXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBy ZXNvdXJjZSBwb29sXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWNydGMgPSBfZHB1X2NydGNfcnBf dG9fY3J0YyhycCk7CiAJaWYgKCFjcnRjKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4i KTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKIAkJcmV0dXJuOwogCX0KIAot CURQVV9ERUJVRygiY3J0YyVkLiV1IGR1cGxpY2F0ZVxuIiwgY3J0Yy0+YmFzZS5pZCwgcnAtPnNl cXVlbmNlX2lkKTsKKwlEUk1fREVWX0RFQlVHKCJjcnRjJWQuJXUgZHVwbGljYXRlXG4iLCBjcnRj LT5iYXNlLmlkLCBycC0+c2VxdWVuY2VfaWQpOwogCiAJbXV0ZXhfbG9jayhycC0+cnBfbG9jayk7 CiAJZHVwX3JwLT5zZXF1ZW5jZV9pZCA9IHJwLT5zZXF1ZW5jZV9pZCArIDE7CkBAIC0yMzcsNyAr MjM3LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3JwX2R1cGxpY2F0ZShzdHJ1Y3QgZHB1X2Ny dGNfcmVzcG9vbCAqcnAsCiAJCWR1cF9yZXMtPnZhbCA9IHJlcy0+dmFsOwogCQlkdXBfcmVzLT5v cHMgPSByZXMtPm9wczsKIAkJZHVwX3Jlcy0+ZmxhZ3MgPSBEUFVfQ1JUQ19SRVNfRkxBR19GUkVF OwotCQlEUFVfREVCVUcoImNydGMlZC4ldSBkdXAgcmVzOjB4JXgvMHglbGx4LyVwSy8lZFxuIiwK KwkJRFJNX0RFVl9ERUJVRygiY3J0YyVkLiV1IGR1cCByZXM6MHgleC8weCVsbHgvJXBLLyVkXG4i LAogCQkJCWNydGMtPmJhc2UuaWQsIGR1cF9ycC0+c2VxdWVuY2VfaWQsCiAJCQkJZHVwX3Jlcy0+ dHlwZSwgZHVwX3Jlcy0+dGFnLCBkdXBfcmVzLT52YWwsCiAJCQkJYXRvbWljX3JlYWQoJmR1cF9y ZXMtPnJlZmNvdW50KSk7CkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRj X3JwX3Jlc2V0KHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sICpycCwKIAkJc3RydWN0IG11dGV4ICpy cF9sb2NrLCBzdHJ1Y3QgbGlzdF9oZWFkICpycF9oZWFkKQogewogCWlmICghcnAgfHwgIXJwX2xv Y2sgfHwgIXJwX2hlYWQpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJlc291cmNlIHBvb2xcbiIp OworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHJlc291cmNlIHBvb2xcbiIpOwogCQlyZXR1cm47 CiAJfQogCkBAIC0yODQsNyArMjg0LDcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9IHRv X2RwdV9jcnRjKGNydGMpOwogCi0JRFBVX0RFQlVHKCJcbiIpOworCURSTV9ERVZfREVCVUcoIlxu Iik7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKQEAgLTM1Miw3ICszNTIsNyBAQCBzdGF0aWMg dm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAog CWJvb2wgYmdfYWxwaGFfZW5hYmxlID0gZmFsc2U7CiAKIAlpZiAoIWRwdV9jcnRjIHx8ICFtaXhl cikgewotCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2NydGMgb3IgbWl4ZXJcbiIpOworCQlEUk1f REVWX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjIG9yIG1peGVyXG4iKTsKIAkJcmV0dXJuOwogCX0K IApAQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9t aXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIAkJZHB1X3BsYW5lX2dldF9jdGxfZmx1c2go cGxhbmUsIGN0bCwgJmZsdXNoX21hc2spOwogCi0JCURQVV9ERUJVRygiY3J0YyAlZCBzdGFnZTol ZCAtIHBsYW5lICVkIHNzcHAgJWQgZmIgJWRcbiIsCisJCURSTV9ERVZfREVCVUcoImNydGMgJWQg c3RhZ2U6JWQgLSBwbGFuZSAlZCBzc3BwICVkIGZiICVkXG4iLAogCQkJCWNydGMtPmJhc2UuaWQs CiAJCQkJcHN0YXRlLT5zdGFnZSwKIAkJCQlwbGFuZS0+YmFzZS5pZCwKQEAgLTM4MCw3ICszODAs NyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9j cnRjICpjcnRjLAogCiAJCWZvcm1hdCA9IHRvX2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zv cm1hdChwc3RhdGUtPmJhc2UuZmIpKTsKIAkJaWYgKCFmb3JtYXQpIHsKLQkJCURQVV9FUlJPUigi aW52YWxpZCBmb3JtYXRcbiIpOworCQkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBmb3JtYXRcbiIp OwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTQzNywxNiArNDM3LDE2IEBAIHN0YXRpYyB2b2lkIF9k cHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJZHB1X2NydGNfc3Rh dGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAJbWl4ZXIgPSBkcHVfY3J0Yy0+ bWl4ZXJzOwogCi0JRFBVX0RFQlVHKCIlc1xuIiwgZHB1X2NydGMtPm5hbWUpOworCURSTV9ERVZf REVCVUcoIiVzXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CiAKIAlpZiAoZHB1X2NydGMtPm51bV9taXhl cnMgPiBDUlRDX0RVQUxfTUlYRVJTKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBudW1iZXIgbWl4 ZXJzOiAlZFxuIiwgZHB1X2NydGMtPm51bV9taXhlcnMpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIG51bWJlciBtaXhlcnM6ICVkXG4iLCBkcHVfY3J0Yy0+bnVtX21peGVycyk7CiAJCXJldHVy bjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewog CQlpZiAoIW1peGVyW2ldLmh3X2xtIHx8ICFtaXhlcltpXS5od19jdGwpIHsKLQkJCURQVV9FUlJP UigiaW52YWxpZCBsbSBvciBjdGwgYXNzaWduZWQgdG8gbWl4ZXJcbiIpOworCQkJRFJNX0RFVl9F UlJPUigiaW52YWxpZCBsbSBvciBjdGwgYXNzaWduZWQgdG8gbWl4ZXJcbiIpOwogCQkJcmV0dXJu OwogCQl9CiAJCW1peGVyW2ldLm1peGVyX29wX21vZGUgPSAwOwpAQCAtNDczLDcgKzQ3Myw3IEBA IHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAJCS8qIHN0YWdlIGNvbmZpZyBmbHVzaCBtYXNrICovCiAJCWN0bC0+b3BzLnVwZGF0ZV9wZW5k aW5nX2ZsdXNoKGN0bCwgbWl4ZXJbaV0uZmx1c2hfbWFzayk7CiAKLQkJRFBVX0RFQlVHKCJsbSAl ZCwgb3BfbW9kZSAweCVYLCBjdGwgJWQsIGZsdXNoIG1hc2sgMHgleFxuIiwKKwkJRFJNX0RFVl9E RUJVRygibG0gJWQsIG9wX21vZGUgMHglWCwgY3RsICVkLCBmbHVzaCBtYXNrIDB4JXhcbiIsCiAJ CQltaXhlcltpXS5od19sbS0+aWR4IC0gTE1fMCwKIAkJCW1peGVyW2ldLm1peGVyX29wX21vZGUs CiAJCQljdGwtPmlkeCAtIENUTF8wLApAQCAtNTE1LDcgKzUxNSw3IEBAIGVudW0gZHB1X2ludGZf bW9kZSBkcHVfY3J0Y19nZXRfaW50Zl9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKIAlpZiAoIWNydGMgfHwgIWNydGMtPmRldikgewot CQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQg Y3J0Y1xuIik7CiAJCXJldHVybiBJTlRGX01PREVfTk9ORTsKIAl9CiAKQEAgLTU1MiwxMyArNTUy LDEzIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2ZyYW1lX2V2ZW50X3dvcmsoc3RydWN0IGt0aHJl YWRfd29yayAqd29yaykKIAlib29sIGZyYW1lX2RvbmUgPSBmYWxzZTsKIAogCWlmICghd29yaykg ewotCQlEUFVfRVJST1IoImludmFsaWQgd29yayBoYW5kbGVcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIHdvcmsgaGFuZGxlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWZldmVudCA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHB1X2NydGNfZnJhbWVfZXZlbnQsIHdvcmspOwogCWlm ICghZmV2ZW50LT5jcnRjIHx8ICFmZXZlbnQtPmNydGMtPnN0YXRlKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBjcnRjXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKIAkJ cmV0dXJuOwogCX0KIApAQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Zy YW1lX2V2ZW50X3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIAogCWRwdV9rbXMgPSBf ZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKIAlpZiAoIWRwdV9rbXMpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGttcyBoYW5kbGVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGttcyBoYW5k bGVcbiIpOwogCQlyZXR1cm47CiAJfQogCXByaXYgPSBkcHVfa21zLT5kZXYtPmRldl9wcml2YXRl OwpAQCAtNjA2LDcgKzYwNiw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2ZyYW1lX2V2ZW50X3dv cmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIAl9CiAKIAlpZiAoZmV2ZW50LT5ldmVudCAm IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX1BBTkVMX0RFQUQpCi0JCURQVV9FUlJPUigiY3J0YyVk IHRzOiVsbGQgcmVjZWl2ZWQgcGFuZWwgZGVhZCBldmVudFxuIiwKKwkJRFJNX0RFVl9FUlJPUigi Y3J0YyVkIHRzOiVsbGQgcmVjZWl2ZWQgcGFuZWwgZGVhZCBldmVudFxuIiwKIAkJCQljcnRjLT5i YXNlLmlkLCBrdGltZV90b19ucyhmZXZlbnQtPnRzKSk7CiAKIAlpZiAoZnJhbWVfZG9uZSkKQEAg LTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19mcmFtZV9ldmVudF9jYih2b2lk ICpkYXRhLCB1MzIgZXZlbnQpCiAJdTMyIGNydGNfaWQ7CiAKIAlpZiAoIWNydGMgfHwgIWNydGMt PmRldiB8fCAhY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQg cGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7 CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3Myw3ICs2NzMsNyBAQCB2b2lkIGRwdV9jcnRjX2NvbXBs ZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqb2xkX3N0YXRlKQogewogCWlmICghY3J0YyB8fCAhY3J0Yy0+c3RhdGUpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIp OwogCQlyZXR1cm47CiAJfQogCXRyYWNlX2RwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChEUk1JRChj cnRjKSk7CkBAIC03MDQsNyArNzA0LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21p eGVyX2Zvcl9lbmNvZGVyKAogCiAJCS8qIENUTCBtYXkgYmUgPD0gTE1zLCBpZiA8LCBtdWx0aXBs ZSBMTXMgY29udHJvbGxlZCBieSAxIENUTCAqLwogCQlpZiAoIWRwdV9ybV9nZXRfaHcocm0sICZj dGxfaXRlcikpIHsKLQkJCURQVV9ERUJVRygibm8gY3RsIGFzc2lnbmVkIHRvIGxtICVkLCB1c2lu ZyBwcmV2aW91c1xuIiwKKwkJCURSTV9ERVZfREVCVUcoIm5vIGN0bCBhc3NpZ25lZCB0byBsbSAl ZCwgdXNpbmcgcHJldmlvdXNcbiIsCiAJCQkJCW1peGVyLT5od19sbS0+aWR4IC0gTE1fMCk7CiAJ CQltaXhlci0+aHdfY3RsID0gbGFzdF92YWxpZF9jdGw7CiAJCX0gZWxzZSB7CkBAIC03MTQsNyAr NzE0LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKAog CiAJCS8qIFNob3VsZG4ndCBoYXBwZW4sIG1peGVycyBhcmUgYWx3YXlzID49IGN0bHMgKi8KIAkJ aWYgKCFtaXhlci0+aHdfY3RsKSB7Ci0JCQlEUFVfRVJST1IoIm5vIHZhbGlkIGN0bHMgZm91bmQg Zm9yIGxtICVkXG4iLAorCQkJRFJNX0RFVl9FUlJPUigibm8gdmFsaWQgY3RscyBmb3VuZCBmb3Ig bG0gJWRcbiIsCiAJCQkJCW1peGVyLT5od19sbS0+aWR4IC0gTE1fMCk7CiAJCQlyZXR1cm47CiAJ CX0KQEAgLTcyMiw5ICs3MjIsOSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJf Zm9yX2VuY29kZXIoCiAJCW1peGVyLT5lbmNvZGVyID0gZW5jOwogCiAJCWRwdV9jcnRjLT5udW1f bWl4ZXJzKys7Ci0JCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGxtICVkXG4iLAorCQlEUk1f REVWX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogbG0gJWRcbiIsCiAJCQkJaSwgbWl4ZXItPmh3X2xt LT5pZHggLSBMTV8wKTsKLQkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogY3RsICVkXG4iLAor CQlEUk1fREVWX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogY3RsICVkXG4iLAogCQkJCWksIG1peGVy LT5od19jdGwtPmlkeCAtIENUTF8wKTsKIAl9CiB9CkBAIC03NjAsNyArNzYwLDcgQEAgc3RhdGlj IHZvaWQgX2RwdV9jcnRjX3NldHVwX2xtX2JvdW5kcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJ aW50IGk7CiAKIAlpZiAoIWNydGMgfHwgIXN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBh cmdzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0dXJuOwog CX0KIApAQCAtNzkzLDE3ICs3OTMsMTcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2Jl Z2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlzdHJ1Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9k YXRhICpzbW11X3N0YXRlOwogCiAJaWYgKCFjcnRjKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBj cnRjXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKIAkJcmV0dXJuOwog CX0KIAogCWlmICghY3J0Yy0+c3RhdGUtPmVuYWJsZSkgewotCQlEUFVfREVCVUcoImNydGMlZCAt PiBlbmFibGUgJWQsIHNraXAgYXRvbWljX2JlZ2luXG4iLAorCQlEUk1fREVWX0RFQlVHKCJjcnRj JWQgLT4gZW5hYmxlICVkLCBza2lwIGF0b21pY19iZWdpblxuIiwKIAkJCQljcnRjLT5iYXNlLmlk LCBjcnRjLT5zdGF0ZS0+ZW5hYmxlKTsKIAkJcmV0dXJuOwogCX0KIAotCURQVV9ERUJVRygiY3J0 YyVkXG4iLCBjcnRjLT5iYXNlLmlkKTsKKwlEUk1fREVWX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMt PmJhc2UuaWQpOwogCiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKIAlkZXYgPSBjcnRj LT5kZXY7CkBAIC04NjIsMTcgKzg2MiwxNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNf Zmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0 YXRlOwogCiAJaWYgKCFjcnRjIHx8ICFjcnRjLT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZh dGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJp bnZhbGlkIGNydGNcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFjcnRjLT5zdGF0ZS0+ZW5h YmxlKSB7Ci0JCURQVV9ERUJVRygiY3J0YyVkIC0+IGVuYWJsZSAlZCwgc2tpcCBhdG9taWNfZmx1 c2hcbiIsCisJCURSTV9ERVZfREVCVUcoImNydGMlZCAtPiBlbmFibGUgJWQsIHNraXAgYXRvbWlj X2ZsdXNoXG4iLAogCQkJCWNydGMtPmJhc2UuaWQsIGNydGMtPnN0YXRlLT5lbmFibGUpOwogCQly ZXR1cm47CiAJfQogCi0JRFBVX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQpOworCURS TV9ERVZfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CiAKIAlkcHVfY3J0YyA9IHRv X2RwdV9jcnRjKGNydGMpOwogCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKQEAgLTg4MCwxNCArODgwLDE0IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19mbHVz aChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlp ZiAoY3J0Yy0+aW5kZXggPj0gQVJSQVlfU0laRShwcml2LT5ldmVudF90aHJlYWQpKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBjcnRjIGluZGV4WyVkXVxuIiwgY3J0Yy0+aW5kZXgpOworCQlEUk1f REVWX0VSUk9SKCJpbnZhbGlkIGNydGMgaW5kZXhbJWRdXG4iLCBjcnRjLT5pbmRleCk7CiAJCXJl dHVybjsKIAl9CiAKIAlldmVudF90aHJlYWQgPSAmcHJpdi0+ZXZlbnRfdGhyZWFkW2NydGMtPmlu ZGV4XTsKIAogCWlmIChkcHVfY3J0Yy0+ZXZlbnQpIHsKLQkJRFBVX0RFQlVHKCJhbHJlYWR5IHJl Y2VpdmVkIGRwdV9jcnRjLT5ldmVudFxuIik7CisJCURSTV9ERVZfREVCVUcoImFscmVhZHkgcmVj ZWl2ZWQgZHB1X2NydGMtPmV2ZW50XG4iKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJCWRwdV9jcnRjLT5ldmVudCA9IGNydGMtPnN0 YXRlLT5ldmVudDsKQEAgLTk0MiwxNCArOTQyLDE0IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rl c3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXN0cnVjdCBkcHVfY3J0Y19zdGF0 ZSAqY3N0YXRlOwogCiAJaWYgKCFjcnRjIHx8ICFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnQocylcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMp XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CiAJ Y3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwogCi0JRFBVX0RFQlVHKCJjcnRjJWRc biIsIGNydGMtPmJhc2UuaWQpOworCURSTV9ERVZfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFz ZS5pZCk7CiAKIAlfZHB1X2NydGNfcnBfZGVzdHJveSgmY3N0YXRlLT5ycCk7CiAKQEAgLTk2NCwx MyArOTY0LDEzIEBAIHN0YXRpYyBpbnQgX2RwdV9jcnRjX3dhaXRfZm9yX2ZyYW1lX2RvbmUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQogCWludCByZXQsIHJjID0gMDsKIAogCWlmICghY3J0Yykgewot CQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIGFyZ3VtZW50XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRwdV9jcnRjID0gdG9f ZHB1X2NydGMoY3J0Yyk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZkcHVfY3J0Yy0+ZnJhbWVfcGVu ZGluZykpIHsKLQkJRFBVX0RFQlVHKCJubyBmcmFtZXMgcGVuZGluZ1xuIik7CisJCURSTV9ERVZf REVCVUcoIm5vIGZyYW1lcyBwZW5kaW5nXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05OTcs NyArOTk3LDcgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCiAJaW50IHJldDsKIAogCWlmICghY3J0YykgewotCQlEUFVfRVJST1IoImludmFsaWQg YXJndW1lbnRcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKIAkJ cmV0dXJuOwogCX0KIAlkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCB2b2lk IGRwdV9jcnRjX2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlkcHVfa21z ID0gX2RwdV9jcnRjX2dldF9rbXMoY3J0Yyk7CiAKIAlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMt PmRldiB8fCAhZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnRcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsK IAkJcmV0dXJuOwogCX0KIApAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdm9pZCBkcHVfY3J0Y19jb21t aXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJcmV0ID0gX2RwdV9jcnRjX3dhaXRf Zm9yX2ZyYW1lX2RvbmUoY3J0Yyk7CiAJRFBVX0FUUkFDRV9FTkQoIndhaXRfZm9yX2ZyYW1lX2Rv bmVfZXZlbnQiKTsKIAlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiY3J0YyVkIHdhaXQgZm9yIGZy YW1lIGRvbmUgZmFpbGVkO2ZyYW1lX3BlbmRpbmclZFxuIiwKKwkJRFJNX0RFVl9FUlJPUigiY3J0 YyVkIHdhaXQgZm9yIGZyYW1lIGRvbmUgZmFpbGVkO2ZyYW1lX3BlbmRpbmclZFxuIiwKIAkJCQlj cnRjLT5iYXNlLmlkLAogCQkJCWF0b21pY19yZWFkKCZkcHVfY3J0Yy0+ZnJhbWVfcGVuZGluZykp OwogCQlnb3RvIGVuZDsKQEAgLTEwNDgsOSArMTA0OCw5IEBAIHZvaWQgZHB1X2NydGNfY29tbWl0 X2tpY2tvZmYoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJu KCZkcHVfY3J0Yy0+ZnJhbWVfcGVuZGluZykgPT0gMSkgewogCQkvKiBhY3F1aXJlIGJhbmR3aWR0 aCBhbmQgb3RoZXIgcmVzb3VyY2VzICovCi0JCURQVV9ERUJVRygiY3J0YyVkIGZpcnN0IGNvbW1p dFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisJCURSTV9ERVZfREVCVUcoImNydGMlZCBmaXJzdCBjb21t aXRcbiIsIGNydGMtPmJhc2UuaWQpOwogCX0gZWxzZQotCQlEUFVfREVCVUcoImNydGMlZCBjb21t aXRcbiIsIGNydGMtPmJhc2UuaWQpOworCQlEUk1fREVWX0RFQlVHKCJjcnRjJWQgY29tbWl0XG4i LCBjcnRjLT5iYXNlLmlkKTsKIAogCWRwdV9jcnRjLT5wbGF5X2NvdW50Kys7CiAKQEAgLTEwODMs NyArMTA4Myw3IEBAIHN0YXRpYyBpbnQgX2RwdV9jcnRjX3ZibGFua19lbmFibGVfbm9fbG9jaygK IAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYzsKIAogCWlmICghZHB1X2NydGMpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIp OwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExNDUsMTQgKzExNDUsMTQgQEAgc3RhdGlj IHZvaWQgX2RwdV9jcnRjX3NldF9zdXNwZW5kKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBl bmFibGUpCiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNydGMgfHwgIWNydGMtPmRldiB8fCAhY3J0 Yy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJ CURSTV9ERVZfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CiAJCXJldHVybjsKIAl9CiAJZHB1X2Ny dGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKIAlwcml2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsK IAogCWlmICghcHJpdi0+a21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjIGttc1xuIik7 CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgY3J0YyBrbXNcbiIpOwogCQlyZXR1cm47CiAJfQog CWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CkBAIC0xMTY3LDEyICsxMTY3LDEyIEBA IHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXRfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs IGJvb2wgZW5hYmxlKQogCSAqLwogCXRyYWNlX2RwdV9jcnRjX3NldF9zdXNwZW5kKERSTUlEKCZk cHVfY3J0Yy0+YmFzZSksIGVuYWJsZSwgZHB1X2NydGMpOwogCWlmIChkcHVfY3J0Yy0+c3VzcGVu ZCA9PSBlbmFibGUpCi0JCURQVV9ERUJVRygiY3J0YyVkIHN1c3BlbmQgYWxyZWFkeSBzZXQgdG8g JWQsIGlnbm9yaW5nIHVwZGF0ZVxuIiwKKwkJRFJNX0RFVl9ERUJVRygiY3J0YyVkIHN1c3BlbmQg YWxyZWFkeSBzZXQgdG8gJWQsIGlnbm9yaW5nIHVwZGF0ZVxuIiwKIAkJCQljcnRjLT5iYXNlLmlk LCBlbmFibGUpOwogCWVsc2UgaWYgKGRwdV9jcnRjLT5lbmFibGVkICYmIGRwdV9jcnRjLT52Ymxh bmtfcmVxdWVzdGVkKSB7CiAJCXJldCA9IF9kcHVfY3J0Y192YmxhbmtfZW5hYmxlX25vX2xvY2so ZHB1X2NydGMsICFlbmFibGUpOwogCQlpZiAocmV0KQotCQkJRFBVX0VSUk9SKCIlcyB2Ymxhbmsg ZW5hYmxlIGZhaWxlZDogJWRcbiIsCisJCQlEUk1fREVWX0VSUk9SKCIlcyB2YmxhbmsgZW5hYmxl IGZhaWxlZDogJWRcbiIsCiAJCQkJCWRwdV9jcnRjLT5uYW1lLCByZXQpOwogCX0KIApAQCAtMTE5 MSw3ICsxMTkxLDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqZHB1X2NydGNfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKmNzdGF0ZSwgKm9sZF9jc3RhdGU7CiAKIAlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgYXJndW1lbnQocylcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTExOTks NyArMTE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmRwdV9jcnRjX2R1cGxp Y2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJb2xkX2NzdGF0ZSA9IHRvX2RwdV9j cnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAljc3RhdGUgPSBrbWVtZHVwKG9sZF9jc3RhdGUsIHNp emVvZigqb2xkX2NzdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY3N0YXRlKSB7Ci0JCURQVV9F UlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiZmFp bGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMjIz LDcgKzEyMjMsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCiAJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7CiAKIAlpZiAoIWNydGMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlk IGNydGNcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjQwLDcgKzEyNDAsNyBAQCBzdGF0aWMg dm9pZCBkcHVfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJZHB1X2NydGMgPSB0 b19kcHVfY3J0YyhjcnRjKTsKIAljc3RhdGUgPSBremFsbG9jKHNpemVvZigqY3N0YXRlKSwgR0ZQ X0tFUk5FTCk7CiAJaWYgKCFjc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Nh dGUgc3RhdGVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdGVc biIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBzdGF0aWMgdm9pZCBk cHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAl1 MzIgaSwgbWlzcl9zdGF0dXM7CiAKIAlpZiAoIWNydGMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOwogCQlyZXR1cm47 CiAJfQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CkBAIC0xMzA4LDcgKzEzMDgsNyBA QCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUs IHZvaWQgKmFyZykKIAkJICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURQVV9ERUJVRygiZXZl bnQ6JWQgbm90IGhhbmRsZWRcbiIsIGV2ZW50X3R5cGUpOworCQlEUk1fREVWX0RFQlVHKCJldmVu dDolZCBub3QgaGFuZGxlZFxuIiwgZXZlbnRfdHlwZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTMy Niw3ICsxMzI2LDcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghY3J0YyB8fCAhY3J0Yy0+ ZGV2IHx8ICFjcnRjLT5kZXYtPmRldl9wcml2YXRlIHx8ICFjcnRjLT5zdGF0ZSkgewotCQlEUFVf RVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgY3J0Y1xu Iik7CiAJCXJldHVybjsKIAl9CiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKQEAgLTEz NDYsNyArMTM0Niw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9j cnRjICpjcnRjKQogCiAJLyogd2FpdCBmb3IgZnJhbWVfZXZlbnRfZG9uZSBjb21wbGV0aW9uICov CiAJaWYgKF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKGNydGMpKQotCQlEUFVfRVJST1Io ImNydGMlZCB3YWl0IGZvciBmcmFtZSBkb25lIGZhaWxlZDtmcmFtZV9wZW5kaW5nJWRcbiIsCisJ CURSTV9ERVZfRVJST1IoImNydGMlZCB3YWl0IGZvciBmcmFtZSBkb25lIGZhaWxlZDtmcmFtZV9w ZW5kaW5nJWRcbiIsCiAJCQkJY3J0Yy0+YmFzZS5pZCwKIAkJCQlhdG9taWNfcmVhZCgmZHB1X2Ny dGMtPmZyYW1lX3BlbmRpbmcpKTsKIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgc3RhdGljIHZvaWQg ZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCQlkcHVfY3J0Yy0+dmJs YW5rX3JlcXVlc3RlZCkgewogCQlyZXQgPSBfZHB1X2NydGNfdmJsYW5rX2VuYWJsZV9ub19sb2Nr KGRwdV9jcnRjLCBmYWxzZSk7CiAJCWlmIChyZXQpCi0JCQlEUFVfRVJST1IoIiVzIHZibGFuayBl bmFibGUgZmFpbGVkOiAlZFxuIiwKKwkJCURSTV9ERVZfRVJST1IoIiVzIHZibGFuayBlbmFibGUg ZmFpbGVkOiAlZFxuIiwKIAkJCQkJZHB1X2NydGMtPm5hbWUsIHJldCk7CiAJfQogCWRwdV9jcnRj LT5lbmFibGVkID0gZmFsc2U7CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWludCByZXQ7CiAKIAlpZiAoIWNy dGMgfHwgIWNydGMtPmRldiB8fCAhY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJS T1IoImludmFsaWQgY3J0Y1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgY3J0Y1xuIik7 CiAJCXJldHVybjsKIAl9CiAJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xNDI3 LDcgKzE0MjcsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAogCQkJZHB1X2NydGMtPnZibGFua19yZXF1ZXN0ZWQpIHsKIAkJcmV0ID0gX2RwdV9j cnRjX3ZibGFua19lbmFibGVfbm9fbG9jayhkcHVfY3J0YywgdHJ1ZSk7CiAJCWlmIChyZXQpCi0J CQlEUFVfRVJST1IoIiVzIHZibGFuayBlbmFibGUgZmFpbGVkOiAlZFxuIiwKKwkJCURSTV9ERVZf RVJST1IoIiVzIHZibGFuayBlbmFibGUgZmFpbGVkOiAlZFxuIiwKIAkJCQkJZHB1X2NydGMtPm5h bWUsIHJldCk7CiAJfQogCWRwdV9jcnRjLT5lbmFibGVkID0gdHJ1ZTsKQEAgLTE0NzIsNyArMTQ3 Miw3IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAlzdHJ1Y3QgZHJtX3JlY3QgY3J0Y19yZWN0ID0geyAwIH07CiAKIAlpZiAoIWNydGMp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIGNydGNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0ODIsMTMgKzE0ODIs MTMgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpj cnRjLAogCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKIAogCWlmICghc3RhdGUt PmVuYWJsZSB8fCAhc3RhdGUtPmFjdGl2ZSkgewotCQlEUFVfREVCVUcoImNydGMlZCAtPiBlbmFi bGUgJWQsIGFjdGl2ZSAlZCwgc2tpcCBhdG9taWNfY2hlY2tcbiIsCisJCURSTV9ERVZfREVCVUco ImNydGMlZCAtPiBlbmFibGUgJWQsIGFjdGl2ZSAlZCwgc2tpcCBhdG9taWNfY2hlY2tcbiIsCiAJ CQkJY3J0Yy0+YmFzZS5pZCwgc3RhdGUtPmVuYWJsZSwgc3RhdGUtPmFjdGl2ZSk7CiAJCWdvdG8g ZW5kOwogCX0KIAogCW1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7Ci0JRFBVX0RFQlVHKCIl czogY2hlY2siLCBkcHVfY3J0Yy0+bmFtZSk7CisJRFJNX0RFVl9ERUJVRygiJXM6IGNoZWNrIiwg ZHB1X2NydGMtPm5hbWUpOwogCiAJLyogZm9yY2UgYSBmdWxsIG1vZGUgc2V0IGlmIGFjdGl2ZSBz dGF0ZSBjaGFuZ2VkICovCiAJaWYgKHN0YXRlLT5hY3RpdmVfY2hhbmdlZCkKQEAgLTE1MDksNyAr MTUwOSw3IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAogCQlpZiAoSVNfRVJSX09SX05VTEwocHN0YXRlKSkgewogCQkJcmMgPSBQVFJf RVJSKHBzdGF0ZSk7Ci0JCQlEUFVfRVJST1IoIiVzOiBmYWlsZWQgdG8gZ2V0IHBsYW5lJWQgc3Rh dGUsICVkXG4iLAorCQkJRFJNX0RFVl9FUlJPUigiJXM6IGZhaWxlZCB0byBnZXQgcGxhbmUlZCBz dGF0ZSwgJWRcbiIsCiAJCQkJCWRwdV9jcnRjLT5uYW1lLCBwbGFuZS0+YmFzZS5pZCwgcmMpOwog CQkJZ290byBlbmQ7CiAJCX0KQEAgLTE1MzcsOCArMTUzNyw4IEBAIHN0YXRpYyBpbnQgZHB1X2Ny dGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJZHN0ID0gZHJtX3BsYW5l X3N0YXRlX2Rlc3QocHN0YXRlKTsKIAkJaWYgKCFkcm1fcmVjdF9pbnRlcnNlY3QoJmNsaXAsICZk c3QpIHx8CiAJCSAgICAhZHJtX3JlY3RfZXF1YWxzKCZjbGlwLCAmZHN0KSkgewotCQkJRFBVX0VS Uk9SKCJpbnZhbGlkIHZlcnRpY2FsL2hvcml6b250YWwgZGVzdGluYXRpb25cbiIpOwotCQkJRFBV X0VSUk9SKCJkaXNwbGF5OiAiIERSTV9SRUNUX0ZNVCAiIHBsYW5lOiAiCisJCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIHZlcnRpY2FsL2hvcml6b250YWwgZGVzdGluYXRpb25cbiIpOworCQkJRFJN X0RFVl9FUlJPUigiZGlzcGxheTogIiBEUk1fUkVDVF9GTVQgIiBwbGFuZTogIgogCQkJCSAgRFJN X1JFQ1RfRk1UICJcbiIsIERSTV9SRUNUX0FSRygmY3J0Y19yZWN0KSwKIAkJCQkgIERSTV9SRUNU X0FSRygmZHN0KSk7CiAJCQlyYyA9IC1FMkJJRzsKQEAgLTE1NTEsNyArMTU1MSw3IEBAIHN0YXRp YyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCWRw dV9wbGFuZV9jbGVhcl9tdWx0aXJlY3QocGlwZV9zdGFnZWRbaV0pOwogCiAJCQlpZiAoaXNfZHB1 X3BsYW5lX3ZpcnR1YWwocGlwZV9zdGFnZWRbaV0tPnBsYW5lKSkgewotCQkJCURQVV9FUlJPUigK KwkJCQlEUk1fREVWX0VSUk9SKAogCQkJCQkicjEgb25seSB2aXJ0IHBsYW5lOiVkIG5vdCBzdXBw b3J0ZWRcbiIsCiAJCQkJCXBpcGVfc3RhZ2VkW2ldLT5wbGFuZS0+YmFzZS5pZCk7CiAJCQkJcmMg ID0gLUVJTlZBTDsKQEAgLTE1NzEsMTMgKzE1NzEsMTMgQEAgc3RhdGljIGludCBkcHVfY3J0Y19h dG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJCS8qIHZlcmlmeSB6X3BvcyBz ZXR0aW5nIGJlZm9yZSB1c2luZyBpdCAqLwogCQlpZiAoel9wb3MgPj0gRFBVX1NUQUdFX01BWCAt IERQVV9TVEFHRV8wKSB7Ci0JCQlEUFVfRVJST1IoIj4gJWQgcGxhbmUgc3RhZ2VzIGFzc2lnbmVk XG4iLAorCQkJRFJNX0RFVl9FUlJPUigiPiAlZCBwbGFuZSBzdGFnZXMgYXNzaWduZWRcbiIsCiAJ CQkJCURQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0VfMCk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQln b3RvIGVuZDsKIAkJfSBlbHNlIGlmIChwc3RhdGVzW2ldLmRybV9wc3RhdGUtPmNydGNfeCA8IG1p eGVyX3dpZHRoKSB7CiAJCQlpZiAobGVmdF96cG9zX2NudCA9PSAyKSB7Ci0JCQkJRFBVX0VSUk9S KCI+IDIgcGxhbmVzIEAgc3RhZ2UgJWQgb24gbGVmdFxuIiwKKwkJCQlEUk1fREVWX0VSUk9SKCI+ IDIgcGxhbmVzIEAgc3RhZ2UgJWQgb24gbGVmdFxuIiwKIAkJCQkJel9wb3MpOwogCQkJCXJjID0g LUVJTlZBTDsKIAkJCQlnb3RvIGVuZDsKQEAgLTE1ODYsNyArMTU4Niw3IEBAIHN0YXRpYyBpbnQg ZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCQl9IGVsc2Ug ewogCQkJaWYgKHJpZ2h0X3pwb3NfY250ID09IDIpIHsKLQkJCQlEUFVfRVJST1IoIj4gMiBwbGFu ZXMgQCBzdGFnZSAlZCBvbiByaWdodFxuIiwKKwkJCQlEUk1fREVWX0VSUk9SKCI+IDIgcGxhbmVz IEAgc3RhZ2UgJWQgb24gcmlnaHRcbiIsCiAJCQkJCXpfcG9zKTsKIAkJCQlyYyA9IC1FSU5WQUw7 CiAJCQkJZ290byBlbmQ7CkBAIC0xNTk1LDEyICsxNTk1LDEyIEBAIHN0YXRpYyBpbnQgZHB1X2Ny dGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJfQogCiAJCXBzdGF0ZXNb aV0uZHB1X3BzdGF0ZS0+c3RhZ2UgPSB6X3BvcyArIERQVV9TVEFHRV8wOwotCQlEUFVfREVCVUco IiVzOiB6cG9zICVkIiwgZHB1X2NydGMtPm5hbWUsIHpfcG9zKTsKKwkJRFJNX0RFVl9ERUJVRygi JXM6IHpwb3MgJWQiLCBkcHVfY3J0Yy0+bmFtZSwgel9wb3MpOwogCX0KIAogCWZvciAoaSA9IDA7 IGkgPCBtdWx0aXJlY3RfY291bnQ7IGkrKykgewogCQlpZiAoZHB1X3BsYW5lX3ZhbGlkYXRlX211 bHRpcmVjdF92MigmbXVsdGlyZWN0X3BsYW5lW2ldKSkgewotCQkJRFBVX0VSUk9SKAorCQkJRFJN X0RFVl9FUlJPUigKIAkJCSJtdWx0aXJlY3QgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBsYW5lcyAo JWQgLSAlZClcbiIsCiAJCQkJCW11bHRpcmVjdF9wbGFuZVtpXS5yMC0+cGxhbmUtPmJhc2UuaWQs CiAJCQkJCW11bHRpcmVjdF9wbGFuZVtpXS5yMS0+cGxhbmUtPmJhc2UuaWQpOwpAQCAtMTYxMSw3 ICsxNjExLDcgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9j cnRjICpjcnRjLAogCiAJcmMgPSBkcHVfY29yZV9wZXJmX2NydGNfY2hlY2soY3J0Yywgc3RhdGUp OwogCWlmIChyYykgewotCQlEUFVfRVJST1IoImNydGMlZCBmYWlsZWQgcGVyZm9ybWFuY2UgY2hl Y2sgJWRcbiIsCisJCURSTV9ERVZfRVJST1IoImNydGMlZCBmYWlsZWQgcGVyZm9ybWFuY2UgY2hl Y2sgJWRcbiIsCiAJCQkJY3J0Yy0+YmFzZS5pZCwgcmMpOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0x NjUzLDEzICsxNjUzLDEzIEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKIAkJICogLSBwbGFuZXMgaW4gc291cmNlIHNwbGl0IG11c3QgaGF2 ZSBzYW1lIGRlc3QgeW9mZiBhbmQgaGVpZ2h0CiAJCSAqLwogCQlpZiAocmlnaHRfcGlkIDwgbGVm dF9waWQpIHsKLQkJCURQVV9FUlJPUigKKwkJCURSTV9ERVZfRVJST1IoCiAJCQkJImludmFsaWQg c3JjIHNwbGl0IGNmZy4gcHJpb3JpdHkgbWlzbWF0Y2guIHN0YWdlOiAlZCBsZWZ0OiAlZCByaWdo dDogJWRcbiIsCiAJCQkJc3RhZ2UsIGxlZnRfcGlkLCByaWdodF9waWQpOwogCQkJcmMgPSAtRUlO VkFMOwogCQkJZ290byBlbmQ7CiAJCX0gZWxzZSBpZiAocmlnaHRfcmVjdC54MSAhPSBkcm1fcmVj dF93aWR0aCgmbGVmdF9yZWN0KSkgewotCQkJRFBVX0VSUk9SKCJub24tY29udGlndW91cyBjb29y ZGluYXRlcyBmb3Igc3JjIHNwbGl0LiAiCisJCQlEUk1fREVWX0VSUk9SKCJub24tY29udGlndW91 cyBjb29yZGluYXRlcyBmb3Igc3JjIHNwbGl0LiAiCiAJCQkJICAic3RhZ2U6ICVkIGxlZnQ6ICIg RFJNX1JFQ1RfRk1UICIgcmlnaHQ6ICIKIAkJCQkgIERSTV9SRUNUX0ZNVCAiXG4iLCBzdGFnZSwK IAkJCQkgIERSTV9SRUNUX0FSRygmbGVmdF9yZWN0KSwKQEAgLTE2NjgsNyArMTY2OCw3IEBAIHN0 YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJ CWdvdG8gZW5kOwogCQl9IGVsc2UgaWYgKGxlZnRfcmVjdC55MSAhPSByaWdodF9yZWN0LnkxIHx8 CiAJCQkgICBkcm1fcmVjdF9oZWlnaHQoJmxlZnRfcmVjdCkgIT0gZHJtX3JlY3RfaGVpZ2h0KCZy aWdodF9yZWN0KSkgewotCQkJRFBVX0VSUk9SKCJzb3VyY2Ugc3BsaXQgYXQgc3RhZ2U6ICVkLiBp bnZhbGlkICIKKwkJCURSTV9ERVZfRVJST1IoInNvdXJjZSBzcGxpdCBhdCBzdGFnZTogJWQuIGlu dmFsaWQgIgogCQkJCSAgInlvZmYvaGVpZ2h0OiBsZWZ0OiAiIERSTV9SRUNUX0ZNVCAiIHJpZ2h0 OiAiCiAJCQkJICBEUk1fUkVDVF9GTVQgIlxuIiwgc3RhZ2UsCiAJCQkJICBEUk1fUkVDVF9BUkco JmxlZnRfcmVjdCksCkBAIC0xNjkwLDcgKzE2OTAsNyBAQCBpbnQgZHB1X2NydGNfdmJsYW5rKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBlbikKIAlpbnQgcmV0OwogCiAJaWYgKCFjcnRjKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxp ZCBjcnRjXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRwdV9jcnRjID0gdG9fZHB1X2Ny dGMoY3J0Yyk7CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCBpbnQgZHB1X2NydGNfdmJsYW5rKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywgYm9vbCBlbikKIAlpZiAoZHB1X2NydGMtPmVuYWJsZWQgJiYgIWRw dV9jcnRjLT5zdXNwZW5kKSB7CiAJCXJldCA9IF9kcHVfY3J0Y192YmxhbmtfZW5hYmxlX25vX2xv Y2soZHB1X2NydGMsIGVuKTsKIAkJaWYgKHJldCkKLQkJCURQVV9FUlJPUigiJXMgdmJsYW5rIGVu YWJsZSBmYWlsZWQ6ICVkXG4iLAorCQkJRFJNX0RFVl9FUlJPUigiJXMgdmJsYW5rIGVuYWJsZSBm YWlsZWQ6ICVkXG4iLAogCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcmV0KTsKIAl9CiAJZHB1X2NydGMt PnZibGFua19yZXF1ZXN0ZWQgPSBlbjsKQEAgLTE4NDcsNyArMTg0Nyw3IEBAIHN0YXRpYyBzc2l6 ZV90IF9kcHVfY3J0Y19taXNyX3NldHVwKHN0cnVjdCBmaWxlICpmaWxlLAogCWRwdV9jcnRjID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWJ1ZmZfY29weSA9IG1pbl90KHNpemVfdCwgY291bnQsIE1J U1JfQlVGRl9TSVpFKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmZl9j b3B5KSkgewotCQlEUFVfRVJST1IoImJ1ZmZlciBjb3B5IGZhaWxlZFxuIik7CisJCURSTV9ERVZf RVJST1IoImJ1ZmZlciBjb3B5IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApA QCAtMjEzMyw2ICsyMTMzLDYgQEAgc3RydWN0IGRybV9jcnRjICpkcHVfY3J0Y19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCiAJZHB1X2NydGMt PnBoYW5kbGUgPSAma21zLT5waGFuZGxlOwogCi0JRFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1bGx5 IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKKwlEUk1fREVWX0RFQlVHKCIl czogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKIAly ZXR1cm4gY3J0YzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jCmluZGV4IDFiNGRlMzQuLjVjZTVkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtMzUsMTkgKzM1LDE5IEBACiAjaW5jbHVkZSAiZHB1X3Ry YWNlLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCiAKLSNkZWZpbmUgRFBVX0RFQlVHX0VO QyhlLCBmbXQsIC4uLikgRFBVX0RFQlVHKCJlbmMlZCAiIGZtdCxcCisjZGVmaW5lIERQVV9ERUJV R19FTkMoZSwgZm10LCAuLi4pIERSTV9ERVZfREVCVUcoImVuYyVkICIgZm10LFwKIAkJKGUpID8g KGUpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBEUFVfRVJS T1JfRU5DKGUsIGZtdCwgLi4uKSBEUFVfRVJST1IoImVuYyVkICIgZm10LFwKKyNkZWZpbmUgRFBV X0VSUk9SX0VOQyhlLCBmbXQsIC4uLikgRFJNX0RFVl9FUlJPUigiZW5jJWQgIiBmbXQsXAogCQko ZSkgPyAoZSktPmJhc2UuYmFzZS5pZCA6IC0xLCAjI19fVkFfQVJHU19fKQogCi0jZGVmaW5lIERQ VV9ERUJVR19QSFlTKHAsIGZtdCwgLi4uKSBEUFVfREVCVUcoImVuYyVkIGludGYlZCBwcCVkICIg Zm10LFwKKyNkZWZpbmUgRFBVX0RFQlVHX1BIWVMocCwgZm10LCAuLi4pIERSTV9ERVZfREVCVUco ImVuYyVkIGludGYlZCBwcCVkICIgZm10LFwKIAkJKHApID8gKHApLT5wYXJlbnQtPmJhc2UuaWQg OiAtMSwgXAogCQkocCkgPyAocCktPmludGZfaWR4IC0gSU5URl8wIDogLTEsIFwKIAkJKHApID8g KChwKS0+aHdfcHAgPyAocCktPmh3X3BwLT5pZHggLSBQSU5HUE9OR18wIDogLTEpIDogLTEsIFwK IAkJIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBEUFVfRVJST1JfUEhZUyhwLCBmbXQsIC4uLikg RFBVX0VSUk9SKCJlbmMlZCBpbnRmJWQgcHAlZCAiIGZtdCxcCisjZGVmaW5lIERQVV9FUlJPUl9Q SFlTKHAsIGZtdCwgLi4uKSBEUk1fREVWX0VSUk9SKCJlbmMlZCBpbnRmJWQgcHAlZCAiIGZtdCxc CiAJCShwKSA/IChwKS0+cGFyZW50LT5iYXNlLmlkIDogLTEsIFwKIAkJKHApID8gKHApLT5pbnRm X2lkeCAtIElOVEZfMCA6IC0xLCBcCiAJCShwKSA/ICgocCktPmh3X3BwID8gKHApLT5od19wcC0+ aWR4IC0gUElOR1BPTkdfMCA6IC0xKSA6IC0xLCBcCkBAIC0yMjUsMTkgKzIyNSwxOSBAQCBzdGF0 aWMgaW5saW5lIGludCBfZHB1X2VuY29kZXJfcG93ZXJfZW5hYmxlKHN0cnVjdCBkcHVfZW5jb2Rl cl92aXJ0ICpkcHVfZW5jLAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCiAJaWYgKCFkcHVf ZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkcHUgZW5jXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBkcHUgZW5jXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZHJtX2Vu YyA9ICZkcHVfZW5jLT5iYXNlOwogCWlmICghZHJtX2VuYy0+ZGV2IHx8ICFkcm1fZW5jLT5kZXYt PmRldl9wcml2YXRlKSB7Ci0JCURQVV9FUlJPUigiZHJtIGRldmljZSBpbnZhbGlkXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiZHJtIGRldmljZSBpbnZhbGlkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7 CiAJfQogCiAJcHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKCFwcml2LT5r bXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGttc1xuIik7CisJCURSTV9ERVZfRVJST1IoImlu dmFsaWQga21zXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNzYsNyArMjc2LDcg QEAgaW50IGRwdV9lbmNvZGVyX2hlbHBlcl93YWl0X2Zvcl9pcnEoc3RydWN0IGRwdV9lbmNvZGVy X3BoeXMgKnBoeXNfZW5jLAogCWludCByZXQ7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICF3YWl0X2lu Zm8gfHwgaW50cl9pZHggPj0gSU5UUl9JRFhfTUFYKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBw YXJhbXNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CiAJCXJldHVy biAtRUlOVkFMOwogCX0KIAlpcnEgPSAmcGh5c19lbmMtPmlycVtpbnRyX2lkeF07CkBAIC0zNTEs NyArMzUxLDcgQEAgaW50IGRwdV9lbmNvZGVyX2hlbHBlcl9yZWdpc3Rlcl9pcnEoc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAogCWludCByZXQgPSAwOwogCiAJaWYgKCFwaHlzX2Vu YyB8fCBpbnRyX2lkeCA+PSBJTlRSX0lEWF9NQVgpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBh cmFtc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKIAkJcmV0dXJu IC1FSU5WQUw7CiAJfQogCWlycSA9ICZwaHlzX2VuYy0+aXJxW2ludHJfaWR4XTsKQEAgLTQwNiw3 ICs0MDYsNyBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3VucmVnaXN0ZXJfaXJxKHN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKIAlpbnQgcmV0OwogCiAJaWYgKCFwaHlzX2VuYykg ewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJST1IoImlu dmFsaWQgZW5jb2RlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpcnEgPSAmcGh5c19l bmMtPmlycVtpbnRyX2lkeF07CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9n ZXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAlpbnQgaSA9IDA7 CiAKIAlpZiAoIWh3X3JlcyB8fCAhZHJtX2VuYyB8fCAhY29ubl9zdGF0ZSkgewotCQlEUFVfRVJS T1IoImludmFsaWQgYXJndW1lbnQocyksIGRybV9lbmMgJWQsIHJlcyAlZCwgc3RhdGUgJWRcbiIs CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGRybV9lbmMgJWQsIHJlcyAl ZCwgc3RhdGUgJWRcbiIsCiAJCQkJZHJtX2VuYyAhPSAwLCBod19yZXMgIT0gMCwgY29ubl9zdGF0 ZSAhPSAwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ3Niw3ICs0NzYsNyBAQCBzdGF0aWMgdm9pZCBk cHVfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAlpbnQgaSA9 IDA7CiAKIAlpZiAoIWRybV9lbmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIp OworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQog CkBAIC01MTcsNyArNTE3LDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9oZWxwZXJfc3BsaXRfY29uZmln KAogCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm87CiAKIAlpZiAoIXBoeXNfZW5j IHx8ICFwaHlzX2VuYy0+aHdfbWRwdG9wIHx8ICFwaHlzX2VuYy0+cGFyZW50KSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBhcmcocyksIGVuY29kZXIgJWRcbiIsIHBoeXNfZW5jICE9IDApOworCQlE Uk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZyhzKSwgZW5jb2RlciAlZFxuIiwgcGh5c19lbmMgIT0g MCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYwOCw3ICs2MDgsNyBAQCBzdGF0aWMgaW50IGRwdV9l bmNvZGVyX3ZpcnRfYXRvbWljX2NoZWNrKAogCWludCByZXQgPSAwOwogCiAJaWYgKCFkcm1fZW5j IHx8ICFjcnRjX3N0YXRlIHx8ICFjb25uX3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBh cmcocyksIGRybV9lbmMgJWQsIGNydGMvY29ubiBzdGF0ZSAlZC8lZFxuIiwKKwkJRFJNX0RFVl9F UlJPUigiaW52YWxpZCBhcmcocyksIGRybV9lbmMgJWQsIGNydGMvY29ubiBzdGF0ZSAlZC8lZFxu IiwKIAkJCQlkcm1fZW5jICE9IDAsIGNydGNfc3RhdGUgIT0gMCwgY29ubl9zdGF0ZSAhPSAwKTsK IAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNjg1LDExICs2ODUsMTEgQEAgc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg KmRwdV9lbmMsCiAJaW50IGk7CiAKIAlpZiAoIWRwdV9lbmMgfHwgIWRpc3BfaW5mbykgewotCQlE UFVfRVJST1IoImludmFsaWQgcGFyYW0gZHB1X2VuYzolZCBvciBkaXNwX2luZm86JWRcbiIsCisJ CURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW0gZHB1X2VuYzolZCBvciBkaXNwX2luZm86JWRc biIsCiAJCQkJCWRwdV9lbmMgIT0gTlVMTCwgZGlzcF9pbmZvICE9IE5VTEwpOwogCQlyZXR1cm47 CiAJfSBlbHNlIGlmIChkcHVfZW5jLT5udW1fcGh5c19lbmNzID4gQVJSQVlfU0laRShkcHVfZW5j LT5od19wcCkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIG51bSBwaHlzIGVuYyAlZC8lZFxuIiwK KwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBudW0gcGh5cyBlbmMgJWQvJWRcbiIsCiAJCQkJZHB1 X2VuYy0+bnVtX3BoeXNfZW5jcywKIAkJCQkoaW50KSBBUlJBWV9TSVpFKGRwdV9lbmMtPmh3X3Bw KSk7CiAJCXJldHVybjsKQEAgLTcwMSwxMyArNzAxLDEzIEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5j b2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5j LAogCiAJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKIAlpZiAoIWRwdV9rbXMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdV9rbXNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIGRwdV9rbXNcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaHdfbWRwdG9wID0gZHB1X2ttcy0+ aHdfbWRwOwogCWlmICghaHdfbWRwdG9wKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBtZHB0b3Bc biIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIG1kcHRvcFxuIik7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTczMiw3ICs3MzIsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfaXJxX2NvbnRy b2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkKIAlpbnQgaTsKIAog CWlmICghZHJtX2VuYykgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURS TV9ERVZfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTc2 Miw3ICs3NjIsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9o ZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCXRyYWNlX2RwdV9lbmNfcmNfaGVs cGVyKERSTUlEKGRybV9lbmMpLCBlbmFibGUpOwogCiAJaWYgKCFkcHVfZW5jLT5jdXJfbWFzdGVy KSB7Ci0JCURQVV9FUlJPUigiZW5jb2RlciBtYXN0ZXIgbm90IHNldFxuIik7CisJCURSTV9ERVZf RVJST1IoImVuY29kZXIgbWFzdGVyIG5vdCBzZXRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC03 OTMsNyArNzkzLDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAogCWlmICghZHJtX2VuYyB8fCAhZHJtX2VuYy0+ ZGV2IHx8ICFkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlIHx8CiAJCQkhZHJtX2VuYy0+Y3J0Yykg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkcHVfZW5j ID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKQEAgLTgwMiw3ICs4MDIsNyBAQCBzdGF0 aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jLAogCQkJCQkJTVNNX0RJU1BMQVlfQ0FQX1ZJRF9NT0RFOwogCiAJaWYgKGRybV9lbmMt PmNydGMtPmluZGV4ID49IEFSUkFZX1NJWkUocHJpdi0+ZGlzcF90aHJlYWQpKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBjcnRjIGluZGV4XG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBj cnRjIGluZGV4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRpc3BfdGhyZWFkID0gJnBy aXYtPmRpc3BfdGhyZWFkW2RybV9lbmMtPmNydGMtPmluZGV4XTsKQEAgLTEwMjIsNyArMTAyMiw3 IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jLAogCWludCBpID0gMCwgcmV0OwogCiAJaWYgKCFkcm1fZW5jKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBl bmNvZGVyXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5NCwyMCArMTA5NCwyMCBAQCBzdGF0 aWMgdm9pZCBfZHB1X2VuY29kZXJfdmlydF9lbmFibGVfaGVscGVyKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZHJtX2VuYykKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAogCWlmICghZHJtX2VuYyB8 fCAhZHJtX2VuYy0+ZGV2IHx8ICFkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBw YXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaXYgPSBkcm1fZW5jLT5kZXYtPmRl dl9wcml2YXRlOwogCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CiAJaWYgKCFkcHVf a21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkcHVfa21zXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBkcHVfa21zXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWRwdV9lbmMgPSB0b19k cHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwogCWlmICghZHB1X2VuYyB8fCAhZHB1X2VuYy0+Y3Vy X21hc3RlcikgewotCQlEUFVfRVJST1IoImludmFsaWQgZHB1IGVuY29kZXIvbWFzdGVyXG4iKTsK KwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBkcHUgZW5jb2Rlci9tYXN0ZXJcbiIpOwogCQlyZXR1 cm47CiAJfQogCkBAIC0xMTMyLDcgKzExMzIsNyBAQCB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfcmVz dG9yZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJaW50IGk7CiAKIAlpZiAoIWRybV9l bmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwdV9lbmMgPSB0b19kcHVf ZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwpAQCAtMTE1Nyw3ICsxMTU3LDcgQEAgc3RhdGljIHZvaWQg ZHB1X2VuY29kZXJfdmlydF9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpjdXJfbW9kZSA9IE5VTEw7CiAKIAlpZiAoIWRybV9lbmMp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJp bnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwdV9lbmMgPSB0b19kcHVfZW5j b2Rlcl92aXJ0KGRybV9lbmMpOwpAQCAtMTE3OCw3ICsxMTc4LDcgQEAgc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfdmlydF9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCX0KIAog CWlmICghZHB1X2VuYy0+Y3VyX21hc3RlcikgewotCQlEUFVfRVJST1IoInZpcnQgZW5jb2RlciBo YXMgbm8gbWFzdGVyISBudW1fcGh5cyAlZFxuIiwgaSk7CisJCURSTV9ERVZfRVJST1IoInZpcnQg ZW5jb2RlciBoYXMgbm8gbWFzdGVyISBudW1fcGh5cyAlZFxuIiwgaSk7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTEyMjEsMTMgKzEyMjEsMTMgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9k aXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAlpbnQgaSA9IDA7CiAKIAlpZiAo IWRybV9lbmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVW X0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmICghZHJt X2VuYy0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkZXZcbiIpOworCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIGRldlxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKCFkcm1fZW5jLT5k ZXYtPmRldl9wcml2YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkZXZfcHJpdmF0ZVxuIik7 CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZGV2X3ByaXZhdGVcbiIpOwogCQlyZXR1cm47CiAJ fQogCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X2Rp c2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCiAJLyogYWZ0ZXIgcGh5cyB3YWl0 cyBmb3IgZnJhbWUtZG9uZSwgc2hvdWxkIGJlIG5vIG1vcmUgZnJhbWVzIHBlbmRpbmcgKi8KIAlp ZiAoYXRvbWljX3hjaGcoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwgMCkpIHsKLQkJRFBV X0VSUk9SKCJlbmMlZCB0aW1lb3V0IHBlbmRpbmdcbiIsIGRybV9lbmMtPmJhc2UuaWQpOworCQlE Uk1fREVWX0VSUk9SKCJlbmMlZCB0aW1lb3V0IHBlbmRpbmdcbiIsIGRybV9lbmMtPmJhc2UuaWQp OwogCQlkZWxfdGltZXJfc3luYygmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lcik7CiAJfQogCkBA IC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIGRwdV9lbmNvZGVyX3JlZ2lzdGVyX3ZibGFua19jYWxs YmFjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJZW5hYmxlID0gdmJsX2NiID8gdHJ1 ZSA6IGZhbHNlOwogCiAJaWYgKCFkcm1fZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBlbmNv ZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKIAkJcmV0dXJu OwogCX0KIAl0cmFjZV9kcHVfZW5jX3ZibGFua19jYihEUk1JRChkcm1fZW5jKSwgZW5hYmxlKTsK QEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgZHB1X2VuY29kZXJfcmVnaXN0ZXJfZnJhbWVfZXZl bnRfY2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCWVuYWJsZSA9IGZyYW1l X2V2ZW50X2NiID8gdHJ1ZSA6IGZhbHNlOwogCiAJaWYgKCFkcm1fZW5jKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBlbmNvZGVy XG4iKTsKIAkJcmV0dXJuOwogCX0KIAl0cmFjZV9kcHVfZW5jX2ZyYW1lX2V2ZW50X2NiKERSTUlE KGRybV9lbmMpLCBlbmFibGUpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfb2ZmX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIAkJCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0LCBkZWxheWVkX29mZl93b3JrLndvcmspOwogCiAJaWYgKCFkcHVfZW5j KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkcHUgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJS T1IoImludmFsaWQgZHB1IGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDUzLDE5 ICsxNDUzLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZHB1X2VuY29kZXJfdHJpZ2dlcl9mbHVz aChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJdTMyIHJldCA9IFVJTlRfTUFYOwogCiAJ aWYgKCFkcm1fZW5jIHx8ICFwaHlzKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChz KSwgZHJtX2VuYyAlZCwgcGh5c19lbmMgJWRcbiIsCisJCURSTV9ERVZfRVJST1IoImludmFsaWQg YXJndW1lbnQocyksIGRybV9lbmMgJWQsIHBoeXNfZW5jICVkXG4iLAogCQkJCWRybV9lbmMgIT0g MCwgcGh5cyAhPSAwKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghcGh5cy0+aHdfcHApIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBpbmdwb25nIGh3XG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52 YWxpZCBwaW5ncG9uZyBod1xuIik7CiAJCXJldHVybjsKIAl9CiAKIAljdGwgPSBwaHlzLT5od19j dGw7CiAJaWYgKCFjdGwgfHwgIWN0bC0+b3BzLnRyaWdnZXJfZmx1c2gpIHsKLQkJRFBVX0VSUk9S KCJtaXNzaW5nIHRyaWdnZXIgY2JcbiIpOworCQlEUk1fREVWX0VSUk9SKCJtaXNzaW5nIHRyaWdn ZXIgY2JcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDkwLDEyICsxNDkwLDEyIEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBfZHB1X2VuY29kZXJfdHJpZ2dlcl9mbHVzaChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMsCiBzdGF0aWMgaW5saW5lIHZvaWQgX2RwdV9lbmNvZGVyX3RyaWdnZXJfc3Rh cnQoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMpCiB7CiAJaWYgKCFwaHlzKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgYXJndW1lbnQocylcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFwaHlzLT5od19wcCkg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGluZ3BvbmcgaHdcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIHBpbmdwb25nIGh3XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTUwOCw3ICsx NTA4LDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9oZWxwZXJfdHJpZ2dlcl9zdGFydChzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiAJc3RydWN0IGRwdV9od19jdGwgKmN0bDsKIAogCWlm ICghcGh5c19lbmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1f REVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNTUx LDcgKzE1NTEsNyBAQCB2b2lkIGRwdV9lbmNvZGVyX2hlbHBlcl9od19yZXNldChzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiAJaW50IHJjOwogCiAJaWYgKCFwaHlzX2VuYykgewot CQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgZW5jb2RlclxuIik7CiAJCXJldHVybjsKIAl9CiAJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVy X3ZpcnQocGh5c19lbmMtPnBhcmVudCk7CkBAIC0xNTg4LDcgKzE1ODgsNyBAQCBzdGF0aWMgdm9p ZCBfZHB1X2VuY29kZXJfa2lja29mZl9waHlzKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVf ZW5jKQogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAogCWlmICghZHB1X2VuYykgewotCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQg ZW5jb2RlclxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2MzksNyArMTYzOSw3IEBAIHZvaWQg ZHB1X2VuY29kZXJfdHJpZ2dlcl9raWNrb2ZmX3BlbmRpbmcoc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jKQogCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm87CiAKIAlpZiAoIWRy bV9lbmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwdV9lbmMgPSB0b19k cHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwpAQCAtMTY3NiwxOSArMTY3NiwxOSBAQCBzdGF0aWMg dTMyIF9kcHVfZW5jb2Rlcl9jYWxjdWxhdGVfbGluZXRpbWUoc3RydWN0IGRwdV9lbmNvZGVyX3Zp cnQgKmRwdV9lbmMsCiAJCXJldHVybiAwOwogCiAJaWYgKCFkcHVfZW5jLT5jdXJfbWFzdGVyLT5v cHMuZ2V0X2xpbmVfY291bnQpIHsKLQkJRFBVX0VSUk9SKCJnZXRfbGluZV9jb3VudCBmdW5jdGlv biBub3QgZGVmaW5lZFxuIik7CisJCURSTV9ERVZfRVJST1IoImdldF9saW5lX2NvdW50IGZ1bmN0 aW9uIG5vdCBkZWZpbmVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcGNsa19yYXRlID0gbW9k ZS0+Y2xvY2s7IC8qIHBpeGVsIGNsb2NrIGluIGtIeiAqLwogCWlmIChwY2xrX3JhdGUgPT0gMCkg ewotCQlEUFVfRVJST1IoInBjbGsgaXMgMCwgY2Fubm90IGNhbGN1bGF0ZSBsaW5lIHRpbWVcbiIp OworCQlEUk1fREVWX0VSUk9SKCJwY2xrIGlzIDAsIGNhbm5vdCBjYWxjdWxhdGUgbGluZSB0aW1l XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcGNsa19wZXJpb2QgPSBESVZfUk9VTkRfVVBfVUxM KDEwMDAwMDAwMDB1bGwsIHBjbGtfcmF0ZSk7CiAJaWYgKHBjbGtfcGVyaW9kID09IDApIHsKLQkJ RFBVX0VSUk9SKCJwY2xrIHBlcmlvZCBpcyAwXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigicGNsayBw ZXJpb2QgaXMgMFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTY5OCw3ICsxNjk4LDcgQEAg c3RhdGljIHUzMiBfZHB1X2VuY29kZXJfY2FsY3VsYXRlX2xpbmV0aW1lKHN0cnVjdCBkcHVfZW5j b2Rlcl92aXJ0ICpkcHVfZW5jLAogCSAqLwogCWxpbmVfdGltZSA9IChwY2xrX3BlcmlvZCAqIG1v ZGUtPmh0b3RhbCkgLyAxMDAwOwogCWlmIChsaW5lX3RpbWUgPT0gMCkgewotCQlEUFVfRVJST1Io ImxpbmUgdGltZSBjYWxjdWxhdGlvbiBpcyAwXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigibGluZSB0 aW1lIGNhbGN1bGF0aW9uIGlzIDBcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3MjIsNyAr MTcyMiw3IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3dha2V1cF90aW1lKHN0cnVjdCBkcm1f ZW5jb2RlciAqZHJtX2VuYywKIAlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5j KTsKIAogCWlmICghZHJtX2VuYy0+Y3J0YyB8fCAhZHJtX2VuYy0+Y3J0Yy0+c3RhdGUpIHsKLQkJ RFBVX0VSUk9SKCJjcnRjL2NydGMgc3RhdGUgb2JqZWN0IGlzIE5VTExcbiIpOworCQlEUk1fREVW X0VSUk9SKCJjcnRjL2NydGMgc3RhdGUgb2JqZWN0IGlzIE5VTExcbiIpOwogCQlyZXR1cm4gLUVJ TlZBTDsKIAl9CiAJbW9kZSA9ICZkcm1fZW5jLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsK QEAgLTE3NDAsNyArMTc0MCw3IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3dha2V1cF90aW1l KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJdGltZV90b192c3luYyA9IGxpbmVfdGlt ZSAqICh2dG90YWwgLSBjdXJfbGluZSk7CiAKIAlpZiAodGltZV90b192c3luYyA9PSAwKSB7Ci0J CURQVV9FUlJPUigidGltZSB0byB2c3luYyBzaG91bGQgbm90IGJlIHplcm8sIHZ0b3RhbD0lZFxu IiwKKwkJRFJNX0RFVl9FUlJPUigidGltZSB0byB2c3luYyBzaG91bGQgbm90IGJlIHplcm8sIHZ0 b3RhbD0lZFxuIiwKIAkJCQl2dG90YWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNzY2 LDE5ICsxNzY2LDE5IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZzeW5jX2V2ZW50X2hhbmRs ZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAKIAlpZiAoIWRybV9lbmMtPmRldiB8fCAhZHJtX2Vu Yy0+ZGV2LT5kZXZfcHJpdmF0ZSB8fAogCQkJIWRybV9lbmMtPmNydGMpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBhcmFt ZXRlcnNcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJcHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3By aXZhdGU7CiAKIAlpZiAoZHJtX2VuYy0+Y3J0Yy0+aW5kZXggPj0gQVJSQVlfU0laRShwcml2LT5l dmVudF90aHJlYWQpKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjIGluZGV4XG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiaW52YWxpZCBjcnRjIGluZGV4XG4iKTsKIAkJcmV0dXJuOwogCX0KIAll dmVudF90aHJlYWQgPSAmcHJpdi0+ZXZlbnRfdGhyZWFkW2RybV9lbmMtPmNydGMtPmluZGV4XTsK IAlpZiAoIWV2ZW50X3RocmVhZCkgewotCQlEUFVfRVJST1IoImV2ZW50X3RocmVhZCBub3QgZm91 bmQgZm9yIGNydGM6JWRcbiIsCisJCURSTV9ERVZfRVJST1IoImV2ZW50X3RocmVhZCBub3QgZm91 bmQgZm9yIGNydGM6JWRcbiIsCiAJCQkJZHJtX2VuYy0+Y3J0Yy0+aW5kZXgpOwogCQlyZXR1cm47 CiAJfQpAQCAtMTc5Myw3ICsxNzkzLDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdnN5bmNf ZXZlbnRfd29ya19oYW5kbGVyKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiAJa3RpbWVfdCB3 YWtldXBfdGltZTsKIAogCWlmICghZHB1X2VuYykgewotCQlEUFVfRVJST1IoImludmFsaWQgZHB1 IGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGRwdSBlbmNvZGVyXG4iKTsK IAkJcmV0dXJuOwogCX0KIApAQCAtMTgxNCw3ICsxODE0LDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9w cmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAl1bnNpZ25l ZCBpbnQgaTsKIAogCWlmICghZHJtX2VuYyB8fCAhcGFyYW1zKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBhcmdzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0 dXJuOwogCX0KIAlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKQEAgLTE4 NTUsNyArMTg1NSw3IEBAIHZvaWQgZHB1X2VuY29kZXJfa2lja29mZihzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMpCiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoIWRybV9lbmMpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGVu Y29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCURQVV9BVFJBQ0VfQkVHSU4oImVuY29kZXJfa2lj a29mZiIpOwpAQCAtMTg5Nyw3ICsxODk3LDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Nv bW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJaW50IGk7CiAKIAlpZiAoIWRybV9l bmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwdV9lbmMgPSB0b19kcHVf ZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwpAQCAtMjA4NSw3ICsyMDg1LDcgQEAgc3RhdGljIGludCBf ZHB1X2VuY29kZXJfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAlj aGFyIG5hbWVbRFBVX05BTUVfU0laRV07CiAKIAlpZiAoIWRybV9lbmMgfHwgIWRybV9lbmMtPmRl diB8fCAhZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQg ZW5jb2RlciBvciBrbXNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXIgb3Ig a21zXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjE1LDcgKzIyMTUsNyBAQCBz dGF0aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rpc3BsYXkoc3RydWN0IGRwdV9lbmNvZGVyX3Zp cnQgKmRwdV9lbmMsCiAJc3RydWN0IGRwdV9lbmNfcGh5c19pbml0X3BhcmFtcyBwaHlzX3BhcmFt czsKIAogCWlmICghZHB1X2VuYyB8fCAhZHB1X2ttcykgewotCQlEUFVfRVJST1IoImludmFsaWQg YXJnKHMpLCBlbmMgJWQga21zICVkXG4iLAorCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZyhz KSwgZW5jICVkIGttcyAlZFxuIiwKIAkJCQlkcHVfZW5jICE9IDAsIGRwdV9rbXMgIT0gMCk7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIyMjYsNyArMjIyNiw3IEBAIHN0YXRpYyBpbnQgZHB1 X2VuY29kZXJfc2V0dXBfZGlzcGxheShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywK IAlwaHlzX3BhcmFtcy5wYXJlbnRfb3BzID0gJmRwdV9lbmNvZGVyX3BhcmVudF9vcHM7CiAJcGh5 c19wYXJhbXMuZW5jX3NwaW5sb2NrID0gJmRwdV9lbmMtPmVuY19zcGlubG9jazsKIAotCURQVV9E RUJVRygiXG4iKTsKKwlEUk1fREVWX0RFQlVHKCJcbiIpOwogCiAJaWYgKGRpc3BfaW5mby0+aW50 Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpIHsKIAkJKmRybV9lbmNfbW9kZSA9IERS TV9NT0RFX0VOQ09ERVJfRFNJOwpAQCAtMjI0Niw3ICsyMjQ2LDcgQEAgc3RhdGljIGludCBkcHVf ZW5jb2Rlcl9zZXR1cF9kaXNwbGF5KHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAog CiAJZHB1X2VuYy0+ZGlzcGxheV9udW1fb2ZfaF90aWxlcyA9IGRpc3BfaW5mby0+bnVtX29mX2hf dGlsZXM7CiAKLQlEUFVfREVCVUcoImRzaV9pbmZvLT5udW1fb2ZfaF90aWxlcyAlZFxuIiwgZGlz cF9pbmZvLT5udW1fb2ZfaF90aWxlcyk7CisJRFJNX0RFVl9ERUJVRygiZHNpX2luZm8tPm51bV9v Zl9oX3RpbGVzICVkXG4iLCBkaXNwX2luZm8tPm51bV9vZl9oX3RpbGVzKTsKIAogCWlmICgoZGlz cF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfQ01EX01PREUpIHx8CiAJICAg IChkaXNwX2luZm8tPmNhcGFiaWxpdGllcyAmIE1TTV9ESVNQTEFZX0NBUF9WSURfTU9ERSkpCkBA IC0yMjcxLDcgKzIyNzEsNyBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rpc3BsYXko c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJCQlwaHlzX3BhcmFtcy5zcGxpdF9y b2xlID0gRU5DX1JPTEVfU09MTzsKIAkJfQogCi0JCURQVV9ERUJVRygiaF90aWxlX2luc3RhbmNl ICVkID0gJWQsIHNwbGl0X3JvbGUgJWRcbiIsCisJCURSTV9ERVZfREVCVUcoImhfdGlsZV9pbnN0 YW5jZSAlZCA9ICVkLCBzcGxpdF9yb2xlICVkXG4iLAogCQkJCWksIGNvbnRyb2xsZXJfaWQsIHBo eXNfcGFyYW1zLnNwbGl0X3JvbGUpOwogCiAJCXBoeXNfcGFyYW1zLmludGZfaWR4ID0gZHB1X2Vu Y29kZXJfZ2V0X2ludGYoZHB1X2ttcy0+Y2F0YWxvZywKQEAgLTIzMTQsNyArMjMxNCw3IEBAIHN0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlz dCAqdCkKIAl1MzIgZXZlbnQ7CiAKIAlpZiAoIWRybV9lbmMtPmRldiB8fCAhZHJtX2VuYy0+ZGV2 LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJ CURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAJ cHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMzk3LDcgKzIzOTcsNyBAQCBp bnQgZHB1X2VuY29kZXJfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9l bmNvZGVyICplbmMsCiAJcmV0dXJuIHJldDsKIAogZmFpbDoKLQlEUFVfRVJST1IoImZhaWxlZCB0 byBjcmVhdGUgZW5jb2RlclxuIik7CisJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBl bmNvZGVyXG4iKTsKIAlpZiAoZHJtX2VuYykKIAkJZHB1X2VuY29kZXJfZGVzdHJveShkcm1fZW5j KTsKIApAQCAtMjQzNiw3ICsyNDM2LDcgQEAgaW50IGRwdV9lbmNvZGVyX3dhaXRfZm9yX2V2ZW50 KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWlmICgh ZHJtX2VuYykgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZf RVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkcHVf ZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKQEAgLTI0ODEsNyArMjQ4MSw3IEBA IGVudW0gZHB1X2ludGZfbW9kZSBkcHVfZW5jb2Rlcl9nZXRfaW50Zl9tb2RlKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKIAlpbnQgaTsKIAogCWlmICghZW5jb2RlcikgewotCQlEUFVfRVJS T1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZW5jb2Rl clxuIik7CiAJCXJldHVybiBJTlRGX01PREVfTk9ORTsKIAl9CiAJZHB1X2VuYyA9IHRvX2RwdV9l bmNvZGVyX3ZpcnQoZW5jb2Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX2NtZC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQuYwppbmRleCAzMDg0Njc1Li4zMWI0OGI4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX2Nt ZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNf Y21kLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgImRwdV9mb3JtYXRzLmgiCiAjaW5j bHVkZSAiZHB1X3RyYWNlLmgiCiAKLSNkZWZpbmUgRFBVX0RFQlVHX0NNREVOQyhlLCBmbXQsIC4u LikgRFBVX0RFQlVHKCJlbmMlZCBpbnRmJWQgIiBmbXQsIFwKKyNkZWZpbmUgRFBVX0RFQlVHX0NN REVOQyhlLCBmbXQsIC4uLikgRFJNX0RFVl9ERUJVRygiZW5jJWQgaW50ZiVkICIgZm10LCBcCiAJ CShlKSAmJiAoZSktPmJhc2UucGFyZW50ID8gXAogCQkoZSktPmJhc2UucGFyZW50LT5iYXNlLmlk IDogLTEsIFwKIAkJKGUpID8gKGUpLT5iYXNlLmludGZfaWR4IC0gSU5URl8wIDogLTEsICMjX19W QV9BUkdTX18pCiAKLSNkZWZpbmUgRFBVX0VSUk9SX0NNREVOQyhlLCBmbXQsIC4uLikgRFBVX0VS Uk9SKCJlbmMlZCBpbnRmJWQgIiBmbXQsIFwKKyNkZWZpbmUgRFBVX0VSUk9SX0NNREVOQyhlLCBm bXQsIC4uLikgRFJNX0RFVl9FUlJPUigiZW5jJWQgaW50ZiVkICIgZm10LCBcCiAJCShlKSAmJiAo ZSktPmJhc2UucGFyZW50ID8gXAogCQkoZSktPmJhc2UucGFyZW50LT5iYXNlLmlkIDogLTEsIFwK IAkJKGUpID8gKGUpLT5iYXNlLmludGZfaWR4IC0gSU5URl8wIDogLTEsICMjX19WQV9BUkdTX18p CkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c19jbWRfbW9k ZV9zZXQoCiAJaW50IGksIGluc3RhbmNlOwogCiAJaWYgKCFwaHlzX2VuYyB8fCAhbW9kZSB8fCAh YWRqX21vZGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOworCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm47CiAJfQogCXBoeXNfZW5jLT5jYWNoZWRf bW9kZSA9ICphZGpfbW9kZTsKQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IF9kcHVfZW5j b2Rlcl9waHlzX2NtZF93YWl0X2Zvcl9pZGxlKAogCWludCByZXQ7CiAKIAlpZiAoIXBoeXNfZW5j KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigi aW52YWxpZCBlbmNvZGVyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zMTIsNyAr MzEyLDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9jb250cm9sX3ZibGFua19p cnEoCiAJaW50IHJlZmNvdW50OwogCiAJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X3Bw KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigi aW52YWxpZCBlbmNvZGVyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zOTUsNyAr Mzk1LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c19jbWRfdGVhcmNoZWNrX2NvbmZp ZygKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAogCWlmICghcGh5c19lbmMgfHwgIXBoeXNf ZW5jLT5od19wcCkgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9E RVZfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CiAJCXJldHVybjsKIAl9CiAJbW9kZSA9ICZw aHlzX2VuYy0+Y2FjaGVkX21vZGU7CkBAIC00MTAsNyArNDEwLDcgQEAgc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfcGh5c19jbWRfdGVhcmNoZWNrX2NvbmZpZygKIAogCWRwdV9rbXMgPSBwaHlzX2Vu Yy0+ZHB1X2ttczsKIAlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmRldiB8fCAhZHB1X2ttcy0+ ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgZGV2aWNlXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiaW52YWxpZCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCXByaXYg PSBkcHVfa21zLT5kZXYtPmRldl9wcml2YXRlOwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHN0YXRpYyB2 b2lkIF9kcHVfZW5jb2Rlcl9waHlzX2NtZF9waW5ncG9uZ19jb25maWcoCiAKIAlpZiAoIXBoeXNf ZW5jIHx8ICFwaHlzX2VuYy0+aHdfY3RsIHx8ICFwaHlzX2VuYy0+aHdfcHAKIAkJCXx8ICFwaHlz X2VuYy0+aHdfY3RsLT5vcHMuc2V0dXBfaW50Zl9jZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IGFyZyhzKSwgZW5jICVkXG4iLCBwaHlzX2VuYyAhPSAwKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52 YWxpZCBhcmcocyksIGVuYyAlZFxuIiwgcGh5c19lbmMgIT0gMCk7CiAJCXJldHVybjsKIAl9CiAK QEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9lbmFi bGVfaGVscGVyKAogCXUzMiBmbHVzaF9tYXNrID0gMDsKIAogCWlmICghcGh5c19lbmMgfHwgIXBo eXNfZW5jLT5od19jdGwgfHwgIXBoeXNfZW5jLT5od19wcCkgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJnKHMpLCBlbmNvZGVyICVkXG4iLCBwaHlzX2VuYyAhPSAwKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBhcmcocyksIGVuY29kZXIgJWRcbiIsIHBoeXNfZW5jICE9IDApOwogCQlyZXR1 cm47CiAJfQogCkBAIC01MzEsMTQgKzUzMSwxNCBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9w aHlzX2NtZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQogCQl0b19k cHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlz X2VuYy0+aHdfcHApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBoeXMgZW5jb2RlclxuIik7CisJ CURSTV9ERVZfRVJST1IoImludmFsaWQgcGh5cyBlbmNvZGVyXG4iKTsKIAkJcmV0dXJuOwogCX0K IAogCURQVV9ERUJVR19DTURFTkMoY21kX2VuYywgInBwICVkXG4iLCBwaHlzX2VuYy0+aHdfcHAt PmlkeCAtIFBJTkdQT05HXzApOwogCiAJaWYgKHBoeXNfZW5jLT5lbmFibGVfc3RhdGUgPT0gRFBV X0VOQ19FTkFCTEVEKSB7Ci0JCURQVV9FUlJPUigiYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJRFJN X0RFVl9FUlJPUigiYWxyZWFkeSBlbmFibGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTg3 LDcgKzU4Nyw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX2Rpc2FibGUoc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQogCQl0b19kcHVfZW5jb2Rlcl9waHlzX2Nt ZChwaHlzX2VuYyk7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+aHdfcHApIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlk IGVuY29kZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCURSTV9ERUJVR19LTVMoImlkOiV1IHBwOiVk IHN0YXRlOiVkXG4iLCBEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwKQEAgLTYxMCw3ICs2MTAsNyBA QCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9kZXN0cm95KHN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzX2VuYykKIAkJdG9fZHB1X2VuY29kZXJfcGh5c19jbWQocGh5c19lbmMp OwogCiAJaWYgKCFwaHlzX2VuYykgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7 CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CiAJCXJldHVybjsKIAl9CiAJ a2ZyZWUoY21kX2VuYyk7CkBAIC02MjUsMTIgKzYyNSwxMiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5j b2Rlcl9waHlzX2NtZF9nZXRfaHdfcmVzb3VyY2VzKAogCQl0b19kcHVfZW5jb2Rlcl9waHlzX2Nt ZChwaHlzX2VuYyk7CiAKIAlpZiAoIXBoeXNfZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBl bmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKIAkJcmV0 dXJuOwogCX0KIAogCWlmICgocGh5c19lbmMtPmludGZfaWR4IC0gSU5URl8wKSA+PSBJTlRGX01B WCkgewotCQlEUFVfRVJST1IoImludmFsaWQgaW50ZiBpZHg6JWRcbiIsIHBoeXNfZW5jLT5pbnRm X2lkeCk7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgaW50ZiBpZHg6JWRcbiIsIHBoeXNfZW5j LT5pbnRmX2lkeCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY0Nyw3ICs2NDcsNyBAQCBzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9wcmVwYXJlX2Zvcl9raWNrb2ZmKAogCWludCByZXQ7 CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+aHdfcHApIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIp OwogCQlyZXR1cm47CiAJfQogCURSTV9ERUJVR19LTVMoImlkOiV1IHBwOiVkIHBlbmRpbmdfY250 OiVkXG4iLCBEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwKQEAgLTY4MSw3ICs2ODEsNyBAQCBzdGF0 aWMgaW50IF9kcHVfZW5jb2Rlcl9waHlzX2NtZF93YWl0X2Zvcl9jdGxfc3RhcnQoCiAJaW50IHJl dDsKIAogCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5od19jdGwpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmd1 bWVudChzKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODI3LDEyICs4MjcsMTIg QEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRwdV9lbmNvZGVyX3BoeXNfY21kX2luaXQoCiAJ c3RydWN0IGRwdV9lbmNvZGVyX2lycSAqaXJxOwogCWludCBpLCByZXQgPSAwOwogCi0JRFBVX0RF QlVHKCJpbnRmICVkXG4iLCBwLT5pbnRmX2lkeCAtIElOVEZfMCk7CisJRFJNX0RFVl9ERUJVRygi aW50ZiAlZFxuIiwgcC0+aW50Zl9pZHggLSBJTlRGXzApOwogCiAJY21kX2VuYyA9IGt6YWxsb2Mo c2l6ZW9mKCpjbWRfZW5jKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbWRfZW5jKSB7CiAJCXJldCA9 IC1FTk9NRU07Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlXG4iKTsKKwkJRFJNX0RF Vl9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAlwaHlz X2VuYyA9ICZjbWRfZW5jLT5iYXNlOwpAQCAtODQwLDcgKzg0MCw3IEBAIHN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpkcHVfZW5jb2Rlcl9waHlzX2NtZF9pbml0KAogCWh3X21kcCA9IGRwdV9ybV9n ZXRfbWRwKCZwLT5kcHVfa21zLT5ybSk7CiAJaWYgKElTX0VSUl9PUl9OVUxMKGh3X21kcCkpIHsK IAkJcmV0ID0gUFRSX0VSUihod19tZHApOwotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgbWRw dG9wXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIGdldCBtZHB0b3BcbiIpOwogCQln b3RvIGZhaWxfbWRwX2luaXQ7CiAJfQogCXBoeXNfZW5jLT5od19tZHB0b3AgPSBod19tZHA7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlz X3ZpZC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192 aWQuYwppbmRleCAxNGZjN2MyLi5mNjQ1NjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKQEAgLTE3LDEzICsxNywxMyBA QAogI2luY2x1ZGUgImRwdV9mb3JtYXRzLmgiCiAjaW5jbHVkZSAiZHB1X3RyYWNlLmgiCiAKLSNk ZWZpbmUgRFBVX0RFQlVHX1ZJREVOQyhlLCBmbXQsIC4uLikgRFBVX0RFQlVHKCJlbmMlZCBpbnRm JWQgIiBmbXQsIFwKKyNkZWZpbmUgRFBVX0RFQlVHX1ZJREVOQyhlLCBmbXQsIC4uLikgRFJNX0RF Vl9ERUJVRygiZW5jJWQgaW50ZiVkICIgZm10LCBcCiAJCShlKSAmJiAoZSktPmJhc2UucGFyZW50 ID8gXAogCQkoZSktPmJhc2UucGFyZW50LT5iYXNlLmlkIDogLTEsIFwKIAkJKGUpICYmIChlKS0+ aHdfaW50ZiA/IFwKIAkJKGUpLT5od19pbnRmLT5pZHggLSBJTlRGXzAgOiAtMSwgIyNfX1ZBX0FS R1NfXykKIAotI2RlZmluZSBEUFVfRVJST1JfVklERU5DKGUsIGZtdCwgLi4uKSBEUFVfRVJST1Io ImVuYyVkIGludGYlZCAiIGZtdCwgXAorI2RlZmluZSBEUFVfRVJST1JfVklERU5DKGUsIGZtdCwg Li4uKSBEUk1fREVWX0VSUk9SKCJlbmMlZCBpbnRmJWQgIiBmbXQsIFwKIAkJKGUpICYmIChlKS0+ YmFzZS5wYXJlbnQgPyBcCiAJCShlKS0+YmFzZS5wYXJlbnQtPmJhc2UuaWQgOiAtMSwgXAogCQko ZSkgJiYgKGUpLT5od19pbnRmID8gXApAQCAtNTYsMTEgKzU2LDExIEBAIHN0YXRpYyB2b2lkIGRy bV9tb2RlX3RvX2ludGZfdGltaW5nX3BhcmFtcygKIAkJCXx8IChtb2RlLT52c3luY19zdGFydCA8 IG1vZGUtPnZkaXNwbGF5KQogCQkJfHwgKG1vZGUtPmhzeW5jX2VuZCA8IG1vZGUtPmhzeW5jX3N0 YXJ0KQogCQkJfHwgKG1vZGUtPnZzeW5jX2VuZCA8IG1vZGUtPnZzeW5jX3N0YXJ0KSkgewotCQlE UFVfRVJST1IoCisJCURSTV9ERVZfRVJST1IoCiAJCSAgICAiaW52YWxpZCBwYXJhbXMgLSBoc3Rh cnQ6JWQsaGVuZDolZCxodG90OiVkLGhkaXNwbGF5OiVkXG4iLAogCQkJCW1vZGUtPmhzeW5jX3N0 YXJ0LCBtb2RlLT5oc3luY19lbmQsCiAJCQkJbW9kZS0+aHRvdGFsLCBtb2RlLT5oZGlzcGxheSk7 Ci0JCURQVV9FUlJPUigidnN0YXJ0OiVkLHZlbmQ6JWQsdnRvdDolZCx2ZGlzcGxheTolZFxuIiwK KwkJRFJNX0RFVl9FUlJPUigidnN0YXJ0OiVkLHZlbmQ6JWQsdnRvdDolZCx2ZGlzcGxheTolZFxu IiwKIAkJCQltb2RlLT52c3luY19zdGFydCwgbW9kZS0+dnN5bmNfZW5kLAogCQkJCW1vZGUtPnZ0 b3RhbCwgbW9kZS0+dmRpc3BsYXkpOwogCQlyZXR1cm47CkBAIC0yNTEsMTQgKzI1MSwxNCBAQCBz dGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9zZXR1cF90aW1pbmdfZW5naW5lKAogCXN0 cnVjdCBkcHVfaHdfaW50Zl9jZmcgaW50Zl9jZmcgPSB7IDAgfTsKIAogCWlmICghcGh5c19lbmMg fHwgIXBoeXNfZW5jLT5od19jdGwtPm9wcy5zZXR1cF9pbnRmX2NmZykgewotCQlEUFVfRVJST1Io ImludmFsaWQgZW5jb2RlciAlZFxuIiwgcGh5c19lbmMgIT0gMCk7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgZW5jb2RlciAlZFxuIiwgcGh5c19lbmMgIT0gMCk7CiAJCXJldHVybjsKIAl9CiAK IAltb2RlID0gcGh5c19lbmMtPmNhY2hlZF9tb2RlOwogCXZpZF9lbmMgPSB0b19kcHVfZW5jb2Rl cl9waHlzX3ZpZChwaHlzX2VuYyk7CiAJaWYgKCF2aWRfZW5jLT5od19pbnRmLT5vcHMuc2V0dXBf dGltaW5nX2dlbikgewotCQlEUFVfRVJST1IoInRpbWluZyBlbmdpbmUgc2V0dXAgaXMgbm90IHN1 cHBvcnRlZFxuIik7CisJCURSTV9ERVZfRVJST1IoInRpbWluZyBlbmdpbmUgc2V0dXAgaXMgbm90 IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQwMSw3ICs0MDEsNyBAQCBzdGF0 aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9tb2RlX3NldCgKIAlzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5c192aWQgKnZpZF9lbmM7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+ZHB1 X2ttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2Rlci9rbXNcbiIpOworCQlEUk1fREVW X0VSUk9SKCJpbnZhbGlkIGVuY29kZXIva21zXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQx LDcgKzQ0MSw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcGh5c192aWRfY29udHJvbF92Ymxh bmtfaXJxKAogCWludCByZWZjb3VudDsKIAogCWlmICghcGh5c19lbmMpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJc biIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXNfZW5jKQogCiAJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPnBhcmVudCB8fCAhcGh5 c19lbmMtPnBhcmVudC0+ZGV2IHx8CiAJCQkhcGh5c19lbmMtPnBhcmVudC0+ZGV2LT5kZXZfcHJp dmF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2Rlci9kZXZpY2VcbiIpOworCQlEUk1f REVWX0VSUk9SKCJpbnZhbGlkIGVuY29kZXIvZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlw cml2ID0gcGh5c19lbmMtPnBhcmVudC0+ZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTQ5Niw3ICs0OTYs NyBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9l bmNvZGVyX3BoeXMgKnBoeXNfZW5jKQogCWludGYgPSB2aWRfZW5jLT5od19pbnRmOwogCWN0bCA9 IHBoeXNfZW5jLT5od19jdGw7CiAJaWYgKCF2aWRfZW5jLT5od19pbnRmIHx8ICFwaHlzX2VuYy0+ aHdfY3RsKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBod19pbnRmICVkIGh3X2N0bCAlZFxuIiwK KwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBod19pbnRmICVkIGh3X2N0bCAlZFxuIiwKIAkJCQl2 aWRfZW5jLT5od19pbnRmICE9IDAsIHBoeXNfZW5jLT5od19jdGwgIT0gMCk7CiAJCXJldHVybjsK IAl9CkBAIC01MzYsNyArNTM2LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRf ZGVzdHJveShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiAJc3RydWN0IGRwdV9l bmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOwogCiAJaWYgKCFwaHlzX2VuYykgewotCQlEUFVfRVJS T1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZW5jb2Rl clxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1MywxNCArNTUzLDE0IEBAIHN0YXRpYyB2b2lk IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2dldF9od19yZXNvdXJjZXMoCiAJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXNfdmlkICp2aWRfZW5jOwogCiAJaWYgKCFwaHlzX2VuYyB8fCAhaHdfcmVzKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmcocyksIGVuYyAlZCBod19yZXMgJWQgY29ubl9zdGF0ZSAl ZFxuIiwKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmcocyksIGVuYyAlZCBod19yZXMgJWQg Y29ubl9zdGF0ZSAlZFxuIiwKIAkJCQlwaHlzX2VuYyAhPSAwLCBod19yZXMgIT0gMCwgY29ubl9z dGF0ZSAhPSAwKTsKIAkJcmV0dXJuOwogCX0KIAogCXZpZF9lbmMgPSB0b19kcHVfZW5jb2Rlcl9w aHlzX3ZpZChwaHlzX2VuYyk7CiAJaWYgKCF2aWRfZW5jLT5od19pbnRmKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBhcmcocyksIGh3X2ludGZcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlk IGFyZyhzKSwgaHdfaW50ZlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYyMCw3ICs2MjAsNyBA QCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9wcmVwYXJlX2Zvcl9raWNrb2ZmKAog CWludCByYzsKIAogCWlmICghcGh5c19lbmMgfHwgIXBhcmFtcykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgZW5jb2Rlci9wYXJhbWV0ZXJzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBl bmNvZGVyL3BhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm47CiAJfQogCXZpZF9lbmMgPSB0b19kcHVf ZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CkBAIC02NTEsMTQgKzY1MSwxNCBAQCBzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9kaXNhYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYykKIAogCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5wYXJlbnQgfHwgIXBo eXNfZW5jLT5wYXJlbnQtPmRldiB8fAogCQkJIXBoeXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3By aXZhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXIvZGV2aWNlXG4iKTsKKwkJRFJN X0RFVl9FUlJPUigiaW52YWxpZCBlbmNvZGVyL2RldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJ cHJpdiA9IHBoeXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGU7CiAKIAl2aWRfZW5jID0g dG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOwogCWlmICghdmlkX2VuYy0+aHdfaW50 ZiB8fCAhcGh5c19lbmMtPmh3X2N0bCkgewotCQlEUFVfRVJST1IoImludmFsaWQgaHdfaW50ZiAl ZCBod19jdGwgJWRcbiIsCisJCURSTV9ERVZfRVJST1IoImludmFsaWQgaHdfaW50ZiAlZCBod19j dGwgJWRcbiIsCiAJCQkJdmlkX2VuYy0+aHdfaW50ZiAhPSAwLCBwaHlzX2VuYy0+aHdfY3RsICE9 IDApOwogCQlyZXR1cm47CiAJfQpAQCAtNjY5LDcgKzY2OSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9l bmNvZGVyX3BoeXNfdmlkX2Rpc2FibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5j KQogCQlyZXR1cm47CiAKIAlpZiAocGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0RJ U0FCTEVEKSB7Ci0JCURQVV9FUlJPUigiYWxyZWFkeSBkaXNhYmxlZFxuIik7CisJCURSTV9ERVZf RVJST1IoImFscmVhZHkgZGlzYWJsZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC03MDcsNyAr NzA3LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfaGFuZGxlX3Bvc3Rfa2lj a29mZigKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9lbmM7CiAKIAlpZiAoIXBo eXNfZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJRFJNX0RFVl9F UlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODQ5LDcgKzg0 OSw3IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpkcHVfZW5jb2Rlcl9waHlzX3ZpZF9pbml0 KAogCWh3X21kcCA9IGRwdV9ybV9nZXRfbWRwKCZwLT5kcHVfa21zLT5ybSk7CiAJaWYgKElTX0VS Ul9PUl9OVUxMKGh3X21kcCkpIHsKIAkJcmV0ID0gUFRSX0VSUihod19tZHApOwotCQlEUFVfRVJS T1IoImZhaWxlZCB0byBnZXQgbWRwdG9wXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRv IGdldCBtZHB0b3BcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCXBoeXNfZW5jLT5od19tZHB0b3Ag PSBod19tZHA7CkBAIC04NzEsNyArODcxLDcgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRw dV9lbmNvZGVyX3BoeXNfdmlkX2luaXQoCiAKIAlpZiAoIXZpZF9lbmMtPmh3X2ludGYpIHsKIAkJ cmV0ID0gLUVJTlZBTDsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGh3X2ludGZcbiIpOwor CQlEUk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGh3X2ludGZcbiIpOwogCQlnb3RvIGZhaWw7 CiAJfQogCkBAIC05MTQsNyArOTE0LDcgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRwdV9l bmNvZGVyX3BoeXNfdmlkX2luaXQoCiAJcmV0dXJuIHBoeXNfZW5jOwogCiBmYWlsOgotCURQVV9F UlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBlbmNvZGVyXG4iKTsKKwlEUk1fREVWX0VSUk9SKCJmYWls ZWQgdG8gY3JlYXRlIGVuY29kZXJcbiIpOwogCWlmICh2aWRfZW5jKQogCQlkcHVfZW5jb2Rlcl9w aHlzX3ZpZF9kZXN0cm95KHBoeXNfZW5jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2Zvcm1hdHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9mb3JtYXRzLmMKaW5kZXggYmZjZDE2NS4uNDhlMjA0MiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Zvcm1hdHMuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZm9ybWF0cy5jCkBAIC0xMDkwLDcgKzEwOTAsNyBAQCBj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZHB1X2dldF9kcHVfZm9ybWF0X2V4dCgKIAkgKiBDdXJy ZW50bHkgb25seSBzdXBwb3J0IGV4YWN0bHkgemVybyBvciBvbmUgbW9kaWZpZXIuCiAJICogQWxs IHBsYW5lcyB1c2UgdGhlIHNhbWUgbW9kaWZpZXIuCiAJICovCi0JRFBVX0RFQlVHKCJwbGFuZSBm b3JtYXQgbW9kaWZpZXIgMHglbGxYXG4iLCBtb2RpZmllcik7CisJRFJNX0RFVl9ERUJVRygicGxh bmUgZm9ybWF0IG1vZGlmaWVyIDB4JWxsWFxuIiwgbW9kaWZpZXIpOwogCiAJc3dpdGNoIChtb2Rp ZmllcikgewogCWNhc2UgMDoKQEAgLTExMDAsMTEgKzExMDAsMTEgQEAgY29uc3Qgc3RydWN0IGRw dV9mb3JtYXQgKmRwdV9nZXRfZHB1X2Zvcm1hdF9leHQoCiAJY2FzZSBEUk1fRk9STUFUX01PRF9R Q09NX0NPTVBSRVNTRUQ6CiAJCW1hcCA9IGRwdV9mb3JtYXRfbWFwX3Vid2M7CiAJCW1hcF9zaXpl ID0gQVJSQVlfU0laRShkcHVfZm9ybWF0X21hcF91YndjKTsKLQkJRFBVX0RFQlVHKCJmb3VuZCBm bXQ6ICU0LjRzICBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRURcbiIsCisJCURSTV9ERVZf REVCVUcoImZvdW5kIGZtdDogJTQuNHMgIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRFxu IiwKIAkJCQkoY2hhciAqKSZmb3JtYXQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUFVfRVJS T1IoInVuc3VwcG9ydGVkIGZvcm1hdCBtb2RpZmllciAlbGxYXG4iLCBtb2RpZmllcik7CisJCURS TV9ERVZfRVJST1IoInVuc3VwcG9ydGVkIGZvcm1hdCBtb2RpZmllciAlbGxYXG4iLCBtb2RpZmll cik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTExNiwxMCArMTExNiwxMCBAQCBjb25zdCBz dHJ1Y3QgZHB1X2Zvcm1hdCAqZHB1X2dldF9kcHVfZm9ybWF0X2V4dCgKIAl9CiAKIAlpZiAoZm10 ID09IE5VTEwpCi0JCURQVV9FUlJPUigidW5zdXBwb3J0ZWQgZm10OiAlNC40cyBtb2RpZmllciAw eCVsbFhcbiIsCisJCURSTV9ERVZfRVJST1IoInVuc3VwcG9ydGVkIGZtdDogJTQuNHMgbW9kaWZp ZXIgMHglbGxYXG4iLAogCQkJKGNoYXIgKikmZm9ybWF0LCBtb2RpZmllcik7CiAJZWxzZQotCQlE UFVfREVCVUcoImZtdCAlNC40cyBtb2QgMHglbGxYIHVid2MgJWQgeXV2ICVkXG4iLAorCQlEUk1f REVWX0RFQlVHKCJmbXQgJTQuNHMgbW9kIDB4JWxsWCB1YndjICVkIHl1diAlZFxuIiwKIAkJCQko Y2hhciAqKSZmb3JtYXQsIG1vZGlmaWVyLAogCQkJCURQVV9GT1JNQVRfSVNfVUJXQyhmbXQpLAog CQkJCURQVV9GT1JNQVRfSVNfWVVWKGZtdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jYXRhbG9nLmMKaW5kZXggNDRlZTA2My4uNzA2MjRkNiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCkBAIC01MDQsNyAr NTA0LDcgQEAgc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIgaHdf cmV2KQogCQl9CiAJfQogCi0JRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBjaGlwc2V0IGlkOiVYXG4i LCBod19yZXYpOworCURSTV9ERVZfRVJST1IoInVuc3VwcG9ydGVkIGNoaXBzZXQgaWQ6JVhcbiIs IGh3X3Jldik7CiAJZHB1X2h3X2NhdGFsb2dfZGVpbml0KGRwdV9jZmcpOwogCXJldHVybiBFUlJf UFRSKC1FTk9ERVYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2NkbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nk bS5jCmluZGV4IDU1NDg3NGIuLjgwNWM3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jZG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY2RtLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQCBzdHJ1Y3QgZHB1X2h3X2NkbSAq ZHB1X2h3X2NkbV9pbml0KGVudW0gZHB1X2NkbSBpZHgsCiAKIAlyYyA9IGRwdV9od19ibGtfaW5p dCgmYy0+YmFzZSwgRFBVX0hXX0JMS19DRE0sIGlkeCwgJmRwdV9od19vcHMpOwogCWlmIChyYykg ewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOworCQlEUk1f REVWX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsKIAkJZ290byBibGtf aW5pdF9lcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j dGwuYwppbmRleCAwNmJlN2NmLi44Nzg4OGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2N0bC5jCkBAIC01MjAsNyArNTIwLDcgQEAgc3RydWN0IGRwdV9od19jdGwg KmRwdV9od19jdGxfaW5pdChlbnVtIGRwdV9jdGwgaWR4LAogCiAJcmMgPSBkcHVfaHdfYmxrX2lu aXQoJmMtPmJhc2UsIERQVV9IV19CTEtfQ1RMLCBpZHgsICZkcHVfaHdfb3BzKTsKIAlpZiAocmMp IHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsKKwkJRFJN X0RFVl9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CiAJCWdvdG8gYmxr X2luaXRfZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfaW50Zi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2ludGYuYwppbmRleCBkMjgwZGY1Li4zNTQyMzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19pbnRmLmMKQEAgLTMyOCw3ICszMjgsNyBAQCBzdHJ1Y3QgZHB1X2h3 X2ludGYgKmRwdV9od19pbnRmX2luaXQoZW51bSBkcHVfaW50ZiBpZHgsCiAKIAlyYyA9IGRwdV9o d19ibGtfaW5pdCgmYy0+YmFzZSwgRFBVX0hXX0JMS19JTlRGLCBpZHgsICZkcHVfaHdfb3BzKTsK IAlpZiAocmMpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJj KTsKKwkJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CiAJ CWdvdG8gYmxrX2luaXRfZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19sbS5jCmluZGV4IDRhYjcyYjAuLmE1ZTc1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19sbS5jCkBAIC0yNDEsNyArMjQxLDcgQEAgc3RydWN0IGRwdV9o d19taXhlciAqZHB1X2h3X2xtX2luaXQoZW51bSBkcHVfbG0gaWR4LAogCiAJcmMgPSBkcHVfaHdf YmxrX2luaXQoJmMtPmJhc2UsIERQVV9IV19CTEtfTE0sIGlkeCwgJmRwdV9od19vcHMpOwogCWlm IChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwor CQlEUk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsKIAkJZ290 byBibGtfaW5pdF9lcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3Bpbmdwb25nLmMKaW5kZXggY2MzYTYyMy4uNzljMTRkNiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKQEAgLTIzMCw3ICsy MzAsNyBAQCBzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpkcHVfaHdfcGluZ3BvbmdfaW5pdChlbnVt IGRwdV9waW5ncG9uZyBpZHgsCiAKIAlyYyA9IGRwdV9od19ibGtfaW5pdCgmYy0+YmFzZSwgRFBV X0hXX0JMS19QSU5HUE9ORywgaWR4LCAmZHB1X2h3X29wcyk7CiAJaWYgKHJjKSB7Ci0JCURQVV9F UlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CisJCURSTV9ERVZfRVJST1Io ImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwogCQlnb3RvIGJsa19pbml0X2Vycm9y OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3NzcHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKaW5k ZXggYzI1YjUyYS4uYmUyOWM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3NzcHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfc3NwcC5jCkBAIC03MzIsNyArNzMyLDcgQEAgc3RydWN0IGRwdV9od19waXBlICpkcHVf aHdfc3NwcF9pbml0KGVudW0gZHB1X3NzcHAgaWR4LAogCiAJcmMgPSBkcHVfaHdfYmxrX2luaXQo Jmh3X3BpcGUtPmJhc2UsIERQVV9IV19CTEtfU1NQUCwgaWR4LCAmZHB1X2h3X29wcyk7CiAJaWYg KHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CisJ CURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwogCQlnb3Rv IGJsa19pbml0X2Vycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X3RvcC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3RvcC5jCmluZGV4IGRiMjc5OGUuLmFlYzczYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmMKQEAgLTM3NSw3ICszNzUsNyBAQCBzdHJ1Y3QgZHB1X2h3 X21kcCAqZHB1X2h3X21kcHRvcF9pbml0KGVudW0gZHB1X21kcCBpZHgsCiAKIAlyYyA9IGRwdV9o d19ibGtfaW5pdCgmbWRwLT5iYXNlLCBEUFVfSFdfQkxLX1RPUCwgaWR4LCAmZHB1X2h3X29wcyk7 CiAJaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCBy Yyk7CisJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwog CQlnb3RvIGJsa19pbml0X2Vycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2lycS5jCmluZGV4IGQ1ZTZjZTAuLjdhZjQzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaXJxLmMKQEAgLTQ0LDcgKzQ0LDcgQEAgaW50IGRwdV9pcnFfcG9zdGluc3Rh bGwoc3RydWN0IG1zbV9rbXMgKmttcykKIAlpbnQgcmM7CiAKIAlpZiAoIWttcykgewotCQlEUFVf RVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQg cGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTgsNyArNTgsNyBA QCB2b2lkIGRwdV9pcnFfdW5pbnN0YWxsKHN0cnVjdCBtc21fa21zICprbXMpCiAJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMgPSB0b19kcHVfa21zKGttcyk7CiAKIAlpZiAoIWttcykgewotCQlEUFVf RVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQg cGFyYW1ldGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXMuYwppbmRleCA3ZGQ2YmQyLi5iMjIxZmY1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBpbnQgX2RwdV9k YW5nZXJfc2lnbmFsX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCiAJaW50IGk7CiAKIAlpZiAo IWttcyB8fCAha21zLT5kZXYgfHwgIWttcy0+ZGV2LT5kZXZfcHJpdmF0ZSB8fCAha21zLT5od19t ZHApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZyhzKVxuIik7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgYXJnKHMpXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNTAsNyArMTUwLDcg QEAgc3RhdGljIGludCBkcHVfZGVidWdmc19kYW5nZXJfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttcywKIAlkcHVfa21zLT5kZWJ1Z2ZzX2RhbmdlciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZGFu Z2VyIiwKIAkJCXBhcmVudCk7CiAJaWYgKCFkcHVfa21zLT5kZWJ1Z2ZzX2RhbmdlcikgewotCQlE UFVfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGFuZ2VyIGRlYnVnZnNcbiIpOworCQlEUk1fREVW X0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRhbmdlciBkZWJ1Z2ZzXG4iKTsKIAkJcmV0dXJuIC1F SU5WQUw7CiAJfQogCkBAIC0yODEsNyArMjgxLDcgQEAgc3RhdGljIGludCBfZHB1X2RlYnVnZnNf aW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIAogCXJjID0gZHB1X2NvcmVfcGVyZl9kZWJ1 Z2ZzX2luaXQoJmRwdV9rbXMtPnBlcmYsIGRwdV9rbXMtPmRlYnVnZnNfcm9vdCk7CiAJaWYgKHJj KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgcGVyZiAlZFxuIiwgcmMpOworCQlEUk1f REVWX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBwZXJmICVkXG4iLCByYyk7CiAJCXJldHVybiByYzsK IAl9CiAKQEAgLTQwOSwxOSArNDA5LDE5IEBAIHN0YXRpYyB2b2lkIGRwdV9rbXNfd2FpdF9mb3Jf Y29tbWl0X2RvbmUoc3RydWN0IG1zbV9rbXMgKmttcywKIAlpbnQgcmV0OwogCiAJaWYgKCFrbXMg fHwgIWNydGMgfHwgIWNydGMtPnN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNc biIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CiAJCXJldHVybjsKIAl9 CiAKIAlkZXYgPSBjcnRjLT5kZXY7CiAKIAlpZiAoIWNydGMtPnN0YXRlLT5lbmFibGUpIHsKLQkJ RFBVX0RFQlVHKCJbY3J0YzolZF0gbm90IGVuYWJsZVxuIiwgY3J0Yy0+YmFzZS5pZCk7CisJCURS TV9ERVZfREVCVUcoIltjcnRjOiVkXSBub3QgZW5hYmxlXG4iLCBjcnRjLT5iYXNlLmlkKTsKIAkJ cmV0dXJuOwogCX0KIAogCWlmICghY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgewotCQlEUFVfREVCVUco IltjcnRjOiVkXSBub3QgYWN0aXZlXG4iLCBjcnRjLT5iYXNlLmlkKTsKKwkJRFJNX0RFVl9ERUJV RygiW2NydGM6JWRdIG5vdCBhY3RpdmVcbiIsIGNydGMtPmJhc2UuaWQpOwogCQlyZXR1cm47CiAJ fQogCkBAIC00MzYsNyArNDM2LDcgQEAgc3RhdGljIHZvaWQgZHB1X2ttc193YWl0X2Zvcl9jb21t aXRfZG9uZShzdHJ1Y3QgbXNtX2ttcyAqa21zLAogCQl0cmFjZV9kcHVfa21zX3dhaXRfZm9yX2Nv bW1pdF9kb25lKERSTUlEKGNydGMpKTsKIAkJcmV0ID0gZHB1X2VuY29kZXJfd2FpdF9mb3JfZXZl bnQoZW5jb2RlciwgTVNNX0VOQ19DT01NSVRfRE9ORSk7CiAJCWlmIChyZXQgJiYgcmV0ICE9IC1F V09VTERCTE9DSykgewotCQkJRFBVX0VSUk9SKCJ3YWl0IGZvciBjb21taXQgZG9uZSByZXR1cm5l ZCAlZFxuIiwgcmV0KTsKKwkJCURSTV9ERVZfRVJST1IoIndhaXQgZm9yIGNvbW1pdCBkb25lIHJl dHVybmVkICVkXG4iLCByZXQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC00NTIsNyArNDUyLDcg QEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2koc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkvKlRPRE86IFN1cHBvcnQgdHdvIGluZGVwZW5kZW50IERTSSBjb25uZWN0b3JzICov CiAJZW5jb2RlciA9IGRwdV9lbmNvZGVyX2luaXQoZGV2LCBEUk1fTU9ERV9DT05ORUNUT1JfRFNJ KTsKIAlpZiAoSVNfRVJSX09SX05VTEwoZW5jb2RlcikpIHsKLQkJRFBVX0VSUk9SKCJlbmNvZGVy IGluaXQgZmFpbGVkIGZvciBkc2kgZGlzcGxheVxuIik7CisJCURSTV9ERVZfRVJST1IoImVuY29k ZXIgaW5pdCBmYWlsZWQgZm9yIGRzaSBkaXNwbGF5XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAt NDYwLDEzICs0NjAsMTMgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2koc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYt PmRzaSk7IGkrKykgewogCQlpZiAoIXByaXYtPmRzaVtpXSkgewotCQkJRFBVX0RFQlVHKCJpbnZh bGlkIG1zbV9kc2kgZm9yIGN0cmwgJWRcbiIsIGkpOworCQkJRFJNX0RFVl9ERUJVRygiaW52YWxp ZCBtc21fZHNpIGZvciBjdHJsICVkXG4iLCBpKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCXJjID0g bXNtX2RzaV9tb2Rlc2V0X2luaXQocHJpdi0+ZHNpW2ldLCBkZXYsIGVuY29kZXIpOwogCQlpZiAo cmMpIHsKLQkJCURQVV9FUlJPUigibW9kZXNldF9pbml0IGZhaWxlZCBmb3IgZHNpWyVkXSwgcmMg PSAlZFxuIiwKKwkJCURSTV9ERVZfRVJST1IoIm1vZGVzZXRfaW5pdCBmYWlsZWQgZm9yIGRzaVsl ZF0sIHJjID0gJWRcbiIsCiAJCQkJaSwgcmMpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTQ5OSwx MyArNDk5LDEzIEBAIHN0YXRpYyB2b2lkIF9kcHVfa21zX2RybV9vYmpfZGVzdHJveShzdHJ1Y3Qg ZHB1X2ttcyAqZHB1X2ttcykKIAlpbnQgaTsKIAogCWlmICghZHB1X2ttcykgewotCQlEUFVfRVJS T1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZHB1X2tt c1xuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKCFkcHVfa21zLT5kZXYpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGRldlxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZGV2XG4iKTsK IAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIWRwdV9rbXMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGRldl9wcml2YXRlXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52 YWxpZCBkZXZfcHJpdmF0ZVxuIik7CiAJCXJldHVybjsKIAl9CiAJcHJpdiA9IGRwdV9rbXMtPmRl di0+ZGV2X3ByaXZhdGU7CkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIGludCBfZHB1X2ttc19k cm1fb2JqX2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJaW50IG1heF9jcnRjX2NvdW50 OwogCiAJaWYgKCFkcHVfa21zIHx8ICFkcHVfa21zLT5kZXYgfHwgIWRwdV9rbXMtPmRldi0+ZGV2 KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkcHVfa21zXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigi aW52YWxpZCBkcHVfa21zXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01NjcsNyAr NTY3LDcgQEAgc3RhdGljIGludCBfZHB1X2ttc19kcm1fb2JqX2luaXQoc3RydWN0IGRwdV9rbXMg KmRwdV9rbXMpCiAJCXBsYW5lID0gZHB1X3BsYW5lX2luaXQoZGV2LCBjYXRhbG9nLT5zc3BwW2ld LmlkLCBwcmltYXJ5LAogCQkJCSgxVUwgPDwgbWF4X2NydGNfY291bnQpIC0gMSwgMCk7CiAJCWlm IChJU19FUlIocGxhbmUpKSB7Ci0JCQlEUFVfRVJST1IoImRwdV9wbGFuZV9pbml0IGZhaWxlZFxu Iik7CisJCQlEUk1fREVWX0VSUk9SKCJkcHVfcGxhbmVfaW5pdCBmYWlsZWRcbiIpOwogCQkJcmV0 ID0gUFRSX0VSUihwbGFuZSk7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTYwNyw3ICs2MDcsNyBA QCBzdGF0aWMgaW50IGRwdV9rbXNfZGVidWdmc19pbml0KHN0cnVjdCBtc21fa21zICprbXMsIHN0 cnVjdCBkcm1fbWlub3IgKm1pbm9yKQogCWludCByYzsKIAogCWlmICghZHB1X2ttcyB8fCAhZHB1 X2ttcy0+ZGV2IHx8ICFkcHVfa21zLT5kZXYtPmRldikgewotCQlEUFVfRVJST1IoImludmFsaWQg ZHB1X2ttc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CiAJCXJl dHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjE1LDcgKzYxNSw3IEBAIHN0YXRpYyBpbnQgZHB1X2tt c19kZWJ1Z2ZzX2luaXQoc3RydWN0IG1zbV9rbXMgKmttcywgc3RydWN0IGRybV9taW5vciAqbWlu b3IpCiAKIAlyYyA9IF9kcHVfZGVidWdmc19pbml0KGRwdV9rbXMpOwogCWlmIChyYykKLQkJRFBV X0VSUk9SKCJkcHVfZGVidWdmcyBpbml0IGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJRFJNX0RFVl9F UlJPUigiZHB1X2RlYnVnZnMgaW5pdCBmYWlsZWQ6ICVkXG4iLCByYyk7CiAKIAlyZXR1cm4gcmM7 CiB9CkBAIC02ODgsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgZHB1X2ttc19kZXN0cm95KHN0cnVj dCBtc21fa21zICprbXMpCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAKIAlpZiAoIWttcykg ewotCQlEUFVfRVJST1IoImludmFsaWQga21zXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxp ZCBrbXNcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIHZv aWQgX2RwdV9rbXNfc2V0X2VuY29kZXJfbW9kZShzdHJ1Y3QgbXNtX2ttcyAqa21zLAogCiAJcmMg PSBkcHVfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLT5kZXYsIGVuY29kZXIsICZpbmZvKTsKIAlpZiAo cmMpCi0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIERQVSBlbmNvZGVyICVkOiByYzolZFxu IiwKKwkJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIHNldHVwIERQVSBlbmNvZGVyICVkOiByYzol ZFxuIiwKIAkJCWVuY29kZXItPmJhc2UuaWQsIHJjKTsKIH0KIApAQCAtOTEyLDcgKzkxMiw3IEBA IHN0YXRpYyBpbnQgX2RwdV9rbXNfbW11X2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJ cmV0ID0gYXNwYWNlLT5tbXUtPmZ1bmNzLT5hdHRhY2goYXNwYWNlLT5tbXUsIGlvbW11X3BvcnRz LAogCQkJQVJSQVlfU0laRShpb21tdV9wb3J0cykpOwogCWlmIChyZXQpIHsKLQkJRFBVX0VSUk9S KCJmYWlsZWQgdG8gYXR0YWNoIGlvbW11ICVkXG4iLCByZXQpOworCQlEUk1fREVWX0VSUk9SKCJm YWlsZWQgdG8gYXR0YWNoIGlvbW11ICVkXG4iLCByZXQpOwogCQltc21fZ2VtX2FkZHJlc3Nfc3Bh Y2VfcHV0KGFzcGFjZSk7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC05NjgsMTQgKzk2OCwxNCBAQCBz dGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQogCWludCBpLCBy YyA9IC1FSU5WQUw7CiAKIAlpZiAoIWttcykgewotCQlEUFVfRVJST1IoImludmFsaWQga21zXG4i KTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAK IAlkcHVfa21zID0gdG9fZHB1X2ttcyhrbXMpOwogCWRldiA9IGRwdV9rbXMtPmRldjsKIAlpZiAo IWRldikgewotCQlEUFVfRVJST1IoImludmFsaWQgZGV2aWNlXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBkZXZpY2VcbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTk4NywxNCArOTg3 LDE0IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19od19pbml0KHN0cnVjdCBtc21fa21zICprbXMpCiAK IAlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAoIXByaXYpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIHByaXZhdGUgZGF0YVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcHJpdmF0 ZSBkYXRhXG4iKTsKIAkJZ290byBkYmdfZGVzdHJveTsKIAl9CiAKIAlkcHVfa21zLT5tbWlvID0g bXNtX2lvcmVtYXAoZHB1X2ttcy0+cGRldiwgIm1kcCIsICJtZHAiKTsKIAlpZiAoSVNfRVJSKGRw dV9rbXMtPm1taW8pKSB7CiAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5tbWlvKTsKLQkJRFBVX0VS Uk9SKCJtZHAgcmVnaXN0ZXIgbWVtb3J5IG1hcCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCURSTV9E RVZfRVJST1IoIm1kcCByZWdpc3RlciBtZW1vcnkgbWFwIGZhaWxlZDogJWRcbiIsIHJjKTsKIAkJ ZHB1X2ttcy0+bW1pbyA9IE5VTEw7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMTAwNCw3ICsxMDA0 LDcgQEAgc3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAlk cHVfa21zLT52YmlmW1ZCSUZfUlRdID0gbXNtX2lvcmVtYXAoZHB1X2ttcy0+cGRldiwgInZiaWYi LCAidmJpZiIpOwogCWlmIChJU19FUlIoZHB1X2ttcy0+dmJpZltWQklGX1JUXSkpIHsKIAkJcmMg PSBQVFJfRVJSKGRwdV9rbXMtPnZiaWZbVkJJRl9SVF0pOwotCQlEUFVfRVJST1IoInZiaWYgcmVn aXN0ZXIgbWVtb3J5IG1hcCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCURSTV9ERVZfRVJST1IoInZi aWYgcmVnaXN0ZXIgbWVtb3J5IG1hcCBmYWlsZWQ6ICVkXG4iLCByYyk7CiAJCWRwdV9rbXMtPnZi aWZbVkJJRl9SVF0gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTEwMTIsNyArMTAxMiw3 IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19od19pbml0KHN0cnVjdCBtc21fa21zICprbXMpCiAJZHB1 X2ttcy0+dmJpZltWQklGX05SVF0gPSBtc21faW9yZW1hcChkcHVfa21zLT5wZGV2LCAidmJpZl9u cnQiLCAidmJpZl9ucnQiKTsKIAlpZiAoSVNfRVJSKGRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdKSkg ewogCQlkcHVfa21zLT52YmlmW1ZCSUZfTlJUXSA9IE5VTEw7Ci0JCURQVV9ERUJVRygiVkJJRiBO UlQgaXMgbm90IGRlZmluZWQiKTsKKwkJRFJNX0RFVl9ERUJVRygiVkJJRiBOUlQgaXMgbm90IGRl ZmluZWQiKTsKIAl9IGVsc2UgewogCQlkcHVfa21zLT52YmlmX2xlbltWQklGX05SVF0gPSBkcHVf aW9tYXBfc2l6ZShkcHVfa21zLT5wZGV2LAogCQkJCQkJCSAgICAgInZiaWZfbnJ0Iik7CkBAIC0x MDIxLDcgKzEwMjEsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2tt cyAqa21zKQogCWRwdV9rbXMtPnJlZ19kbWEgPSBtc21faW9yZW1hcChkcHVfa21zLT5wZGV2LCAi cmVnZG1hIiwgInJlZ2RtYSIpOwogCWlmIChJU19FUlIoZHB1X2ttcy0+cmVnX2RtYSkpIHsKIAkJ ZHB1X2ttcy0+cmVnX2RtYSA9IE5VTEw7Ci0JCURQVV9ERUJVRygiUkVHX0RNQSBpcyBub3QgZGVm aW5lZCIpOworCQlEUk1fREVWX0RFQlVHKCJSRUdfRE1BIGlzIG5vdCBkZWZpbmVkIik7CiAJfSBl bHNlIHsKIAkJZHB1X2ttcy0+cmVnX2RtYV9sZW4gPSBkcHVfaW9tYXBfc2l6ZShkcHVfa21zLT5w ZGV2LCAicmVnZG1hIik7CiAJfQpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgc3RhdGljIGludCBkcHVf a21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkJcmMgPSBQVFJfRVJSKGRwdV9rbXMt PmNvcmVfY2xpZW50KTsKIAkJaWYgKCFkcHVfa21zLT5jb3JlX2NsaWVudCkKIAkJCXJjID0gLUVJ TlZBTDsKLQkJRFBVX0VSUk9SKCJkcHUgcG93ZXIgY2xpZW50IGNyZWF0ZSBmYWlsZWQ6ICVkXG4i LCByYyk7CisJCURSTV9ERVZfRVJST1IoImRwdSBwb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZDog JWRcbiIsIHJjKTsKIAkJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBOVUxMOwogCQlnb3RvIGVycm9y OwogCX0KQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19od19pbml0KHN0 cnVjdCBtc21fa21zICprbXMpCiAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5jYXRhbG9nKTsKIAkJ aWYgKCFkcHVfa21zLT5jYXRhbG9nKQogCQkJcmMgPSAtRUlOVkFMOwotCQlEUFVfRVJST1IoImNh dGFsb2cgaW5pdCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCURSTV9ERVZfRVJST1IoImNhdGFsb2cg aW5pdCBmYWlsZWQ6ICVkXG4iLCByYyk7CiAJCWRwdV9rbXMtPmNhdGFsb2cgPSBOVUxMOwogCQln b3RvIHBvd2VyX2Vycm9yOwogCX0KQEAgLTEwNjEsMTQgKzEwNjEsMTQgQEAgc3RhdGljIGludCBk cHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkgKi8KIAlyYyA9IF9kcHVfa21z X21tdV9pbml0KGRwdV9rbXMpOwogCWlmIChyYykgewotCQlEUFVfRVJST1IoImRwdV9rbXNfbW11 X2luaXQgZmFpbGVkOiAlZFxuIiwgcmMpOworCQlEUk1fREVWX0VSUk9SKCJkcHVfa21zX21tdV9p bml0IGZhaWxlZDogJWRcbiIsIHJjKTsKIAkJZ290byBwb3dlcl9lcnJvcjsKIAl9CiAKIAlyYyA9 IGRwdV9ybV9pbml0KCZkcHVfa21zLT5ybSwgZHB1X2ttcy0+Y2F0YWxvZywgZHB1X2ttcy0+bW1p bywKIAkJCWRwdV9rbXMtPmRldik7CiAJaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigicm0gaW5pdCBm YWlsZWQ6ICVkXG4iLCByYyk7CisJCURSTV9ERVZfRVJST1IoInJtIGluaXQgZmFpbGVkOiAlZFxu IiwgcmMpOwogCQlnb3RvIHBvd2VyX2Vycm9yOwogCX0KIApAQCAtMTA3OSw3ICsxMDc5LDcgQEAg c3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkJcmMgPSBQ VFJfRVJSKGRwdV9rbXMtPmh3X21kcCk7CiAJCWlmICghZHB1X2ttcy0+aHdfbWRwKQogCQkJcmMg PSAtRUlOVkFMOwotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgaHdfbWRwOiAlZFxuIiwgcmMp OworCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGh3X21kcDogJWRcbiIsIHJjKTsKIAkJ ZHB1X2ttcy0+aHdfbWRwID0gTlVMTDsKIAkJZ290byBwb3dlcl9lcnJvcjsKIAl9CkBAIC0xMDkz LDcgKzEwOTMsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAq a21zKQogCQkJcmMgPSBQVFJfRVJSKGRwdV9rbXMtPmh3X3ZiaWZbdmJpZl9pZHhdKTsKIAkJCWlm ICghZHB1X2ttcy0+aHdfdmJpZlt2YmlmX2lkeF0pCiAJCQkJcmMgPSAtRUlOVkFMOwotCQkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gaW5pdCB2YmlmICVkOiAlZFxuIiwgdmJpZl9pZHgsIHJjKTsKKwkJ CURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBpbml0IHZiaWYgJWQ6ICVkXG4iLCB2YmlmX2lkeCwg cmMpOwogCQkJZHB1X2ttcy0+aHdfdmJpZlt2YmlmX2lkeF0gPSBOVUxMOwogCQkJZ290byBwb3dl cl9lcnJvcjsKIAkJfQpAQCAtMTEwMywxNCArMTEwMywxNCBAQCBzdGF0aWMgaW50IGRwdV9rbXNf aHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQogCQkJJmRwdV9rbXMtPnBoYW5kbGUsCiAJCQlf ZHB1X2ttc19nZXRfY2xrKGRwdV9rbXMsICJjb3JlIikpOwogCWlmIChyYykgewotCQlEUFVfRVJS T1IoImZhaWxlZCB0byBpbml0IHBlcmYgJWRcbiIsIHJjKTsKKwkJRFJNX0RFVl9FUlJPUigiZmFp bGVkIHRvIGluaXQgcGVyZiAlZFxuIiwgcmMpOwogCQlnb3RvIHBlcmZfZXJyOwogCX0KIAogCWRw dV9rbXMtPmh3X2ludHIgPSBkcHVfaHdfaW50cl9pbml0KGRwdV9rbXMtPm1taW8sIGRwdV9rbXMt PmNhdGFsb2cpOwogCWlmIChJU19FUlJfT1JfTlVMTChkcHVfa21zLT5od19pbnRyKSkgewogCQly YyA9IFBUUl9FUlIoZHB1X2ttcy0+aHdfaW50cik7Ci0JCURQVV9FUlJPUigiaHdfaW50ciBpbml0 IGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJRFJNX0RFVl9FUlJPUigiaHdfaW50ciBpbml0IGZhaWxl ZDogJWRcbiIsIHJjKTsKIAkJZHB1X2ttcy0+aHdfaW50ciA9IE5VTEw7CiAJCWdvdG8gaHdfaW50 cl9pbml0X2VycjsKIAl9CkBAIC0xMTIxLDcgKzExMjEsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNf aHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQogCSAqLwogCXJjID0gX2RwdV9rbXNfZHJtX29i al9pbml0KGRwdV9rbXMpOwogCWlmIChyYykgewotCQlEUFVfRVJST1IoIm1vZGVzZXQgaW5pdCBm YWlsZWQ6ICVkXG4iLCByYyk7CisJCURSTV9ERVZfRVJST1IoIm1vZGVzZXQgaW5pdCBmYWlsZWQ6 ICVkXG4iLCByYyk7CiAJCWdvdG8gZHJtX29ial9pbml0X2VycjsKIAl9CiAKQEAgLTExNzUsNyAr MTE3NSw3IEBAIHN0cnVjdCBtc21fa21zICpkcHVfa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKIAlpbnQgaXJxOwogCiAJaWYgKCFkZXYgfHwgIWRldi0+ZGV2X3ByaXZhdGUpIHsKLQkJ RFBVX0VSUk9SKCJkcm0gZGV2aWNlIG5vZGUgaW52YWxpZFxuIik7CisJCURSTV9ERVZfRVJST1Io ImRybSBkZXZpY2Ugbm9kZSBpbnZhbGlkXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 CiAJfQogCkBAIC0xMTg0LDcgKzExODQsNyBAQCBzdHJ1Y3QgbXNtX2ttcyAqZHB1X2ttc19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChk cHVfa21zLT5wZGV2LT5kZXYub2Zfbm9kZSwgMCk7CiAJaWYgKGlycSA8IDApIHsKLQkJRFBVX0VS Uk9SKCJmYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIGlycSk7CisJCURSTV9ERVZfRVJST1IoImZh aWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIEVSUl9QVFIoaXJxKTsKIAl9 CiAJZHB1X2ttcy0+YmFzZS5pcnEgPSBpcnE7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCBzdGF0aWMg aW50IGRwdV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2 b2lkICpkYXRhKQogCW1wID0gJmRwdV9rbXMtPm1wOwogCXJldCA9IG1zbV9kc3NfcGFyc2VfY2xv Y2socGRldiwgbXApOwogCWlmIChyZXQpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2Ug Y2xvY2tzLCByZXQ9JWRcbiIsIHJldCk7CisJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBwYXJz ZSBjbG9ja3MsIHJldD0lZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEyNjgs MTggKzEyNjgsMTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBkcHVfcnVudGltZV9zdXNw ZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWRkZXYgPSBkcHVfa21zLT5kZXY7CiAJaWYgKCFk ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBkcm1fZGV2aWNlXG4iKTsKKwkJRFJNX0RFVl9F UlJPUigiaW52YWxpZCBkcm1fZGV2aWNlXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCXJjID0g ZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmZHB1X2ttcy0+cGhhbmRsZSwKIAkJCWRwdV9rbXMt PmNvcmVfY2xpZW50LCBmYWxzZSk7CiAJaWYgKHJjKQotCQlEUFVfRVJST1IoInJlc291cmNlIGRp c2FibGUgZmFpbGVkOiAlZFxuIiwgcmMpOworCQlEUk1fREVWX0VSUk9SKCJyZXNvdXJjZSBkaXNh YmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKIAogCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5j bGtfY29uZmlnLCBtcC0+bnVtX2NsaywgZmFsc2UpOwogCWlmIChyYykKLQkJRFBVX0VSUk9SKCJj bG9jayBkaXNhYmxlIGZhaWxlZCByYzolZFxuIiwgcmMpOworCQlEUk1fREVWX0VSUk9SKCJjbG9j ayBkaXNhYmxlIGZhaWxlZCByYzolZFxuIiwgcmMpOwogCiBleGl0OgogCXJldHVybiByYzsKQEAg LTEyOTUsMjAgKzEyOTUsMjAgQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBkcHVfcnVudGlt ZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCiAJZGRldiA9IGRwdV9rbXMtPmRldjsKIAlp ZiAoIWRkZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRybV9kZXZpY2VcbiIpOworCQlEUk1f REVWX0VSUk9SKCJpbnZhbGlkIGRybV9kZXZpY2VcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJ cmMgPSBtc21fZHNzX2VuYWJsZV9jbGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCB0cnVl KTsKIAlpZiAocmMpIHsKLQkJRFBVX0VSUk9SKCJjbG9jayBlbmFibGUgZmFpbGVkIHJjOiVkXG4i LCByYyk7CisJCURSTV9ERVZfRVJST1IoImNsb2NrIGVuYWJsZSBmYWlsZWQgcmM6JWRcbiIsIHJj KTsKIAkJZ290byBleGl0OwogCX0KIAogCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgm ZHB1X2ttcy0+cGhhbmRsZSwKIAkJCWRwdV9rbXMtPmNvcmVfY2xpZW50LCB0cnVlKTsKIAlpZiAo cmMpCi0JCURQVV9FUlJPUigicmVzb3VyY2UgZW5hYmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJ RFJNX0RFVl9FUlJPUigicmVzb3VyY2UgZW5hYmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKIAogZXhp dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfbWRzcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X21kc3MuYwpp bmRleCA5ZTUzM2I4Li5lZTI2YzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfbWRzcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9tZHNzLmMKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgaW50IF9kcHVfbWRzc19pcnFfZG9t YWluX2FkZChzdHJ1Y3QgZHB1X21kc3MgKmRwdV9tZHNzKQogCWRvbWFpbiA9IGlycV9kb21haW5f YWRkX2xpbmVhcihkZXYtPm9mX25vZGUsIDMyLAogCQkJJmRwdV9tZHNzX2lycWRvbWFpbl9vcHMs IGRwdV9tZHNzKTsKIAlpZiAoIWRvbWFpbikgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBhZGQg aXJxX2RvbWFpblxuIik7CisJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBhZGQgaXJxX2RvbWFp blxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRp YyBpbnQgZHB1X21kc3NfZW5hYmxlKHN0cnVjdCBtc21fbWRzcyAqbWRzcykKIAogCXJldCA9IG1z bV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIHRydWUpOwogCWlm IChyZXQpCi0JCURQVV9FUlJPUigiY2xvY2sgZW5hYmxlIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQp OworCQlEUk1fREVWX0VSUk9SKCJjbG9jayBlbmFibGUgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7 CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBpbnQgZHB1X21k c3NfZGlzYWJsZShzdHJ1Y3QgbXNtX21kc3MgKm1kc3MpCiAKIAlyZXQgPSBtc21fZHNzX2VuYWJs ZV9jbGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCBmYWxzZSk7CiAJaWYgKHJldCkKLQkJ RFBVX0VSUk9SKCJjbG9jayBkaXNhYmxlIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOworCQlEUk1f REVWX0VSUk9SKCJjbG9jayBkaXNhYmxlIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCiAJcmV0 dXJuIHJldDsKIH0KQEAgLTIwNCw3ICsyMDQsNyBAQCBpbnQgZHB1X21kc3NfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogCW1wID0gJmRwdV9tZHNzLT5tcDsKIAlyZXQgPSBtc21fZHNzX3Bh cnNlX2Nsb2NrKHBkZXYsIG1wKTsKIAlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRv IHBhcnNlIGNsb2NrcywgcmV0PSVkXG4iLCByZXQpOworCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQg dG8gcGFyc2UgY2xvY2tzLCByZXQ9JWRcbiIsIHJldCk7CiAJCWdvdG8gY2xrX3BhcnNlX2VycjsK IAl9CiAKQEAgLTIxOCw3ICsyMTgsNyBAQCBpbnQgZHB1X21kc3NfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LT5kZXYsIHBsYXRmb3JtX2dl dF9pcnEocGRldiwgMCksCiAJCQlkcHVfbWRzc19pcnEsIDAsICJkcHVfbWRzc19pc3IiLCBkcHVf bWRzcyk7CiAJaWYgKHJldCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGlycTogJWRc biIsIHJldCk7CisJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBpbml0IGlycTogJWRcbiIsIHJl dCk7CiAJCWdvdG8gaXJxX2Vycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcGxhbmUuYwppbmRleCBlYzk1OWY4Li4xY2U1NzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiAjaW5jbHVkZSAi ZHB1X3ZiaWYuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKIAotI2RlZmluZSBEUFVfREVCVUdf UExBTkUocGwsIGZtdCwgLi4uKSBEUFVfREVCVUcoInBsYW5lJWQgIiBmbXQsXAorI2RlZmluZSBE UFVfREVCVUdfUExBTkUocGwsIGZtdCwgLi4uKSBEUk1fREVWX0RFQlVHKCJwbGFuZSVkICIgZm10 LFwKIAkJKHBsKSA/IChwbCktPmJhc2UuYmFzZS5pZCA6IC0xLCAjI19fVkFfQVJHU19fKQogCi0j ZGVmaW5lIERQVV9FUlJPUl9QTEFORShwbCwgZm10LCAuLi4pIERQVV9FUlJPUigicGxhbmUlZCAi IGZtdCxcCisjZGVmaW5lIERQVV9FUlJPUl9QTEFORShwbCwgZm10LCAuLi4pIERSTV9ERVZfRVJS T1IoInBsYW5lJWQgIiBmbXQsXAogCQkocGwpID8gKHBsKS0+YmFzZS5iYXNlLmlkIDogLTEsICMj X19WQV9BUkdTX18pCiAKICNkZWZpbmUgREVDSU1BVEVEX0RJTUVOU0lPTihkaW0sIGRlY2kpICgo KGRpbSkgKyAoKDEgPDwgKGRlY2kpKSAtIDEpKSA+PiAoZGVjaSkpCkBAIC0xNjEsNyArMTYxLDcg QEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJdTMyIHRvdGFsX2ZsOwogCiAJaWYgKCFwbGFuZSB8fCAhZm10IHx8 ICFwbGFuZS0+c3RhdGUgfHwgIXNyY193aWR0aCB8fCAhZm10LT5icHApIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1l bnRzXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIGlu bGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZwZHB1LT5tcGxhbmVfbGlzdCwgbXBsYW5l X2xpc3QpIHsKIAkJaWYgKCFkcHVfcGxhbmVfZW5hYmxlZCh0bXAtPmJhc2Uuc3RhdGUpKQogCQkJ Y29udGludWU7Ci0JCURQVV9ERUJVRygicGxhbmUlZC8lZCBzcmNfd2lkdGg6JWQvJWRcbiIsCisJ CURSTV9ERVZfREVCVUcoInBsYW5lJWQvJWQgc3JjX3dpZHRoOiVkLyVkXG4iLAogCQkJCXBkcHUt PmJhc2UuYmFzZS5pZCwgdG1wLT5iYXNlLmJhc2UuaWQsCiAJCQkJc3JjX3dpZHRoLAogCQkJCWRy bV9yZWN0X3dpZHRoKCZ0bXAtPnBpcGVfY2ZnLnNyY19yZWN0KSk7CkBAIC0yMDAsNyArMjAwLDcg QEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJCX0KIAl9CiAKLQlEUFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQg Zm10OiAlNC40cyB3OiV1IGZsOiV1XG4iLAorCURSTV9ERVZfREVCVUcoInBsYW5lJXU6IHBudW06 JWQgZm10OiAlNC40cyB3OiV1IGZsOiV1XG4iLAogCQkJcGxhbmUtPmJhc2UuaWQsIHBkcHUtPnBp cGUgLSBTU1BQX1ZJRzAsCiAJCQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0LAogCQkJ c3JjX3dpZHRoLCB0b3RhbF9mbCk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RhdGljIHZvaWQgX2Rw dV9wbGFuZV9zZXRfcW9zX2x1dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl1MzIgdG90YWxf ZmwgPSAwLCBsdXRfdXNhZ2U7CiAKIAlpZiAoIXBsYW5lIHx8ICFmYikgewotCQlEUFVfRVJST1Io ImludmFsaWQgYXJndW1lbnRzIHBsYW5lICVkIGZiICVkXG4iLAorCQlEUk1fREVWX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50cyBwbGFuZSAlZCBmYiAlZFxuIiwKIAkJCQlwbGFuZSAhPSAwLCBmYiAh PSAwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBfZHB1 X3BsYW5lX3NldF9xb3NfbHV0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXBkcHUgPSB0b19k cHVfcGxhbmUocGxhbmUpOwogCiAJaWYgKCFwZHB1LT5waXBlX2h3IHx8ICFwZHB1LT5waXBlX3Ni bGsgfHwgIXBkcHUtPmNhdGFsb2cpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xu Iik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsKIAkJcmV0dXJuOwog CX0gZWxzZSBpZiAoIXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9jcmVxX2x1dCkgewogCQlyZXR1 cm47CkBAIC0yODUsNyArMjg1LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfcW9zX2x1 dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCShmbXQpID8gZm10LT5iYXNlLnBpeGVsX2Zv cm1hdCA6IDAsCiAJCQlwZHB1LT5pc19ydF9waXBlLCB0b3RhbF9mbCwgcW9zX2x1dCwgbHV0X3Vz YWdlKTsKIAotCURQVV9ERUJVRygicGxhbmUldTogcG51bTolZCBmbXQ6ICU0LjRzIHJ0OiVkIGZs OiV1IGx1dDoweCVsbHhcbiIsCisJRFJNX0RFVl9ERUJVRygicGxhbmUldTogcG51bTolZCBmbXQ6 ICU0LjRzIHJ0OiVkIGZsOiV1IGx1dDoweCVsbHhcbiIsCiAJCQlwbGFuZS0+YmFzZS5pZCwKIAkJ CXBkcHUtPnBpcGUgLSBTU1BQX1ZJRzAsCiAJCQlmbXQgPyAoY2hhciAqKSZmbXQtPmJhc2UucGl4 ZWxfZm9ybWF0IDogTlVMTCwKQEAgLTMwNywxNCArMzA3LDE0IEBAIHN0YXRpYyB2b2lkIF9kcHVf cGxhbmVfc2V0X2Rhbmdlcl9sdXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdTMyIGRhbmdl cl9sdXQsIHNhZmVfbHV0OwogCiAJaWYgKCFwbGFuZSB8fCAhZmIpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1lbnRz XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwogCiAJ aWYgKCFwZHB1LT5waXBlX2h3IHx8ICFwZHB1LT5waXBlX3NibGsgfHwgIXBkcHUtPmNhdGFsb2cp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgYXJndW1lbnRzXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIXBkcHUtPnBp cGVfaHctPm9wcy5zZXR1cF9kYW5nZXJfc2FmZV9sdXQpIHsKIAkJcmV0dXJuOwpAQCAtMzUyLDcg KzM1Miw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0X2Rhbmdlcl9sdXQoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJCQlwZHB1LT5waXBlX3Fvc19jZmcuZGFuZ2VyX2x1dCwKIAkJCXBk cHUtPnBpcGVfcW9zX2NmZy5zYWZlX2x1dCk7CiAKLQlEUFVfREVCVUcoInBsYW5lJXU6IHBudW06 JWQgZm10OiAlNC40cyBtb2RlOiVkIGx1dHNbMHgleCwgMHgleF1cbiIsCisJRFJNX0RFVl9ERUJV RygicGxhbmUldTogcG51bTolZCBmbXQ6ICU0LjRzIG1vZGU6JWQgbHV0c1sweCV4LCAweCV4XVxu IiwKIAkJcGxhbmUtPmJhc2UuaWQsCiAJCXBkcHUtPnBpcGUgLSBTU1BQX1ZJRzAsCiAJCWZtdCA/ IChjaGFyICopJmZtdC0+YmFzZS5waXhlbF9mb3JtYXQgOiBOVUxMLApAQCAtMzc2LDE0ICszNzYs MTQgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKIAogCWlmICghcGxhbmUpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgYXJndW1lbnRzXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXBkcHUgPSB0b19kcHVfcGxhbmUo cGxhbmUpOwogCiAJaWYgKCFwZHB1LT5waXBlX2h3IHx8ICFwZHB1LT5waXBlX3NibGspIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgYXJndW1lbnRzXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIXBkcHUtPnBpcGVfaHct Pm9wcy5zZXR1cF9xb3NfY3RybCkgewogCQlyZXR1cm47CkBAIC00MTAsNyArNDEwLDcgQEAgc3Rh dGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAJCXBkcHUtPnBpcGVfcW9zX2NmZy5kYW5nZXJfc2FmZV9lbiA9IGZhbHNlOwogCX0KIAotCURQ VV9ERUJVRygicGxhbmUldTogcG51bTolZCBkczolZCB2YjolZCBwcmlbMHgleCwgMHgleF0gaXNf cnQ6JWRcbiIsCisJRFJNX0RFVl9ERUJVRygicGxhbmUldTogcG51bTolZCBkczolZCB2YjolZCBw cmlbMHgleCwgMHgleF0gaXNfcnQ6JWRcbiIsCiAJCXBsYW5lLT5iYXNlLmlkLAogCQlwZHB1LT5w aXBlIC0gU1NQUF9WSUcwLAogCQlwZHB1LT5waXBlX3Fvc19jZmcuZGFuZ2VyX3NhZmVfZW4sCkBA IC00MzAsMTMgKzQzMCwxMyBAQCBpbnQgZHB1X3BsYW5lX2Rhbmdlcl9zaWduYWxfY3RybChzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwgYm9vbCBlbmFibGUpCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9r bXM7CiAKIAlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBhcmd1bWVudHNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7 CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXByaXYgPSBwbGFuZS0+ZGV2LT5kZXZfcHJpdmF0 ZTsKIAlpZiAoIXByaXYgfHwgIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgS01T IHJlZmVyZW5jZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgS01TIHJlZmVyZW5jZVxu Iik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDY4LDIxICs0NjgsMjEgQEAgc3RhdGlj IHZvaWQgX2RwdV9wbGFuZV9zZXRfb3RfbGltaXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJ c3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAKIAlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2IHx8 ICFjcnRjKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMgcGxhbmUgJWQgY3J0YyAl ZFxuIiwKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMgcGxhbmUgJWQgY3J0YyAl ZFxuIiwKIAkJCQlwbGFuZSAhPSAwLCBjcnRjICE9IDApOwogCQlyZXR1cm47CiAJfQogCiAJcHJp diA9IHBsYW5lLT5kZXYtPmRldl9wcml2YXRlOwogCWlmICghcHJpdiB8fCAhcHJpdi0+a21zKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWRwdV9rbXMg PSB0b19kcHVfa21zKHByaXYtPmttcyk7CiAJcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJ aWYgKCFwZHB1LT5waXBlX2h3KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwaXBlIHJlZmVyZW5j ZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGlwZSByZWZlcmVuY2VcbiIpOwogCQly ZXR1cm47CiAJfQogCkBAIC01MTIsMjAgKzUxMiwyMCBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5l X3NldF9xb3NfcmVtYXAoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJc3RydWN0IGRwdV9rbXMg KmRwdV9rbXM7CiAKIAlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2KSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBhcmd1bWVudHNcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50 c1xuIik7CiAJCXJldHVybjsKIAl9CiAKIAlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7 CiAJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIEtNUyBy ZWZlcmVuY2VcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIp OwogCQlyZXR1cm47CiAJfQogCiAJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKIAlw ZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKIAlpZiAoIXBkcHUtPnBpcGVfaHcpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIHBpcGUgcmVmZXJlbmNlXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52 YWxpZCBwaXBlIHJlZmVyZW5jZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUzNiw3ICs1MzYs NyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9xb3NfcmVtYXAoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUpCiAJcW9zX3BhcmFtcy5udW0gPSBwZHB1LT5waXBlX2h3LT5pZHggLSBTU1BQX1ZJ RzA7CiAJcW9zX3BhcmFtcy5pc19ydCA9IHBkcHUtPmlzX3J0X3BpcGU7CiAKLQlEUFVfREVCVUco InBsYW5lJWQgcGlwZTolZCB2YmlmOiVkIHhpbjolZCBydDolZCwgY2xrX2N0cmw6JWRcbiIsCisJ RFJNX0RFVl9ERUJVRygicGxhbmUlZCBwaXBlOiVkIHZiaWY6JWQgeGluOiVkIHJ0OiVkLCBjbGtf Y3RybDolZFxuIiwKIAkJCXBsYW5lLT5iYXNlLmlkLCBxb3NfcGFyYW1zLm51bSwKIAkJCXFvc19w YXJhbXMudmJpZl9pZHgsCiAJCQlxb3NfcGFyYW1zLnhpbl9pZCwgcW9zX3BhcmFtcy5pc19ydCwK QEAgLTU1NiwxMyArNTU2LDEzIEBAIHN0YXRpYyBpbnQgX2RwdV9wbGFuZV9nZXRfYXNwYWNlKAog CXN0cnVjdCBkcHVfa21zICprbXM7CiAKIAlpZiAoIXBkcHUgfHwgIXBzdGF0ZSB8fCAhYXNwYWNl KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJa21z ID0gX2RwdV9wbGFuZV9nZXRfa21zKCZwZHB1LT5iYXNlKTsKIAlpZiAoIWttcykgewotCQlEUFVf RVJST1IoImludmFsaWQga21zXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBrbXNcbiIp OwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU4MSw3ICs1ODEsNyBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgX2RwdV9wbGFuZV9zZXRfc2Nhbm91dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK IAlpbnQgcmV0OwogCiAJaWYgKCFwbGFuZSB8fCAhcHN0YXRlIHx8ICFwaXBlX2NmZyB8fCAhZmIp IHsKLQkJRFBVX0VSUk9SKAorCQlEUk1fREVWX0VSUk9SKAogCQkJImludmFsaWQgYXJnKHMpLCBw bGFuZSAlZCBzdGF0ZSAlZCBjZmcgJWQgZmIgJWRcbiIsCiAJCQlwbGFuZSAhPSAwLCBwc3RhdGUg IT0gMCwgcGlwZV9jZmcgIT0gMCwgZmIgIT0gMCk7CiAJCXJldHVybjsKQEAgLTYyNCw3ICs2MjQs NyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9wbGFu ZSAqcGRwdSwKIAogCWlmICghcGRwdSB8fCAhcHN0YXRlIHx8ICFzY2FsZV9jZmcgfHwgIWZtdCB8 fCAhY2hyb21hX3N1YnNtcGxfaCB8fAogCQkJIWNocm9tYV9zdWJzbXBsX3YpIHsKLQkJRFBVX0VS Uk9SKAorCQlEUk1fREVWX0VSUk9SKAogCQkJInBkcHUgJWQgcHN0YXRlICVkIHNjYWxlX2NmZyAl ZCBmbXQgJWQgc21wX2ggJWQgc21wX3YgJWRcbiIsCiAJCQkhIXBkcHUsICEhcHN0YXRlLCAhIXNj YWxlX2NmZywgISFmbXQsIGNocm9tYV9zdWJzbXBsX2gsCiAJCQljaHJvbWFfc3Vic21wbF92KTsK QEAgLTcxNSw3ICs3MTUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9j c2Moc3RydWN0IGRwdV9wbGFuZSAqcGRwdSkKIAl9OwogCiAJaWYgKCFwZHB1KSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGxhbmVc biIpOwogCQlyZXR1cm47CiAJfQogCkBAIC03MzgsNyArNzM4LDcgQEAgc3RhdGljIHZvaWQgX2Rw dV9wbGFuZV9zZXR1cF9zY2FsZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAl1aW50MzJfdCBj aHJvbWFfc3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92OwogCiAJaWYgKCFwZHB1IHx8ICFmbXQg fHwgIXBzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBmbXQg JWQgc3RhdGUgJWRcbiIsCisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAl ZCBmbXQgJWQgc3RhdGUgJWRcbiIsCiAJCQkJcGRwdSAhPSAwLCBmbXQgIT0gMCwgcHN0YXRlICE9 IDApOwogCQlyZXR1cm47CiAJfQpAQCAtNzc2LDcgKzc3Niw3IEBAIHN0YXRpYyBpbnQgX2RwdV9w bGFuZV9jb2xvcl9maWxsKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCiAJc3RydWN0IGRwdV9wbGFu ZV9zdGF0ZSAqcHN0YXRlOwogCiAJaWYgKCFwZHB1IHx8ICFwZHB1LT5iYXNlLnN0YXRlKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQg cGxhbmVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg4MSw3ICs4ODEsNyBAQCBp bnQgZHB1X3BsYW5lX3ZhbGlkYXRlX211bHRpcmVjdF92MihzdHJ1Y3QgZHB1X211bHRpcmVjdF9w bGFuZV9zdGF0ZXMgKnBsYW5lKQogCQlkcHVfcGxhbmVbaV0gPSB0b19kcHVfcGxhbmUoZHJtX3N0 YXRlW2ldLT5wbGFuZSk7CiAKIAkJaWYgKHBzdGF0ZVtpXSA9PSBOVUxMKSB7Ci0JCQlEUFVfRVJS T1IoIkRQVSBwbGFuZSBzdGF0ZSBvZiBwbGFuZSBpZCAlZCBpcyBOVUxMXG4iLAorCQkJRFJNX0RF Vl9FUlJPUigiRFBVIHBsYW5lIHN0YXRlIG9mIHBsYW5lIGlkICVkIGlzIE5VTExcbiIsCiAJCQkJ ZHJtX3N0YXRlW2ldLT5wbGFuZS0+YmFzZS5pZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpA QCAtOTQxLDcgKzk0MSw3IEBAIGludCBkcHVfcGxhbmVfdmFsaWRhdGVfbXVsdGlyZWN0X3YyKHN0 cnVjdCBkcHVfbXVsdGlyZWN0X3BsYW5lX3N0YXRlcyAqcGxhbmUpCiAJCXBzdGF0ZVtSMF0tPm11 bHRpcmVjdF9tb2RlID0gRFBVX1NTUFBfTVVMVElSRUNUX1RJTUVfTVg7CiAJCXBzdGF0ZVtSMV0t Pm11bHRpcmVjdF9tb2RlID0gRFBVX1NTUFBfTVVMVElSRUNUX1RJTUVfTVg7CiAJfSBlbHNlIHsK LQkJRFBVX0VSUk9SKAorCQlEUk1fREVWX0VSUk9SKAogCQkJIk5vIG11bHRpcmVjdCBtb2RlIHBv c3NpYmxlIGZvciB0aGUgcGxhbmVzICglZCAtICVkKVxuIiwKIAkJCWRybV9zdGF0ZVtSMF0tPnBs YW5lLT5iYXNlLmlkLAogCQkJZHJtX3N0YXRlW1IxXS0+cGxhbmUtPmJhc2UuaWQpOwpAQCAtOTc2 LDcgKzk3Niw3IEBAIHZvaWQgZHB1X3BsYW5lX2dldF9jdGxfZmx1c2goc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsIHN0cnVjdCBkcHVfaHdfY3RsICpjdGwsCiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0 ZSAqcHN0YXRlOwogCiAJaWYgKCFwbGFuZSB8fCAhZmx1c2hfc3NwcCkgewotCQlEUFVfRVJST1Io ImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGFyYW1l dGVyc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHN0YXRpYyBp bnQgZHB1X3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJldCA9 IG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKG5ld19zdGF0ZS0+ZmIsCiAJCQkJcHN0YXRlLT5hc3Bh Y2UpOwogCQlpZiAocmV0KSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIGZyYW1l YnVmZmVyXG4iKTsKKwkJCURSTV9ERVZfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIGZyYW1lYnVm ZmVyXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBz dGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAlpbnQgaHNjYWxlID0gMSwgdnNjYWxlID0gMTsKIAogCWlmICghcGxhbmUgfHwgIXN0 YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmcocyksIHBsYW5lICVkIHN0YXRlICVkXG4i LAorCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZyhzKSwgcGxhbmUgJWQgc3RhdGUgJWRcbiIs CiAJCQkJcGxhbmUgIT0gMCwgc3RhdGUgIT0gMCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8g ZXhpdDsKQEAgLTEyMDUsNyArMTIwNSw3IEBAIHZvaWQgZHB1X3BsYW5lX2ZsdXNoKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lKQogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKIAogCWlm ICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVc biIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKIAkJcmV0dXJuOwogCX0K IApAQCAtMTI1OSwxMyArMTI1OSwxMyBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21p Y191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9yZWN0IHNyYywg ZHN0OwogCiAJaWYgKCFwbGFuZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwor CQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJ fSBlbHNlIGlmICghcGxhbmUtPnN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZSBz dGF0ZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgcGxhbmUgc3RhdGVcbiIpOwogCQly ZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKCFvbGRfc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIG9sZCBzdGF0ZVxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgb2xkIHN0YXRl XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzk4LDEzICsxMzk4LDEzIEBAIHN0 YXRpYyB2b2lkIF9kcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwogCiAJaWYgKCFwbGFuZSkgewot CQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlk IHBsYW5lXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIXBsYW5lLT5zdGF0ZSkgewotCQlE UFVfRVJST1IoImludmFsaWQgcGxhbmUgc3RhdGVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZh bGlkIHBsYW5lIHN0YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIW9sZF9zdGF0ZSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgb2xkIHN0YXRlXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigi aW52YWxpZCBvbGQgc3RhdGVcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDMwLDEwICsxNDMw LDEwIEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCFwbGFu ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOworCQlEUk1fREVWX0VSUk9SKCJp bnZhbGlkIHBsYW5lXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoIXBsYW5lLT5zdGF0ZSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmUgc3RhdGVcbiIpOworCQlEUk1fREVWX0VSUk9S KCJpbnZhbGlkIHBsYW5lIHN0YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTQ1OSw3ICsx NDU5LDcgQEAgdm9pZCBkcHVfcGxhbmVfcmVzdG9yZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkK IAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OwogCiAJaWYgKCFwbGFuZSB8fCAhcGxhbmUtPnN0YXRl KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCURSTV9ERVZfRVJST1IoImlu dmFsaWQgcGxhbmVcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDk4LDcgKzE0OTgsNyBAQCBz dGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CiAKIAlpZiAoIXBsYW5lIHx8ICFz dGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBzdGF0ZSAlZFxu IiwKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmcocyksIHBsYW5lICVkIHN0YXRlICVkXG4i LAogCQkJCXBsYW5lICE9IDAsIHN0YXRlICE9IDApOwogCQlyZXR1cm47CiAJfQpAQCAtMTUyMCwx MCArMTUyMCwxMCBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfc3RhdGU7CiAK IAlpZiAoIXBsYW5lKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCURSTV9E RVZfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYg KCFwbGFuZS0+c3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lIHN0YXRlXG4iKTsK KwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBwbGFuZSBzdGF0ZVxuIik7CiAJCXJldHVybiBOVUxM OwogCX0KIApAQCAtMTU1MCw3ICsxNTUwLDcgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX3Jlc2V0 KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0 ZTsKIAogCWlmICghcGxhbmUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2 MDgsMTAgKzE2MDgsMTAgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfZGFuZ2VyX3N0YXRl KHN0cnVjdCBkcHVfa21zICprbXMsIGJvb2wgZW5hYmxlKQogCWRybV9mb3JfZWFjaF9wbGFuZShw bGFuZSwga21zLT5kZXYpIHsKIAkJaWYgKHBsYW5lLT5mYiAmJiBwbGFuZS0+c3RhdGUpIHsKIAkJ CWRwdV9wbGFuZV9kYW5nZXJfc2lnbmFsX2N0cmwocGxhbmUsIGVuYWJsZSk7Ci0JCQlEUFVfREVC VUcoInBsYW5lOiVkIGltZzolZHglZCAiLAorCQkJRFJNX0RFVl9ERUJVRygicGxhbmU6JWQgaW1n OiVkeCVkICIsCiAJCQkJcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5mYi0+d2lkdGgsCiAJCQkJcGxh bmUtPmZiLT5oZWlnaHQpOwotCQkJRFBVX0RFQlVHKCJzcmNbJWQsJWQsJWQsJWRdIGRzdFslZCwl ZCwlZCwlZF1cbiIsCisJCQlEUk1fREVWX0RFQlVHKCJzcmNbJWQsJWQsJWQsJWRdIGRzdFslZCwl ZCwlZCwlZF1cbiIsCiAJCQkJcGxhbmUtPnN0YXRlLT5zcmNfeCA+PiAxNiwKIAkJCQlwbGFuZS0+ c3RhdGUtPnNyY195ID4+IDE2LAogCQkJCXBsYW5lLT5zdGF0ZS0+c3JjX3cgPj4gMTYsCkBAIC0x NjE5LDcgKzE2MTksNyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9kYW5nZXJfc3RhdGUo c3RydWN0IGRwdV9rbXMgKmttcywgYm9vbCBlbmFibGUpCiAJCQkJcGxhbmUtPnN0YXRlLT5jcnRj X3gsIHBsYW5lLT5zdGF0ZS0+Y3J0Y195LAogCQkJCXBsYW5lLT5zdGF0ZS0+Y3J0Y193LCBwbGFu ZS0+c3RhdGUtPmNydGNfaCk7CiAJCX0gZWxzZSB7Ci0JCQlEUFVfREVCVUcoIkluYWN0aXZlIHBs YW5lOiVkXG4iLCBwbGFuZS0+YmFzZS5pZCk7CisJCQlEUk1fREVWX0RFQlVHKCJJbmFjdGl2ZSBw bGFuZTolZFxuIiwgcGxhbmUtPmJhc2UuaWQpOwogCQl9CiAJfQogfQpAQCAtMTY0OCwxMiArMTY0 OCwxMiBAQCBzdGF0aWMgc3NpemVfdCBfZHB1X3BsYW5lX2Rhbmdlcl93cml0ZShzdHJ1Y3QgZmls ZSAqZmlsZSwKIAogCWlmIChkaXNhYmxlX3BhbmljKSB7CiAJCS8qIERpc2FibGUgcGFuaWMgc2ln bmFsIGZvciBhbGwgYWN0aXZlIHBpcGVzICovCi0JCURQVV9ERUJVRygiRGlzYWJsaW5nIGRhbmdl cjpcbiIpOworCQlEUk1fREVWX0RFQlVHKCJEaXNhYmxpbmcgZGFuZ2VyOlxuIik7CiAJCV9kcHVf cGxhbmVfc2V0X2Rhbmdlcl9zdGF0ZShrbXMsIGZhbHNlKTsKIAkJa21zLT5oYXNfZGFuZ2VyX2N0 cmwgPSBmYWxzZTsKIAl9IGVsc2UgewogCQkvKiBFbmFibGUgcGFuaWMgc2lnbmFsIGZvciBhbGwg YWN0aXZlIHBpcGVzICovCi0JCURQVV9ERUJVRygiRW5hYmxpbmcgZGFuZ2VyOlxuIik7CisJCURS TV9ERVZfREVCVUcoIkVuYWJsaW5nIGRhbmdlcjpcbiIpOwogCQlrbXMtPmhhc19kYW5nZXJfY3Ry bCA9IHRydWU7CiAJCV9kcHVfcGxhbmVfc2V0X2Rhbmdlcl9zdGF0ZShrbXMsIHRydWUpOwogCX0K QEAgLTE2NzYsMTMgKzE2NzYsMTMgQEAgc3RhdGljIGludCBfZHB1X3BsYW5lX2luaXRfZGVidWdm cyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpj ZmcgPSAwOwogCiAJaWYgKCFwbGFuZSB8fCAhcGxhbmUtPmRldikgewotCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNc biIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3By aXZhdGU7CiAJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IEtNUyByZWZlcmVuY2VcbiIpOworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIEtNUyByZWZlcmVu Y2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE4NDAsMzEgKzE4NDAsMzEgQEAg c3RydWN0IGRybV9wbGFuZSAqZHB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK IAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghZGV2KSB7Ci0JCURQVV9FUlJPUigiWyV1XWRl dmljZSBpcyBOVUxMXG4iLCBwaXBlKTsKKwkJRFJNX0RFVl9FUlJPUigiWyV1XWRldmljZSBpcyBO VUxMXG4iLCBwaXBlKTsKIAkJZ290byBleGl0OwogCX0KIAogCXByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwogCWlmICghcHJpdikgewotCQlEUFVfRVJST1IoIlsldV1wcml2YXRlIGRhdGEgaXMgTlVM TFxuIiwgcGlwZSk7CisJCURSTV9ERVZfRVJST1IoIlsldV1wcml2YXRlIGRhdGEgaXMgTlVMTFxu IiwgcGlwZSk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlpZiAoIXByaXYtPmttcykgewotCQlEUFVf RVJST1IoIlsldV1pbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIsIHBpcGUpOworCQlEUk1fREVWX0VS Uk9SKCJbJXVdaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iLCBwaXBlKTsKIAkJZ290byBleGl0Owog CX0KIAlrbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CiAKIAlpZiAoIWttcy0+Y2F0YWxvZykg ewotCQlEUFVfRVJST1IoIlsldV1pbnZhbGlkIGNhdGFsb2cgcmVmZXJlbmNlXG4iLCBwaXBlKTsK KwkJRFJNX0RFVl9FUlJPUigiWyV1XWludmFsaWQgY2F0YWxvZyByZWZlcmVuY2VcbiIsIHBpcGUp OwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyogY3JlYXRlIGFuZCB6ZXJvIGxvY2FsIHN0cnVjdHVy ZSAqLwogCXBkcHUgPSBremFsbG9jKHNpemVvZigqcGRwdSksIEdGUF9LRVJORUwpOwogCWlmICgh cGRwdSkgewotCQlEUFVfRVJST1IoIlsldV1mYWlsZWQgdG8gYWxsb2NhdGUgbG9jYWwgcGxhbmUg c3RydWN0XG4iLCBwaXBlKTsKKwkJRFJNX0RFVl9FUlJPUigiWyV1XWZhaWxlZCB0byBhbGxvY2F0 ZSBsb2NhbCBwbGFuZSBzdHJ1Y3RcbiIsIHBpcGUpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3Rv IGV4aXQ7CiAJfQpAQCAtMTg4NSwxMSArMTg4NSwxMSBAQCBzdHJ1Y3QgZHJtX3BsYW5lICpkcHVf cGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXBkcHUtPnBpcGVfaHcgPSBkcHVf aHdfc3NwcF9pbml0KHBpcGUsIGttcy0+bW1pbywga21zLT5jYXRhbG9nLAogCQkJCQkJCW1hc3Rl cl9wbGFuZV9pZCAhPSAwKTsKIAlpZiAoSVNfRVJSKHBkcHUtPnBpcGVfaHcpKSB7Ci0JCURQVV9F UlJPUigiWyV1XVNTUFAgaW5pdCBmYWlsZWRcbiIsIHBpcGUpOworCQlEUk1fREVWX0VSUk9SKCJb JXVdU1NQUCBpbml0IGZhaWxlZFxuIiwgcGlwZSk7CiAJCXJldCA9IFBUUl9FUlIocGRwdS0+cGlw ZV9odyk7CiAJCWdvdG8gY2xlYW5fcGxhbmU7CiAJfSBlbHNlIGlmICghcGRwdS0+cGlwZV9ody0+ Y2FwIHx8ICFwZHB1LT5waXBlX2h3LT5jYXAtPnNibGspIHsKLQkJRFBVX0VSUk9SKCJbJXVdU1NQ UCBpbml0IHJldHVybmVkIGludmFsaWQgY2ZnXG4iLCBwaXBlKTsKKwkJRFJNX0RFVl9FUlJPUigi WyV1XVNTUFAgaW5pdCByZXR1cm5lZCBpbnZhbGlkIGNmZ1xuIiwgcGlwZSk7CiAJCWdvdG8gY2xl YW5fc3NwcDsKIAl9CiAKQEAgLTE4OTcsNyArMTg5Nyw3IEBAIHN0cnVjdCBkcm1fcGxhbmUgKmRw dV9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJcGRwdS0+ZmVhdHVyZXMgPSBw ZHB1LT5waXBlX2h3LT5jYXAtPmZlYXR1cmVzOwogCXBkcHUtPnBpcGVfc2JsayA9IHBkcHUtPnBp cGVfaHctPmNhcC0+c2JsazsKIAlpZiAoIXBkcHUtPnBpcGVfc2JsaykgewotCQlEUFVfRVJST1Io IlsldV1pbnZhbGlkIHNibGtcbiIsIHBpcGUpOworCQlEUk1fREVWX0VSUk9SKCJbJXVdaW52YWxp ZCBzYmxrXG4iLCBwaXBlKTsKIAkJZ290byBjbGVhbl9zc3BwOwogCX0KIApAQCAtMTkxMiw3ICsx OTEyLDcgQEAgc3RydWN0IGRybV9wbGFuZSAqZHB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCQlBUlJBWV9TSVpFKHBkcHUtPmZvcm1hdHMpKTsKIAogCWlmICghcGRwdS0+ bmZvcm1hdHMpIHsKLQkJRFBVX0VSUk9SKCJbJXVdbm8gdmFsaWQgZm9ybWF0cyBmb3IgcGxhbmVc biIsIHBpcGUpOworCQlEUk1fREVWX0VSUk9SKCJbJXVdbm8gdmFsaWQgZm9ybWF0cyBmb3IgcGxh bmVcbiIsIHBpcGUpOwogCQlnb3RvIGNsZWFuX3NzcHA7CiAJfQogCkBAIC0xOTM5LDcgKzE5Mzks NyBAQCBzdHJ1Y3QgZHJtX3BsYW5lICpkcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCiAJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV96cG9zX3Byb3BlcnR5KHBsYW5lLCAwLCAw LCB6cG9zX21heCk7CiAJaWYgKHJldCkKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCB6 cG9zIHByb3BlcnR5LCByYyA9ICVkXG4iLCByZXQpOworCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQg dG8gaW5zdGFsbCB6cG9zIHByb3BlcnR5LCByYyA9ICVkXG4iLCByZXQpOwogCiAJLyogc3VjY2Vz cyEgZmluYWxpemUgaW5pdGlhbGl6YXRpb24gKi8KIAlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFu ZSwgJmRwdV9wbGFuZV9oZWxwZXJfZnVuY3MpOwpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgc3RydWN0 IGRybV9wbGFuZSAqZHB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogCW11 dGV4X2luaXQoJnBkcHUtPmxvY2spOwogCi0JRFBVX0RFQlVHKCIlcyBjcmVhdGVkIGZvciBwaXBl OiV1IGlkOiV1IHZpcnR1YWw6JXVcbiIsIHBkcHUtPnBpcGVfbmFtZSwKKwlEUk1fREVWX0RFQlVH KCIlcyBjcmVhdGVkIGZvciBwaXBlOiV1IGlkOiV1IHZpcnR1YWw6JXVcbiIsIHBkcHUtPnBpcGVf bmFtZSwKIAkJCQkJcGlwZSwgcGxhbmUtPmJhc2UuaWQsIG1hc3Rlcl9wbGFuZV9pZCk7CiAJcmV0 dXJuIHBsYW5lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCmluZGV4IDEz YzBhMzYuLmYxZDBmOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCkBA IC0xMTksNyArMTE5LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9wcmludF9yc3ZwcygKIAlzdHJ1 Y3QgZHB1X3JtX2h3X2JsayAqYmxrOwogCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7CiAKLQlE UFVfREVCVUcoIiVkXG4iLCBzdGFnZSk7CisJRFJNX0RFVl9ERUJVRygiJWRcbiIsIHN0YWdlKTsK IAogCWxpc3RfZm9yX2VhY2hfZW50cnkocnN2cCwgJnJtLT5yc3ZwcywgbGlzdCkgewogCQlEUk1f REVCVUdfS01TKCIlZCByc3ZwW3MldWUldV0gdG9wb2xvZ3kgJWRcbiIsIHN0YWdlLCByc3ZwLT5z ZXEsCkBAIC0xNzMsNyArMTczLDcgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9nZXRfaHdfbG9ja2Vk KHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKmkpCiAJc3RydWN0IGxp c3RfaGVhZCAqYmxrX2xpc3Q7CiAKIAlpZiAoIXJtIHx8ICFpIHx8IGktPnR5cGUgPj0gRFBVX0hX X0JMS19NQVgpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJtXG4iKTsKKwkJRFJNX0RFVl9FUlJP UigiaW52YWxpZCBybVxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE4MSw3ICsxODEs NyBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2dldF9od19sb2NrZWQoc3RydWN0IGRwdV9ybSAqcm0s IHN0cnVjdCBkcHVfcm1faHdfaXRlciAqaSkKIAlibGtfbGlzdCA9ICZybS0+aHdfYmxrc1tpLT50 eXBlXTsKIAogCWlmIChpLT5ibGsgJiYgKCZpLT5ibGstPmxpc3QgPT0gYmxrX2xpc3QpKSB7Ci0J CURQVV9ERUJVRygiYXR0ZW1wdCByZXN1bWUgaXRlcmF0aW9uIHBhc3QgbGFzdFxuIik7CisJCURS TV9ERVZfREVCVUcoImF0dGVtcHQgcmVzdW1lIGl0ZXJhdGlvbiBwYXN0IGxhc3RcbiIpOwogCQly ZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xOTEsMjAgKzE5MSwyMCBAQCBzdGF0aWMgYm9vbCBfZHB1 X3JtX2dldF9od19sb2NrZWQoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfcm1faHdfaXRl ciAqaSkKIAkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwID0gaS0+YmxrLT5yc3ZwOwogCiAJCWlm IChpLT5ibGstPnR5cGUgIT0gaS0+dHlwZSkgewotCQkJRFBVX0VSUk9SKCJmb3VuZCBpbmNvcnJl Y3QgYmxvY2sgdHlwZSAlZCBvbiAlZCBsaXN0XG4iLAorCQkJRFJNX0RFVl9FUlJPUigiZm91bmQg aW5jb3JyZWN0IGJsb2NrIHR5cGUgJWQgb24gJWQgbGlzdFxuIiwKIAkJCQkJaS0+YmxrLT50eXBl LCBpLT50eXBlKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCWlmICgoaS0+ZW5jX2lkID09 IDApIHx8IChyc3ZwICYmIHJzdnAtPmVuY19pZCA9PSBpLT5lbmNfaWQpKSB7CiAJCQlpLT5odyA9 IGktPmJsay0+aHc7Ci0JCQlEUFVfREVCVUcoImZvdW5kIHR5cGUgJWQgaWQgJWQgZm9yIGVuYyAl ZFxuIiwKKwkJCURSTV9ERVZfREVCVUcoImZvdW5kIHR5cGUgJWQgaWQgJWQgZm9yIGVuYyAlZFxu IiwKIAkJCQkJaS0+dHlwZSwgaS0+YmxrLT5pZCwgaS0+ZW5jX2lkKTsKIAkJCXJldHVybiB0cnVl OwogCQl9CiAJfQogCi0JRFBVX0RFQlVHKCJubyBtYXRjaCwgdHlwZSAlZCBmb3IgZW5jICVkXG4i LCBpLT50eXBlLCBpLT5lbmNfaWQpOworCURSTV9ERVZfREVCVUcoIm5vIG1hdGNoLCB0eXBlICVk IGZvciBlbmMgJWRcbiIsIGktPnR5cGUsIGktPmVuY19pZCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9 CkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9od19kZXN0cm95KGVudW0g ZHB1X2h3X2Jsa190eXBlIHR5cGUsIHZvaWQgKmh3KQogCQkvKiBUb3AgaXMgYSBzaW5nbGV0b24s IG5vdCBtYW5hZ2VkIGluIGh3X2Jsa3MgbGlzdCAqLwogCWNhc2UgRFBVX0hXX0JMS19NQVg6CiAJ ZGVmYXVsdDoKLQkJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBibG9jayB0eXBlICVkXG4iLCB0eXBl KTsKKwkJRFJNX0RFVl9FUlJPUigidW5zdXBwb3J0ZWQgYmxvY2sgdHlwZSAlZFxuIiwgdHlwZSk7 CiAJCWJyZWFrOwogCX0KIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBpbnQgZHB1X3JtX2Rlc3Ryb3ko c3RydWN0IGRwdV9ybSAqcm0pCiAJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKIAogCWlmICgh cm0pIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJtXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiaW52 YWxpZCBybVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzIwLDEyICszMjAsMTIg QEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJCS8qIFRvcCBpcyBhIHNpbmds ZXRvbiwgbm90IG1hbmFnZWQgaW4gaHdfYmxrcyBsaXN0ICovCiAJY2FzZSBEUFVfSFdfQkxLX01B WDoKIAlkZWZhdWx0OgotCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkIGJsb2NrIHR5cGUgJWRcbiIs IHR5cGUpOworCQlEUk1fREVWX0VSUk9SKCJ1bnN1cHBvcnRlZCBibG9jayB0eXBlICVkXG4iLCB0 eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGh3KSkg ewotCQlEUFVfRVJST1IoImZhaWxlZCBodyBvYmplY3QgY3JlYXRpb246IHR5cGUgJWQsIGVyciAl bGRcbiIsCisJCURSTV9ERVZfRVJST1IoImZhaWxlZCBodyBvYmplY3QgY3JlYXRpb246IHR5cGUg JWQsIGVyciAlbGRcbiIsCiAJCQkJdHlwZSwgUFRSX0VSUihodykpOwogCQlyZXR1cm4gLUVGQVVM VDsKIAl9CkBAIC0zNTMsNyArMzUzLDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0g KnJtLAogCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7CiAKIAlpZiAoIXJtIHx8ICFjYXQgfHwg IW1taW8gfHwgIWRldikgewotCQlEUFVfRVJST1IoImludmFsaWQga21zXG4iKTsKKwkJRFJNX0RF Vl9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM3 Myw3ICszNzMsNyBAQCBpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAJaWYgKElT X0VSUl9PUl9OVUxMKHJtLT5od19tZHApKSB7CiAJCXJjID0gUFRSX0VSUihybS0+aHdfbWRwKTsK IAkJcm0tPmh3X21kcCA9IE5VTEw7Ci0JCURQVV9FUlJPUigiZmFpbGVkOiBtZHAgaHcgbm90IGF2 YWlsYWJsZVxuIik7CisJCURSTV9ERVZfRVJST1IoImZhaWxlZDogbWRwIGh3IG5vdCBhdmFpbGFi bGVcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0zODIsMTQgKzM4MiwxNCBAQCBpbnQgZHB1 X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAJCXN0cnVjdCBkcHVfbG1fY2ZnICpsbSA9ICZj YXQtPm1peGVyW2ldOwogCiAJCWlmIChsbS0+cGluZ3BvbmcgPT0gUElOR1BPTkdfTUFYKSB7Ci0J CQlEUFVfREVCVUcoInNraXAgbWl4ZXIgJWQgd2l0aG91dCBwaW5ncG9uZ1xuIiwgbG0tPmlkKTsK KwkJCURSTV9ERVZfREVCVUcoInNraXAgbWl4ZXIgJWQgd2l0aG91dCBwaW5ncG9uZ1xuIiwgbG0t PmlkKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUo cm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19MTSwKIAkJCQljYXQtPm1peGVyW2ldLmlkLCAmY2F0 LT5taXhlcltpXSk7CiAJCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IGxtIGh3IG5v dCBhdmFpbGFibGVcbiIpOworCQkJRFJNX0RFVl9FUlJPUigiZmFpbGVkOiBsbSBodyBub3QgYXZh aWxhYmxlXG4iKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCkBAIC00MDAsNyArNDAwLDcgQEAgaW50 IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogCQkJICogRG9uJ3QgZXhwZWN0IHRvIGhh dmUgaHcgd2hlcmUgbG0gbWF4IHdpZHRocyBkaWZmZXIuCiAJCQkgKiBJZiBmb3VuZCwgdGFrZSB0 aGUgbWluLgogCQkJICovCi0JCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkOiBsbSBtYXh3aWR0aCBk aWZmZXJzXG4iKTsKKwkJCURSTV9ERVZfRVJST1IoInVuc3VwcG9ydGVkOiBsbSBtYXh3aWR0aCBk aWZmZXJzXG4iKTsKIAkJCWlmIChybS0+bG1fbWF4X3dpZHRoID4gbG0tPnNibGstPm1heHdpZHRo KQogCQkJCXJtLT5sbV9tYXhfd2lkdGggPSBsbS0+c2Jsay0+bWF4d2lkdGg7CiAJCX0KQEAgLTQx MCwyMSArNDEwLDIxIEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKIAkJcmMg PSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19QSU5HUE9O RywKIAkJCQljYXQtPnBpbmdwb25nW2ldLmlkLCAmY2F0LT5waW5ncG9uZ1tpXSk7CiAJCWlmIChy YykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IHBwIGh3IG5vdCBhdmFpbGFibGVcbiIpOworCQkJ RFJNX0RFVl9FUlJPUigiZmFpbGVkOiBwcCBodyBub3QgYXZhaWxhYmxlXG4iKTsKIAkJCWdvdG8g ZmFpbDsKIAkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjYXQtPmludGZfY291bnQ7IGkrKykg ewogCQlpZiAoY2F0LT5pbnRmW2ldLnR5cGUgPT0gSU5URl9OT05FKSB7Ci0JCQlEUFVfREVCVUco InNraXAgaW50ZiAlZCB3aXRoIHR5cGUgbm9uZVxuIiwgaSk7CisJCQlEUk1fREVWX0RFQlVHKCJz a2lwIGludGYgJWQgd2l0aCB0eXBlIG5vbmVcbiIsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAog CQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxLX0lO VEYsCiAJCQkJY2F0LT5pbnRmW2ldLmlkLCAmY2F0LT5pbnRmW2ldKTsKIAkJaWYgKHJjKSB7Ci0J CQlEUFVfRVJST1IoImZhaWxlZDogaW50ZiBodyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCURSTV9E RVZfRVJST1IoImZhaWxlZDogaW50ZiBodyBub3QgYXZhaWxhYmxlXG4iKTsKIAkJCWdvdG8gZmFp bDsKIAkJfQogCX0KQEAgLTQzMyw3ICs0MzMsNyBAQCBpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRw dV9ybSAqcm0sCiAJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQ VV9IV19CTEtfQ1RMLAogCQkJCWNhdC0+Y3RsW2ldLmlkLCAmY2F0LT5jdGxbaV0pOwogCQlpZiAo cmMpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkOiBjdGwgaHcgbm90IGF2YWlsYWJsZVxuIik7CisJ CQlEUk1fREVWX0VSUk9SKCJmYWlsZWQ6IGN0bCBodyBub3QgYXZhaWxhYmxlXG4iKTsKIAkJCWdv dG8gZmFpbDsKIAkJfQogCX0KQEAgLTQ0Miw3ICs0NDIsNyBAQCBpbnQgZHB1X3JtX2luaXQoc3Ry dWN0IGRwdV9ybSAqcm0sCiAJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1t aW8sIERQVV9IV19CTEtfQ0RNLAogCQkJCWNhdC0+Y2RtW2ldLmlkLCAmY2F0LT5jZG1baV0pOwog CQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkOiBjZG0gaHcgbm90IGF2YWlsYWJsZVxu Iik7CisJCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQ6IGNkbSBodyBub3QgYXZhaWxhYmxlXG4iKTsK IAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KQEAgLTQ4Myw3ICs0ODMsNyBAQCBzdGF0aWMgYm9vbCBf ZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAKIAkqcHAgPSBOVUxMOwog Ci0JRFBVX0RFQlVHKCJjaGVjayBsbSAlZCBwcCAlZFxuIiwKKwlEUk1fREVWX0RFQlVHKCJjaGVj ayBsbSAlZCBwcCAlZFxuIiwKIAkJCSAgIGxtX2NmZy0+aWQsIGxtX2NmZy0+cGluZ3BvbmcpOwog CiAJLyogQ2hlY2sgaWYgdGhpcyBsYXllciBtaXhlciBpcyBhIHBlZXIgb2YgdGhlIHByb3Bvc2Vk IHByaW1hcnkgTE0gKi8KQEAgLTQ5Miw3ICs0OTIsNyBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2No ZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJCQkJdG9fZHB1X2h3X21peGVyKHByaW1h cnlfbG0tPmh3KS0+Y2FwOwogCiAJCWlmICghdGVzdF9iaXQobG1fY2ZnLT5pZCwgJnByaW1fbG1f Y2ZnLT5sbV9wYWlyX21hc2spKSB7Ci0JCQlEUFVfREVCVUcoImxtICVkIG5vdCBwZWVyIG9mIGxt ICVkXG4iLCBsbV9jZmctPmlkLAorCQkJRFJNX0RFVl9ERUJVRygibG0gJWQgbm90IHBlZXIgb2Yg bG0gJWRcbiIsIGxtX2NmZy0+aWQsCiAJCQkJCXByaW1fbG1fY2ZnLT5pZCk7CiAJCQlyZXR1cm4g ZmFsc2U7CiAJCX0KQEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNr X2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAKIAkvKiBBbHJlYWR5IHJlc2VydmVkPyAqLwog CWlmIChSRVNFUlZFRF9CWV9PVEhFUihsbSwgcnN2cCkpIHsKLQkJRFBVX0RFQlVHKCJsbSAlZCBh bHJlYWR5IHJlc2VydmVkXG4iLCBsbV9jZmctPmlkKTsKKwkJRFJNX0RFVl9ERUJVRygibG0gJWQg YWxyZWFkeSByZXNlcnZlZFxuIiwgbG1fY2ZnLT5pZCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAK QEAgLTUxMywxMiArNTEzLDEyIEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dl dF9jb25uZWN0ZWRfYmxrcygKIAl9CiAKIAlpZiAoISpwcCkgewotCQlEUFVfRVJST1IoImZhaWxl ZCB0byBnZXQgcHAgb24gbG0gJWRcbiIsIGxtX2NmZy0+cGluZ3BvbmcpOworCQlEUk1fREVWX0VS Uk9SKCJmYWlsZWQgdG8gZ2V0IHBwIG9uIGxtICVkXG4iLCBsbV9jZmctPnBpbmdwb25nKTsKIAkJ cmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChSRVNFUlZFRF9CWV9PVEhFUigqcHAsIHJzdnApKSB7 Ci0JCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG0tPmlkLAor CQlEUk1fREVWX0RFQlVHKCJsbSAlZCBwcCAlZCBhbHJlYWR5IHJlc2VydmVkXG4iLCBsbS0+aWQs CiAJCQkJKCpwcCktPmlkKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTUzOSw3ICs1MzksNyBA QCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAJaW50IGksIHJjID0gMDsKIAogCWlm ICghcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSkgewotCQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVy IG9mIGxtOiAlZFxuIiwgcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSk7CisJCURSTV9ERVZfRVJST1Io ImludmFsaWQgbnVtYmVyIG9mIGxtOiAlZFxuIiwgcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSk7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTc5LDcgKzU3OSw3IEBAIHN0YXRpYyBpbnQgX2Rw dV9ybV9yZXNlcnZlX2xtcygKIAl9CiAKIAlpZiAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3kt Pm51bV9sbSkgewotCQlEUFVfREVCVUcoInVuYWJsZSB0byBmaW5kIGFwcHJvcHJpYXRlIG1peGVy c1xuIik7CisJCURSTV9ERVZfREVCVUcoInVuYWJsZSB0byBmaW5kIGFwcHJvcHJpYXRlIG1peGVy c1xuIik7CiAJCXJldHVybiAtRU5BVkFJTDsKIAl9CiAKQEAgLTYxOSwxMyArNjE5LDEzIEBAIHN0 YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2N0bHMoCiAKIAkJaGFzX3NwbGl0X2Rpc3BsYXkgPSBC SVQoRFBVX0NUTF9TUExJVF9ESVNQTEFZKSAmIGZlYXR1cmVzOwogCi0JCURQVV9ERUJVRygiY3Rs ICVkIGNhcHMgMHglbFhcbiIsIGl0ZXIuYmxrLT5pZCwgZmVhdHVyZXMpOworCQlEUk1fREVWX0RF QlVHKCJjdGwgJWQgY2FwcyAweCVsWFxuIiwgaXRlci5ibGstPmlkLCBmZWF0dXJlcyk7CiAKIAkJ aWYgKHRvcC0+bmVlZHNfc3BsaXRfZGlzcGxheSAhPSBoYXNfc3BsaXRfZGlzcGxheSkKIAkJCWNv bnRpbnVlOwogCiAJCWN0bHNbaV0gPSBpdGVyLmJsazsKLQkJRFBVX0RFQlVHKCJjdGwgJWQgbWF0 Y2hcbiIsIGl0ZXIuYmxrLT5pZCk7CisJCURSTV9ERVZfREVCVUcoImN0bCAlZCBtYXRjaFxuIiwg aXRlci5ibGstPmlkKTsKIAogCQlpZiAoKytpID09IHRvcC0+bnVtX2N0bCkKIAkJCWJyZWFrOwpA QCAtNjc5LDcgKzY3OSw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2NkbSgKIAl9CiAK IAlpZiAoIWl0ZXIuaHcpIHsKLQkJRFBVX0VSUk9SKCJjb3VsZG4ndCByZXNlcnZlIGNkbSBmb3Ig dHlwZSAlZCBpZCAlZFxuIiwgdHlwZSwgaWQpOworCQlEUk1fREVWX0VSUk9SKCJjb3VsZG4ndCBy ZXNlcnZlIGNkbSBmb3IgdHlwZSAlZCBpZCAlZFxuIiwgdHlwZSwgaWQpOwogCQlyZXR1cm4gLUVO QVZBSUw7CiAJfQogCkBAIC03MDMsNyArNzAzLDcgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2Vy dmVfaW50ZigKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChSRVNFUlZFRF9CWV9PVEhFUihpdGVyLmJs aywgcnN2cCkpIHsKLQkJCURQVV9FUlJPUigidHlwZSAlZCBpZCAlZCBhbHJlYWR5IHJlc2VydmVk XG4iLCB0eXBlLCBpZCk7CisJCQlEUk1fREVWX0VSUk9SKCJ0eXBlICVkIGlkICVkIGFscmVhZHkg cmVzZXJ2ZWRcbiIsIHR5cGUsIGlkKTsKIAkJCXJldHVybiAtRU5BVkFJTDsKIAkJfQogCkBAIC03 MTUsNyArNzE1LDcgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfaW50ZigKIAogCS8qIFNo b3VsZG4ndCBoYXBwZW4gc2luY2UgaW50ZnMgYXJlIGZpeGVkIGF0IHByb2JlICovCiAJaWYgKCFp dGVyLmh3KSB7Ci0JCURQVV9FUlJPUigiY291bGRuJ3QgZmluZCB0eXBlICVkIGlkICVkXG4iLCB0 eXBlLCBpZCk7CisJCURSTV9ERVZfRVJST1IoImNvdWxkbid0IGZpbmQgdHlwZSAlZCBpZCAlZFxu IiwgdHlwZSwgaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTc2NSw3ICs3NjUsNyBA QCBzdGF0aWMgaW50IF9kcHVfcm1fbWFrZV9uZXh0X3JzdnAoCiAKIAlyZXQgPSBfZHB1X3JtX3Jl c2VydmVfbG1zKHJtLCByc3ZwLCByZXFzKTsKIAlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigidW5h YmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgbWl4ZXJzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigidW5h YmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgbWl4ZXJzXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAK QEAgLTc4MSw3ICs3ODEsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fbWFrZV9uZXh0X3JzdnAoCiAJ CV9kcHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCByc3ZwLCAmdG9wb2xvZ3kpOwogCX0KIAlpZiAocmV0 KSB7Ci0JCURQVV9FUlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgQ1RMXG4iKTsKKwkJ RFJNX0RFVl9FUlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgQ1RMXG4iKTsKIAkJcmV0 dXJuIHJldDsKIAl9CiAKQEAgLTgxNiw3ICs4MTYsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcG9w dWxhdGVfcmVxdWlyZW1lbnRzKAogCX0KIAogCWlmICghcmVxcy0+dG9wb2xvZ3kpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIHRvcG9sb2d5IGZvciB0aGUgZGlzcGxheVxuIik7CisJCURSTV9ERVZf RVJST1IoImludmFsaWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNwbGF5XG4iKTsKIAkJcmV0dXJuIC1F SU5WQUw7CiAJfQogCkBAIC04NDYsNyArODQ2LDcgQEAgc3RhdGljIHN0cnVjdCBkcHVfcm1fcnN2 cCAqX2RwdV9ybV9nZXRfcnN2cCgKIAlzdHJ1Y3QgZHB1X3JtX3JzdnAgKmk7CiAKIAlpZiAoIXJt IHx8ICFlbmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCURSTV9ERVZf RVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04OTEs NyArODkxLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9yZWxlYXNlX3JzdnAoCiAJaWYgKCFyc3Zw KQogCQlyZXR1cm47CiAKLQlEUFVfREVCVUcoInJlbCByc3ZwICVkIGVuYyAlZFxuIiwgcnN2cC0+ c2VxLCByc3ZwLT5lbmNfaWQpOworCURSTV9ERVZfREVCVUcoInJlbCByc3ZwICVkIGVuYyAlZFxu IiwgcnN2cC0+c2VxLCByc3ZwLT5lbmNfaWQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHJzdnBfYywgcnN2cF9uLCAmcm0tPnJzdnBzLCBsaXN0KSB7CiAJCWlmIChyc3ZwID09IHJzdnBf YykgewpAQCAtOTA0LDEzICs5MDQsMTMgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9yZWxlYXNlX3Jz dnAoCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0tPmh3X2Jsa3NbdHlwZV0sIGxpc3Qp IHsKIAkJCWlmIChibGstPnJzdnAgPT0gcnN2cCkgewogCQkJCWJsay0+cnN2cCA9IE5VTEw7Ci0J CQkJRFBVX0RFQlVHKCJyZWwgcnN2cCAlZCBlbmMgJWQgJWQgJWRcbiIsCisJCQkJRFJNX0RFVl9E RUJVRygicmVsIHJzdnAgJWQgZW5jICVkICVkICVkXG4iLAogCQkJCQkJcnN2cC0+c2VxLCByc3Zw LT5lbmNfaWQsCiAJCQkJCQlibGstPnR5cGUsIGJsay0+aWQpOwogCQkJfQogCQkJaWYgKGJsay0+ cnN2cF9ueHQgPT0gcnN2cCkgewogCQkJCWJsay0+cnN2cF9ueHQgPSBOVUxMOwotCQkJCURQVV9E RUJVRygicmVsIHJzdnBfbnh0ICVkIGVuYyAlZCAlZCAlZFxuIiwKKwkJCQlEUk1fREVWX0RFQlVH KCJyZWwgcnN2cF9ueHQgJWQgZW5jICVkICVkICVkXG4iLAogCQkJCQkJcnN2cC0+c2VxLCByc3Zw LT5lbmNfaWQsCiAJCQkJCQlibGstPnR5cGUsIGJsay0+aWQpOwogCQkJfQpAQCAtOTI2LDcgKzky Niw3IEBAIHZvaWQgZHB1X3JtX3JlbGVhc2Uoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jKQogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwogCiAJaWYgKCFybSB8 fCAhZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOworCQlEUk1fREVWX0VS Uk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTkzNCwxMyArOTM0 LDEzIEBAIHZvaWQgZHB1X3JtX3JlbGVhc2Uoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jKQogCiAJcnN2cCA9IF9kcHVfcm1fZ2V0X3JzdnAocm0sIGVuYyk7CiAJaWYg KCFyc3ZwKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgcnN2cCBmb3IgZW5jICVkXG4i LCBlbmMtPmJhc2UuaWQpOworCQlEUk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gZmluZCByc3ZwIGZv ciBlbmMgJWRcbiIsIGVuYy0+YmFzZS5pZCk7CiAJCWdvdG8gZW5kOwogCX0KIAogCWNvbm4gPSBf ZHB1X3JtX2dldF9jb25uZWN0b3IoZW5jKTsKIAlpZiAoIWNvbm4pIHsKLQkJRFBVX0VSUk9SKCJm YWlsZWQgdG8gZ2V0IGNvbm5lY3RvciBmb3IgZW5jICVkXG4iLCBlbmMtPmJhc2UuaWQpOworCQlE Uk1fREVWX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNvbm5lY3RvciBmb3IgZW5jICVkXG4iLCBlbmMt PmJhc2UuaWQpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTk4OCw3ICs5ODgsNyBAQCBpbnQgZHB1 X3JtX3Jlc2VydmUoCiAJaW50IHJldDsKIAogCWlmICghcm0gfHwgIWVuYyB8fCAhY3J0Y19zdGF0 ZSB8fCAhY29ubl9zdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsK KwkJRFJNX0RFVl9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIpOwogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIGludCBkcHVfcm1fcmVzZXJ2ZSgKIAlyZXQg PSBfZHB1X3JtX3BvcHVsYXRlX3JlcXVpcmVtZW50cyhybSwgZW5jLCBjcnRjX3N0YXRlLAogCQkJ Y29ubl9zdGF0ZSwgJnJlcXMsIHRvcG9sb2d5KTsKIAlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigi ZmFpbGVkIHRvIHBvcHVsYXRlIGh3IHJlcXVpcmVtZW50c1xuIik7CisJCURSTV9ERVZfRVJST1Io ImZhaWxlZCB0byBwb3B1bGF0ZSBodyByZXF1aXJlbWVudHNcbiIpOwogCQlnb3RvIGVuZDsKIAl9 CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBAIGludCBkcHVfcm1fcmVzZXJ2ZSgKIAkgKiBhdG9taWNf Y2hlY2sgcGhhc2UgYnkgdXNpbmcgdGhpcyBDTEVBUiBiaXQKIAkgKi8KIAlpZiAocnN2cF9jdXIg JiYgdGVzdF9vbmx5ICYmIFJNX1JRX0NMRUFSKCZyZXFzKSkgewotCQlEUFVfREVCVUcoInRlc3Rf b25seSAmIENMRUFSOiBjbGVhciByc3ZwW3MlZGUlZF1cbiIsCisJCURSTV9ERVZfREVCVUcoInRl c3Rfb25seSAmIENMRUFSOiBjbGVhciByc3ZwW3MlZGUlZF1cbiIsCiAJCQkJcnN2cF9jdXItPnNl cSwgcnN2cF9jdXItPmVuY19pZCk7CiAJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwX2N1 ciwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKIAkJcnN2cF9jdXIgPSBOVUxMOwpAQCAtMTA0OSw3 ICsxMDQ5LDcgQEAgaW50IGRwdV9ybV9yZXNlcnZlKAogCV9kcHVfcm1fcHJpbnRfcnN2cHMocm0s IERQVV9STV9TVEFHRV9BRlRFUl9SU1ZQTkVYVCk7CiAKIAlpZiAocmV0KSB7Ci0JCURQVV9FUlJP UigiZmFpbGVkIHRvIHJlc2VydmUgaHcgcmVzb3VyY2VzOiAlZFxuIiwgcmV0KTsKKwkJRFJNX0RF Vl9FUlJPUigiZmFpbGVkIHRvIHJlc2VydmUgaHcgcmVzb3VyY2VzOiAlZFxuIiwgcmV0KTsKIAkJ X2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnBfbnh0LCBjb25uX3N0YXRlLT5jb25uZWN0b3Ip OwogCX0gZWxzZSBpZiAodGVzdF9vbmx5ICYmICFSTV9SUV9MT0NLKCZyZXFzKSkgewogCQkvKgpA QCAtMTA1NywxMiArMTA1NywxMiBAQCBpbnQgZHB1X3JtX3Jlc2VydmUoCiAJCSAqIEhvd2V2ZXIs IGlmIHRoZSB1c2VyIHJlcXVlc3RzIExPQ0ssIHRoZW4ga2VlcCB0aGUgcmVzZXJ2YXRpb24KIAkJ ICogbWFkZSBkdXJpbmcgdGhlIGF0b21pY19jaGVjayBwaGFzZS4KIAkJICovCi0JCURQVV9ERUJV RygidGVzdF9vbmx5OiBkaXNjYXJkIHRlc3QgcnN2cFtzJWRlJWRdXG4iLAorCQlEUk1fREVWX0RF QlVHKCJ0ZXN0X29ubHk6IGRpc2NhcmQgdGVzdCByc3ZwW3MlZGUlZF1cbiIsCiAJCQkJcnN2cF9u eHQtPnNlcSwgcnN2cF9ueHQtPmVuY19pZCk7CiAJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCBy c3ZwX254dCwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKIAl9IGVsc2UgewogCQlpZiAodGVzdF9v bmx5ICYmIFJNX1JRX0xPQ0soJnJlcXMpKQotCQkJRFBVX0RFQlVHKCJ0ZXN0X29ubHkgJiBMT0NL OiBsb2NrIHJzdnBbcyVkZSVkXVxuIiwKKwkJCURSTV9ERVZfREVCVUcoInRlc3Rfb25seSAmIExP Q0s6IGxvY2sgcnN2cFtzJWRlJWRdXG4iLAogCQkJCQlyc3ZwX254dC0+c2VxLCByc3ZwX254dC0+ ZW5jX2lkKTsKIAogCQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9jdXIsIGNvbm5fc3Rh dGUtPmNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfdmJpZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3ZiaWYuYwpp bmRleCAyOTU1MjgyLi5hMjI0ODlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfdmJpZi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV92YmlmLmMKQEAgLTMxLDcgKzMxLDcgQEAgc3RhdGljIGludCBfZHB1X3ZiaWZfd2FpdF9mb3Jf eGluX2hhbHQoc3RydWN0IGRwdV9od192YmlmICp2YmlmLCB1MzIgeGluX2lkKQogCWludCByYzsK IAogCWlmICghdmJpZiB8fCAhdmJpZi0+Y2FwIHx8ICF2YmlmLT5vcHMuZ2V0X2hhbHRfY3RybCkg ewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzIHZiaWYgJWRcbiIsIHZiaWYgIT0gMCk7 CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1lbnRzIHZiaWYgJWRcbiIsIHZiaWYgIT0g MCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDksMTEgKzQ5LDExIEBAIHN0YXRpYyBp bnQgX2RwdV92YmlmX3dhaXRfZm9yX3hpbl9oYWx0KHN0cnVjdCBkcHVfaHdfdmJpZiAqdmJpZiwg dTMyIHhpbl9pZCkKIAogCWlmICghc3RhdHVzKSB7CiAJCXJjID0gLUVUSU1FRE9VVDsKLQkJRFBV X0VSUk9SKCJWQklGICVkIGNsaWVudCAlZCBub3QgaGFsdGluZy4gVElNRURPVVQuXG4iLAorCQlE Uk1fREVWX0VSUk9SKCJWQklGICVkIGNsaWVudCAlZCBub3QgaGFsdGluZy4gVElNRURPVVQuXG4i LAogCQkJCXZiaWYtPmlkeCAtIFZCSUZfMCwgeGluX2lkKTsKIAl9IGVsc2UgewogCQlyYyA9IDA7 Ci0JCURQVV9ERUJVRygiVkJJRiAlZCBjbGllbnQgJWQgaXMgaGFsdGVkXG4iLAorCQlEUk1fREVW X0RFQlVHKCJWQklGICVkIGNsaWVudCAlZCBpcyBoYWx0ZWRcbiIsCiAJCQkJdmJpZi0+aWR4IC0g VkJJRl8wLCB4aW5faWQpOwogCX0KIApAQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMgdm9pZCBfZHB1 X3ZiaWZfYXBwbHlfZHluYW1pY19vdF9saW1pdChzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCiAJ CX0KIAl9CiAKLQlEUFVfREVCVUcoInZiaWY6JWQgeGluOiVkIHc6JWQgaDolZCBmcHM6JWQgcHBz OiVsbHUgb3Q6JXVcbiIsCisJRFJNX0RFVl9ERUJVRygidmJpZjolZCB4aW46JWQgdzolZCBoOiVk IGZwczolZCBwcHM6JWxsdSBvdDoldVxuIiwKIAkJCXZiaWYtPmlkeCAtIFZCSUZfMCwgcGFyYW1z LT54aW5faWQsCiAJCQlwYXJhbXMtPndpZHRoLCBwYXJhbXMtPmhlaWdodCwgcGFyYW1zLT5mcmFt ZV9yYXRlLAogCQkJcHBzLCAqb3RfbGltKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgdTMy IF9kcHVfdmJpZl9nZXRfb3RfbGltaXQoc3RydWN0IGRwdV9od192YmlmICp2YmlmLAogCXUzMiB2 YWw7CiAKIAlpZiAoIXZiaWYgfHwgIXZiaWYtPmNhcCkgewotCQlEUFVfRVJST1IoImludmFsaWQg YXJndW1lbnRzIHZiaWYgJWRcbiIsIHZiaWYgIT0gMCk7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgYXJndW1lbnRzIHZiaWYgJWRcbiIsIHZiaWYgIT0gMCk7CiAJCXJldHVybiAtRUlOVkFMOwog CX0KIApAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyB1MzIgX2RwdV92YmlmX2dldF9vdF9saW1p dChzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCiAJfQogCiBleGl0OgotCURQVV9ERUJVRygidmJp ZjolZCB4aW46JWQgb3RfbGltOiVkXG4iLAorCURSTV9ERVZfREVCVUcoInZiaWY6JWQgeGluOiVk IG90X2xpbTolZFxuIiwKIAkJCXZiaWYtPmlkeCAtIFZCSUZfMCwgcGFyYW1zLT54aW5faWQsIG90 X2xpbSk7CiAJcmV0dXJuIG90X2xpbTsKIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIGRwdV92 YmlmX3NldF9vdF9saW1pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKIAlpbnQgcmV0LCBpOwog CiAJaWYgKCFkcHVfa21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIpOwor CQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CiAJCXJldHVybjsKIAl9CiAJ bWRwID0gZHB1X2ttcy0+aHdfbWRwOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgZHB1X3ZiaWZf c2V0X290X2xpbWl0KHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAogCX0KIAogCWlmICghdmJpZiB8 fCAhbWRwKSB7Ci0JCURQVV9ERUJVRygiaW52YWxpZCBhcmd1bWVudHMgdmJpZiAlZCBtZHAgJWRc biIsCisJCURSTV9ERVZfREVCVUcoImludmFsaWQgYXJndW1lbnRzIHZiaWYgJWQgbWRwICVkXG4i LAogCQkJCXZiaWYgIT0gMCwgbWRwICE9IDApOwogCQlyZXR1cm47CiAJfQpAQCAtMjI0LDcgKzIy NCw3IEBAIHZvaWQgZHB1X3ZiaWZfc2V0X3Fvc19yZW1hcChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt cywKIAlpbnQgaTsKIAogCWlmICghZHB1X2ttcyB8fCAhcGFyYW1zIHx8ICFkcHVfa21zLT5od19t ZHApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCURSTV9ERVZfRVJS T1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsKIAkJcmV0dXJuOwogCX0KIAltZHAgPSBkcHVfa21z LT5od19tZHA7CkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIGRwdV92YmlmX3NldF9xb3NfcmVt YXAoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsCiAJfQogCiAJaWYgKCF2YmlmIHx8ICF2YmlmLT5j YXApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHZiaWYgJWRcbiIsIHBhcmFtcy0+dmJpZl9pZHgp OworCQlEUk1fREVWX0VSUk9SKCJpbnZhbGlkIHZiaWYgJWRcbiIsIHBhcmFtcy0+dmJpZl9pZHgp OwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCF2YmlmLT5vcHMuc2V0X3Fvc19yZW1hcCB8fCAhbWRw LT5vcHMuc2V0dXBfY2xrX2ZvcmNlX2N0cmwpIHsKLQkJRFBVX0RFQlVHKCJxb3MgcmVtYXAgbm90 IHN1cHBvcnRlZFxuIik7CisJCURSTV9ERVZfREVCVUcoInFvcyByZW1hcCBub3Qgc3VwcG9ydGVk XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjUxLDE0ICsyNTEsMTQgQEAgdm9pZCBkcHVfdmJp Zl9zZXRfcW9zX3JlbWFwKHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAogCQkJJnZiaWYtPmNhcC0+ cW9zX25ydF90Ymw7CiAKIAlpZiAoIXFvc190YmwtPm5wcmlvcml0eV9sdmwgfHwgIXFvc190Ymwt PnByaW9yaXR5X2x2bCkgewotCQlEUFVfREVCVUcoInFvcyB0Ymwgbm90IGRlZmluZWRcbiIpOwor CQlEUk1fREVWX0RFQlVHKCJxb3MgdGJsIG5vdCBkZWZpbmVkXG4iKTsKIAkJcmV0dXJuOwogCX0K IAogCWZvcmNlZF9vbiA9IG1kcC0+b3BzLnNldHVwX2Nsa19mb3JjZV9jdHJsKG1kcCwgcGFyYW1z LT5jbGtfY3RybCwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcW9zX3RibC0+bnByaW9yaXR5 X2x2bDsgaSsrKSB7Ci0JCURQVV9ERUJVRygidmJpZjolZCB4aW46JWQgbHZsOiVkLyVkXG4iLAor CQlEUk1fREVWX0RFQlVHKCJ2YmlmOiVkIHhpbjolZCBsdmw6JWQvJWRcbiIsCiAJCQkJcGFyYW1z LT52YmlmX2lkeCwgcGFyYW1zLT54aW5faWQsIGksCiAJCQkJcW9zX3RibC0+cHJpb3JpdHlfbHZs W2ldKTsKIAkJdmJpZi0+b3BzLnNldF9xb3NfcmVtYXAodmJpZiwgcGFyYW1zLT54aW5faWQsIGks CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBkcHVfdmJpZl9jbGVhcl9lcnJvcnMoc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMpCiAJdTMyIGksIHBuZCwgc3JjOwogCiAJaWYgKCFkcHVfa21zKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7CisJCURSTV9ERVZfRVJST1IoImludmFs aWQgYXJndW1lbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yOTcsNyArMjk3LDcgQEAgdm9p ZCBkcHVfdmJpZl9pbml0X21lbXR5cGVzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogCWludCBp LCBqOwogCiAJaWYgKCFkcHVfa21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxu Iik7CisJCURSTV9ERVZfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwogCQlyZXR1cm47CiAJ fQogCkBAIC0zMjYsNyArMzI2LDcgQEAgaW50IGRwdV9kZWJ1Z2ZzX3ZiaWZfaW5pdChzdHJ1Y3Qg ZHB1X2ttcyAqZHB1X2ttcywgc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290KQogCiAJZHB1X2tt cy0+ZGVidWdmc192YmlmID0gZGVidWdmc19jcmVhdGVfZGlyKCJ2YmlmIiwgZGVidWdmc19yb290 KTsKIAlpZiAoIWRwdV9rbXMtPmRlYnVnZnNfdmJpZikgewotCQlEUFVfRVJST1IoImZhaWxlZCB0 byBjcmVhdGUgdmJpZiBkZWJ1Z2ZzXG4iKTsKKwkJRFJNX0RFVl9FUlJPUigiZmFpbGVkIHRvIGNy ZWF0ZSB2YmlmIGRlYnVnZnNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLS0gCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK