From patchwork Wed Apr 12 15:55:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Bragg X-Patchwork-Id: 9677671 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 8511D60383 for ; Wed, 12 Apr 2017 15:56:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 783E22861B for ; Wed, 12 Apr 2017 15:56:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D2BE2862B; Wed, 12 Apr 2017 15:56:15 +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 2E3852861B for ; Wed, 12 Apr 2017 15:56:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5D7BD89154; Wed, 12 Apr 2017 15:56:14 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id BBE066E758 for ; Wed, 12 Apr 2017 15:56:12 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id d79so7332709wmi.2 for ; Wed, 12 Apr 2017 08:56:12 -0700 (PDT) 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=f8rTefPxEwrFtPI8ktsY1WFemrxL2qkMuDQIo3MOSpU=; b=lSMhtP0+ojI5M3PJ7dFD2yWL7SOuzfhlVrkAEAuaiU9OrbkwjZrJF4AmOkEvKczTLz txJMYjkWHrEFRA9jeMa/pApN37ugXv+tzUU8Yn8gttQKAq8eT56yRaclyXMveatK8zZ6 lI5PbwWSU8NYbYSN4CZsggoWjXPwqSo7f7D6+avOeSCLggjqCR5+Ca6PgVGDISHuzKUv fxoEsTHyGthWt/C6qv1bCIB4z/3UHrhbQYdgMht62nWAu3pbzE5x9k1Jjvb+syfuYzA2 UrZiSvvqQW8zxjl0Bnslcy5Iw/K1qFKV5xm21L/6w5tILRfRGib3qi/4ieONJJ7uASOr A5kA== 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=f8rTefPxEwrFtPI8ktsY1WFemrxL2qkMuDQIo3MOSpU=; b=GRQnxP0YNi5RkPipRB6zBv7HrUVOpW0UgCtf4eegTRFlJf+HKVae8leF8D+hml9Swe uz/YwaW+9va1bbJIH1whjbThU/RaSAcDJJkBqPOEmCnZ1/T5wS+aGeuIYgjhJ1tCAZF9 2DnCCKIBBAhAygrIWdlHUVcgOmKiQbBvBdhpyZl5ZKA3wSFAXnHkSsYQE2xL4XDXs2nU 11tbhAdPmYOPdhwbNIpTMcdALjYof9gNjU1ErpVDuXII9Y+UYg4kda4fc1RooBC4G/hP v8476pa96h3CEI8NmKwxPEZ8BMIJj+VIfF+P3wFUgyezoDO/mrGsJhxN06frTUKtOEO3 fHUg== X-Gm-Message-State: AN3rC/7Vmufemtpx2VyysuTSRVJ1+yc6dgtcUqLA3PPMO29hWlmuAdShChGhLz1PdlflAw== X-Received: by 10.28.69.203 with SMTP id l72mr3488329wmi.75.1492012571255; Wed, 12 Apr 2017 08:56:11 -0700 (PDT) Received: from sixbynine.org (host-78-151-16-127.as13285.net. [78.151.16.127]) by smtp.gmail.com with ESMTPSA id 201sm7109005wmr.5.2017.04.12.08.56.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 12 Apr 2017 08:56:10 -0700 (PDT) From: Robert Bragg To: intel-gfx@lists.freedesktop.org Date: Wed, 12 Apr 2017 16:55:43 +0100 Message-Id: <20170412155556.6602-3-robert@sixbynine.org> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170412155556.6602-1-robert@sixbynine.org> References: <20170412155556.6602-1-robert@sixbynine.org> Subject: [Intel-gfx] [PATCH v4 02/15] 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 78fef53b45c9..f59f6dd20922 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. */