Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp215293pxb; Mon, 7 Feb 2022 09:34:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJzNRto/M2WXiKxq7kHtARacDUDXxhkRL43YO0Dv9yN3F0yZMKU7lQwBLDyTo4Por/DknSIp X-Received: by 2002:a17:90a:6881:: with SMTP id a1mr7441328pjd.123.1644255288747; Mon, 07 Feb 2022 09:34:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644255288; cv=none; d=google.com; s=arc-20160816; b=yBGXVZgKXOw6f1mzkerz4rUG8OPpns3CElj3sIbZGf6y6l2PLL/cg0tlGON3hgiNYh GfzmLEsj4qKStCRt8oECDOnFmJ8o2UEKeNSoENBkSwYkKGPwpPYqee2gEV+xZsr+I+RF l6r6n0rp+kk4gvrQ0vr4Uz4lr775TXSPJ0r4UPJf80h2+bda1gLTXhWymcA79eaa7Anw qaHZAeYNPEclcctO+3gnjYmwMqPGmuHBrT2rhq1zThYaUy1qIG4WZqU+Bt0Ajr9bzB4b 8WSsEvkKQrtSaLf/CFBkvTa6gPTtzIuZ/+jgzdkbCNBYIKtsJLKmf618xSjIiFXJhS4Y heVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:message-id:in-reply-to :subject:cc:to:from:date:dkim-signature; bh=Fb0FnX3JU+hAntUjTm4OQZjB8Gk5rwJlYMkZMSqjllg=; b=Y2LkAyWfRiC8cEfHifgV98/MI2O6Mu0iJJzfqqOwoE2xlL4QSzOsfvWIW5Gmploatx Xp+m0r1FttsudqHamrH4NZrwJSIgC1xrqCr9av/O/o0Xt+qj2n15HvEqEbezkF+1dDsg 2w5S+5IvzmVMIX1P3QcJBxjAkoATpSm5+wXfk8jaTUIHHjluesw52ABznvxaRBCdib5W o9XI/H1jwNvGK7mWwYK+QiXZ7ixXFGNPzh6Qt1QXtCTSHdqyOwXLqUQWPdGptv8nwl41 5sr6gVwYApTTX1AWqptBUMuTltMw5/zxTTf6omi8iPUhKvXlYc06vTTROblrDH29InYC sCcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=EkyY9IP+; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s16si9104068plk.252.2022.02.07.09.34.31; Mon, 07 Feb 2022 09:34:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=EkyY9IP+; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351133AbiBCOYF (ORCPT + 72 others); Thu, 3 Feb 2022 09:24:05 -0500 Received: from mga09.intel.com ([134.134.136.24]:31771 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240146AbiBCOYD (ORCPT ); Thu, 3 Feb 2022 09:24:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643898243; x=1675434243; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=mZITRt8XHZzpLCxK3Nbh5HG0CKWyna47vd4e3NgzEP4=; b=EkyY9IP+GMf4QF0dJ+tXpGmNLH5rWSMX2otQ+r48aKz1RV+tEVqu9p4L AaQayXDvho8fnoa7qe7wWG17uhELQPE+2CitOgGE5QuWTCXSgcM5vGRSz at3UEPRmjsru/EEejthkQQuPYW/qK7g24csSaOukjEsdcq3m5lGEgjTV3 kduIKEId9fUB+NxWqyZbIXD9MlC6ppG64sPyJ/v9AoWXgN96NRq6jO49f 4714O6dEEqKbIRSjTywz8CMJp1ynwAaWwxUKUkuivCIoO7fcc/omBdO/Z 9KLYnkR2bBSfk4phW+/GY56MdzPDlqBRH13M59nU0jUMSQpDarAcFN6wm Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10246"; a="247917409" X-IronPort-AV: E=Sophos;i="5.88,340,1635231600"; d="scan'208";a="247917409" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2022 06:24:03 -0800 X-IronPort-AV: E=Sophos;i="5.88,340,1635231600"; d="scan'208";a="699326249" Received: from unknown (HELO ijarvine-MOBL2.mshome.net) ([10.237.66.34]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2022 06:23:55 -0800 Date: Thu, 3 Feb 2022 16:23:49 +0200 (EET) From: =?ISO-8859-15?Q?Ilpo_J=E4rvinen?= To: Ricardo Martinez cc: Netdev , linux-wireless@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, johannes@sipsolutions.net, ryazanov.s.a@gmail.com, loic.poulain@linaro.org, m.chetan.kumar@intel.com, chandrashekar.devegowda@intel.com, linuxwwan@intel.com, chiranjeevi.rapolu@linux.intel.com, haijun.liu@mediatek.com, amir.hanania@intel.com, Andy Shevchenko , dinesh.sharma@intel.com, eliot.lee@intel.com, moises.veleta@intel.com, pierre-louis.bossart@intel.com, muralidharan.sethuraman@intel.com, Soumya.Prakash.Mishra@intel.com, sreehari.kancharla@intel.com Subject: Re: [PATCH net-next v4 08/13] net: wwan: t7xx: Add data path interface In-Reply-To: <20220114010627.21104-9-ricardo.martinez@linux.intel.com> Message-ID: <1fd3d71c-d10-9feb-64c0-206a308b51d5@linux.intel.com> References: <20220114010627.21104-1-ricardo.martinez@linux.intel.com> <20220114010627.21104-9-ricardo.martinez@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org On Thu, 13 Jan 2022, Ricardo Martinez wrote: > From: Haijun Liu > > Data Path Modem AP Interface (DPMAIF) HIF layer provides methods > for initialization, ISR, control and event handling of TX/RX flows. > > DPMAIF TX > Exposes the `dmpaif_tx_send_skb` function which can be used by the > network device to transmit packets. > The uplink data management uses a Descriptor Ring Buffer (DRB). > First DRB entry is a message type that will be followed by 1 or more > normal DRB entries. Message type DRB will hold the skb information > and each normal DRB entry holds a pointer to the skb payload. > > DPMAIF RX > The downlink buffer management uses Buffer Address Table (BAT) and > Packet Information Table (PIT) rings. > The BAT ring holds the address of skb data buffer for the HW to use, > while the PIT contains metadata about a whole network packet including > a reference to the BAT entry holding the data buffer address. > The driver reads the PIT and BAT entries written by the modem, when > reaching a threshold, the driver will reload the PIT and BAT rings. > > Signed-off-by: Haijun Liu > Signed-off-by: Chandrashekar Devegowda > Co-developed-by: Ricardo Martinez > Signed-off-by: Ricardo Martinez > --- > + unsigned short last_ch_id; Values is never used. > + if (old_rl_idx > old_wr_idx && new_wr_idx >= old_rl_idx) { > + dev_err(dpmaif_ctrl->dev, "RX BAT flow check fail\n"); > + return -EINVAL; > + } > + > + if (new_wr_idx >= bat_req->bat_size_cnt) { > + new_wr_idx -= bat_req->bat_size_cnt; > + if (new_wr_idx >= old_rl_idx) { > + dev_err(dpmaif_ctrl->dev, "RX BAT flow check fail\n"); > + return -EINVAL; > + } Make a label for the identical block and goto there. > +static void t7xx_unmap_bat_skb(struct device *dev, struct dpmaif_bat_skb *bat_skb_base, > + unsigned int index) > +{ > + struct dpmaif_bat_skb *bat_skb = bat_skb_base + index; > + > + if (bat_skb->skb) { > + dma_unmap_single(dev, bat_skb->data_bus_addr, bat_skb->data_len, DMA_FROM_DEVICE); > + kfree_skb(bat_skb->skb); For consistency, dev_kfree_skb? > + * @initial: Indicates if the ring is being populated for the first time. > + * > + * Allocate skb and store the start address of the data buffer into the BAT ring. > + * If this is not the initial call, notify the HW about the new entries. > + * > + * Return: > + * * 0 - Success. > + * * -ERROR - Error code from failure sub-initializations. > + */ > +int t7xx_dpmaif_rx_buf_alloc(struct dpmaif_ctrl *dpmaif_ctrl, > + const struct dpmaif_bat_request *bat_req, > + const unsigned char q_num, const unsigned int buf_cnt, > + const bool initial) vs its prototype: +int t7xx_dpmaif_rx_buf_alloc(struct dpmaif_ctrl *dpmaif_ctrl, + const struct dpmaif_bat_request *bat_req, const unsigned char q_num, + const unsigned int buf_cnt, const bool first_time); > +int t7xx_dpmaif_rx_frag_alloc(struct dpmaif_ctrl *dpmaif_ctrl, struct dpmaif_bat_request *bat_req, > + const unsigned int buf_cnt, const bool initial) > +{ > + struct dpmaif_bat_page *bat_skb = bat_req->bat_skb; > + unsigned short cur_bat_idx = bat_req->bat_wr_idx; > + unsigned int buf_space; > + int ret, i; ... > + ret = i < buf_cnt ? -ENOMEM : 0; > + if (ret && initial) { int ret = 0, i; ... if (i < buf_cnt) { ret = -ENOMEM; if (initial) { ... } } > + if (!tx_drb_available || txq->tx_submit_skb_cnt >= txq->tx_list_max_len) { > + cb = dpmaif_ctrl->callbacks; > + cb->state_notify(dpmaif_ctrl->t7xx_dev, DMPAIF_TXQ_STATE_FULL, txqt); > + return -EBUSY; > + } > + > + skb->cb[TX_CB_QTYPE] = txqt; > + skb->cb[TX_CB_DRB_CNT] = send_drb_cnt; > + > + spin_lock_irqsave(&txq->tx_skb_lock, flags); > + list_add_tail(&skb->list, &txq->tx_skb_queue); > + txq->tx_submit_skb_cnt++; > + spin_unlock_irqrestore(&txq->tx_skb_lock, flags); Perhaps the critical section needs to start earlier to enforce that tx_list_max_len check? (I'm yet to read half of this patch...) -- i.