From patchwork Tue Jan 8 04:51:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aneesh Kumar K.V" X-Patchwork-Id: 10751403 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5893013B5 for ; Tue, 8 Jan 2019 04:51:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4807F28A2D for ; Tue, 8 Jan 2019 04:51:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3C2F028B20; Tue, 8 Jan 2019 04:51:45 +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=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B98EE28A2D for ; Tue, 8 Jan 2019 04:51:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 970B38E0055; Mon, 7 Jan 2019 23:51:43 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 8F5EF8E0038; Mon, 7 Jan 2019 23:51:43 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7713D8E0055; Mon, 7 Jan 2019 23:51:43 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by kanga.kvack.org (Postfix) with ESMTP id 4540D8E0038 for ; Mon, 7 Jan 2019 23:51:43 -0500 (EST) Received: by mail-qk1-f197.google.com with SMTP id z126so2194209qka.10 for ; Mon, 07 Jan 2019 20:51:43 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:in-reply-to:references:mime-version :content-transfer-encoding:message-id; bh=L+nGpwzN5rvEwVHM9RLyQSj/a1leCo4WYIxHHGAcQcQ=; b=km60ASGCxt2Sp2oxABU4npN3jmx4PganJ5pIFsLbI6OCRJFiBAZnkLWy+ey/6FcN7s HdpjLg9a74QRzIX3bDlFh+L6zyRO3CR+ZyBXiL+uzPyQZl995kMJeV+THWihTfZmsjmg Bh7necKyWyIY7p37F2yLQHxxPaubHD/pQ/fzKPg7n7LRvZO/YPwkXYvxff7J7yCQKch4 DDbRYaxFG+Fdfqwyr68E9KjN0QaB3k8np8g+suJLt0+ykCfyZzH7zA6SlRZOFTPiTrL7 z8dJ0Z7laVlFF83cs/wihpjEtb7saKBLChAfiBQdLi7SmqMNIzN9X+aKxw7DR7brNkDa dzbw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of aneesh.kumar@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=aneesh.kumar@linux.ibm.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com X-Gm-Message-State: AJcUukdVL+4Vljumn9G3vfvFfn2/aJzPu2PYkIPv1Gd9Gswqhs3KQZFT GYYozQB6+sDswzXA7sDCzVF8R7BhddDsCSsiaGLxCwOQ9pm+xdVCnCPI8dvPSls61VqrnOdsOEN 3SyxOJtW5prICo7EYy8Fk37AnY3WPodpgZlt/vFOv9E2y8C239Kt0GICBRbycMwHNUw== X-Received: by 2002:a37:9f92:: with SMTP id i140mr247320qke.131.1546923103026; Mon, 07 Jan 2019 20:51:43 -0800 (PST) X-Google-Smtp-Source: ALg8bN4pBoWCR1zcc4tCnXrma3t+W22WDYHErFJ2Iprd1g45Wc2zMaflbFDZmVHDqcdfzRD/9o/k X-Received: by 2002:a37:9f92:: with SMTP id i140mr247304qke.131.1546923102340; Mon, 07 Jan 2019 20:51:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546923102; cv=none; d=google.com; s=arc-20160816; b=lQYo4kOy3NaLsBvIsx5KOP04z29SkxaBQz69clYIqWxEL97Nuh5luH6J2B0xpOwJqZ 9TWJfC2AjF2gEjbKqyAfG09B3Jen/g8fierUDyVXS3T4HSYW/os2eS1xMyf5Z8lF9oY/ FvyLK5mZ8UiO6Ls7ze4AdTiwtmYpz72xqB2Ew/gjH69u/RvEGLWg2Gaw0l1Cn9+hZxwD IklodZdG5CD35XbE+0q9OP1E8mDE5ZQuCYr82b8JFF/6q0b4PaVIwQsp0KLZNz+md+Xk KPx6IG3J2SjwzTsebKdR9RpJZ26rRQfdDc7JwJlSO9zrOnZiwulw9rtt+3Z3A32UNc6V uw+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:content-transfer-encoding:mime-version:references :in-reply-to:date:subject:cc:to:from; bh=L+nGpwzN5rvEwVHM9RLyQSj/a1leCo4WYIxHHGAcQcQ=; b=WaVevHqNVEqNzNaE1T/zSX8o651Qr8iPc3mRuR51W/L1sZK7qA16gs5++b4rHX+g27 /MZ9IaA7jLeydxM7F1tEj/+GA/cjzvxUXXoMe37vzNLtG2dZ4jEKdRBxzeV5Ld6bH/gM pI7UKbLqP9gJ7XikIpV/OvkTAMnr9q2ns+bVrDFAFWfffFsxN/cqMM8NzfJADyTo1pui ZVb0g4PKSIa19OhEaeTRN5N7aRXlZsQAh7VIAnESnpFQ0RaYNCSE62/CDlqKuvil7irB +SXlLCqyCLC5en1bIER0sLr+dnlocnkd7e2sY8e7915SiQF0/5F8GX6yCSvvskuEIQtb 7dpw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of aneesh.kumar@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=aneesh.kumar@linux.ibm.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com. [148.163.158.5]) by mx.google.com with ESMTPS id n137si1179713qkn.1.2019.01.07.20.51.42 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Jan 2019 20:51:42 -0800 (PST) Received-SPF: pass (google.com: domain of aneesh.kumar@linux.ibm.com designates 148.163.158.5 as permitted sender) client-ip=148.163.158.5; Authentication-Results: mx.google.com; spf=pass (google.com: domain of aneesh.kumar@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=aneesh.kumar@linux.ibm.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id x084mr4R049098 for ; Mon, 7 Jan 2019 23:51:42 -0500 Received: from e11.ny.us.ibm.com (e11.ny.us.ibm.com [129.33.205.201]) by mx0a-001b2d01.pphosted.com with ESMTP id 2pvk82n5qj-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 07 Jan 2019 23:51:41 -0500 Received: from localhost by e11.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 8 Jan 2019 04:51:41 -0000 Received: from b01cxnp23034.gho.pok.ibm.com (9.57.198.29) by e11.ny.us.ibm.com (146.89.104.198) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 8 Jan 2019 04:51:38 -0000 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp23034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x084pbBa25428082 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 8 Jan 2019 04:51:37 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C0995B205F; Tue, 8 Jan 2019 04:51:37 +0000 (GMT) Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E1814B2065; Tue, 8 Jan 2019 04:51:34 +0000 (GMT) Received: from skywalker.ibmuc.com (unknown [9.85.75.199]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP; Tue, 8 Jan 2019 04:51:34 +0000 (GMT) From: "Aneesh Kumar K.V" To: akpm@linux-foundation.org, Michal Hocko , Alexey Kardashevskiy , David Gibson , Andrea Arcangeli , mpe@ellerman.id.au Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "Aneesh Kumar K.V" Subject: [PATCH V6 4/4] powerpc/mm/iommu: Allow large IOMMU page size only for hugetlb backing Date: Tue, 8 Jan 2019 10:21:10 +0530 X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190108045110.28597-1-aneesh.kumar@linux.ibm.com> References: <20190108045110.28597-1-aneesh.kumar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 x-cbid: 19010804-2213-0000-0000-000003383877 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00010364; HX=3.00000242; KW=3.00000007; PH=3.00000004; SC=3.00000273; SDB=6.01143337; UDB=6.00595222; IPR=6.00923595; MB=3.00025026; MTD=3.00000008; XFM=3.00000015; UTC=2019-01-08 04:51:40 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19010804-2214-0000-0000-00005CE1EC09 Message-Id: <20190108045110.28597-5-aneesh.kumar@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-01-08_03:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901080036 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP THP pages can get split during different code paths. An incremented reference count do imply we will not split the compound page. But the pmd entry can be converted to level 4 pte entries. Keep the code simpler by allowing large IOMMU page size only if the guest ram is backed by hugetlb pages. Signed-off-by: Aneesh Kumar K.V --- arch/powerpc/mm/mmu_context_iommu.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/mm/mmu_context_iommu.c b/arch/powerpc/mm/mmu_context_iommu.c index 52ccab294b47..62c7590378d4 100644 --- a/arch/powerpc/mm/mmu_context_iommu.c +++ b/arch/powerpc/mm/mmu_context_iommu.c @@ -98,8 +98,6 @@ static long mm_iommu_do_alloc(struct mm_struct *mm, unsigned long ua, struct mm_iommu_table_group_mem_t *mem; long i, ret = 0, locked_entries = 0; unsigned int pageshift; - unsigned long flags; - unsigned long cur_ua; mutex_lock(&mem_list_mutex); @@ -167,22 +165,14 @@ static long mm_iommu_do_alloc(struct mm_struct *mm, unsigned long ua, for (i = 0; i < entries; ++i) { struct page *page = mem->hpages[i]; - cur_ua = ua + (i << PAGE_SHIFT); - if (mem->pageshift > PAGE_SHIFT && PageCompound(page)) { - pte_t *pte; + /* + * Allow to use larger than 64k IOMMU pages. Only do that + * if we are backed by hugetlb. + */ + if ((mem->pageshift > PAGE_SHIFT) && PageHuge(page)) { struct page *head = compound_head(page); - unsigned int compshift = compound_order(head); - unsigned int pteshift; - - local_irq_save(flags); /* disables as well */ - pte = find_linux_pte(mm->pgd, cur_ua, NULL, &pteshift); - - /* Double check it is still the same pinned page */ - if (pte && pte_page(*pte) == head && - pteshift == compshift + PAGE_SHIFT) - pageshift = max_t(unsigned int, pteshift, - PAGE_SHIFT); - local_irq_restore(flags); + + pageshift = compound_order(head) + PAGE_SHIFT; } mem->pageshift = min(mem->pageshift, pageshift); /*