Message ID | 20240222190441.2610930-11-alan.brady@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | idpf: refactor virtchnl messages | expand |
> -----Original Message----- > From: Alan Brady <alan.brady@intel.com> > Sent: Thursday, February 22, 2024 11:05 AM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; Brady, Alan <alan.brady@intel.com>; Lobakin, > Aleksander <aleksander.lobakin@intel.com> > Subject: [PATCH v6 10/11 iwl-next] idpf: fix minor controlq issues > > While we're here improving virtchnl we can include two minor fixes for > the lower level ctrlq flow. > > This adds a memory barrier to idpf_post_rx_buffs before we update tail > on the controlq. We should make sure our writes have had a chance to > finish before we tell HW it can touch them. > > This also removes some defensive programming in idpf_ctrlq_recv. The > caller should not be using a num_q_msg value of zero or more than the > ring size and it's their responsibility to call functions sanely. > > Tested-by: Alexander Lobakin <aleksander.lobakin@intel.com> > Signed-off-by: Alan Brady <alan.brady@intel.com> > --- > drivers/net/ethernet/intel/idpf/idpf_controlq.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/ethernet/intel/idpf/idpf_controlq.c > b/drivers/net/ethernet/intel/idpf/idpf_controlq.c Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
diff --git a/drivers/net/ethernet/intel/idpf/idpf_controlq.c b/drivers/net/ethernet/intel/idpf/idpf_controlq.c index c7f43d2fcd13..4849590a5591 100644 --- a/drivers/net/ethernet/intel/idpf/idpf_controlq.c +++ b/drivers/net/ethernet/intel/idpf/idpf_controlq.c @@ -516,6 +516,8 @@ int idpf_ctlq_post_rx_buffs(struct idpf_hw *hw, struct idpf_ctlq_info *cq, /* Wrap to end of end ring since current ntp is 0 */ cq->next_to_post = cq->ring_size - 1; + dma_wmb(); + wr32(hw, cq->reg.tail, cq->next_to_post); } @@ -546,11 +548,6 @@ int idpf_ctlq_recv(struct idpf_ctlq_info *cq, u16 *num_q_msg, int err = 0; u16 i; - if (*num_q_msg == 0) - return 0; - else if (*num_q_msg > cq->ring_size) - return -EBADR; - /* take the lock before we start messing with the ring */ mutex_lock(&cq->cq_lock);