Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1137978pxb; Wed, 10 Feb 2021 00:35:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJzOr6W9EkccEtC4XKHrxsPX+5RcWA2UnooFafnpCVNN1xpm6e8TuVNhXIrSS41ZKegKYW3n X-Received: by 2002:aa7:c5d6:: with SMTP id h22mr2199358eds.272.1612946140449; Wed, 10 Feb 2021 00:35:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612946140; cv=none; d=google.com; s=arc-20160816; b=flmqhmGetWNGUplQJYfh5wmhxoSwThdTAvsSALzhAhoCEHd5b4s6D20sD4JUY7I1Zh qpDnVHyNdtmoToddnJk60z1t1jOMJBoHTIrsw0C3ZrdCWU9MeBJe6Cb0+7L+CLSiLkRX JCUrXzJErobzsnqr1AycW4hRF85QWs5p2f18St4y7tD4f4r+BxZjot25h5GDecRqDYBV skCmg2Dw6ZlvL+cFtqsbO5NsaE6HjSiogE3Hx+dj67Stti3U4Tgqx1czNeAHC97I2eqr yqTC8Hu/JEoJBMihHY0pX5ltRostqihB/92W0cwc5iqIwzvk1XBeqGXK6C2Jtb5DZrJq A0Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :ironport-sdr:ironport-sdr; bh=d4gnvehTjkQ/eraTxKOvGbeliLLxqealt3LqGZXX8WE=; b=ALlXS0NzaPd6UfZ2vXX4nNHzQlsZMuO/KyQFLhfT4JgvM2zZAK370xSyOxOZGfrykN mTEQSAGUQ/jIAGUp8WTEq/MSgYmXX1hlnsmTESflkmocowNA+voMK0vu6SHiWOrB9D07 LlK65AbTXJM9ai+GdGjnwdWmsbyQ66No5iXyzefrtiOpEN0GoCL2t29frVFnVXs6lVco YAv9h2D2Y+Qw8CSBToesDFL3uTIrQVoYq0Dpu0OEQBlYiaBL7z6asY/q/2t4/EgY79Ha yJIO3tgaR9xf1HpttZQ/v3RHwwBqW81VhNv7r6UpI4J+FBwMs0EmCE8qTW6J6VeDBejV qnPQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s24si851636ejf.601.2021.02.10.00.35.17; Wed, 10 Feb 2021 00:35:40 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231735AbhBJGYP (ORCPT + 99 others); Wed, 10 Feb 2021 01:24:15 -0500 Received: from mga03.intel.com ([134.134.136.65]:39564 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231651AbhBJGXQ (ORCPT ); Wed, 10 Feb 2021 01:23:16 -0500 IronPort-SDR: hJV5El22nShlzWwOcIcKor6ZnRuvrffWv1bsj+y4W8RpMZJpORiCEsnNvsYw/JObitRNP/Bu93 LFayAnU8fbEg== X-IronPort-AV: E=McAfee;i="6000,8403,9890"; a="182086723" X-IronPort-AV: E=Sophos;i="5.81,167,1610438400"; d="scan'208";a="182086723" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2021 22:22:34 -0800 IronPort-SDR: RYvxZq6b+f56s8vwubDbwJMmRqyjN8YP3X6q+1kd894MtYMxxhntB1Pl1zC6Du6WRZqkp0fItH zYAhXQWN8X3g== X-IronPort-AV: E=Sophos;i="5.81,167,1610438400"; d="scan'208";a="587246143" Received: from iweiny-desk2.sc.intel.com (HELO localhost) ([10.3.52.147]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2021 22:22:33 -0800 From: ira.weiny@intel.com To: Andrew Morton , David Sterba Cc: Ira Weiny , Christoph Hellwig , clm@fb.com, josef@toxicpanda.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH V2 3/8] mm/highmem: Introduce memcpy_page(), memmove_page(), and memset_page() Date: Tue, 9 Feb 2021 22:22:16 -0800 Message-Id: <20210210062221.3023586-4-ira.weiny@intel.com> X-Mailer: git-send-email 2.28.0.rc0.12.gb6a658bd00c9 In-Reply-To: <20210210062221.3023586-1-ira.weiny@intel.com> References: <20210210062221.3023586-1-ira.weiny@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ira Weiny 3 more common kmap patterns are kmap/memcpy/kunmap, kmap/memmove/kunmap. and kmap/memset/kunmap. Add helper functions for those patterns which use kmap_local_page(). Cc: Andrew Morton Cc: Christoph Hellwig Signed-off-by: Ira Weiny --- New for V2 --- include/linux/highmem.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index c17a175fe5fe..0b5d89621cb9 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -276,6 +276,39 @@ static inline void copy_highpage(struct page *to, struct page *from) #endif +static inline void memcpy_page(struct page *dst_page, size_t dst_off, + struct page *src_page, size_t src_off, + size_t len) +{ + char *dst = kmap_local_page(dst_page); + char *src = kmap_local_page(src_page); + + memcpy(dst + dst_off, src + src_off, len); + kunmap_local(src); + kunmap_local(dst); +} + +static inline void memmove_page(struct page *dst_page, size_t dst_off, + struct page *src_page, size_t src_off, + size_t len) +{ + char *dst = kmap_local_page(dst_page); + char *src = kmap_local_page(src_page); + + memmove(dst + dst_off, src + src_off, len); + kunmap_local(src); + kunmap_local(dst); +} + +static inline void memset_page(struct page *page, size_t offset, int val, + size_t len) +{ + char *addr = kmap_local_page(page); + + memset(addr + offset, val, len); + kunmap_local(addr); +} + static inline void memcpy_from_page(char *to, struct page *page, size_t offset, size_t len) { -- 2.28.0.rc0.12.gb6a658bd00c9