Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1298101imu; Wed, 23 Jan 2019 14:25:53 -0800 (PST) X-Google-Smtp-Source: ALg8bN66ODKR4RZ0OUJ27HolkRGHzjAJy4K8yNDSRdieSxIlWTBPQt2tO9o3pByK5gaed+eCSXD/ X-Received: by 2002:a62:5486:: with SMTP id i128mr3738950pfb.215.1548282353622; Wed, 23 Jan 2019 14:25:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548282353; cv=none; d=google.com; s=arc-20160816; b=ejmjfC52Iflzhi2XlbbKnMkCeYG911EOpCL1dZZww0kPD8zLWKGmXoct2k3pqf/gd+ xv0+sk8mvPtL+ODrUeC9Fvz0GvqN3c43ilyQJ63QJCVfbvp53iEQQSeMwyNORapc14RJ 6ojkIRvcjUhmCktQBu7b9iARMJCYNsh4VIVSBbR1SczhptVvPi+B1h38jBMbiNIgVXPP 08G7bWa0Z5HIpjAAnCuJdit0Zuo6AIbVKpt18sWDWWvxeHYiAjJx/maykVkCWsbAL6eW i1ccwpNiAdOH7SaRC9V9NaNnNx3FlO0PAs9fAy8cjcAa8TTpEZ+/GOawznsArN5n+b1N cANw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=3BKZ/v2XLYl6bJCscr3vEcuiItOFgg+U4duPRXYMcZs=; b=MTD4mydtJ6K5Imahj9r/BEkBZn00lPc63Pz8DH3SVCDwOU6Wbk2/upKG62OB0FOR/m c3p4aTSELD0WiI9o1iL1SpULiz478mFQ9bmeTKBZsnzXP4EH5TRiUZgyeAHhL5hAYrF+ XrZazo8+JL9iA/CRPpab0ewe3Ev3krRF2PnjUSlPbhXRoiNaFfnRDXAocJOpPFU4zUD8 hOuDl819heAlXiKxawL6E+Jom+cZ57cTkZp3XIwTHijyBLFLzsUs/+H3ROAemZZDPsJM z2Kj34Z8pVYnjTeM6saTYrHGUVzucP3a1jL4ov9edRdAJnltgf8ZqkfTPwE4mjqGWm9x DQIw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d4si21723354plj.334.2019.01.23.14.25.38; Wed, 23 Jan 2019 14:25:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727323AbfAWWXw (ORCPT + 99 others); Wed, 23 Jan 2019 17:23:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57982 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727271AbfAWWXr (ORCPT ); Wed, 23 Jan 2019 17:23:47 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 61CC618DF61; Wed, 23 Jan 2019 22:23:46 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-120-127.rdu2.redhat.com [10.10.120.127]) by smtp.corp.redhat.com (Postfix) with ESMTP id B5EAC5D965; Wed, 23 Jan 2019 22:23:43 +0000 (UTC) From: jglisse@redhat.com To: linux-mm@kvack.org Cc: Andrew Morton , linux-kernel@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jan Kara , Felix Kuehling , Jason Gunthorpe , Matthew Wilcox , Ross Zwisler , Dan Williams , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Michal Hocko , Ralph Campbell , John Hubbard , kvm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, linux-fsdevel@vger.kernel.org, Arnd Bergmann Subject: [PATCH v4 6/9] gpu/drm/radeon: optimize out the case when a range is updated to read only Date: Wed, 23 Jan 2019 17:23:12 -0500 Message-Id: <20190123222315.1122-7-jglisse@redhat.com> In-Reply-To: <20190123222315.1122-1-jglisse@redhat.com> References: <20190123222315.1122-1-jglisse@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 23 Jan 2019 22:23:46 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jérôme Glisse When range of virtual address is updated read only and corresponding user ptr object are already read only it is pointless to do anything. Optimize this case out. Signed-off-by: Jérôme Glisse Cc: Christian König Cc: Jan Kara Cc: Felix Kuehling Cc: Jason Gunthorpe Cc: Andrew Morton Cc: Matthew Wilcox Cc: Ross Zwisler Cc: Dan Williams Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Michal Hocko Cc: Ralph Campbell Cc: John Hubbard Cc: kvm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-rdma@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org Cc: Arnd Bergmann --- drivers/gpu/drm/radeon/radeon_mn.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c index b3019505065a..f77294f58e63 100644 --- a/drivers/gpu/drm/radeon/radeon_mn.c +++ b/drivers/gpu/drm/radeon/radeon_mn.c @@ -124,6 +124,7 @@ static int radeon_mn_invalidate_range_start(struct mmu_notifier *mn, struct radeon_mn *rmn = container_of(mn, struct radeon_mn, mn); struct ttm_operation_ctx ctx = { false, false }; struct interval_tree_node *it; + bool update_to_read_only; unsigned long end; int ret = 0; @@ -138,6 +139,8 @@ static int radeon_mn_invalidate_range_start(struct mmu_notifier *mn, else if (!mutex_trylock(&rmn->lock)) return -EAGAIN; + update_to_read_only = mmu_notifier_range_update_to_read_only(range); + it = interval_tree_iter_first(&rmn->objects, range->start, end); while (it) { struct radeon_mn_node *node; @@ -153,10 +156,20 @@ static int radeon_mn_invalidate_range_start(struct mmu_notifier *mn, it = interval_tree_iter_next(it, range->start, end); list_for_each_entry(bo, &node->bos, mn_list) { + bool read_only; if (!bo->tbo.ttm || bo->tbo.ttm->state != tt_bound) continue; + /* + * If it is already read only and we are updating to + * read only then we do not need to change anything. + * So save time and skip this one. + */ + read_only = radeon_ttm_tt_is_readonly(bo->tbo.ttm); + if (update_to_read_only && read_only) + continue; + r = radeon_bo_reserve(bo, true); if (r) { DRM_ERROR("(%ld) failed to reserve user bo\n", r); -- 2.17.2