linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Ira Weiny <ira.weiny@intel.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Will Deacon <will@kernel.org>,
	Peter Collingbourne <pcc@google.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	outreachy@lists.linux.dev, Jonathan Corbet <corbet@lwn.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH v3 4/4] Documentation/vm: Rework "Temporary Virtual Mappings" section
Date: Thu, 28 Apr 2022 13:14:30 +0200	[thread overview]
Message-ID: <6442788.4vTCxPXJkl@leap> (raw)
In-Reply-To: <YmpYEkvbJX2JBPvW@linutronix.de>

On giovedì 28 aprile 2022 11:02:10 CEST Sebastian Andrzej Siewior wrote:
> On 2022-04-27 20:38:21 [+0200], Fabio M. De Francesco wrote:
> > index e05bf5524174..c8aff448612b 100644
> > --- a/Documentation/vm/highmem.rst
> > +++ b/Documentation/vm/highmem.rst
> > @@ -50,26 +50,78 @@ space when they use mm context tags.
> …
> >  
> > -* kmap().  This permits a short duration mapping of a single page.  It 
needs
> > -  global synchronization, but is amortized somewhat.  It is also prone 
to
> > -  deadlocks when using in a nested fashion, and so it is not 
recommended for
> > -  new code.
> > +  These mappings are thread-local and CPU-local (i.e., migration from 
one CPU
> > +  to another is disabled - this is why they are called "local"), but 
they don't
> > +  disable preemption. 
> 
> So if you replace this block with
> 
>    These mappings are thread-local and CPU-local meaning that the mapping
>    can only be accessed from within this thread and the thread is bound 
the
>    CPU while the mapping is active. Even if the thread is preempted 
(since
>    preemption is never disabled by the function) the CPU can not be
>    unplugged from the system via CPU-hotplug until the mapping is 
disposed.

OK, I'm too wordy here :(

> The you could drop the latter block
> 
> >                          It's valid to take pagefaults in a local kmap 
region,
> > +  unless the context in which the local mapping is acquired does not 
allow it
> > +  for other reasons.
> 
> > +  kmap_local_page() always returns a valid virtual address and it is 
assumed
> > +  that kunmap_local() will never fail.
> 
> from here
> 
> > +  If a task holding local kmaps is preempted, the maps are removed on 
context
> > +  switch and restored when the task comes back on the CPU. The maps 
are
> > +  strictly thread-local and CPU-local, therefore it is guaranteed that 
the
> > +  task stays on the CPU and the CPU cannot be unplugged until the 
local kmaps
> > +  are released.
> 
> to here since it mostly the same thing.

I agree, this is redundant.

> 
> > +  Nesting kmap_local_page() and kmap_atomic() mappings is allowed to a 
certain
> > +  extent (up to KMAP_TYPE_NR) but their invocations have to be 
strictly ordered
> > +  because the map implementation is stack based. See kmap_local_page 
() kdocs
> 
> kmap_local_page () => kmap_local_page()

Sure, it's just a typo.

> > +  (included in the "Functions" section) for details on how to manage 
nested
> > +  mappings.
> >  
> >  * kmap_atomic().  This permits a very short duration mapping of a 
single
> >    page.  Since the mapping is restricted to the CPU that issued it, it
> >    performs well, but the issuing task is therefore required to stay on 
that
> >    CPU until it has finished, lest some other task displace its 
mappings.
> >  
> > -  kmap_atomic() may also be used by interrupt contexts, since it is 
does not
> > -  sleep and the caller may not sleep until after kunmap_atomic() is 
called.
> > +  kmap_atomic() may also be used by interrupt contexts, since it does 
not
> > +  sleep and the callers too may not sleep until after kunmap_atomic() 
is
> > +  called.
> > +
> > +  Each call of kmap_atomic() in the kernel creates a non-preemptible 
section
> > +  and disable pagefaults. This could be a source of unwanted latency, 
so it
> > +  should be only used if it is absolutely required, otherwise 
kmap_local_page()
> > +  should be used where it is feasible.
> 
> I'm not keen about the "absolutely required" wording and "feasible".
> That said, the other pieces look good, thank you for the work.

I'll rewrite the last part of this sentence as it follows:

+ should be only used if it is required, otherwise kmap_local_page()
+ should be preferred.

Thank you so much for the time you have spent for reviewing and helping,

Fabio



  reply	other threads:[~2022-04-28 11:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-27 18:38 [PATCH v3 0/4] Extend and reorganize Highmem's documentation Fabio M. De Francesco
2022-04-27 18:38 ` [PATCH v3 1/4] mm/highmem: Fix kernel-doc warnings in highmem*.h Fabio M. De Francesco
2022-04-28  9:11   ` Sebastian Andrzej Siewior
2022-04-28 10:54     ` Fabio M. De Francesco
2022-04-28 11:05       ` Sebastian Andrzej Siewior
2022-04-27 18:38 ` [PATCH v3 2/4] Documentation/vm: Include kdocs from highmem*.h into highmem.rst Fabio M. De Francesco
2022-04-27 18:38 ` [PATCH v3 3/4] Documentation/vm: Move "Using kmap-atomic" to highmem.h Fabio M. De Francesco
2022-04-27 18:38 ` [PATCH v3 4/4] Documentation/vm: Rework "Temporary Virtual Mappings" section Fabio M. De Francesco
2022-04-28  9:02   ` Sebastian Andrzej Siewior
2022-04-28 11:14     ` Fabio M. De Francesco [this message]
2022-04-28 16:34       ` Sebastian Andrzej Siewior

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=6442788.4vTCxPXJkl@leap \
    --to=fmdefrancesco@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bigeasy@linutronix.de \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ira.weiny@intel.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=outreachy@lists.linux.dev \
    --cc=pcc@google.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=vbabka@suse.cz \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).