From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754320AbdGNOGJ (ORCPT ); Fri, 14 Jul 2017 10:06:09 -0400 Received: from mail-yw0-f196.google.com ([209.85.161.196]:34405 "EHLO mail-yw0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753830AbdGNOGH (ORCPT ); Fri, 14 Jul 2017 10:06:07 -0400 MIME-Version: 1.0 In-Reply-To: <20170713162538.22788-5-peda@axentia.se> References: <20170713162538.22788-1-peda@axentia.se> <20170713162538.22788-5-peda@axentia.se> From: Alex Deucher Date: Fri, 14 Jul 2017 10:06:05 -0400 Message-ID: Subject: Re: [PATCH v5 04/14] drm: amd: remove dead code and pointless local lut storage To: Peter Rosin Cc: LKML , Jani Nikula , Boris Brezillon , Lionel Landwerlin , David Airlie , Daniel Vetter , amd-gfx list , =?UTF-8?Q?Christian_K=C3=B6nig?= , Sean Paul , Maling list - DRI developers , Alex Deucher , Daniel Vetter Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 13, 2017 at 12:25 PM, Peter Rosin wrote: > The redundant fb helpers .load_lut, .gamma_set and .gamma_get are > no longer used. Remove the dead code and hook up the crtc .gamma_set > to use the crtc gamma_store directly instead of duplicating that > info locally. > > Acked-by: Daniel Vetter > Signed-off-by: Peter Rosin Acked-by: Alex Deucher > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 24 ------------------------ > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 - > drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 27 +++++++-------------------- > drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 27 +++++++-------------------- > drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 27 +++++++-------------------- > drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 27 +++++++-------------------- > drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 23 ----------------------- > 7 files changed, 28 insertions(+), 128 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > index c0d8c6ff6380..7dc378013a42 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > @@ -312,31 +312,7 @@ static int amdgpu_fbdev_destroy(struct drm_device *dev, struct amdgpu_fbdev *rfb > return 0; > } > > -/** Sets the color ramps on behalf of fbcon */ > -static void amdgpu_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, > - u16 blue, int regno) > -{ > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - > - amdgpu_crtc->lut_r[regno] = red >> 6; > - amdgpu_crtc->lut_g[regno] = green >> 6; > - amdgpu_crtc->lut_b[regno] = blue >> 6; > -} > - > -/** Gets the color ramps on behalf of fbcon */ > -static void amdgpu_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, > - u16 *blue, int regno) > -{ > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - > - *red = amdgpu_crtc->lut_r[regno] << 6; > - *green = amdgpu_crtc->lut_g[regno] << 6; > - *blue = amdgpu_crtc->lut_b[regno] << 6; > -} > - > static const struct drm_fb_helper_funcs amdgpu_fb_helper_funcs = { > - .gamma_set = amdgpu_crtc_fb_gamma_set, > - .gamma_get = amdgpu_crtc_fb_gamma_get, > .fb_probe = amdgpufb_create, > }; > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h > index 43a9d3aec6c4..39f7eda6091e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h > @@ -369,7 +369,6 @@ struct amdgpu_atom_ss { > struct amdgpu_crtc { > struct drm_crtc base; > int crtc_id; > - u16 lut_r[256], lut_g[256], lut_b[256]; > bool enabled; > bool can_tile; > uint32_t crtc_offset; > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c > index 9f78c03a2e31..c9580235e35b 100644 > --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c > @@ -2267,6 +2267,7 @@ static void dce_v10_0_crtc_load_lut(struct drm_crtc *crtc) > struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > struct drm_device *dev = crtc->dev; > struct amdgpu_device *adev = dev->dev_private; > + u16 *r, *g, *b; > int i; > u32 tmp; > > @@ -2304,11 +2305,14 @@ static void dce_v10_0_crtc_load_lut(struct drm_crtc *crtc) > WREG32(mmDC_LUT_WRITE_EN_MASK + amdgpu_crtc->crtc_offset, 0x00000007); > > WREG32(mmDC_LUT_RW_INDEX + amdgpu_crtc->crtc_offset, 0); > + r = crtc->gamma_store; > + g = r + crtc->gamma_size; > + b = g + crtc->gamma_size; > for (i = 0; i < 256; i++) { > WREG32(mmDC_LUT_30_COLOR + amdgpu_crtc->crtc_offset, > - (amdgpu_crtc->lut_r[i] << 20) | > - (amdgpu_crtc->lut_g[i] << 10) | > - (amdgpu_crtc->lut_b[i] << 0)); > + ((*r++ & 0xffc0) << 14) | > + ((*g++ & 0xffc0) << 4) | > + (*b++ >> 6)); > } > > tmp = RREG32(mmDEGAMMA_CONTROL + amdgpu_crtc->crtc_offset); > @@ -2624,15 +2628,6 @@ static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, > u16 *blue, uint32_t size, > struct drm_modeset_acquire_ctx *ctx) > { > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - int i; > - > - /* userspace palettes are always correct as is */ > - for (i = 0; i < size; i++) { > - amdgpu_crtc->lut_r[i] = red[i] >> 6; > - amdgpu_crtc->lut_g[i] = green[i] >> 6; > - amdgpu_crtc->lut_b[i] = blue[i] >> 6; > - } > dce_v10_0_crtc_load_lut(crtc); > > return 0; > @@ -2844,14 +2839,12 @@ static const struct drm_crtc_helper_funcs dce_v10_0_crtc_helper_funcs = { > .mode_set_base_atomic = dce_v10_0_crtc_set_base_atomic, > .prepare = dce_v10_0_crtc_prepare, > .commit = dce_v10_0_crtc_commit, > - .load_lut = dce_v10_0_crtc_load_lut, > .disable = dce_v10_0_crtc_disable, > }; > > static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index) > { > struct amdgpu_crtc *amdgpu_crtc; > - int i; > > amdgpu_crtc = kzalloc(sizeof(struct amdgpu_crtc) + > (AMDGPUFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL); > @@ -2869,12 +2862,6 @@ static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index) > adev->ddev->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; > adev->ddev->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; > > - for (i = 0; i < 256; i++) { > - amdgpu_crtc->lut_r[i] = i << 2; > - amdgpu_crtc->lut_g[i] = i << 2; > - amdgpu_crtc->lut_b[i] = i << 2; > - } > - > switch (amdgpu_crtc->crtc_id) { > case 0: > default: > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c > index 4bcf01dc567a..7e14f532df59 100644 > --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c > @@ -2251,6 +2251,7 @@ static void dce_v11_0_crtc_load_lut(struct drm_crtc *crtc) > struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > struct drm_device *dev = crtc->dev; > struct amdgpu_device *adev = dev->dev_private; > + u16 *r, *g, *b; > int i; > u32 tmp; > > @@ -2282,11 +2283,14 @@ static void dce_v11_0_crtc_load_lut(struct drm_crtc *crtc) > WREG32(mmDC_LUT_WRITE_EN_MASK + amdgpu_crtc->crtc_offset, 0x00000007); > > WREG32(mmDC_LUT_RW_INDEX + amdgpu_crtc->crtc_offset, 0); > + r = crtc->gamma_store; > + g = r + crtc->gamma_size; > + b = g + crtc->gamma_size; > for (i = 0; i < 256; i++) { > WREG32(mmDC_LUT_30_COLOR + amdgpu_crtc->crtc_offset, > - (amdgpu_crtc->lut_r[i] << 20) | > - (amdgpu_crtc->lut_g[i] << 10) | > - (amdgpu_crtc->lut_b[i] << 0)); > + ((*r++ & 0xffc0) << 14) | > + ((*g++ & 0xffc0) << 4) | > + (*b++ >> 6)); > } > > tmp = RREG32(mmDEGAMMA_CONTROL + amdgpu_crtc->crtc_offset); > @@ -2644,15 +2648,6 @@ static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, > u16 *blue, uint32_t size, > struct drm_modeset_acquire_ctx *ctx) > { > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - int i; > - > - /* userspace palettes are always correct as is */ > - for (i = 0; i < size; i++) { > - amdgpu_crtc->lut_r[i] = red[i] >> 6; > - amdgpu_crtc->lut_g[i] = green[i] >> 6; > - amdgpu_crtc->lut_b[i] = blue[i] >> 6; > - } > dce_v11_0_crtc_load_lut(crtc); > > return 0; > @@ -2892,14 +2887,12 @@ static const struct drm_crtc_helper_funcs dce_v11_0_crtc_helper_funcs = { > .mode_set_base_atomic = dce_v11_0_crtc_set_base_atomic, > .prepare = dce_v11_0_crtc_prepare, > .commit = dce_v11_0_crtc_commit, > - .load_lut = dce_v11_0_crtc_load_lut, > .disable = dce_v11_0_crtc_disable, > }; > > static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index) > { > struct amdgpu_crtc *amdgpu_crtc; > - int i; > > amdgpu_crtc = kzalloc(sizeof(struct amdgpu_crtc) + > (AMDGPUFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL); > @@ -2917,12 +2910,6 @@ static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index) > adev->ddev->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; > adev->ddev->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; > > - for (i = 0; i < 256; i++) { > - amdgpu_crtc->lut_r[i] = i << 2; > - amdgpu_crtc->lut_g[i] = i << 2; > - amdgpu_crtc->lut_b[i] = i << 2; > - } > - > switch (amdgpu_crtc->crtc_id) { > case 0: > default: > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c > index fd134a4629d7..d773b50afa60 100644 > --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c > @@ -2182,6 +2182,7 @@ static void dce_v6_0_crtc_load_lut(struct drm_crtc *crtc) > struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > struct drm_device *dev = crtc->dev; > struct amdgpu_device *adev = dev->dev_private; > + u16 *r, *g, *b; > int i; > > DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_id); > @@ -2211,11 +2212,14 @@ static void dce_v6_0_crtc_load_lut(struct drm_crtc *crtc) > WREG32(mmDC_LUT_WRITE_EN_MASK + amdgpu_crtc->crtc_offset, 0x00000007); > > WREG32(mmDC_LUT_RW_INDEX + amdgpu_crtc->crtc_offset, 0); > + r = crtc->gamma_store; > + g = r + crtc->gamma_size; > + b = g + crtc->gamma_size; > for (i = 0; i < 256; i++) { > WREG32(mmDC_LUT_30_COLOR + amdgpu_crtc->crtc_offset, > - (amdgpu_crtc->lut_r[i] << 20) | > - (amdgpu_crtc->lut_g[i] << 10) | > - (amdgpu_crtc->lut_b[i] << 0)); > + ((*r++ & 0xffc0) << 14) | > + ((*g++ & 0xffc0) << 4) | > + (*b++ >> 6)); > } > > WREG32(mmDEGAMMA_CONTROL + amdgpu_crtc->crtc_offset, > @@ -2496,15 +2500,6 @@ static int dce_v6_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, > u16 *blue, uint32_t size, > struct drm_modeset_acquire_ctx *ctx) > { > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - int i; > - > - /* userspace palettes are always correct as is */ > - for (i = 0; i < size; i++) { > - amdgpu_crtc->lut_r[i] = red[i] >> 6; > - amdgpu_crtc->lut_g[i] = green[i] >> 6; > - amdgpu_crtc->lut_b[i] = blue[i] >> 6; > - } > dce_v6_0_crtc_load_lut(crtc); > > return 0; > @@ -2712,14 +2707,12 @@ static const struct drm_crtc_helper_funcs dce_v6_0_crtc_helper_funcs = { > .mode_set_base_atomic = dce_v6_0_crtc_set_base_atomic, > .prepare = dce_v6_0_crtc_prepare, > .commit = dce_v6_0_crtc_commit, > - .load_lut = dce_v6_0_crtc_load_lut, > .disable = dce_v6_0_crtc_disable, > }; > > static int dce_v6_0_crtc_init(struct amdgpu_device *adev, int index) > { > struct amdgpu_crtc *amdgpu_crtc; > - int i; > > amdgpu_crtc = kzalloc(sizeof(struct amdgpu_crtc) + > (AMDGPUFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL); > @@ -2737,12 +2730,6 @@ static int dce_v6_0_crtc_init(struct amdgpu_device *adev, int index) > adev->ddev->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; > adev->ddev->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; > > - for (i = 0; i < 256; i++) { > - amdgpu_crtc->lut_r[i] = i << 2; > - amdgpu_crtc->lut_g[i] = i << 2; > - amdgpu_crtc->lut_b[i] = i << 2; > - } > - > amdgpu_crtc->crtc_offset = crtc_offsets[amdgpu_crtc->crtc_id]; > > amdgpu_crtc->pll_id = ATOM_PPLL_INVALID; > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c > index a9e869554627..4eb63f6a41ab 100644 > --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c > @@ -2124,6 +2124,7 @@ static void dce_v8_0_crtc_load_lut(struct drm_crtc *crtc) > struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > struct drm_device *dev = crtc->dev; > struct amdgpu_device *adev = dev->dev_private; > + u16 *r, *g, *b; > int i; > > DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_id); > @@ -2153,11 +2154,14 @@ static void dce_v8_0_crtc_load_lut(struct drm_crtc *crtc) > WREG32(mmDC_LUT_WRITE_EN_MASK + amdgpu_crtc->crtc_offset, 0x00000007); > > WREG32(mmDC_LUT_RW_INDEX + amdgpu_crtc->crtc_offset, 0); > + r = crtc->gamma_store; > + g = r + crtc->gamma_size; > + b = g + crtc->gamma_size; > for (i = 0; i < 256; i++) { > WREG32(mmDC_LUT_30_COLOR + amdgpu_crtc->crtc_offset, > - (amdgpu_crtc->lut_r[i] << 20) | > - (amdgpu_crtc->lut_g[i] << 10) | > - (amdgpu_crtc->lut_b[i] << 0)); > + ((*r++ & 0xffc0) << 14) | > + ((*g++ & 0xffc0) << 4) | > + (*b++ >> 6)); > } > > WREG32(mmDEGAMMA_CONTROL + amdgpu_crtc->crtc_offset, > @@ -2475,15 +2479,6 @@ static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, > u16 *blue, uint32_t size, > struct drm_modeset_acquire_ctx *ctx) > { > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - int i; > - > - /* userspace palettes are always correct as is */ > - for (i = 0; i < size; i++) { > - amdgpu_crtc->lut_r[i] = red[i] >> 6; > - amdgpu_crtc->lut_g[i] = green[i] >> 6; > - amdgpu_crtc->lut_b[i] = blue[i] >> 6; > - } > dce_v8_0_crtc_load_lut(crtc); > > return 0; > @@ -2702,14 +2697,12 @@ static const struct drm_crtc_helper_funcs dce_v8_0_crtc_helper_funcs = { > .mode_set_base_atomic = dce_v8_0_crtc_set_base_atomic, > .prepare = dce_v8_0_crtc_prepare, > .commit = dce_v8_0_crtc_commit, > - .load_lut = dce_v8_0_crtc_load_lut, > .disable = dce_v8_0_crtc_disable, > }; > > static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index) > { > struct amdgpu_crtc *amdgpu_crtc; > - int i; > > amdgpu_crtc = kzalloc(sizeof(struct amdgpu_crtc) + > (AMDGPUFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL); > @@ -2727,12 +2720,6 @@ static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index) > adev->ddev->mode_config.cursor_width = amdgpu_crtc->max_cursor_width; > adev->ddev->mode_config.cursor_height = amdgpu_crtc->max_cursor_height; > > - for (i = 0; i < 256; i++) { > - amdgpu_crtc->lut_r[i] = i << 2; > - amdgpu_crtc->lut_g[i] = i << 2; > - amdgpu_crtc->lut_b[i] = i << 2; > - } > - > amdgpu_crtc->crtc_offset = crtc_offsets[amdgpu_crtc->crtc_id]; > > amdgpu_crtc->pll_id = ATOM_PPLL_INVALID; > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c > index 90bb08309a53..ecf34bc77a63 100644 > --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c > +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c > @@ -168,16 +168,6 @@ static int dce_virtual_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, > u16 *green, u16 *blue, uint32_t size, > struct drm_modeset_acquire_ctx *ctx) > { > - struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); > - int i; > - > - /* userspace palettes are always correct as is */ > - for (i = 0; i < size; i++) { > - amdgpu_crtc->lut_r[i] = red[i] >> 6; > - amdgpu_crtc->lut_g[i] = green[i] >> 6; > - amdgpu_crtc->lut_b[i] = blue[i] >> 6; > - } > - > return 0; > } > > @@ -289,11 +279,6 @@ static int dce_virtual_crtc_set_base(struct drm_crtc *crtc, int x, int y, > return 0; > } > > -static void dce_virtual_crtc_load_lut(struct drm_crtc *crtc) > -{ > - return; > -} > - > static int dce_virtual_crtc_set_base_atomic(struct drm_crtc *crtc, > struct drm_framebuffer *fb, > int x, int y, enum mode_set_atomic state) > @@ -309,14 +294,12 @@ static const struct drm_crtc_helper_funcs dce_virtual_crtc_helper_funcs = { > .mode_set_base_atomic = dce_virtual_crtc_set_base_atomic, > .prepare = dce_virtual_crtc_prepare, > .commit = dce_virtual_crtc_commit, > - .load_lut = dce_virtual_crtc_load_lut, > .disable = dce_virtual_crtc_disable, > }; > > static int dce_virtual_crtc_init(struct amdgpu_device *adev, int index) > { > struct amdgpu_crtc *amdgpu_crtc; > - int i; > > amdgpu_crtc = kzalloc(sizeof(struct amdgpu_crtc) + > (AMDGPUFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL); > @@ -329,12 +312,6 @@ static int dce_virtual_crtc_init(struct amdgpu_device *adev, int index) > amdgpu_crtc->crtc_id = index; > adev->mode_info.crtcs[index] = amdgpu_crtc; > > - for (i = 0; i < 256; i++) { > - amdgpu_crtc->lut_r[i] = i << 2; > - amdgpu_crtc->lut_g[i] = i << 2; > - amdgpu_crtc->lut_b[i] = i << 2; > - } > - > amdgpu_crtc->pll_id = ATOM_PPLL_INVALID; > amdgpu_crtc->encoder = NULL; > amdgpu_crtc->connector = NULL; > -- > 2.11.0 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: Re: [PATCH v5 04/14] drm: amd: remove dead code and pointless local lut storage Date: Fri, 14 Jul 2017 10:06:05 -0400 Message-ID: References: <20170713162538.22788-1-peda@axentia.se> <20170713162538.22788-5-peda@axentia.se> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170713162538.22788-5-peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Peter Rosin Cc: Boris Brezillon , amd-gfx list , David Airlie , Daniel Vetter , Maling list - DRI developers , LKML , Lionel Landwerlin , Sean Paul , Jani Nikula , Alex Deucher , Daniel Vetter , =?UTF-8?Q?Christian_K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdWwgMTMsIDIwMTcgYXQgMTI6MjUgUE0sIFBldGVyIFJvc2luIDxwZWRhQGF4ZW50 aWEuc2U+IHdyb3RlOgo+IFRoZSByZWR1bmRhbnQgZmIgaGVscGVycyAubG9hZF9sdXQsIC5nYW1t YV9zZXQgYW5kIC5nYW1tYV9nZXQgYXJlCj4gbm8gbG9uZ2VyIHVzZWQuIFJlbW92ZSB0aGUgZGVh ZCBjb2RlIGFuZCBob29rIHVwIHRoZSBjcnRjIC5nYW1tYV9zZXQKPiB0byB1c2UgdGhlIGNydGMg Z2FtbWFfc3RvcmUgZGlyZWN0bHkgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGF0Cj4gaW5mbyBs b2NhbGx5Lgo+Cj4gQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwu Y2g+Cj4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgUm9zaW4gPHBlZGFAYXhlbnRpYS5zZT4KCkFja2Vk LWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Cgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZmIuYyAgIHwgMjQgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tb2RlLmgg fCAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTBfMC5jICAgfCAyNyAr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv ZGNlX3YxMV8wLmMgICB8IDI3ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jICAgIHwgMjcgKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92OF8wLmMgICAgfCAy NyArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZGNlX3ZpcnR1YWwuYyB8IDIzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMTI4IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZiLmMKPiBpbmRleCBjMGQ4YzZmZjYzODAuLjdkYzM3ODAx M2E0MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZmIu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jCj4gQEAgLTMx MiwzMSArMzEyLDcgQEAgc3RhdGljIGludCBhbWRncHVfZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1kZ3B1X2ZiZGV2ICpyZmIKPiAgICAgICAgIHJldHVybiAw Owo+ICB9Cj4KPiAtLyoqIFNldHMgdGhlIGNvbG9yIHJhbXBzIG9uIGJlaGFsZiBvZiBmYmNvbiAq Lwo+IC1zdGF0aWMgdm9pZCBhbWRncHVfY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRj ICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgYW1k Z3B1X2NydGMgKmFtZGdwdV9jcnRjID0gdG9fYW1kZ3B1X2NydGMoY3J0Yyk7Cj4gLQo+IC0gICAg ICAgYW1kZ3B1X2NydGMtPmx1dF9yW3JlZ25vXSA9IHJlZCA+PiA2Owo+IC0gICAgICAgYW1kZ3B1 X2NydGMtPmx1dF9nW3JlZ25vXSA9IGdyZWVuID4+IDY7Cj4gLSAgICAgICBhbWRncHVfY3J0Yy0+ bHV0X2JbcmVnbm9dID0gYmx1ZSA+PiA2Owo+IC19Cj4gLQo+IC0vKiogR2V0cyB0aGUgY29sb3Ig cmFtcHMgb24gYmVoYWxmIG9mIGZiY29uICovCj4gLXN0YXRpYyB2b2lkIGFtZGdwdV9jcnRjX2Zi X2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpibHVlLCBpbnQgcmVn bm8pCj4gLXsKPiAtICAgICAgIHN0cnVjdCBhbWRncHVfY3J0YyAqYW1kZ3B1X2NydGMgPSB0b19h bWRncHVfY3J0YyhjcnRjKTsKPiAtCj4gLSAgICAgICAqcmVkID0gYW1kZ3B1X2NydGMtPmx1dF9y W3JlZ25vXSA8PCA2Owo+IC0gICAgICAgKmdyZWVuID0gYW1kZ3B1X2NydGMtPmx1dF9nW3JlZ25v XSA8PCA2Owo+IC0gICAgICAgKmJsdWUgPSBhbWRncHVfY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDY7 Cj4gLX0KPiAtCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBhbWRn cHVfZmJfaGVscGVyX2Z1bmNzID0gewo+IC0gICAgICAgLmdhbW1hX3NldCA9IGFtZGdwdV9jcnRj X2ZiX2dhbW1hX3NldCwKPiAtICAgICAgIC5nYW1tYV9nZXQgPSBhbWRncHVfY3J0Y19mYl9nYW1t YV9nZXQsCj4gICAgICAgICAuZmJfcHJvYmUgPSBhbWRncHVmYl9jcmVhdGUsCj4gIH07Cj4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21vZGUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tb2RlLmgKPiBpbmRleCA0M2E5ZDNhZWM2 YzQuLjM5ZjdlZGE2MDkxZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfbW9kZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X21vZGUuaAo+IEBAIC0zNjksNyArMzY5LDYgQEAgc3RydWN0IGFtZGdwdV9hdG9tX3NzIHsKPiAg c3RydWN0IGFtZGdwdV9jcnRjIHsKPiAgICAgICAgIHN0cnVjdCBkcm1fY3J0YyBiYXNlOwo+ICAg ICAgICAgaW50IGNydGNfaWQ7Cj4gLSAgICAgICB1MTYgbHV0X3JbMjU2XSwgbHV0X2dbMjU2XSwg bHV0X2JbMjU2XTsKPiAgICAgICAgIGJvb2wgZW5hYmxlZDsKPiAgICAgICAgIGJvb2wgY2FuX3Rp bGU7Cj4gICAgICAgICB1aW50MzJfdCBjcnRjX29mZnNldDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMF8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9kY2VfdjEwXzAuYwo+IGluZGV4IDlmNzhjMDNhMmUzMS4uYzk1ODAyMzVlMzViIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTBfMC5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMF8wLmMKPiBAQCAtMjI2Nyw2ICsyMjY3 LDcgQEAgc3RhdGljIHZvaWQgZGNlX3YxMF8wX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ICAgICAgICAgc3RydWN0IGFtZGdwdV9jcnRjICphbWRncHVfY3J0YyA9IHRvX2Ft ZGdwdV9jcnRjKGNydGMpOwo+ICAgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKPiAgICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiArICAgICAgIHUxNiAqciwgKmcsICpiOwo+ICAgICAgICAgaW50IGk7Cj4gICAgICAg ICB1MzIgdG1wOwo+Cj4gQEAgLTIzMDQsMTEgKzIzMDUsMTQgQEAgc3RhdGljIHZvaWQgZGNlX3Yx MF8wX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgICAgICAgV1JFRzMy KG1tRENfTFVUX1dSSVRFX0VOX01BU0sgKyBhbWRncHVfY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MDAw MDAwMDcpOwo+Cj4gICAgICAgICBXUkVHMzIobW1EQ19MVVRfUldfSU5ERVggKyBhbWRncHVfY3J0 Yy0+Y3J0Y19vZmZzZXQsIDApOwo+ICsgICAgICAgciA9IGNydGMtPmdhbW1hX3N0b3JlOwo+ICsg ICAgICAgZyA9IHIgKyBjcnRjLT5nYW1tYV9zaXplOwo+ICsgICAgICAgYiA9IGcgKyBjcnRjLT5n YW1tYV9zaXplOwo+ICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cj4gICAgICAg ICAgICAgICAgIFdSRUczMihtbURDX0xVVF8zMF9DT0xPUiArIGFtZGdwdV9jcnRjLT5jcnRjX29m ZnNldCwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0X3JbaV0gPDwg MjApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0X2dbaV0gPDwg MTApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0X2JbaV0gPDwg MCkpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgKCgqcisrICYgMHhmZmMwKSA8PCAxNCkgfAo+ ICsgICAgICAgICAgICAgICAgICAgICAgKCgqZysrICYgMHhmZmMwKSA8PCA0KSB8Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAoKmIrKyA+PiA2KSk7Cj4gICAgICAgICB9Cj4KPiAgICAgICAgIHRt cCA9IFJSRUczMihtbURFR0FNTUFfQ09OVFJPTCArIGFtZGdwdV9jcnRjLT5jcnRjX29mZnNldCk7 Cj4gQEAgLTI2MjQsMTUgKzI2MjgsNiBAQCBzdGF0aWMgaW50IGRjZV92MTBfMF9jcnRjX2dhbW1h X3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSwK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21vZGVzZXRf YWNxdWlyZV9jdHggKmN0eCkKPiAgewo+IC0gICAgICAgc3RydWN0IGFtZGdwdV9jcnRjICphbWRn cHVfY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGNydGMpOwo+IC0gICAgICAgaW50IGk7Cj4gLQo+IC0g ICAgICAgLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMgY29ycmVjdCBhcyBpcyAqLwo+ IC0gICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+IC0gICAgICAgICAgICAgICBh bWRncHVfY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKPiAtICAgICAgICAgICAgICAgYW1k Z3B1X2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKPiAtICAgICAgICAgICAgICAgYW1k Z3B1X2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2Owo+IC0gICAgICAgfQo+ICAgICAgICAg ZGNlX3YxMF8wX2NydGNfbG9hZF9sdXQoY3J0Yyk7Cj4KPiAgICAgICAgIHJldHVybiAwOwo+IEBA IC0yODQ0LDE0ICsyODM5LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVy X2Z1bmNzIGRjZV92MTBfMF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiAgICAgICAgIC5tb2RlX3Nl dF9iYXNlX2F0b21pYyA9IGRjZV92MTBfMF9jcnRjX3NldF9iYXNlX2F0b21pYywKPiAgICAgICAg IC5wcmVwYXJlID0gZGNlX3YxMF8wX2NydGNfcHJlcGFyZSwKPiAgICAgICAgIC5jb21taXQgPSBk Y2VfdjEwXzBfY3J0Y19jb21taXQsCj4gLSAgICAgICAubG9hZF9sdXQgPSBkY2VfdjEwXzBfY3J0 Y19sb2FkX2x1dCwKPiAgICAgICAgIC5kaXNhYmxlID0gZGNlX3YxMF8wX2NydGNfZGlzYWJsZSwK PiAgfTsKPgo+ICBzdGF0aWMgaW50IGRjZV92MTBfMF9jcnRjX2luaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIGludCBpbmRleCkKPiAgewo+ICAgICAgICAgc3RydWN0IGFtZGdwdV9jcnRj ICphbWRncHVfY3J0YzsKPiAtICAgICAgIGludCBpOwo+Cj4gICAgICAgICBhbWRncHVfY3J0YyA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRncHVfY3J0YykgKwo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChBTURHUFVGQl9DT05OX0xJTUlUICogc2l6ZW9mKHN0cnVjdCBkcm1fY29u bmVjdG9yICopKSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTI4NjksMTIgKzI4NjIsNiBAQCBzdGF0aWMg aW50IGRjZV92MTBfMF9jcnRjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCBp bmRleCkKPiAgICAgICAgIGFkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmN1cnNvcl93aWR0aCA9IGFt ZGdwdV9jcnRjLT5tYXhfY3Vyc29yX3dpZHRoOwo+ICAgICAgICAgYWRldi0+ZGRldi0+bW9kZV9j b25maWcuY3Vyc29yX2hlaWdodCA9IGFtZGdwdV9jcnRjLT5tYXhfY3Vyc29yX2hlaWdodDsKPgo+ IC0gICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cj4gLSAgICAgICAgICAgICAgIGFt ZGdwdV9jcnRjLT5sdXRfcltpXSA9IGkgPDwgMjsKPiAtICAgICAgICAgICAgICAgYW1kZ3B1X2Ny dGMtPmx1dF9nW2ldID0gaSA8PCAyOwo+IC0gICAgICAgICAgICAgICBhbWRncHVfY3J0Yy0+bHV0 X2JbaV0gPSBpIDw8IDI7Cj4gLSAgICAgICB9Cj4gLQo+ICAgICAgICAgc3dpdGNoIChhbWRncHVf Y3J0Yy0+Y3J0Y19pZCkgewo+ICAgICAgICAgY2FzZSAwOgo+ICAgICAgICAgZGVmYXVsdDoKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMV8wLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjExXzAuYwo+IGluZGV4IDRiY2YwMWRjNTY3YS4u N2UxNGY1MzJkZjU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Rj ZV92MTFfMC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMV8wLmMK PiBAQCAtMjI1MSw2ICsyMjUxLDcgQEAgc3RhdGljIHZvaWQgZGNlX3YxMV8wX2NydGNfbG9hZF9s dXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgICAgICAgc3RydWN0IGFtZGdwdV9jcnRjICph bWRncHVfY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGNydGMpOwo+ICAgICAgICAgc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiAgICAgICAgIHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArICAgICAgIHUxNiAqciwgKmcsICpiOwo+ICAgICAg ICAgaW50IGk7Cj4gICAgICAgICB1MzIgdG1wOwo+Cj4gQEAgLTIyODIsMTEgKzIyODMsMTQgQEAg c3RhdGljIHZvaWQgZGNlX3YxMV8wX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICAgICAgICAgV1JFRzMyKG1tRENfTFVUX1dSSVRFX0VOX01BU0sgKyBhbWRncHVfY3J0Yy0+ Y3J0Y19vZmZzZXQsIDB4MDAwMDAwMDcpOwo+Cj4gICAgICAgICBXUkVHMzIobW1EQ19MVVRfUldf SU5ERVggKyBhbWRncHVfY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwo+ICsgICAgICAgciA9IGNydGMt PmdhbW1hX3N0b3JlOwo+ICsgICAgICAgZyA9IHIgKyBjcnRjLT5nYW1tYV9zaXplOwo+ICsgICAg ICAgYiA9IGcgKyBjcnRjLT5nYW1tYV9zaXplOwo+ICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1 NjsgaSsrKSB7Cj4gICAgICAgICAgICAgICAgIFdSRUczMihtbURDX0xVVF8zMF9DT0xPUiArIGFt ZGdwdV9jcnRjLT5jcnRjX29mZnNldCwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVf Y3J0Yy0+bHV0X3JbaV0gPDwgMjApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVf Y3J0Yy0+bHV0X2dbaV0gPDwgMTApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVf Y3J0Yy0+bHV0X2JbaV0gPDwgMCkpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgKCgqcisrICYg MHhmZmMwKSA8PCAxNCkgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgKCgqZysrICYgMHhmZmMw KSA8PCA0KSB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAoKmIrKyA+PiA2KSk7Cj4gICAgICAg ICB9Cj4KPiAgICAgICAgIHRtcCA9IFJSRUczMihtbURFR0FNTUFfQ09OVFJPTCArIGFtZGdwdV9j cnRjLT5jcnRjX29mZnNldCk7Cj4gQEAgLTI2NDQsMTUgKzI2NDgsNiBAQCBzdGF0aWMgaW50IGRj ZV92MTFfMF9jcnRjX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1 MTYgKmdyZWVuLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqYmx1 ZSwgdWludDMyX3Qgc2l6ZSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiAgewo+IC0gICAgICAgc3RydWN0 IGFtZGdwdV9jcnRjICphbWRncHVfY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGNydGMpOwo+IC0gICAg ICAgaW50IGk7Cj4gLQo+IC0gICAgICAgLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMg Y29ycmVjdCBhcyBpcyAqLwo+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+ IC0gICAgICAgICAgICAgICBhbWRncHVfY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKPiAt ICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKPiAt ICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2Owo+IC0g ICAgICAgfQo+ICAgICAgICAgZGNlX3YxMV8wX2NydGNfbG9hZF9sdXQoY3J0Yyk7Cj4KPiAgICAg ICAgIHJldHVybiAwOwo+IEBAIC0yODkyLDE0ICsyODg3LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGRjZV92MTFfMF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsK PiAgICAgICAgIC5tb2RlX3NldF9iYXNlX2F0b21pYyA9IGRjZV92MTFfMF9jcnRjX3NldF9iYXNl X2F0b21pYywKPiAgICAgICAgIC5wcmVwYXJlID0gZGNlX3YxMV8wX2NydGNfcHJlcGFyZSwKPiAg ICAgICAgIC5jb21taXQgPSBkY2VfdjExXzBfY3J0Y19jb21taXQsCj4gLSAgICAgICAubG9hZF9s dXQgPSBkY2VfdjExXzBfY3J0Y19sb2FkX2x1dCwKPiAgICAgICAgIC5kaXNhYmxlID0gZGNlX3Yx MV8wX2NydGNfZGlzYWJsZSwKPiAgfTsKPgo+ICBzdGF0aWMgaW50IGRjZV92MTFfMF9jcnRjX2lu aXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCBpbmRleCkKPiAgewo+ICAgICAgICAg c3RydWN0IGFtZGdwdV9jcnRjICphbWRncHVfY3J0YzsKPiAtICAgICAgIGludCBpOwo+Cj4gICAg ICAgICBhbWRncHVfY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRncHVfY3J0YykgKwo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBTURHUFVGQl9DT05OX0xJTUlUICogc2l6 ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICopKSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTI5MTcsMTIg KzI5MTAsNiBAQCBzdGF0aWMgaW50IGRjZV92MTFfMF9jcnRjX2luaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIGludCBpbmRleCkKPiAgICAgICAgIGFkZXYtPmRkZXYtPm1vZGVfY29uZmln LmN1cnNvcl93aWR0aCA9IGFtZGdwdV9jcnRjLT5tYXhfY3Vyc29yX3dpZHRoOwo+ICAgICAgICAg YWRldi0+ZGRldi0+bW9kZV9jb25maWcuY3Vyc29yX2hlaWdodCA9IGFtZGdwdV9jcnRjLT5tYXhf Y3Vyc29yX2hlaWdodDsKPgo+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cj4g LSAgICAgICAgICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfcltpXSA9IGkgPDwgMjsKPiAtICAgICAg ICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9nW2ldID0gaSA8PCAyOwo+IC0gICAgICAgICAgICAg ICBhbWRncHVfY3J0Yy0+bHV0X2JbaV0gPSBpIDw8IDI7Cj4gLSAgICAgICB9Cj4gLQo+ICAgICAg ICAgc3dpdGNoIChhbWRncHVfY3J0Yy0+Y3J0Y19pZCkgewo+ICAgICAgICAgY2FzZSAwOgo+ICAg ICAgICAgZGVmYXVsdDoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv ZGNlX3Y2XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92Nl8wLmMKPiBpbmRl eCBmZDEzNGE0NjI5ZDcuLmQ3NzNiNTBhZmE2MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZGNlX3Y2XzAuYwo+IEBAIC0yMTgyLDYgKzIxODIsNyBAQCBzdGF0aWMgdm9pZCBkY2VfdjZf MF9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgICAgICAgIHN0cnVjdCBh bWRncHVfY3J0YyAqYW1kZ3B1X2NydGMgPSB0b19hbWRncHVfY3J0YyhjcnRjKTsKPiAgICAgICAg IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gICAgICAgICBzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKyAgICAgICB1MTYgKnIsICpn LCAqYjsKPiAgICAgICAgIGludCBpOwo+Cj4gICAgICAgICBEUk1fREVCVUdfS01TKCIlZFxuIiwg YW1kZ3B1X2NydGMtPmNydGNfaWQpOwo+IEBAIC0yMjExLDExICsyMjEyLDE0IEBAIHN0YXRpYyB2 b2lkIGRjZV92Nl8wX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgICAg ICAgV1JFRzMyKG1tRENfTFVUX1dSSVRFX0VOX01BU0sgKyBhbWRncHVfY3J0Yy0+Y3J0Y19vZmZz ZXQsIDB4MDAwMDAwMDcpOwo+Cj4gICAgICAgICBXUkVHMzIobW1EQ19MVVRfUldfSU5ERVggKyBh bWRncHVfY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwo+ICsgICAgICAgciA9IGNydGMtPmdhbW1hX3N0 b3JlOwo+ICsgICAgICAgZyA9IHIgKyBjcnRjLT5nYW1tYV9zaXplOwo+ICsgICAgICAgYiA9IGcg KyBjcnRjLT5nYW1tYV9zaXplOwo+ICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7 Cj4gICAgICAgICAgICAgICAgIFdSRUczMihtbURDX0xVVF8zMF9DT0xPUiArIGFtZGdwdV9jcnRj LT5jcnRjX29mZnNldCwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0 X3JbaV0gPDwgMjApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0 X2dbaV0gPDwgMTApIHwKPiAtICAgICAgICAgICAgICAgICAgICAgIChhbWRncHVfY3J0Yy0+bHV0 X2JbaV0gPDwgMCkpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgKCgqcisrICYgMHhmZmMwKSA8 PCAxNCkgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgKCgqZysrICYgMHhmZmMwKSA8PCA0KSB8 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAoKmIrKyA+PiA2KSk7Cj4gICAgICAgICB9Cj4KPiAg ICAgICAgIFdSRUczMihtbURFR0FNTUFfQ09OVFJPTCArIGFtZGdwdV9jcnRjLT5jcnRjX29mZnNl dCwKPiBAQCAtMjQ5NiwxNSArMjUwMCw2IEBAIHN0YXRpYyBpbnQgZGNlX3Y2XzBfY3J0Y19nYW1t YV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSwK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9h Y3F1aXJlX2N0eCAqY3R4KQo+ICB7Cj4gLSAgICAgICBzdHJ1Y3QgYW1kZ3B1X2NydGMgKmFtZGdw dV9jcnRjID0gdG9fYW1kZ3B1X2NydGMoY3J0Yyk7Cj4gLSAgICAgICBpbnQgaTsKPiAtCj4gLSAg ICAgICAvKiB1c2Vyc3BhY2UgcGFsZXR0ZXMgYXJlIGFsd2F5cyBjb3JyZWN0IGFzIGlzICovCj4g LSAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4gLSAgICAgICAgICAgICAgIGFt ZGdwdV9jcnRjLT5sdXRfcltpXSA9IHJlZFtpXSA+PiA2Owo+IC0gICAgICAgICAgICAgICBhbWRn cHVfY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2Owo+IC0gICAgICAgICAgICAgICBhbWRn cHVfY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7Cj4gLSAgICAgICB9Cj4gICAgICAgICBk Y2VfdjZfMF9jcnRjX2xvYWRfbHV0KGNydGMpOwo+Cj4gICAgICAgICByZXR1cm4gMDsKPiBAQCAt MjcxMiwxNCArMjcwNywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9m dW5jcyBkY2VfdjZfMF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiAgICAgICAgIC5tb2RlX3NldF9i YXNlX2F0b21pYyA9IGRjZV92Nl8wX2NydGNfc2V0X2Jhc2VfYXRvbWljLAo+ICAgICAgICAgLnBy ZXBhcmUgPSBkY2VfdjZfMF9jcnRjX3ByZXBhcmUsCj4gICAgICAgICAuY29tbWl0ID0gZGNlX3Y2 XzBfY3J0Y19jb21taXQsCj4gLSAgICAgICAubG9hZF9sdXQgPSBkY2VfdjZfMF9jcnRjX2xvYWRf bHV0LAo+ICAgICAgICAgLmRpc2FibGUgPSBkY2VfdjZfMF9jcnRjX2Rpc2FibGUsCj4gIH07Cj4K PiAgc3RhdGljIGludCBkY2VfdjZfMF9jcnRjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIGludCBpbmRleCkKPiAgewo+ICAgICAgICAgc3RydWN0IGFtZGdwdV9jcnRjICphbWRncHVf Y3J0YzsKPiAtICAgICAgIGludCBpOwo+Cj4gICAgICAgICBhbWRncHVfY3J0YyA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBhbWRncHVfY3J0YykgKwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChBTURHUFVGQl9DT05OX0xJTUlUICogc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICop KSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTI3MzcsMTIgKzI3MzAsNiBAQCBzdGF0aWMgaW50IGRjZV92 Nl8wX2NydGNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IGluZGV4KQo+ICAg ICAgICAgYWRldi0+ZGRldi0+bW9kZV9jb25maWcuY3Vyc29yX3dpZHRoID0gYW1kZ3B1X2NydGMt Pm1heF9jdXJzb3Jfd2lkdGg7Cj4gICAgICAgICBhZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5jdXJz b3JfaGVpZ2h0ID0gYW1kZ3B1X2NydGMtPm1heF9jdXJzb3JfaGVpZ2h0Owo+Cj4gLSAgICAgICBm b3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKPiAtICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMt Pmx1dF9yW2ldID0gaSA8PCAyOwo+IC0gICAgICAgICAgICAgICBhbWRncHVfY3J0Yy0+bHV0X2db aV0gPSBpIDw8IDI7Cj4gLSAgICAgICAgICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfYltpXSA9IGkg PDwgMjsKPiAtICAgICAgIH0KPiAtCj4gICAgICAgICBhbWRncHVfY3J0Yy0+Y3J0Y19vZmZzZXQg PSBjcnRjX29mZnNldHNbYW1kZ3B1X2NydGMtPmNydGNfaWRdOwo+Cj4gICAgICAgICBhbWRncHVf Y3J0Yy0+cGxsX2lkID0gQVRPTV9QUExMX0lOVkFMSUQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92OF8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9kY2VfdjhfMC5jCj4gaW5kZXggYTllODY5NTU0NjI3Li40ZWI2M2Y2YTQxYWIgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3Y4XzAuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92OF8wLmMKPiBAQCAtMjEyNCw2ICsyMTI0LDcgQEAg c3RhdGljIHZvaWQgZGNlX3Y4XzBfY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2NydGMgKmFtZGdwdV9jcnRjID0gdG9fYW1kZ3B1X2Ny dGMoY3J0Yyk7Cj4gICAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ ICAgICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICsgICAgICAgdTE2ICpyLCAqZywgKmI7Cj4gICAgICAgICBpbnQgaTsKPgo+ICAgICAgICAgRFJN X0RFQlVHX0tNUygiJWRcbiIsIGFtZGdwdV9jcnRjLT5jcnRjX2lkKTsKPiBAQCAtMjE1MywxMSAr MjE1NCwxNCBAQCBzdGF0aWMgdm9pZCBkY2VfdjhfMF9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiAgICAgICAgIFdSRUczMihtbURDX0xVVF9XUklURV9FTl9NQVNLICsgYW1k Z3B1X2NydGMtPmNydGNfb2Zmc2V0LCAweDAwMDAwMDA3KTsKPgo+ICAgICAgICAgV1JFRzMyKG1t RENfTFVUX1JXX0lOREVYICsgYW1kZ3B1X2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKPiArICAgICAg IHIgPSBjcnRjLT5nYW1tYV9zdG9yZTsKPiArICAgICAgIGcgPSByICsgY3J0Yy0+Z2FtbWFfc2l6 ZTsKPiArICAgICAgIGIgPSBnICsgY3J0Yy0+Z2FtbWFfc2l6ZTsKPiAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCAyNTY7IGkrKykgewo+ICAgICAgICAgICAgICAgICBXUkVHMzIobW1EQ19MVVRfMzBf Q09MT1IgKyBhbWRncHVfY3J0Yy0+Y3J0Y19vZmZzZXQsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAoYW1kZ3B1X2NydGMtPmx1dF9yW2ldIDw8IDIwKSB8Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAoYW1kZ3B1X2NydGMtPmx1dF9nW2ldIDw8IDEwKSB8Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAoYW1kZ3B1X2NydGMtPmx1dF9iW2ldIDw8IDApKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICgoKnIrKyAmIDB4ZmZjMCkgPDwgMTQpIHwKPiArICAgICAgICAgICAgICAgICAgICAgICgoKmcr KyAmIDB4ZmZjMCkgPDwgNCkgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgKCpiKysgPj4gNikp Owo+ICAgICAgICAgfQo+Cj4gICAgICAgICBXUkVHMzIobW1ERUdBTU1BX0NPTlRST0wgKyBhbWRn cHVfY3J0Yy0+Y3J0Y19vZmZzZXQsCj4gQEAgLTI0NzUsMTUgKzI0NzksNiBAQCBzdGF0aWMgaW50 IGRjZV92OF8wX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQs IHUxNiAqZ3JlZW4sCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmJs dWUsIHVpbnQzMl90IHNpemUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiAgewo+IC0gICAgICAgc3RydWN0 IGFtZGdwdV9jcnRjICphbWRncHVfY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGNydGMpOwo+IC0gICAg ICAgaW50IGk7Cj4gLQo+IC0gICAgICAgLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMg Y29ycmVjdCBhcyBpcyAqLwo+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+ IC0gICAgICAgICAgICAgICBhbWRncHVfY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKPiAt ICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKPiAt ICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2Owo+IC0g ICAgICAgfQo+ICAgICAgICAgZGNlX3Y4XzBfY3J0Y19sb2FkX2x1dChjcnRjKTsKPgo+ICAgICAg ICAgcmV0dXJuIDA7Cj4gQEAgLTI3MDIsMTQgKzI2OTcsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgZGNlX3Y4XzBfY3J0Y19oZWxwZXJfZnVuY3MgPSB7Cj4g ICAgICAgICAubW9kZV9zZXRfYmFzZV9hdG9taWMgPSBkY2VfdjhfMF9jcnRjX3NldF9iYXNlX2F0 b21pYywKPiAgICAgICAgIC5wcmVwYXJlID0gZGNlX3Y4XzBfY3J0Y19wcmVwYXJlLAo+ICAgICAg ICAgLmNvbW1pdCA9IGRjZV92OF8wX2NydGNfY29tbWl0LAo+IC0gICAgICAgLmxvYWRfbHV0ID0g ZGNlX3Y4XzBfY3J0Y19sb2FkX2x1dCwKPiAgICAgICAgIC5kaXNhYmxlID0gZGNlX3Y4XzBfY3J0 Y19kaXNhYmxlLAo+ICB9Owo+Cj4gIHN0YXRpYyBpbnQgZGNlX3Y4XzBfY3J0Y19pbml0KHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgaW5kZXgpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBh bWRncHVfY3J0YyAqYW1kZ3B1X2NydGM7Cj4gLSAgICAgICBpbnQgaTsKPgo+ICAgICAgICAgYW1k Z3B1X2NydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2NydGMpICsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoQU1ER1BVRkJfQ09OTl9MSU1JVCAqIHNpemVvZihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqKSksIEdGUF9LRVJORUwpOwo+IEBAIC0yNzI3LDEyICsyNzIwLDYg QEAgc3RhdGljIGludCBkY2VfdjhfMF9jcnRjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIGludCBpbmRleCkKPiAgICAgICAgIGFkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmN1cnNvcl93 aWR0aCA9IGFtZGdwdV9jcnRjLT5tYXhfY3Vyc29yX3dpZHRoOwo+ICAgICAgICAgYWRldi0+ZGRl di0+bW9kZV9jb25maWcuY3Vyc29yX2hlaWdodCA9IGFtZGdwdV9jcnRjLT5tYXhfY3Vyc29yX2hl aWdodDsKPgo+IC0gICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cj4gLSAgICAgICAg ICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfcltpXSA9IGkgPDwgMjsKPiAtICAgICAgICAgICAgICAg YW1kZ3B1X2NydGMtPmx1dF9nW2ldID0gaSA8PCAyOwo+IC0gICAgICAgICAgICAgICBhbWRncHVf Y3J0Yy0+bHV0X2JbaV0gPSBpIDw8IDI7Cj4gLSAgICAgICB9Cj4gLQo+ICAgICAgICAgYW1kZ3B1 X2NydGMtPmNydGNfb2Zmc2V0ID0gY3J0Y19vZmZzZXRzW2FtZGdwdV9jcnRjLT5jcnRjX2lkXTsK Pgo+ICAgICAgICAgYW1kZ3B1X2NydGMtPnBsbF9pZCA9IEFUT01fUFBMTF9JTlZBTElEOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdmlydHVhbC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3ZpcnR1YWwuYwo+IGluZGV4IDkwYmIwODMwOWE1 My4uZWNmMzRiYzc3YTYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2RjZV92aXJ0dWFsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2Vfdmly dHVhbC5jCj4gQEAgLTE2OCwxNiArMTY4LDYgQEAgc3RhdGljIGludCBkY2VfdmlydHVhbF9jcnRj X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpncmVlbiwgdTE2ICpibHVlLCB1aW50MzJf dCBzaXplLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCj4gIHsKPiAtICAgICAgIHN0cnVjdCBhbWRncHVf Y3J0YyAqYW1kZ3B1X2NydGMgPSB0b19hbWRncHVfY3J0YyhjcnRjKTsKPiAtICAgICAgIGludCBp Owo+IC0KPiAtICAgICAgIC8qIHVzZXJzcGFjZSBwYWxldHRlcyBhcmUgYWx3YXlzIGNvcnJlY3Qg YXMgaXMgKi8KPiAtICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPiAtICAgICAg ICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9yW2ldID0gcmVkW2ldID4+IDY7Cj4gLSAgICAgICAg ICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfZ1tpXSA9IGdyZWVuW2ldID4+IDY7Cj4gLSAgICAgICAg ICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfYltpXSA9IGJsdWVbaV0gPj4gNjsKPiAtICAgICAgIH0K PiAtCj4gICAgICAgICByZXR1cm4gMDsKPiAgfQo+Cj4gQEAgLTI4OSwxMSArMjc5LDYgQEAgc3Rh dGljIGludCBkY2VfdmlydHVhbF9jcnRjX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg aW50IHgsIGludCB5LAo+ICAgICAgICAgcmV0dXJuIDA7Cj4gIH0KPgo+IC1zdGF0aWMgdm9pZCBk Y2VfdmlydHVhbF9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAtewo+IC0g ICAgICAgcmV0dXJuOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IGRjZV92aXJ0dWFsX2NydGNfc2V0 X2Jhc2VfYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBlbnVtIG1v ZGVfc2V0X2F0b21pYyBzdGF0ZSkKPiBAQCAtMzA5LDE0ICsyOTQsMTIgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgZGNlX3ZpcnR1YWxfY3J0Y19oZWxwZXJfZnVu Y3MgPSB7Cj4gICAgICAgICAubW9kZV9zZXRfYmFzZV9hdG9taWMgPSBkY2VfdmlydHVhbF9jcnRj X3NldF9iYXNlX2F0b21pYywKPiAgICAgICAgIC5wcmVwYXJlID0gZGNlX3ZpcnR1YWxfY3J0Y19w cmVwYXJlLAo+ICAgICAgICAgLmNvbW1pdCA9IGRjZV92aXJ0dWFsX2NydGNfY29tbWl0LAo+IC0g ICAgICAgLmxvYWRfbHV0ID0gZGNlX3ZpcnR1YWxfY3J0Y19sb2FkX2x1dCwKPiAgICAgICAgIC5k aXNhYmxlID0gZGNlX3ZpcnR1YWxfY3J0Y19kaXNhYmxlLAo+ICB9Owo+Cj4gIHN0YXRpYyBpbnQg ZGNlX3ZpcnR1YWxfY3J0Y19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgaW5k ZXgpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBhbWRncHVfY3J0YyAqYW1kZ3B1X2NydGM7Cj4gLSAg ICAgICBpbnQgaTsKPgo+ICAgICAgICAgYW1kZ3B1X2NydGMgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgYW1kZ3B1X2NydGMpICsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQU1ER1BV RkJfQ09OTl9MSU1JVCAqIHNpemVvZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKSksIEdGUF9LRVJO RUwpOwo+IEBAIC0zMjksMTIgKzMxMiw2IEBAIHN0YXRpYyBpbnQgZGNlX3ZpcnR1YWxfY3J0Y19p bml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgaW5kZXgpCj4gICAgICAgICBhbWRn cHVfY3J0Yy0+Y3J0Y19pZCA9IGluZGV4Owo+ICAgICAgICAgYWRldi0+bW9kZV9pbmZvLmNydGNz W2luZGV4XSA9IGFtZGdwdV9jcnRjOwo+Cj4gLSAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBp KyspIHsKPiAtICAgICAgICAgICAgICAgYW1kZ3B1X2NydGMtPmx1dF9yW2ldID0gaSA8PCAyOwo+ IC0gICAgICAgICAgICAgICBhbWRncHVfY3J0Yy0+bHV0X2dbaV0gPSBpIDw8IDI7Cj4gLSAgICAg ICAgICAgICAgIGFtZGdwdV9jcnRjLT5sdXRfYltpXSA9IGkgPDwgMjsKPiAtICAgICAgIH0KPiAt Cj4gICAgICAgICBhbWRncHVfY3J0Yy0+cGxsX2lkID0gQVRPTV9QUExMX0lOVkFMSUQ7Cj4gICAg ICAgICBhbWRncHVfY3J0Yy0+ZW5jb2RlciA9IE5VTEw7Cj4gICAgICAgICBhbWRncHVfY3J0Yy0+ Y29ubmVjdG9yID0gTlVMTDsKPiAtLQo+IDIuMTEuMAo+Cj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+IGFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v YW1kLWdmeAo=