Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2687980pxa; Mon, 17 Aug 2020 16:42:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwABTyc0tVYj2BbJGVPn1qRdCvxPNMMsKpVjFv8Bz7oHbIlWfodxaPBA2jBe+tyEjoy0au+ X-Received: by 2002:a17:906:b89a:: with SMTP id hb26mr17236074ejb.425.1597707760464; Mon, 17 Aug 2020 16:42:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597707760; cv=none; d=google.com; s=arc-20160816; b=J+wzTTU2NzkN/a05Szgbiapfcd5+Wm7NoBykqr8MOxY6ezCCw0MO6KOnkVsth+IO8U ifl269GQP8pjnlGwfb2jo6V//+7S5nmoHBXBtTgIdfDxCAPx6SrpT/cBhZTga+Lv1Gfr 7+mmqx8Uirqpasfs9XaJqUogUwAWJ5Oj0uiQuUSvb1D+XoTsyRxcXvhAKMcKAL+EpwTb M1fSzIhWxddfWF/aIc4hKBWZ4LWR1effCNLNux6W7Z6ANaoOlBAcOK0Dzcpbs870FwPJ gYIoTLsH6aqUOcJJ8OdZgIJlTFDl0/zqiCT2sAWkKNPpc51NBnCnp9+HC23D4NJlPeI8 oUeg== 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 :dkim-signature; bh=4pvezruqLZGZxlep+/8CtLytSlMuAJbS5PO1pRjRZ2A=; b=zAVdxStVNSMbsrGipjALBnWy43Z8fPeiP7Bea7YUENZGjJg70JbD66L9dareCzgXR5 aZgAQlrQFtEoqQncC813YSsQuebTlcnuzgWPffft3M993UoXVO2n8N/HW5ZWPi+PkQcy Ttr4i3rPiA+oViNt8z7g8gdrD/sYuW5igICodl34pFeZOSnqT44myry+XYELUVo31MfU ThZt2A/OcFNaVZiCQHEyG2DzM1ZpnEnZ97VjoIBV/6xJJQ6nfPc9E07LjBN/c/xtI7B4 C7dshdZK2zgrPtHQUHexjMqEXUoTRVGqhFSWAX9Y6KuX+4maRBUt/SX/5ijmoJzWUD/4 N8BA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=o4ZgIE5h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s15si11835918eji.64.2020.08.17.16.42.16; Mon, 17 Aug 2020 16:42:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=o4ZgIE5h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726715AbgHQXlK (ORCPT + 99 others); Mon, 17 Aug 2020 19:41:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726272AbgHQXlE (ORCPT ); Mon, 17 Aug 2020 19:41:04 -0400 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0044BC061389 for ; Mon, 17 Aug 2020 16:41:03 -0700 (PDT) Received: by mail-qk1-x744.google.com with SMTP id d14so16660037qke.13 for ; Mon, 17 Aug 2020 16:41:03 -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 :mime-version:content-transfer-encoding; bh=4pvezruqLZGZxlep+/8CtLytSlMuAJbS5PO1pRjRZ2A=; b=o4ZgIE5hUZtt9C/X/WWI8vcoQiLbf5ZScgCCr+PJA64zZzgxYbha59fEpFp2wXPcO6 v3cF/GAHaFnlwEhfdTMVtKe0UFpeantVLiSl9TwakZiJL88an5HoKvRHZ3mw38/D8o/4 ADvG7N9hDTso4qWFlL8iMs2kb8f309m6tcv9w+p6E8TsRLbXQ1vqrKOPipf4RF1pqNWr qGjONDNhVOYPosm6u7V/CoIA6iGmXvJyRcEduDmNy1C4iwMBN/zZJwWVnfX9YR/4hvWh voBUwB2UWFb/TjgGf3nG85mOV+dbCR5b891zGXnykvOarEdkFPZq8rOhGOtA3QNaXeel 6Tyg== 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:mime-version:content-transfer-encoding; bh=4pvezruqLZGZxlep+/8CtLytSlMuAJbS5PO1pRjRZ2A=; b=aw5HKjyteit+gOo3XHKXvsYJIgWg5JftolPdnJrffI4mBZlJhUnvYxCdG+pSGto+pn /EGqbRj0FSMgXbV7e5tax4QJ0fN7Blzmhh3IZQ9ehKqghIZ8t9yQ2Qaz7AlQGfWh8fAU SxLz7XhtcMnYfay9QNEe+W+cUvmq5/TSLf/k/alybGRBDIdCUlNH2RiaPnLhp2k5K99k f+QK8tPN9LFgha5n1ViMnXrqaXfKi+Yin0HNAQkBdaCmQbsCTAWTKqhb4KtYrT2RbGeu S6LkWjEI5U+KxlCqnMi5Ux4oP6uVlDpzIsLbGT5Nt+NE0u75DLNQ1jxaQ1vin4JpnCDO 3GCw== X-Gm-Message-State: AOAM530nBGPY9xoFJLWhkaGhBFQXtjF6W8wk1Wq6DZZhsFgPd3dkoJu3 BtYfPZt9q+4sOTKkocg712Q= X-Received: by 2002:a37:614:: with SMTP id 20mr14659203qkg.456.1597707663297; Mon, 17 Aug 2020 16:41:03 -0700 (PDT) Received: from LeoBras.ibmuc.com ([177.35.193.93]) by smtp.gmail.com with ESMTPSA id w58sm22342868qth.95.2020.08.17.16.40.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 16:41:02 -0700 (PDT) From: Leonardo Bras To: Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Alexey Kardashevskiy , Christophe Leroy , Leonardo Bras , Joel Stanley , Thiago Jung Bauermann , Ram Pai , Brian King , Murilo Fossa Vicentini , David Dai Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 03/10] powerpc/kernel/iommu: Use largepool as a last resort when !largealloc Date: Mon, 17 Aug 2020 20:40:26 -0300 Message-Id: <20200817234033.442511-4-leobras.c@gmail.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20200817234033.442511-1-leobras.c@gmail.com> References: <20200817234033.442511-1-leobras.c@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As of today, doing iommu_range_alloc() only for !largealloc (npages <= 15) will only be able to use 3/4 of the available pages, given pages on largepool not being available for !largealloc. This could mean some drivers not being able to fully use all the available pages for the DMA window. Add pages on largepool as a last resort for !largealloc, making all pages of the DMA window available. Signed-off-by: Leonardo Bras --- arch/powerpc/kernel/iommu.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index d7086087830f..7f603d4e62d4 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c @@ -261,6 +261,15 @@ static unsigned long iommu_range_alloc(struct device *dev, pass++; goto again; + } else if (pass == tbl->nr_pools + 1) { + /* Last resort: try largepool */ + spin_unlock(&pool->lock); + pool = &tbl->large_pool; + spin_lock(&pool->lock); + pool->hint = pool->start; + pass++; + goto again; + } else { /* Give up */ spin_unlock_irqrestore(&(pool->lock), flags); -- 2.25.4