From nobody Fri Sep 19 03:50:31 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CF7A6C4321E for ; Tue, 29 Nov 2022 11:31:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232960AbiK2LbJ (ORCPT ); Tue, 29 Nov 2022 06:31:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37540 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232287AbiK2Laz (ORCPT ); Tue, 29 Nov 2022 06:30:55 -0500 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2079.outbound.protection.outlook.com [40.107.212.79]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D8F445EC2 for ; Tue, 29 Nov 2022 03:30:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lmwmmcuKcaNv1BtT55V3lOgucftAaDNK35NkhXdqJbTwlf2DOPVUDpJlAnVhBbwL4kwoakGi7JXdhkNdlgz9S4ojNlWOTQCf3o0ckJ34ss/JAi1DpJRsizsWyscGnMOnV77VRcWpJlMj/zToj1Le3Z0mNTWAMbSrdY5uPKRPherBnmyROBOUrpr+rsBDJtMzYG5M1QEjWZnDI5ZevBFwRf7rV6SFS/oNKBG9Fakx+A0Q6SBEKMLT2j5XSGwgtowtoPEf+nrD627F2+ReJbuUju1wh3JA8VA9I6/Pn4jIy93xzfn4DNxhA0qgHO6PUs5REniD8eKTSSYWujM9TFCY/Q== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ezmSncooZomdRmvkuyRj+e7licZUwsmTIVG2/JOMCZg=; b=c8GevYnTiULVEKc3QBuGET58LoljQB82yBA3L5c7CZs7MieXL7OqnTeGOLJUfA6V9YZ/9vJzERZ+TqSKW1YT9VK4Sx/aqbXweNi3MjiJ+LreW2Glggkb7ILxi1CYSmJTfwJYCiL80+eUBzjX1e+J1SZ3ToBWPKclmChuDFGRz/XrkuNTeKgo9APgg+VAbDN+S9IIdvA0fbdfqujOXzSzmgC4eb6lpluj4Q1VW59cEGFowiw0U3T8e6UCnJmcJsFTJI5XIBJik3oQRmgruMbFrCjDjGAkZQztiFtLLVCA13E4QcONj1cTMDbzi1JzkJ51GSrcYvR8feBeBzRiFayowQ== 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=ezmSncooZomdRmvkuyRj+e7licZUwsmTIVG2/JOMCZg=; b=CGS2lKx0yDBTnhvhdGk7bxkjKLV+mEMES8R9sRx5sCZNq9EgllDluWKsY7PujYBj95ncO1UDpKeAI+voMPblJBB5oXnxUCONWHcTo/MgZ33HclNcyAxfDawm0hkfTCy2siyfZ8icgrGPZNa50LKkm32J8WT2/ruzXXJ106m4nhM= Received: from DM4PR12MB5165.namprd12.prod.outlook.com (2603:10b6:5:394::9) by SN7PR12MB7132.namprd12.prod.outlook.com (2603:10b6:806:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.23; Tue, 29 Nov 2022 11:30:29 +0000 Received: from DM4PR12MB5165.namprd12.prod.outlook.com ([fe80::af94:f2ad:209b:c565]) by DM4PR12MB5165.namprd12.prod.outlook.com ([fe80::af94:f2ad:209b:c565%4]) with mapi id 15.20.5857.023; Tue, 29 Nov 2022 11:30:29 +0000 Content-Type: multipart/mixed; boundary="_000_DM4PR12MB5165AB3C1BBD69C33A48F00E87129DM4PR12MB5165namp_" From: "Pan, Xinhui" To: "amd-gfx@lists.freedesktop.org" CC: "daniel@ffwll.ch" , "matthew.auld@intel.com" , "Koenig, Christian" , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , "Paneer Selvam, Arunpravin" , "intel-gfx@lists.freedesktop.org" Subject: =?gb2312?B?u9i4tDogW1BBVENIIHY0XSBkcm06IE9wdGltaXNlIGZvciBjb250aW51b3Vz?= =?gb2312?Q?_memory_allocation?= Thread-Topic: [PATCH v4] drm: Optimise for continuous memory allocation Thread-Index: AQHZA+FYf6F+KXzzGkaj7rVsGUeL5q5VwyZh Date: Tue, 29 Nov 2022 11:30:29 +0000 Message-ID: References: <20221129105655.125571-1-xinhui.pan@amd.com> In-Reply-To: <20221129105655.125571-1-xinhui.pan@amd.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=True;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2022-11-29T11:30:26.929Z;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=0;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR12MB5165:EE_|SN7PR12MB7132:EE_ x-ms-office365-filtering-correlation-id: 91791c7e-604e-4e00-a55f-08dad1fd1e62 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EY1GnQYO9k/CRVDTbnpFg9KwKlJnb52l8c3uj+NQFfeVZRnF7XKv7TuwHuEdYnWiIg02oAuozXYm6iYZCesfp9UwZGlN7RldtW2sYm5zMO7SXJKt7DFHqwjgsKGVCG6eNTJLKARdJ6e1Z4HN9JZ14TFQWYUxG0/9KZA1SNTuz1TdiX54BHw09Zn/LeKSxGWEovSf8B0nUT5sXHIDlScixtxIBhEjlotb10fU8+XfUlR3w2a3RhdoRfLP48GCOmtrDKJiMxZypXEgxbnw8HNpEiwiQt4XE8zBKnPZkSVXGKhukdPQD0A3bSYkxno+qkfCqrLSH14LrzHHuNgIrhYZ6scek7g7FZ0pjf30Fneub5MGmSUiXd4PJpEkqSY8baKFIUCw/EgkR73G78lG1GoJ1Hqzz0ZADqBkAz0S0USEuLDMQ9V7RNB/SXuykDcmJoHP5z4+Mo8qzR4o8GldmmgNgxi8Eau20t5hqyLKSp80eSsjJSsgJ5cASJwOxzn3WqGdg5dV6MVOn9hoikhiOgDNwJKR9D8W3eI4202GpU7xQg/vXKglPW3LpEfGj6g3WmKtg5/8w6g2vd7Ko/0s3Mw3gW3C+NL5KDdrHBEPVjyjsHTdyYkR5yRT3xLpNkiwpn/J/Tzqvks4LBN1Y3afbb8HOy9HCE0wGhTti6thCXQSrUzIQY85b0bIOye96sbvznwuDvtkscKzQ70/KwN6MPLFRg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5165.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(396003)(39860400002)(376002)(346002)(451199015)(54906003)(6916009)(478600001)(9686003)(66899015)(6506007)(7696005)(66946007)(316002)(91956017)(76116006)(71200400001)(224303003)(8936002)(52536014)(66476007)(64756008)(4326008)(66446008)(66556008)(186003)(41300700001)(5660300002)(2906002)(83380400001)(122000001)(38100700002)(55016003)(33656002)(38070700005)(86362001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?MjlaOGdHMnIzUi9KeE1WaDlyVFJaSXhPa0RMMkZwWlpQdGJPNWI4d3hlNVl6?= =?gb2312?B?dTN2enpIbEZxMHZsaFlaelkyQVdhaTFHT0ljRjE2RmdzQVJsM0RxakNOajNr?= =?gb2312?B?NkNvVzZMS216WlJoQS9wb0dTS2pMdDRmY2o5eGFzeFRDYXNucEh0QVppNFRX?= =?gb2312?B?YmFkUDMyMFVRS1ZGN0NxT3JCb3RiTUhFRTV5a2w1VHZ2YWUwWXdMRE1TcE1S?= =?gb2312?B?YWE4dTJEYTNjVFd5aGFEWGMrUkhlL1JzcjY4cXRDN1BWRVJHMVRUbC9yYUtZ?= =?gb2312?B?VWR2dXo0czFRUFRYY0tMck0yS3c5NTRFQTQ1M2FpMGZna3ZDeGpaM3FxcVNS?= =?gb2312?B?cHFaS0hWNlh0UTNYQmN6UjJnVTd2RnhQemN3ZUlSdlFjYnJMMnVLbEs1ZkJp?= =?gb2312?B?aWZLelVzL3ZhQ21QQ3o0ZUJjTkZLdkQ2bmpqYWEwQ0lBUUV6UUNXaUkyMnF1?= =?gb2312?B?Q2xjRmtEZ1JxY05VbElld3hWTWJPQjdFazFlR3M5cjRERlZmUnc2aThSc0FY?= =?gb2312?B?S05PVEdsbmRBOHJ0VXMrZDB5MngrRHRwSldJeWxOcVpyUmFkM2dHZWd6RDBX?= =?gb2312?B?aXF5ZGxUR0t3cEtMK29aaUJXMVJrTW93NlhmenFabEEvT1hkbjJSeExxMVpG?= =?gb2312?B?MVdXM1N5TzQ1d3RCZ3l5UFFhc1JKYU1SYWJLbjBXcGkvQWhPaHhMZHFPZm84?= =?gb2312?B?ZTJyakMwcWxxMkoySGJ0YytWbW16d21vL1VQRnNnZVViajdDZC9HMVpHM2dz?= =?gb2312?B?bDVCejQxd2NUQ1IvVUEyb25LQ3pHd2V4RE9iUWNwRHJoR1krZ2ZnaWo1RE9p?= =?gb2312?B?dng5ZTZVL0MrVGozUGVXRUlYZmtXdEZnSjN1OGJYajZGZ2tFVE9ZNW9Jbk10?= =?gb2312?B?ZVVGZFcrV0xTcUdsT01ETi9uRmNLcUdTaGdpcC8zL0wrUGd2MXZteTJHNStQ?= =?gb2312?B?WCtNNHpUWVVIYk9wTHQyelZVei9MaVB4amcwQWNRS3BTYjFDeW0wNHFlV0N6?= =?gb2312?B?NGFqc0pzQi82M3ZIcWpscGR6SGN3UjVRc0NFV2dnVGdYbks1djdSL3RqVW5R?= =?gb2312?B?eE44YVJsMDVXclB0SlNhdEUveFBPZFFEZGpWVGZ3RFRra1A5YXI2OThLaUw1?= =?gb2312?B?QzNsT0J1NkxDNnZSVFIxbHBSbysyUWhqYldOSVFnWm5lVmYzYk5waGFoNVlR?= =?gb2312?B?NXZYWXpmOXdNcTRweTRVcVRndUdNdGZxN08ySkZUYzNXaUZCd21aSUhOWnN5?= =?gb2312?B?aE1OcitwY2NFMms3a05RamptbDNEVEVUbzNwY3NUSUsvNWJ4OTZyc0UrUmVQ?= =?gb2312?B?b2xtV3N5dXBuaFpIWC9kOXZLSzRlSXVIc0ExQ3FWNDhDSVE2Z2dhalVsLzdM?= =?gb2312?B?V2d6YjFPQjdNUzU5c0RZV0UzeUczcVdPOEJWaDVaVThuUnpCWXhKQkFZUWRp?= =?gb2312?B?Z1hIYWFRZ3FXa1g5eGVQcTZDcDNZdVRYWWpqRlNxVGgrQnZkbGhlbHkyWVkx?= =?gb2312?B?ZkYxcS9LLzZWbFJncFJNWngvNTJKQjhLVXVEV0dENHpTMlN6K1V3cTBYVDBk?= =?gb2312?B?cHhkUzladjlycGdXQVMrY2tBRjF6NHhFd0ZuMVFoTVd6UU1MdGZHbldFUjd3?= =?gb2312?B?eFkzSmt0b0FSbFJOZnVsRUVabzJnSEkycGJOQzhHWFhOSTNRREpKeXZOWk5R?= =?gb2312?B?OVIrSjdnNkdOU3pWSjVvZVdZZzlLWUFRdlo0ekZxWlVSTi83b0lXV2xiRTVi?= =?gb2312?B?a2ZWZ1psdFJrd0I2QWVPQ0I2SHFGMHl1cXdoeFpQYnRIV1grN01PemxpTlBu?= =?gb2312?B?d2txRXllUjc5OUVlZGxVTlMzWVdvVTdzTDVXVjNUZ3RPc1ViZ0tBL2tpL0pM?= =?gb2312?B?U2l0Z2lBaXU4dW55OFE0dUo0VWhmaThJVUlzV0NmUmVQSGlhLzkwNHdtVitm?= =?gb2312?B?RGxBc3VzME1sMmk4OUQvKzl1QXROcld6TE54WkNxNHVFMDJEQWU0bm96ejBn?= =?gb2312?B?YmJWVHRmV21sRFhhUXlYNnNXUnlOZUI2L21rV3NzMmpLRytHdzVCNkdMckhF?= =?gb2312?B?aG9TYWlKMk1xYVB1bFhWbXZFZlI3MXF0WExhZFFVMFVNQXF6Y3Q0NHhMTEM3?= =?gb2312?B?MWJQUkFJWXB4bkUxSFlRSnc1WHE1RUkyaTZDeEwwZ0dqbHlGakErVlMzOHhl?= =?gb2312?Q?K3FLRd5yKLLg3D+EX1Yi2W0=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5165.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91791c7e-604e-4e00-a55f-08dad1fd1e62 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2022 11:30:29.2902 (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: 0J87ne0JapJ9ini61mmxcX6El5dVhrGG/2lla6mvLhbQonT73/bK76yC4rWX/YMo X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7132 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --_000_DM4PR12MB5165AB3C1BBD69C33A48F00E87129DM4PR12MB5165namp_ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" [AMD Official Use Only - General] In one ROCM + gdm restart test, find_continuous_blocks() succeed with ratio 35%. the cod coverage report is below. 772 3998 : if (order-- =3D=3D min_order= ) { 773 352 : if (!(flags & DRM_BU= DDY_RANGE_ALLOCATION) && 774 352 : min_order !=3D 0= && pages =3D=3D BIT(order + 1)) { 775 79 : block =3D fi= nd_continuous_blocks(mm, 776 : = order, 777 : = flags, 778 : = &rblock); 779 79 : if (block) 780 : brea= k; 781 : } 782 300 : err =3D -ENOSPC; 783 300 : goto err_free; thanks xinhui ________________________________________ =E5=8F=91=E4=BB=B6=E4=BA=BA: Pan, Xinhui =E5=8F=91=E9=80=81=E6=97=B6=E9=97=B4: 2022=E5=B9=B411=E6=9C=8829=E6=97=A5 1= 8:56 =E6=94=B6=E4=BB=B6=E4=BA=BA: amd-gfx@lists.freedesktop.org =E6=8A=84=E9=80=81: daniel@ffwll.ch; matthew.auld@intel.com; Koenig, Christ= ian; dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; Paneer = Selvam, Arunpravin; intel-gfx@lists.freedesktop.org; Pan, Xinhui =E4=B8=BB=E9=A2=98: [PATCH v4] drm: Optimise for continuous memory allocati= on Currently drm-buddy does not have full knowledge of continuous memory. Lets consider scenario below. order 1: L R order 0: LL LR RL RR for order 1 allocation, it can offer L or R or LR+RL. For now, we only implement L or R case for continuous memory allocation. So this patch aims to implement the rest cases. Adding a new member leaf_link which links all leaf blocks in asceding order. Now we can find more than 2 sub-order blocks easier. Say, order 4 can be combined with corresponding order 4, 2+2, 1+2+1, 0+1+2+0, 0+2+1+0. Signed-off-by: xinhui pan --- change from v3: reworked totally. adding leaf_link. change from v2: search continuous block in nearby root if needed change from v1: implement top-down continuous allocation --- drivers/gpu/drm/drm_buddy.c | 108 +++++++++++++++++++++++++++++++++--- include/drm/drm_buddy.h | 1 + 2 files changed, 102 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c index 11bb59399471..8edafb99b02c 100644 --- a/drivers/gpu/drm/drm_buddy.c +++ b/drivers/gpu/drm/drm_buddy.c @@ -80,6 +80,7 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 ch= unk_size) { unsigned int i; u64 offset; + LIST_HEAD(leaf); if (size < chunk_size) return -EINVAL; @@ -136,6 +137,7 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 = chunk_size) goto out_free_roots; mark_free(mm, root); + list_add_tail(&root->leaf_link, &leaf); BUG_ON(i > mm->max_order); BUG_ON(drm_buddy_block_size(mm, root) < chunk_size); @@ -147,6 +149,7 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 = chunk_size) i++; } while (size); + list_del(&leaf); return 0; out_free_roots: @@ -205,6 +208,9 @@ static int split_block(struct drm_buddy *mm, mark_free(mm, block->left); mark_free(mm, block->right); + list_add(&block->right->leaf_link, &block->leaf_link); + list_add(&block->left->leaf_link, &block->leaf_link); + list_del(&block->leaf_link); mark_split(block); return 0; @@ -256,6 +262,9 @@ static void __drm_buddy_free(struct drm_buddy *mm, break; list_del(&buddy->link); + list_add(&parent->leaf_link, &block->leaf_link); + list_del(&buddy->leaf_link); + list_del(&block->leaf_link); drm_block_free(mm, block); drm_block_free(mm, buddy); @@ -386,6 +395,78 @@ alloc_range_bias(struct drm_buddy *mm, return ERR_PTR(err); } +static struct drm_buddy_block * +find_continuous_blocks(struct drm_buddy *mm, + int order, + unsigned long flags, + struct drm_buddy_block **rblock) +{ + struct list_head *head =3D &mm->free_list[order]; + struct drm_buddy_block *free_block, *max_block =3D NULL, *end, *beg= in; + u64 pages =3D BIT(order + 1); + u64 cur_pages; + + list_for_each_entry(free_block, head, link) { + if (max_block) { + if (!(flags & DRM_BUDDY_TOPDOWN_ALLOCATION)) + break; + + if (drm_buddy_block_offset(free_block) < + drm_buddy_block_offset(max_block)) + continue; + } + + cur_pages =3D BIT(order); + begin =3D end =3D free_block; + while (true) { + struct drm_buddy_block *prev, *next; + int prev_order, next_order; + + prev =3D list_prev_entry(begin, leaf_link); + if (!drm_buddy_block_is_free(prev) || + drm_buddy_block_offset(prev) > + drm_buddy_block_offset(begin)) { + prev =3D NULL; + } + next =3D list_next_entry(end, leaf_link); + if (!drm_buddy_block_is_free(next) || + drm_buddy_block_offset(next) < + drm_buddy_block_offset(end)) { + next =3D NULL; + } + if (!prev && !next) + break; + + prev_order =3D prev ? drm_buddy_block_order(prev) := -1; + next_order =3D next ? drm_buddy_block_order(next) := -1; + if (next_order >=3D prev_order) { + BUG_ON(drm_buddy_block_offset(end) + + drm_buddy_block_size(mm, end) !=3D + drm_buddy_block_offset(next)); + end =3D next; + cur_pages +=3D BIT(drm_buddy_block_order(ne= xt)); + } + if (prev_order >=3D next_order) { + BUG_ON(drm_buddy_block_offset(prev) + + drm_buddy_block_size(mm, prev) !=3D + drm_buddy_block_offset(begin)); + begin =3D prev; + cur_pages +=3D BIT(drm_buddy_block_order(pr= ev)); + } + if (pages =3D=3D cur_pages) + break; + BUG_ON(pages < cur_pages); + } + + if (pages > cur_pages) + continue; + + *rblock =3D end; + max_block =3D begin; + } + return max_block; +} + static struct drm_buddy_block * get_maxblock(struct list_head *head) { @@ -637,7 +718,7 @@ int drm_buddy_alloc_blocks(struct drm_buddy *mm, struct list_head *blocks, unsigned long flags) { - struct drm_buddy_block *block =3D NULL; + struct drm_buddy_block *block =3D NULL, *rblock =3D NULL; unsigned int min_order, order; unsigned long pages; LIST_HEAD(allocated); @@ -689,17 +770,30 @@ int drm_buddy_alloc_blocks(struct drm_buddy *mm, break; if (order-- =3D=3D min_order) { + if (!(flags & DRM_BUDDY_RANGE_ALLOCATION) && + min_order !=3D 0 && pages =3D=3D BIT(or= der + 1)) { + block =3D find_continuous_blocks(mm, + orde= r, + flag= s, + &rbl= ock); + if (block) + break; + } err =3D -ENOSPC; goto err_free; } } while (1); - mark_allocated(block); - mm->avail -=3D drm_buddy_block_size(mm, block); - kmemleak_update_trace(block); - list_add_tail(&block->link, &allocated); - - pages -=3D BIT(order); + do { + mark_allocated(block); + mm->avail -=3D drm_buddy_block_size(mm, block); + kmemleak_update_trace(block); + list_add_tail(&block->link, &allocated); + pages -=3D BIT(drm_buddy_block_order(block)); + if (block =3D=3D rblock || !rblock) + break; + block =3D list_next_entry(block, leaf_link); + } while (true); if (!pages) break; diff --git a/include/drm/drm_buddy.h b/include/drm/drm_buddy.h index 572077ff8ae7..c5437bd4f4f3 100644 --- a/include/drm/drm_buddy.h +++ b/include/drm/drm_buddy.h @@ -50,6 +50,7 @@ struct drm_buddy_block { */ struct list_head link; struct list_head tmp_link; + struct list_head leaf_link; }; /* Order-zero must be at least PAGE_SIZE */ -- 2.34.1 --_000_DM4PR12MB5165AB3C1BBD69C33A48F00E87129DM4PR12MB5165namp_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" 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 AABYAGkAbgBoAHUAaQAuAFAAYQBuAEAAYQBtAGQALgBjAG8AbQAAAAAAHwDlXwEAAAAuAAAAcwBp AHAAOgB4AGkAbgBoAHUAaQAuAHAAYQBuAEAAYQBtAGQALgBjAG8AbQAAAAAAHwAaDAEAAAAYAAAA UABhAG4ALAAgAFgAaQBuAGgAdQBpAAAAHwAfDAEAAAAmAAAAWABpAG4AaAB1AGkALgBQAGEAbgBA AGEAbQBkAC4AYwBvAG0AAAAAAB8AHgwBAAAACgAAAFMATQBUAFAAAAAAAAIBGQwBAAAAYAAAAAAA AACBKx+kvqMQGZ1uAN0BD1QCAAAAgFAAYQBuACwAIABYAGkAbgBoAHUAaQAAAFMATQBUAFAAAABY AGkAbgBoAHUAaQAuAFAAYQBuAEAAYQBtAGQALgBjAG8AbQAAAB8AAV0BAAAAJgAAAFgAaQBuAGgA dQBpAC4AUABhAG4AQABhAG0AZAAuAGMAbwBtAAAAAAALAEA6AQAAAB8AGgABAAAAEgAAAEkAUABN AC4ATgBvAHQAZQAAAAAAAwDxPwQIAAALAEA6AQAAAAMA/T+oAwAAAgELMAEAAAAQAAAAp0N8o1GL c0OSKXqVoNNYLAMAFwABAAAAQAA5AID4vPvlA9kBQAAIMDhD6fvlA9kBHwA3AAEAAAB8AAAA3lYN WToAIABbAFAAQQBUAEMASAAgAHYANABdACAAZAByAG0AOgAgAE8AcAB0AGkAbQBpAHMAZQAgAGYA bwByACAAYwBvAG4AdABpAG4AdQBvAHUAcwAgAG0AZQBtAG8AcgB5ACAAYQBsAGwAbwBjAGEAdABp AG8AbgAAAB8APQABAAAACgAAAN5WDVk6ACAAAAAAAAMA3j+oAwAACwAjAAAAAAADACYAAAAAAAsA KQAAAAAAAwAuAAAAAAADADYAAAAAAB8AcAABAAAAdAAAAFsAUABBAFQAQwBIACAAdgA0AF0AIABk AHIAbQA6ACAATwBwAHQAaQBtAGkAcwBlACAAZgBvAHIAIABjAG8AbgB0AGkAbgB1AG8AdQBzACAA bQBlAG0AbwByAHkAIABhAGwAbABvAGMAYQB0AGkAbwBuAAAAAgFxAAEAAAAbAAAAAQHZA+FYf6F+ KXzzGkaj7rVsGUeL5q5VwyZhAAsABgwAAAAAHwA1EAEAAACiAAAAPABEAE0ANABQAFIAMQAyAE0A QgA1ADEANgA1AEEAQgAzAEMAMQBCAEIARAA2ADkAQwAzADMAQQA0ADgARgAwADAARQA4ADcAMQAy ADkAQABEAE0ANABQAFIAMQAyAE0AQgA1ADEANgA1AC4AbgBhAG0AcAByAGQAMQAyAC4AcAByAG8A ZAAuAG8AdQB0AGwAbwBvAGsALgBjAG8AbQA+AAAAAAAfADkQAQAAAFoAAAA8ADIAMAAyADIAMQAx ADIAOQAxADAANQA2ADUANQAuADEAMgA1ADUANwAxAC0AMQAtAHgAaQBuAGgAdQBpAC4AcABhAG4A QABhAG0AZAAuAGMAbwBtAD4AAAAAAB8AQhABAAAAWgAAADwAMgAwADIAMgAxADEAMgA5ADEAMAA1 ADYANQA1AC4AMQAyADUANQA3ADEALQAxAC0AeABpAG4AaAB1AGkALgBwAGEAbgBAAGEAbQBkAC4A YwBvAG0APgAAAAAAAwATEgAAAABAAAcwgVmddOUD2QECARMwAQAAABAAAAB/oX4pfPMaRqPutWwZ R4vmAgEUMAEAAAAMAAAAhQIAACC/XPpJAAAAAwBbMwEAAAADAF4zCAAAAAMAWjYAAAAAAwBjNv8H AAADAGg2BgAAAAsA+jYBAAAAHwDZPwEAAAAAAgAASQBuACAAbwBuAGUAIABSAE8AQwBNACAAKwAg ACAAZwBkAG0AIAByAGUAcwB0AGEAcgB0ACAAdABlAHMAdAAsAAoAZgBpAG4AZABfAGMAbwBuAHQA aQBuAHUAbwB1AHMAXwBiAGwAbwBjAGsAcwAoACkAIABzAHUAYwBjAGUAZQBkACAAdwBpAHQAaAAg AHIAYQB0AGkAbwAgADMANQAlAC4ACgB0AGgAZQAgAGMAbwBkACAAYwBvAHYAZQByAGEAZwBlACAA cgBlAHAAbwByAHQAIABpAHMAIABiAGUAbABvAHcALgAKAAoAIAAgACAAIAAgADcANwAyACAAIAAg ACAAIAAgACAAIAAzADkAOQA4ACAAOgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgAGkAZgAgACgAbwByAGQAZQByAC0ALQAgAD0APQAgAG0AaQBuAF8AbwBy AGQAZQByACkAIAB7AAoAIAAgACAAIAAgADcANwAzACAAIAAgACAAIAAgACAAIAAgADMANQAyACAA OgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIABpAGYAIAAoACEAKABmAGwAAAAfAPg/AQAAABgAAABQAGEAbgAsACAAWABpAG4A aAB1AGkAAAAfAPo/AQAAABgAAABQAGEAbgAsACAAWABpAG4AaAB1AGkAAAAfACJAAQAAAAYAAABF AFgAAAAAAB8AI0ABAAAAAgEAAC8ATwA9AEUAWABDAEgAQQBOAEcARQBMAEEAQgBTAC8ATwBVAD0A RQBYAEMASABBAE4ARwBFACAAQQBEAE0ASQBOAEkAUwBUAFIAQQBUAEkAVgBFACAARwBSAE8AVQBQ ACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AQwBOAD0AUgBFAEMASQBQAEkA RQBOAFQAUwAvAEMATgA9ADYANwBDAEUAMAA2ADMANgBFADQANABDADQARQA4AEQAQgA0ADgAMQA2 ADEAMwAxADIANgBBAEIAMQA4AEMARQAtAFAAQQBOACwAIABYAEkATgBIAFUASQAAAAAAHwAkQAEA AAAGAAAARQBYAAAAAAAfACVAAQAAAAIBAAAvAE8APQBFAFgAQwBIAEEATgBHAEUATABBAEIAUwAv AE8AVQA9AEUAWABDAEgAQQBOAEcARQAgAEEARABNAEkATgBJAFMAVABSAEEAVABJAFYARQAgAEcA UgBPAFUAUAAgACgARgBZAEQASQBCAE8ASABGADIAMwBTAFAARABMAFQAKQAvAEMATgA9AFIARQBD AEkAUABJAEUATgBUAFMALwBDAE4APQA2ADcAQwBFADAANgAzADYARQA0ADQAQwA0AEUAOABEAEIA NAA4ADEANgAxADMAMQAyADYAQQBCADEAOABDAEUALQBQAEEATgAsACAAWABJAE4ASABVAEkAAAAA AB8AMEABAAAAGAAAAFAAYQBuACwAIABYAGkAbgBoAHUAaQAAAB8AMUABAAAAGAAAAFAAYQBuACwA IABYAGkAbgBoAHUAaQAAAB8AOEABAAAAGAAAAFAAYQBuACwAIABYAGkAbgBoAHUAaQAAAB8AOUAB AAAAGAAAAFAAYQBuACwAIABYAGkAbgBoAHUAaQAAAAMAWUAAAAAAAwBaQAAAAAADADdQAQAAAB8A Cl0BAAAAJgAAAFgAaQBuAGgAdQBpAC4AUABhAG4AQABhAG0AZAAuAGMAbwBtAAAAAAAfAAtdAQAA ACYAAABYAGkAbgBoAHUAaQAuAFAAYQBuAEAAYQBtAGQALgBjAG8AbQAAAAAAAgEVXQEAAAASAAAA Ah+W2D2I5GBOjhGoLZlOGD0BAAACARZdAQAAABIAAAACH5bYPYjkYE6OEagtmU4YPQEAAAsAAIAI IAYAAAAAAMAAAAAAAABGAAAAABSFAAAAAAAACwAAgAggBgAAAAAAwAAAAAAAAEYAAAAABoUAAAAA AABIAACAUONjC8yc0BG82wCAX8zOBAEAAAAuAAAAQgBpAGcARgB1AG4AbgBlAGwAQwBvAHIAcgBl AGwAYQB0AGkAbwBuAEkAZAAAAAAAjZv2zT8yLUO/GFLsa9MOIUAAAIBQ42MLzJzQEbzbAIBfzM4E AQAAADAAAABMAGEAcwB0AEkAbgBkAGUAeABpAG4AZwBBAHQAdABlAG0AcAB0AFQAaQBtAGUAAAAe /br25QPZAQMAAIAIIAYAAAAAAMAAAAAAAABGAQAAADIAAABFAHgAYwBoAGEAbgBnAGUAQQBwAHAA bABpAGMAYQB0AGkAbwBuAEYAbABhAGcAcwAAAAAAIAAAAAIBAIATj/JB9IMUQaWE7ttaawv/AQAA AC4AAABIAGUAYQBkAGUAcgBCAG8AZAB5AEYAcgBhAGcAbQBlAG4AdABMAGkAcwB0AAAAAAABAAAA NgAAAAEACgAAAAQAAAABAAAAFAAAAAAAAAAAAAAAjAQAAAAAAAAUAAAAAAAAABsGAAD/////AAAA AAAACwAAgBOP8kH0gxRBpYTu21prC/8BAAAAHAAAAEgAYQBzAFEAdQBvAHQAZQBkAFQAZQB4AHQA AAABAAAACwAAgBOP8kH0gxRBpYTu21prC/8BAAAAKAAAAEkAcwBRAHUAbwB0AGUAZABUAGUAeAB0 AEMAaABhAG4AZwBlAGQAAAABAAAAHwAAgBOP8kH0gxRBpYTu21prC/8BAAAAFgAAAEMAbABpAGUA bgB0AEkAbgBmAG8AAAAAAAEAAAA2AAAAQwBsAGkAZQBuAHQAPQBPAFcAQQA7AEEAYwB0AGkAbwBu AD0AVgBpAGEAUAByAG8AeAB5AAAAAAAfAACAH6TrM6h6LkK+e3nhqY5UswEAAAA4AAAAQwBvAG4A dgBlAHIAcwBhAHQAaQBvAG4ASQBuAGQAZQB4AFQAcgBhAGMAawBpAG4AZwBFAHgAAAABAAAA0gEA AEkASQA9AFsAQwBJAEQAPQAyADkANwBlAGEAMQA3AGYALQBmADMANwBjAC0ANAA2ADEAYQAtAGEA MwBlAGUALQBiADUANgBjADEAOQA0ADcAOABiAGUANgA7AEkARABYAEgARQBBAEQAPQAwADEARAA5 ADAAMwBFADEANQA4ADsASQBEAFgAQwBPAFUATgBUAD0AMgBdADsAUwBCAE0ASQBEAD0AMQAzADsA UwAxAD0APAAyADAAMgAyADEAMQAyADkAMQAwADUANgA1ADUALgAxADIANQA1ADcAMQAtADEALQB4 AGkAbgBoAHUAaQAuAHAAYQBuAEAAYQBtAGQALgBjAG8AbQA+ADsAUgBUAFAAPQBEAGkAcgBlAGMA dABDAGgAaQBsAGQAOwBUAEQATgA9AFMAYQBtAGUAOwBUAEYAUgA9AE4AbwB0AEYAbwByAGsAaQBu AGcAOwBWAGUAcgBzAGkAbwBuAD0AVgBlAHIAcwBpAG8AbgAgADEANQAuADIAMAAgACgAQgB1AGkA bABkACAANQA4ADUANwAuADAAKQAsACAAUwB0AGEAZwBlAD0ASAAxADsAVQBQAD0ARAAwADsARABQ AD0AMQAwADEAAAAAAB8AAIBQ42MLzJzQEbzbAIBfzM4EAQAAACIAAABEAGUAdABlAGMAdABlAGQA TABhAG4AZwB1AGEAZwBlAAAAAAABAAAABgAAAGUAbgAAAAAAAwAAgFDjYwvMnNARvNsAgF/MzgQB AAAAJAAAAEkAbgBkAGUAeABpAG4AZwBFAHIAcgBvAHIAQwBvAGQAZQAAABsAAAAfAACAUONjC8yc 0BG82wCAX8zOBAEAAAAqAAAASQBuAGQAZQB4AGkAbgBnAEUAcgByAG8AcgBNAGUAcwBzAGEAZwBl AAAAAAABAAAAcAAAAEkAbgBkAGUAeABpAG4AZwAgAFAAZQBuAGQAaQBuAGcAIAB3AGgAaQBsAGUA IABCAGkAZwBGAHUAbgBuAGUAbABQAE8ASQBJAHMAVQBwAFQAbwBEAGEAdABlACAAaQBzACAAZgBh AGwAcwBlAC4AAAALAACAUONjC8yc0BG82wCAX8zOBAEAAAAmAAAASQBzAFAAYQByAHQAaQBhAGwA bAB5AEkAbgBkAGUAeABlAGQAAAAAAAAAAAALAACAUONjC8yc0BG82wCAX8zOBAEAAAAmAAAASQBz AFAAZQByAG0AYQBuAGUAbgB0AEYAYQBpAGwAdQByAGUAAAAAAAAAAABAAACAE4/yQfSDFEGlhO7b WmsL/wEAAAAsAAAATABhAHMAdABTAG0AYQByAHQAUgBlAHMAcABvAG4AcwBlAFQAaQBtAGUAAACO RKl05QPZAR8AAIDABUfdz3RbRZiGiU2jCzGxAQAAADoAAABJAG4AZgBvAHIAbQBhAHQAaQBvAG4A UAByAG8AdABlAGMAdABpAG8AbgBMAGEAYgBlAGwASQBkAAAAAAABAAAASgAAADQAMwA0ADIAMwAx ADQAZQAtADAAZABmADQALQA0AGIANQA4AC0AOAA0AGIAZgAtADMAOABiAGUAZAA2ADEANwAwAGEA MABmAAAAAAAfAACAhgMCAAAAAADAAAAAAAAARgEAAAAYAAAAbQBzAGkAcABfAGwAYQBiAGUAbABz AAAAAQAAAEwDAABNAFMASQBQAF8ATABhAGIAZQBsAF8ANAAzADQAMgAzADEANABlAC0AMABkAGYA NAAtADQAYgA1ADgALQA4ADQAYgBmAC0AMwA4AGIAZQBkADYAMQA3ADAAYQAwAGYAXwBFAG4AYQBi AGwAZQBkAD0AVAByAHUAZQA7AE0AUwBJAFAAXwBMAGEAYgBlAGwAXwA0ADMANAAyADMAMQA0AGUA LQAwAGQAZgA0AC0ANABiADUAOAAtADgANABiAGYALQAzADgAYgBlAGQANgAxADcAMABhADAAZgBf AFMAaQB0AGUASQBkAD0AMwBkAGQAOAA5ADYAMQBmAC0AZQA0ADgAOAAtADQAZQA2ADAALQA4AGUA MQAxAC0AYQA4ADIAZAA5ADkANABlADEAOAAzAGQAOwBNAFMASQBQAF8ATABhAGIAZQBsAF8ANAAz ADQAMgAzADEANABlAC0AMABkAGYANAAtADQAYgA1ADgALQA4ADQAYgBmAC0AMwA4AGIAZQBkADYA MQA3ADAAYQAwAGYAXwBTAGUAdABEAGEAdABlAD0AMgAwADIAMgAtADEAMQAtADIAOQBUADEAMQA6 ADMAMAA6ADIANgAuADkAMgA5AFoAOwBNAFMASQBQAF8ATABhAGIAZQBsAF8ANAAzADQAMgAzADEA NABlAC0AMABkAGYANAAtADQAYgA1ADgALQA4ADQAYgBmAC0AMwA4AGIAZQBkADYAMQA3ADAAYQAw AGYAXwBOAGEAbQBlAD0ARwBlAG4AZQByAGEAbAA7AE0AUwBJAFAAXwBMAGEAYgBlAGwAXwA0ADMA NAAyADMAMQA0AGUALQAwAGQAZgA0AC0ANABiADUAOAAtADgANABiAGYALQAzADgAYgBlAGQANgAx ADcAMABhADAAZgBfAEMAbwBuAHQAZQBuAHQAQgBpAHQAcwA9ADAAOwBNAFMASQBQAF8ATABhAGIA ZQBsAF8ANAAzADQAMgAzADEANABlAC0AMABkAGYANAAtADQAYgA1ADgALQA4ADQAYgBmAC0AMwA4 AGIAZQBkADYAMQA3ADAAYQAwAGYAXwBNAGUAdABoAG8AZAA9AFMAdABhAG4AZABhAHIAZAA7AAAA SAAAgGvFP0AwzcVHhvjt6eNaAisBAAAAHAAAAE0AUwBJAFAATABhAGIAZQBsAEcAdQBpAGQAAABO MUJD9A1YS4S/OL7WFwoPQAAAgFDjYwvMnNARvNsAgF/MzgQBAAAAPgAAAEIAaQBnAEYAdQBuAG4A ZQBsAEMAbwBtAHAAbABlAHQAZQBJAG4AZABlAHgAaQBuAGcAUwB0AGEAcgB0AAAAAAAe/br25QPZ AUAAAIBQ42MLzJzQEbzbAIBfzM4EAQAAADoAAABCAGkAZwBGAHUAbgBuAGUAbABDAG8AbQBwAGwA ZQB0AGUASQBuAGQAZQB4AGkAbgBnAEUAbgBkAAAAAADpYL325QPZAQMADTT9PwAAHwAAgIYDAgAA AAAAwAAAAAAAAEYBAAAALgAAAGEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgAtAHIAZQBzAHUA bAB0AHMAAAAAAAEAAACyAAAAZABrAGkAbQA9AG4AbwBuAGUAIAAoAG0AZQBzAHMAYQBnAGUAIABu AG8AdAAgAHMAaQBnAG4AZQBkACkAIABoAGUAYQBkAGUAcgAuAGQAPQBuAG8AbgBlADsAZABtAGEA cgBjAD0AbgBvAG4AZQAgAGEAYwB0AGkAbwBuAD0AbgBvAG4AZQAgAGgAZQBhAGQAZQByAC4AZgBy AG8AbQA9AGEAbQBkAC4AYwBvAG0AOwAAAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAHgAAAGEA YwBjAGUAcAB0AGwAYQBuAGcAdQBhAGcAZQAAAAAAAQAAABoAAAB6AGgALQBDAE4ALAAgAGUAbgAt AFUAUwAAAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAIAAAAHgALQBtAHMALQBoAGEAcwAtAGEA dAB0AGEAYwBoAAAAAQAAAAIAAAAAAAAAHwAAgGvFP0AwzcVHhvjt6eNaAisBAAAAEgAAAE0ASQBQ AEwAYQBiAGUAbAAAAAAAAQAAANQBAABbAHsAIgBpAGQAIgA6ACIANAAzADQAMgAzADEANABlAC0A MABkAGYANAAtADQAYgA1ADgALQA4ADQAYgBmAC0AMwA4AGIAZQBkADYAMQA3ADAAYQAwAGYAIgAs ACIAdABpACIAOgAiADMAZABkADgAOQA2ADEAZgAtAGUANAA4ADgALQA0AGUANgAwAC0AOABlADEA MQAtAGEAOAAyAGQAOQA5ADQAZQAxADgAMwBkACIALAAiAHAAaQAiADoAIgAwADAAMAAwADAAMAAw ADAALQAwADAAMAAwAC0AMAAwADAAMAAtADAAMAAwADAALQAwADAAMAAwADAAMAAwADAAMAAwADAA MAAiACwAIgBuAG0AIgA6ACIARwBlAG4AZQByAGEAbAAiACwAIgBhAGMAIgA6ADAALAAiAG8AcAAi ADoAMQAsACIAYwB0ACIAOgAiADIAMAAyADIALQAxADEALQAyADkAVAAxADEAOgAzADAAOgAyADYA LgA5ADIAOQBaACIALAAiAG0AdAAiADoAIgAwADAAMAAxAC0AMAAxAC0AMAAxAFQAMAAwADoAMAAw ADoAMAAwACIALAAiAHUAYwAiADoAbgB1AGwAbAB9AF0AAABIAACACCAGAAAAAADAAAAAAAAARgEA AAAiAAAATgBlAHQAdwBvAHIAawBNAGUAcwBzAGEAZwBlAEkAZAAAAAAAfhx5kU5gAE6lXwja0f0e Yh8AAICGAwIAAAAAAMAAAAAAAABGAQAAAC4AAAB4AC0AbQBzAC0AcAB1AGIAbABpAGMAdAByAGEA ZgBmAGkAYwB0AHkAcABlAAAAAAABAAAADAAAAEUAbQBhAGkAbAAAAB8AAICGAwIAAAAAAMAAAAAA AABGAQAAADYAAAB4AC0AbQBzAC0AdAByAGEAZgBmAGkAYwB0AHkAcABlAGQAaQBhAGcAbgBvAHMA dABpAGMAAAAAAAEAAABIAAAARABNADQAUABSADEAMgBNAEIANQAxADYANQA6AEUARQBfAHwAUwBO ADcAUABSADEAMgBNAEIANwAxADMAMgA6AEUARQBfAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAA UAAAAHgALQBtAHMALQBvAGYAZgBpAGMAZQAzADYANQAtAGYAaQBsAHQAZQByAGkAbgBnAC0AYwBv AHIAcgBlAGwAYQB0AGkAbwBuAC0AaQBkAAAAAQAAAEoAAAA5ADEANwA5ADEAYwA3AGUALQA2ADAA NABlAC0ANABlADAAMAAtAGEANQA1AGYALQAwADgAZABhAGQAMQBmAGQAMQBlADYAMgAAAAAAHwAA gIYDAgAAAAAAwAAAAAAAAEYBAAAAOAAAAHgALQBtAHMALQBlAHgAYwBoAGEAbgBnAGUALQBzAGUA bgBkAGUAcgBhAGQAYwBoAGUAYwBrAAAAAQAAAAQAAAAxAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYB AAAAOgAAAHgALQBtAHMALQBlAHgAYwBoAGEAbgBnAGUALQBhAG4AdABpAHMAcABhAG0ALQByAGUA bABhAHkAAAAAAAEAAAAEAAAAMAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAACoAAAB4AC0AbQBp AGMAcgBvAHMAbwBmAHQALQBhAG4AdABpAHMAcABhAG0AAAAAAAEAAAAOAAAAQgBDAEwAOgAwADsA AAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAAEQAAAB4AC0AbQBpAGMAcgBvAHMAbwBmAHQALQBh AG4AdABpAHMAcABhAG0ALQBtAGUAcwBzAGEAZwBlAC0AaQBuAGYAbwAAAAEAAACyBQAARQBZADEA RwBuAFEAWQBPADkAawAvAEMAUgBWAEQAVABiAG4AcABGAGcAOQBLAHcASwBsAEoAbgBiADUAMgBs ADgAYwAzAHUAagArAE4AUQBGAGYAZQBWAFoAUgBuAEYANwBYAEsAdgA3AFQAdQB3AEgAdQBFAGQA WQBuAFcAaQBJAGcAMAAyAG8AQQB1AG8AegBYAFkAbQA2AGkAWQBaAEMAZQBzAGYAcAA5AFUAdwBa AEcAbABOADcAUgBsAGQAdABXADIAcwBZAG0ANQB6AE0ATwA3AFMAWABKAEsAdAA3AEQARgBIAHEA dwBqAGcAcwBLAEcAVgBDAEcANgBlAE4AVABKAEwASwBBAFIAZABKADYAZQAxAFoANABIAE4AOQBK AFoAMQA0AFQARgBRAFcAWQBVAHgARwAwAC8AOQBLAFoAQQAxAFMATgBUAHUAegAxAFQAZABpAFgA NQA0AEIASAB3ADAAOQBaAG4ALwBMAGUASwBTAHgARwBXAEUAbwB2AFMAZgA4AEIAMABuAFUAVAA1 AHMAWABIAEkARABsAFMAYwBpAHgAdAB4AEkAQgBoAEUAagBsAG8AdABiADEAMABmAFUAOAArAFgA ZgBVAGwAUgAzAHcAMgBhADMAUgBoAGQAbwBSAGYATABQADQAOABHAEMATwBtAHQAcgBEAEsASgBp AE0AeABaAHkAcABYAEUAZwB4AGIAbgB3ADgASABOAHAARQBpAHcAaQBRAHQANABYAEUAOAB6AEIA SwBuAFAAWgBrAFMAVgBYAEcASwBoAHUAawBkAFAAUQBEADAAQQAzAGIAUwBZAGsAeABuAG8AKwBx AGsAZgBDAHEAcgBMAFMASAAxADQATAByAHoASABIAHUATgBnAEkAcgBoAFkAWgA2AHMAYwBlAGsA NwBnADcARgBaADAAcABqAGYAMwAwAEYAbgBlAHUAYgA1AE0ARwBtAFMAVQBpAFgAZAA0AFAASgBw AEUAawBxAFMAWQA4AGIAYQBLAEYASQBVAEMAdwAvAEUAZwBrAFIANwAzAEcANwA4AGwARwAxAEcA bwBKADEASABxAHoAegAwAFoAQQBEAHEAQgBrAEEAegAwAFMAMABVAFMARQB1AEwARABNAFEAOQBW ADcAUgBOAEIALwBTAFgAdQB5AGsARABjAG0ASgBvAEgAUAA1AHoANAArAE0AbwA4AHEAegBSADQA bwA4AEcAbABkAG0AbQBnAE4AZwB4AGkAOABFAGEAdQAyADAAdAA1AGgAcQB5AEwASwBTAHAAOAAw AGUAUwBzAGoASgBTAHMAZwBKADUAYwBBAFMASgB3AE8AeAB6AG4AMwBXAHEARwBkAGcANQBkAFYA NgBNAFYATwBuADkAaABvAGkAawBoAGkATwBnAEQATgB3AEoASwBSADkARAA4AFcAMwBlAEkANAAy ADAAMgBHAHAAVQA3AHgAUQBnAC8AdgBYAEsAZwBsAFAAVwAzAEwAcABFAGYARwBqADYAZwAzAFcA bQBLAHQAZwA1AC8AOAB3ADYAZwAyAHYAZAA3AEsAbwAvADAAcwAzAE0AdwAzAGcAVwAzAEMAKwBO AEwANQBLAEQAZAByAEgAQgBFAFAAVgBqAHkAagBzAEgAVABkAHkAWQBrAFIANQB5AFIAVAAzAHgA TABwAE4AawBpAHcAcABuAC8ASgAvAFQAegBxAHYAawBzADQATABCAE4AMQBZADMAYQBmAGIAYgA4 AEgATwB5ADkASABDAEUAMAB3AEcAaABUAHQAaQA2AHQAaABDAFgAUQBTAHIAVQB6AEkAUQBZADgA NQBiADAAYgBJAE8AeQBlADkANgBzAGIAdgB6AG4AdwB1AEQAdgB0AGsAcwBjAEsAegBRADcAMAAv AEsAdwBOADYATQBQAEwARgBSAGcAPQA9AAAAAAAfAACAhgMCAAAAAADAAAAAAAAARgEAAAA4AAAA eAAtAGYAbwByAGUAZgByAG8AbgB0AC0AYQBuAHQAaQBzAHAAYQBtAC0AcgBlAHAAbwByAHQAAAAB AAAAPgQAAEMASQBQADoAMgA1ADUALgAyADUANQAuADIANQA1AC4AMgA1ADUAOwBDAFQAUgBZADoA OwBMAEEATgBHADoAZQBuADsAUwBDAEwAOgAxADsAUwBSAFYAOgA7AEkAUABWADoATgBMAEkAOwBT AEYAVgA6AE4AUwBQAE0AOwBIADoARABNADQAUABSADEAMgBNAEIANQAxADYANQAuAG4AYQBtAHAA cgBkADEAMgAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0AOwBQAFQAUgA6ADsAQwBB AFQAOgBOAE8ATgBFADsAUwBGAFMAOgAoADEAMwAyADMAMAAwADIAMgApACgANAA2ADMANgAwADAA OQApACgAMQAzADYAMAAwADMAKQAoADMANgA2ADAAMAA0ACkAKAAzADkANgAwADAAMwApACgAMwA5 ADgANgAwADQAMAAwADAAMAAyACkAKAAzADcANgAwADAAMgApACgAMwA0ADYAMAAwADIAKQAoADQA NQAxADEAOQA5ADAAMQA1ACkAKAA1ADQAOQAwADYAMAAwADMAKQAoADYAOQAxADYAMAAwADkAKQAo ADQANwA4ADYAMAAwADAAMAAxACkAKAA5ADYAOAA2ADAAMAAzACkAKAA2ADYAOAA5ADkAMAAxADUA KQAoADYANQAwADYAMAAwADcAKQAoADcANgA5ADYAMAAwADUAKQAoADYANgA5ADQANgAwADAANwAp ACgAMwAxADYAMAAwADIAKQAoADkAMQA5ADUANgAwADEANwApACgANwA2ADEAMQA2ADAAMAA2ACkA KAA3ADEAMgAwADAANAAwADAAMAAwADEAKQAoADIAMgA0ADMAMAAzADAAMAAzACkAKAA4ADkAMwA2 ADAAMAAyACkAKAA1ADIANQAzADYAMAAxADQAKQAoADYANgA0ADcANgAwADAANwApACgANgA0ADcA NQA2ADAAMAA4ACkAKAA0ADMAMgA2ADAAMAA4ACkAKAA2ADYANAA0ADYAMAAwADgAKQAoADYANgA1 ADUANgAwADAAOAApACgAMQA4ADYAMAAwADMAKQAoADQAMQAzADAAMAA3ADAAMAAwADAAMQApACgA NQA2ADYAMAAzADAAMAAwADAAMgApACgAMgA5ADAANgAwADAAMgApACgAOAAzADMAOAAwADQAMAAw ADAAMAAxACkAKAAxADIAMgAwADAAMAAwADAAMQApACgAMwA4ADEAMAAwADcAMAAwADAAMAAyACkA KAA1ADUAMAAxADYAMAAwADMAKQAoADMAMwA2ADUANgAwADAAMgApACgAMwA4ADAANwAwADcAMAAw ADAAMAA1ACkAKAA4ADYAMwA2ADIAMAAwADEAKQA7AEQASQBSADoATwBVAFQAOwBTAEYAUAA6ADEA MQAwADEAOwAAAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAXAAAAHgALQBtAHMALQBlAHgAYwBo AGEAbgBnAGUALQBhAG4AdABpAHMAcABhAG0ALQBtAGUAcwBzAGEAZwBlAGQAYQB0AGEALQBjAGgA dQBuAGsAYwBvAHUAbgB0AAAAAQAAAAQAAAAxAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAASgAA AHgALQBtAHMALQBlAHgAYwBoAGEAbgBnAGUALQBhAG4AdABpAHMAcABhAG0ALQBtAGUAcwBzAGEA ZwBlAGQAYQB0AGEALQAwAAAAAAABAAAA2gwAADIAOQBaADgAZwBHADIAcgAzAFIALwBKAHgATQBW AGgAOQByAFQAUgBaAEkAeABPAGsARABMADIARgBwAFoAWgBQAHQAYgBPADUAYgA4AHcAeABlADUA WQB6AHUAMwB2AHoAegBIAGwARgBxADAAdgBsAGgAWQBaAHoAWQAyAEEAVwBhAGkAMQBHAE8ASQBj AEYAMQA2AEYAZwBzAEEAUgBsADMARABxAGoAQwBOAGoAMwBrADYAQwBvAFcANgBMAEsAbQB6AFoA UgBoAEEALwBwAG8ARwBTAEsAagBMAHQANABmAGMAagA5AHgAYQBzAHgAVABDAGEAcwBuAHAASAB0 AEEAWgBpADQAVABXAGIAYQBkAFAAMwAyADAAVQBRAEsAVgBGADcAQwBxAE8AcgBCAG8AdABiAE0A SABFAEUANQB5AGsAbAA1AFQAdgB2AGEAZQAwAFkAdwBMAEQATQBTAHAATQBSAGEAYQA4AHUAMgBE AGEAMwBjAFQAVwB5AGgAYQBEAFgAYwArAFIASABlAC8AUgBzAHIANgA4AHEAdABDADcAUABWAEUA UgBHADEAVABUAGwALwByAGEASwBZAFUAZAB2AHUAegA0AHMAMQBRAFAAVABYAGMASwBMAHIATQAy AEsAdwA5ADUANABFAEEANAA1ADMAYQBpADAAZgBnAGsAdgBDAHgAagBaADMAcQBxAHEAUwBSAHAA cQBaAEsASABWADYAWAB0AFEAMwBYAEIAYwB6AFIAMgBnAFUANwB2AEYAeABQAHoAYwB3AGUASQBS AHYAUQBjAGIAcgBMADIAdQBLAGwASwA1AGYAQgBpAGkAZgBLAHoAVQBzAC8AdgBhAEMAbQBQAEMA egA0AGUAQgBjAE4ARgBLAHYARAA2AG4AagBqAGEAYQAwAEMASQBBAFEARQB6AFEAQwBXAGkASQAy ADIAcQB1AEMAbABjAEYAawBEAGcAUgBxAGMATgBVAGwASQBlAHcAeABWAE0AYgBPAEIANwBFAGsA MQBlAEcAcwA5AHIANABEAEYAVgBmAFIAdwA2AGkAOABSAHMAQQBYAEsATgBPAFQARwBsAG4AZABB ADgAcgB0AFUAcwArAGQAMAB5ADIAeAArAEQAdABwAEoAVwBJAHkAbABOAHEAWgByAFIAYQBkADMA ZwBHAGUAZwB6AEQAMABXAGkAcQB5AGQAbABUAEcASwB3AHAASwBMACsAbwBaAGkAQgBXADEAUgBr AE0AbwB3ADYAWABmAHoAcQBaAGwAQQAvAE8AWABkAG4AMgBSAHgATABxADEAWgBGADEAVwBXADMA UwB5AE8ANAA1AHcAdABCAGcAeQB5AFAAUQBhAHMAUgBKAGEATQBSAGEAYgBLAG4AMABXAHAAaQAv AEEAaABPAGgAeABMAGQAcQBPAGYAbwA4AGUAMgByAGoAQwAwAHEAbABxADIASgAyAEgAYgB0AGMA KwBWAG0AbQB6AHcAbQBvAC8AVQBQAEYAcwBnAGUAVQBiAGoANwBDAGQALwBHADEAWgBHADMAZwBz AGwANQBCAHoANAAxAHcAYwBUAEMAUgAvAFUAQQAyAG8AbgBLAEMAegBHAHcAZQB4AEQATwBiAFEA YwBwAEQAcgBoAEcAWQArAGcAZgBnAGkAagA1AEQATwBpAHYAeAA5AGUANgBVAC8AQwArAFQAagAz AFAAZQBXAEUASQBYAGYAawBXAHQARgBnAEoAMwB1ADgAYgBYAGoANgBGAGcAawBFAFQATwBZADUA bwBJAG4ATQB0AGUAVQBGAGQAVwArAFcATABTAHEARwBsAE8ATQBEAE4ALwBuAEYAYwBLAHEARwBT AGgAZwBpAHAALwAzAC8ATAArAFAAZwB2ADEAdgBtAHkAMgBHADUAKwBQAFgAKwBNADQAegBUAFkA VQBIAGIATwBwAEwAdAAyAHoAVgBVAHoALwBMAGkAUAB4AGoAZwAwAEEAYwBRAEsAcABTAGIAMQBD AHkAbQAwADQAcQBlAFcAQwB6ADQAYQBqAHMASgBzAEIALwA2ADMAdgBIAHEAagBsAHAAZAB6AEgA YwB3AFIANQBRAHMAQwBFAFcAZwBnAFQAZwBYAG4ASwA1AHYANwBSAC8AdABqAFUAbgBRAHgATgA4 AGEAUgBsADAANQBXAHIAUAB0AEoAUwBhAHQARQAvAHgAUABPAGQAUQBEAGQAagBWAFQAZgB3AEQA VABrAGsAUAA5AGEAcgA2ADkAOABLAGkATAA1AEMAMwBsAE8AQgB1ADYATABDADYAdgBSAFQAUgAx AGwAcABSAG8AKwAyAFEAaABqAGIAVwBOAEkAUQBnAFoAbgBlAFYAZgAzAGIATgBwAGgAYQBoADUA WQBRADUAdgBYAFkAegBmADkAdwBNAHEANABwAHkANABVAHEAVABnAHUARwBNAHQAZgBxADcATwAy AEoARgBUAGMAMwBXAGkARgBCAHcAbQBaAEkASABOAFoAcwB5AGgATQBOAHIAKwBwAGMAYwBFADIA awA3AGsATgBRAGoAagBtAGwAMwBEAFQARQBUAG8AMwBwAGMAcwBUAEkASwAvADUAYgB4ADkANgBy AHMARQArAFIAZQBQAG8AbABtAFcAcwB5AHUAcABuAGgAWgBIAFgALwBkADkAdgBLAEsANABlAEkA dQBIAHMAQQAxAEMAcQBWADQAOABDAEkAUQA2AGcAZwBhAGoAVQBsAC8ANwBMAFcAZwB6AGIAMQBP AEIANwBNAFMANQA5AHMARABZAFcARQAzAHkARwAzAHEAVwBPADgAQgBWAGgANQBaAFUAOABuAFIA egBCAFkAeABKAEIAQQBZAFEAZABpAGcAWABIAGEAYQBRAGcAcQBXAGsAWAA5AHgAZQBQAHEANgBD AHAAMwBZAHUAVABYAFkAagBqAEYAUwBxAFQAaAArAEIAdgBkAGwAaABlAGwAeQAyAFkAWQAxAGYA RgAxAHEALwBLAC8ANgBWAGwAUgBnAHAAUgBNAFoAeAAvADUAMgBKAEIAOABLAFUAdQBEAFcARwBE ADQAegBTADIAUwB6ACsAVQB3AHEAMABYAFQAMABkAHAAeABkAFMAOQBaAHYAOQByAHAAZwBXAEEA UwArAGMAawBBAEYAMQB6ADQAeABFAHcARgBuADEAUQBoAE0AVwB6AFEATQBMAHQAZgBHAG4AVwBF AFIANwB3AHgAWQAzAEoAawB0AG8AQQBSAGwAUgBOAGYAdQBsAEUARQBaAG8AMgBnAEgASQAyAHAA YgBOAEMAOABHAFgAWABOAEkAMwBRAEQASgBKAHkAdgBOAFoATgBRADkAUgArAEoANwBnADYARwBO AFMAegBWAEoANQBvAGUAVwBZAGcAOQBLAFkAQQBRAHYAWgA0AHoARgBxAFoAVQBSAE4ALwA3AG8A SQBXAFcAbABiAEUANQBiAGsAZgBWAGcAWgBsAHQAUgBrAHcAQgA2AEEAZQBPAEMAQgA2AEgAcQBG ADAAeQB1AHEAdwBoAHgAWgBQAGIAdABIAFcAWAArADcATQBPAHoAbABpAE4AUABuAHcAawBxAEUA eQBlAFIANwA5ADkARQBlAGQAbABVAE4AUwAzAFkAVwBvAFUANwBzAEwANQBXAFYAMwBUAGcAdABP AHMAVQBiAGcASwBBAC8AawBpAC8ASgBMAFMAaQB0AGcAaQBBAGkAdQA4AHUAbgB5ADgAUQA0AHUA SgA0AFUAaABmAGkAOABJAFUASQBzAFcAQwBmAFIAZQBQAEgAaQBhAC8AOQAwADQAdwBtAFYAKwBm AEQAbABBAHMAdQBzADAATQBsADIAaQA4ADkARAAvACsAOQB1AEEAdABOAHIAVwB6AEwATgB4AFoA QwBxADQAdQBFADAAMgBEAEEAZQA0AG4AbwB6AHoAMABnAGIAYgBWAFQAdABmAFcAbQBsAEQAWABh AFEAeQBYADYAcwBXAFIAeQBOAGUAQgA2AC8AbQBrAFcAcwBzADIAagBLAEcAKwBHAHcANQBCADYA RwBMAHIASABFAGgAbwBTAGEAaQBKADIATQBxAGEAUAB1AGwAWABWAG0AdgBFAGYAUgA3ADEAcQB0 AFgATABhAGQAUQBVADAAVQBNAEEAcQB6AGMAdAA0ADQAeABMAEwAQwA3ADEAYgBQAFIAQQBJAFkA cAB4AG4ARQAxAEgAWQBRAEoAdwA1AFgAcQA1AEUASQAyAGkANgBDAHgATAAwAGcARwBqAGwAeQBG AGoAQQArAFYAUwAzADgAeABlAEsAMwBGAEwAUgBkADUAeQBLAEwATABnADMARAArAEUAWAAxAFkA aQAyAFcAMAA9AAAAAAC+lA== --_000_DM4PR12MB5165AB3C1BBD69C33A48F00E87129DM4PR12MB5165namp_--