From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: Alexander Viro <viro@zeniv.linux.org.uk>,
Benjamin LaHaise <bcrl@kvack.org>,
Ira Weiny <ira.weiny@intel.com>,
Matthew Wilcox <matthew.wilcox@oracle.com>
Cc: linux-fsdevel@vger.kernel.org, linux-aio@kvack.org,
linux-kernel@vger.kernel.org, Jeff Moyer <jmoyer@redhat.com>,
Kent Overstreet <kent.overstreet@linux.dev>
Subject: Re: [PATCH v3] fs/aio: Replace kmap{,_atomic}() with kmap_local_page()
Date: Fri, 09 Jun 2023 17:04:56 +0200 [thread overview]
Message-ID: <23757331.ouqheUzb2q@suse> (raw)
In-Reply-To: <20230119162055.20944-1-fmdefrancesco@gmail.com>
On giovedì 19 gennaio 2023 17:20:55 CEST Fabio M. De Francesco wrote:
> The use of kmap() and kmap_atomic() are being deprecated in favor of
> kmap_local_page().
According to a suggestion by Matthew, I just sent another patch which stops
allocating aio rings from ZONE_HIGHMEM.[1]
Therefore, please drop this patch.
Since the purpose of the new patch is entirely different from this, I changed
the subject and reset the version number to v1.
Thanks,
Fabio
[1] https://lore.kernel.org/lkml/20230609145937.17610-1-fmdefrancesco@gmail.com/
> There are two main problems with kmap(): (1) It comes with an overhead as
> the mapping space is restricted and protected by a global lock for
> synchronization and (2) it also requires global TLB invalidation when the
> kmap’s pool wraps and it might block when the mapping space is fully
> utilized until a slot becomes available.
>
> With kmap_local_page() the mappings are per thread, CPU local, can take
> page faults, and can be called from any context (including interrupts).
> It is faster than kmap() in kernels with HIGHMEM enabled. Furthermore,
> the tasks can be preempted and, when they are scheduled to run again, the
> kernel virtual addresses are restored and still valid.
>
> The use of kmap_local_page() in fs/aio.c is "safe" in the sense that the
> code don't hands the returned kernel virtual addresses to other threads
> and there are no nesting which should be handled with the stack based
> (LIFO) mappings/un-mappings order. Furthermore, the code between the old
> kmap_atomic()/kunmap_atomic() did not depend on disabling page-faults
> and/or preemption, so that there is no need to call pagefault_disable()
> and/or preempt_disable() before the mappings.
>
> Therefore, replace kmap() and kmap_atomic() with kmap_local_page() in
> fs/aio.c.
>
> Tested with xfstests on a QEMU/KVM x86_32 VM, 6GB RAM, booting a kernel
> with HIGHMEM64GB enabled.
>
> Cc: "Venkataramanan, Anirudh" <anirudh.venkataramanan@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>
> Reviewed-by: Ira Weiny <ira.weiny@intel.com>
> Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
> Reviewed-by: Kent Overstreet <kent.overstreet@linux.dev>
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> ---
prev parent reply other threads:[~2023-06-09 15:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-19 16:20 [PATCH v3] fs/aio: Replace kmap{,_atomic}() with kmap_local_page() Fabio M. De Francesco
2023-03-03 5:23 ` Fabio M. De Francesco
2023-03-27 10:08 ` Fabio M. De Francesco
2023-03-27 13:22 ` Matthew Wilcox
2023-03-27 18:37 ` Kent Overstreet
2023-06-07 14:59 ` Fabio M. De Francesco
2023-06-09 15:04 ` Fabio M. De Francesco [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=23757331.ouqheUzb2q@suse \
--to=fmdefrancesco@gmail.com \
--cc=bcrl@kvack.org \
--cc=ira.weiny@intel.com \
--cc=jmoyer@redhat.com \
--cc=kent.overstreet@linux.dev \
--cc=linux-aio@kvack.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew.wilcox@oracle.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.