From patchwork Mon Feb 13 14:36:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Bragg X-Patchwork-Id: 9569875 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8097E60442 for ; Mon, 13 Feb 2017 14:37:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63CDC24B44 for ; Mon, 13 Feb 2017 14:37:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 58B77267EC; Mon, 13 Feb 2017 14:37:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 18C2424B44 for ; Mon, 13 Feb 2017 14:37:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D0D3B6E409; Mon, 13 Feb 2017 14:37:10 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wj0-x244.google.com (mail-wj0-x244.google.com [IPv6:2a00:1450:400c:c01::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9CEB36E409 for ; Mon, 13 Feb 2017 14:37:07 +0000 (UTC) Received: by mail-wj0-x244.google.com with SMTP id ip10so236988wjb.1 for ; Mon, 13 Feb 2017 06:37:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=1tW/1QNoFgH/aOnL5pIsicM16nC/UBjgE+mVr+2Ex1Y=; b=UxvwU3te4BorEtNTnFP9dwjTSJjqIlXV85Ajc9WHcW9hTeYV7W+Q19NZj7HdjiJU+x 7dLLY5kYVPXLnDdp7Jr2E7nMcxGmoMDoPy4gY+aHrl5V41y+A2hSiOeP2/ySPwzg4p8+ GL0DBkQdrwcCDsl4Hd6hC9TgPrKM2ADFLJ1fvOqiq+BGKBGbPIuiVaMdQDOPzwUx63m9 utyEt1tik0a+HER0YHywolkwZjAsLdg61Bn4HuDia45nGCX3tBuoHMSmBFKjbvTn3hWa gZvdDT+GuvroFwLJgjRAlTDEloOYK368+AI/6dGGc80ZRlFEVn8FV/gR+AeppIcvFaih /oNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=1tW/1QNoFgH/aOnL5pIsicM16nC/UBjgE+mVr+2Ex1Y=; b=C2mbkDDBqH95307zdnUJBgxQm6T714Nfj+AfERXkWeQOYvaSju/Gi2y1mNi5voFWzh HPHGmblE0id0X9++3S4XVVxG/goflsXEm3IwjLPYRUAw9O/yVVNexZ5uKYBFZST8K+Mi pziFd8JXLPEh4MNInHgMyyYEbBG8KS6PMvBPUSFRkTjAIN5dgP2ue2zOKnrlUpciSeg3 U0xe5OLSubvljo47aPLLwydvJSCSjGxyMUA/HJqstKZLMxzjq1u6OuCAatbQtkXTy/0S IlFbdNiXgXJ2AbdzHW0PrbOhpY9X3N5W8qoWDHqnlND4nnn/XME6KoiZGY+QRUQqGmKw 4mHQ== X-Gm-Message-State: AMke39l7JWW/rH3TQw2KIKTge3m9lwH55N2AqO/rfhdWBmWiTrVvybd8cDcufhiGe2vb5w== X-Received: by 10.28.209.7 with SMTP id i7mr36912427wmg.115.1486996626299; Mon, 13 Feb 2017 06:37:06 -0800 (PST) Received: from sixbynine.org (host-78-151-19-238.as13285.net. [78.151.19.238]) by smtp.gmail.com with ESMTPSA id r19sm14076985wrr.44.2017.02.13.06.37.05 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Feb 2017 06:37:05 -0800 (PST) From: Robert Bragg To: intel-gfx@lists.freedesktop.org Date: Mon, 13 Feb 2017 14:36:48 +0000 Message-Id: <20170213143651.4737-3-robert@sixbynine.org> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170213143651.4737-1-robert@sixbynine.org> References: <20170213143651.4737-1-robert@sixbynine.org> Subject: [Intel-gfx] [PATCH v2 2/5] drm/i915/perf: avoid poll, read, EAGAIN busy loops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP If the function for checking whether there is OA buffer data available (during a poll or blocking read) has false positives then we want to avoid a situation where the subsequent read() returns EAGAIN (after a more accurate check) followed by a poll() immediately reporting the same false positive POLLIN event and effectively maintaining a busy loop until there really is data. This makes sure that we clear the .pollin event status whenever we return EAGAIN to userspace which will throttle subsequent POLLIN events and repeated attempts to read to the 5ms intervals of the hrtimer callback we have. Signed-off-by: Robert Bragg Reviewed-by: Matthew Auld --- drivers/gpu/drm/i915/i915_perf.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c index b0eec762b9b4..4bb7333dac45 100644 --- a/drivers/gpu/drm/i915/i915_perf.c +++ b/drivers/gpu/drm/i915/i915_perf.c @@ -1352,7 +1352,15 @@ static ssize_t i915_perf_read(struct file *file, mutex_unlock(&dev_priv->perf.lock); } - if (ret >= 0) { + /* We allow the poll checking to sometimes report false positive POLLIN + * events where we might actually report EAGAIN on read() if there's + * not really any data available. In this situation though we don't + * want to enter a busy loop between poll() reporting a POLLIN event + * and read() returning -EAGAIN. Clearing the oa.pollin state here + * effectively ensures we back off until the next hrtimer callback + * before reporting another POLLIN event. + */ + if (ret >= 0 || ret == -EAGAIN) { /* Maybe make ->pollin per-stream state if we support multiple * concurrent streams in the future. */