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 AFC2AA0543 for ; Fri, 11 Nov 2022 04:13:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A293940F16; Fri, 11 Nov 2022 04:13:04 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 0E8A2400EF; Fri, 11 Nov 2022 04:13:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1668136381; x=1699672381; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=bo32NvDA3E50kI4BI74/REZ0sPgjhqyTOnVvmUGhX5M=; b=aLR/EcJwVfK2Ud4SALEbGSUVnABnrqT1lEbTC0u9zjAwV6DXNUdm2v+f wLYRsmyBihsQ6gwsc3FT5uZZlGW5xIu/kS/9iRFy4DxkpuAo76WQezOlh 5DNcEAYUNHcexydpKrIkzFG1t/Sutz8qgFNe/WbD/jQxndJXMUypK/gTw 852kZSbAcmhqXh1Zr1PwGaB8/sglnrCuD4r6rkzrf6vV5YAt3L1UZ59So oZ9Ulxj3ITl48P2xhk6+SFNL5eLjhjMK+sTtoW0i2HNneD+6sO9dzWwH1 vwZ5r3UygRfE+hbPA5PxDByjdQhw9qLFyKqA/xV+7GjfVcFCvPBsUXKbl w==; X-IronPort-AV: E=McAfee;i="6500,9779,10527"; a="291232618" X-IronPort-AV: E=Sophos;i="5.96,155,1665471600"; d="scan'208";a="291232618" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Nov 2022 19:13:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10527"; a="631897387" X-IronPort-AV: E=Sophos;i="5.96,155,1665471600"; d="scan'208";a="631897387" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga007.jf.intel.com with ESMTP; 10 Nov 2022 19:12:59 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Thu, 10 Nov 2022 19:12:59 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Thu, 10 Nov 2022 19:12:59 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.102) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Thu, 10 Nov 2022 19:12:47 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PX94GixSzj0fO/v+X0mK+qBqTMdQ7u3ZIahAlbafGMIl8vsalWYXMRHv0qO9bqDUFcZcC9PyX/1NK/oNUA5PzHJGgb9436pYOW515OBtW0nRbYCnVd60sf9z7s5AxA//2odPud4CC4Veoe9/ZUfZFA+CssbohHNYhoZyjj2EDsttTCnnLtwga9TVOvA0+wKD4gMhOKIWLTqAHAyVYKmuLZcsgsXntRW5aD4lFXcHy638xOID5nFT0IJZBx6EsrDE8/Rm1b3sxLipo/qseGhXa6Ih7SwhRirPD0akTL1iGJkaMAHrNzmfMeEnue+dEIy5xkuT62OA2ks3Nf/eZvx7wA== 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=zhLgwpF4evDhs/lmygorF3IudGI5Fc620Pq+rhnhYjI=; b=TUGr+9ada8DSlj0MKKtcwRsa6MgDA3ee+qxeN+Za+uYdmbVAY9wIpEIjK10qIhEEHFC35fJ4IH6+KSwrMPdMVP6O1+hJJLyJe0+GBhdfoSOCwcv3o1CsmbOwG36t746ovzdWISPseMqQv5wjUGuEtAHORVvCO1ARow2hmSCOsSOYBpwtAhva46ftx+WSrMiwRQQP7Do67LP7yEbg6Q5/UNFOH7hcznuRgk03XZ0jZsvRxchZpzP+hrM6yWTn4ULaZcDg7f3N1H04xnuYiio85gtusmoKm7/wAkgoWsn+TTWrIIX+iXpW9tGxf5GSnis/e9BqaNYw4xR6dW4WWp9tSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN7PR11MB7139.namprd11.prod.outlook.com (2603:10b6:806:2a2::14) by SJ0PR11MB5151.namprd11.prod.outlook.com (2603:10b6:a03:2ac::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12; Fri, 11 Nov 2022 03:12:46 +0000 Received: from SN7PR11MB7139.namprd11.prod.outlook.com ([fe80::10d6:ef9:4e14:bab9]) by SN7PR11MB7139.namprd11.prod.outlook.com ([fe80::10d6:ef9:4e14:bab9%4]) with mapi id 15.20.5791.026; Fri, 11 Nov 2022 03:12:46 +0000 From: "Ye, MingjinX" To: "Zhang, Qi Z" , "dev@dpdk.org" CC: "Yang, Qiming" , "stable@dpdk.org" , "Zhou, YidingX" , "Lu, Wenzhuo" , "Wu, Jingjing" , "Li, Xiaoyun" , Ferruh Yigit Subject: RE: [PATCH v2] net/ice: fix scalar Rx and Tx path segment Thread-Topic: [PATCH v2] net/ice: fix scalar Rx and Tx path segment Thread-Index: AQHY8/lud+8YXZTA6EaY0d8e3/g87a43+NoAgAEC/cA= Date: Fri, 11 Nov 2022 03:12:46 +0000 Message-ID: References: <20221103172040.388518-1-mingjinx.ye@intel.com> <20221109125609.724612-1-mingjinx.ye@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN7PR11MB7139:EE_|SJ0PR11MB5151:EE_ x-ms-office365-filtering-correlation-id: d54f9574-c6db-424c-6e9f-08dac3929b1e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: u21IO8Iv6jy9b+GWySQDMffzQ+koroq2VXy24cHUIRQ1tIyqYAsL1wZgwfL6JBFLAyLT32mbtnjPcEaGFsxZT5FdUA9y/1JLqFIoydwjIcZKYWaJ/SWMp2rYV3q/PfO4aoODt2IhjY7MayX2UWdy7W4B59PtRmFopbw0bAQQ7nXHXIs7T81s60g55q4X0OUtsAEKPYyiVOfAa0yG3kd0pG/Ts9RPuv5SPC6eqhBXpIjRuWyblhTrPBfNTQnjTQ4mMlQi8M+3ZXQOZWKq7z0jHboqeEOM4kbGyw/2xAsOlLVB/07qAf6VNw3dv6cwlr/kdv3Ug1dOoIMs5cl2spKE0rp0sJ7swxYnWcFFr2VhzwnuICs6zesnc3QzSjSI7igEhQYtDHrDYkrMx3MuRUpOOYAP6D3mYzaYG+cs3LSANCSAS3ZOvJu/jLDbBG72jHITJcyHZZK+F1V2Z606NAp6gMa+61S29K77VwrcoB8plQtxlOsbOdWjcWZVi5HGffwOornsBiUayz6Ut4ajiS05mtnA7xfkkyGClI8LwQkLtcXm2EyEKm8nHxkqxdGKJChdOvwXBnlyb8rX283CZc1DzOvS13q6nawia+nNxcyhGNt2Mwf8x4dtuprbtG0f1AO3lDBTXSKsmi3BRzBpE4HRd27tRqtPm7r1AKcP3lhMYac1Ry5xn7VhpCgsAaKSMTkHgHtZJnIJ2K/ijTu0v/M9XfGDgfi5ay8M14kn2uS20tBcKFD/vGmCHFFPQg1De667j15gNOD184KQV/d/0pXeXEn2WqLApy3Kvj60PECn6Bg= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR11MB7139.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(376002)(39860400002)(396003)(346002)(366004)(136003)(451199015)(76116006)(54906003)(110136005)(4326008)(107886003)(450100002)(66556008)(33656002)(478600001)(55016003)(64756008)(66946007)(66476007)(66446008)(83380400001)(71200400001)(8676002)(316002)(38070700005)(122000001)(82960400001)(86362001)(7696005)(38100700002)(53546011)(26005)(9686003)(6506007)(186003)(41300700001)(8936002)(5660300002)(52536014)(2906002)(461764006); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-2022-jp?B?OHNRREQ1MmJhejVhYnZEU2V4S1gvSzAwa1l6am82TmlWeTUrdURiNWN0?= =?iso-2022-jp?B?bks1Wk44M2sxSzZYTy9nc3U4WDZ1MElwWTZiTEZCUFJjVTlOVEJvSU9H?= =?iso-2022-jp?B?eGhNV1R6WDNGdTdkQ2VLblZpeFhwSUMwU1ZXdjY0cjdMVlAzeVFUU2FM?= =?iso-2022-jp?B?UXIzYmZ4eDhmdVhkTU50SjF2L1dDcnR1YUdCNExacVJlNXlHeE9GejVF?= =?iso-2022-jp?B?ckUxYjlwMk5HZ1pXRHM3NDBtOGp3M0xhVVErdndGcUE4b3psbThCbFhw?= =?iso-2022-jp?B?TFRTZlVIdGtTQnRRaFBYbHFWSEtNUE9SL0plSzMzSkZDWWFpeVVLNVg2?= =?iso-2022-jp?B?WnRMR1VCS01sUEduVnlKNjF4M0JhUE45eFFtVGFXK21IMGFQWEltNnpZ?= =?iso-2022-jp?B?QXc3a1FCZkFKb0pjY0VyZGIzZWYyTFU0OHZVWU9oTktIamFUUThGa2ly?= =?iso-2022-jp?B?SVhyWklHN3BrSERpU1JNU3h0K3huRUZIZkUxRjdTWnRXb0RUL05nUFRh?= =?iso-2022-jp?B?ZytPaGZWYVFSUGVKOTZTblNhNUFZS29DWUxnSklwa1JjT1NsdlkzUnF4?= =?iso-2022-jp?B?U2hETmdkbXFicU52V0Q2VWxuUkdyaXVQV015UWIrdmxJRzEyRDNLdkRH?= =?iso-2022-jp?B?UzQ3MnlZMDhXUGdwR1RtSGluNmJzbEUzMzdqcXZTd2tKYVJ3alo4KzN4?= =?iso-2022-jp?B?NkRRd0g3S05JRVNoTThmc2J1ZXJHVG8xdnpCa2V0SElvOWFBWTd0endN?= =?iso-2022-jp?B?blZCZHlZVVJ1RW1xS2VPa0UxeFJheWVLdTc2NTM0NzgrKzBhZnZJMjJ6?= =?iso-2022-jp?B?TDZ2MDBBcVM3b1RpK2xiVnlkM3YzWGR0VFdJdU1peDhSOEFvcVZjUTIz?= =?iso-2022-jp?B?WW1yUzBOV3o0Y3NGdlVOMFl1QUEzZjR0STdiS1FkM1Y4NFIwK2hRS0dN?= =?iso-2022-jp?B?N053Q1pDSm9SNDd5cTByWUo3eGU1Qmg2MGQxZjNyZE41UlgwUTN2UWFy?= =?iso-2022-jp?B?a1BvdXFFQ0VSSmpXa2l5MlRoNWkvd0JmSDVJSWh0RXJWdE85STZRMXVo?= =?iso-2022-jp?B?S29Gc1QxY3ltelJRYjcvWHNsdUwvQzZ2aVQ4bXhNQ0tVaVhib053dUtz?= =?iso-2022-jp?B?YkpDNVBnNHZWMHVwMG93ak9JNHVMUGZRYkpuK3VnODZCMlVRTlBjL0dy?= =?iso-2022-jp?B?NUN3elc3di9RakxTaU82c21jd0ovSmJ0SmpNNlgrNTdCMnVObmd4WFRW?= =?iso-2022-jp?B?bENUcWxPa2QyeHBtWU1kUWNTRTk1UU56MGZwSXMwSWYvUHNGTkt5dlgy?= =?iso-2022-jp?B?RWFrbitxTStsQ0R0Z1c3d0FBM2I3bDdybHoxdlFuOHZjNnUzQVV0K040?= =?iso-2022-jp?B?bTdORmZoUFNRY09SVlB4emJ6enYyb1h3UFpURzdUM1BlUDNIUVZ6MXQ0?= =?iso-2022-jp?B?UGp6NEtxK0s2czEzUHBzTTJTZkJIazJQNm9YcEMxNG9Ub1lGbzFLQW91?= =?iso-2022-jp?B?TDBHeUtNc0UwREptckU1MUdLR0N0N1JYTnRYNnorZmlaV3hKcFhZVmVV?= =?iso-2022-jp?B?RTlYZ2FqbEZRenhrd043YzNtMTA2VEtpSFNOK1hFVkpvaUhEbkhkdGxG?= =?iso-2022-jp?B?cVJTY2ZHN1kxK0ViUTdhR1ZURGg3b3k5N2R5STdyVUsrOWg5QmNlandz?= =?iso-2022-jp?B?SUJwWnhoSXROdDhEZi8vKzFOZEVLTHVxL200eUorYkdQRWxVZ1htWFpO?= =?iso-2022-jp?B?bW8vYmtXTENFaVZpS2NoQ3J2Y3hwOHlzWGNjNkcxeUl2VVpYMHNmL1VM?= =?iso-2022-jp?B?dlVjQ1Frc1oyTUJ5VTRVK1ZhejIzWUt3ZHZtOHM5ZnUzakM1SnBFZHdI?= =?iso-2022-jp?B?eUZlcnhkTnYycnFHVHZVY1VGTnI5UUQ5UEZwRFEzMWpPTmU0TFNlb1BQ?= =?iso-2022-jp?B?QzVHTFRXSXBTQ1ZTKzNmWnNpc2ZDbWNERWswMjNabFRELy85aEtUNUFl?= =?iso-2022-jp?B?VEtaM1ptRy9MdHdnR3d2OWt4QWJnRlMyb2ZrTW9GTFNzeVpyQlB5VWt1?= =?iso-2022-jp?B?azJiY3V1Q3gwdFMzMWdjd3JESDBlV1c4S3pQa0w4eEhpQWZWTkdMUDZ0?= =?iso-2022-jp?B?bWtZY3VhSHU5bUEreXZJNzJ0dGxWR1FFbXd6SW5LTGNncGcyajltanpJ?= =?iso-2022-jp?B?VmtGSkJlbkhOaEw3Z1lEbE44cjlsa0h1cDNlMXloa2ZxVHM2eUczNk1p?= =?iso-2022-jp?B?eHhNckxodWwvY2gyQ2JQd2xRZXJ0UWszUlp2Y3ZEcGQrOUp0Q3ZFRHdD?= =?iso-2022-jp?B?aERGSQ==?= Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7139.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d54f9574-c6db-424c-6e9f-08dac3929b1e X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Nov 2022 03:12:46.1137 (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: KIGWYdXfp6Q5EuaE/9E/XKC1UNI7CNjVpmJzMfxmbTmzup60b3gTzd3zEbgMrJsyE/m/cj4x2pQJJRBWhg8ZcQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB5151 X-OriginatorOrg: intel.com X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org > -----Original Message----- > From: Zhang, Qi Z > Sent: 2022=1B$BG/=1B(B11=1B$B7n=1B(B10=1B$BF|=1B(B 18:37 > To: Ye, MingjinX ; dev@dpdk.org > Cc: Yang, Qiming ; stable@dpdk.org; Zhou, YidingX > ; Lu, Wenzhuo ; Wu, > Jingjing ; Li, Xiaoyun ; Fer= ruh > Yigit > Subject: RE: [PATCH v2] net/ice: fix scalar Rx and Tx path segment >=20 >=20 >=20 > > -----Original Message----- > > From: Ye, MingjinX > > Sent: Wednesday, November 9, 2022 8:56 PM > > To: dev@dpdk.org > > Cc: Yang, Qiming ; stable@dpdk.org; Zhou, > > YidingX ; Ye, MingjinX > > ; Zhang, Qi Z ; Lu, > > Wenzhuo ; Wu, Jingjing ; > > Li, Xiaoyun ; Ferruh Yigit > > > > Subject: [PATCH v2] net/ice: fix scalar Rx and Tx path segment > > > > CRC is stripped by the hardware in the scattered Rx path. If the last > > buffer packet length is '0', the scalar Tx path would send empty > > buffer that causes the Tx queue to overflow. >=20 > Please separate this patch into two, one for Rx and one for Tx, they are > independent. >=20 > For the Tx implementation, I think we can move them into tx_prepare where > is place to check Tx violation. Thanks for your suggestion, I will provide 2 new patches according to the n= ew scheme and promote it to the community. >=20 > > > > This patch adds a judgment for the last buffer length to fix this > > issue, so that it would free the mbuf associated to the last one if the= last > buffer is empty. > > > > Fixes: 6eac0b7fde95 ("net/ice: support advance Rx/Tx") > > Cc: stable@dpdk.org > > > > Signed-off-by: Mingjin Ye > > > > v2: > > * Fix log level in ice_rxtx.c source file. > > --- > > drivers/net/ice/ice_rxtx.c | 53 > > ++++++++++++++++++++++++++++++++++++-- > > 1 file changed, 51 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c > > index 0a2b0376ac..b181f66aad 100644 > > --- a/drivers/net/ice/ice_rxtx.c > > +++ b/drivers/net/ice/ice_rxtx.c > > @@ -2111,6 +2111,10 @@ ice_recv_scattered_pkts(void *rx_queue, > > } else > > rxm->data_len =3D (uint16_t)(rx_packet_len - > > > > RTE_ETHER_CRC_LEN); > > + } else if (rx_packet_len =3D=3D 0) { > > + rte_pktmbuf_free_seg(rxm); > > + first_seg->nb_segs--; > > + last_seg->next =3D NULL; > > } > > > > first_seg->port =3D rxq->port_id; > > @@ -2903,6 +2907,35 @@ ice_calc_pkt_desc(struct rte_mbuf *tx_pkt) > > return count; > > } > > > > +/*Check the number of valid mbufs and free the invalid mbufs*/ static > > +inline uint16_t ice_check_mbuf(struct rte_mbuf *tx_pkt) { > > + struct rte_mbuf *txd =3D tx_pkt; > > + struct rte_mbuf *txd_removal =3D NULL; > > + struct rte_mbuf *txd_pre =3D NULL; > > + uint16_t count =3D 0; > > + uint16_t removal =3D 0; > > + > > + while (txd !=3D NULL) { > > + if (removal =3D=3D 1 || txd->data_len =3D=3D 0) { > > + txd_removal =3D txd; > > + txd =3D txd->next; > > + if (removal =3D=3D 0) { > > + removal =3D 1; > > + txd_pre->next =3D NULL; > > + } > > + rte_pktmbuf_free_seg(txd_removal); > > + } else { > > + ++count; > > + txd_pre =3D txd; > > + txd =3D txd->next; > > + } > > + } > > + > > + return count; > > +} > > + > > uint16_t > > ice_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t > > nb_pkts) { @@ -2960,11 +2993,27 @@ ice_xmit_pkts(void *tx_queue, > > struct rte_mbuf **tx_pkts, uint16_t nb_pkts) > > * the mbuf data size exceeds max data size that hw allows > > * per tx desc. > > */ > > - if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) > > + if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) { > > nb_used =3D (uint16_t)(ice_calc_pkt_desc(tx_pkt) + > > nb_ctx); > > - else > > + } else { > > + nb_used =3D ice_check_mbuf(tx_pkt); > > + if (nb_used =3D=3D 0) { > > + PMD_TX_LOG(ERR, > > + "Check packets is empty " > > + "(port=3D%d queue=3D%d)\n", > > + txq->port_id, txq->queue_id); > > + continue; > > + } else if (nb_used < tx_pkt->nb_segs) { > > + PMD_TX_LOG(DEBUG, > > + "Check packets valid num =3D" > > + "%4u total num =3D %4u (port=3D%d > > queue=3D%d)\n", > > + nb_used, tx_pkt->nb_segs, txq->port_id, > txq- > > >queue_id); > > + tx_pkt->nb_segs =3D nb_used; > > + } > > nb_used =3D (uint16_t)(tx_pkt->nb_segs + nb_ctx); > > + } > > + > > tx_last =3D (uint16_t)(tx_id + nb_used - 1); > > > > /* Circular ring */ > > -- > > 2.34.1