Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754571AbbKWUBt (ORCPT ); Mon, 23 Nov 2015 15:01:49 -0500 Received: from quartz.orcorp.ca ([184.70.90.242]:58492 "EHLO quartz.orcorp.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752616AbbKWUBq (ORCPT ); Mon, 23 Nov 2015 15:01:46 -0500 Date: Mon, 23 Nov 2015 13:01:36 -0700 From: Jason Gunthorpe To: Christoph Hellwig Cc: linux-rdma@vger.kernel.org, sagig@dev.mellanox.co.il, bart.vanassche@sandisk.com, axboe@fb.com, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/9] IB: add a proper completion queue abstraction Message-ID: <20151123200136.GA5640@obsidianresearch.com> References: <1447422410-20891-1-git-send-email-hch@lst.de> <1447422410-20891-3-git-send-email-hch@lst.de> <20151113182513.GB21808@obsidianresearch.com> <20151114070849.GD27738@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151114070849.GD27738@lst.de> User-Agent: Mutt/1.5.23 (2014-03-12) X-Broken-Reverse-DNS: no host name found for IP address 10.0.0.160 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1694 Lines: 41 On Sat, Nov 14, 2015 at 08:08:49AM +0100, Christoph Hellwig wrote: > On Fri, Nov 13, 2015 at 11:25:13AM -0700, Jason Gunthorpe wrote: > > For instance, like this, not fulling draining the cq and then doing: > > > > > + completed = __ib_process_cq(cq, budget); > > > + if (completed < budget) { > > > + irq_poll_complete(&cq->iop); > > > + if (ib_req_notify_cq(cq, IB_POLL_FLAGS) > 0) { > > > > Doesn't seem entirely right? There is no point in calling > > ib_req_notify_cq if the code knows there is still stuff in the CQ and > > has already, independently, arranged for ib_poll_hander to be > > guarenteed called. > > The code only calls ib_req_notify_cq if it knowns we finished earlier than > our budget. Okay, having now read the whole thing, I think I see the flow now. I don't see any holes in the above, other than it is doing a bit more work than it needs in some edges cases because it doesn't know if the CQ is actually empty or not. > > > + completed = __ib_process_cq(cq, IB_POLL_BUDGET_WORKQUEUE); > > > + if (completed >= IB_POLL_BUDGET_WORKQUEUE || > > > + ib_req_notify_cq(cq, IB_POLL_FLAGS) > 0) > > > + queue_work(ib_comp_wq, &cq->work); > > > > Same comment here.. > > Same here - we only requeue the work item if either we processed all of > our budget, or ib_req_notify_cq with IB_CQ_REPORT_MISSED_EVENTS told > us that we need to poll again. I find the if construction hard to read, but yes, it looks OK. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/