From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C191CA034F; Mon, 7 Feb 2022 14:58:54 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6B041410F6; Mon, 7 Feb 2022 14:58:54 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 5BDC4410EA for ; Mon, 7 Feb 2022 14:58:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644242332; x=1675778332; h=message-id:date:to:cc:references:from:subject: in-reply-to:content-transfer-encoding:mime-version; bh=XodWbfavEiRuErpYDxtX9pN1bZSbg6aj0qz5gSjux1o=; b=AzFx//rOr9Atj/7qwTDEWtSVzESdMf0zBaI0Gsq5Z9LuwWt9Rv9p96JO p/dTKbt4XWN9TumP9je/OiED595DkeuEoH42QPbWoaiyfvoVHxyaFmty9 EniSpnh87pE6njq32sIwlkp1ptYXwN08HKCDSe7NCQwveezmblM/FpMe0 8dvM9/R6tnwb+F+ud5Way07XJcFhlZtLgGvONQUKiy72lvd6ijSAyUiPB A4gohD1MxzgXsuk2cvPibEy24J5F+euQxeoxJBV892rjmZKxK+tY6s43f SvW+Mvku1bP87ckaaWuJHZOnurPrE8QflQr39KrO7KSubNRVAwwEFi4nE g==; X-IronPort-AV: E=McAfee;i="6200,9189,10250"; a="248929350" X-IronPort-AV: E=Sophos;i="5.88,349,1635231600"; d="scan'208";a="248929350" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2022 05:58:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,349,1635231600"; d="scan'208";a="632463892" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga004.jf.intel.com with ESMTP; 07 Feb 2022 05:58:50 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 7 Feb 2022 05:58:50 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Mon, 7 Feb 2022 05:58:50 -0800 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.45) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Mon, 7 Feb 2022 05:58:49 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=imRLgGkzj9LJYxqY/SW7w1rtv6kGCuun8s/1San2nm7LtNmwq+AcydA5RtDOHZX1otvhlnjbucwLmXfqp6hjxEL5VjGV2bT0lh76qwAbghLDsJ4aPjaCCGwFQRan5bRw/NK9i5Qvtst0i+gSogC9UO0pboeKOL4KXWkNzCpS9V0UOPEGjHKixjyEi8YYMwrplz0u3TyZypWs02OR22k2m8/VEc4dMX/xpFoQCDk2IhyDrSkfBHOtzn/ByvrYqU+ROIGrTtEWrySrdFosnvq8gT97nKVYgrNkNd/b020fspPXS4e+rR6NtwwYLKbwu7zGVxb3XAHfPmF0CQ2i6vsqew== 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=iSguBVYhafBt0RTKz8iCT1p1beIYH8Vz9A/763d4mGw=; b=BqhS1/7xovSo1MnRJ8gSqEn+uWKoSovdIYgtokceUiIX37rnaWxJuSOGnt7lg6XUpTvWyLP7NUBDzDMH52wTjO7Cqii/okIlhYdSKB+txv6qdXO1dtk3BPv/NIB66q0TPTRUifiWbra77+MZfKtQ2wBz6g+1foD2b1aEk2xKL2bv1R5FpZgoLlmxOortMct8YHTcyu4z2wiC2CCVTV0ITckjkwKIPke3e+wz6QzOMg4qbQUj4PXxHdLULwcaGbLmSywJ6cRgvT3jrq4xSmWVZhB+4Pws6ITAPFtiozagfse6hGoKlBU863Pqy2EuLuf1J4ihmoy1lG+lLn1paHFEhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH0PR11MB5000.namprd11.prod.outlook.com (2603:10b6:510:41::19) by MN2PR11MB4597.namprd11.prod.outlook.com (2603:10b6:208:268::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.12; Mon, 7 Feb 2022 13:58:48 +0000 Received: from PH0PR11MB5000.namprd11.prod.outlook.com ([fe80::5046:8550:928d:850e]) by PH0PR11MB5000.namprd11.prod.outlook.com ([fe80::5046:8550:928d:850e%7]) with mapi id 15.20.4951.019; Mon, 7 Feb 2022 13:58:48 +0000 Message-ID: Date: Mon, 7 Feb 2022 13:58:41 +0000 Content-Language: en-US To: Akhil Goyal , CC: , , , , , , , , , , , References: <20220130175935.1947730-1-gakhil@marvell.com> <20220204221334.3551574-1-gakhil@marvell.com> <20220204221334.3551574-3-gakhil@marvell.com> From: Ferruh Yigit Subject: Re: [PATCH v4 2/3] ethdev: add mbuf dynfield for incomplete IP reassembly X-User: ferruhy In-Reply-To: <20220204221334.3551574-3-gakhil@marvell.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P123CA0193.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a4::18) To PH0PR11MB5000.namprd11.prod.outlook.com (2603:10b6:510:41::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2c1a88da-4e7b-4f7b-e293-08d9ea41f667 X-MS-TrafficTypeDiagnostic: MN2PR11MB4597:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8zes1JsnesoIsYcnF6iB7Cq2UJAnSlnBf+7rLyelyRCq992MT1sxck7QSl+jL/CybetkYubY3oQIN/wAITjbVlhEYYhn1eR8YL3G0b11rlXbUH+bjWaUz0JpUgVQluQA5/fzQJkqMNKT+DrCwt5GWhiRrcsEV2373+XKdQIwVp2nLvayslRn2x0aqb3F+l+i6Umr05Nr7FkG98YWauFrPY6jAYIjrGoUzNdUcApfCcxr1/BemNmSVRo7JSy40cYQ2m3vR9aPB5S5rQb1DBy6EQ1aZoSU/HG0I6qniitKVaDFo94N0c60MFZbio6QoNaOFjtkB2yGk12SZTKohW9MX78yCm9mPDFBdumxKBDA1g4zoGXG4PWCWBYowNQoAWlTtZIJ63IwcgKwegcxLKRD5ZHmg5JQM7zr2ekA/hdXlgQyXcfGuH1TT5LRV2+7q2SfZ4Jm1nR40eam3vIPJetavFAqwxGqj7QgcVJVp99gGYXkmhn96hc50rciSESEvpipfGccT2wdvBgqUTRfBCw/bquqUqvENnHlf1Mop4Vn24PnxxRTpLniNSSB8Se740s5jAJyrT0X93KNfvuL2Owa8TEqlGTB46ph99xsby/tsNy1NX0I9sALXnkiDa/C076G9PM3DUJ8h+Be9259bp2ezG9XwqlNfdj6eL6iiV8WaK6S8kK0XlYImO7VSPm9pLTXN9WMuXBHfyp8nFERIvrxzQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB5000.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(82960400001)(186003)(26005)(8936002)(4326008)(316002)(83380400001)(66946007)(8676002)(66476007)(66556008)(31686004)(36756003)(7416002)(6486002)(6512007)(6506007)(53546011)(31696002)(5660300002)(55236004)(6666004)(2616005)(38100700002)(508600001)(44832011)(2906002)(86362001)(45980500001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V2NmbFN3OUZVWTZjME5QSWNFSHNNZTRJMDM2R2t5NmtHVGp5b3RoVHVtVklh?= =?utf-8?B?TWM5czB5RldTL0ZvUjFBU1o1NzlIeEN1WDllK2NPT1gzMm41SnNrN0lrZkJp?= =?utf-8?B?c0VYMUI2dzZCQXJoQXlocExLMWVjZVRabHprWGVPR2VEa1k4MmQ1QjZkNTYv?= =?utf-8?B?bndnbWFlaTBZTDN0UlFxNWhSTTFsdHZLajBxVG11L0ZhZmE4MzBFbmFkOGt0?= =?utf-8?B?czFoWDZvdWJuYkxQQTNpaW5GOXJ3SXJnaVNpZFRSY05wL1U3clltL3Y1b0lK?= =?utf-8?B?SW9rSEEwd0NiTjFpS1ozMXkrb09CdU54WFlVT242QndzZzZhSzJUTFMvTG1D?= =?utf-8?B?NnIzeUxwZmxqK3ZVdG1Cc1QweU5wMUpwOVAxRTFyd1lhVUduSE9KTHZwUkI3?= =?utf-8?B?WFQxVno0YW5mSnFSbkFRY3ZEa0xUV01abWhTZlVLZ01hOHZvYS9rNkx6YXZn?= =?utf-8?B?RTRmNnI1bnU5QXUyV3pkZnRiYURzMEhsM0QwYlNWbkN1MjN6dDBQWXBDLzV4?= =?utf-8?B?REtoNU5EYzROdDZleXU0NnhnMkJWazc0MzRIQWgrc3czeVRoOCtjYjE5TzNT?= =?utf-8?B?bU41Sm82TndtSmkzN0ltOFJ4S2ZrZXJDeHQ1c0RFdmZRei9wUUtZa081NTN4?= =?utf-8?B?bktWWXZESzVNalJJNnBBdUJqMlBhaEtkZFIwZFp2SWhuU3FDakUzN0hPaTZl?= =?utf-8?B?dGNCYlhRWDFlT2xQd0dHVVozL3NWdy9xT1VzOU5qNDhqcWhTR3hKajlza1JV?= =?utf-8?B?UVE5L1FhM1FzNnZucUUyZk5BWDRCNGVrSWQ5TUpSelI2Tm9EQ0dvazNpMHJ5?= =?utf-8?B?ZWV0QXZhWkdSaElxYWoxKzNjRUZCZHRRWlg2VlZ5Z0ZtZUpZT215bityR2Vs?= =?utf-8?B?N2wzZ045THc1d20yMUdjcjVuM2JnQTJuWEw3RW1HSm5oMjUxNmg2WngzMnNC?= =?utf-8?B?MTBKQWVFWnNJeFZjeXRWMHdLL3Y2dkwxZTM1K1h2WjYvTXFVTnd3R1NCYnE2?= =?utf-8?B?T0czU2l2S2ZFZVVUdWNyckovQWg2NXZOOXFRR05NZ080OHpZOVB4VHZsc3NO?= =?utf-8?B?Y3BBUTRrclA2WkJlNGVnM1dPQjFXVjdFQkdTRFVXOU5FbzI5VVdGc0kxYVdG?= =?utf-8?B?YlVZRjQyelZCaTBOdVVxN3NPTjFHbXhjM0JIcWVaYzJGT1p3TWlOZVE5RFpO?= =?utf-8?B?ZHBmaGNYWEFibHVzZ3ByMGdKWmtzSFVHa29jNXJxTHJBRnJWL0pwa0JFdkdk?= =?utf-8?B?QkFhMGw0blZTYjl2S0E1NitYd1VHd1E5SWFxQ2tBQno4Z0hCbDJYd1kvTVdo?= =?utf-8?B?d2E2RlRJTi9YYlJKNW9PckVFblB1L2J2MW0rb24vTXlOZTRDMnZWMllreFhE?= =?utf-8?B?Ri9ERFpwc3ROam9kZU15RVppTzNXbVZrUXpQWmV2cFI2SDBUU2FoeWd5S3pO?= =?utf-8?B?bkwvUVFHUkhwM0hRV1RqSGpMRXgwbG1kaS94Z3gyM1EzM2FrWVhuY2R4bXIz?= =?utf-8?B?SVdERUFsek9TdkI4VlZpR2t0RzJzM2M4L1lRRW5JUkJFYi9pTTV6UFpkbUth?= =?utf-8?B?MnNjRHhLMlBBcERVRVc5K3Z3U0xVaHZ2WUE1Sk5kSk5KMS9lenJiWEVTbW01?= =?utf-8?B?VklnQ1doMkJJYmthUTlJdlJseVkvdnRSQURyMHB4aFRWUmZRdWI4TXRFdFNG?= =?utf-8?B?d3MzN3VXRnNCREcyK2hDMlYvUWxFUUptQlJNdlhwRDFkZDYzMkVHdWNHQ1l3?= =?utf-8?B?Y0NHdHhULys5V20rN0Qwb2hla01kbW5Sc2RTMCsxeGVML0I4UElxTDllUnBK?= =?utf-8?B?dnAxM0l1b1BiSHk2UDZnMmVrQXZ0WTVRTkdmNGxzbWxydXNIRjVKS2s3VExM?= =?utf-8?B?aG9WVnhCUU5SNXdQcHkrbGw5QkRQT1FOU1lYbGxOTlhGd3dWR2todDQ4cDFP?= =?utf-8?B?UFRpTlE3TWREN1BvREpCZmZDMWJIYlpidWFxSlVrWjlRR0pVZkxYdGxZc3Jp?= =?utf-8?B?YVBQYzRXZkhqd0FEY2FwbmV5UmZnbndycU1JcFUxSElpcCs5YXhWS3dSUFhY?= =?utf-8?B?dzFpUHpqRXdCWFNxcUxpU0Vzejc5Qmg5S2ZKVXdId2FscU9xVE8yU29nMVZr?= =?utf-8?B?djlua25sVTBXUFZ1bmo0ZjBUMW1pWUw1d1BBSGZ3RDhybDFJT3dRelp0eG9K?= =?utf-8?Q?piDuyFB0cpy7puyCq692zUw=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 2c1a88da-4e7b-4f7b-e293-08d9ea41f667 X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5000.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2022 13:58:48.0068 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: E/chp9Dp3ll4oT413DsDBAdjZC47HzTyya9ekIKaQxVfkHzqULd2KrXVmUJBYEwu8CTtj8SX5pFQGaetIX308g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4597 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 2/4/2022 10:13 PM, Akhil Goyal wrote: > Hardware IP reassembly may be incomplete for multiple reasons like > reassembly timeout reached, duplicate fragments, etc. > To save application cycles to process these packets again, a new > mbuf dynflag is added to show that the mbuf received is not > reassembled properly. > > Now if this dynflag is set, application can retrieve corresponding > chain of mbufs using mbuf dynfield set by the PMD. Now, it will be > up to application to either drop those fragments or wait for more time. > > Signed-off-by: Akhil Goyal > Change-Id: I118847cd6269da7e6313ac4e0d970d790dfef1ff > --- > lib/ethdev/ethdev_driver.h | 8 ++++++++ > lib/ethdev/rte_ethdev.c | 28 ++++++++++++++++++++++++++++ > lib/ethdev/rte_ethdev.h | 17 +++++++++++++++++ > lib/ethdev/version.map | 1 + > lib/mbuf/rte_mbuf_dyn.h | 9 +++++++++ > 5 files changed, 63 insertions(+) > > diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h > index 8fe77f283f..6cfb266f7d 100644 > --- a/lib/ethdev/ethdev_driver.h > +++ b/lib/ethdev/ethdev_driver.h > @@ -1707,6 +1707,14 @@ int > rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue, > uint32_t direction); > > +/** > + * @internal > + * Register mbuf dynamic field and flag for IP reassembly incomplete case. > + */ > +__rte_internal > +int > +rte_eth_ip_reass_dynfield_register(int *field_offset, int *flag); > + > > /* > * Legacy ethdev API used internally by drivers. > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c > index 88ca4ce867..48367dbec1 100644 > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -6567,6 +6567,34 @@ rte_eth_ip_reassembly_conf_set(uint16_t port_id, > (*dev->dev_ops->ip_reassembly_conf_set)(dev, conf)); > } > > +int > +rte_eth_ip_reass_dynfield_register(int *field_offset, int *flag_offset) > +{ > + static const struct rte_mbuf_dynfield field_desc = { > + .name = RTE_MBUF_DYNFIELD_IP_REASS_NAME, > + .size = sizeof(rte_eth_ip_reass_dynfield_t), > + .align = __alignof__(rte_eth_ip_reass_dynfield_t), > + }; > + static const struct rte_mbuf_dynflag ip_reass_dynflag = { > + .name = RTE_MBUF_DYNFLAG_IP_REASS_INCOMPLETE_NAME, > + }; > + int offset; > + > + offset = rte_mbuf_dynfield_register(&field_desc); > + if (offset < 0) > + return -1; > + if (field_offset != NULL) > + *field_offset = offset; > + > + offset = rte_mbuf_dynflag_register(&ip_reass_dynflag); > + if (offset < 0) > + return -1; > + if (flag_offset != NULL) > + *flag_offset = offset; > + > + return 0; > +} > + How mandatory is this field for the feature? If 'rte_eth_ip_reass_dynfield_register()' fails, what PMD should do? Should this API called before 'rte_eth_ip_reassembly_capability_get()' and if registering dnyfield fails should PMD return feature as not supported? Can you please describe this dependency, preferable in the 'rte_eth_ip_reassembly_capability_get()' doxygen comment? > RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO); > > RTE_INIT(ethdev_init_telemetry) > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index ecc5cd50b9..ce35023c40 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -5292,6 +5292,23 @@ __rte_experimental > int rte_eth_ip_reassembly_conf_set(uint16_t port_id, > const struct rte_eth_ip_reass_params *conf); > > +/** > + * In case of IP reassembly offload failure, ol_flags in mbuf will be > + * updated with dynamic flag and packets will be returned without alteration. > + * The application can retrieve the attached fragments using mbuf dynamic field. > + */ > +typedef struct { > + /** > + * Next fragment packet. Application should fetch dynamic field of > + * each fragment until a NULL is received and nb_frags is 0. > + */ > + struct rte_mbuf *next_frag; > + /** Time spent(in ms) by HW in waiting for further fragments. */ > + uint16_t time_spent; > + /** Number of more fragments attached in mbuf dynamic fields. */ > + uint16_t nb_frags; > +} rte_eth_ip_reass_dynfield_t; > + > > #include > > diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map > index e22c102818..d6de8d402e 100644 > --- a/lib/ethdev/version.map > +++ b/lib/ethdev/version.map > @@ -284,6 +284,7 @@ INTERNAL { > rte_eth_hairpin_queue_peer_bind; > rte_eth_hairpin_queue_peer_unbind; > rte_eth_hairpin_queue_peer_update; > + rte_eth_ip_reass_dynfield_register; > rte_eth_representor_id_get; > rte_eth_switch_domain_alloc; > rte_eth_switch_domain_free; > diff --git a/lib/mbuf/rte_mbuf_dyn.h b/lib/mbuf/rte_mbuf_dyn.h > index 29abe8da53..299638513b 100644 > --- a/lib/mbuf/rte_mbuf_dyn.h > +++ b/lib/mbuf/rte_mbuf_dyn.h > @@ -320,6 +320,15 @@ int rte_mbuf_dyn_rx_timestamp_register(int *field_offset, uint64_t *rx_flag); > */ > int rte_mbuf_dyn_tx_timestamp_register(int *field_offset, uint64_t *tx_flag); > > +/** > + * For the PMDs which support IP reassembly of packets, PMD will updated the > + * packet with RTE_MBUF_DYNFLAG_IP_REASS_INCOMPLETE_NAME to denote that > + * IP reassembly is incomplete and application can retrieve the packets back > + * using RTE_MBUF_DYNFIELD_IP_REASS_NAME. > + */ > +#define RTE_MBUF_DYNFIELD_IP_REASS_NAME "rte_eth_ip_reass_dynfield" > +#define RTE_MBUF_DYNFLAG_IP_REASS_INCOMPLETE_NAME "rte_eth_ip_reass_incomplete_dynflag" > + Needs Olivier's comment/ack.