Received: by 10.223.176.46 with SMTP id f43csp554818wra; Fri, 26 Jan 2018 03:16:09 -0800 (PST) X-Google-Smtp-Source: AH8x225qsKc9pRDCX4Vmp8De+fCHrzZRzMsMODsFKqKpO60g4/H8qMYBFPmk/jhapK8ipMDu97rU X-Received: by 2002:a17:902:4324:: with SMTP id i33-v6mr13915029pld.39.1516965369006; Fri, 26 Jan 2018 03:16:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516965368; cv=none; d=google.com; s=arc-20160816; b=UzTi2iMS6IdH0pQK+1hvYcrgsYhLEd4NOo3eUkOgiOUQHqdUVUT+e9Hi/Vl1WD55HO OwpgD9/3cwwLxX3JLvHCgIfnyDGPExO9ZGjpbs37dwvHbTRFpjGaTHD438NBUBydKozI gb57uQ7Iq2kT1K5xPAS/jHfV3h7liCNKixWggEMOvSL4JXhZkIvzZeEcd/zEGjjRB91W M1lXxTfYGf3QMs74h+T1lju1qxkyIrRafC/09qa1rJRmXFu6c5C80w21zGqnYnnGSJX9 LkAeYR5z3knwExnUwbUTzrBMkV6pZdbyldN6Wjfcut6rwbGR6e9T0YTAi3hiGTm+WgQp 9fdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:cms-type:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter :arc-authentication-results; bh=82jgTYJf7JOtRb1dLL5WCL5R+GltnSzxi7PhfxL834E=; b=AHuvmmRmsKbRrbJwfKpn7Xm/VbqOwfRtrYfMc30G6pOC9zrUqBgvY6ROqIuEo/l1rs wX40rseYQVIF9CXrJuiflOd7ZapwKFcWOu9/En9RgLMkK8McfYdA13Dk5fKLZjMCnAG3 ie1vYVTLe0MdEMaiGQ6H+MSKMBdqM75vcYoimKH7gAeSpqJ/8dm4gCY+Tsbxxp+pMCRh qcAS5cfzv9JjDUjokaOkCPF5zlnnmzptEyt3TogSiGA4JrQkEkx/7lj1x+slfhYknGc0 qvxs2vU5qOYsecRZ1F+3S2yDOHOvlthnA+cVHo0xgcj+I5OJkamPJfB74gkVaoSUPTW2 WRqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=mo+hpxsS; 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=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p19-v6si3580371plo.199.2018.01.26.03.15.55; Fri, 26 Jan 2018 03:16:08 -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; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=mo+hpxsS; 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=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751394AbeAZLPA (ORCPT + 99 others); Fri, 26 Jan 2018 06:15:00 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:54039 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750730AbeAZLO6 (ORCPT ); Fri, 26 Jan 2018 06:14:58 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180126111455euoutp0183e2a6b870573f683d9094b34bd1dde5~NV_Yxeymn1357213572euoutp01K; Fri, 26 Jan 2018 11:14:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180126111455euoutp0183e2a6b870573f683d9094b34bd1dde5~NV_Yxeymn1357213572euoutp01K DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1516965295; bh=82jgTYJf7JOtRb1dLL5WCL5R+GltnSzxi7PhfxL834E=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=mo+hpxsSHWXbsBT0OdGh+RPux3AicpyroRgtPMpYt+EoOkD9/ru8rk5GF+i1CwjJl rJ9BY0gITVonOVsHTTIOGs8Vqp5cOHdev1CHdLv86SB5GSgGC5wBqaN/tXSDjk3TLO 1rIFOX9V16IH6Mquc21KrYb3qPvB+MbHGu7lvpk4= Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180126111454eucas1p2d2ed13f872a8169f0f870273e26f50cf~NV_YA14JE2192121921eucas1p2e; Fri, 26 Jan 2018 11:14:54 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2.samsung.com (EUCPMTA) with SMTP id 6F.D6.12907.EAD0B6A5; Fri, 26 Jan 2018 11:14:54 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180126111453eucas1p178663ac7b17d0c92cc889a42b3f5bcec~NV_XHRbDm3062030620eucas1p1z; Fri, 26 Jan 2018 11:14:53 +0000 (GMT) X-AuditID: cbfec7f1-f793a6d00000326b-ea-5a6b0daed101 Received: from eusync3.samsung.com ( [203.254.199.213]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id B1.90.20118.DAD0B6A5; Fri, 26 Jan 2018 11:14:53 +0000 (GMT) Received: from AMDC2765.digital.local ([106.116.147.25]) by eusync3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0P35009HGTWNTP90@eusync3.samsung.com>; Fri, 26 Jan 2018 11:14:53 +0000 (GMT) From: Marek Szyprowski To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Marek Szyprowski , Russell King , Catalin Marinas , Will Deacon , Bartlomiej Zolnierkiewicz , Inki Dae Subject: [RFC 2/2] arm64: compat: cacheflush syscall: process only pages that are in the memory Date: Fri, 26 Jan 2018 12:14:41 +0100 Message-id: <20180126111441.29353-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.15.0 In-reply-to: <20180126111441.29353-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPIsWRmVeSWpSXmKPExsWy7djPc7rreLOjDD5+krfYOGM9q8X7ZT2M FpPuT2Cx2PT4GqvF5V1z2CzWHrnLbrH5w0s2i5cfT7A4cHismbeG0aOluYfNY/OSeo++LasY PT5vkgtgjeKySUnNySxLLdK3S+DKODHlM0vBOf6KA+/EGxj38HQxcnJICJhI3PrfwgJhi0lc uLeerYuRi0NIYCmjxPyHp6Ccz4wSbbd3ssN03N22nREisYxRYtHFTiaQhJBAA5PElS1SIDab gKFE19suNhBbRMBN4kZjB1gNs0Abk8T2HSUgtrBAosSTjqmsIDaLgKrEpN51YAt4BWwlNv/c yASxTF5i8fedYHM4Bewkbl54wQ6yWEJgApvE74ktQA4HkOMisfupJ0S9sMSr41ugDpWRuDy5 G+q1fkaJplZtCHsGo8S5t7wQtrXE4eMXWSFu45OYtG06M8RIXomONiGIEg+J/onHocY4Sky8 cgwaKBMZJRY8bGGdwCi9gJFhFaNIamlxbnpqsZFecWJucWleul5yfu4mRmC0nv53/OMOxvcn rA4xCnAwKvHw3ridGSXEmlhWXJl7iFGCg1lJhNeMMztKiDclsbIqtSg/vqg0J7X4EKM0B4uS OK9tVFukkEB6YklqdmpqQWoRTJaJg1OqgdGu2/tuep0k6+KmQ89dJRiLpm2oXzN5emQz942v h/9f9TfU5LztaVNpJqST7mZyJvuI8tpMxzet7vbzTm3/wKxevSu0Sco38f8bw3OiDRq13/8p +G685qUfrfb54LkDR9VcDh+Zc9eF2fNGmEvrGfdDTn9aDwp+X3pvT4vG5pgQk4mGTFG7JJRY ijMSDbWYi4oTAd+1CITSAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKLMWRmVeSWpSXmKPExsVy+t/xq7prebOjDNqnm1psnLGe1eL9sh5G i0n3J7BYbHp8jdXi8q45bBZrj9xlt9j84SWbxcuPJ1gcODzWzFvD6NHS3MPmsXlJvUffllWM Hp83yQWwRnHZpKTmZJalFunbJXBlnJjymaXgHH/FgXfiDYx7eLoYOTkkBEwk7m7bzghhi0lc uLeeDcQWEljCKNF4swzCbmKS+HpNCMRmEzCU6HrbBVYjIuAmcaOxg6mLkYuDWaCDSWLZ32Xs IAlhgUSJ203TwIpYBFQlJvWuA4vzCthKbP65kQlimbzE4u87wWo4Bewkbl54wQ6xzFaiY/ER xgmMvAsYGVYxiqSWFuem5xYb6RUn5haX5qXrJefnbmIEBta2Yz+37GDsehd8iFGAg1GJh/fG 7cwoIdbEsuLK3EOMEhzMSiK8ZpzZUUK8KYmVValF+fFFpTmpxYcYpTlYlMR5e/esjhQSSE8s Sc1OTS1ILYLJMnFwSjUwhjpwGF2ylfdJz+1jrWM6XD/R/NlF1dkZExZVy0zjLbK7WvXSbkaf +OWDJZzWP7W/BPjE3TkQIqfxPnSJDsPHKZtn6pqkn+hzjjlS6bh57wuWe9PfrGu03ti+si6f 7eGe+xFBDUY/GxO0l9x5XJ+4rV9VRLjmlp32ts7tJt81Oa3TvSbqdj9VYinOSDTUYi4qTgQA oUMsdygCAAA= X-CMS-MailID: 20180126111453eucas1p178663ac7b17d0c92cc889a42b3f5bcec X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180126111453eucas1p178663ac7b17d0c92cc889a42b3f5bcec X-RootMTR: 20180126111453eucas1p178663ac7b17d0c92cc889a42b3f5bcec References: <20180126111441.29353-1-m.szyprowski@samsung.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org glibc in ARM 32bit mode calls cacheflush syscall on the whole textrels section of the relocated binaries. However, relocation usually doesn't touch all pages of that section, so not all of them are read to memory when calling this syscall. However flush_cache_user_range() function will unconditionally touch all pages from the provided range, resulting additional overhead related to reading all clean pages. Optimize this by calling flush_cache_user_range() only on the pages that are already in the memory. Signed-off-by: Marek Szyprowski --- arch/arm64/kernel/sys_compat.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/arch/arm64/kernel/sys_compat.c b/arch/arm64/kernel/sys_compat.c index 8b8bbd3eaa52..4a047db3fdd4 100644 --- a/arch/arm64/kernel/sys_compat.c +++ b/arch/arm64/kernel/sys_compat.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -32,23 +33,36 @@ static long __do_compat_cache_op(unsigned long start, unsigned long end) { - long ret; + struct vm_area_struct *vma = NULL; + long ret = 0; + down_read(¤t->mm->mmap_sem); do { unsigned long chunk = min(PAGE_SIZE, end - start); + if (!vma || vma->vm_end <= start) { + vma = find_vma(current->mm, start); + if (!vma) { + ret = -EFAULT; + goto done; + } + } + if (fatal_signal_pending(current)) - return 0; + goto done; - ret = __flush_cache_user_range(start, start + chunk); - if (ret) - return ret; + if (follow_page(vma, start, 0)) { + ret = __flush_cache_user_range(start, start + chunk); + if (ret) + goto done; + } cond_resched(); start += chunk; } while (start < end); - - return 0; +done: + up_read(¤t->mm->mmap_sem); + return ret; } static inline long -- 2.15.0