From patchwork Wed Jun 14 23:18:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 776038 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wp2dh1PB3z9sCZ for ; Thu, 15 Jun 2017 09:19:20 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tjyjnRNP"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752628AbdFNXTT (ORCPT ); Wed, 14 Jun 2017 19:19:19 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:36369 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752701AbdFNXTS (ORCPT ); Wed, 14 Jun 2017 19:19:18 -0400 Received: by mail-lf0-f68.google.com with SMTP id x81so1602722lfb.3 for ; Wed, 14 Jun 2017 16:19:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Gfh7lrWECqmh1Oy40i68Y1h7Lm6qgkETH4IH/yRSEKU=; b=tjyjnRNP22BpnvwSavwk+V7pL1DKo/QvOWWHgDrS9+vU/rbI0bCVuhwK9/GIwCktLn r8S7+CSnWZlW3+QveqXaucv9v/00xzaCQR6+1v04WDNQ+kLyzqeUUfN5DPWiBA30tY/+ 0xifpDmY3F0Rz6S5coIIPhhr8hi5grhE3IlNbrmSTxhuyCUnSFio5D/sfCkuUE2yQ8kj TkY8huL+D74Xs7HLu/hTRQZfTgcly4chgWyKYNCbcqoUf8FhDwPoKeNPq4384U5pIrlL hS8RYw7izluRw9f4Jrf2MtKdSebFRqC2qmgANXMDJZDDV0FBWgpH6EryUKfdvtG1N7dm CT1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=Gfh7lrWECqmh1Oy40i68Y1h7Lm6qgkETH4IH/yRSEKU=; b=sixeAIn1BPEDnVwYktfNLStp1O6DqEqHaToITMdKV2Op0hsHUs4Rh1j0nc8oHQeYbu hD7pO9//DsoyLiawDMfZ5o0phLDta0OZIoIVMwQmJaQ8nin/OScjDfxDsjHKA0aJryuM sOXWtLUFcnzGhX3zH6NvXzXQKTPrbyprVUGb6vh/GJpBvG5eheSPmQ+iY+CXwc4qi5JB cOiwkXdqGxAJavqEowiZ6aoQ0uuq7zv8gJsM4ULOydtQUMAUaakKsvcvXSiOtDNjhrcF PjNaVeg4FgLtOi763Zf9m7uPoHihklmcvjCyXn8Q5B9p+Ycc7hf0QEgDWUeoIkG5oxgW Ph7g== X-Gm-Message-State: AKS2vOwRfa+Mvj72ZJ52NnHL8ihU2Yk1i4kZ464ta97ePl70/X9i/OKT OLld5WL3F6Qk8Q== X-Received: by 10.46.77.200 with SMTP id c69mr698565ljd.71.1497482357060; Wed, 14 Jun 2017 16:19:17 -0700 (PDT) Received: from localhost.localdomain (ppp109-252-91-7.pppoe.spdop.ru. [109.252.91.7]) by smtp.gmail.com with ESMTPSA id i24sm290165ljb.63.2017.06.14.16.19.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Jun 2017 16:19:16 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Mikko Perttunen , Erik Faye-Lund Cc: linux-tegra@vger.kernel.org, DRI Development Subject: [PATCH v3 20/20] gpu: host1x: At first try a non-blocking allocation for the gather copy Date: Thu, 15 Jun 2017 02:18:43 +0300 Message-Id: <55b832cf3e71fde6c28c05c58c001cf06c1bac8a.1497480758.git.digetx@gmail.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: References: In-Reply-To: References: Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The blocking gather copy allocation is a major performance downside of the Host1x firewall, it may take hundreds milliseconds which is unacceptable for the real-time graphics operations. Let's try a non-blocking allocation first as a least invasive solution, it makes opentegra (Xorg driver) performance indistinguishable with/without the firewall. Signed-off-by: Dmitry Osipenko Reviewed-by: Erik Faye-Lund --- drivers/gpu/host1x/job.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c index f32ae69a68c7..bee504406cfc 100644 --- a/drivers/gpu/host1x/job.c +++ b/drivers/gpu/host1x/job.c @@ -574,12 +574,20 @@ static inline int copy_gathers(struct host1x_job *job, struct device *dev) size += g->words * sizeof(u32); } + /* + * Try a non-blocking allocation from a higher priority pools first, + * as awaiting for the allocation here is a major performance hit. + */ job->gather_copy_mapped = dma_alloc_wc(dev, size, &job->gather_copy, - GFP_KERNEL); - if (!job->gather_copy_mapped) { - job->gather_copy_mapped = NULL; + GFP_NOWAIT); + + /* the higher priority allocation failed, try the generic-blocking */ + if (!job->gather_copy_mapped) + job->gather_copy_mapped = dma_alloc_wc(dev, size, + &job->gather_copy, + GFP_KERNEL); + if (!job->gather_copy_mapped) return -ENOMEM; - } job->gather_copy_size = size;