From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 32A77C43381 for ; Tue, 19 Mar 2019 21:57:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DC763217F4 for ; Tue, 19 Mar 2019 21:57:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727637AbfCSV5n (ORCPT ); Tue, 19 Mar 2019 17:57:43 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:47957 "EHLO relay6-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727269AbfCSV5l (ORCPT ); Tue, 19 Mar 2019 17:57:41 -0400 X-Originating-IP: 90.89.68.76 Received: from localhost (lfbn-1-10718-76.w90-89.abo.wanadoo.fr [90.89.68.76]) (Authenticated sender: maxime.ripard@bootlin.com) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 13106C0008; Tue, 19 Mar 2019 21:57:36 +0000 (UTC) From: Maxime Ripard To: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Maxime Ripard , Mauro Carvalho Chehab Cc: Sakari Ailus , Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , Paul Kocialkowski , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org Subject: [RFC PATCH 03/20] drm/fourcc: Pass the format_info pointer to drm_format_plane_cpp Date: Tue, 19 Mar 2019 22:57:08 +0100 Message-Id: <6e5850afb02cc2851fe3229122fb3cb4869dc108.1553032382.git-series.maxime.ripard@bootlin.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org So far, the drm_format_plane_cpp function was operating on the format's fourcc and was doing a lookup to retrieve the drm_format_info structure and return the cpp. However, this is inefficient since in most cases, we will have the drm_format_info pointer already available so we shouldn't have to perform a new lookup. Some drm_fourcc functions also already operate on the drm_format_info pointer for that reason, so the API is quite inconsistent there. Let's follow the latter pattern and remove the extra lookup while being a bit more consistent. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 4 +++- drivers/gpu/drm/arm/malidp_hw.c | 4 +++- drivers/gpu/drm/cirrus/cirrus_fbdev.c | 4 +++- drivers/gpu/drm/cirrus/cirrus_main.c | 4 +++- drivers/gpu/drm/drm_client.c | 3 ++- drivers/gpu/drm/drm_fb_helper.c | 2 +- drivers/gpu/drm/drm_fourcc.c | 7 ++----- drivers/gpu/drm/i915/intel_sprite.c | 3 ++- drivers/gpu/drm/mediatek/mtk_drm_fb.c | 2 +- drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 3 ++- 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 | 4 +++- 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/tinydrm/core/tinydrm-helpers.c | 2 +- drivers/gpu/drm/zte/zx_plane.c | 2 +- include/drm/drm_fourcc.h | 2 +- 19 files changed, 33 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c index 5cbde74b97dd..48170a843b48 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c @@ -123,6 +123,8 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **gobj_p) { + const struct drm_format_info *info = drm_get_format_info(dev, + mode_cmd); struct amdgpu_device *adev = rfbdev->adev; struct drm_gem_object *gobj = NULL; struct amdgpu_bo *abo = NULL; @@ -133,7 +135,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, int height = mode_cmd->height; u32 cpp; - cpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0); + cpp = drm_format_plane_cpp(info, 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 b9bed1138fa3..07971ad53b29 100644 --- a/drivers/gpu/drm/arm/malidp_hw.c +++ b/drivers/gpu/drm/arm/malidp_hw.c @@ -326,12 +326,14 @@ static void malidp500_modeset(struct malidp_hw_device *hwdev, struct videomode * static int malidp500_rotmem_required(struct malidp_hw_device *hwdev, u16 w, u16 h, u32 fmt) { + const struct drm_format_info *info = drm_format_info(fmt); + /* * Each layer needs enough rotation memory to fit 8 lines * worth of pixel data. Required size is then: * size = rotated_width * (bpp / 8) * 8; */ - return w * drm_format_plane_cpp(fmt, 0) * 8; + return w * drm_format_plane_cpp(info, 0) * 8; } static void malidp500_se_write_pp_coefftab(struct malidp_hw_device *hwdev, diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c index 39df62acac69..759847bafda8 100644 --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c @@ -137,6 +137,8 @@ static int cirrusfb_create_object(struct cirrus_fbdev *afbdev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **gobj_p) { + const struct drm_format_info *info = drm_get_format_info(dev, + mode_cmd); struct drm_device *dev = afbdev->helper.dev; struct cirrus_device *cdev = dev->dev_private; u32 bpp; @@ -144,7 +146,7 @@ static int cirrusfb_create_object(struct cirrus_fbdev *afbdev, struct drm_gem_object *gobj; int ret = 0; - bpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0) * 8; + bpp = drm_format_plane_cpp(info, 0) * 8; if (!cirrus_check_framebuffer(cdev, mode_cmd->width, mode_cmd->height, bpp, mode_cmd->pitches[0])) diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c index 57f8fe6d020b..66d0d2c5211d 100644 --- a/drivers/gpu/drm/cirrus/cirrus_main.c +++ b/drivers/gpu/drm/cirrus/cirrus_main.c @@ -41,13 +41,15 @@ cirrus_user_framebuffer_create(struct drm_device *dev, struct drm_file *filp, const struct drm_mode_fb_cmd2 *mode_cmd) { + const struct drm_format_info *info = drm_get_format_info(dev, + mode_cmd); struct cirrus_device *cdev = dev->dev_private; struct drm_gem_object *obj; struct drm_framebuffer *fb; u32 bpp; int ret; - bpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0) * 8; + bpp = drm_format_plane_cpp(info, 0) * 8; if (!cirrus_check_framebuffer(cdev, mode_cmd->width, mode_cmd->height, bpp, mode_cmd->pitches[0])) diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c index 9b2bd28dde0a..305d6dd5d201 100644 --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -242,6 +242,7 @@ static void drm_client_buffer_delete(struct drm_client_buffer *buffer) static struct drm_client_buffer * drm_client_buffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format) { + const struct drm_format_info *info = drm_format_info(format); struct drm_mode_create_dumb dumb_args = { }; struct drm_device *dev = client->dev; struct drm_client_buffer *buffer; @@ -257,7 +258,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_plane_cpp(format, 0) * 8; + dumb_args.bpp = drm_format_plane_cpp(info, 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 04d23cb430bf..257a9c995057 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -768,7 +768,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_plane_cpp(fb->format->format, 0); + unsigned int cpp = drm_format_plane_cpp(fb->format, 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_fourcc.c b/drivers/gpu/drm/drm_fourcc.c index 04be330b7cae..d8ada4cb689e 100644 --- a/drivers/gpu/drm/drm_fourcc.c +++ b/drivers/gpu/drm/drm_fourcc.c @@ -307,17 +307,14 @@ EXPORT_SYMBOL(drm_get_format_info); /** * drm_format_plane_cpp - determine the bytes per pixel value - * @format: pixel format (DRM_FORMAT_*) + * @format: pixel format info * @plane: plane index * * Returns: * The bytes per pixel value for the specified plane. */ -int drm_format_plane_cpp(uint32_t format, int plane) +int drm_format_plane_cpp(const struct drm_format_info *info, int plane) { - const struct drm_format_info *info; - - info = drm_format_info(format); if (!info || plane >= info->num_planes) return 0; diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index b56a1a9ad01d..ee0e99b13532 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c @@ -297,7 +297,8 @@ skl_plane_max_stride(struct intel_plane *plane, u32 pixel_format, u64 modifier, unsigned int rotation) { - int cpp = drm_format_plane_cpp(pixel_format, 0); + const struct drm_format_info *info = drm_format_info(pixel_format); + int cpp = drm_format_plane_cpp(info, 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 68fdef8b12bd..af90c84e9e02 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_plane_cpp(cmd->pixel_format, 0); + bpp = drm_format_plane_cpp(info, 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 b0cf63c4e3d7..aadae21f8818 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c @@ -782,6 +782,7 @@ static void get_roi(struct drm_crtc *crtc, uint32_t *roi_w, uint32_t *roi_h) static void mdp5_crtc_restore_cursor(struct drm_crtc *crtc) { + const struct drm_format_info *info = drm_format_info(DRM_FORMAT_ARGB8888); struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state); struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); struct mdp5_kms *mdp5_kms = get_kms(crtc); @@ -800,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_plane_cpp(DRM_FORMAT_ARGB8888, 0); + stride = width * drm_format_plane_cpp(info, 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 b30b2f4efc60..03d503d8c3ba 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_plane_cpp(fmt, i); + cpp = drm_format_plane_cpp(info, 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 f69c0afd6ec6..ee91058c7974 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_plane_cpp(mode_cmd->pixel_format, i) + + width * drm_format_plane_cpp(info, 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 1179034024ae..88fc1a6e2e43 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c @@ -125,6 +125,8 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev, struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **gobj_p) { + const struct drm_format_info *info = drm_get_format_info(dev, + mode_cmd); struct radeon_device *rdev = rfbdev->rdev; struct drm_gem_object *gobj = NULL; struct radeon_bo *rbo = NULL; @@ -135,7 +137,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev, int height = mode_cmd->height; u32 cpp; - cpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0); + cpp = drm_format_plane_cpp(info, 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 c318fae28581..c602cb2f4d3c 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_plane_cpp(mode_cmd->pixel_format, i); + width * drm_format_plane_cpp(info, 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 b1741a9d5be2..b226df7dbf6f 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_plane_cpp(fb->format->format, 0) * + line_length = drm_format_plane_cpp(fb->format, 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 ddf2c764f24c..0a97458b286a 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_plane_cpp(cmd->pixel_format, i); + bpp = drm_format_plane_cpp(info, i); size = (height - 1) * cmd->pitches[i] + width * bpp + cmd->offsets[i]; diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index 2737b6fdadc8..57dda9d1a45d 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -36,7 +36,7 @@ MODULE_PARM_DESC(spi_max, "Set a lower SPI max transfer size"); void tinydrm_memcpy(void *dst, void *vaddr, struct drm_framebuffer *fb, struct drm_rect *clip) { - unsigned int cpp = drm_format_plane_cpp(fb->format->format, 0); + unsigned int cpp = drm_format_plane_cpp(fb->format, 0); unsigned int pitch = fb->pitches[0]; void *src = vaddr + (clip->y1 * pitch) + (clip->x1 * cpp); size_t len = (clip->x2 - clip->x1) * cpp; diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c index c6a8be444300..41bd0db4e876 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_plane_cpp(format, i); + paddr += src_x * drm_format_plane_cpp(fb->format, i); zx_writel(paddr_reg, paddr); paddr_reg += 4; } diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h index eeec449d6c6a..97a58f3e7462 100644 --- a/include/drm/drm_fourcc.h +++ b/include/drm/drm_fourcc.h @@ -268,7 +268,7 @@ drm_get_format_info(struct drm_device *dev, uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth); uint32_t drm_driver_legacy_fb_format(struct drm_device *dev, uint32_t bpp, uint32_t depth); -int drm_format_plane_cpp(uint32_t format, int plane); +int drm_format_plane_cpp(const struct drm_format_info *info, int plane); int drm_format_plane_width(int width, uint32_t format, int plane); int drm_format_plane_height(int height, uint32_t format, int plane); unsigned int drm_format_info_block_width(const struct drm_format_info *info, -- git-series 0.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [RFC PATCH 03/20] drm/fourcc: Pass the format_info pointer to drm_format_plane_cpp Date: Tue, 19 Mar 2019 22:57:08 +0100 Message-ID: <6e5850afb02cc2851fe3229122fb3cb4869dc108.1553032382.git-series.maxime.ripard@bootlin.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by gabe.freedesktop.org (Postfix) with ESMTPS id 044BE89B96 for ; Tue, 19 Mar 2019 21:57:41 +0000 (UTC) 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: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Maxime Ripard , Mauro Carvalho Chehab Cc: Sakari Ailus , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org U28gZmFyLCB0aGUgZHJtX2Zvcm1hdF9wbGFuZV9jcHAgZnVuY3Rpb24gd2FzIG9wZXJhdGluZyBv biB0aGUgZm9ybWF0J3MKZm91cmNjIGFuZCB3YXMgZG9pbmcgYSBsb29rdXAgdG8gcmV0cmlldmUg dGhlIGRybV9mb3JtYXRfaW5mbyBzdHJ1Y3R1cmUgYW5kCnJldHVybiB0aGUgY3BwLgoKSG93ZXZl ciwgdGhpcyBpcyBpbmVmZmljaWVudCBzaW5jZSBpbiBtb3N0IGNhc2VzLCB3ZSB3aWxsIGhhdmUg dGhlCmRybV9mb3JtYXRfaW5mbyBwb2ludGVyIGFscmVhZHkgYXZhaWxhYmxlIHNvIHdlIHNob3Vs ZG4ndCBoYXZlIHRvIHBlcmZvcm0gYQpuZXcgbG9va3VwLiBTb21lIGRybV9mb3VyY2MgZnVuY3Rp b25zIGFsc28gYWxyZWFkeSBvcGVyYXRlIG9uIHRoZQpkcm1fZm9ybWF0X2luZm8gcG9pbnRlciBm b3IgdGhhdCByZWFzb24sIHNvIHRoZSBBUEkgaXMgcXVpdGUgaW5jb25zaXN0ZW50CnRoZXJlLgoK TGV0J3MgZm9sbG93IHRoZSBsYXR0ZXIgcGF0dGVybiBhbmQgcmVtb3ZlIHRoZSBleHRyYSBsb29r dXAgd2hpbGUgYmVpbmcgYQpiaXQgbW9yZSBjb25zaXN0ZW50LgoKU2lnbmVkLW9mZi1ieTogTWF4 aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290bGluLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZmIuYyAgICAgICAgIHwgNCArKystCiBkcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9ody5jICAgICAgICAgICAgICAgIHwgNCArKystCiBkcml2ZXJzL2dwdS9k cm0vY2lycnVzL2NpcnJ1c19mYmRldi5jICAgICAgICAgIHwgNCArKystCiBkcml2ZXJzL2dwdS9k cm0vY2lycnVzL2NpcnJ1c19tYWluLmMgICAgICAgICAgIHwgNCArKystCiBkcml2ZXJzL2dwdS9k cm0vZHJtX2NsaWVudC5jICAgICAgICAgICAgICAgICAgIHwgMyArKy0KIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZmJfaGVscGVyLmMgICAgICAgICAgICAgICAgfCAyICstCiBkcml2ZXJzL2dwdS9kcm0v ZHJtX2ZvdXJjYy5jICAgICAgICAgICAgICAgICAgIHwgNyArKy0tLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgICAgICAgICAgIHwgMyArKy0KIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMgICAgICAgICAgfCAyICstCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYyAgICAgIHwgMyArKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9tZHA1L21kcDVfc21wLmMgICAgICAgfCAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9mYi5jICAgICAgICAgICAgICAgICAgIHwgMiArLQogZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9yYWRlb25fZmIuYyAgICAgICAgICAgICB8IDQgKysrLQogZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9mYi5jICAgICB8IDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9zdG0vbHRk Yy5jICAgICAgICAgICAgICAgICAgICAgfCAyICstCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIu YyAgICAgICAgICAgICAgICAgICAgIHwgMiArLQogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29y ZS90aW55ZHJtLWhlbHBlcnMuYyB8IDIgKy0KIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUu YyAgICAgICAgICAgICAgICAgfCAyICstCiBpbmNsdWRlL2RybS9kcm1fZm91cmNjLmggICAgICAg ICAgICAgICAgICAgICAgIHwgMiArLQogMTkgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygr KSwgMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZmIuYwpp bmRleCA1Y2JkZTc0Yjk3ZGQuLjQ4MTcwYTg0M2I0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2ZiLmMKQEAgLTEyMyw2ICsxMjMsOCBAQCBzdGF0aWMgaW50IGFtZGdwdWZiX2Ny ZWF0ZV9waW5uZWRfb2JqZWN0KHN0cnVjdCBhbWRncHVfZmJkZXYgKnJmYmRldiwKIAkJCQkJIHN0 cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCwKIAkJCQkJIHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqKmdvYmpfcCkKIHsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0g ZHJtX2dldF9mb3JtYXRfaW5mbyhkZXYsCisJCQkJCQkJCSBtb2RlX2NtZCk7CiAJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSByZmJkZXYtPmFkZXY7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnb2JqID0gTlVMTDsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICphYm8gPSBOVUxMOwpAQCAtMTMzLDcg KzEzNSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1ZmJfY3JlYXRlX3Bpbm5lZF9vYmplY3Qoc3RydWN0 IGFtZGdwdV9mYmRldiAqcmZiZGV2LAogCWludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0Owog CXUzMiBjcHA7CiAKLQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChtb2RlX2NtZC0+cGl4ZWxf Zm9ybWF0LCAwKTsKKwljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChpbmZvLCAwKTsKIAogCS8q IG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLT5waXRj aGVzWzBdID0gYW1kZ3B1X2FsaWduX3BpdGNoKGFkZXYsIG1vZGVfY21kLT53aWR0aCwgY3BwLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYyBiL2RyaXZlcnMvZ3B1 L2RybS9hcm0vbWFsaWRwX2h3LmMKaW5kZXggYjliZWQxMTM4ZmEzLi4wNzk3MWFkNTNiMjkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfaHcuYwpAQCAtMzI2LDEyICszMjYsMTQgQEAgc3RhdGljIHZvaWQg bWFsaWRwNTAwX21vZGVzZXQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qg dmlkZW9tb2RlICoKIAogc3RhdGljIGludCBtYWxpZHA1MDBfcm90bWVtX3JlcXVpcmVkKHN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KQogeworCWNv bnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm10KTsK KwogCS8qCiAJICogRWFjaCBsYXllciBuZWVkcyBlbm91Z2ggcm90YXRpb24gbWVtb3J5IHRvIGZp dCA4IGxpbmVzCiAJICogd29ydGggb2YgcGl4ZWwgZGF0YS4gUmVxdWlyZWQgc2l6ZSBpcyB0aGVu OgogCSAqICAgIHNpemUgPSByb3RhdGVkX3dpZHRoICogKGJwcCAvIDgpICogODsKIAkgKi8KLQly ZXR1cm4gdyAqIGRybV9mb3JtYXRfcGxhbmVfY3BwKGZtdCwgMCkgKiA4OworCXJldHVybiB3ICog ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoaW5mbywgMCkgKiA4OwogfQogCiBzdGF0aWMgdm9pZCBtYWxp ZHA1MDBfc2Vfd3JpdGVfcHBfY29lZmZ0YWIoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZmJkZXYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX2ZiZGV2LmMKaW5kZXggMzlkZjYyYWNhYzY5Li43 NTk4NDdiYWZkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX2Zi ZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZmJkZXYuYwpAQCAtMTM3 LDYgKzEzNyw4IEBAIHN0YXRpYyBpbnQgY2lycnVzZmJfY3JlYXRlX29iamVjdChzdHJ1Y3QgY2ly cnVzX2ZiZGV2ICphZmJkZXYsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2Nt ZDIgKm1vZGVfY21kLAogCQkJICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKmdvYmpfcCkK IHsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0gZHJtX2dldF9mb3JtYXRf aW5mbyhkZXYsCisJCQkJCQkJCSBtb2RlX2NtZCk7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGFmYmRldi0+aGVscGVyLmRldjsKIAlzdHJ1Y3QgY2lycnVzX2RldmljZSAqY2RldiA9IGRldi0+ ZGV2X3ByaXZhdGU7CiAJdTMyIGJwcDsKQEAgLTE0NCw3ICsxNDYsNyBAQCBzdGF0aWMgaW50IGNp cnJ1c2ZiX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGNpcnJ1c19mYmRldiAqYWZiZGV2LAogCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqZ29iajsKIAlpbnQgcmV0ID0gMDsKIAotCWJwcCA9IGRybV9mb3Jt YXRfcGxhbmVfY3BwKG1vZGVfY21kLT5waXhlbF9mb3JtYXQsIDApICogODsKKwlicHAgPSBkcm1f Zm9ybWF0X3BsYW5lX2NwcChpbmZvLCAwKSAqIDg7CiAKIAlpZiAoIWNpcnJ1c19jaGVja19mcmFt ZWJ1ZmZlcihjZGV2LCBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQsCiAJCQkJICAg ICAgYnBwLCBtb2RlX2NtZC0+cGl0Y2hlc1swXSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vY2lycnVzL2NpcnJ1c19tYWluLmMgYi9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19t YWluLmMKaW5kZXggNTdmOGZlNmQwMjBiLi42NmQwZDJjNTIxMWQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX21haW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vY2ly cnVzL2NpcnJ1c19tYWluLmMKQEAgLTQxLDEzICs0MSwxNSBAQCBjaXJydXNfdXNlcl9mcmFtZWJ1 ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbHAsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1v ZGVfY21kKQogeworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZ2V0 X2Zvcm1hdF9pbmZvKGRldiwKKwkJCQkJCQkJIG1vZGVfY21kKTsKIAlzdHJ1Y3QgY2lycnVzX2Rl dmljZSAqY2RldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv Ymo7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJdTMyIGJwcDsKIAlpbnQgcmV0Owog Ci0JYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCwgMCkg KiA4OworCWJwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGluZm8sIDApICogODsKIAogCWlmICgh Y2lycnVzX2NoZWNrX2ZyYW1lYnVmZmVyKGNkZXYsIG1vZGVfY21kLT53aWR0aCwgbW9kZV9jbWQt PmhlaWdodCwKIAkJCQkgICAgICBicHAsIG1vZGVfY21kLT5waXRjaGVzWzBdKSkKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Ns aWVudC5jCmluZGV4IDliMmJkMjhkZGUwYS4uMzA1ZDZkZDVkMjAxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50 LmMKQEAgLTI0Miw2ICsyNDIsNyBAQCBzdGF0aWMgdm9pZCBkcm1fY2xpZW50X2J1ZmZlcl9kZWxl dGUoc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIpCiBzdGF0aWMgc3RydWN0IGRybV9j bGllbnRfYnVmZmVyICoKIGRybV9jbGllbnRfYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LCB1MzIgZm9ybWF0KQogeworCWNv bnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm9ybWF0 KTsKIAlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgZHVtYl9hcmdzID0geyB9OwogCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKIAlzdHJ1Y3QgZHJtX2NsaWVudF9idWZm ZXIgKmJ1ZmZlcjsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBkcm1fY2xpZW50X2J1ZmZlcl9jcmVhdGUo c3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwgdQog CiAJZHVtYl9hcmdzLndpZHRoID0gd2lkdGg7CiAJZHVtYl9hcmdzLmhlaWdodCA9IGhlaWdodDsK LQlkdW1iX2FyZ3MuYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZm9ybWF0LCAwKSAqIDg7CisJ ZHVtYl9hcmdzLmJwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGluZm8sIDApICogODsKIAlyZXQg PSBkcm1fbW9kZV9jcmVhdGVfZHVtYihkZXYsICZkdW1iX2FyZ3MsIGNsaWVudC0+ZmlsZSk7CiAJ aWYgKHJldCkKIAkJZ290byBlcnJfZGVsZXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXgg MDRkMjNjYjQzMGJmLi4yNTdhOWM5OTUwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAt NzY4LDcgKzc2OCw3IEBAIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfZGlydHlfYmxpdF9yZWFs KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkJCSAgc3RydWN0IGRybV9jbGlw X3JlY3QgKmNsaXApCiB7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXIt PmZiOwotCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+Zm9ybWF0 LT5mb3JtYXQsIDApOworCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChm Yi0+Zm9ybWF0LCAwKTsKIAlzaXplX3Qgb2Zmc2V0ID0gY2xpcC0+eTEgKiBmYi0+cGl0Y2hlc1sw XSArIGNsaXAtPngxICogY3BwOwogCXZvaWQgKnNyYyA9IGZiX2hlbHBlci0+ZmJkZXYtPnNjcmVl bl9idWZmZXIgKyBvZmZzZXQ7CiAJdm9pZCAqZHN0ID0gZmJfaGVscGVyLT5idWZmZXItPnZhZGRy ICsgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKaW5kZXggMDRiZTMzMGI3Y2FlLi5kOGFkYTRjYjY4 OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9mb3VyY2MuYwpAQCAtMzA3LDE3ICszMDcsMTQgQEAgRVhQT1JUX1NZTUJP TChkcm1fZ2V0X2Zvcm1hdF9pbmZvKTsKIAogLyoqCiAgKiBkcm1fZm9ybWF0X3BsYW5lX2NwcCAt IGRldGVybWluZSB0aGUgYnl0ZXMgcGVyIHBpeGVsIHZhbHVlCi0gKiBAZm9ybWF0OiBwaXhlbCBm b3JtYXQgKERSTV9GT1JNQVRfKikKKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCBpbmZvCiAgKiBA cGxhbmU6IHBsYW5lIGluZGV4CiAgKgogICogUmV0dXJuczoKICAqIFRoZSBieXRlcyBwZXIgcGl4 ZWwgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgcGxhbmUuCiAgKi8KLWludCBkcm1fZm9ybWF0X3Bs YW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKK2ludCBkcm1fZm9ybWF0X3BsYW5l X2NwcChjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLCBpbnQgcGxhbmUpCiB7Ci0J Y29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbzsKLQotCWluZm8gPSBkcm1fZm9ybWF0 X2luZm8oZm9ybWF0KTsKIAlpZiAoIWluZm8gfHwgcGxhbmUgPj0gaW5mby0+bnVtX3BsYW5lcykK IAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nw cml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKaW5kZXggYjU2YTFh OWFkMDFkLi5lZTBlOTliMTM1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBA IC0yOTcsNyArMjk3LDggQEAgc2tsX3BsYW5lX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKIAkJICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCiAJCSAgICAg dW5zaWduZWQgaW50IHJvdGF0aW9uKQogewotCWludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2Nw cChwaXhlbF9mb3JtYXQsIDApOworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8g PSBkcm1fZm9ybWF0X2luZm8ocGl4ZWxfZm9ybWF0KTsKKwlpbnQgY3BwID0gZHJtX2Zvcm1hdF9w bGFuZV9jcHAoaW5mbywgMCk7CiAKIAkvKgogCSAqICJUaGUgc3RyaWRlIGluIGJ5dGVzIG11c3Qg bm90IGV4Y2VlZCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCmluZGV4IDY4 ZmRlZjhiMTJiZC4uYWY5MGM4NGU5ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2ZiLmMKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptdGtfZHJt X21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKCFnZW0pCiAJCXJl dHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCi0JYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21k LT5waXhlbF9mb3JtYXQsIDApOworCWJwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGluZm8sIDAp OwogCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsK IAlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRw NS9tZHA1X2NydGMuYwppbmRleCBiMGNmNjNjNGUzZDcuLmFhZGFlMjFmODgxOCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMKQEAgLTc4Miw2ICs3ODIsNyBAQCBz dGF0aWMgdm9pZCBnZXRfcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdWludDMyX3QgKnJvaV93 LCB1aW50MzJfdCAqcm9pX2gpCiAKIHN0YXRpYyB2b2lkIG1kcDVfY3J0Y19yZXN0b3JlX2N1cnNv cihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5m byAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhEUk1fRk9STUFUX0FSR0I4ODg4KTsKIAlzdHJ1Y3Qg bWRwNV9jcnRjX3N0YXRlICptZHA1X2NzdGF0ZSA9IHRvX21kcDVfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CiAJc3RydWN0IG1kcDVfY3J0YyAqbWRwNV9jcnRjID0gdG9fbWRwNV9jcnRjKGNydGMp OwogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKGNydGMpOwpAQCAtODAwLDcg KzgwMSw3IEBAIHN0YXRpYyB2b2lkIG1kcDVfY3J0Y19yZXN0b3JlX2N1cnNvcihzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJd2lkdGggPSBtZHA1X2NydGMtPmN1cnNvci53aWR0aDsKIAloZWlnaHQg PSBtZHA1X2NydGMtPmN1cnNvci5oZWlnaHQ7CiAKLQlzdHJpZGUgPSB3aWR0aCAqIGRybV9mb3Jt YXRfcGxhbmVfY3BwKERSTV9GT1JNQVRfQVJHQjg4ODgsIDApOworCXN0cmlkZSA9IHdpZHRoICog ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoaW5mbywgMCk7CiAKIAlnZXRfcm9pKGNydGMsICZyb2lfdywg JnJvaV9oKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRw NV9zbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmMKaW5kZXgg YjMwYjJmNGVmYzYwLi4wM2Q1MDNkOGMzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9tZHA1L21kcDVfc21wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21k cDUvbWRwNV9zbXAuYwpAQCAtMTU4LDcgKzE1OCw3IEBAIHVpbnQzMl90IG1kcDVfc21wX2NhbGN1 bGF0ZShzdHJ1Y3QgbWRwNV9zbXAgKnNtcCwKIAlmb3IgKGkgPSAwOyBpIDwgbnBsYW5lczsgaSsr KSB7CiAJCWludCBuLCBmZXRjaF9zdHJpZGUsIGNwcDsKIAotCQljcHAgPSBkcm1fZm9ybWF0X3Bs YW5lX2NwcChmbXQsIGkpOworCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChpbmZvLCBpKTsK IAkJZmV0Y2hfc3RyaWRlID0gd2lkdGggKiBjcHAgLyAoaSA/IGhzdWIgOiAxKTsKIAogCQluID0g RElWX1JPVU5EX1VQKGZldGNoX3N0cmlkZSAqIG5saW5lcywgc21wLT5ibGtfc2l6ZSk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZmIuYwppbmRleCBmNjljMGFmZDZlYzYuLmVlOTEwNThjNzk3NCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9mYi5jCkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg Km1zbV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVk IGludCBtaW5fc2l6ZTsKIAogCQltaW5fc2l6ZSA9IChoZWlnaHQgLSAxKSAqIG1vZGVfY21kLT5w aXRjaGVzW2ldCi0JCQkgKyB3aWR0aCAqIGRybV9mb3JtYXRfcGxhbmVfY3BwKG1vZGVfY21kLT5w aXhlbF9mb3JtYXQsIGkpCisJCQkgKyB3aWR0aCAqIGRybV9mb3JtYXRfcGxhbmVfY3BwKGluZm8s IGkpCiAJCQkgKyBtb2RlX2NtZC0+b2Zmc2V0c1tpXTsKIAogCQlpZiAoYm9zW2ldLT5zaXplIDwg bWluX3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Zi LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDExNzkwMzQwMjRh ZS4uODhmYzFhNmUyZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVv bl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTEyNSw2 ICsxMjUsOCBAQCBzdGF0aWMgaW50IHJhZGVvbmZiX2NyZWF0ZV9waW5uZWRfb2JqZWN0KHN0cnVj dCByYWRlb25fZmJkZXYgKnJmYmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpt b2RlX2NtZCwKIAkJCQkJIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKmdvYmpfcCkKIHsKKwljb25z dCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0gZHJtX2dldF9mb3JtYXRfaW5mbyhkZXYs CisJCQkJCQkJCSBtb2RlX2NtZCk7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSByZmJk ZXYtPnJkZXY7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqID0gTlVMTDsKIAlzdHJ1Y3Qg cmFkZW9uX2JvICpyYm8gPSBOVUxMOwpAQCAtMTM1LDcgKzEzNyw3IEBAIHN0YXRpYyBpbnQgcmFk ZW9uZmJfY3JlYXRlX3Bpbm5lZF9vYmplY3Qoc3RydWN0IHJhZGVvbl9mYmRldiAqcmZiZGV2LAog CWludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0OwogCXUzMiBjcHA7CiAKLQljcHAgPSBkcm1f Zm9ybWF0X3BsYW5lX2NwcChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0LCAwKTsKKwljcHAgPSBkcm1f Zm9ybWF0X3BsYW5lX2NwcChpbmZvLCAwKTsKIAogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0 aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLT5waXRjaGVzWzBdID0gcmFkZW9uX2FsaWduX3Bp dGNoKHJkZXYsIG1vZGVfY21kLT53aWR0aCwgY3BwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV9mYi5jCmluZGV4IGMzMThmYWUyODU4MS4uYzYwMmNiMmY0ZDNjIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jCkBAIC05OCw3ICs5OCw3 IEBAIHJvY2tjaGlwX3VzZXJfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCiAJCW1pbl9zaXplID0gKGhlaWdodCAtIDEpICogbW9k ZV9jbWQtPnBpdGNoZXNbaV0gKwogCQkJbW9kZV9jbWQtPm9mZnNldHNbaV0gKwotCQkJd2lkdGgg KiBkcm1fZm9ybWF0X3BsYW5lX2NwcChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0LCBpKTsKKwkJCXdp ZHRoICogZHJtX2Zvcm1hdF9wbGFuZV9jcHAoaW5mbywgaSk7CiAKIAkJaWYgKG9iai0+c2l6ZSA8 IG1pbl9zaXplKSB7CiAJCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9s dGRjLmMKaW5kZXggYjE3NDFhOWQ1YmUyLi5iMjI2ZGY3ZGJmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9zdG0vbHRkYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jCkBA IC03NzksNyArNzc5LDcgQEAgc3RhdGljIHZvaWQgbHRkY19wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJLyogQ29uZmlndXJlcyB0aGUgY29sb3IgZnJhbWUg YnVmZmVyIHBpdGNoIGluIGJ5dGVzICYgbGluZSBsZW5ndGggKi8KIAlwaXRjaF9pbl9ieXRlcyA9 IGZiLT5waXRjaGVzWzBdOwotCWxpbmVfbGVuZ3RoID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmIt PmZvcm1hdC0+Zm9ybWF0LCAwKSAqCisJbGluZV9sZW5ndGggPSBkcm1fZm9ybWF0X3BsYW5lX2Nw cChmYi0+Zm9ybWF0LCAwKSAqCiAJCSAgICAgICh4MSAtIHgwICsgMSkgKyAobGRldi0+Y2Fwcy5i dXNfd2lkdGggPj4gMykgLSAxOwogCXZhbCA9ICgocGl0Y2hfaW5fYnl0ZXMgPDwgMTYpIHwgbGlu ZV9sZW5ndGgpOwogCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxQ0ZCTFIgKyBs b2ZzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMgYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvZmIuYwppbmRleCBkZGYyYzc2NGYyNGMuLjBhOTc0NThiMjg2YSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rl Z3JhL2ZiLmMKQEAgLTE0OSw3ICsxNDksNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0ZWdy YV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKIAkJCWdvdG8gdW5yZWZlcmVuY2U7 CiAJCX0KIAotCQlicHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChjbWQtPnBpeGVsX2Zvcm1hdCwg aSk7CisJCWJwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGluZm8sIGkpOwogCiAJCXNpemUgPSAo aGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbaV0gKwogCQkgICAgICAgd2lkdGggKiBicHAgKyBj bWQtPm9mZnNldHNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3Jl L3Rpbnlkcm0taGVscGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJt LWhlbHBlcnMuYwppbmRleCAyNzM3YjZmZGFkYzguLjU3ZGRhOWQxYTQ1ZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCkBAIC0zNiw3ICszNiw3 IEBAIE1PRFVMRV9QQVJNX0RFU0Moc3BpX21heCwgIlNldCBhIGxvd2VyIFNQSSBtYXggdHJhbnNm ZXIgc2l6ZSIpOwogdm9pZCB0aW55ZHJtX21lbWNweSh2b2lkICpkc3QsIHZvaWQgKnZhZGRyLCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJICAgIHN0cnVjdCBkcm1fcmVjdCAqY2xpcCkK IHsKLQl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPmZvcm1hdC0+ Zm9ybWF0LCAwKTsKKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmIt PmZvcm1hdCwgMCk7CiAJdW5zaWduZWQgaW50IHBpdGNoID0gZmItPnBpdGNoZXNbMF07CiAJdm9p ZCAqc3JjID0gdmFkZHIgKyAoY2xpcC0+eTEgKiBwaXRjaCkgKyAoY2xpcC0+eDEgKiBjcHApOwog CXNpemVfdCBsZW4gPSAoY2xpcC0+eDIgLSBjbGlwLT54MSkgKiBjcHA7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3Bs YW5lLmMKaW5kZXggYzZhOGJlNDQ0MzAwLi40MWJkMGRiNGU4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3Bs YW5lLmMKQEAgLTIyMiw3ICsyMjIsNyBAQCBzdGF0aWMgdm9pZCB6eF92bF9wbGFuZV9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQljbWFfb2JqID0gZHJtX2ZiX2NtYV9n ZXRfZ2VtX29iaihmYiwgaSk7CiAJCXBhZGRyID0gY21hX29iai0+cGFkZHIgKyBmYi0+b2Zmc2V0 c1tpXTsKIAkJcGFkZHIgKz0gc3JjX3kgKiBmYi0+cGl0Y2hlc1tpXTsKLQkJcGFkZHIgKz0gc3Jj X3ggKiBkcm1fZm9ybWF0X3BsYW5lX2NwcChmb3JtYXQsIGkpOworCQlwYWRkciArPSBzcmNfeCAq IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5mb3JtYXQsIGkpOwogCQl6eF93cml0ZWwocGFkZHJf cmVnLCBwYWRkcik7CiAJCXBhZGRyX3JlZyArPSA0OwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUv ZHJtL2RybV9mb3VyY2MuaCBiL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaAppbmRleCBlZWVjNDQ5 ZDZjNmEuLjk3YTU4ZjNlNzQ2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5o CisrKyBiL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaApAQCAtMjY4LDcgKzI2OCw3IEBAIGRybV9n ZXRfZm9ybWF0X2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIHVpbnQzMl90IGRybV9tb2Rl X2xlZ2FjeV9mYl9mb3JtYXQodWludDMyX3QgYnBwLCB1aW50MzJfdCBkZXB0aCk7CiB1aW50MzJf dCBkcm1fZHJpdmVyX2xlZ2FjeV9mYl9mb3JtYXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJ CQkgICAgIHVpbnQzMl90IGJwcCwgdWludDMyX3QgZGVwdGgpOwotaW50IGRybV9mb3JtYXRfcGxh bmVfY3BwKHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKTsKK2ludCBkcm1fZm9ybWF0X3BsYW5l X2NwcChjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLCBpbnQgcGxhbmUpOwogaW50 IGRybV9mb3JtYXRfcGxhbmVfd2lkdGgoaW50IHdpZHRoLCB1aW50MzJfdCBmb3JtYXQsIGludCBw bGFuZSk7CiBpbnQgZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3Qg Zm9ybWF0LCBpbnQgcGxhbmUpOwogdW5zaWduZWQgaW50IGRybV9mb3JtYXRfaW5mb19ibG9ja193 aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAotLSAKZ2l0LXNlcmllcyAw LjkuMQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=