Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753992AbcJZIsq (ORCPT ); Wed, 26 Oct 2016 04:48:46 -0400 Received: from mout.kundenserver.de ([212.227.17.10]:62965 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751790AbcJZIsn (ORCPT ); Wed, 26 Oct 2016 04:48:43 -0400 From: Arnd Bergmann To: Binoy Jayan Cc: Doug Ledford , Sean Hefty , Hal Rosenstock , linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 8/9] IB/mlx5: Add helper mlx5_ib_post_send_wait Date: Wed, 26 Oct 2016 10:48:26 +0200 Message-ID: <12933685.Se3eQHi9An@wuerfel> User-Agent: KMail/5.1.3 (Linux/4.4.0-34-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: <1477468874-16328-9-git-send-email-binoy.jayan@linaro.org> References: <1477468874-16328-1-git-send-email-binoy.jayan@linaro.org> <1477468874-16328-9-git-send-email-binoy.jayan@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:a3+Nsf0V329X7/amQVr6cTTCOqeSk74qATObrChvoDFwvECZxuZ XyrZOv6BpOQWpHetUyewebgOlYkDcGSagSuGQfEJ/Sv5ZhjUWphID0G3WffUOMK0WaELTWp Mqs2bz8SFe4W93hb4aOK4tuGBeqOkornUUopgrhdCM7+r0WOKZDIHh9/mHWs206mDZesn5T 3xZBLONppFfpMAGCd2vKg== X-UI-Out-Filterresults: notjunk:1;V01:K0:fc8OJIykc2c=:YE7j9Mw9dho+F0qlqpeEGy fdFWmq1QJMgvxdlL6YzG3Oma/Iagg36xGzvjn8+m19xQz16cZPfi5/HQkN1ps73UkJUUy6kfu yWEM3GWRbZi2KMJX0qArWRTyxgGMcmP7aGPOgpO4xq9t11L7aaQJ2UTkjN0Ky3p/zxEHn3/WI puziKVgYvwLsk+V5U9XVnC4nVKUd1bxfo22oTfGxT6NT4xcmjX7E8GNp4HbvPNQoqGYUCNMTO oz4ThN/Pv1NZLab7z9UThZ8UYK0orM65nckF0ROesl5GOWJIhUjsZPTu1ZMXXKDrgGikYxAHe /CPCFNCEhGyU5HFblAK6P5OMiNeb7D4QaNtZ/qbgO4klMO5jLjxdMBS503nG5fvmYY4gk8RTt 86bWnTQH6dFyJnLqYZcxh1sp5d3jlQO5QuGQ3ElZNg5OwMXpCSYCnRpdw4obHM4cSEtmT8JMF /GfwiqyBzqYa9iSLnEu8sQ1+H11A/Ck6ZJOnQu+vj1Vq7BvzWSn5Tddg+VkYCupO7HEa5/uM9 zs+1+kFJMq52+pKlmoX4gmi3onWNLtIk4ocWxvJ2q4YA+UcAg6RoA9jVwbTH3FgLS/fdnZdgu oYMyP/j5WBsRoyY51HkY6Fys6JsaZbySXraDcUDhdY0t5D8ieHj5BQa+rDJxRhOQ0pEZTWQmp U6VzGm3P381713hnZv/6Vxae/Jjs+E9xfeDN6VNWEcbnaJRcvsHTU9PTWn2ZotZ0v7G90AAIF pqjcOQ5XJ4iN3GGX Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1899 Lines: 53 On Wednesday, October 26, 2016 1:31:13 PM CEST Binoy Jayan wrote: > +static inline int mlx5_ib_post_send_wait(struct mlx5_ib_dev *dev, > + struct mlx5_umr_wr *umrwr) > +{ > + struct umr_common *umrc = &dev->umrc; > + struct ib_send_wr *bad; > + int err; > + struct mlx5_ib_umr_context umr_context; > + > + mlx5_ib_init_umr_context(&umr_context); > + umrwr->wr.wr_cqe = &umr_context.cqe; > + > + down(&umrc->sem); > + err = ib_post_send(umrc->qp, &umrwr->wr, &bad); > + if (err) { > + mlx5_ib_warn(dev, "UMR post send failed, err %d\n", err); > + } else { > + wait_for_completion(&umr_context.done); > + if (umr_context.status != IB_WC_SUCCESS) { > + mlx5_ib_warn(dev, "reg umr failed (%u)\n", > + umr_context.status); > + err = -EFAULT; > + } > + } > + up(&umrc->sem); > + return err; > +} > Looks nice! Now that this has become the only use of the semaphore (and the last one in infiniband I guess), I wonder if we can agree on a way to get rid of that one too. How about /* limit number of concurrent ib_post_send() on qp */ wait_event(&umrc->wq, atomic_add_unless(&umrc->users, 1, MAX_UMR_WR); ... atomic_dec(&umrc->users); wake_up(&umrc->wq); That would be a fairly simple conversion and document better what we actually do here: the down() looks like a simple mutex, which it isn't. In terms of efficiency, the wait_event() is actually better here for the common case that the semaphore is not contented as it only needs a single atomic operation and a branch instead of an external function call and a spinlock in down(). However, the wake_up() is slightly better than atomic_dec()+up() as it avoids the additional atomic. Arnd