From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C31B5C04AAC for ; Mon, 20 May 2019 11:20:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8FFF320862 for ; Mon, 20 May 2019 11:20:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732678AbfETLUy convert rfc822-to-8bit (ORCPT ); Mon, 20 May 2019 07:20:54 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:53557 "EHLO relay5-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731487AbfETLUx (ORCPT ); Mon, 20 May 2019 07:20:53 -0400 X-Originating-IP: 90.88.22.185 Received: from aptenodytes (aaubervilliers-681-1-80-185.w90-88.abo.wanadoo.fr [90.88.22.185]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id DC2F41C000D; Mon, 20 May 2019 11:20:45 +0000 (UTC) Date: Mon, 20 May 2019 13:20:45 +0200 From: Paul Kocialkowski To: Maxime Ripard Cc: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH v3 7/7] drm: Remove users of drm_format_num_planes Message-ID: <20190520112045.GB6789@aptenodytes> References: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8BIT In-Reply-To: User-Agent: Mutt/1.11.4 (2019-03-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Thu 16 May 19, 12:31, Maxime Ripard wrote: > drm_format_info_plane_cpp() basically just returns the cpp array content > found in the drm_format_info structure. > > Since it's pretty trivial, let's remove the function and have the users use > the array directly Reviewed-by: Paul Kocialkowski Cheers, Paul > Suggested-by: Ville Syrjälä > Signed-off-by: Maxime Ripard > > --- > > Changes from v2: > - new patch > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 2 +- > drivers/gpu/drm/arm/malidp_hw.c | 2 +- > drivers/gpu/drm/arm/malidp_planes.c | 2 +- > drivers/gpu/drm/drm_client.c | 2 +- > drivers/gpu/drm/drm_fb_helper.c | 2 +- > drivers/gpu/drm/drm_format_helper.c | 4 ++-- > drivers/gpu/drm/i915/intel_sprite.c | 2 +- > drivers/gpu/drm/mediatek/mtk_drm_fb.c | 2 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 2 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 2 +- > drivers/gpu/drm/msm/msm_fb.c | 2 +- > drivers/gpu/drm/radeon/radeon_fb.c | 2 +- > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- > drivers/gpu/drm/stm/ltdc.c | 2 +- > drivers/gpu/drm/tegra/fb.c | 2 +- > drivers/gpu/drm/zte/zx_plane.c | 2 +- > include/drm/drm_fourcc.h | 17 ----------------- > 17 files changed, 17 insertions(+), 34 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > index 6edae6458be8..2e2869299a84 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c > @@ -133,7 +133,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, > u32 cpp; > > info = drm_get_format_info(adev->ddev, mode_cmd); > - cpp = drm_format_info_plane_cpp(info, 0); > + cpp = info->cpp[0]; > > /* need to align pitch with crtc limits */ > mode_cmd->pitches[0] = amdgpu_align_pitch(adev, mode_cmd->width, cpp, > diff --git a/drivers/gpu/drm/arm/malidp_hw.c b/drivers/gpu/drm/arm/malidp_hw.c > index 1c9e869f4c52..53391c0f87eb 100644 > --- a/drivers/gpu/drm/arm/malidp_hw.c > +++ b/drivers/gpu/drm/arm/malidp_hw.c > @@ -383,7 +383,7 @@ static void malidp500_modeset(struct malidp_hw_device *hwdev, struct videomode * > int malidp_format_get_bpp(u32 fmt) > { > const struct drm_format_info *info = drm_format_info(fmt); > - int bpp = drm_format_info_plane_cpp(info, 0) * 8; > + int bpp = info->cpp[0] * 8; > > if (bpp == 0) { > switch (fmt) { > diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c > index 361c02988375..07ceb4ee14e3 100644 > --- a/drivers/gpu/drm/arm/malidp_planes.c > +++ b/drivers/gpu/drm/arm/malidp_planes.c > @@ -227,7 +227,7 @@ bool malidp_format_mod_supported(struct drm_device *drm, > > if (modifier & AFBC_SPLIT) { > if (!info->is_yuv) { > - if (drm_format_info_plane_cpp(info, 0) <= 2) { > + if (info->cpp[0] <= 2) { > DRM_DEBUG_KMS("RGB formats <= 16bpp are not supported with SPLIT\n"); > return false; > } > diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c > index 169d8eeaa662..5abcd83da6a6 100644 > --- a/drivers/gpu/drm/drm_client.c > +++ b/drivers/gpu/drm/drm_client.c > @@ -259,7 +259,7 @@ drm_client_buffer_create(struct drm_client_dev *client, u32 width, u32 height, u > > dumb_args.width = width; > dumb_args.height = height; > - dumb_args.bpp = drm_format_info_plane_cpp(info, 0) * 8; > + dumb_args.bpp = info->cpp[0] * 8; > ret = drm_mode_create_dumb(dev, &dumb_args, client->file); > if (ret) > goto err_delete; > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index 184f455c99ab..09605ed69f06 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -767,7 +767,7 @@ static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper, > struct drm_clip_rect *clip) > { > struct drm_framebuffer *fb = fb_helper->fb; > - unsigned int cpp = drm_format_info_plane_cpp(fb->format, 0); > + unsigned int cpp = fb->format->cpp[0]; > size_t offset = clip->y1 * fb->pitches[0] + clip->x1 * cpp; > void *src = fb_helper->fbdev->screen_buffer + offset; > void *dst = fb_helper->buffer->vaddr + offset; > diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c > index 8ad66aa1362a..0897cb9aeaff 100644 > --- a/drivers/gpu/drm/drm_format_helper.c > +++ b/drivers/gpu/drm/drm_format_helper.c > @@ -36,7 +36,7 @@ static unsigned int clip_offset(struct drm_rect *clip, > void drm_fb_memcpy(void *dst, void *vaddr, struct drm_framebuffer *fb, > struct drm_rect *clip) > { > - unsigned int cpp = drm_format_info_plane_cpp(fb->format, 0); > + unsigned int cpp = fb->format->cpp[0]; > size_t len = (clip->x2 - clip->x1) * cpp; > unsigned int y, lines = clip->y2 - clip->y1; > > @@ -63,7 +63,7 @@ void drm_fb_memcpy_dstclip(void __iomem *dst, void *vaddr, > struct drm_framebuffer *fb, > struct drm_rect *clip) > { > - unsigned int cpp = drm_format_info_plane_cpp(fb->format, 0); > + unsigned int cpp = fb->format->cpp[0]; > unsigned int offset = clip_offset(clip, fb->pitches[0], cpp); > size_t len = (clip->x2 - clip->x1) * cpp; > unsigned int y, lines = clip->y2 - clip->y1; > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c > index e35601b1f878..c1647c0cc217 100644 > --- a/drivers/gpu/drm/i915/intel_sprite.c > +++ b/drivers/gpu/drm/i915/intel_sprite.c > @@ -326,7 +326,7 @@ skl_plane_max_stride(struct intel_plane *plane, > unsigned int rotation) > { > const struct drm_format_info *info = drm_format_info(pixel_format); > - int cpp = drm_format_info_plane_cpp(info, 0); > + int cpp = info->cpp[0]; > > /* > * "The stride in bytes must not exceed the > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c > index 0d5334a5a9a7..b5e2f230da00 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_fb.c > @@ -104,7 +104,7 @@ struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev, > if (!gem) > return ERR_PTR(-ENOENT); > > - bpp = drm_format_info_plane_cpp(info, 0); > + bpp = info->cpp[0]; > size = (height - 1) * cmd->pitches[0] + width * bpp; > size += cmd->offsets[0]; > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > index a565dccaba3a..74dd036a2246 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > @@ -801,7 +801,7 @@ static void mdp5_crtc_restore_cursor(struct drm_crtc *crtc) > width = mdp5_crtc->cursor.width; > height = mdp5_crtc->cursor.height; > > - stride = width * drm_format_info_plane_cpp(info, 0); > + stride = width * info->cpp[0]; > > get_roi(crtc, &roi_w, &roi_h); > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > index 1ca294694597..2834837f4d3e 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > @@ -158,7 +158,7 @@ uint32_t mdp5_smp_calculate(struct mdp5_smp *smp, > for (i = 0; i < nplanes; i++) { > int n, fetch_stride, cpp; > > - cpp = drm_format_info_plane_cpp(info, i); > + cpp = info->cpp[i]; > fetch_stride = width * cpp / (i ? hsub : 1); > > n = DIV_ROUND_UP(fetch_stride * nlines, smp->blk_size); > diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c > index 29e45f2144b5..68fa2c8f61e6 100644 > --- a/drivers/gpu/drm/msm/msm_fb.c > +++ b/drivers/gpu/drm/msm/msm_fb.c > @@ -181,7 +181,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, > unsigned int min_size; > > min_size = (height - 1) * mode_cmd->pitches[i] > - + width * drm_format_info_plane_cpp(info, i) > + + width * info->cpp[i] > + mode_cmd->offsets[i]; > > if (bos[i]->size < min_size) { > diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c > index dbf596fc4339..287e3f92102a 100644 > --- a/drivers/gpu/drm/radeon/radeon_fb.c > +++ b/drivers/gpu/drm/radeon/radeon_fb.c > @@ -137,7 +137,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev, > u32 cpp; > > info = drm_get_format_info(rdev->ddev, mode_cmd); > - cpp = drm_format_info_plane_cpp(info, 0); > + cpp = info->cpp[0]; > > /* need to align pitch with crtc limits */ > mode_cmd->pitches[0] = radeon_align_pitch(rdev, mode_cmd->width, cpp, > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > index 57873c99ae29..31030cf81bc9 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > @@ -98,7 +98,7 @@ rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, > > min_size = (height - 1) * mode_cmd->pitches[i] + > mode_cmd->offsets[i] + > - width * drm_format_info_plane_cpp(info, i); > + width * info->cpp[i]; > > if (obj->size < min_size) { > drm_gem_object_put_unlocked(obj); > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c > index 6bb3cd3a1a01..9ff39789ffb7 100644 > --- a/drivers/gpu/drm/stm/ltdc.c > +++ b/drivers/gpu/drm/stm/ltdc.c > @@ -779,7 +779,7 @@ static void ltdc_plane_atomic_update(struct drm_plane *plane, > > /* Configures the color frame buffer pitch in bytes & line length */ > pitch_in_bytes = fb->pitches[0]; > - line_length = drm_format_info_plane_cpp(fb->format, 0) * > + line_length = fb->format->cpp[0] * > (x1 - x0 + 1) + (ldev->caps.bus_width >> 3) - 1; > val = ((pitch_in_bytes << 16) | line_length); > reg_update_bits(ldev->regs, LTDC_L1CFBLR + lofs, > diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c > index d1042196a30f..57cc26e1da01 100644 > --- a/drivers/gpu/drm/tegra/fb.c > +++ b/drivers/gpu/drm/tegra/fb.c > @@ -149,7 +149,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm, > goto unreference; > } > > - bpp = drm_format_info_plane_cpp(info, i); > + bpp = info->cpp[i]; > > size = (height - 1) * cmd->pitches[i] + > width * bpp + cmd->offsets[i]; > diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c > index d97a4dff515d..706452f9b276 100644 > --- a/drivers/gpu/drm/zte/zx_plane.c > +++ b/drivers/gpu/drm/zte/zx_plane.c > @@ -222,7 +222,7 @@ static void zx_vl_plane_atomic_update(struct drm_plane *plane, > cma_obj = drm_fb_cma_get_gem_obj(fb, i); > paddr = cma_obj->paddr + fb->offsets[i]; > paddr += src_y * fb->pitches[i]; > - paddr += src_x * drm_format_info_plane_cpp(fb->format, i); > + paddr += src_x * fb->format->cpp[i]; > zx_writel(paddr_reg, paddr); > paddr_reg += 4; > } > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h > index 4ef8ccb5d236..405466692bd2 100644 > --- a/include/drm/drm_fourcc.h > +++ b/include/drm/drm_fourcc.h > @@ -261,23 +261,6 @@ drm_format_info_is_yuv_sampling_444(const struct drm_format_info *info) > } > > /** > - * drm_format_info_plane_cpp - determine the bytes per pixel value > - * @format: pixel format info > - * @plane: plane index > - * > - * Returns: > - * The bytes per pixel value for the specified plane. > - */ > -static inline > -int drm_format_info_plane_cpp(const struct drm_format_info *info, int plane) > -{ > - if (!info || plane >= info->num_planes) > - return 0; > - > - return info->cpp[plane]; > -} > - > -/** > * drm_format_info_plane_width - width of the plane given the first plane > * @format: pixel format info > * @width: width of the first plane > -- > git-series 0.9.1 > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: Re: [PATCH v3 7/7] drm: Remove users of drm_format_num_planes Date: Mon, 20 May 2019 13:20:45 +0200 Message-ID: <20190520112045.GB6789@aptenodytes> References: <27b0041c7977402df4a087c78d2849ffe51c9f1c.1558002671.git-series.maxime.ripard@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id 793DD890BE for ; Mon, 20 May 2019 11:20:50 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard Cc: David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Sean Paul , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org SGksCgpPbiBUaHUgMTYgTWF5IDE5LCAxMjozMSwgTWF4aW1lIFJpcGFyZCB3cm90ZToKPiBkcm1f Zm9ybWF0X2luZm9fcGxhbmVfY3BwKCkgYmFzaWNhbGx5IGp1c3QgcmV0dXJucyB0aGUgY3BwIGFy cmF5IGNvbnRlbnQKPiBmb3VuZCBpbiB0aGUgZHJtX2Zvcm1hdF9pbmZvIHN0cnVjdHVyZS4KPiAK PiBTaW5jZSBpdCdzIHByZXR0eSB0cml2aWFsLCBsZXQncyByZW1vdmUgdGhlIGZ1bmN0aW9uIGFu ZCBoYXZlIHRoZSB1c2VycyB1c2UKPiB0aGUgYXJyYXkgZGlyZWN0bHkKClJldmlld2VkLWJ5OiBQ YXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+CgpDaGVlcnMs CgpQYXVsCgo+IFN1Z2dlc3RlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlw YXJkQGJvb3RsaW4uY29tPgo+IAo+IC0tLQo+IAo+IENoYW5nZXMgZnJvbSB2MjoKPiAgIC0gbmV3 IHBhdGNoCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jICAg ICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgICAgICAgICAgICB8 ICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jICAgICAgICB8ICAy ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMgICAgICAgICAgICAgICB8ICAyICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgICAgICAgICAgICB8ICAyICstCj4g IGRyaXZlcnMvZ3B1L2RybS9kcm1fZm9ybWF0X2hlbHBlci5jICAgICAgICB8ICA0ICsrLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgIHwgIDIgKy0KPiAgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYyAgICAgIHwgIDIgKy0KPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMgIHwgIDIgKy0KPiAgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYyAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZmIuYyAgICAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJt L3JhZGVvbi9yYWRlb25fZmIuYyAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3N0bS9s dGRjLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2Zi LmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFu ZS5jICAgICAgICAgICAgIHwgIDIgKy0KPiAgaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oICAgICAg ICAgICAgICAgICAgIHwgMTcgLS0tLS0tLS0tLS0tLS0tLS0KPiAgMTcgZmlsZXMgY2hhbmdlZCwg MTcgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2ZiLmMKPiBpbmRleCA2ZWRhZTY0NThiZTguLjJlMjg2OTI5OWE4NCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZmIuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jCj4gQEAgLTEzMyw3ICsxMzMs NyBAQCBzdGF0aWMgaW50IGFtZGdwdWZiX2NyZWF0ZV9waW5uZWRfb2JqZWN0KHN0cnVjdCBhbWRn cHVfZmJkZXYgKnJmYmRldiwKPiAgCXUzMiBjcHA7Cj4gIAo+ICAJaW5mbyA9IGRybV9nZXRfZm9y bWF0X2luZm8oYWRldi0+ZGRldiwgbW9kZV9jbWQpOwo+IC0JY3BwID0gZHJtX2Zvcm1hdF9pbmZv X3BsYW5lX2NwcChpbmZvLCAwKTsKPiArCWNwcCA9IGluZm8tPmNwcFswXTsKPiAgCj4gIAkvKiBu ZWVkIHRvIGFsaWduIHBpdGNoIHdpdGggY3J0YyBsaW1pdHMgKi8KPiAgCW1vZGVfY21kLT5waXRj aGVzWzBdID0gYW1kZ3B1X2FsaWduX3BpdGNoKGFkZXYsIG1vZGVfY21kLT53aWR0aCwgY3BwLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jIGIvZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfaHcuYwo+IGluZGV4IDFjOWU4NjlmNGM1Mi4uNTMzOTFjMGY4N2Vi IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCj4gQEAgLTM4Myw3ICszODMsNyBAQCBzdGF0 aWMgdm9pZCBtYWxpZHA1MDBfbW9kZXNldChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYs IHN0cnVjdCB2aWRlb21vZGUgKgo+ICBpbnQgbWFsaWRwX2Zvcm1hdF9nZXRfYnBwKHUzMiBmbXQp Cj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0 X2luZm8oZm10KTsKPiAtCWludCBicHAgPSBkcm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGluZm8s IDApICogODsKPiArCWludCBicHAgPSBpbmZvLT5jcHBbMF0gKiA4Owo+ICAKPiAgCWlmIChicHAg PT0gMCkgewo+ICAJCXN3aXRjaCAoZm10KSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hcm0vbWFsaWRwX3BsYW5lcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVz LmMKPiBpbmRleCAzNjFjMDI5ODgzNzUuLjA3Y2ViNGVlMTRlMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX3BsYW5lcy5jCj4gQEAgLTIyNyw3ICsyMjcsNyBAQCBib29sIG1hbGlkcF9mb3Jt YXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAKPiAgCWlmIChtb2Rp ZmllciAmIEFGQkNfU1BMSVQpIHsKPiAgCQlpZiAoIWluZm8tPmlzX3l1dikgewo+IC0JCQlpZiAo ZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2NwcChpbmZvLCAwKSA8PSAyKSB7Cj4gKwkJCWlmIChpbmZv LT5jcHBbMF0gPD0gMikgewo+ICAJCQkJRFJNX0RFQlVHX0tNUygiUkdCIGZvcm1hdHMgPD0gMTZi cHAgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBTUExJVFxuIik7Cj4gIAkJCQlyZXR1cm4gZmFsc2U7 Cj4gIAkJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKPiBpbmRleCAxNjlkOGVlYWE2NjIuLjVhYmNkODNk YTZhNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYwo+IEBAIC0yNTksNyArMjU5LDcgQEAgZHJtX2Ns aWVudF9idWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1MzIgd2lk dGgsIHUzMiBoZWlnaHQsIHUKPiAgCj4gIAlkdW1iX2FyZ3Mud2lkdGggPSB3aWR0aDsKPiAgCWR1 bWJfYXJncy5oZWlnaHQgPSBoZWlnaHQ7Cj4gLQlkdW1iX2FyZ3MuYnBwID0gZHJtX2Zvcm1hdF9p bmZvX3BsYW5lX2NwcChpbmZvLCAwKSAqIDg7Cj4gKwlkdW1iX2FyZ3MuYnBwID0gaW5mby0+Y3Bw WzBdICogODsKPiAgCXJldCA9IGRybV9tb2RlX2NyZWF0ZV9kdW1iKGRldiwgJmR1bWJfYXJncywg Y2xpZW50LT5maWxlKTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBlcnJfZGVsZXRlOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJt L2RybV9mYl9oZWxwZXIuYwo+IGluZGV4IDE4NGY0NTVjOTlhYi4uMDk2MDVlZDY5ZjA2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gQEAgLTc2Nyw3ICs3NjcsNyBAQCBzdGF0aWMgdm9p ZCBkcm1fZmJfaGVscGVyX2RpcnR5X2JsaXRfcmVhbChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyLAo+ICAJCQkJCSAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApCj4gIHsKPiAgCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKPiAtCXVuc2lnbmVkIGlu dCBjcHAgPSBkcm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGZiLT5mb3JtYXQsIDApOwo+ICsJdW5z aWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKPiAgCXNpemVfdCBvZmZzZXQgPSBj bGlwLT55MSAqIGZiLT5waXRjaGVzWzBdICsgY2xpcC0+eDEgKiBjcHA7Cj4gIAl2b2lkICpzcmMg PSBmYl9oZWxwZXItPmZiZGV2LT5zY3JlZW5fYnVmZmVyICsgb2Zmc2V0Owo+ICAJdm9pZCAqZHN0 ID0gZmJfaGVscGVyLT5idWZmZXItPnZhZGRyICsgb2Zmc2V0Owo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2Zvcm1hdF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9y bWF0X2hlbHBlci5jCj4gaW5kZXggOGFkNjZhYTEzNjJhLi4wODk3Y2I5YWVhZmYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3JtYXRfaGVscGVyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2Zvcm1hdF9oZWxwZXIuYwo+IEBAIC0zNiw3ICszNiw3IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgY2xpcF9vZmZzZXQoc3RydWN0IGRybV9yZWN0ICpjbGlwLAo+ICB2b2lkIGRy bV9mYl9tZW1jcHkodm9pZCAqZHN0LCB2b2lkICp2YWRkciwgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCj4gIAkJICAgc3RydWN0IGRybV9yZWN0ICpjbGlwKQo+ICB7Cj4gLQl1bnNpZ25lZCBp bnQgY3BwID0gZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2NwcChmYi0+Zm9ybWF0LCAwKTsKPiArCXVu c2lnbmVkIGludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4gIAlzaXplX3QgbGVuID0gKGNs aXAtPngyIC0gY2xpcC0+eDEpICogY3BwOwo+ICAJdW5zaWduZWQgaW50IHksIGxpbmVzID0gY2xp cC0+eTIgLSBjbGlwLT55MTsKPiAgCj4gQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBkcm1fZmJfbWVt Y3B5X2RzdGNsaXAodm9pZCBfX2lvbWVtICpkc3QsIHZvaWQgKnZhZGRyLAo+ICAJCQkgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgCQkJICAgc3RydWN0IGRybV9yZWN0ICpjbGlwKQo+ ICB7Cj4gLQl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2NwcChmYi0+ Zm9ybWF0LCAwKTsKPiArCXVuc2lnbmVkIGludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4g IAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gY2xpcF9vZmZzZXQoY2xpcCwgZmItPnBpdGNoZXNbMF0s IGNwcCk7Cj4gIAlzaXplX3QgbGVuID0gKGNsaXAtPngyIC0gY2xpcC0+eDEpICogY3BwOwo+ICAJ dW5zaWduZWQgaW50IHksIGxpbmVzID0gY2xpcC0+eTIgLSBjbGlwLT55MTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9zcHJpdGUuYwo+IGluZGV4IGUzNTYwMWIxZjg3OC4uYzE2NDdjMGNjMjE3IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiBAQCAtMzI2LDcgKzMyNiw3IEBA IHNrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gIAkJICAg ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8ocGl4ZWxfZm9ybWF0KTsKPiAtCWludCBjcHAg PSBkcm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGluZm8sIDApOwo+ICsJaW50IGNwcCA9IGluZm8t PmNwcFswXTsKPiAgCj4gIAkvKgo+ICAJICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3Qg ZXhjZWVkIHRoZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwo+IGluZGV4IDBk NTMzNGE1YTlhNy4uYjVlMmYyMzBkYTAwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9mYi5jCj4gQEAgLTEwNCw3ICsxMDQsNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpt dGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAoIWdl bSkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKPiAgCj4gLQlicHAgPSBkcm1fZm9ybWF0 X2luZm9fcGxhbmVfY3BwKGluZm8sIDApOwo+ICsJYnBwID0gaW5mby0+Y3BwWzBdOwo+ICAJc2l6 ZSA9IChoZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hlc1swXSArIHdpZHRoICogYnBwOwo+ICAJc2l6 ZSArPSBjbWQtPm9mZnNldHNbMF07Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1 L21kcDVfY3J0Yy5jCj4gaW5kZXggYTU2NWRjY2FiYTNhLi43NGRkMDM2YTIyNDYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYwo+IEBAIC04MDEsNyArODAx LDcgQEAgc3RhdGljIHZvaWQgbWRwNV9jcnRjX3Jlc3RvcmVfY3Vyc29yKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPiAgCXdpZHRoID0gbWRwNV9jcnRjLT5jdXJzb3Iud2lkdGg7Cj4gIAloZWlnaHQg PSBtZHA1X2NydGMtPmN1cnNvci5oZWlnaHQ7Cj4gIAo+IC0Jc3RyaWRlID0gd2lkdGggKiBkcm1f Zm9ybWF0X2luZm9fcGxhbmVfY3BwKGluZm8sIDApOwo+ICsJc3RyaWRlID0gd2lkdGggKiBpbmZv LT5jcHBbMF07Cj4gIAo+ICAJZ2V0X3JvaShjcnRjLCAmcm9pX3csICZyb2lfaCk7Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYwo+IGluZGV4IDFjYTI5NDY5NDU5 Ny4uMjgzNDgzN2Y0ZDNlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9t ZHA1L21kcDVfc21wLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1 X3NtcC5jCj4gQEAgLTE1OCw3ICsxNTgsNyBAQCB1aW50MzJfdCBtZHA1X3NtcF9jYWxjdWxhdGUo c3RydWN0IG1kcDVfc21wICpzbXAsCj4gIAlmb3IgKGkgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7 Cj4gIAkJaW50IG4sIGZldGNoX3N0cmlkZSwgY3BwOwo+ICAKPiAtCQljcHAgPSBkcm1fZm9ybWF0 X2luZm9fcGxhbmVfY3BwKGluZm8sIGkpOwo+ICsJCWNwcCA9IGluZm8tPmNwcFtpXTsKPiAgCQlm ZXRjaF9zdHJpZGUgPSB3aWR0aCAqIGNwcCAvIChpID8gaHN1YiA6IDEpOwo+ICAKPiAgCQluID0g RElWX1JPVU5EX1VQKGZldGNoX3N0cmlkZSAqIG5saW5lcywgc21wLT5ibGtfc2l6ZSk7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9mYi5jCj4gaW5kZXggMjllNDVmMjE0NGI1Li42OGZhMmM4ZjYxZTYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2ZiLmMKPiBAQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICptc21fZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICAJCXVuc2lnbmVkIGludCBtaW5fc2l6ZTsKPiAgCj4gIAkJbWluX3NpemUgPSAoaGVpZ2h0IC0g MSkgKiBtb2RlX2NtZC0+cGl0Y2hlc1tpXQo+IC0JCQkgKyB3aWR0aCAqIGRybV9mb3JtYXRfaW5m b19wbGFuZV9jcHAoaW5mbywgaSkKPiArCQkJICsgd2lkdGggKiBpbmZvLT5jcHBbaV0KPiAgCQkJ ICsgbW9kZV9jbWQtPm9mZnNldHNbaV07Cj4gIAo+ICAJCWlmIChib3NbaV0tPnNpemUgPCBtaW5f c2l6ZSkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5j IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwo+IGluZGV4IGRiZjU5NmZjNDMz OS4uMjg3ZTNmOTIxMDJhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFk ZW9uX2ZiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCj4gQEAg LTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHJhZGVvbmZiX2NyZWF0ZV9waW5uZWRfb2JqZWN0 KHN0cnVjdCByYWRlb25fZmJkZXYgKnJmYmRldiwKPiAgCXUzMiBjcHA7Cj4gIAo+ICAJaW5mbyA9 IGRybV9nZXRfZm9ybWF0X2luZm8ocmRldi0+ZGRldiwgbW9kZV9jbWQpOwo+IC0JY3BwID0gZHJt X2Zvcm1hdF9pbmZvX3BsYW5lX2NwcChpbmZvLCAwKTsKPiArCWNwcCA9IGluZm8tPmNwcFswXTsK PiAgCj4gIAkvKiBuZWVkIHRvIGFsaWduIHBpdGNoIHdpdGggY3J0YyBsaW1pdHMgKi8KPiAgCW1v ZGVfY21kLT5waXRjaGVzWzBdID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLT53 aWR0aCwgY3BwLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMK PiBpbmRleCA1Nzg3M2M5OWFlMjkuLjMxMDMwY2Y4MWJjOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKPiBAQCAtOTgsNyArOTgsNyBAQCByb2NrY2hp cF91c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKPiAgCj4gIAkJbWluX3NpemUgPSAoaGVpZ2h0IC0gMSkgKiBtb2RlX2NtZC0+ cGl0Y2hlc1tpXSArCj4gIAkJCW1vZGVfY21kLT5vZmZzZXRzW2ldICsKPiAtCQkJd2lkdGggKiBk cm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGluZm8sIGkpOwo+ICsJCQl3aWR0aCAqIGluZm8tPmNw cFtpXTsKPiAgCj4gIAkJaWYgKG9iai0+c2l6ZSA8IG1pbl9zaXplKSB7Cj4gIAkJCWRybV9nZW1f b2JqZWN0X3B1dF91bmxvY2tlZChvYmopOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c3RtL2x0ZGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jCj4gaW5kZXggNmJiM2NkM2Ex YTAxLi45ZmYzOTc4OWZmYjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N0bS9sdGRj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL2x0ZGMuYwo+IEBAIC03NzksNyArNzc5LDcg QEAgc3RhdGljIHZvaWQgbHRkY19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAKPiAgCS8qIENvbmZpZ3VyZXMgdGhlIGNvbG9yIGZyYW1lIGJ1ZmZlciBwaXRj aCBpbiBieXRlcyAmIGxpbmUgbGVuZ3RoICovCj4gIAlwaXRjaF9pbl9ieXRlcyA9IGZiLT5waXRj aGVzWzBdOwo+IC0JbGluZV9sZW5ndGggPSBkcm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGZiLT5m b3JtYXQsIDApICoKPiArCWxpbmVfbGVuZ3RoID0gZmItPmZvcm1hdC0+Y3BwWzBdICoKPiAgCQkg ICAgICAoeDEgLSB4MCArIDEpICsgKGxkZXYtPmNhcHMuYnVzX3dpZHRoID4+IDMpIC0gMTsKPiAg CXZhbCA9ICgocGl0Y2hfaW5fYnl0ZXMgPDwgMTYpIHwgbGluZV9sZW5ndGgpOwo+ICAJcmVnX3Vw ZGF0ZV9iaXRzKGxkZXYtPnJlZ3MsIExURENfTDFDRkJMUiArIGxvZnMsCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMK PiBpbmRleCBkMTA0MjE5NmEzMGYuLjU3Y2MyNmUxZGEwMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vdGVncmEvZmIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jCj4g QEAgLTE0OSw3ICsxNDksNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0ZWdyYV9mYl9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiAgCQkJZ290byB1bnJlZmVyZW5jZTsKPiAgCQl9 Cj4gIAo+IC0JCWJwcCA9IGRybV9mb3JtYXRfaW5mb19wbGFuZV9jcHAoaW5mbywgaSk7Cj4gKwkJ YnBwID0gaW5mby0+Y3BwW2ldOwo+ICAKPiAgCQlzaXplID0gKGhlaWdodCAtIDEpICogY21kLT5w aXRjaGVzW2ldICsKPiAgCQkgICAgICAgd2lkdGggKiBicHAgKyBjbWQtPm9mZnNldHNbaV07Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS96dGUvenhfcGxhbmUuYwo+IGluZGV4IGQ5N2E0ZGZmNTE1ZC4uNzA2NDUyZjliMjc2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYwo+IEBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZv aWQgenhfdmxfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg CQljbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgaSk7Cj4gIAkJcGFkZHIgPSBj bWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzW2ldOwo+ICAJCXBhZGRyICs9IHNyY195ICogZmIt PnBpdGNoZXNbaV07Cj4gLQkJcGFkZHIgKz0gc3JjX3ggKiBkcm1fZm9ybWF0X2luZm9fcGxhbmVf Y3BwKGZiLT5mb3JtYXQsIGkpOwo+ICsJCXBhZGRyICs9IHNyY194ICogZmItPmZvcm1hdC0+Y3Bw W2ldOwo+ICAJCXp4X3dyaXRlbChwYWRkcl9yZWcsIHBhZGRyKTsKPiAgCQlwYWRkcl9yZWcgKz0g NDsKPiAgCX0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVk ZS9kcm0vZHJtX2ZvdXJjYy5oCj4gaW5kZXggNGVmOGNjYjVkMjM2Li40MDU0NjY2OTJiZDIgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCj4gKysrIGIvaW5jbHVkZS9kcm0v ZHJtX2ZvdXJjYy5oCj4gQEAgLTI2MSwyMyArMjYxLDYgQEAgZHJtX2Zvcm1hdF9pbmZvX2lzX3l1 dl9zYW1wbGluZ180NDQoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbykKPiAgfQo+ ICAKPiAgLyoqCj4gLSAqIGRybV9mb3JtYXRfaW5mb19wbGFuZV9jcHAgLSBkZXRlcm1pbmUgdGhl IGJ5dGVzIHBlciBwaXhlbCB2YWx1ZQo+IC0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgaW5mbwo+ IC0gKiBAcGxhbmU6IHBsYW5lIGluZGV4Cj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFRoZSBi eXRlcyBwZXIgcGl4ZWwgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgcGxhbmUuCj4gLSAqLwo+IC1z dGF0aWMgaW5saW5lCj4gLWludCBkcm1fZm9ybWF0X2luZm9fcGxhbmVfY3BwKGNvbnN0IHN0cnVj dCBkcm1fZm9ybWF0X2luZm8gKmluZm8sIGludCBwbGFuZSkKPiAtewo+IC0JaWYgKCFpbmZvIHx8 IHBsYW5lID49IGluZm8tPm51bV9wbGFuZXMpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0dXJu IGluZm8tPmNwcFtwbGFuZV07Cj4gLX0KPiAtCj4gLS8qKgo+ICAgKiBkcm1fZm9ybWF0X2luZm9f cGxhbmVfd2lkdGggLSB3aWR0aCBvZiB0aGUgcGxhbmUgZ2l2ZW4gdGhlIGZpcnN0IHBsYW5lCj4g ICAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCBpbmZvCj4gICAqIEB3aWR0aDogd2lkdGggb2YgdGhl IGZpcnN0IHBsYW5lCj4gLS0gCj4gZ2l0LXNlcmllcyAwLjkuMQo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gClBhdWwgS29jaWFsa293c2tp LCBCb290bGluCkVtYmVkZGVkIExpbnV4IGFuZCBrZXJuZWwgZW5naW5lZXJpbmcKaHR0cHM6Ly9i b290bGluLmNvbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=