Message ID | b2fd8c52429b51fc0c060753e6b616f1edf81d92.1702020689.git.chen.haonan2@zte.com.cn |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7117397vqy; Mon, 11 Dec 2023 07:08:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IFtMNtWzK3odJAR7p7IOQEFCT954LkDoFsQLsl4q5n0X3CkE4gl2JZnUsK0V2Rtg939Khr7 X-Received: by 2002:a05:6a00:1951:b0:6ce:450e:4e66 with SMTP id s17-20020a056a00195100b006ce450e4e66mr2460404pfk.10.1702307307269; Mon, 11 Dec 2023 07:08:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702307307; cv=none; d=google.com; s=arc-20160816; b=zt6P6hFRb/PG8XhnPBs7Hw77MqgfMB2JY1j+HedLQRWUEy2AIJpzApaU5NM+Sh6W+o NjlE9+XEOoFkyWiwJod3rxVQZOsmKkjBHuUCAKKNY6g8hBkNzEtofUaN3V67FHPiwuri n0lJNjw+/FVsk0GoWydPn+R20jB60bO8gLarh5xjFQwVOQUTbHhHVGkILuwDeQ0m1mrL h9GaMaDANIsY2aTPD3q9gbN/0c3cEcX+b+g3rzCW9cZHQZ0Erqhk19SyegXeW6YcjveT OEUpZj8oI2OFgvRHhkbq4MOtZtAI0QC8aqUOZW5h6uAPs2jSuYiAHZxeXr8Z5r67oJDu bO5Q== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=fHo18EM+IcnpLBqW24a0AePPsWSsCxUc4nRjtM6qLxY=; fh=n5PpQcsdd74wbx+RLjqO5/gdkePKwvUd4w5zs86sKIc=; b=ndLq41KO+5Xpkq02AdPrLCLqUrjdZ+fntW7KUaYEXnzlqTuX+/eEcM36xSS7yw5iVP 7n/mL9TvvCKPRoVr7fkPrcUbKw8g7GJ8/5cpO57RWlH1dgYXm3HRzgkOwX4kacDySZXt SbAIHOVKF5rV01TRCSdJTZSR9c76Q+VN/qQnX3wl0M69zAc+gc0+olBsH6tu3rwI82UU n01ldOcoJsSC7SYMEkCkM2z4sJcpqOnwDTqxxEWX+lggJICjvjTWZh3rtFHCgunDdfpT kZBmhnMCV2JORAhan86oLn3M8pJtPgug7zAgickieugQbxln4dxcS1ZlqbDxgvAse6XV sjLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@163.com header.s=s110527 header.b=jY7hqMIZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=163.com Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id p9-20020a056a000b4900b006cdf0b9051dsi6239286pfo.186.2023.12.11.07.08.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 07:08:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@163.com header.s=s110527 header.b=jY7hqMIZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=163.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id AFC14805C3FE; Mon, 11 Dec 2023 07:08:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343992AbjLKPIK (ORCPT <rfc822;dexuan.linux@gmail.com> + 99 others); Mon, 11 Dec 2023 10:08:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343886AbjLKPIJ (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 11 Dec 2023 10:08:09 -0500 X-Greylist: delayed 903 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 11 Dec 2023 07:08:14 PST Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.214]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 322E8D6; Mon, 11 Dec 2023 07:08:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=fHo18 EM+IcnpLBqW24a0AePPsWSsCxUc4nRjtM6qLxY=; b=jY7hqMIZSjO2fVU++2hiR pmXvJrXqrGh9gg76HzxuZWLuypmIk5EkGQ2SgnbwwzwWEFjAoaNyAk8LdgkVim5N 9CsAobMQv14zYiUVreMgHeoXvWRxExYe/8PgH4NhprPevMolo/sro3VTZApHBpO3 V5ngZlGu7XQ47KDL5K4RDE= Received: from ubuntu22.localdomain (unknown [117.176.219.50]) by zwqz-smtp-mta-g5-3 (Coremail) with SMTP id _____wDXn1gqIndlz9+RFQ--.6479S2; Mon, 11 Dec 2023 22:52:27 +0800 (CST) From: chenguanxi11234@163.com To: rafael@kernel.org Cc: pavel@ucw.cz, len.brown@intel.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Chen Haonan <chen.haonan2@zte.com.cn> Subject: [PATCH linux-next] kernel/power: Use kmap_local_page() in snapshot.c Date: Mon, 11 Dec 2023 22:52:24 +0800 Message-Id: <b2fd8c52429b51fc0c060753e6b616f1edf81d92.1702020689.git.chen.haonan2@zte.com.cn> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: _____wDXn1gqIndlz9+RFQ--.6479S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7WF13CFy5Aw45Xr43WFyDZFb_yoW8WrWkpF 43AFyDG3yYvFW8t342qF1v9ry5JwnIyw4fXrW3A3WfXrnxWwnIvr10qa1Ut3W3trW7JFWr ZrZrtFWvyFs5GwUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jtiSdUUUUU= X-Originating-IP: [117.176.219.50] X-CM-SenderInfo: xfkh0wxxdq5xirrsjki6rwjhhfrp/xtbBhhRD+lc664ndOwABsD X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 11 Dec 2023 07:08:24 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784998587228571673 X-GMAIL-MSGID: 1784998587228571673 |
Series |
[linux-next] kernel/power: Use kmap_local_page() in snapshot.c
|
|
Commit Message
chenguanxi11234@163.com
Dec. 11, 2023, 2:52 p.m. UTC
From: Chen Haonan <chen.haonan2@zte.com.cn> kmap_atomic() has been deprecated in favor of kmap_local_page(). Each call to kmap_atomic() in the kernel creates a non-preemptable segment and disables the missing page exception. This can be one of the sources of unexpected latency. Therefore users should choose kmap_local_page() over kmap_atomic(). Signed-off-by: Chen Haonan <chen.haonan2@zte.com.cn> --- kernel/power/snapshot.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
Comments
On Mon, Dec 11, 2023 at 3:52 PM <chenguanxi11234@163.com> wrote: > > From: Chen Haonan <chen.haonan2@zte.com.cn> > > kmap_atomic() has been deprecated in favor of kmap_local_page(). > > Each call to kmap_atomic() in the kernel creates a non-preemptable > segment and disables the missing page exception. This can be one of > the sources of unexpected latency. Therefore users should choose > kmap_local_page() over kmap_atomic(). Do you realize that the code being modified runs with only one CPU online and with interrupts off on that CPU? > Signed-off-by: Chen Haonan <chen.haonan2@zte.com.cn> > --- > kernel/power/snapshot.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c > index 50a15408c3fc..feef0d4d3288 100644 > --- a/kernel/power/snapshot.c > +++ b/kernel/power/snapshot.c > @@ -1487,11 +1487,11 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) > s_page = pfn_to_page(src_pfn); > d_page = pfn_to_page(dst_pfn); > if (PageHighMem(s_page)) { > - src = kmap_atomic(s_page); > - dst = kmap_atomic(d_page); > + src = kmap_local_page(s_page); > + dst = kmap_local_page(d_page); > zeros_only = do_copy_page(dst, src); > - kunmap_atomic(dst); > - kunmap_atomic(src); > + kunmap_local(dst); > + kunmap_local(src); > } else { > if (PageHighMem(d_page)) { > /* > @@ -1499,9 +1499,9 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) > * data modified by kmap_atomic() > */ > zeros_only = safe_copy_page(buffer, s_page); > - dst = kmap_atomic(d_page); > + dst = kmap_local_page(d_page); > copy_page(dst, buffer); > - kunmap_atomic(dst); > + kunmap_local(dst); > } else { > zeros_only = safe_copy_page(page_address(d_page), s_page); > } > -- > 2.25.1 >
What I've learned is that kmap_atomic() disables page-faults and preemption (the latter only for !PREEMPT_RT kernels).In my opinion, the code between the mapping and un-mapping in this patch does not depend on the above-mentioned side effects.So I simply replaced kmap_atomic() with kmap_local_page(). If I'm wrong, please explain it to me. Thank you. > >> Signed-off-by: Chen Haonan <chen.haonan2@zte.com.cn> >> --- >> kernel/power/snapshot.c | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) >> diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c >> index 50a15408c3fc..feef0d4d3288 100644 >> --- a/kernel/power/snapshot.c >> +++ b/kernel/power/snapshot.c >> @@ -1487,11 +1487,11 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) >> s_page = pfn_to_page(src_pfn); >> d_page = pfn_to_page(dst_pfn); >> if (PageHighMem(s_page)) { >> - src = kmap_atomic(s_page); >> - dst = kmap_atomic(d_page); >> + src = kmap_local_page(s_page); >> + dst = kmap_local_page(d_page); >> zeros_only = do_copy_page(dst, src); >> - kunmap_atomic(dst); >> - kunmap_atomic(src); >> + kunmap_local(dst); >> + kunmap_local(src); >> } else { >> if (PageHighMem(d_page)) { >> /* >> @@ -1499,9 +1499,9 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) >> * data modified by kmap_atomic() >> */ >> zeros_only = safe_copy_page(buffer, s_page); >> - dst = kmap_atomic(d_page); >> + dst = kmap_local_page(d_page); >> copy_page(dst, buffer); >> - kunmap_atomic(dst); >> + kunmap_local(dst); >> } else { >> zeros_only = safe_copy_page(page_address(d_page), s_page); >> } >> -- >> 2.25.1 >>
On Tue, Dec 12, 2023 at 3:38 PM <chenguanxi11234@163.com> wrote: > > What I've learned is that kmap_atomic() disables page-faults and > preemption (the latter only for !PREEMPT_RT kernels).In my opinion, > the code between the mapping and un-mapping in this patch does not > depend on the above-mentioned side effects.So I simply replaced > kmap_atomic() with kmap_local_page(). If I'm wrong, please explain it to me. You are right, but why don't you say the above in the patch changelog instead of the irrelevant information that is there now?
Thanks for your explanation, I have modified my description information and submitted the updated version of patch.
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 50a15408c3fc..feef0d4d3288 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1487,11 +1487,11 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) s_page = pfn_to_page(src_pfn); d_page = pfn_to_page(dst_pfn); if (PageHighMem(s_page)) { - src = kmap_atomic(s_page); - dst = kmap_atomic(d_page); + src = kmap_local_page(s_page); + dst = kmap_local_page(d_page); zeros_only = do_copy_page(dst, src); - kunmap_atomic(dst); - kunmap_atomic(src); + kunmap_local(dst); + kunmap_local(src); } else { if (PageHighMem(d_page)) { /* @@ -1499,9 +1499,9 @@ static bool copy_data_page(unsigned long dst_pfn, unsigned long src_pfn) * data modified by kmap_atomic() */ zeros_only = safe_copy_page(buffer, s_page); - dst = kmap_atomic(d_page); + dst = kmap_local_page(d_page); copy_page(dst, buffer); - kunmap_atomic(dst); + kunmap_local(dst); } else { zeros_only = safe_copy_page(page_address(d_page), s_page); }