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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A325EE4996 for ; Mon, 21 Aug 2023 20:41:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C680494000F; Mon, 21 Aug 2023 16:41:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BF1168E0012; Mon, 21 Aug 2023 16:41:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A43A994000F; Mon, 21 Aug 2023 16:41:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 912138E0012 for ; Mon, 21 Aug 2023 16:41:53 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 5EC9B80510 for ; Mon, 21 Aug 2023 20:41:53 +0000 (UTC) X-FDA: 81149283306.16.88F2BC9 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2041.outbound.protection.outlook.com [40.107.94.41]) by imf10.hostedemail.com (Postfix) with ESMTP id 7D2CBC0010 for ; Mon, 21 Aug 2023 20:41:50 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=q5qKqMch; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf10.hostedemail.com: domain of ziy@nvidia.com designates 40.107.94.41 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692650510; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Ap9jAj8OKf97L7eip4HJOiqQWpZIfxZi5v4V08AfJSc=; b=OzunipXDubFtVQO36sDkJnqBWwxShr5AR6tqkE4ZNQkVV13jBqsygn/qbEZzMN099AlRCm RjcwLyNflI5yydMI1Pm6F9GhW1bdQjNpR+qMz0MbIvh5LESVJn9/hr9p9rwtVjmCt0bKZB 8I8SIMWjiRZoqfqCTrfpRIztxhehNg0= ARC-Authentication-Results: i=2; imf10.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=q5qKqMch; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf10.hostedemail.com: domain of ziy@nvidia.com designates 40.107.94.41 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1692650510; a=rsa-sha256; cv=pass; b=wAUeC5l7le5UkUvW37HwEFoz/gDT0IjFY03iP3UNDq0R++htEKLSL9UdL3QIzZ9B/aLML1 fpB1nomMthQjBiJNJdj9560nYkatTthZv/kwYWZDgaNoUhEOvWgqCobgFKMiBdoZ9ZXXUd uyMBY6jtLd+U4QZfqt78SFEvZ/682Xs= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S2E0mYulHFQryT43++sEmPKC/e+paZYpMIPBmz/HFHsu2XSnyxJXDjiyfAIZ614W8/GulMY53sf7yQIHmPnb/TFGgFH67Tx1v5jZ0Yh5Dten0DYjcMcF7AhEKANK9MxYCEHIpwWiuQUtXZwc7jseChrEZUZshn/PIcaxVuBIP77BRcCaxbbSWUK8vp4J8s/MVGTKu+Ejj9PQYR/KOHAF3Ug0bVBHeCon887bcUldv3nOetpoN5RnzjtN+2ARbN/yv2hk+FfV+LP1tp8OjFqB0cZpMzG3sFBhPD/KHWOm7L+DNybi8snqyYJguWckewH+J3nduPlHGI/Ifn8TYH6NAw== 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=Ap9jAj8OKf97L7eip4HJOiqQWpZIfxZi5v4V08AfJSc=; b=Q41ceaWRGpWq33hYD4eOrVwkTTGiP1yKFT/TNo+8j1s0cMcGSEvv8WD2SKUNONxPkpvJSSxZBieCCqVZ6OOhVXApVhDz9MTseEeDZGFsNeo/YoTZePNCvmoHcejpDmjAaUZ4GnZb/w080b4DTxCaQvi1GX6t1rmu8lgsYai9ty6HGfC0VnOu5qtJfyzal6HRhReEs2R6pnxFB3m26/ZikebjOrv/dVMGepf+hIp3ttMP8p2LorkhscoLZJV772QHOSnbgTT8ELHjzs2S8ObIJwbH3P3RSTwbtN5j04JkLIBQJ9aDaoYrSsjd7u5trea3aSyOUzWK4PiBxPu0Fqv9Yg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ap9jAj8OKf97L7eip4HJOiqQWpZIfxZi5v4V08AfJSc=; b=q5qKqMch20pkwEZTYPZyNy8ltET21KjgWQkLFIfgRxZJhPIZo7jKhrktsb9dwq8ixkHkFRip/JtsQ2HhmzKEXjD1zrQhFSY9mPR7Srat1IYp1vVkmj0E0KBCAaWBUmMFsYtOJOv1IaULoQ9c2ptLOdsatLHU+qj8iHbnngEqABxvsF1yxLWt1OzjdTTKfVx150c3tQMBULKDbU9YoiV2yuXlJoT3QnCsEVgIN2IwdpufK8tOJkp2C5aEhevhiinuQyUTxWMxS8OhKRFLNZRui5sFHdYKEV7fgHVvqwNOX5eu6es1/LBuLSBw/2MnNKU1LTFSGtFNnhOodWXUbU8TIw== Received: from DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) by SA1PR12MB6846.namprd12.prod.outlook.com (2603:10b6:806:25d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.20; Mon, 21 Aug 2023 20:41:47 +0000 Received: from DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::c166:b535:d93:641e]) by DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::c166:b535:d93:641e%4]) with mapi id 15.20.6699.022; Mon, 21 Aug 2023 20:41:47 +0000 From: Zi Yan To: Johannes Weiner Cc: Andrew Morton , Vlastimil Babka , Mel Gorman , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/8] mm: page_alloc: fix up block types when merging compatible blocks Date: Mon, 21 Aug 2023 16:41:44 -0400 X-Mailer: MailMate (1.14r5964) Message-ID: In-Reply-To: <20230821183733.106619-5-hannes@cmpxchg.org> References: <20230821183733.106619-1-hannes@cmpxchg.org> <20230821183733.106619-5-hannes@cmpxchg.org> Content-Type: multipart/signed; boundary="=_MailMate_F12EC893-7E6C-4964-A9AD-546AB8805FCD_="; micalg=pgp-sha512; protocol="application/pgp-signature" X-ClientProxiedBy: MN2PR19CA0022.namprd19.prod.outlook.com (2603:10b6:208:178::35) To DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB5744:EE_|SA1PR12MB6846:EE_ X-MS-Office365-Filtering-Correlation-Id: 7bee1353-f13c-4649-de04-08dba287098a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +m26wgrJuNXdiKv7IUPrq9wYWAk2sAV1meBjBQdRTm4926Zo7Q3s5MibiX2feODlicnn6N3praH9O2PMoQusVK62jCOHcflmoUipDuu1hdJ0f/Hu5wrbCtpxw3xfhZsvKyRAViAlkkUUNpJIIzZYdOGY7+rlkRnN5UYwUMdnMdtm6cXBmkp3KaN+l0ACMNZrn36iJpYbdyNC5ZiY9Tz6RydlkqhrKNuE4u90cnpW3D5ObamIDrJRnNu5XP27MJXDcSLF6hJB1b1EjMj1Cq0fW5vaJGJF5UCB2AazNmYaHB07yLU4uDEkgcpftsUgOSvH2FjCSN4Ei6AmtYADenTJy+p6SeP40V6Hj551BnQ3dObLFRy7X/nJkWa0M1z7sl6k9cJ+cGZb1lM+vo0rMwlUq+x3ejd7oJxvPsBXVLaHhwsP31Bjq6LDOkrdzo/P98N7wEIeJwX/wClfS3kh7ODARfrIbTxDpyRktmKdsxdWrz5VWFWEmj4snAUXswDGxrJQjmQdtZKEV1Y+BR9uHgtosd0uqHt8SIYmDYU7hjTOXrcIEDtcNyaubYYGsJHzZvO7zOWByoQ+faysoCPVqWmQ5BaFHY+U1NmDhRWtxXHzwACt3kYPextOX7UouctcYGM6pVR1hqutwtPunFYi41OMJA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB5744.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(376002)(366004)(396003)(136003)(346002)(451199024)(1800799009)(186009)(86362001)(5660300002)(2616005)(41300700001)(33656002)(66556008)(66476007)(316002)(2906002)(66946007)(6916009)(54906003)(235185007)(8676002)(478600001)(4326008)(8936002)(6666004)(6486002)(53546011)(6506007)(38100700002)(6512007)(26005)(36756003)(83380400001)(72826004)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eBCG3b8cC9D5Ufet4BkhgNDgr/52PAVNeNjQ61z3gMm0I8BaeCdHVJxxTo/l?= =?us-ascii?Q?+85Y0HtXS+cUSyBB2pKS/6VeChC/wTnfnjr1XJ5UqhBK9kN24gj5MF6+cO+d?= =?us-ascii?Q?MNqi7kvDYs5KNMZDo4GiuuRQrTvOU/6jTMKEtCUMQT9mlICiJUXr5/+68LK2?= =?us-ascii?Q?BS+vdzqxiqUL3yLWWsCbZAxTaOksIxDt7rTccmrw6rzt7L1hnch88ndh63H7?= =?us-ascii?Q?a3FnDzYfYNUeMqkW9MFB/MYNsIHrar69rAaTisbSVERJ3L0S9+GLuMyUto+f?= =?us-ascii?Q?f8eX1tWHdq97PznXLxMlMhpPV2w6HZDxF0pRha/AikZM91Y+aV8pmuiBOigO?= =?us-ascii?Q?RrvAZYEPwS4phKitQFNBuRuHkSE0FDV/k4+/jQnVfAzIigpawZiPsQ9Fbv6u?= =?us-ascii?Q?ivjy5zJSTdD2++7Mrp3Af+EobWaMv5EAGGMZotlYfI578ZNbWmcEVS151vFp?= =?us-ascii?Q?zdoVHxBEMVAFDf0dniDLLJQH1UAsd9BgGUsRfqybfasTtnjkvM/O/krCZRAJ?= =?us-ascii?Q?x//tPsHUz9PMbi+pTDUeggZmKE72KRrpKRG20bprqlFHSjbzP7YoPGg29A8b?= =?us-ascii?Q?lVFiUdIW7YlYH0FwJycvcTqjotYISHmVvsoc4S4LB7DnXq2LcSqt+pEVfvo5?= =?us-ascii?Q?QqvjkvYKxFQgpPamTlEGdnOBDjtjkxg8/TVTWhQU9uUbfeabofGStUBXKYo+?= =?us-ascii?Q?v2EA9JZwDQd+I+4Ehtq3OV+0dqpkx0CIybg7HWa+ZkWyPJ21cQugRgMOmZYd?= =?us-ascii?Q?7ozQSiwV/4Ye5fUjhuRr9YGhA1Yo7p0TgXi9AwB2J2kWn56AS+sR6lnCRXma?= =?us-ascii?Q?DDaWxpPg+RG6DhoTkuQi07HPPeEtgH/rIIpcy1BWGM1f7/afEIhrLF8NB+jp?= =?us-ascii?Q?ppCNPFmfXBdrENQACUeKLJ3SsDy6Z/vQlu6mhZGt4FrFtGzYhom3F+GNQlx4?= =?us-ascii?Q?fIXW3KaZqajU5X1rIJWdooGaINdXV+6i916AL5Nw7N/YsbNIosh1g3jxTddU?= =?us-ascii?Q?mfZMSVwyhKsl1LLucW6D6dQfysTkvt644sGOhfSaQXotzak4OHHmtfevGrQm?= =?us-ascii?Q?VsihI3xsdtQxz8/SnpHIKD/VAI8LuG/kgZ8im01nMGga5g54vNDB4nsDui23?= =?us-ascii?Q?H2W5jXysfXsV8KcY165LGcRzd7XPDgX4ENfXm+Dt6xY3HUGTfz2A+UNuacQc?= =?us-ascii?Q?LA8PgznS7IL2vk6mA+LmOVwm+kw6iS4j+4F1C0aeXjKDd7gUyuiJJ2zSWNda?= =?us-ascii?Q?4pw3jGOkc408aDSnoODYJo5qEsR0bkoXQ9eXAZwlmY6XbXC71P8vtyp1A/YP?= =?us-ascii?Q?k1obvRVsc7GBWm18o6NUsfZlYepnsnbrZzhZAWcfE/1tYPTPJNgy5D4RKnAf?= =?us-ascii?Q?1HzGXoxJQLgkSX6T3NQzkghO4JO5NIwYVwa5IuIoxKPrNElfq6rjUSpofIfQ?= =?us-ascii?Q?6DlNYcRI/SMAQdOX6u5wQDJ+9v4SPeL7Sj+Wz8NC8AstQnaSWXqskjQoiN98?= =?us-ascii?Q?o8cOij7+6z2O0b7aZCUmeSFpkjZgcImqeGCOD234PsmHDIO9BvhBKEhS25Qu?= =?us-ascii?Q?+BD+h1I30++ShgU5CS5zY//0OKFsq6by6N/wdKnn?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7bee1353-f13c-4649-de04-08dba287098a X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5744.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2023 20:41:46.9497 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VftLOUSJRKfkOA9aYx2BY60+ktFJ+3U/9yWMxdNYvXEmBvXC+9yQ9FR+9wM1KLNO X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6846 X-Rspam-User: X-Stat-Signature: dn53dk1yx6f3temy6mx3q8z6ckf5x5ar X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 7D2CBC0010 X-HE-Tag: 1692650510-231477 X-HE-Meta: U2FsdGVkX18RRVbRhPar7NzviT4N522oIdG2QPFlWyrFU2a/OQLhohxjbSDximFi4GK3hNRRlLBY27Ncjpf1YS/wG2KxYyBm2YO3fXqYt+JHuAfx0z7y7jLgzqZnHS2mhFr7I7zX7W4sFVepr5cyL+7bmrSVhwt8z76w8iZ5PNYOkf3D8DF/xV+NCLX5n2WgB6U44l4xs7G4ABUx9nMqVDcs/gs/9wFzeuPAs0gI1MPqXnU5ck2ch9icNjAYR6KNMg/aVji8ADXHbWsmT21KtUSo4fb+5PmOwjiy4JlZGwPUDqdUT3d6GWrxSvu4W/1OZU82E62aM/8vmj3NZHRX8clZ/J9jPVRS9NU5X586kjqr7GH7tfE2R5S4360Zyyhy5HpZHfd0ZieuGfMQjTa/71tVkS2q97AiL0/ZbfdkU6zzeVRW7NQqHrlzQdea9ZAn2WM4D1dWdBcTFr1cXFaoVMj3PUpo9ot/9yc9umte/Dqq+kLxmzDe1vvzKMkeppVry2K5hk2wFBn+qCWnw0SyhcOP5rqR8rHqITIalTn9KImPlh4xqpJLWd0mpkrJLRih+RJHRdUCSnRqSM5BiYBEa3mE9YyvGUpXie9UsN2ENIYjPMzOCFThUAAEO6Rl+Ls/KFQOwCxDmyQ1V7FV8DMIgkCnzRxRCvzx+Cx5XjEVO24D25jO+cTjEiEpz7qlI5sI0kNxbr0+0VYrPtvJ4zj4Bv7DSmp4/1/99AYLFFdJXB8GS5nVq+xl099p++3YqXhzDow6qAXCKmAtVaiQFOXdFdGu3zJca/3Ax0YsZ5HM0+JWvFb4bLGV3cmi//WIrXAO2VDLrEBT5SX8fcBJvCLYvI2UyLrkez61nK9oSpq3lQ/ASsLd6GQ6Dah/vJYI31FJXFBVD0B6kGdScH8tFiDjGBPXZkP5mJS8iX4x65bWpXrZ7fDrCHJPhU1NJSou5mSZxW97LdY40rxcg9vJNbZ vbdfq0cY SLUDE7X90BfoWawlHnP74AofemHsHIEBEz/cxjZ7VIvi+BRlgI0HP5acdFx0y+6f8bF4ADiz/xfevZJ+pT4Sz0zhE9GT3riGhaG52zAM9vsHzhOVNInXl2Up1AjrJYNQKYWgBRuGxHIOqXhlqxKzjx0MX4ODApK1G14N8f7Ajc0I3vbkb/y02k9SSfjumPEtFE4UnvfSjhWBLnqYptBQMqbSpLX1cdSWbdUJzxtn9BsFF7YbyIGvz7EJqqShFkRh2vS/DXs8etjEEdEYceU1hDratYUbLg4SWV518Is+q6F0vfIIPI/9KS6pL6X+ScOavtKRrAzRjLzObHyOUJgqd9bwBnVPMSVyjFYEMxAblbZUkvjTF1v6Y3rSJUQadrBX2wzPvG8FzFwqoqriW5throHRwVvD/r/JYpKlm62m5bjK1NO6h1ngKW6qlJw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --=_MailMate_F12EC893-7E6C-4964-A9AD-546AB8805FCD_= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On 21 Aug 2023, at 14:33, Johannes Weiner wrote: > The buddy allocator coalesces compatible blocks during freeing, but it > doesn't update the types of the subblocks to match. When an allocation > later breaks the chunk down again, its pieces will be put on freelists > of the wrong type. This encourages incompatible page mixing (ask for > one type, get another), and thus long-term fragmentation. > > Update the subblocks when merging a larger chunk, such that a later > expand() will maintain freelist type hygiene. > > Signed-off-by: Johannes Weiner > --- > mm/page_alloc.c | 37 ++++++++++++++++++++++--------------- > 1 file changed, 22 insertions(+), 15 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index a5e36d186893..6c9f565b2613 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -438,6 +438,17 @@ void set_pageblock_migratetype(struct page *page, = int migratetype) > page_to_pfn(page), MIGRATETYPE_MASK); > } > > +static void change_pageblock_range(struct page *pageblock_page, > + int start_order, int migratetype) > +{ > + int nr_pageblocks =3D 1 << (start_order - pageblock_order); > + > + while (nr_pageblocks--) { > + set_pageblock_migratetype(pageblock_page, migratetype); > + pageblock_page +=3D pageblock_nr_pages; > + } > +} > + Is this code move included by accident? > #ifdef CONFIG_DEBUG_VM > static int page_outside_zone_boundaries(struct zone *zone, struct page= *page) > { > @@ -808,10 +819,17 @@ static inline void __free_one_page(struct page *p= age, > */ > int buddy_mt =3D get_pfnblock_migratetype(buddy, buddy_pfn); > > - if (migratetype !=3D buddy_mt > - && (!migratetype_is_mergeable(migratetype) || > - !migratetype_is_mergeable(buddy_mt))) > - goto done_merging; > + if (migratetype !=3D buddy_mt) { > + if (!migratetype_is_mergeable(migratetype) || > + !migratetype_is_mergeable(buddy_mt)) > + goto done_merging; > + /* > + * Match buddy type. This ensures that > + * an expand() down the line puts the > + * sub-blocks on the right freelists. > + */ > + set_pageblock_migratetype(buddy, migratetype); > + } > } > > /* > @@ -1687,17 +1705,6 @@ int move_freepages_block(struct zone *zone, stru= ct page *page, > num_movable); > } > > -static void change_pageblock_range(struct page *pageblock_page, > - int start_order, int migratetype) > -{ > - int nr_pageblocks =3D 1 << (start_order - pageblock_order); > - > - while (nr_pageblocks--) { > - set_pageblock_migratetype(pageblock_page, migratetype); > - pageblock_page +=3D pageblock_nr_pages; > - } > -} > - > /* > * When we are falling back to another migratetype during allocation, = try to > * steal extra free pages from the same pageblocks to satisfy further > -- = > 2.41.0 -- Best Regards, Yan, Zi --=_MailMate_F12EC893-7E6C-4964-A9AD-546AB8805FCD_= Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEE6rR4j8RuQ2XmaZol4n+egRQHKFQFAmTjzAgPHHppeUBudmlk aWEuY29tAAoJEOJ/noEUByhU+wYP/1iV6uG5LJcHOjy4ic9XL1jpuiNsbnmm7pwG z2+lh63xRO2XXC6fZomCv+LQEGJmCkVDRnx1paTpTQI4Qx7GjfiEQMR8+MKUJY0f GtH6HQ9mn1NnUkwyqoOxD9Jpbo8jzXwJxsOspdUHSDpVvoFuNEo/xCcQ6iw20pT9 AnIErRJBdYzc9liZ77wn8LNfnxhLk4N5cNAP9Li/nsIsKs98rEEgnq/iYWEfMq9n F70q2RpYUWdJLbC4G82N8qYT5JiIpBN8rRFO4vgB1pMyEYcGO9/wMw1+OXJFycC1 Cevk4VWLKEy1tKVPMFfbRPY5x5QWsGViwT4dBh9qhbmspVZeadOAasEjoDy7ChPl ECJXzj/ti0SsbEpro6C1e09uMCx3GEX9/oBKxf3NpGzsejwAbpHw7Ygwf0f7HJCg c3DNBlzKTQg1pNBXufScf98VaxAxeY+6Dm/DafOJwuACbL5dff1ib1zNJnYxwhWd +IdgT5FO+g3DwyP4aBfcjUXdwc6Xwe7jzH5oLvUqXNqN5fhjTfHdcR1AYEmv5anZ DCO0xQaV95JWNp6wgexLES9PsaD69lbvbpN9FC/dThsRw3nzjqlvKE31jho0/0MF jLojTGgah8EpkDyZlwGE5hXdCiLEG0dVTG969yVQqZQ/Wo47YtAx1qEJT01yNcqk hS9B6n6z =Hf5z -----END PGP SIGNATURE----- --=_MailMate_F12EC893-7E6C-4964-A9AD-546AB8805FCD_=--