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=-17.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 E6432C4743D for ; Fri, 4 Jun 2021 18:24:35 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A5B89613F1 for ; Fri, 4 Jun 2021 18:24:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A5B89613F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2D89B6E165; Fri, 4 Jun 2021 18:24:35 +0000 (UTC) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam07on2077.outbound.protection.outlook.com [40.107.95.77]) by gabe.freedesktop.org (Postfix) with ESMTPS id AD4D36E165; Fri, 4 Jun 2021 18:24:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gpcYVsvTCGSvfAv8hP2yNOoIyU/gZ78pEBl65sYss3bmPP61qriwPrBMWgxdAkG0vUmVmKWhefqsg+IZ4HrdxDxzsfwuiRR2Dg2N/ItjlWlhOR5utVdpw7Uej2oSnhFBBowDE9yJNs0E2U55wFgpeCg0HXivn+hE5aLDNDs7Qyeg32CxqPAhroQvdaemwmIKq1S0aXo838vzXqR2bi777OmBd5u2qJEDvHtdNBQ0Dcwg9YKzKHOkbQkwOwznDgE+7LFcypuwwsHjogQ96wg8I0dsOveDxLpTi3+4ZV9BH3iraCVr36vrBcwZRvO2HLCu37VrfewbQZOAwkcgIswshQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HHUE9k9bmyumRMmPmaL8bBPP6/Rv5s+2Crf42Qy+VSQ=; b=YOEtYtGznxER4mwZQDYJ0AKxg21V7aR758RuTaHoCWKDOuEJ4xUURWSdIMVL0ck1e32FmHaRLveFB0JdGVpDmsSAuMQKmytTMvczDAiK7RBk/3H1xSUykf+AqhvhmSJGOt354mHjMdJF3W32YufO0JiOgxbbCD2E8IlB9/ljsOCL9eR56p8dW3VPXMGXbja3EBZcKyqJRX17g2iv5pIJObYiqKQsgSQc0hC+9kWxHS+Dr2BuK95iUX3d78jTXEXOfqKMWdOf0kuOwyxsLI8W6XaLQZhBptDIWU7cGWN01fOeqzX0yqpOX9F7EFuChlU7guY+kCorOLAMmIRzZ0lKfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HHUE9k9bmyumRMmPmaL8bBPP6/Rv5s+2Crf42Qy+VSQ=; b=2JqnQckEn58QZG6ebkcs8Os5pydmTEPHCkVfVGndukJ8HphdjWjO+vhnY9KZqYnBR46yQJ0dacCMe5v0Z/6QyGY+PQ2xcLG5k9p5bI2r9dm2SBKhsp8wgBqts/Fr8BpqYz7gcouSVYcH4oLcjeVIA9kWpeVopmgS1aAt9vmXuno= Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Received: from CO6PR12MB5427.namprd12.prod.outlook.com (2603:10b6:5:358::13) by CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.24; Fri, 4 Jun 2021 18:24:32 +0000 Received: from CO6PR12MB5427.namprd12.prod.outlook.com ([fe80::f455:b0b4:439:2753]) by CO6PR12MB5427.namprd12.prod.outlook.com ([fe80::f455:b0b4:439:2753%3]) with mapi id 15.20.4195.025; Fri, 4 Jun 2021 18:24:31 +0000 Subject: Re: [PATCH 02/21] drm: Add Plane Degamma Mode property To: Uma Shankar , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210601105218.29185-1-uma.shankar@intel.com> <20210601105218.29185-3-uma.shankar@intel.com> From: Harry Wentland Message-ID: <2154f1d1-2c86-ede7-4b23-acab93e3eb00@amd.com> Date: Fri, 4 Jun 2021 14:24:28 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 In-Reply-To: <20210601105218.29185-3-uma.shankar@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [198.200.67.154] X-ClientProxiedBy: YQXPR0101CA0019.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:15::32) To CO6PR12MB5427.namprd12.prod.outlook.com (2603:10b6:5:358::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.50.3] (198.200.67.154) by YQXPR0101CA0019.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:15::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.27 via Frontend Transport; Fri, 4 Jun 2021 18:24:30 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cdb16d13-70f1-4a08-1bda-08d92785ff2f X-MS-TrafficTypeDiagnostic: CO6PR12MB5489: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fz9CayxSc8byDZxD6tbU1Ikz1WPKlKc7PZubwPwrw1RfAuMxbQu4kB3Z2VGr6Z/jUQ66bgf3J8KPAaI5mMnKO7c13Tm2oFFcSRo7y76fvj3ddrpOCKA+L9IB4YND4WkcnMTfGXsh6+nQHXlwsow4PSKMaaPB8Y5mfxpJC88X15h6hutRUOTKEJdn4aD65/mPV9e2fsDul2hX1sOshte72woh6qmdjaWe70NpC9PVafzBDGPIsm7ig/4e1IjgSVOjOY/lQMIY9SNkNtSnp1plz95jWeDYk7nNcAVFNpjU9Vu0Hheg+U6MMWEUoXiNXg85xjfA6WYSr0E3i90EvhGwbVhj77RX8NlO63D8x2TcDml+9kj6MG3MHoT6UZKvkX0eo0z6V4WBb8l75254rldLuYHYnQIDo2bWHUNEcpojI4hdK/pDqqS/BSc/ZrJLSL8+CAcShfkNJ0dqeqjvk0s3c3Y0gAz606NTMqv5CSsWSu/EUipEcQcnghpf6ANWEKjeWL9LVDiUSlZcf63LoaCNs51Op3tSeg+06P3fHiWuUVugVHNwr4dI+p8wkd32TU4DTKGlhO9sRS0d++x3i1ilWVEbZhwyc8GM8tqNzCHsn/C4vOsKA3V95GivkV/uMMEMN6vcvfuLrd66NNKnAmcexZ/gV1bkuGaFIloa32M1NVMlNPvYobvfnTzuIudaWUHDMPLFvAhpjIVFVrsWkS6s1KYk3hJFy8sOYZ1fi2qU94Jak81/IrRFj+7Zo/Ngwh0jnBMIqqPXEqXjBho4hZGQDrvS2AeKFtt9tBpA4CiUnGU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5427.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(39860400002)(396003)(366004)(346002)(66946007)(31686004)(44832011)(316002)(66476007)(956004)(2616005)(30864003)(86362001)(16576012)(31696002)(66556008)(83380400001)(38100700002)(966005)(36756003)(8676002)(186003)(8936002)(16526019)(53546011)(6486002)(4326008)(5660300002)(2906002)(478600001)(26005)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?MVExMU0xSnhhc1YzOHpOOTg0OENQM0tUdGtWRUwvUXM1VVNHcWJnVG9HeVNS?= =?utf-8?B?Vk5KaENyU3ZjWDVGMmE2b0t3MGxMTndWckdkaXpnek5lRTEyU1p5ZnRqSFlN?= =?utf-8?B?emdPOXFvMG1nd2p6Z2JQemlVcG9IVWswVE9OdzRRZVAxSlpkbDBtM3hab0Vy?= =?utf-8?B?SDBLWUtpVzVnSDZRTkE2Q0FVUmF2dVVzd201eXNmeEFUWjRLbVNGcHNab1pt?= =?utf-8?B?OWxvdVE2WlV6eFpWK0ZxRWJnTFYydjR3cjZ6UU90MDNXMVdYdEJCREkyNHph?= =?utf-8?B?R3RXbEVCV0xZaDNwWjVxbTl5dUtkd3RTSE43UjVrUlVvSUtvTXhRL1JDVFVC?= =?utf-8?B?M0FTNW1SemZEcUNFaGJnTWNqYnhhK1cyZ1NrU3RlUGFTUk9kSzhxdHpXejE5?= =?utf-8?B?OXJGRFVTaENUK2F5RSs3WlpyUWpid09OcG1BMk5WQUZxaHYvUmhKMlBvRHNk?= =?utf-8?B?S1BncS9FME1EaTV3Qnk5YVBHbFFNb08vNTRBdUsvbk5GQ2pyQTBiZGJ4bnVQ?= =?utf-8?B?UmFNZ2JxOFBEZVVoNDgrQm5UendicUxONU54Vy8rbzZHTUtub2p2QnllM3Vy?= =?utf-8?B?eXNXL0JpVExKWG04WVRnMCtRNXBnWjhDN25mL1dDdzF4WDRGajBZd3RncDFP?= =?utf-8?B?cHkrelFXbHVIb1I1STdFdFhPNjZsaTN4bXhaMmE4cW1XUVFsU1ZJMis3TU9N?= =?utf-8?B?bWdhdEgzRm9LbHpxSTJ6amxZR1l0K29vd3VyaFNvZlpzaDZhZGFMRjdtTzhl?= =?utf-8?B?ZWlSZm1kSU52dVMrYUk1cXNQanZzSVU5cWhsRjR4UEpnT2dlK3EwL1RncXFC?= =?utf-8?B?d0Mzb2gyTm0vaVl4bXZVcTl1QTdJSWpyUEZOekZTOHA2aEV2RHhRa1kyM1E1?= =?utf-8?B?aG1WOS9YOWgrL051MmorczNvek9xeWFOaU1SNEdrdmIySDJFQnpndXdIMVVj?= =?utf-8?B?Z0YxNXdsTHJNblFXMUZOajBOdGt5QVl6ZlpBVHd4QmIwOStTd1ZRdGhDSHlW?= =?utf-8?B?Q1dSbkFZZkxUWnBWWHlrTDh6bGpjVmMwZ1VtM01FV1E5Y05aQ1dQNndXQjJo?= =?utf-8?B?U2E0Q1pxV3lkNkkxRHhoVE9ld3FjRWMwR0pNOVRRYWF1VHFrNUxDNWNPcHd6?= =?utf-8?B?NnNFa0Y5T01ZMkIzWmUySmVzRWtVSnNMRjkvdGVGeG5neG1tQkY0empTSDBV?= =?utf-8?B?b21IR01YTGhUOS9rVEFuc0F2QkVTcDJ1N1hWMGNzYWdNY05jZ3RhbTRUVTlE?= =?utf-8?B?bzZIN3JTZlk5S0FFOHhDTnlVN2J6bnpCTDU5N2hZcEdUY0FNUWNIU0h3TFYx?= =?utf-8?B?azdvQTNqd2w0R01vbFVnbG02VjlBM1BqeWYxYldXUFVtYUIxMmExT2F1NFhG?= =?utf-8?B?eFl6RHlqRjZlK3d3MldrSU1vbUt4ZzhITVZqL1hONXptaUpKUmhEMThDa05C?= =?utf-8?B?bFB6NFVQSXhva3M0WGpVdlFhNE84bWFlVWkrS1FzK1EwTjJoYmNkcDdCRWNI?= =?utf-8?B?ZWhCN3BVeEEzZEhnSnU5cFl6K2lndmRKbXRRVEhPUkhCM1dVdlNhRTZrNHJ2?= =?utf-8?B?TkE0ZktNQS92YXFyOGt0TVJYVis2UFdMeXBqS2VyR0ZKYVM0UWN4TTVHdE5r?= =?utf-8?B?OHVTZXpiSHQya3k5a09UYzJGMUtmUGRWVXFQcWRWU0ZEUXFmSzAweDhuTDMr?= =?utf-8?B?TFpBNjhJbFU4aGdERWgvRTRFY3dETDFpUmJCdWlVbVU0TE9xN0cxS2lhdWEw?= =?utf-8?Q?/iwJuvqZk3w6R05QSXKmZhbtPMHg8biad21+j7z?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: cdb16d13-70f1-4a08-1bda-08d92785ff2f X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5427.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2021 18:24:31.7834 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VtpquIRIgV+7ve3DoRfEVX/nxxGEpW+EsN3ON5HGIzM2gHSbg+4Kw6Xi5QrBd30BAunNrt6K6sW70RjAzaAeJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5489 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bhanuprakash.modem@intel.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 2021-06-01 6:51 a.m., Uma Shankar wrote: > Add Plane Degamma Mode as an enum property. Create a helper > function for all plane color management features. > > This is an enum property with values as blob_id's and exposes > the various gamma modes supported and the lut ranges. Getting > the blob id in userspace, user can get the mode supported and > also the range of gamma mode supported with number of lut > coefficients. It can then set one of the modes using this > enum property. > > Lut values will be sent through separate GAMMA_LUT blob property. > > Signed-off-by: Uma Shankar > --- > Documentation/gpu/drm-kms.rst | 90 ++++++++++++++++++++++ > drivers/gpu/drm/drm_atomic.c | 1 + > drivers/gpu/drm/drm_atomic_state_helper.c | 2 + > drivers/gpu/drm/drm_atomic_uapi.c | 4 + > drivers/gpu/drm/drm_color_mgmt.c | 93 ++++++++++++++++++++++- > include/drm/drm_mode_object.h | 2 +- > include/drm/drm_plane.h | 23 ++++++ > 7 files changed, 212 insertions(+), 3 deletions(-) > > diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst > index 87e5023e3f55..752be545e7d7 100644 > --- a/Documentation/gpu/drm-kms.rst > +++ b/Documentation/gpu/drm-kms.rst > @@ -514,9 +514,99 @@ Damage Tracking Properties > Color Management Properties > --------------------------- > > +Below is how a typical hardware pipeline for color > +will look like: > + > +.. kernel-render:: DOT > + :alt: Display Color Pipeline > + :caption: Display Color Pipeline Overview > + > + digraph "KMS" { > + node [shape=box] > + > + subgraph cluster_static { > + style=dashed > + label="Display Color Hardware Blocks" > + > + node [bgcolor=grey style=filled] > + "Plane Degamma A" -> "Plane CSC/CTM A" > + "Plane CSC/CTM A" -> "Plane Gamma A" > + "Pipe Blender" [color=lightblue,style=filled, width=5.25, height=0.75]; > + "Plane Gamma A" -> "Pipe Blender" > + "Pipe Blender" -> "Pipe DeGamma" > + "Pipe DeGamma" -> "Pipe CSC/CTM" > + "Pipe CSC/CTM" -> "Pipe Gamma" > + "Pipe Gamma" -> "Pipe Output" > + } > + It might be worthwhile to also highlight the YCbCr coefficient matrix in the pipeline, between the FB and Plane degamma, i.e. YCbCr coefficients > plane degamma > csc > ... One problem with this view is that not all HW will support all (or any) of these CM blocks on all planes. For example, on AMD HW cursors are very different from other planes and don't really have full CM support. > + subgraph cluster_static { > + style=dashed > + > + node [shape=box] > + "Plane Degamma B" -> "Plane CSC/CTM B" > + "Plane CSC/CTM B" -> "Plane Gamma B" > + "Plane Gamma B" -> "Pipe Blender" > + } > + > + subgraph cluster_static { > + style=dashed > + > + node [shape=box] > + "Plane Degamma C" -> "Plane CSC/CTM C" > + "Plane CSC/CTM C" -> "Plane Gamma C" > + "Plane Gamma C" -> "Pipe Blender" > + } > + > + subgraph cluster_fb { > + style=dashed > + label="RAM" > + > + node [shape=box width=1.7 height=0.2] > + > + "FB 1" -> "Plane Degamma A" > + "FB 2" -> "Plane Degamma B" > + "FB 3" -> "Plane Degamma C" > + } > + } > + > +In real world usecases, > + > +1. Plane Degamma can be used to linearize a non linear gamma > +encoded framebuffer. This is needed to do any linear math like > +color space conversion. For ex, linearize frames encoded in SRGB > +or by HDR curve. > + > +2. Later Plane CTM block can convert the content to some different > +colorspace. For ex, SRGB to BT2020 etc. > + > +3. Plane Gamma block can be used later to re-apply the non-linear > +curve. This can also be used to apply Tone Mapping for HDR usecases. > + This would mean you're blending in gamma space which is likely not what most compositors expect. There are numerous articles that describe why blending in gamma space is problematic, such as [1] [1] https://ninedegreesbelow.com/photography/linear-gamma-blur-normal-blend.html To blend in linear space this should be configured to do Plane Degamma > Plane CTM > CRTC Gamma I think it would also be good if we moved away from calling this gamma. It's really only gamma for legacy SDR scenarios. For HDR cases I would never expect these to use gamma and even though the sRGB transfer function is based on gamma functions it's complicated [2]. [2] https://en.wikipedia.org/wiki/SRGB A better way to describe these would be as "transfer function" and "inverse transfer function." The space at various stages could then be described as linear or non-linear, specifically PQ, HLG, sRGB, BT709, or using another transfer function. Harry > +All the layers or framebuffers need to be converted to same color > +space and format before blending. The plane color hardware blocks > +can help with this. Once the Data is blended, similar color processing > +can be done on blended output using pipe color hardware blocks. > + > +DRM Properties have been created to define and expose all these > +hardware blocks to userspace. A userspace application (compositor > +or any color app) can use these interfaces and define policies to > +efficiently use the display hardware for such color operations. > + > +Pipe Color Management Properties > +--------------------------------- > + > .. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c > :doc: overview > > +Plane Color Management Properties > +--------------------------------- > + > +.. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c > + :doc: Plane Color Properties > + > +.. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c > + :doc: export > + > Tile Group Property > ------------------- > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index a8bbb021684b..8892d03602f7 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -708,6 +708,7 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, > drm_get_color_encoding_name(state->color_encoding)); > drm_printf(p, "\tcolor-range=%s\n", > drm_get_color_range_name(state->color_range)); > + drm_printf(p, "\tcolor_mgmt_changed=%d\n", state->color_mgmt_changed); > > if (plane->funcs->atomic_print_state) > plane->funcs->atomic_print_state(p, state); > diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c > index ddcf5c2c8e6a..f26b03853711 100644 > --- a/drivers/gpu/drm/drm_atomic_state_helper.c > +++ b/drivers/gpu/drm/drm_atomic_state_helper.c > @@ -311,6 +311,8 @@ void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane, > state->fence = NULL; > state->commit = NULL; > state->fb_damage_clips = NULL; > + > + state->color_mgmt_changed = false; > } > EXPORT_SYMBOL(__drm_atomic_helper_plane_duplicate_state); > > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c > index 438e9585b225..40fa05fa33dc 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -595,6 +595,8 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane, > state->color_encoding = val; > } else if (property == plane->color_range_property) { > state->color_range = val; > + } else if (property == plane->degamma_mode_property) { > + state->degamma_mode = val; > } else if (property == config->prop_fb_damage_clips) { > ret = drm_atomic_replace_property_blob_from_id(dev, > &state->fb_damage_clips, > @@ -661,6 +663,8 @@ drm_atomic_plane_get_property(struct drm_plane *plane, > *val = state->color_encoding; > } else if (property == plane->color_range_property) { > *val = state->color_range; > + } else if (property == plane->degamma_mode_property) { > + *val = state->degamma_mode; > } else if (property == config->prop_fb_damage_clips) { > *val = (state->fb_damage_clips) ? > state->fb_damage_clips->base.id : 0; > diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c > index bb14f488c8f6..085ed0d0db00 100644 > --- a/drivers/gpu/drm/drm_color_mgmt.c > +++ b/drivers/gpu/drm/drm_color_mgmt.c > @@ -34,8 +34,8 @@ > /** > * DOC: overview > * > - * Color management or color space adjustments is supported through a set of 5 > - * properties on the &drm_crtc object. They are set up by calling > + * Pipe Color management or color space adjustments is supported through a > + * set of 5 properties on the &drm_crtc object. They are set up by calling > * drm_crtc_enable_color_mgmt(). > * > * "DEGAMMA_LUT”: > @@ -584,6 +584,95 @@ int drm_plane_create_color_properties(struct drm_plane *plane, > } > EXPORT_SYMBOL(drm_plane_create_color_properties); > > +/** > + * DOC: Plane Color Properties > + * > + * Plane Color management or color space adjustments is supported > + * through a set of 5 properties on the &drm_plane object. > + * > + * degamma_mode_property: > + * Blob property which advertizes the possible degamma modes and > + * lut ranges supported by the platform. This allows userspace > + * to query and get the plane degamma color caps and choose the > + * appropriate degamma mode and create lut values accordingly > + * > + */ > +int drm_plane_create_color_mgmt_properties(struct drm_device *dev, > + struct drm_plane *plane, > + int num_values) > +{ > + struct drm_property *prop; > + > + prop = drm_property_create(dev, DRM_MODE_PROP_ENUM, > + "PLANE_DEGAMMA_MODE", num_values); > + if (!prop) > + return -ENOMEM; > + > + plane->degamma_mode_property = prop; > + > + return 0; > +} > +EXPORT_SYMBOL(drm_plane_create_color_mgmt_properties); > + > +void drm_plane_attach_degamma_properties(struct drm_plane *plane) > +{ > + if (!plane->degamma_mode_property) > + return; > + > + drm_object_attach_property(&plane->base, > + plane->degamma_mode_property, 0); > +} > +EXPORT_SYMBOL(drm_plane_attach_degamma_properties); > + > +int drm_plane_color_add_gamma_degamma_mode_range(struct drm_plane *plane, > + const char *name, > + const struct drm_color_lut_range *ranges, > + size_t length, enum lut_type type) > +{ > + struct drm_property_blob *blob; > + struct drm_property *prop = NULL; > + int num_ranges = length / sizeof(ranges[0]); > + int i, ret, num_types_0; > + > + if (type == LUT_TYPE_DEGAMMA) > + prop = plane->degamma_mode_property; > + > + if (!prop) > + return -EINVAL; > + > + if (length == 0 && name) > + return drm_property_add_enum(prop, 0, name); > + > + if (WARN_ON(length == 0 || length % sizeof(ranges[0]) != 0)) > + return -EINVAL; > + num_types_0 = hweight8(ranges[0].flags & (DRM_MODE_LUT_GAMMA | > + DRM_MODE_LUT_DEGAMMA)); > + if (num_types_0 == 0) > + return -EINVAL; > + > + for (i = 1; i < num_ranges; i++) { > + int num_types = hweight8(ranges[i].flags & (DRM_MODE_LUT_GAMMA | > + DRM_MODE_LUT_DEGAMMA)); > + > + /* either all ranges have DEGAMMA|GAMMA or none have it */ > + if (num_types_0 != num_types) > + return -EINVAL; > + } > + > + blob = drm_property_create_blob(plane->dev, length, ranges); > + if (IS_ERR(blob)) > + return PTR_ERR(blob); > + > + ret = drm_property_add_enum(prop, blob->base.id, name); > + if (ret) { > + drm_property_blob_put(blob); > + return ret; > + } > + > + return 0; > +} > +EXPORT_SYMBOL(drm_plane_color_add_gamma_degamma_mode_range); > + > /** > * drm_color_lut_check - check validity of lookup table > * @lut: property blob containing LUT to check > diff --git a/include/drm/drm_mode_object.h b/include/drm/drm_mode_object.h > index c34a3e8030e1..d4128c7daa08 100644 > --- a/include/drm/drm_mode_object.h > +++ b/include/drm/drm_mode_object.h > @@ -60,7 +60,7 @@ struct drm_mode_object { > void (*free_cb)(struct kref *kref); > }; > > -#define DRM_OBJECT_MAX_PROPERTY 24 > +#define DRM_OBJECT_MAX_PROPERTY 26 > /** > * struct drm_object_properties - property tracking for &drm_mode_object > */ > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h > index 1294610e84f4..e476a5939f8e 100644 > --- a/include/drm/drm_plane.h > +++ b/include/drm/drm_plane.h > @@ -236,6 +236,15 @@ struct drm_plane_state { > > /** @state: backpointer to global drm_atomic_state */ > struct drm_atomic_state *state; > + > + /** > + * @degamma_mode: This is a blob_id and exposes the platform capabilities > + * wrt to various gamma modes and the respective lut ranges. This also > + * helps user select a degamma mode amongst the supported ones. > + */ > + u32 degamma_mode; > + > + u8 color_mgmt_changed : 1; > }; > > static inline struct drm_rect > @@ -747,6 +756,12 @@ struct drm_plane { > * scaling. > */ > struct drm_property *scaling_filter_property; > + > + /** > + * @degamma_mode_property: Optional Plane property to set the LUT > + * used to convert the framebuffer's colors to linear gamma. > + */ > + struct drm_property *degamma_mode_property; > }; > > #define obj_to_plane(x) container_of(x, struct drm_plane, base) > @@ -838,6 +853,14 @@ void drm_plane_force_disable(struct drm_plane *plane); > int drm_mode_plane_set_obj_prop(struct drm_plane *plane, > struct drm_property *property, > uint64_t value); > +int drm_plane_create_color_mgmt_properties(struct drm_device *dev, > + struct drm_plane *plane, > + int num_values); > +void drm_plane_attach_degamma_properties(struct drm_plane *plane); > +int drm_plane_color_add_gamma_degamma_mode_range(struct drm_plane *plane, > + const char *name, > + const struct drm_color_lut_range *ranges, > + size_t length, enum lut_type type); > > /** > * drm_plane_find - find a &drm_plane > 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=-15.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 6CAF0C4743C for ; Fri, 4 Jun 2021 18:24:39 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 36137613F4 for ; Fri, 4 Jun 2021 18:24:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 36137613F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 72E006F895; Fri, 4 Jun 2021 18:24:35 +0000 (UTC) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam07on2077.outbound.protection.outlook.com [40.107.95.77]) by gabe.freedesktop.org (Postfix) with ESMTPS id AD4D36E165; Fri, 4 Jun 2021 18:24:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gpcYVsvTCGSvfAv8hP2yNOoIyU/gZ78pEBl65sYss3bmPP61qriwPrBMWgxdAkG0vUmVmKWhefqsg+IZ4HrdxDxzsfwuiRR2Dg2N/ItjlWlhOR5utVdpw7Uej2oSnhFBBowDE9yJNs0E2U55wFgpeCg0HXivn+hE5aLDNDs7Qyeg32CxqPAhroQvdaemwmIKq1S0aXo838vzXqR2bi777OmBd5u2qJEDvHtdNBQ0Dcwg9YKzKHOkbQkwOwznDgE+7LFcypuwwsHjogQ96wg8I0dsOveDxLpTi3+4ZV9BH3iraCVr36vrBcwZRvO2HLCu37VrfewbQZOAwkcgIswshQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HHUE9k9bmyumRMmPmaL8bBPP6/Rv5s+2Crf42Qy+VSQ=; b=YOEtYtGznxER4mwZQDYJ0AKxg21V7aR758RuTaHoCWKDOuEJ4xUURWSdIMVL0ck1e32FmHaRLveFB0JdGVpDmsSAuMQKmytTMvczDAiK7RBk/3H1xSUykf+AqhvhmSJGOt354mHjMdJF3W32YufO0JiOgxbbCD2E8IlB9/ljsOCL9eR56p8dW3VPXMGXbja3EBZcKyqJRX17g2iv5pIJObYiqKQsgSQc0hC+9kWxHS+Dr2BuK95iUX3d78jTXEXOfqKMWdOf0kuOwyxsLI8W6XaLQZhBptDIWU7cGWN01fOeqzX0yqpOX9F7EFuChlU7guY+kCorOLAMmIRzZ0lKfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HHUE9k9bmyumRMmPmaL8bBPP6/Rv5s+2Crf42Qy+VSQ=; b=2JqnQckEn58QZG6ebkcs8Os5pydmTEPHCkVfVGndukJ8HphdjWjO+vhnY9KZqYnBR46yQJ0dacCMe5v0Z/6QyGY+PQ2xcLG5k9p5bI2r9dm2SBKhsp8wgBqts/Fr8BpqYz7gcouSVYcH4oLcjeVIA9kWpeVopmgS1aAt9vmXuno= Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Received: from CO6PR12MB5427.namprd12.prod.outlook.com (2603:10b6:5:358::13) by CO6PR12MB5489.namprd12.prod.outlook.com (2603:10b6:303:139::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.24; Fri, 4 Jun 2021 18:24:32 +0000 Received: from CO6PR12MB5427.namprd12.prod.outlook.com ([fe80::f455:b0b4:439:2753]) by CO6PR12MB5427.namprd12.prod.outlook.com ([fe80::f455:b0b4:439:2753%3]) with mapi id 15.20.4195.025; Fri, 4 Jun 2021 18:24:31 +0000 To: Uma Shankar , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210601105218.29185-1-uma.shankar@intel.com> <20210601105218.29185-3-uma.shankar@intel.com> From: Harry Wentland Message-ID: <2154f1d1-2c86-ede7-4b23-acab93e3eb00@amd.com> Date: Fri, 4 Jun 2021 14:24:28 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 In-Reply-To: <20210601105218.29185-3-uma.shankar@intel.com> Content-Language: en-US X-Originating-IP: [198.200.67.154] X-ClientProxiedBy: YQXPR0101CA0019.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:15::32) To CO6PR12MB5427.namprd12.prod.outlook.com (2603:10b6:5:358::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.50.3] (198.200.67.154) by YQXPR0101CA0019.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:15::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.27 via Frontend Transport; Fri, 4 Jun 2021 18:24:30 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cdb16d13-70f1-4a08-1bda-08d92785ff2f X-MS-TrafficTypeDiagnostic: CO6PR12MB5489: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fz9CayxSc8byDZxD6tbU1Ikz1WPKlKc7PZubwPwrw1RfAuMxbQu4kB3Z2VGr6Z/jUQ66bgf3J8KPAaI5mMnKO7c13Tm2oFFcSRo7y76fvj3ddrpOCKA+L9IB4YND4WkcnMTfGXsh6+nQHXlwsow4PSKMaaPB8Y5mfxpJC88X15h6hutRUOTKEJdn4aD65/mPV9e2fsDul2hX1sOshte72woh6qmdjaWe70NpC9PVafzBDGPIsm7ig/4e1IjgSVOjOY/lQMIY9SNkNtSnp1plz95jWeDYk7nNcAVFNpjU9Vu0Hheg+U6MMWEUoXiNXg85xjfA6WYSr0E3i90EvhGwbVhj77RX8NlO63D8x2TcDml+9kj6MG3MHoT6UZKvkX0eo0z6V4WBb8l75254rldLuYHYnQIDo2bWHUNEcpojI4hdK/pDqqS/BSc/ZrJLSL8+CAcShfkNJ0dqeqjvk0s3c3Y0gAz606NTMqv5CSsWSu/EUipEcQcnghpf6ANWEKjeWL9LVDiUSlZcf63LoaCNs51Op3tSeg+06P3fHiWuUVugVHNwr4dI+p8wkd32TU4DTKGlhO9sRS0d++x3i1ilWVEbZhwyc8GM8tqNzCHsn/C4vOsKA3V95GivkV/uMMEMN6vcvfuLrd66NNKnAmcexZ/gV1bkuGaFIloa32M1NVMlNPvYobvfnTzuIudaWUHDMPLFvAhpjIVFVrsWkS6s1KYk3hJFy8sOYZ1fi2qU94Jak81/IrRFj+7Zo/Ngwh0jnBMIqqPXEqXjBho4hZGQDrvS2AeKFtt9tBpA4CiUnGU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR12MB5427.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(39860400002)(396003)(366004)(346002)(66946007)(31686004)(44832011)(316002)(66476007)(956004)(2616005)(30864003)(86362001)(16576012)(31696002)(66556008)(83380400001)(38100700002)(966005)(36756003)(8676002)(186003)(8936002)(16526019)(53546011)(6486002)(4326008)(5660300002)(2906002)(478600001)(26005)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?MVExMU0xSnhhc1YzOHpOOTg0OENQM0tUdGtWRUwvUXM1VVNHcWJnVG9HeVNS?= =?utf-8?B?Vk5KaENyU3ZjWDVGMmE2b0t3MGxMTndWckdkaXpnek5lRTEyU1p5ZnRqSFlN?= =?utf-8?B?emdPOXFvMG1nd2p6Z2JQemlVcG9IVWswVE9OdzRRZVAxSlpkbDBtM3hab0Vy?= =?utf-8?B?SDBLWUtpVzVnSDZRTkE2Q0FVUmF2dVVzd201eXNmeEFUWjRLbVNGcHNab1pt?= =?utf-8?B?OWxvdVE2WlV6eFpWK0ZxRWJnTFYydjR3cjZ6UU90MDNXMVdYdEJCREkyNHph?= =?utf-8?B?R3RXbEVCV0xZaDNwWjVxbTl5dUtkd3RTSE43UjVrUlVvSUtvTXhRL1JDVFVC?= =?utf-8?B?M0FTNW1SemZEcUNFaGJnTWNqYnhhK1cyZ1NrU3RlUGFTUk9kSzhxdHpXejE5?= =?utf-8?B?OXJGRFVTaENUK2F5RSs3WlpyUWpid09OcG1BMk5WQUZxaHYvUmhKMlBvRHNk?= =?utf-8?B?S1BncS9FME1EaTV3Qnk5YVBHbFFNb08vNTRBdUsvbk5GQ2pyQTBiZGJ4bnVQ?= =?utf-8?B?UmFNZ2JxOFBEZVVoNDgrQm5UendicUxONU54Vy8rbzZHTUtub2p2QnllM3Vy?= =?utf-8?B?eXNXL0JpVExKWG04WVRnMCtRNXBnWjhDN25mL1dDdzF4WDRGajBZd3RncDFP?= =?utf-8?B?cHkrelFXbHVIb1I1STdFdFhPNjZsaTN4bXhaMmE4cW1XUVFsU1ZJMis3TU9N?= =?utf-8?B?bWdhdEgzRm9LbHpxSTJ6amxZR1l0K29vd3VyaFNvZlpzaDZhZGFMRjdtTzhl?= =?utf-8?B?ZWlSZm1kSU52dVMrYUk1cXNQanZzSVU5cWhsRjR4UEpnT2dlK3EwL1RncXFC?= =?utf-8?B?d0Mzb2gyTm0vaVl4bXZVcTl1QTdJSWpyUEZOekZTOHA2aEV2RHhRa1kyM1E1?= =?utf-8?B?aG1WOS9YOWgrL051MmorczNvek9xeWFOaU1SNEdrdmIySDJFQnpndXdIMVVj?= =?utf-8?B?Z0YxNXdsTHJNblFXMUZOajBOdGt5QVl6ZlpBVHd4QmIwOStTd1ZRdGhDSHlW?= =?utf-8?B?Q1dSbkFZZkxUWnBWWHlrTDh6bGpjVmMwZ1VtM01FV1E5Y05aQ1dQNndXQjJo?= =?utf-8?B?U2E0Q1pxV3lkNkkxRHhoVE9ld3FjRWMwR0pNOVRRYWF1VHFrNUxDNWNPcHd6?= =?utf-8?B?NnNFa0Y5T01ZMkIzWmUySmVzRWtVSnNMRjkvdGVGeG5neG1tQkY0empTSDBV?= =?utf-8?B?b21IR01YTGhUOS9rVEFuc0F2QkVTcDJ1N1hWMGNzYWdNY05jZ3RhbTRUVTlE?= =?utf-8?B?bzZIN3JTZlk5S0FFOHhDTnlVN2J6bnpCTDU5N2hZcEdUY0FNUWNIU0h3TFYx?= =?utf-8?B?azdvQTNqd2w0R01vbFVnbG02VjlBM1BqeWYxYldXUFVtYUIxMmExT2F1NFhG?= =?utf-8?B?eFl6RHlqRjZlK3d3MldrSU1vbUt4ZzhITVZqL1hONXptaUpKUmhEMThDa05C?= =?utf-8?B?bFB6NFVQSXhva3M0WGpVdlFhNE84bWFlVWkrS1FzK1EwTjJoYmNkcDdCRWNI?= =?utf-8?B?ZWhCN3BVeEEzZEhnSnU5cFl6K2lndmRKbXRRVEhPUkhCM1dVdlNhRTZrNHJ2?= =?utf-8?B?TkE0ZktNQS92YXFyOGt0TVJYVis2UFdMeXBqS2VyR0ZKYVM0UWN4TTVHdE5r?= =?utf-8?B?OHVTZXpiSHQya3k5a09UYzJGMUtmUGRWVXFQcWRWU0ZEUXFmSzAweDhuTDMr?= =?utf-8?B?TFpBNjhJbFU4aGdERWgvRTRFY3dETDFpUmJCdWlVbVU0TE9xN0cxS2lhdWEw?= =?utf-8?Q?/iwJuvqZk3w6R05QSXKmZhbtPMHg8biad21+j7z?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: cdb16d13-70f1-4a08-1bda-08d92785ff2f X-MS-Exchange-CrossTenant-AuthSource: CO6PR12MB5427.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2021 18:24:31.7834 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VtpquIRIgV+7ve3DoRfEVX/nxxGEpW+EsN3ON5HGIzM2gHSbg+4Kw6Xi5QrBd30BAunNrt6K6sW70RjAzaAeJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5489 Subject: Re: [Intel-gfx] [PATCH 02/21] drm: Add Plane Degamma Mode property X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Cyr, Aric" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMjAyMS0wNi0wMSA2OjUxIGEubS4sIFVtYSBTaGFua2FyIHdyb3RlOgo+IEFkZCBQbGFuZSBE ZWdhbW1hIE1vZGUgYXMgYW4gZW51bSBwcm9wZXJ0eS4gQ3JlYXRlIGEgaGVscGVyCj4gZnVuY3Rp b24gZm9yIGFsbCBwbGFuZSBjb2xvciBtYW5hZ2VtZW50IGZlYXR1cmVzLgo+IAo+IFRoaXMgaXMg YW4gZW51bSBwcm9wZXJ0eSB3aXRoIHZhbHVlcyBhcyBibG9iX2lkJ3MgYW5kIGV4cG9zZXMKPiB0 aGUgdmFyaW91cyBnYW1tYSBtb2RlcyBzdXBwb3J0ZWQgYW5kIHRoZSBsdXQgcmFuZ2VzLiBHZXR0 aW5nCj4gdGhlIGJsb2IgaWQgaW4gdXNlcnNwYWNlLCB1c2VyIGNhbiBnZXQgdGhlIG1vZGUgc3Vw cG9ydGVkIGFuZAo+IGFsc28gdGhlIHJhbmdlIG9mIGdhbW1hIG1vZGUgc3VwcG9ydGVkIHdpdGgg bnVtYmVyIG9mIGx1dAo+IGNvZWZmaWNpZW50cy4gSXQgY2FuIHRoZW4gc2V0IG9uZSBvZiB0aGUg bW9kZXMgdXNpbmcgdGhpcwo+IGVudW0gcHJvcGVydHkuCj4gCj4gTHV0IHZhbHVlcyB3aWxsIGJl IHNlbnQgdGhyb3VnaCBzZXBhcmF0ZSBHQU1NQV9MVVQgYmxvYiBwcm9wZXJ0eS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBVbWEgU2hhbmthciA8dW1hLnNoYW5rYXJAaW50ZWwuY29tPgo+IC0tLQo+ICBE b2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCAgICAgICAgICAgICB8IDkwICsrKysrKysrKysr KysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyAgICAgICAgICAgICAg fCAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jIHwgIDIg Kwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMgICAgICAgICB8ICA0ICsKPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9jb2xvcl9tZ210LmMgICAgICAgICAgfCA5MyArKysrKysrKysr KysrKysrKysrKysrLQo+ICBpbmNsdWRlL2RybS9kcm1fbW9kZV9vYmplY3QuaCAgICAgICAgICAg ICB8ICAyICstCj4gIGluY2x1ZGUvZHJtL2RybV9wbGFuZS5oICAgICAgICAgICAgICAgICAgIHwg MjMgKysrKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgMjEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0IGIv RG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKPiBpbmRleCA4N2U1MDIzZTNmNTUuLjc1MmJl NTQ1ZTdkNyAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+ICsr KyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0Cj4gQEAgLTUxNCw5ICs1MTQsOTkgQEAg RGFtYWdlIFRyYWNraW5nIFByb3BlcnRpZXMKPiAgQ29sb3IgTWFuYWdlbWVudCBQcm9wZXJ0aWVz Cj4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAKPiArQmVsb3cgaXMgaG93IGEgdHlw aWNhbCBoYXJkd2FyZSBwaXBlbGluZSBmb3IgY29sb3IKPiArd2lsbCBsb29rIGxpa2U6Cj4gKwo+ ICsuLiBrZXJuZWwtcmVuZGVyOjogRE9UCj4gKyAgIDphbHQ6IERpc3BsYXkgQ29sb3IgUGlwZWxp bmUKPiArICAgOmNhcHRpb246IERpc3BsYXkgQ29sb3IgUGlwZWxpbmUgT3ZlcnZpZXcKPiArCj4g KyAgIGRpZ3JhcGggIktNUyIgewo+ICsgICAgICBub2RlIFtzaGFwZT1ib3hdCj4gKwo+ICsgICAg ICBzdWJncmFwaCBjbHVzdGVyX3N0YXRpYyB7Cj4gKyAgICAgICAgICBzdHlsZT1kYXNoZWQKPiAr ICAgICAgICAgIGxhYmVsPSJEaXNwbGF5IENvbG9yIEhhcmR3YXJlIEJsb2NrcyIKPiArCj4gKyAg ICAgICAgICBub2RlIFtiZ2NvbG9yPWdyZXkgc3R5bGU9ZmlsbGVkXQo+ICsgICAgICAgICAgIlBs YW5lIERlZ2FtbWEgQSIgLT4gIlBsYW5lIENTQy9DVE0gQSIKPiArICAgICAgICAgICJQbGFuZSBD U0MvQ1RNIEEiIC0+ICJQbGFuZSBHYW1tYSBBIgo+ICsgICAgICAgICAgIlBpcGUgQmxlbmRlciIg W2NvbG9yPWxpZ2h0Ymx1ZSxzdHlsZT1maWxsZWQsIHdpZHRoPTUuMjUsIGhlaWdodD0wLjc1XTsK PiArICAgICAgICAgICJQbGFuZSBHYW1tYSBBIiAtPiAiUGlwZSBCbGVuZGVyIgo+ICsJICAiUGlw ZSBCbGVuZGVyIiAtPiAiUGlwZSBEZUdhbW1hIgo+ICsgICAgICAgICAgIlBpcGUgRGVHYW1tYSIg LT4gIlBpcGUgQ1NDL0NUTSIKPiArICAgICAgICAgICJQaXBlIENTQy9DVE0iIC0+ICJQaXBlIEdh bW1hIgo+ICsgICAgICAgICAgIlBpcGUgR2FtbWEiIC0+ICJQaXBlIE91dHB1dCIKPiArICAgICAg fQo+ICsKCkl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gYWxzbyBoaWdobGlnaHQgdGhlIFlDYkNy IGNvZWZmaWNpZW50IG1hdHJpeCBpbiB0aGUgcGlwZWxpbmUsCmJldHdlZW4gdGhlIEZCIGFuZCBQ bGFuZSBkZWdhbW1hLCBpLmUuCiAgWUNiQ3IgY29lZmZpY2llbnRzID4gcGxhbmUgZGVnYW1tYSA+ IGNzYyA+IC4uLgoKT25lIHByb2JsZW0gd2l0aCB0aGlzIHZpZXcgaXMgdGhhdCBub3QgYWxsIEhX IHdpbGwgc3VwcG9ydCBhbGwgKG9yIGFueSkgb2YgdGhlc2UKQ00gYmxvY2tzIG9uIGFsbCBwbGFu ZXMuIEZvciBleGFtcGxlLCBvbiBBTUQgSFcgY3Vyc29ycyBhcmUgdmVyeSBkaWZmZXJlbnQgZnJv bQpvdGhlciBwbGFuZXMgYW5kIGRvbid0IHJlYWxseSBoYXZlIGZ1bGwgQ00gc3VwcG9ydC4KCj4g KyAgICAgIHN1YmdyYXBoIGNsdXN0ZXJfc3RhdGljIHsKPiArICAgICAgICAgIHN0eWxlPWRhc2hl ZAo+ICsKPiArICAgICAgICAgIG5vZGUgW3NoYXBlPWJveF0KPiArICAgICAgICAgICJQbGFuZSBE ZWdhbW1hIEIiIC0+ICJQbGFuZSBDU0MvQ1RNIEIiCj4gKyAgICAgICAgICAiUGxhbmUgQ1NDL0NU TSBCIiAtPiAiUGxhbmUgR2FtbWEgQiIKPiArICAgICAgICAgICJQbGFuZSBHYW1tYSBCIiAtPiAi UGlwZSBCbGVuZGVyIgo+ICsgICAgICB9Cj4gKwo+ICsgICAgICBzdWJncmFwaCBjbHVzdGVyX3N0 YXRpYyB7Cj4gKyAgICAgICAgICBzdHlsZT1kYXNoZWQKPiArCj4gKyAgICAgICAgICBub2RlIFtz aGFwZT1ib3hdCj4gKyAgICAgICAgICAiUGxhbmUgRGVnYW1tYSBDIiAtPiAiUGxhbmUgQ1NDL0NU TSBDIgo+ICsgICAgICAgICAgIlBsYW5lIENTQy9DVE0gQyIgLT4gIlBsYW5lIEdhbW1hIEMiCj4g KyAgICAgICAgICAiUGxhbmUgR2FtbWEgQyIgLT4gIlBpcGUgQmxlbmRlciIKPiArICAgICAgfQo+ ICsKPiArICAgICAgc3ViZ3JhcGggY2x1c3Rlcl9mYiB7Cj4gKyAgICAgICAgICBzdHlsZT1kYXNo ZWQKPiArICAgICAgICAgIGxhYmVsPSJSQU0iCj4gKwo+ICsgICAgICAgICAgbm9kZSBbc2hhcGU9 Ym94IHdpZHRoPTEuNyBoZWlnaHQ9MC4yXQo+ICsKPiArICAgICAgICAgICJGQiAxIiAtPiAiUGxh bmUgRGVnYW1tYSBBIgo+ICsgICAgICAgICAgIkZCIDIiIC0+ICJQbGFuZSBEZWdhbW1hIEIiCj4g KyAgICAgICAgICAiRkIgMyIgLT4gIlBsYW5lIERlZ2FtbWEgQyIKPiArICAgICAgfQo+ICsgICB9 Cj4gKwo+ICtJbiByZWFsIHdvcmxkIHVzZWNhc2VzLAo+ICsKPiArMS4gUGxhbmUgRGVnYW1tYSBj YW4gYmUgdXNlZCB0byBsaW5lYXJpemUgYSBub24gbGluZWFyIGdhbW1hCj4gK2VuY29kZWQgZnJh bWVidWZmZXIuIFRoaXMgaXMgbmVlZGVkIHRvIGRvIGFueSBsaW5lYXIgbWF0aCBsaWtlCj4gK2Nv bG9yIHNwYWNlIGNvbnZlcnNpb24uIEZvciBleCwgbGluZWFyaXplIGZyYW1lcyBlbmNvZGVkIGlu IFNSR0IKPiArb3IgYnkgSERSIGN1cnZlLgo+ICsKPiArMi4gTGF0ZXIgUGxhbmUgQ1RNIGJsb2Nr IGNhbiBjb252ZXJ0IHRoZSBjb250ZW50IHRvIHNvbWUgZGlmZmVyZW50Cj4gK2NvbG9yc3BhY2Uu IEZvciBleCwgU1JHQiB0byBCVDIwMjAgZXRjLgo+ICsKPiArMy4gUGxhbmUgR2FtbWEgYmxvY2sg Y2FuIGJlIHVzZWQgbGF0ZXIgdG8gcmUtYXBwbHkgdGhlIG5vbi1saW5lYXIKPiArY3VydmUuIFRo aXMgY2FuIGFsc28gYmUgdXNlZCB0byBhcHBseSBUb25lIE1hcHBpbmcgZm9yIEhEUiB1c2VjYXNl cy4KPiArCgpUaGlzIHdvdWxkIG1lYW4geW91J3JlIGJsZW5kaW5nIGluIGdhbW1hIHNwYWNlIHdo aWNoIGlzIGxpa2VseSBub3Qgd2hhdAptb3N0IGNvbXBvc2l0b3JzIGV4cGVjdC4gVGhlcmUgYXJl IG51bWVyb3VzIGFydGljbGVzIHRoYXQgZGVzY3JpYmUgd2h5CmJsZW5kaW5nIGluIGdhbW1hIHNw YWNlIGlzIHByb2JsZW1hdGljLCBzdWNoIGFzIFsxXQoKWzFdIGh0dHBzOi8vbmluZWRlZ3JlZXNi ZWxvdy5jb20vcGhvdG9ncmFwaHkvbGluZWFyLWdhbW1hLWJsdXItbm9ybWFsLWJsZW5kLmh0bWwK ClRvIGJsZW5kIGluIGxpbmVhciBzcGFjZSB0aGlzIHNob3VsZCBiZSBjb25maWd1cmVkIHRvIGRv CgogIFBsYW5lIERlZ2FtbWEgPiBQbGFuZSBDVE0gPiBDUlRDIEdhbW1hCgpJIHRoaW5rIGl0IHdv dWxkIGFsc28gYmUgZ29vZCBpZiB3ZSBtb3ZlZCBhd2F5IGZyb20gY2FsbGluZyB0aGlzIGdhbW1h LiBJdCdzCnJlYWxseSBvbmx5IGdhbW1hIGZvciBsZWdhY3kgU0RSIHNjZW5hcmlvcy4gRm9yIEhE UiBjYXNlcyBJIHdvdWxkIG5ldmVyIGV4cGVjdAp0aGVzZSB0byB1c2UgZ2FtbWEgYW5kIGV2ZW4g dGhvdWdoIHRoZSBzUkdCIHRyYW5zZmVyIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGdhbW1hCmZ1bmN0 aW9ucyBpdCdzIGNvbXBsaWNhdGVkIFsyXS4KClsyXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcv d2lraS9TUkdCCgpBIGJldHRlciB3YXkgdG8gZGVzY3JpYmUgdGhlc2Ugd291bGQgYmUgYXMgInRy YW5zZmVyIGZ1bmN0aW9uIiBhbmQgImludmVyc2UKdHJhbnNmZXIgZnVuY3Rpb24uIiBUaGUgc3Bh Y2UgYXQgdmFyaW91cyBzdGFnZXMgY291bGQgdGhlbiBiZSBkZXNjcmliZWQgYXMgbGluZWFyCm9y IG5vbi1saW5lYXIsIHNwZWNpZmljYWxseSBQUSwgSExHLCBzUkdCLCBCVDcwOSwgb3IgdXNpbmcg YW5vdGhlciB0cmFuc2ZlcgpmdW5jdGlvbi4KCkhhcnJ5Cgo+ICtBbGwgdGhlIGxheWVycyBvciBm cmFtZWJ1ZmZlcnMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gc2FtZSBjb2xvcgo+ICtzcGFjZSBh bmQgZm9ybWF0IGJlZm9yZSBibGVuZGluZy4gVGhlIHBsYW5lIGNvbG9yIGhhcmR3YXJlIGJsb2Nr cwo+ICtjYW4gaGVscCB3aXRoIHRoaXMuIE9uY2UgdGhlIERhdGEgaXMgYmxlbmRlZCwgc2ltaWxh ciBjb2xvciBwcm9jZXNzaW5nCj4gK2NhbiBiZSBkb25lIG9uIGJsZW5kZWQgb3V0cHV0IHVzaW5n IHBpcGUgY29sb3IgaGFyZHdhcmUgYmxvY2tzLgo+ICsKPiArRFJNIFByb3BlcnRpZXMgaGF2ZSBi ZWVuIGNyZWF0ZWQgdG8gZGVmaW5lIGFuZCBleHBvc2UgYWxsIHRoZXNlCj4gK2hhcmR3YXJlIGJs b2NrcyB0byB1c2Vyc3BhY2UuIEEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIChjb21wb3NpdG9yCj4g K29yIGFueSBjb2xvciBhcHApIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBhbmQgZGVmaW5lIHBv bGljaWVzIHRvCj4gK2VmZmljaWVudGx5IHVzZSB0aGUgZGlzcGxheSBoYXJkd2FyZSBmb3Igc3Vj aCBjb2xvciBvcGVyYXRpb25zLgo+ICsKPiArUGlwZSBDb2xvciBNYW5hZ2VtZW50IFByb3BlcnRp ZXMKPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICAuLiBrZXJuZWwt ZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9jb2xvcl9tZ210LmMKPiAgICAgOmRvYzogb3ZlcnZp ZXcKPiAgCj4gK1BsYW5lIENvbG9yIE1hbmFnZW1lbnQgUHJvcGVydGllcwo+ICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dw dS9kcm0vZHJtX2NvbG9yX21nbXQuYwo+ICsgICA6ZG9jOiBQbGFuZSBDb2xvciBQcm9wZXJ0aWVz Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9jb2xvcl9tZ210LmMK PiArICAgOmRvYzogZXhwb3J0Cj4gKwo+ICBUaWxlIEdyb3VwIFByb3BlcnR5Cj4gIC0tLS0tLS0t LS0tLS0tLS0tLS0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gaW5kZXggYThiYmIwMjE2ODRiLi44 ODkyZDAzNjAyZjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiBAQCAtNzA4LDYgKzcwOCw3IEBA IHN0YXRpYyB2b2lkIGRybV9hdG9taWNfcGxhbmVfcHJpbnRfc3RhdGUoc3RydWN0IGRybV9wcmlu dGVyICpwLAo+ICAJCSAgIGRybV9nZXRfY29sb3JfZW5jb2RpbmdfbmFtZShzdGF0ZS0+Y29sb3Jf ZW5jb2RpbmcpKTsKPiAgCWRybV9wcmludGYocCwgIlx0Y29sb3ItcmFuZ2U9JXNcbiIsCj4gIAkJ ICAgZHJtX2dldF9jb2xvcl9yYW5nZV9uYW1lKHN0YXRlLT5jb2xvcl9yYW5nZSkpOwo+ICsJZHJt X3ByaW50ZihwLCAiXHRjb2xvcl9tZ210X2NoYW5nZWQ9JWRcbiIsIHN0YXRlLT5jb2xvcl9tZ210 X2NoYW5nZWQpOwo+ICAKPiAgCWlmIChwbGFuZS0+ZnVuY3MtPmF0b21pY19wcmludF9zdGF0ZSkK PiAgCQlwbGFuZS0+ZnVuY3MtPmF0b21pY19wcmludF9zdGF0ZShwLCBzdGF0ZSk7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmMKPiBpbmRleCBkZGNmNWMyYzhlNmEu LmYyNmIwMzg1MzcxMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19z dGF0ZV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hl bHBlci5jCj4gQEAgLTMxMSw2ICszMTEsOCBAQCB2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxh bmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJc3RhdGUtPmZl bmNlID0gTlVMTDsKPiAgCXN0YXRlLT5jb21taXQgPSBOVUxMOwo+ICAJc3RhdGUtPmZiX2RhbWFn ZV9jbGlwcyA9IE5VTEw7Cj4gKwo+ICsJc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCA9IGZhbHNl Owo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNh dGVfc3RhdGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf dWFwaS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCj4gaW5kZXggNDM4ZTk1 ODViMjI1Li40MGZhMDVmYTMzZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9h dG9taWNfdWFwaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCj4g QEAgLTU5NSw2ICs1OTUsOCBAQCBzdGF0aWMgaW50IGRybV9hdG9taWNfcGxhbmVfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCXN0YXRlLT5jb2xvcl9lbmNvZGluZyA9 IHZhbDsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3Bl cnR5KSB7Cj4gIAkJc3RhdGUtPmNvbG9yX3JhbmdlID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBwbGFuZS0+ZGVnYW1tYV9tb2RlX3Byb3BlcnR5KSB7Cj4gKwkJc3RhdGUtPmRlZ2Ft bWFfbW9kZSA9IHZhbDsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2Zi X2RhbWFnZV9jbGlwcykgewo+ICAJCXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9i bG9iX2Zyb21faWQoZGV2LAo+ICAJCQkJCSZzdGF0ZS0+ZmJfZGFtYWdlX2NsaXBzLAo+IEBAIC02 NjEsNiArNjYzLDggQEAgZHJtX2F0b21pY19wbGFuZV9nZXRfcHJvcGVydHkoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gIAkJKnZhbCA9IHN0YXRlLT5jb2xvcl9lbmNvZGluZzsKPiAgCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3BlcnR5KSB7Cj4gIAkJKnZh bCA9IHN0YXRlLT5jb2xvcl9yYW5nZTsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUt PmRlZ2FtbWFfbW9kZV9wcm9wZXJ0eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+ZGVnYW1tYV9tb2Rl Owo+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfZmJfZGFtYWdlX2NsaXBz KSB7Cj4gIAkJKnZhbCA9IChzdGF0ZS0+ZmJfZGFtYWdlX2NsaXBzKSA/Cj4gIAkJCXN0YXRlLT5m Yl9kYW1hZ2VfY2xpcHMtPmJhc2UuaWQgOiAwOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2NvbG9yX21nbXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29sb3JfbWdtdC5jCj4g aW5kZXggYmIxNGY0ODhjOGY2Li4wODVlZDBkMGRiMDAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9jb2xvcl9tZ210LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbG9y X21nbXQuYwo+IEBAIC0zNCw4ICszNCw4IEBACj4gIC8qKgo+ICAgKiBET0M6IG92ZXJ2aWV3Cj4g ICAqCj4gLSAqIENvbG9yIG1hbmFnZW1lbnQgb3IgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaXMg c3VwcG9ydGVkIHRocm91Z2ggYSBzZXQgb2YgNQo+IC0gKiBwcm9wZXJ0aWVzIG9uIHRoZSAmZHJt X2NydGMgb2JqZWN0LiBUaGV5IGFyZSBzZXQgdXAgYnkgY2FsbGluZwo+ICsgKiBQaXBlIENvbG9y IG1hbmFnZW1lbnQgb3IgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaXMgc3VwcG9ydGVkIHRocm91 Z2ggYQo+ICsgKiBzZXQgb2YgNSBwcm9wZXJ0aWVzIG9uIHRoZSAmZHJtX2NydGMgb2JqZWN0LiBU aGV5IGFyZSBzZXQgdXAgYnkgY2FsbGluZwo+ICAgKiBkcm1fY3J0Y19lbmFibGVfY29sb3JfbWdt dCgpLgo+ICAgKgo+ICAgKiAiREVHQU1NQV9MVVTigJ06Cj4gQEAgLTU4NCw2ICs1ODQsOTUgQEAg aW50IGRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVy dGllcyk7Cj4gIAo+ICsvKioKPiArICogRE9DOiBQbGFuZSBDb2xvciBQcm9wZXJ0aWVzCj4gKyAq Cj4gKyAqIFBsYW5lIENvbG9yIG1hbmFnZW1lbnQgb3IgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMg aXMgc3VwcG9ydGVkCj4gKyAqIHRocm91Z2ggYSBzZXQgb2YgNSBwcm9wZXJ0aWVzIG9uIHRoZSAm ZHJtX3BsYW5lIG9iamVjdC4KPiArICoKPiArICogZGVnYW1tYV9tb2RlX3Byb3BlcnR5Ogo+ICsg KiAgICAgQmxvYiBwcm9wZXJ0eSB3aGljaCBhZHZlcnRpemVzIHRoZSBwb3NzaWJsZSBkZWdhbW1h IG1vZGVzIGFuZAo+ICsgKiAgICAgbHV0IHJhbmdlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3Jt LiBUaGlzICBhbGxvd3MgdXNlcnNwYWNlCj4gKyAqICAgICB0byBxdWVyeSBhbmQgZ2V0IHRoZSBw bGFuZSBkZWdhbW1hIGNvbG9yIGNhcHMgYW5kIGNob29zZSB0aGUKPiArICogICAgIGFwcHJvcHJp YXRlIGRlZ2FtbWEgbW9kZSBhbmQgY3JlYXRlIGx1dCB2YWx1ZXMgYWNjb3JkaW5nbHkKPiArICoK PiArICovCj4gK2ludCBkcm1fcGxhbmVfY3JlYXRlX2NvbG9yX21nbXRfcHJvcGVydGllcyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICsJCQkJCSAgIGludCBudW1fdmFsdWVzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wOwo+ICsKPiArCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJP UF9FTlVNLAo+ICsJCQkJICAgIlBMQU5FX0RFR0FNTUFfTU9ERSIsIG51bV92YWx1ZXMpOwo+ICsJ aWYgKCFwcm9wKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXBsYW5lLT5kZWdhbW1hX21v ZGVfcHJvcGVydHkgPSBwcm9wOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1C T0woZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcl9tZ210X3Byb3BlcnRpZXMpOwo+ICsKPiArdm9pZCBk cm1fcGxhbmVfYXR0YWNoX2RlZ2FtbWFfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKPiArewo+ICsJaWYgKCFwbGFuZS0+ZGVnYW1tYV9tb2RlX3Byb3BlcnR5KQo+ICsJCXJldHVy bjsKPiArCj4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCj4gKwkJ CQkgICBwbGFuZS0+ZGVnYW1tYV9tb2RlX3Byb3BlcnR5LCAwKTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9wbGFuZV9hdHRhY2hfZGVnYW1tYV9wcm9wZXJ0aWVzKTsKPiArCj4gK2ludCBkcm1f cGxhbmVfY29sb3JfYWRkX2dhbW1hX2RlZ2FtbWFfbW9kZV9yYW5nZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiArCQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCj4gKwkJCQkJCSBjb25zdCBzdHJ1 Y3QgZHJtX2NvbG9yX2x1dF9yYW5nZSAqcmFuZ2VzLAo+ICsJCQkJCQkgc2l6ZV90IGxlbmd0aCwg ZW51bSBsdXRfdHlwZSB0eXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJs b2I7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wID0gTlVMTDsKPiArCWludCBudW1fcmFu Z2VzID0gbGVuZ3RoIC8gc2l6ZW9mKHJhbmdlc1swXSk7Cj4gKwlpbnQgaSwgcmV0LCBudW1fdHlw ZXNfMDsKPiArCj4gKwlpZiAodHlwZSA9PSBMVVRfVFlQRV9ERUdBTU1BKQo+ICsJCXByb3AgPSBw bGFuZS0+ZGVnYW1tYV9tb2RlX3Byb3BlcnR5Owo+ICsKPiArCWlmICghcHJvcCkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAobGVuZ3RoID09IDAgJiYgbmFtZSkKPiArCQlyZXR1cm4g ZHJtX3Byb3BlcnR5X2FkZF9lbnVtKHByb3AsIDAsIG5hbWUpOwo+ICsKPiArCWlmIChXQVJOX09O KGxlbmd0aCA9PSAwIHx8IGxlbmd0aCAlIHNpemVvZihyYW5nZXNbMF0pICE9IDApKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJbnVtX3R5cGVzXzAgPSBod2VpZ2h0OChyYW5nZXNbMF0uZmxhZ3Mg JiAoRFJNX01PREVfTFVUX0dBTU1BIHwKPiArCQkJICAgICAgIERSTV9NT0RFX0xVVF9ERUdBTU1B KSk7Cj4gKwlpZiAobnVtX3R5cGVzXzAgPT0gMCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g Kwlmb3IgKGkgPSAxOyBpIDwgbnVtX3JhbmdlczsgaSsrKSB7Cj4gKwkJaW50IG51bV90eXBlcyA9 IGh3ZWlnaHQ4KHJhbmdlc1tpXS5mbGFncyAmIChEUk1fTU9ERV9MVVRfR0FNTUEgfAo+ICsJCQkJ CSBEUk1fTU9ERV9MVVRfREVHQU1NQSkpOwo+ICsKPiArCQkvKiBlaXRoZXIgYWxsIHJhbmdlcyBo YXZlIERFR0FNTUF8R0FNTUEgb3Igbm9uZSBoYXZlIGl0ICovCj4gKwkJaWYgKG51bV90eXBlc18w ICE9IG51bV90eXBlcykKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJYmxvYiA9 IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihwbGFuZS0+ZGV2LCBsZW5ndGgsIHJhbmdlcyk7Cj4g KwlpZiAoSVNfRVJSKGJsb2IpKQo+ICsJCXJldHVybiBQVFJfRVJSKGJsb2IpOwo+ICsKPiArCXJl dCA9IGRybV9wcm9wZXJ0eV9hZGRfZW51bShwcm9wLCBibG9iLT5iYXNlLmlkLCBuYW1lKTsKPiAr CWlmIChyZXQpIHsKPiArCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoYmxvYik7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9w bGFuZV9jb2xvcl9hZGRfZ2FtbWFfZGVnYW1tYV9tb2RlX3JhbmdlKTsKPiArCj4gIC8qKgo+ICAg KiBkcm1fY29sb3JfbHV0X2NoZWNrIC0gY2hlY2sgdmFsaWRpdHkgb2YgbG9va3VwIHRhYmxlCj4g ICAqIEBsdXQ6IHByb3BlcnR5IGJsb2IgY29udGFpbmluZyBMVVQgdG8gY2hlY2sKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfb2JqZWN0LmggYi9pbmNsdWRlL2RybS9kcm1fbW9k ZV9vYmplY3QuaAo+IGluZGV4IGMzNGEzZTgwMzBlMS4uZDQxMjhjN2RhYTA4IDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX29iamVjdC5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJt X21vZGVfb2JqZWN0LmgKPiBAQCAtNjAsNyArNjAsNyBAQCBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0 IHsKPiAgCXZvaWQgKCpmcmVlX2NiKShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gIH07Cj4gIAo+IC0j ZGVmaW5lIERSTV9PQkpFQ1RfTUFYX1BST1BFUlRZIDI0Cj4gKyNkZWZpbmUgRFJNX09CSkVDVF9N QVhfUFJPUEVSVFkgMjYKPiAgLyoqCj4gICAqIHN0cnVjdCBkcm1fb2JqZWN0X3Byb3BlcnRpZXMg LSBwcm9wZXJ0eSB0cmFja2luZyBmb3IgJmRybV9tb2RlX29iamVjdAo+ICAgKi8KPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BsYW5lLmggYi9pbmNsdWRlL2RybS9kcm1fcGxhbmUuaAo+ IGluZGV4IDEyOTQ2MTBlODRmNC4uZTQ3NmE1OTM5ZjhlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybV9wbGFuZS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BsYW5lLmgKPiBAQCAtMjM2 LDYgKzIzNiwxNSBAQCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHsKPiAgCj4gIAkvKiogQHN0YXRl OiBiYWNrcG9pbnRlciB0byBnbG9iYWwgZHJtX2F0b21pY19zdGF0ZSAqLwo+ICAJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsKPiArCS8qKgo+ICsJICogQGRlZ2FtbWFfbW9kZTog VGhpcyBpcyBhIGJsb2JfaWQgYW5kIGV4cG9zZXMgdGhlIHBsYXRmb3JtIGNhcGFiaWxpdGllcwo+ ICsJICogd3J0IHRvIHZhcmlvdXMgZ2FtbWEgbW9kZXMgYW5kIHRoZSByZXNwZWN0aXZlIGx1dCBy YW5nZXMuIFRoaXMgYWxzbwo+ICsJICogaGVscHMgdXNlciBzZWxlY3QgYSBkZWdhbW1hIG1vZGUg YW1vbmdzdCB0aGUgc3VwcG9ydGVkIG9uZXMuCj4gKwkgKi8KPiArCXUzMiBkZWdhbW1hX21vZGU7 Cj4gKwo+ICsJdTggY29sb3JfbWdtdF9jaGFuZ2VkIDogMTsKPiAgfTsKPiAgCj4gIHN0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9yZWN0Cj4gQEAgLTc0Nyw2ICs3NTYsMTIgQEAgc3RydWN0IGRybV9w bGFuZSB7Cj4gIAkgKiBzY2FsaW5nLgo+ICAJICovCj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpz Y2FsaW5nX2ZpbHRlcl9wcm9wZXJ0eTsKPiArCj4gKwkvKioKPiArCSAqIEBkZWdhbW1hX21vZGVf cHJvcGVydHk6IE9wdGlvbmFsIFBsYW5lIHByb3BlcnR5IHRvIHNldCB0aGUgTFVUCj4gKwkgKiB1 c2VkIHRvIGNvbnZlcnQgdGhlIGZyYW1lYnVmZmVyJ3MgY29sb3JzIHRvIGxpbmVhciBnYW1tYS4K PiArCSAqLwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqZGVnYW1tYV9tb2RlX3Byb3BlcnR5Owo+ ICB9Owo+ICAKPiAgI2RlZmluZSBvYmpfdG9fcGxhbmUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dCBkcm1fcGxhbmUsIGJhc2UpCj4gQEAgLTgzOCw2ICs4NTMsMTQgQEAgdm9pZCBkcm1fcGxhbmVf Zm9yY2VfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4gIGludCBkcm1fbW9kZV9w bGFuZV9zZXRfb2JqX3Byb3Aoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJCQkgICAgICAg c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gIAkJCQkgICAgICAgdWludDY0X3QgdmFs dWUpOwo+ICtpbnQgZHJtX3BsYW5lX2NyZWF0ZV9jb2xvcl9tZ210X3Byb3BlcnRpZXMoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAr CQkJCQkgICBpbnQgbnVtX3ZhbHVlcyk7Cj4gK3ZvaWQgZHJtX3BsYW5lX2F0dGFjaF9kZWdhbW1h X3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwo+ICtpbnQgZHJtX3BsYW5lX2Nv bG9yX2FkZF9nYW1tYV9kZWdhbW1hX21vZGVfcmFuZ2Uoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gKwkJCQkJCSBjb25zdCBjaGFyICpuYW1lLAo+ICsJCQkJCQkgY29uc3Qgc3RydWN0IGRybV9j b2xvcl9sdXRfcmFuZ2UgKnJhbmdlcywKPiArCQkJCQkJIHNpemVfdCBsZW5ndGgsIGVudW0gbHV0 X3R5cGUgdHlwZSk7Cj4gIAo+ICAvKioKPiAgICogZHJtX3BsYW5lX2ZpbmQgLSBmaW5kIGEgJmRy bV9wbGFuZQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==