Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752376AbdLEQht (ORCPT ); Tue, 5 Dec 2017 11:37:49 -0500 Received: from shards.monkeyblade.net ([184.105.139.130]:36734 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751288AbdLEQhq (ORCPT ); Tue, 5 Dec 2017 11:37:46 -0500 Date: Tue, 05 Dec 2017 11:37:44 -0500 (EST) Message-Id: <20171205.113744.2040678170803031734.davem@davemloft.net> To: salil.mehta@huawei.com Cc: yisen.zhuang@huawei.com, lipeng321@huawei.com, mehta.salil.lnk@gmail.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linuxarm@huawei.com Subject: Re: [PATCH net-next 1/8] net: hns3: Add HNS3 VF IMP(Integrated Management Proc) cmd interface From: David Miller In-Reply-To: <20171203123307.19820-2-salil.mehta@huawei.com> References: <20171203123307.19820-1-salil.mehta@huawei.com> <20171203123307.19820-2-salil.mehta@huawei.com> X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Tue, 05 Dec 2017 08:37:46 -0800 (PST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1340 Lines: 44 From: Salil Mehta Date: Sun, 3 Dec 2017 12:33:00 +0000 > +static int hclgevf_ring_space(struct hclgevf_cmq_ring *ring) > +{ > + int ntu = ring->next_to_use; > + int ntc = ring->next_to_clean; > + int used = (ntu - ntc + ring->desc_num) % ring->desc_num; Order local variables from longest to shortest line, please. Audit your entire submission for this issue. > +static int hclgevf_cmd_csq_done(struct hclgevf_hw *hw) > +{ > + u32 head = hclgevf_read_dev(hw, HCLGEVF_NIC_CSQ_HEAD_REG); > + return head == hw->cmq.csq.next_to_use; > +} Please return bool from this function. > +void hclgevf_cmd_setup_basic_desc(struct hclgevf_desc *desc, > + enum hclgevf_opcode_type opcode, bool is_read) > +{ > + memset((void *)desc, 0, sizeof(struct hclgevf_desc)); You never need casts like this, when the functions argument is void any pointer can be passed in as-is. > + > + /* If the command is sync, wait for the firmware to write back, > + * if multi descriptors to be sent, use the first one to check > + */ > + if (HCLGEVF_SEND_SYNC(le16_to_cpu(desc->flag))) { > + do { > + if (hclgevf_cmd_csq_done(hw)) > + break; > + udelay(1); > + timeout++; > + } while (timeout < hw->cmq.tx_timeout); > + } This is potentially a long timeout with a spinlock held. Consider using sleeping and completions.