From patchwork Thu Jan 10 21:09:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khalid Aziz X-Patchwork-Id: 10756887 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 7FC6313B5 for ; Thu, 10 Jan 2019 21:10:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6EC0929B39 for ; Thu, 10 Jan 2019 21:10:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6132E29B8A; Thu, 10 Jan 2019 21:10:44 +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=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY 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 B927329BC2 for ; Thu, 10 Jan 2019 21:10:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 75EA88E0001; Thu, 10 Jan 2019 16:10:35 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 4AEA28E0008; Thu, 10 Jan 2019 16:10:35 -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 2DA4D8E0001; Thu, 10 Jan 2019 16:10:35 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by kanga.kvack.org (Postfix) with ESMTP id D24A98E0007 for ; Thu, 10 Jan 2019 16:10:34 -0500 (EST) Received: by mail-pl1-f199.google.com with SMTP id l9so6905845plt.7 for ; Thu, 10 Jan 2019 13:10:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references:in-reply-to:references; bh=igejgCvAio6u1Ussld9AuQC3Ul6s8euovTImu0aEjD4=; b=CmWQNAeUY6HK6Y6C7tS/PGyEX7PX+byMiL3yRYu6reJrzz8esgF+y8sh46dWWpmB0G DGpYkIFbYncxG45hc7cVvKzaX1QR6Yyv7fxkxeE/mxkjBGQRJcKZE8BPBZGIiF/GqkVb KhmnqcxftzQBBDUMUak3Fxw72j/DT8ZRfjNludIz43rOvBXjbWvkG2vp1ucXKEqWv7bJ aEYBQJ7DVfbihIQihdJDTXmNqTBihFhbNvFGVbmnl8vR4adzUFP5WbddOTNw+9upPUXV Yol1kBWU3LH6mpXTHc5yJc+js01H292EkXQYX+FbUyEJHJb7VzHR6cbbRy6mSF7GnHjb nsSg== X-Gm-Message-State: AJcUukcOl2jtuGIvzo3NOSMMZXzCE76IMzk950cuZGhjO7pfcSSMAYJv RlAgkA66lJX8xj/Y0PkgR1wVpAT8OdDzQHwo2S0pHN3LjvSZ4oP+xoFl/vp/Almk7dSkqbgYOW6 P7kITjcBrHXuAL+nRAe0y1DHbT23v3qZnKnWLMLV27sXqrMO4V+6Fxzpsi1Dzn6QIhA== X-Received: by 2002:a62:3c1:: with SMTP id 184mr11906259pfd.56.1547154634515; Thu, 10 Jan 2019 13:10:34 -0800 (PST) X-Google-Smtp-Source: ALg8bN6TYZPZ3STCRETQhyAh5ZmVjoT07pqFgpyxoh1xspty8U1dAL2G6WtjZ5LUpEwwwVuCQ9QN X-Received: by 2002:a62:3c1:: with SMTP id 184mr11906216pfd.56.1547154633655; Thu, 10 Jan 2019 13:10:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547154633; cv=none; d=google.com; s=arc-20160816; b=pX7rZo0BatTulwYoANPcMtcL9/a3PZ2Pl514gZV1FcQwrgB9dqsPAXT8RRNM5WzFcy r0uOYGr+ZMmhbVYBPVNRiAYbFx9eP801x4QgRtABUfA43nkkuuupn0MYVF6ItXkZJnSs v7W1mbURsXhPefwScRDXc6gx7zGe4XEmnpokVCV8zP3OZJOZEaloNF+wxXAV8lJEtt2X BP4ZouoYK9GuD2vWrdM+S4UXNKxjOwgszjBxpPwa3cRjgJTdInpdnDASraZqSklulUkX 1Y+PBx6UtnfyAFEjpQTPwa93/Qi0fNXGQVy9suAzzxQu5qzU2g3jUJYQc7BbJJ9exzwu 88Sw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=igejgCvAio6u1Ussld9AuQC3Ul6s8euovTImu0aEjD4=; b=v6y5v0GKRcXY7NdaY+8/Vy6xKxsw8Q7xd8g7H8aY65JnQW2gcjKZPWZkZUBpVA2vmB NXTGp6Bm5mO0y8NdsR6ffJNI7A2GOb36ZOsvvH7kcigwdhBYbEuDsUwyMCqGaLK6aUeH dHH4OTkhOGpggx8h4ZGXhhL5/yWG8OANeEsFUbVbZs8doYkFax/kQcq3YIEUh2wfH0MW U7pf3y73K8RTagWZVWbpWcKVy26RpPzdRKbGsRBB8cwnCKx2NQPcZnlVHJlOKj3G2VqW d014nxn65uDibmWRFepIKF5ltArWd25DI+rrL5SeAR5eAJbdImeX51Rx6arcT0D8fmpV im4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=1RiH7Ayt; spf=pass (google.com: domain of khalid.aziz@oracle.com designates 141.146.126.79 as permitted sender) smtp.mailfrom=khalid.aziz@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from aserp2130.oracle.com (aserp2130.oracle.com. [141.146.126.79]) by mx.google.com with ESMTPS id g8si23341095pgo.166.2019.01.10.13.10.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Jan 2019 13:10:33 -0800 (PST) Received-SPF: pass (google.com: domain of khalid.aziz@oracle.com designates 141.146.126.79 as permitted sender) client-ip=141.146.126.79; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=1RiH7Ayt; spf=pass (google.com: domain of khalid.aziz@oracle.com designates 141.146.126.79 as permitted sender) smtp.mailfrom=khalid.aziz@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id x0AL8jJN186995; Thu, 10 Jan 2019 21:10:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : in-reply-to : references; s=corp-2018-07-02; bh=igejgCvAio6u1Ussld9AuQC3Ul6s8euovTImu0aEjD4=; b=1RiH7Ayttgl67HmBUpj9Zdch6LCLPksWDKHZCY0c3O4g6K6f5lB+hFkquaMWY/CeqG2c WA3MN5u8IJiO8Q9EgRsR9weHv6aPXsg7lHvl6yVYGrFoAElAl/Qtxo/16weY5EyApWJw ZcUENEhCipmYwEhouhHCKcEms6inTWl5F8KMuKzhwQTrjTOoEAagowAB7i5Bu3g6vsTO g6DsIP3fE09F4sXWS4Bh+elRfQKiEMVnQyVSwOrGHEEUPs0EeBDb01Zp18Asj2eNwi1g Wr2MJ/rH5TiF9nQr2d44cNyQBMa8MVknWh6/vaIjGPPQMqxLcxhzgvfyKlQJRmStxkM5 KA== Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp2130.oracle.com with ESMTP id 2ptj3e9tgs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 10 Jan 2019 21:10:24 +0000 Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id x0ALAOTF011482 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 10 Jan 2019 21:10:24 GMT Received: from abhmp0009.oracle.com (abhmp0009.oracle.com [141.146.116.15]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x0ALAOpv023399; Thu, 10 Jan 2019 21:10:24 GMT Received: from concerto.internal (/24.9.64.241) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 10 Jan 2019 13:10:24 -0800 From: Khalid Aziz To: juergh@gmail.com, tycho@tycho.ws, jsteckli@amazon.de, ak@linux.intel.com, torvalds@linux-foundation.org, liran.alon@oracle.com, keescook@google.com, konrad.wilk@oracle.com Cc: Tycho Andersen , deepa.srinivasan@oracle.com, chris.hyser@oracle.com, tyhicks@canonical.com, dwmw@amazon.co.uk, andrew.cooper3@citrix.com, jcm@redhat.com, boris.ostrovsky@oracle.com, kanth.ghatraju@oracle.com, joao.m.martins@oracle.com, jmattson@google.com, pradeep.vincent@oracle.com, john.haxby@oracle.com, tglx@linutronix.de, kirill.shutemov@linux.intel.com, hch@lst.de, steven.sistare@oracle.com, kernel-hardening@lists.openwall.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Khalid Aziz Subject: [RFC PATCH v7 06/16] xpfo: add primitives for mapping underlying memory Date: Thu, 10 Jan 2019 14:09:38 -0700 Message-Id: <5deed7a1eb65fc6c66acb8a00d46d63e7f0fd22f.1547153058.git.khalid.aziz@oracle.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: References: X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9132 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=2 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=972 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901100164 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 From: Tycho Andersen In some cases (on arm64 DMA and data cache flushes) we may have unmapped the underlying pages needed for something via XPFO. Here are some primitives useful for ensuring the underlying memory is mapped/unmapped in the face of xpfo. Signed-off-by: Tycho Andersen Signed-off-by: Khalid Aziz --- include/linux/xpfo.h | 22 ++++++++++++++++++++++ mm/xpfo.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/linux/xpfo.h b/include/linux/xpfo.h index e38b823f44e3..2682a00ebbcb 100644 --- a/include/linux/xpfo.h +++ b/include/linux/xpfo.h @@ -37,6 +37,15 @@ void xpfo_free_pages(struct page *page, int order); bool xpfo_page_is_unmapped(struct page *page); +#define XPFO_NUM_PAGES(addr, size) \ + (PFN_UP((unsigned long) (addr) + (size)) - \ + PFN_DOWN((unsigned long) (addr))) + +void xpfo_temp_map(const void *addr, size_t size, void **mapping, + size_t mapping_len); +void xpfo_temp_unmap(const void *addr, size_t size, void **mapping, + size_t mapping_len); + #else /* !CONFIG_XPFO */ static inline void xpfo_kmap(void *kaddr, struct page *page) { } @@ -46,6 +55,19 @@ static inline void xpfo_free_pages(struct page *page, int order) { } static inline bool xpfo_page_is_unmapped(struct page *page) { return false; } +#define XPFO_NUM_PAGES(addr, size) 0 + +static inline void xpfo_temp_map(const void *addr, size_t size, void **mapping, + size_t mapping_len) +{ +} + +static inline void xpfo_temp_unmap(const void *addr, size_t size, + void **mapping, size_t mapping_len) +{ +} + + #endif /* CONFIG_XPFO */ #endif /* _LINUX_XPFO_H */ diff --git a/mm/xpfo.c b/mm/xpfo.c index cdbcbac582d5..f79075bf7d65 100644 --- a/mm/xpfo.c +++ b/mm/xpfo.c @@ -13,6 +13,7 @@ * the Free Software Foundation. */ +#include #include #include #include @@ -235,3 +236,32 @@ bool xpfo_page_is_unmapped(struct page *page) return test_bit(XPFO_PAGE_UNMAPPED, &xpfo->flags); } EXPORT_SYMBOL(xpfo_page_is_unmapped); + +void xpfo_temp_map(const void *addr, size_t size, void **mapping, + size_t mapping_len) +{ + struct page *page = virt_to_page(addr); + int i, num_pages = mapping_len / sizeof(mapping[0]); + + memset(mapping, 0, mapping_len); + + for (i = 0; i < num_pages; i++) { + if (page_to_virt(page + i) >= addr + size) + break; + + if (xpfo_page_is_unmapped(page + i)) + mapping[i] = kmap_atomic(page + i); + } +} +EXPORT_SYMBOL(xpfo_temp_map); + +void xpfo_temp_unmap(const void *addr, size_t size, void **mapping, + size_t mapping_len) +{ + int i, num_pages = mapping_len / sizeof(mapping[0]); + + for (i = 0; i < num_pages; i++) + if (mapping[i]) + kunmap_atomic(mapping[i]); +} +EXPORT_SYMBOL(xpfo_temp_unmap);