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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 A94E2C43381 for ; Wed, 20 Mar 2019 14:19:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6EBD621871 for ; Wed, 20 Mar 2019 14:19:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727474AbfCTOTM (ORCPT ); Wed, 20 Mar 2019 10:19:12 -0400 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:48489 "EHLO relay3-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726611AbfCTOTL (ORCPT ); Wed, 20 Mar 2019 10:19:11 -0400 X-Originating-IP: 90.88.33.153 Received: from aptenodytes (aaubervilliers-681-1-92-153.w90-88.abo.wanadoo.fr [90.88.33.153]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 1615560014; Wed, 20 Mar 2019 14:19:06 +0000 (UTC) Message-ID: <1f7df78264eb964ae941f572b7affde34bfc3538.camel@bootlin.com> Subject: Re: [RFC PATCH 02/20] drm: Remove users of drm_format_(horz|vert)_chroma_subsampling From: Paul Kocialkowski To: Maxime Ripard , Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Mauro Carvalho Chehab Cc: Sakari Ailus , Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org Date: Wed, 20 Mar 2019 15:19:06 +0100 In-Reply-To: References: Organization: Bootlin Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.32.0 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 Hi, Le mardi 19 mars 2019 à 22:57 +0100, Maxime Ripard a écrit : > drm_format_horz_chroma_subsampling and drm_format_vert_chroma_subsampling > are basically a lookup in the drm_format_info table plus an access to the > hsub and vsub fields of the appropriate entry. > > Most drivers are using this function while having access to the entry > already, which means that we will perform an unnecessary lookup. Removing > the call to these functions is therefore more efficient. > > Some drivers will not have access to that entry in the function, but in > this case the overhead is minimal (we just have to call drm_format_info() > to perform the lookup) and we can even avoid multiple, inefficient lookups > in some places that need multiple fields from the drm_format_info > structure. > > This is amplified by the fact that most of the time the callers will have > to retrieve both the vsub and hsub fields, meaning that they would perform > twice the lookup. Cheers for nuking these two as well! Reviewed-by: Paul Kocialkowski Cheers, Paul > Signed-off-by: Maxime Ripard > --- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 9 +---- > drivers/gpu/drm/drm_fourcc.c | 34 +------------------ > drivers/gpu/drm/imx/ipuv3-plane.c | 15 +++----- > drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 9 +---- > drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 24 +++++-------- > drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 2 +- > drivers/gpu/drm/msm/msm_fb.c | 8 +--- > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 9 +---- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 13 ++----- > drivers/gpu/drm/tegra/fb.c | 9 +---- > drivers/gpu/drm/vc4/vc4_plane.c | 13 ++----- > include/drm/drm_fourcc.h | 2 +- > 12 files changed, 37 insertions(+), 110 deletions(-) > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > index e836e2de35ce..fdd607ad27fe 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > @@ -603,8 +603,6 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p, > const struct drm_display_mode *mode; > struct drm_crtc_state *crtc_state; > unsigned int tmp; > - int hsub = 1; > - int vsub = 1; > int ret; > int i; > > @@ -642,13 +640,10 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p, > if (state->nplanes > ATMEL_HLCDC_LAYER_MAX_PLANES) > return -EINVAL; > > - hsub = drm_format_horz_chroma_subsampling(fb->format->format); > - vsub = drm_format_vert_chroma_subsampling(fb->format->format); > - > for (i = 0; i < state->nplanes; i++) { > unsigned int offset = 0; > - int xdiv = i ? hsub : 1; > - int ydiv = i ? vsub : 1; > + int xdiv = i ? fb->format->hsub : 1; > + int ydiv = i ? fb->format->vsub : 1; > > state->bpp[i] = fb->format->cpp[i]; > if (!state->bpp[i]) > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c > index 22c7fa459f65..04be330b7cae 100644 > --- a/drivers/gpu/drm/drm_fourcc.c > +++ b/drivers/gpu/drm/drm_fourcc.c > @@ -326,40 +326,6 @@ int drm_format_plane_cpp(uint32_t format, int plane) > EXPORT_SYMBOL(drm_format_plane_cpp); > > /** > - * drm_format_horz_chroma_subsampling - get the horizontal chroma subsampling factor > - * @format: pixel format (DRM_FORMAT_*) > - * > - * Returns: > - * The horizontal chroma subsampling factor for the > - * specified pixel format. > - */ > -int drm_format_horz_chroma_subsampling(uint32_t format) > -{ > - const struct drm_format_info *info; > - > - info = drm_format_info(format); > - return info ? info->hsub : 1; > -} > -EXPORT_SYMBOL(drm_format_horz_chroma_subsampling); > - > -/** > - * drm_format_vert_chroma_subsampling - get the vertical chroma subsampling factor > - * @format: pixel format (DRM_FORMAT_*) > - * > - * Returns: > - * The vertical chroma subsampling factor for the > - * specified pixel format. > - */ > -int drm_format_vert_chroma_subsampling(uint32_t format) > -{ > - const struct drm_format_info *info; > - > - info = drm_format_info(format); > - return info ? info->vsub : 1; > -} > -EXPORT_SYMBOL(drm_format_vert_chroma_subsampling); > - > -/** > * drm_format_plane_width - width of the plane given the first plane > * @width: width of the first plane > * @format: pixel format > diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c > index 21e964f6ab5c..2530143281b2 100644 > --- a/drivers/gpu/drm/imx/ipuv3-plane.c > +++ b/drivers/gpu/drm/imx/ipuv3-plane.c > @@ -115,8 +115,8 @@ drm_plane_state_to_ubo(struct drm_plane_state *state) > cma_obj = drm_fb_cma_get_gem_obj(fb, 1); > BUG_ON(!cma_obj); > > - x /= drm_format_horz_chroma_subsampling(fb->format->format); > - y /= drm_format_vert_chroma_subsampling(fb->format->format); > + x /= fb->format->hsub; > + y /= fb->format->vsub; > > return cma_obj->paddr + fb->offsets[1] + fb->pitches[1] * y + > fb->format->cpp[1] * x - eba; > @@ -134,8 +134,8 @@ drm_plane_state_to_vbo(struct drm_plane_state *state) > cma_obj = drm_fb_cma_get_gem_obj(fb, 2); > BUG_ON(!cma_obj); > > - x /= drm_format_horz_chroma_subsampling(fb->format->format); > - y /= drm_format_vert_chroma_subsampling(fb->format->format); > + x /= fb->format->hsub; > + y /= fb->format->vsub; > > return cma_obj->paddr + fb->offsets[2] + fb->pitches[2] * y + > fb->format->cpp[2] * x - eba; > @@ -348,7 +348,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, > struct drm_framebuffer *old_fb = old_state->fb; > unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba; > bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY); > - int hsub, vsub; > int ret; > > /* Ok to disable */ > @@ -467,10 +466,8 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, > * The x/y offsets must be even in case of horizontal/vertical > * chroma subsampling. > */ > - hsub = drm_format_horz_chroma_subsampling(fb->format->format); > - vsub = drm_format_vert_chroma_subsampling(fb->format->format); > - if (((state->src.x1 >> 16) & (hsub - 1)) || > - ((state->src.y1 >> 16) & (vsub - 1))) > + if (((state->src.x1 >> 16) & (fb->format->hsub - 1)) || > + ((state->src.y1 >> 16) & (fb->format->vsub - 1))) > return -EINVAL; > break; > case DRM_FORMAT_RGB565_A8: > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c > index 6aefcd6db46b..a9492c488441 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c > @@ -553,14 +553,9 @@ static void _dpu_plane_setup_scaler(struct dpu_plane *pdpu, > struct dpu_plane_state *pstate, > const struct dpu_format *fmt, bool color_fill) > { > - uint32_t chroma_subsmpl_h, chroma_subsmpl_v; > + const struct drm_format_info *info = drm_format_info(fmt->base.pixel_format); > > /* don't chroma subsample if decimating */ > - chroma_subsmpl_h = > - drm_format_horz_chroma_subsampling(fmt->base.pixel_format); > - chroma_subsmpl_v = > - drm_format_vert_chroma_subsampling(fmt->base.pixel_format); > - > /* update scaler. calculate default config for QSEED3 */ > _dpu_plane_setup_scaler3(pdpu, pstate, > drm_rect_width(&pdpu->pipe_cfg.src_rect), > @@ -568,7 +563,7 @@ static void _dpu_plane_setup_scaler(struct dpu_plane *pdpu, > drm_rect_width(&pdpu->pipe_cfg.dst_rect), > drm_rect_height(&pdpu->pipe_cfg.dst_rect), > &pstate->scaler3_cfg, fmt, > - chroma_subsmpl_h, chroma_subsmpl_v); > + info->hsub, info->vsub); > } > > /** > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c > index be13140967b4..9d9fb6c5fd68 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c > @@ -650,10 +650,10 @@ static int calc_scalex_steps(struct drm_plane *plane, > uint32_t pixel_format, uint32_t src, uint32_t dest, > uint32_t phasex_steps[COMP_MAX]) > { > + const struct drm_format_info *info = drm_format_info(pixel_format); > struct mdp5_kms *mdp5_kms = get_kms(plane); > struct device *dev = mdp5_kms->dev->dev; > uint32_t phasex_step; > - unsigned int hsub; > int ret; > > ret = calc_phase_step(src, dest, &phasex_step); > @@ -662,11 +662,9 @@ static int calc_scalex_steps(struct drm_plane *plane, > return ret; > } > > - hsub = drm_format_horz_chroma_subsampling(pixel_format); > - > phasex_steps[COMP_0] = phasex_step; > phasex_steps[COMP_3] = phasex_step; > - phasex_steps[COMP_1_2] = phasex_step / hsub; > + phasex_steps[COMP_1_2] = phasex_step / info->hsub; > > return 0; > } > @@ -675,10 +673,10 @@ static int calc_scaley_steps(struct drm_plane *plane, > uint32_t pixel_format, uint32_t src, uint32_t dest, > uint32_t phasey_steps[COMP_MAX]) > { > + const struct drm_format_info *info = drm_format_info(pixel_format); > struct mdp5_kms *mdp5_kms = get_kms(plane); > struct device *dev = mdp5_kms->dev->dev; > uint32_t phasey_step; > - unsigned int vsub; > int ret; > > ret = calc_phase_step(src, dest, &phasey_step); > @@ -687,11 +685,9 @@ static int calc_scaley_steps(struct drm_plane *plane, > return ret; > } > > - vsub = drm_format_vert_chroma_subsampling(pixel_format); > - > phasey_steps[COMP_0] = phasey_step; > phasey_steps[COMP_3] = phasey_step; > - phasey_steps[COMP_1_2] = phasey_step / vsub; > + phasey_steps[COMP_1_2] = phasey_step / info->vsub; > > return 0; > } > @@ -699,8 +695,9 @@ static int calc_scaley_steps(struct drm_plane *plane, > static uint32_t get_scale_config(const struct mdp_format *format, > uint32_t src, uint32_t dst, bool horz) > { > + const struct drm_format_info *info = drm_format_info(format->base.pixel_format); > bool scaling = format->is_yuv ? true : (src != dst); > - uint32_t sub, pix_fmt = format->base.pixel_format; > + uint32_t sub; > uint32_t ya_filter, uv_filter; > bool yuv = format->is_yuv; > > @@ -708,8 +705,7 @@ static uint32_t get_scale_config(const struct mdp_format *format, > return 0; > > if (yuv) { > - sub = horz ? drm_format_horz_chroma_subsampling(pix_fmt) : > - drm_format_vert_chroma_subsampling(pix_fmt); > + sub = horz ? info->hsub : info->vsub; > uv_filter = ((src / sub) <= dst) ? > SCALE_FILTER_BIL : SCALE_FILTER_PCMN; > } > @@ -754,7 +750,7 @@ static void mdp5_write_pixel_ext(struct mdp5_kms *mdp5_kms, enum mdp5_pipe pipe, > uint32_t src_w, int pe_left[COMP_MAX], int pe_right[COMP_MAX], > uint32_t src_h, int pe_top[COMP_MAX], int pe_bottom[COMP_MAX]) > { > - uint32_t pix_fmt = format->base.pixel_format; > + const struct drm_format_info *info = drm_format_info(format->base.pixel_format); > uint32_t lr, tb, req; > int i; > > @@ -763,8 +759,8 @@ static void mdp5_write_pixel_ext(struct mdp5_kms *mdp5_kms, enum mdp5_pipe pipe, > uint32_t roi_h = src_h; > > if (format->is_yuv && i == COMP_1_2) { > - roi_w /= drm_format_horz_chroma_subsampling(pix_fmt); > - roi_h /= drm_format_vert_chroma_subsampling(pix_fmt); > + roi_w /= info->hsub; > + roi_h /= info->vsub; > } > > lr = (pe_left[i] >= 0) ? > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > index 72ab8d89efa4..b30b2f4efc60 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c > @@ -135,7 +135,7 @@ uint32_t mdp5_smp_calculate(struct mdp5_smp *smp, > uint32_t blkcfg = 0; > > nplanes = info->num_planes; > - hsub = drm_format_horz_chroma_subsampling(fmt); > + hsub = info->hsub; > > /* different if BWC (compressed framebuffer?) enabled: */ > nlines = 2; > diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c > index 432beddafb9e..f69c0afd6ec6 100644 > --- a/drivers/gpu/drm/msm/msm_fb.c > +++ b/drivers/gpu/drm/msm/msm_fb.c > @@ -145,16 +145,12 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, > struct drm_framebuffer *fb; > const struct msm_format *format; > int ret, i, n; > - unsigned int hsub, vsub; > > DBG("create framebuffer: dev=%p, mode_cmd=%p (%dx%d@%4.4s)", > dev, mode_cmd, mode_cmd->width, mode_cmd->height, > (char *)&mode_cmd->pixel_format); > > n = info->num_planes; > - hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format); > - vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format); > - > format = kms->funcs->get_format(kms, mode_cmd->pixel_format, > mode_cmd->modifier[0]); > if (!format) { > @@ -180,8 +176,8 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, > } > > for (i = 0; i < n; i++) { > - unsigned int width = mode_cmd->width / (i ? hsub : 1); > - unsigned int height = mode_cmd->height / (i ? vsub : 1); > + unsigned int width = mode_cmd->width / (i ? info->hsub : 1); > + unsigned int height = mode_cmd->height / (i ? info->vsub : 1); > unsigned int min_size; > > min_size = (height - 1) * mode_cmd->pitches[i] > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > index 606d176d5d96..c318fae28581 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > @@ -79,18 +79,13 @@ rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, > struct drm_framebuffer *fb; > struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER]; > struct drm_gem_object *obj; > - unsigned int hsub; > - unsigned int vsub; > int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER); > int ret; > int i; > > - hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format); > - vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format); > - > for (i = 0; i < num_planes; i++) { > - unsigned int width = mode_cmd->width / (i ? hsub : 1); > - unsigned int height = mode_cmd->height / (i ? vsub : 1); > + unsigned int width = mode_cmd->width / (i ? info->hsub : 1); > + unsigned int height = mode_cmd->height / (i ? info->vsub : 1); > unsigned int min_size; > > obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]); > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index c7d4c6073ea5..88c3902057f3 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -317,21 +317,18 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win, > uint32_t src_w, uint32_t src_h, uint32_t dst_w, > uint32_t dst_h, uint32_t pixel_format) > { > + const struct drm_format_info *info = drm_format_info(pixel_format); > uint16_t yrgb_hor_scl_mode, yrgb_ver_scl_mode; > uint16_t cbcr_hor_scl_mode = SCALE_NONE; > uint16_t cbcr_ver_scl_mode = SCALE_NONE; > - int hsub = drm_format_horz_chroma_subsampling(pixel_format); > - int vsub = drm_format_vert_chroma_subsampling(pixel_format); > - const struct drm_format_info *info; > bool is_yuv = false; > - uint16_t cbcr_src_w = src_w / hsub; > - uint16_t cbcr_src_h = src_h / vsub; > + uint16_t cbcr_src_w = src_w / info->hsub; > + uint16_t cbcr_src_h = src_h / info->vsub; > uint16_t vsu_mode; > uint16_t lb_mode; > uint32_t val; > int vskiplines; > > - info = drm_format_info(pixel_format); > > if (info->is_yuv) > is_yuv = true; > @@ -819,8 +816,8 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > (state->rotation & DRM_MODE_REFLECT_X) ? 1 : 0); > > if (is_yuv) { > - int hsub = drm_format_horz_chroma_subsampling(fb->format->format); > - int vsub = drm_format_vert_chroma_subsampling(fb->format->format); > + int hsub = fb->format->hsub; > + int vsub = fb->format->vsub; > int bpp = fb->format->cpp[1]; > > uv_obj = fb->obj[1]; > diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c > index bc8f9afd1b5f..ddf2c764f24c 100644 > --- a/drivers/gpu/drm/tegra/fb.c > +++ b/drivers/gpu/drm/tegra/fb.c > @@ -132,18 +132,15 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm, > const struct drm_mode_fb_cmd2 *cmd) > { > const struct drm_format_info *info = drm_get_format_info(dev, cmd); > - unsigned int hsub, vsub, i; > struct tegra_bo *planes[4]; > struct drm_gem_object *gem; > struct drm_framebuffer *fb; > + unsigned int i; > int err; > > - hsub = drm_format_horz_chroma_subsampling(cmd->pixel_format); > - vsub = drm_format_vert_chroma_subsampling(cmd->pixel_format); > - > for (i = 0; i < info->num_planes; i++) { > - unsigned int width = cmd->width / (i ? hsub : 1); > - unsigned int height = cmd->height / (i ? vsub : 1); > + unsigned int width = cmd->width / (i ? info->hsub : 1); > + unsigned int height = cmd->height / (i ? info->vsub : 1); > unsigned int size, bpp; > > gem = drm_gem_object_lookup(file, cmd->handles[i]); > diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c > index 138a9ff23b70..6605c1b7370d 100644 > --- a/drivers/gpu/drm/vc4/vc4_plane.c > +++ b/drivers/gpu/drm/vc4/vc4_plane.c > @@ -310,10 +310,10 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) > struct drm_framebuffer *fb = state->fb; > struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); > u32 subpixel_src_mask = (1 << 16) - 1; > - u32 format = fb->format->format; > int num_planes = fb->format->num_planes; > struct drm_crtc_state *crtc_state; > - u32 h_subsample, v_subsample; > + u32 h_subsample = fb->format->hsub; > + u32 v_subsample = fb->format->vsub; > int i, ret; > > crtc_state = drm_atomic_get_existing_crtc_state(state->state, > @@ -328,9 +328,6 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) > if (ret) > return ret; > > - h_subsample = drm_format_horz_chroma_subsampling(format); > - v_subsample = drm_format_vert_chroma_subsampling(format); > - > for (i = 0; i < num_planes; i++) > vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; > > @@ -538,7 +535,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, > const struct hvs_format *format = vc4_get_hvs_format(fb->format->format); > u64 base_format_mod = fourcc_mod_broadcom_mod(fb->modifier); > int num_planes = fb->format->num_planes; > - u32 h_subsample, v_subsample; > + u32 h_subsample = fb->format->hsub; > + u32 v_subsample = fb->format->vsub; > bool mix_plane_alpha; > bool covers_screen; > u32 scl0, scl1, pitch0; > @@ -568,9 +566,6 @@ static int vc4_plane_mode_set(struct drm_plane *plane, > scl1 = vc4_get_scl_field(state, 0); > } > > - h_subsample = drm_format_horz_chroma_subsampling(format->drm); > - v_subsample = drm_format_vert_chroma_subsampling(format->drm); > - > rotation = drm_rotation_simplify(state->rotation, > DRM_MODE_ROTATE_0 | > DRM_MODE_REFLECT_X | > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h > index 41779b327d91..eeec449d6c6a 100644 > --- a/include/drm/drm_fourcc.h > +++ b/include/drm/drm_fourcc.h > @@ -269,8 +269,6 @@ 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_horz_chroma_subsampling(uint32_t format); > -int drm_format_vert_chroma_subsampling(uint32_t format); > 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, -- 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: [RFC PATCH 02/20] drm: Remove users of drm_format_(horz|vert)_chroma_subsampling Date: Wed, 20 Mar 2019 15:19:06 +0100 Message-ID: <1f7df78264eb964ae941f572b7affde34bfc3538.camel@bootlin.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by gabe.freedesktop.org (Postfix) with ESMTPS id E021789F03 for ; Wed, 20 Mar 2019 14:19:10 +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: Maxime Ripard , Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Mauro Carvalho Chehab Cc: Sakari Ailus , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org SGksCgpMZSBtYXJkaSAxOSBtYXJzIDIwMTkgw6AgMjI6NTcgKzAxMDAsIE1heGltZSBSaXBhcmQg YSDDqWNyaXQgOgo+IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcgYW5kIGRybV9m b3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcKPiBhcmUgYmFzaWNhbGx5IGEgbG9va3VwIGlu IHRoZSBkcm1fZm9ybWF0X2luZm8gdGFibGUgcGx1cyBhbiBhY2Nlc3MgdG8gdGhlCj4gaHN1YiBh bmQgdnN1YiBmaWVsZHMgb2YgdGhlIGFwcHJvcHJpYXRlIGVudHJ5Lgo+IAo+IE1vc3QgZHJpdmVy cyBhcmUgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGlsZSBoYXZpbmcgYWNjZXNzIHRvIHRoZSBlbnRy eQo+IGFscmVhZHksIHdoaWNoIG1lYW5zIHRoYXQgd2Ugd2lsbCBwZXJmb3JtIGFuIHVubmVjZXNz YXJ5IGxvb2t1cC4gUmVtb3ZpbmcKPiB0aGUgY2FsbCB0byB0aGVzZSBmdW5jdGlvbnMgaXMgdGhl cmVmb3JlIG1vcmUgZWZmaWNpZW50Lgo+IAo+IFNvbWUgZHJpdmVycyB3aWxsIG5vdCBoYXZlIGFj Y2VzcyB0byB0aGF0IGVudHJ5IGluIHRoZSBmdW5jdGlvbiwgYnV0IGluCj4gdGhpcyBjYXNlIHRo ZSBvdmVyaGVhZCBpcyBtaW5pbWFsICh3ZSBqdXN0IGhhdmUgdG8gY2FsbCBkcm1fZm9ybWF0X2lu Zm8oKQo+IHRvIHBlcmZvcm0gdGhlIGxvb2t1cCkgYW5kIHdlIGNhbiBldmVuIGF2b2lkIG11bHRp cGxlLCBpbmVmZmljaWVudCBsb29rdXBzCj4gaW4gc29tZSBwbGFjZXMgdGhhdCBuZWVkIG11bHRp cGxlIGZpZWxkcyBmcm9tIHRoZSBkcm1fZm9ybWF0X2luZm8KPiBzdHJ1Y3R1cmUuCj4gCj4gVGhp cyBpcyBhbXBsaWZpZWQgYnkgdGhlIGZhY3QgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBjYWxs ZXJzIHdpbGwgaGF2ZQo+IHRvIHJldHJpZXZlIGJvdGggdGhlIHZzdWIgYW5kIGhzdWIgZmllbGRz LCBtZWFuaW5nIHRoYXQgdGhleSB3b3VsZCBwZXJmb3JtCj4gdHdpY2UgdGhlIGxvb2t1cC4KCkNo ZWVycyBmb3IgbnVraW5nIHRoZXNlIHR3byBhcyB3ZWxsIQoKUmV2aWV3ZWQtYnk6IFBhdWwgS29j aWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KCkNoZWVycywKClBhdWwK Cj4gU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290bGluLmNv bT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX3BsYW5l LmMgfCAgOSArLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jICAgICAgICAgICAg ICAgICAgICB8IDM0ICstLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2lteC9p cHV2My1wbGFuZS5jICAgICAgICAgICAgICAgfCAxNSArKystLS0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgICB8ICA5ICstLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYyAgICAgIHwgMjQgKysrKystLS0tLS0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jICAgICAgICB8ICAy ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMgICAgICAgICAgICAgICAgICAgIHwg IDggKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMgICAg ICB8ICA5ICstLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9w LmMgICAgIHwgMTMgKystLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIuYyAgICAgICAg ICAgICAgICAgICAgICB8ICA5ICstLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5l LmMgICAgICAgICAgICAgICAgIHwgMTMgKystLS0tLQo+ICBpbmNsdWRlL2RybS9kcm1fZm91cmNj LmggICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCj4gIDEyIGZpbGVzIGNoYW5nZWQsIDM3 IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYwo+IGluZGV4IGU4MzZlMmRlMzVjZS4u ZmRkNjA3YWQyN2ZlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9h dG1lbF9obGNkY19wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0 bWVsX2hsY2RjX3BsYW5lLmMKPiBAQCAtNjAzLDggKzYwMyw2IEBAIHN0YXRpYyBpbnQgYXRtZWxf aGxjZGNfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gIAljb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiAgCXVuc2lnbmVkIGludCB0bXA7Cj4gLQlpbnQgaHN1YiA9IDE7Cj4gLQlp bnQgdnN1YiA9IDE7Cj4gIAlpbnQgcmV0Owo+ICAJaW50IGk7Cj4gIAo+IEBAIC02NDIsMTMgKzY0 MCwxMCBAQCBzdGF0aWMgaW50IGF0bWVsX2hsY2RjX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX3BsYW5lICpwLAo+ICAJaWYgKHN0YXRlLT5ucGxhbmVzID4gQVRNRUxfSExDRENfTEFZRVJf TUFYX1BMQU5FUykKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQloc3ViID0gZHJtX2Zvcm1h dF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmYi0+Zm9ybWF0LT5mb3JtYXQpOwo+IC0JdnN1YiA9 IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsK PiAtCj4gIAlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm5wbGFuZXM7IGkrKykgewo+ICAJCXVuc2ln bmVkIGludCBvZmZzZXQgPSAwOwo+IC0JCWludCB4ZGl2ID0gaSA/IGhzdWIgOiAxOwo+IC0JCWlu dCB5ZGl2ID0gaSA/IHZzdWIgOiAxOwo+ICsJCWludCB4ZGl2ID0gaSA/IGZiLT5mb3JtYXQtPmhz dWIgOiAxOwo+ICsJCWludCB5ZGl2ID0gaSA/IGZiLT5mb3JtYXQtPnZzdWIgOiAxOwo+ICAKPiAg CQlzdGF0ZS0+YnBwW2ldID0gZmItPmZvcm1hdC0+Y3BwW2ldOwo+ICAJCWlmICghc3RhdGUtPmJw cFtpXSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKPiBpbmRleCAyMmM3ZmE0NTlmNjUuLjA0YmUzMzBiN2Nh ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+IEBAIC0zMjYsNDAgKzMyNiw2IEBAIGludCBkcm1f Zm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKPiAgRVhQT1JUX1NZ TUJPTChkcm1fZm9ybWF0X3BsYW5lX2NwcCk7Cj4gIAo+ICAvKioKPiAtICogZHJtX2Zvcm1hdF9o b3J6X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUgaG9yaXpvbnRhbCBjaHJvbWEgc3Vic2Ft cGxpbmcgZmFjdG9yCj4gLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQo+ IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBUaGUgaG9yaXpvbnRhbCBjaHJvbWEgc3Vic2FtcGxp bmcgZmFjdG9yIGZvciB0aGUKPiAtICogc3BlY2lmaWVkIHBpeGVsIGZvcm1hdC4KPiAtICovCj4g LWludCBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkK PiAtewo+IC0JY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbzsKPiAtCj4gLQlpbmZv ID0gZHJtX2Zvcm1hdF9pbmZvKGZvcm1hdCk7Cj4gLQlyZXR1cm4gaW5mbyA/IGluZm8tPmhzdWIg OiAxOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1w bGluZyk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGlu ZyAtIGdldCB0aGUgdmVydGljYWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgo+IC0gKiBAZm9y bWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiAtICoKPiAtICogUmV0dXJuczoKPiAt ICogVGhlIHZlcnRpY2FsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IgZm9yIHRoZQo+IC0gKiBz cGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+IC0gKi8KPiAtaW50IGRybV9mb3JtYXRfdmVydF9jaHJv bWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQo+IC17Cj4gLQljb25zdCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvICppbmZvOwo+IC0KPiAtCWluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm9ybWF0 KTsKPiAtCXJldHVybiBpbmZvID8gaW5mby0+dnN1YiA6IDE7Cj4gLX0KPiAtRVhQT1JUX1NZTUJP TChkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKTsKPiAtCj4gLS8qKgo+ICAgKiBk cm1fZm9ybWF0X3BsYW5lX3dpZHRoIC0gd2lkdGggb2YgdGhlIHBsYW5lIGdpdmVuIHRoZSBmaXJz dCBwbGFuZQo+ICAgKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBmaXJzdCBwbGFuZQo+ICAgKiBAZm9y bWF0OiBwaXhlbCBmb3JtYXQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2 My1wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jCj4gaW5kZXggMjFl OTY0ZjZhYjVjLi4yNTMwMTQzMjgxYjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lt eC9pcHV2My1wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5j Cj4gQEAgLTExNSw4ICsxMTUsOCBAQCBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAJY21hX29iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoo ZmIsIDEpOwo+ICAJQlVHX09OKCFjbWFfb2JqKTsKPiAgCj4gLQl4IC89IGRybV9mb3JtYXRfaG9y el9jaHJvbWFfc3Vic2FtcGxpbmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiAtCXkgLz0gZHJtX2Zv cm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmYi0+Zm9ybWF0LT5mb3JtYXQpOwo+ICsJeCAv PSBmYi0+Zm9ybWF0LT5oc3ViOwo+ICsJeSAvPSBmYi0+Zm9ybWF0LT52c3ViOwo+ICAKPiAgCXJl dHVybiBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzWzFdICsgZmItPnBpdGNoZXNbMV0gKiB5 ICsKPiAgCSAgICAgICBmYi0+Zm9ybWF0LT5jcHBbMV0gKiB4IC0gZWJhOwo+IEBAIC0xMzQsOCAr MTM0LDggQEAgZHJtX3BsYW5lX3N0YXRlX3RvX3ZibyhzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKPiAgCWNtYV9vYmogPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAyKTsKPiAgCUJV R19PTighY21hX29iaik7Cj4gIAo+IC0JeCAvPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNh bXBsaW5nKGZiLT5mb3JtYXQtPmZvcm1hdCk7Cj4gLQl5IC89IGRybV9mb3JtYXRfdmVydF9jaHJv bWFfc3Vic2FtcGxpbmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiArCXggLz0gZmItPmZvcm1hdC0+ aHN1YjsKPiArCXkgLz0gZmItPmZvcm1hdC0+dnN1YjsKPiAgCj4gIAlyZXR1cm4gY21hX29iai0+ cGFkZHIgKyBmYi0+b2Zmc2V0c1syXSArIGZiLT5waXRjaGVzWzJdICogeSArCj4gIAkgICAgICAg ZmItPmZvcm1hdC0+Y3BwWzJdICogeCAtIGViYTsKPiBAQCAtMzQ4LDcgKzM0OCw2IEBAIHN0YXRp YyBpbnQgaXB1X3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IG9sZF9zdGF0ZS0+ZmI7Cj4gIAl1bnNp Z25lZCBsb25nIGViYSwgdWJvLCB2Ym8sIG9sZF91Ym8sIG9sZF92Ym8sIGFscGhhX2ViYTsKPiAg CWJvb2wgY2FuX3Bvc2l0aW9uID0gKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX09WRVJM QVkpOwo+IC0JaW50IGhzdWIsIHZzdWI7Cj4gIAlpbnQgcmV0Owo+ICAKPiAgCS8qIE9rIHRvIGRp c2FibGUgKi8KPiBAQCAtNDY3LDEwICs0NjYsOCBAQCBzdGF0aWMgaW50IGlwdV9wbGFuZV9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJICogVGhlIHgveSBvZmZzZXRz IG11c3QgYmUgZXZlbiBpbiBjYXNlIG9mIGhvcml6b250YWwvdmVydGljYWwKPiAgCQkgKiBjaHJv bWEgc3Vic2FtcGxpbmcuCj4gIAkJICovCj4gLQkJaHN1YiA9IGRybV9mb3JtYXRfaG9yel9jaHJv bWFfc3Vic2FtcGxpbmcoZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiAtCQl2c3ViID0gZHJtX2Zvcm1h dF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmYi0+Zm9ybWF0LT5mb3JtYXQpOwo+IC0JCWlmICgo KHN0YXRlLT5zcmMueDEgPj4gMTYpICYgKGhzdWIgLSAxKSkgfHwKPiAtCQkgICAgKChzdGF0ZS0+ c3JjLnkxID4+IDE2KSAmICh2c3ViIC0gMSkpKQo+ICsJCWlmICgoKHN0YXRlLT5zcmMueDEgPj4g MTYpICYgKGZiLT5mb3JtYXQtPmhzdWIgLSAxKSkgfHwKPiArCQkgICAgKChzdGF0ZS0+c3JjLnkx ID4+IDE2KSAmIChmYi0+Zm9ybWF0LT52c3ViIC0gMSkpKQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsK PiAgCQlicmVhazsKPiAgCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjVfQTg6Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBpbmRleCA2YWVmY2Q2ZGI0NmIuLmE5NDky YzQ4ODQ0MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5j Cj4gQEAgLTU1MywxNCArNTUzLDkgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9zY2Fs ZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKPiAgCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpw c3RhdGUsCj4gIAkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwgYm9vbCBjb2xvcl9maWxs KQo+ICB7Cj4gLQl1aW50MzJfdCBjaHJvbWFfc3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92Owo+ ICsJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhm bXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKPiAgCj4gIAkvKiBkb24ndCBjaHJvbWEgc3Vic2FtcGxl IGlmIGRlY2ltYXRpbmcgKi8KPiAtCWNocm9tYV9zdWJzbXBsX2ggPQo+IC0JCWRybV9mb3JtYXRf aG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCk7Cj4gLQljaHJv bWFfc3Vic21wbF92ID0KPiAtCQlkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZt dC0+YmFzZS5waXhlbF9mb3JtYXQpOwo+IC0KPiAgCS8qIHVwZGF0ZSBzY2FsZXIuIGNhbGN1bGF0 ZSBkZWZhdWx0IGNvbmZpZyBmb3IgUVNFRUQzICovCj4gIAlfZHB1X3BsYW5lX3NldHVwX3NjYWxl cjMocGRwdSwgcHN0YXRlLAo+ICAJCQlkcm1fcmVjdF93aWR0aCgmcGRwdS0+cGlwZV9jZmcuc3Jj X3JlY3QpLAo+IEBAIC01NjgsNyArNTYzLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXR1 cF9zY2FsZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKPiAgCQkJZHJtX3JlY3Rfd2lkdGgoJnBk cHUtPnBpcGVfY2ZnLmRzdF9yZWN0KSwKPiAgCQkJZHJtX3JlY3RfaGVpZ2h0KCZwZHB1LT5waXBl X2NmZy5kc3RfcmVjdCksCj4gIAkJCSZwc3RhdGUtPnNjYWxlcjNfY2ZnLCBmbXQsCj4gLQkJCWNo cm9tYV9zdWJzbXBsX2gsIGNocm9tYV9zdWJzbXBsX3YpOwo+ICsJCQlpbmZvLT5oc3ViLCBpbmZv LT52c3ViKTsKPiAgfQo+ICAKPiAgLyoqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1 L21kcDVfcGxhbmUuYwo+IGluZGV4IGJlMTMxNDA5NjdiNC4uOWQ5ZmI2YzVmZDY4IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYwo+IEBAIC02NTAsMTAg KzY1MCwxMCBAQCBzdGF0aWMgaW50IGNhbGNfc2NhbGV4X3N0ZXBzKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAJCXVpbnQzMl90IHBpeGVsX2Zvcm1hdCwgdWludDMyX3Qgc3JjLCB1aW50MzJf dCBkZXN0LAo+ICAJCXVpbnQzMl90IHBoYXNleF9zdGVwc1tDT01QX01BWF0pCj4gIHsKPiArCWNv bnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8ocGl4ZWxf Zm9ybWF0KTsKPiAgCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKHBsYW5lKTsK PiAgCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1kcDVfa21zLT5kZXYtPmRldjsKPiAgCXVpbnQzMl90 IHBoYXNleF9zdGVwOwo+IC0JdW5zaWduZWQgaW50IGhzdWI7Cj4gIAlpbnQgcmV0Owo+ICAKPiAg CXJldCA9IGNhbGNfcGhhc2Vfc3RlcChzcmMsIGRlc3QsICZwaGFzZXhfc3RlcCk7Cj4gQEAgLTY2 MiwxMSArNjYyLDkgQEAgc3RhdGljIGludCBjYWxjX3NjYWxleF9zdGVwcyhzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiAtCWhzdWIgPSBkcm1fZm9y bWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHBpeGVsX2Zvcm1hdCk7Cj4gLQo+ICAJcGhhc2V4 X3N0ZXBzW0NPTVBfMF0gICA9IHBoYXNleF9zdGVwOwo+ICAJcGhhc2V4X3N0ZXBzW0NPTVBfM10g ICA9IHBoYXNleF9zdGVwOwo+IC0JcGhhc2V4X3N0ZXBzW0NPTVBfMV8yXSA9IHBoYXNleF9zdGVw IC8gaHN1YjsKPiArCXBoYXNleF9zdGVwc1tDT01QXzFfMl0gPSBwaGFzZXhfc3RlcCAvIGluZm8t PmhzdWI7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtNjc1LDEwICs2NzMsMTAgQEAgc3Rh dGljIGludCBjYWxjX3NjYWxleV9zdGVwcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQl1 aW50MzJfdCBwaXhlbF9mb3JtYXQsIHVpbnQzMl90IHNyYywgdWludDMyX3QgZGVzdCwKPiAgCQl1 aW50MzJfdCBwaGFzZXlfc3RlcHNbQ09NUF9NQVhdKQo+ICB7Cj4gKwljb25zdCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvICppbmZvID0gZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7Cj4gIAlz dHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhwbGFuZSk7Cj4gIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBtZHA1X2ttcy0+ZGV2LT5kZXY7Cj4gIAl1aW50MzJfdCBwaGFzZXlfc3RlcDsK PiAtCXVuc2lnbmVkIGludCB2c3ViOwo+ICAJaW50IHJldDsKPiAgCj4gIAlyZXQgPSBjYWxjX3Bo YXNlX3N0ZXAoc3JjLCBkZXN0LCAmcGhhc2V5X3N0ZXApOwo+IEBAIC02ODcsMTEgKzY4NSw5IEBA IHN0YXRpYyBpbnQgY2FsY19zY2FsZXlfc3RlcHMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g IAkJcmV0dXJuIHJldDsKPiAgCX0KPiAgCj4gLQl2c3ViID0gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9t YV9zdWJzYW1wbGluZyhwaXhlbF9mb3JtYXQpOwo+IC0KPiAgCXBoYXNleV9zdGVwc1tDT01QXzBd ICAgPSBwaGFzZXlfc3RlcDsKPiAgCXBoYXNleV9zdGVwc1tDT01QXzNdICAgPSBwaGFzZXlfc3Rl cDsKPiAtCXBoYXNleV9zdGVwc1tDT01QXzFfMl0gPSBwaGFzZXlfc3RlcCAvIHZzdWI7Cj4gKwlw aGFzZXlfc3RlcHNbQ09NUF8xXzJdID0gcGhhc2V5X3N0ZXAgLyBpbmZvLT52c3ViOwo+ICAKPiAg CXJldHVybiAwOwo+ICB9Cj4gQEAgLTY5OSw4ICs2OTUsOSBAQCBzdGF0aWMgaW50IGNhbGNfc2Nh bGV5X3N0ZXBzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICBzdGF0aWMgdWludDMyX3QgZ2V0 X3NjYWxlX2NvbmZpZyhjb25zdCBzdHJ1Y3QgbWRwX2Zvcm1hdCAqZm9ybWF0LAo+ICAJCXVpbnQz Ml90IHNyYywgdWludDMyX3QgZHN0LCBib29sIGhvcnopCj4gIHsKPiArCWNvbnN0IHN0cnVjdCBk cm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm9ybWF0LT5iYXNlLnBpeGVs X2Zvcm1hdCk7Cj4gIAlib29sIHNjYWxpbmcgPSBmb3JtYXQtPmlzX3l1diA/IHRydWUgOiAoc3Jj ICE9IGRzdCk7Cj4gLQl1aW50MzJfdCBzdWIsIHBpeF9mbXQgPSBmb3JtYXQtPmJhc2UucGl4ZWxf Zm9ybWF0Owo+ICsJdWludDMyX3Qgc3ViOwo+ICAJdWludDMyX3QgeWFfZmlsdGVyLCB1dl9maWx0 ZXI7Cj4gIAlib29sIHl1diA9IGZvcm1hdC0+aXNfeXV2Owo+ICAKPiBAQCAtNzA4LDggKzcwNSw3 IEBAIHN0YXRpYyB1aW50MzJfdCBnZXRfc2NhbGVfY29uZmlnKGNvbnN0IHN0cnVjdCBtZHBfZm9y bWF0ICpmb3JtYXQsCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJaWYgKHl1dikgewo+IC0JCXN1YiA9 IGhvcnogPyBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHBpeF9mbXQpIDoKPiAt CQkJICAgICBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHBpeF9mbXQpOwo+ICsJ CXN1YiA9IGhvcnogPyBpbmZvLT5oc3ViIDogaW5mby0+dnN1YjsKPiAgCQl1dl9maWx0ZXIgPSAo KHNyYyAvIHN1YikgPD0gZHN0KSA/Cj4gIAkJCQkgICBTQ0FMRV9GSUxURVJfQklMIDogU0NBTEVf RklMVEVSX1BDTU47Cj4gIAl9Cj4gQEAgLTc1NCw3ICs3NTAsNyBAQCBzdGF0aWMgdm9pZCBtZHA1 X3dyaXRlX3BpeGVsX2V4dChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zLCBlbnVtIG1kcDVfcGlw ZSBwaXBlLAo+ICAJdWludDMyX3Qgc3JjX3csIGludCBwZV9sZWZ0W0NPTVBfTUFYXSwgaW50IHBl X3JpZ2h0W0NPTVBfTUFYXSwKPiAgCXVpbnQzMl90IHNyY19oLCBpbnQgcGVfdG9wW0NPTVBfTUFY XSwgaW50IHBlX2JvdHRvbVtDT01QX01BWF0pCj4gIHsKPiAtCXVpbnQzMl90IHBpeF9mbXQgPSBm b3JtYXQtPmJhc2UucGl4ZWxfZm9ybWF0Owo+ICsJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5m byAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhmb3JtYXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKPiAg CXVpbnQzMl90IGxyLCB0YiwgcmVxOwo+ICAJaW50IGk7Cj4gIAo+IEBAIC03NjMsOCArNzU5LDgg QEAgc3RhdGljIHZvaWQgbWRwNV93cml0ZV9waXhlbF9leHQoc3RydWN0IG1kcDVfa21zICptZHA1 X2ttcywgZW51bSBtZHA1X3BpcGUgcGlwZSwKPiAgCQl1aW50MzJfdCByb2lfaCA9IHNyY19oOwo+ ICAKPiAgCQlpZiAoZm9ybWF0LT5pc195dXYgJiYgaSA9PSBDT01QXzFfMikgewo+IC0JCQlyb2lf dyAvPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHBpeF9mbXQpOwo+IC0JCQly b2lfaCAvPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHBpeF9mbXQpOwo+ICsJ CQlyb2lfdyAvPSBpbmZvLT5oc3ViOwo+ICsJCQlyb2lfaCAvPSBpbmZvLT52c3ViOwo+ICAJCX0K PiAgCj4gIAkJbHIgID0gKHBlX2xlZnRbaV0gPj0gMCkgPwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL21kcDUvbWRwNV9zbXAuYwo+IGluZGV4IDcyYWI4ZDg5ZWZhNC4uYjMwYjJmNGVmYzYwIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jCj4gQEAgLTEzNSw3 ICsxMzUsNyBAQCB1aW50MzJfdCBtZHA1X3NtcF9jYWxjdWxhdGUoc3RydWN0IG1kcDVfc21wICpz bXAsCj4gIAl1aW50MzJfdCBibGtjZmcgPSAwOwo+ICAKPiAgCW5wbGFuZXMgPSBpbmZvLT5udW1f cGxhbmVzOwo+IC0JaHN1YiA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm10 KTsKPiArCWhzdWIgPSBpbmZvLT5oc3ViOwo+ICAKPiAgCS8qIGRpZmZlcmVudCBpZiBCV0MgKGNv bXByZXNzZWQgZnJhbWVidWZmZXI/KSBlbmFibGVkOiAqLwo+ICAJbmxpbmVzID0gMjsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2ZiLmMKPiBpbmRleCA0MzJiZWRkYWZiOWUuLmY2OWMwYWZkNmVjNiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZmIuYwo+IEBAIC0xNDUsMTYgKzE0NSwxMiBAQCBzdGF0aWMgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqbXNtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICAJY29uc3Qgc3RydWN0IG1zbV9mb3Jt YXQgKmZvcm1hdDsKPiAgCWludCByZXQsIGksIG47Cj4gLQl1bnNpZ25lZCBpbnQgaHN1YiwgdnN1 YjsKPiAgCj4gIAlEQkcoImNyZWF0ZSBmcmFtZWJ1ZmZlcjogZGV2PSVwLCBtb2RlX2NtZD0lcCAo JWR4JWRAJTQuNHMpIiwKPiAgCQkJZGV2LCBtb2RlX2NtZCwgbW9kZV9jbWQtPndpZHRoLCBtb2Rl X2NtZC0+aGVpZ2h0LAo+ICAJCQkoY2hhciAqKSZtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KTsKPiAg Cj4gIAluID0gaW5mby0+bnVtX3BsYW5lczsKPiAtCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hy b21hX3N1YnNhbXBsaW5nKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpOwo+IC0JdnN1YiA9IGRybV9m b3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCk7Cj4g LQo+ICAJZm9ybWF0ID0ga21zLT5mdW5jcy0+Z2V0X2Zvcm1hdChrbXMsIG1vZGVfY21kLT5waXhl bF9mb3JtYXQsCj4gIAkJCW1vZGVfY21kLT5tb2RpZmllclswXSk7Cj4gIAlpZiAoIWZvcm1hdCkg ewo+IEBAIC0xODAsOCArMTc2LDggQEAgc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm1z bV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAl9Cj4gIAo+ICAJ Zm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+IC0JCXVuc2lnbmVkIGludCB3aWR0aCA9IG1vZGVf Y21kLT53aWR0aCAvIChpID8gaHN1YiA6IDEpOwo+IC0JCXVuc2lnbmVkIGludCBoZWlnaHQgPSBt b2RlX2NtZC0+aGVpZ2h0IC8gKGkgPyB2c3ViIDogMSk7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRo ID0gbW9kZV9jbWQtPndpZHRoIC8gKGkgPyBpbmZvLT5oc3ViIDogMSk7Cj4gKwkJdW5zaWduZWQg aW50IGhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQgLyAoaSA/IGluZm8tPnZzdWIgOiAxKTsKPiAg CQl1bnNpZ25lZCBpbnQgbWluX3NpemU7Cj4gIAo+ICAJCW1pbl9zaXplID0gKGhlaWdodCAtIDEp ICogbW9kZV9jbWQtPnBpdGNoZXNbaV0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9mYi5jCj4gaW5kZXggNjA2ZDE3NmQ1ZDk2Li5jMzE4ZmFlMjg1ODEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jCj4gQEAgLTc5LDE4ICs3 OSwxMyBAQCByb2NrY2hpcF91c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi Owo+ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmpzW1JPQ0tDSElQX01BWF9GQl9CVUZGRVJd Owo+ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQl1bnNpZ25lZCBpbnQgaHN1YjsK PiAtCXVuc2lnbmVkIGludCB2c3ViOwo+ICAJaW50IG51bV9wbGFuZXMgPSBtaW5fdChpbnQsIGlu Zm8tPm51bV9wbGFuZXMsIFJPQ0tDSElQX01BWF9GQl9CVUZGRVIpOwo+ICAJaW50IHJldDsKPiAg CWludCBpOwo+ICAKPiAtCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5n KG1vZGVfY21kLT5waXhlbF9mb3JtYXQpOwo+IC0JdnN1YiA9IGRybV9mb3JtYXRfdmVydF9jaHJv bWFfc3Vic2FtcGxpbmcobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCk7Cj4gLQo+ICAJZm9yIChpID0g MDsgaSA8IG51bV9wbGFuZXM7IGkrKykgewo+IC0JCXVuc2lnbmVkIGludCB3aWR0aCA9IG1vZGVf Y21kLT53aWR0aCAvIChpID8gaHN1YiA6IDEpOwo+IC0JCXVuc2lnbmVkIGludCBoZWlnaHQgPSBt b2RlX2NtZC0+aGVpZ2h0IC8gKGkgPyB2c3ViIDogMSk7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRo ID0gbW9kZV9jbWQtPndpZHRoIC8gKGkgPyBpbmZvLT5oc3ViIDogMSk7Cj4gKwkJdW5zaWduZWQg aW50IGhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQgLyAoaSA/IGluZm8tPnZzdWIgOiAxKTsKPiAg CQl1bnNpZ25lZCBpbnQgbWluX3NpemU7Cj4gIAo+ICAJCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xv b2t1cChmaWxlX3ByaXYsIG1vZGVfY21kLT5oYW5kbGVzW2ldKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKPiBpbmRleCBjN2Q0YzYwNzNlYTUuLjg4YzM5 MDIwNTdmMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92 b3AuYwo+IEBAIC0zMTcsMjEgKzMxNywxOCBAQCBzdGF0aWMgdm9pZCBzY2xfdm9wX2NhbF9zY2xf ZmFjKHN0cnVjdCB2b3AgKnZvcCwgY29uc3Qgc3RydWN0IHZvcF93aW5fZGF0YSAqd2luLAo+ICAJ CQkgICAgIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCwgdWludDMyX3QgZHN0X3csCj4g IAkJCSAgICAgdWludDMyX3QgZHN0X2gsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKPiAgewo+ICsJ Y29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhwaXhl bF9mb3JtYXQpOwo+ICAJdWludDE2X3QgeXJnYl9ob3Jfc2NsX21vZGUsIHlyZ2JfdmVyX3NjbF9t b2RlOwo+ICAJdWludDE2X3QgY2Jjcl9ob3Jfc2NsX21vZGUgPSBTQ0FMRV9OT05FOwo+ICAJdWlu dDE2X3QgY2Jjcl92ZXJfc2NsX21vZGUgPSBTQ0FMRV9OT05FOwo+IC0JaW50IGhzdWIgPSBkcm1f Zm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHBpeGVsX2Zvcm1hdCk7Cj4gLQlpbnQgdnN1 YiA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcocGl4ZWxfZm9ybWF0KTsKPiAt CWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4gIAlib29sIGlzX3l1diA9IGZh bHNlOwo+IC0JdWludDE2X3QgY2Jjcl9zcmNfdyA9IHNyY193IC8gaHN1YjsKPiAtCXVpbnQxNl90 IGNiY3Jfc3JjX2ggPSBzcmNfaCAvIHZzdWI7Cj4gKwl1aW50MTZfdCBjYmNyX3NyY193ID0gc3Jj X3cgLyBpbmZvLT5oc3ViOwo+ICsJdWludDE2X3QgY2Jjcl9zcmNfaCA9IHNyY19oIC8gaW5mby0+ dnN1YjsKPiAgCXVpbnQxNl90IHZzdV9tb2RlOwo+ICAJdWludDE2X3QgbGJfbW9kZTsKPiAgCXVp bnQzMl90IHZhbDsKPiAgCWludCB2c2tpcGxpbmVzOwo+ICAKPiAtCWluZm8gPSBkcm1fZm9ybWF0 X2luZm8ocGl4ZWxfZm9ybWF0KTsKPiAgCj4gIAlpZiAoaW5mby0+aXNfeXV2KQo+ICAJCWlzX3l1 diA9IHRydWU7Cj4gQEAgLTgxOSw4ICs4MTYsOCBAQCBzdGF0aWMgdm9pZCB2b3BfcGxhbmVfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkgICAgKHN0YXRlLT5yb3Rh dGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkgPyAxIDogMCk7Cj4gIAo+ICAJaWYgKGlzX3l1dikg ewo+IC0JCWludCBoc3ViID0gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmYi0+ Zm9ybWF0LT5mb3JtYXQpOwo+IC0JCWludCB2c3ViID0gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9z dWJzYW1wbGluZyhmYi0+Zm9ybWF0LT5mb3JtYXQpOwo+ICsJCWludCBoc3ViID0gZmItPmZvcm1h dC0+aHN1YjsKPiArCQlpbnQgdnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7Cj4gIAkJaW50IGJwcCA9 IGZiLT5mb3JtYXQtPmNwcFsxXTsKPiAgCj4gIAkJdXZfb2JqID0gZmItPm9ialsxXTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVn cmEvZmIuYwo+IGluZGV4IGJjOGY5YWZkMWI1Zi4uZGRmMmM3NjRmMjRjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2ZiLmMKPiBAQCAtMTMyLDE4ICsxMzIsMTUgQEAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqdGVn cmFfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gIAkJCQkJY29uc3Qgc3RydWN0 IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRf aW5mbyAqaW5mbyA9IGRybV9nZXRfZm9ybWF0X2luZm8oZGV2LCBjbWQpOwo+IC0JdW5zaWduZWQg aW50IGhzdWIsIHZzdWIsIGk7Cj4gIAlzdHJ1Y3QgdGVncmFfYm8gKnBsYW5lc1s0XTsKPiAgCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7 Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiAgCWludCBlcnI7Cj4gIAo+IC0JaHN1YiA9IGRybV9mb3Jt YXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoY21kLT5waXhlbF9mb3JtYXQpOwo+IC0JdnN1YiA9 IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoY21kLT5waXhlbF9mb3JtYXQpOwo+ IC0KPiAgCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcGxhbmVzOyBpKyspIHsKPiAtCQl1bnNp Z25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoIC8gKGkgPyBoc3ViIDogMSk7Cj4gLQkJdW5zaWdu ZWQgaW50IGhlaWdodCA9IGNtZC0+aGVpZ2h0IC8gKGkgPyB2c3ViIDogMSk7Cj4gKwkJdW5zaWdu ZWQgaW50IHdpZHRoID0gY21kLT53aWR0aCAvIChpID8gaW5mby0+aHN1YiA6IDEpOwo+ICsJCXVu c2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodCAvIChpID8gaW5mby0+dnN1YiA6IDEpOwo+ ICAJCXVuc2lnbmVkIGludCBzaXplLCBicHA7Cj4gIAo+ICAJCWdlbSA9IGRybV9nZW1fb2JqZWN0 X2xvb2t1cChmaWxlLCBjbWQtPmhhbmRsZXNbaV0pOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwo+ IGluZGV4IDEzOGE5ZmYyM2I3MC4uNjYwNWMxYjczNzBkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9w bGFuZS5jCj4gQEAgLTMxMCwxMCArMzEwLDEwIEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5lX3NldHVw X2NsaXBwaW5nX2FuZF9zY2FsaW5nKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7Cj4gIAlzdHJ1Y3QgZHJtX2dl bV9jbWFfb2JqZWN0ICpibyA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOwo+ICAJdTMy IHN1YnBpeGVsX3NyY19tYXNrID0gKDEgPDwgMTYpIC0gMTsKPiAtCXUzMiBmb3JtYXQgPSBmYi0+ Zm9ybWF0LT5mb3JtYXQ7Cj4gIAlpbnQgbnVtX3BsYW5lcyA9IGZiLT5mb3JtYXQtPm51bV9wbGFu ZXM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQl1MzIgaF9zdWJz YW1wbGUsIHZfc3Vic2FtcGxlOwo+ICsJdTMyIGhfc3Vic2FtcGxlID0gZmItPmZvcm1hdC0+aHN1 YjsKPiArCXUzMiB2X3N1YnNhbXBsZSA9IGZiLT5mb3JtYXQtPnZzdWI7Cj4gIAlpbnQgaSwgcmV0 Owo+ICAKPiAgCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRl KHN0YXRlLT5zdGF0ZSwKPiBAQCAtMzI4LDkgKzMyOCw2IEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5l X3NldHVwX2NsaXBwaW5nX2FuZF9zY2FsaW5nKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRl KQo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCWhfc3Vic2FtcGxlID0gZHJt X2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpOwo+IC0Jdl9zdWJzYW1wbGUg PSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZvcm1hdCk7Cj4gLQo+ICAJZm9y IChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykKPiAgCQl2YzRfc3RhdGUtPm9mZnNldHNbaV0g PSBiby0+cGFkZHIgKyBmYi0+b2Zmc2V0c1tpXTsKPiAgCj4gQEAgLTUzOCw3ICs1MzUsOCBAQCBz dGF0aWMgaW50IHZjNF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg CWNvbnN0IHN0cnVjdCBodnNfZm9ybWF0ICpmb3JtYXQgPSB2YzRfZ2V0X2h2c19mb3JtYXQoZmIt PmZvcm1hdC0+Zm9ybWF0KTsKPiAgCXU2NCBiYXNlX2Zvcm1hdF9tb2QgPSBmb3VyY2NfbW9kX2Jy b2FkY29tX21vZChmYi0+bW9kaWZpZXIpOwo+ICAJaW50IG51bV9wbGFuZXMgPSBmYi0+Zm9ybWF0 LT5udW1fcGxhbmVzOwo+IC0JdTMyIGhfc3Vic2FtcGxlLCB2X3N1YnNhbXBsZTsKPiArCXUzMiBo X3N1YnNhbXBsZSA9IGZiLT5mb3JtYXQtPmhzdWI7Cj4gKwl1MzIgdl9zdWJzYW1wbGUgPSBmYi0+ Zm9ybWF0LT52c3ViOwo+ICAJYm9vbCBtaXhfcGxhbmVfYWxwaGE7Cj4gIAlib29sIGNvdmVyc19z Y3JlZW47Cj4gIAl1MzIgc2NsMCwgc2NsMSwgcGl0Y2gwOwo+IEBAIC01NjgsOSArNTY2LDYgQEAg c3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g IAkJc2NsMSA9IHZjNF9nZXRfc2NsX2ZpZWxkKHN0YXRlLCAwKTsKPiAgCX0KPiAgCj4gLQloX3N1 YnNhbXBsZSA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm9ybWF0LT5kcm0p Owo+IC0Jdl9zdWJzYW1wbGUgPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZv cm1hdC0+ZHJtKTsKPiAtCj4gIAlyb3RhdGlvbiA9IGRybV9yb3RhdGlvbl9zaW1wbGlmeShzdGF0 ZS0+cm90YXRpb24sCj4gIAkJCQkJIERSTV9NT0RFX1JPVEFURV8wIHwKPiAgCQkJCQkgRFJNX01P REVfUkVGTEVDVF9YIHwKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIv aW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCj4gaW5kZXggNDE3NzliMzI3ZDkxLi5lZWVjNDQ5ZDZj NmEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2ZvdXJjYy5oCj4gQEAgLTI2OSw4ICsyNjksNiBAQCB1aW50MzJfdCBkcm1fbW9k ZV9sZWdhY3lfZmJfZm9ybWF0KHVpbnQzMl90IGJwcCwgdWludDMyX3QgZGVwdGgpOwo+ICB1aW50 MzJfdCBkcm1fZHJpdmVyX2xlZ2FjeV9mYl9mb3JtYXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgCQkJCSAgICAgdWludDMyX3QgYnBwLCB1aW50MzJfdCBkZXB0aCk7Cj4gIGludCBkcm1fZm9y bWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Cj4gLWludCBkcm1fZm9y bWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4gLWludCBkcm1f Zm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4gIGludCBk cm1fZm9ybWF0X3BsYW5lX3dpZHRoKGludCB3aWR0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxh bmUpOwo+ICBpbnQgZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3Qg Zm9ybWF0LCBpbnQgcGxhbmUpOwo+ICB1bnNpZ25lZCBpbnQgZHJtX2Zvcm1hdF9pbmZvX2Jsb2Nr X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8sCi0tIApQYXVsIEtvY2lh bGtvd3NraSwgQm9vdGxpbgpFbWJlZGRlZCBMaW51eCBhbmQga2VybmVsIGVuZ2luZWVyaW5nCmh0 dHBzOi8vYm9vdGxpbi5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbA==