Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp2557876rdh; Wed, 27 Sep 2023 06:21:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEVMyiY9QXEZoW+6ObEb8kDmD8hTbiBOLmGojKB8n4qIAN/GBKSQgCm58qSRD8aRyXJcNF+ X-Received: by 2002:a05:6a00:2787:b0:693:42d2:cde0 with SMTP id bd7-20020a056a00278700b0069342d2cde0mr405021pfb.22.1695820905027; Wed, 27 Sep 2023 06:21:45 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1695820905; cv=pass; d=google.com; s=arc-20160816; b=u0IB6sZfyCy2RUermsYnk5Ine6YEJELUtrweMf75IDnCXcnr1cA0tgIr6xoGKlxTzx oVmvXv5vZkubExGaHx7VAbLfaJ2I6EJW/Tf2zmDGklwrxqupVZKXG0SXWAnkObqJX6TJ 5i/7WNwXagcZ8Hxtv48Au6rlHc8hXKdAWkoAiQQkqOgkPfAvDOBjVLZ0BLRr2Wu3NGdq lR+JidEbG+4IsXRCcLMeq/1q/ryyZVWlH37eS5CzEhGnioI/8+/rwW0rBHdqeGG15RlX tnNW2eoT1k3xJTvH0MV23IqhvD1at4F7k56iPJLTDWYyQHmAiBak51AdlJIHGjPk8zFz QHmw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :in-reply-to:from:references:cc:to:content-language:subject :user-agent:date:message-id:dkim-signature; bh=cFwy3neVL04A+NqKH+xDGfrz8aU92UtO0hWTF1k9O5k=; fh=GI5l3QeYu7w0aKiSxMY83jHirlPPmH47QTkDFx5oe7Y=; b=VHlAyXhAGiavcTrttwopMNoUoeydUM7jhf0Ig6fx+lQ7qfyzrgU4b3PGt4KSfHKrqq rF9DqbCBH4WhlT4M5U40+kHSUX7XCXVIPPXDyEE2+OWXiMzvyf423QkJoDiRjI3OBC9I 5YBlXH44BLghqXhf0jVr0HDmkq9KJ+042IS3+IJIulsEyqCiV2gK1iUsE6yT0Wm2lPBK qnrG/9OFlI24OQ+nUTL71478I0KrvvxdNqrxwcN9XdOTPfp6GLaI8ibIzYJHY6t2wwsJ fxEI+EpjKPZTqAdH/EgXm4+gQz6SyaVOlSoH9ZerDc3JWLpp5t+wTp8/WU0smA3hc+qX nNkw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=CU64YNV+; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id bd34-20020a056a0027a200b0068a685bf30fsi15251522pfb.271.2023.09.27.06.21.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 06:21:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=CU64YNV+; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 93B41807FCF1; Wed, 27 Sep 2023 04:55:24 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231410AbjI0Ly4 (ORCPT + 99 others); Wed, 27 Sep 2023 07:54:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229901AbjI0Lyw (ORCPT ); Wed, 27 Sep 2023 07:54:52 -0400 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2043.outbound.protection.outlook.com [40.107.220.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F3AB6FC for ; Wed, 27 Sep 2023 04:54:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PnslfQ2K4sXeGfFlee8kWrWr2ENbUxeFGRyeRXtn7Jrf36MB5iMQJKzN63SBGMXkeUGQ7YFG+sF+1ufDHS8P0o8dsnQneXzRpfJZv7/f9TSclmdu+qNfv/N5h3dXjZn4wxilntBHW/yp9ukGR9jJRW7P1KdgYxuoUySKwU2rahj0GAYofq5hB6IINvX0CH3NnmYOS1ORbnhZ5N/p5NtjREUlC7/GeZwX15svtkl9aXuwW94kJxHpXzSALyKXx2ddF91QzaHFfbhvSdIJUonisR16qLLdMWo/KnhhXUpVdT2HOYQhZwkPNBjUqd9dh16uokV7pHUA1FdGYmqvnPcs9w== 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=cFwy3neVL04A+NqKH+xDGfrz8aU92UtO0hWTF1k9O5k=; b=DsBvRXPsz95wlxs/5l8ZNTsbMrA1TAirgbSMWCdxGtuiNPNWNB8WMLNN9jFu5z9tvg2Nigg9JnfYMJmkRg5d6NMgBjj3K2z3oHv4SwrD86JEN+FeumdgbJvHtJaZ7Qfw0Ncz1XGWEP+dJz4vFxd82y3xI/eFaCFgr4jTLHLN9xjUG/63YW6RX8ZCN+Cn2/VmfNFDJLTgWDXE4te/1H9E5c4fg9Y7vac6dwlFHyjKF7r57Sjj6JWsFsmuiFC83vXTjDGephkBbqQp8TzdsUqSEKUlFRNS4u/mBiPwJDYvGy/q6pcZ4D1tTSP39zOmPTg5J+P408dyLfVh1gdXSQZGsw== 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=cFwy3neVL04A+NqKH+xDGfrz8aU92UtO0hWTF1k9O5k=; b=CU64YNV+ZLTGaEIElysaNze23jghFcxJr6bq+WEcEvvjDzxhdsDBAYh7k8GgEl2hs/FIviarZpBBX3LvixH4fwnHGE/OqB91nhF0ijtXS/86z9Or6c2mHZZASUPUQfzgfEpK7YAbLOr6lzIYYQx4THcUkNPvO8xNOHV0akIRVvg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from BN8PR12MB3587.namprd12.prod.outlook.com (2603:10b6:408:43::13) by DM6PR12MB4944.namprd12.prod.outlook.com (2603:10b6:5:1ba::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Wed, 27 Sep 2023 11:54:47 +0000 Received: from BN8PR12MB3587.namprd12.prod.outlook.com ([fe80::a7fa:4411:67a3:131d]) by BN8PR12MB3587.namprd12.prod.outlook.com ([fe80::a7fa:4411:67a3:131d%4]) with mapi id 15.20.6838.016; Wed, 27 Sep 2023 11:54:46 +0000 Message-ID: <390db8af-1510-580b-133c-dacf5adc56d1@amd.com> Date: Wed, 27 Sep 2023 13:54:38 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH drm-misc-next 1/3] drm/sched: implement dynamic job flow control Content-Language: en-US To: Boris Brezillon Cc: Danilo Krummrich , airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, faith.ekstrand@collabora.com, luben.tuikov@amd.com, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Donald Robson , Frank Binns , Sarah Walker References: <20230924224555.15595-1-dakr@redhat.com> <20230925145513.49abcc52@collabora.com> <20230926091129.2d7d7472@collabora.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= In-Reply-To: <20230926091129.2d7d7472@collabora.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: VI1PR04CA0088.eurprd04.prod.outlook.com (2603:10a6:803:64::23) To BN8PR12MB3587.namprd12.prod.outlook.com (2603:10b6:408:43::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8PR12MB3587:EE_|DM6PR12MB4944:EE_ X-MS-Office365-Filtering-Correlation-Id: 63bd6418-4ca2-4af0-e6e9-08dbbf508bc6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: G4fxqC/kNrWLo1ueW+ywOAFU2bLD8meYIWlBz4gXeq8PK0uk9eW5xUr/UT7WgZg/k1Vq1W4wwoS8z68+hVloxYUMWsqNGtxxukiNK9NjLs0QTz/hKpmyjjkAR8dbFXdFojNXEHFhGF/QXd4uQKcDc6NqYLLH5I61c184k0OJAKHd1XcpSiOOJLrsPNpm/CtFJ6b04JoCSqEvKQe1yzJYz/JjcTGpyUZ3ISqAGZLLAqtg+e0aWjfH/WZIbs29QFLPTEP2oY5+cxeRLwIESEGiBYT+3XeavSn0z2k4UI1nygIsuOSlJf/Vt8nDBV1iC4vRe15i1fdhcmZP2bhDrvdoLbxcJ9P/NuMKgJSWT8aQJeoW9zBxWP3tCityRdo+xX7NBu3hI2HaLl87TmpQi6gQ43JJClZI5e6q06LDXeHgMwESS3QAeL83N40ghR+URrz3JCjlZrpTddz7rCZWqxfdHqr7xN2/+nZP1Wir+WCs4Y7YvYUe7pIudZW4J1plktR+vy1fRu/Ie9T8R5HxXVXyDtaBhLULzdbALGdTpYRLzF1EuZdspZP4twp7AyTCylokdxUMz0xavOJohfD+pvMyRtuz6CLZTyRZk+581trXBeiuJosjA4anfc9AbKshJiBG3OG1rMaetXrDxhSpUYLDYQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN8PR12MB3587.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(366004)(136003)(346002)(39860400002)(376002)(230922051799003)(186009)(1800799009)(451199024)(6666004)(7416002)(83380400001)(6506007)(38100700002)(66476007)(6512007)(54906003)(66946007)(26005)(5660300002)(66574015)(66556008)(41300700001)(8936002)(8676002)(316002)(478600001)(4326008)(6486002)(2906002)(2616005)(6916009)(86362001)(31696002)(36756003)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V0Fra2ZZR2I0a1FneFJldlBDYkNvRlRsUGxSTWxQOG12QUFtblhYeXd0aHB0?= =?utf-8?B?ekV0WWQ2UlB6MmdsZUxyOHBaeUFmZ0pDMlBhejB6MndDNFV5MjQ5Y24wQ1Q0?= =?utf-8?B?UXlnRkx0MEQ3NlBXbDlSNkxnM0NVdm9LWHpWenNvNjJtMkNQZCtpdHVRR3N2?= =?utf-8?B?RzNuYnlhUHRIZjBLOS9Vd0tIYzYrVnBBQ2pjZUFpTEwyVzQ0SHRKS3hpMFN3?= =?utf-8?B?MTJQeUZER1BIbWF1ZmFyU09ld0h6Si9uYUYzUTdjQzFkUjdLRVhVVmE4Sk9H?= =?utf-8?B?V1pRVm16eFh0K3N3aG5aR1NIbUtST2hZeEFDNFFJRmpORStsb3AvdEhOWWxz?= =?utf-8?B?TStZUEhLWWZ4a2tXeVFHaFJqU2t3eU1wVElGaTZFKy8vdmRjRys5THBNYmc3?= =?utf-8?B?YVRLeFp3NzA1Z0ZXanUzV3Ayc2pJdlllN0d3T3NCWmFMbzRzdml4UnhIR2FR?= =?utf-8?B?NVJBOTM3WkJJMm4vZm1NSXd2RzEvUW9HS0lSN3g2ZjJiSmlmM1ZqK05UN0J6?= =?utf-8?B?Y3BMZlZOcGZpZ1hUMGdPeHZjamdsbVF3WG1MWTIxckhMck5iRU9FL2RFU1Qr?= =?utf-8?B?RG1MU0FoaHJTVWJDdTZHd1FDVzlhZlBYUTQ5ZjU0U3EwVEpzNVhmeUZVeHZ4?= =?utf-8?B?SlgyZG4yNCtvaUtSaElIRkZZaWlSZ3dvY0kyd1UzclVtR2FpMmVROTFpc3Bu?= =?utf-8?B?VjM1Mjl5azB4YXY4Mkx0Q0VCcEkzOFdjWWMvWW43b1Frbnc4elpvOWVCRmRq?= =?utf-8?B?MHJiY2NOaUJoZSs1UzV5RzhNN1NPNlBEcFRRT01Ldkx0UGNSeDgrTGx2eDRz?= =?utf-8?B?a3kydUNWL1VkVDB0MGRuaGNGRXNuQWJkWGtTdWt2T3dUdHZJeFB3TVkvU3Bn?= =?utf-8?B?eHhzUUlvdDNSTHZEMEViRmFqUlRMYmV2YXVwZGd6bUtrTVd2cWRzQVRQYzJP?= =?utf-8?B?ZlpqSVJwT2dPMFNvNjA4TExxM3gyanl4eGN5VGZodFRkOW5vZkVWemxwYk9L?= =?utf-8?B?NGNEN2NZZUZzS2VQczZLZi8rQSt6VGtmamlkS0N4aXVJMEg4YU1wNm82U1Ew?= =?utf-8?B?cEF5WFJ2cEJzS1BOS2xGeVY4OVJBeDRGRkZ6c0RPYU1qTThzVVFEU2Ftd0Vr?= =?utf-8?B?eFZqSXdGeGhINmo5VGF0UEtrblp3Z3NqTkhtUGhBRlFlQWx1NzhERFNIRnhD?= =?utf-8?B?a2F2RDhxSi9aaGtNU1FQN2JzMHl0SUgxNjE4eUtpZUIrK3l6M1dwU3hpZ1V1?= =?utf-8?B?S0RpeVcrUTNhZE5iWlNyNWRhNDQvZ1U5cGlkOXNiWVJZb215Q1puWTlRYkRn?= =?utf-8?B?ZTZ2UTNWL3RQMmQ2YjdwWUlvbzVyZWNtVzBoRzgvWlc2N01TTVZYTFpqMC9s?= =?utf-8?B?Tkd5WERNTEY0cldqcTJwS0NHMEl4bmR4Z0xGN0UzMy93eUJCbGFaU3pLUmNa?= =?utf-8?B?THdxR3ZrT3huY0cvUWxFRDJSSk92eHoyUzlUbUtzUHh0K2N0TnJzVVBmd0RH?= =?utf-8?B?UFNGZ29vRG1UbVJSM3d6UjMrRjBXM0R1aThSaldYMTJPSmRBMkJLclNad1RY?= =?utf-8?B?cDBoMGJzbU9wRnhOR3RWc1M1RjRWYUdGWlVoK2VXTkxJTWJEMldlOEwrQkow?= =?utf-8?B?ckVocEtqS0YxSzM3RHNaanZ1d0l4M2dMcG9WOGpUV3NKaGJBd3BIYkNjRTdY?= =?utf-8?B?WnJqWHhZNmJnZ29JU01GcDRjR0dPbDNLRGFZRmxuOWR1M21OTkhQaUNWYmZH?= =?utf-8?B?c3g2eGlsSE5NU29Wbmd2Q0RDc1RBeGlmUUdpdjVpMld1Skh4cXFBZFpFTHRY?= =?utf-8?B?TVo2NEwvdk51elZkUlZ0SDY3QWx0MUp1TFI1YjVUYVAwdVVzUXVtUVZTbTdh?= =?utf-8?B?Y1lINkpIclJYUlB2bTZoZzdmYW12RU8rTzFYTlJyUGExY21lczJKMzdCU05m?= =?utf-8?B?M2UvS1RQRmFOVFlMSHdWQjYzMk4xRDBoZnhqUERoSCsrYzl6VDNlNk9GbURz?= =?utf-8?B?eTdwYXVLY0lWZmJHUkFFdTJUb2g4bkNrR3JFaElOdkQ3dG5UUzVTT0JNV1pS?= =?utf-8?B?cDN0TTg5UzdPdUlITVQ5ejB6bnBYdUhzN3FFTTc1bG1KN0F3VWRiQlhsM1gw?= =?utf-8?Q?yqhM=3D?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63bd6418-4ca2-4af0-e6e9-08dbbf508bc6 X-MS-Exchange-CrossTenant-AuthSource: BN8PR12MB3587.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2023 11:54:46.7917 (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: oL9TGaj7vV4LxlUmlaZOepIf/90FclMNSB9X1J6wXrsBb3UZh11jLXvEHM3kEQUa X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4944 X-Spam-Status: No, score=-2.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 27 Sep 2023 04:55:24 -0700 (PDT) Am 26.09.23 um 09:11 schrieb Boris Brezillon: > On Mon, 25 Sep 2023 19:55:21 +0200 > Christian König wrote: > >> Am 25.09.23 um 14:55 schrieb Boris Brezillon: >>> +The imagination team, who's probably interested too. >>> >>> On Mon, 25 Sep 2023 00:43:06 +0200 >>> Danilo Krummrich wrote: >>> >>>> Currently, job flow control is implemented simply by limiting the amount >>>> of jobs in flight. Therefore, a scheduler is initialized with a >>>> submission limit that corresponds to a certain amount of jobs. >>>> >>>> This implies that for each job drivers need to account for the maximum >>>> job size possible in order to not overflow the ring buffer. >>>> >>>> However, there are drivers, such as Nouveau, where the job size has a >>>> rather large range. For such drivers it can easily happen that job >>>> submissions not even filling the ring by 1% can block subsequent >>>> submissions, which, in the worst case, can lead to the ring run dry. >>>> >>>> In order to overcome this issue, allow for tracking the actual job size >>>> instead of the amount job jobs. Therefore, add a field to track a job's >>>> submission units, which represents the amount of units a job contributes >>>> to the scheduler's submission limit. >>> As mentioned earlier, this might allow some simplifications in the >>> PowerVR driver where we do flow-control using a dma_fence returned >>> through ->prepare_job(). The only thing that'd be missing is a way to >>> dynamically query the size of a job (a new hook?), instead of having the >>> size fixed at creation time, because PVR jobs embed native fence waits, >>> and the number of native fences will decrease if some of these fences >>> are signalled before ->run_job() is called, thus reducing the job size. >> Exactly that is a little bit questionable since it allows for the device >> to postpone jobs infinitely. >> >> It would be good if the scheduler is able to validate if it's ever able >> to run the job when it is pushed into the entity. > Yes, we do that already. We check that the immutable part of the job > (everything that's not a native fence wait) fits in the ringbuf. Yeah, but thinking more about it there might be really bad side effects. We shouldn't use a callback nor job credits because it might badly influence fairness between entities. In other words when one entity submits always large jobs and another one always small ones then the scheduler would prefer the one which submits the smaller ones because they are easier to fit into the ring buffer. What we can do is the follow: 1. The scheduler has some initial credits it can use to push jobs. 2. Each scheduler fence (and *not* the job) has a credits field of how much it will use. 3. After letting a a job run the credits of it's fence are subtracted from the available credits of the scheduler. 4. The scheduler can keep running jobs as long as it has a positive credit count. 5. When the credit count becomes negative it goes to sleep until a scheduler fence signals and the count becomes positive again. This way jobs are handled equally, you can still push jobs up to at least halve your ring buffer size and you should be able to handle your PowerVR case by calculating the credits you actually used in your run_job() callback. As far as I can see that approach should work, shouldn't it? Regards, Christian.