Commit 438b8e24 authored by Mike Rapoport's avatar Mike Rapoport Committed by Jonathan Corbet

docs/vm: active_mm.txt convert to ReST format

Just add a label for cross-referencing and indent the text to make it
``literal``
Signed-off-by: default avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent 86afad7d
List: linux-kernel .. _active_mm:
Subject: Re: active_mm
From: Linus Torvalds <torvalds () transmeta ! com>
Date: 1999-07-30 21:36:24
Cc'd to linux-kernel, because I don't write explanations all that often, =========
and when I do I feel better about more people reading them. Active MM
=========
On Fri, 30 Jul 1999, David Mosberger wrote: ::
>
> Is there a brief description someplace on how "mm" vs. "active_mm" in
> the task_struct are supposed to be used? (My apologies if this was
> discussed on the mailing lists---I just returned from vacation and
> wasn't able to follow linux-kernel for a while).
Basically, the new setup is: List: linux-kernel
Subject: Re: active_mm
From: Linus Torvalds <torvalds () transmeta ! com>
Date: 1999-07-30 21:36:24
Cc'd to linux-kernel, because I don't write explanations all that often,
and when I do I feel better about more people reading them.
On Fri, 30 Jul 1999, David Mosberger wrote:
>
> Is there a brief description someplace on how "mm" vs. "active_mm" in
> the task_struct are supposed to be used? (My apologies if this was
> discussed on the mailing lists---I just returned from vacation and
> wasn't able to follow linux-kernel for a while).
Basically, the new setup is:
- we have "real address spaces" and "anonymous address spaces". The - we have "real address spaces" and "anonymous address spaces". The
difference is that an anonymous address space doesn't care about the difference is that an anonymous address space doesn't care about the
...@@ -46,38 +54,38 @@ Basically, the new setup is: ...@@ -46,38 +54,38 @@ Basically, the new setup is:
anonymous process gets scheduled away, the borrowed address space is anonymous process gets scheduled away, the borrowed address space is
returned and cleared. returned and cleared.
To support all that, the "struct mm_struct" now has two counters: a To support all that, the "struct mm_struct" now has two counters: a
"mm_users" counter that is how many "real address space users" there are, "mm_users" counter that is how many "real address space users" there are,
and a "mm_count" counter that is the number of "lazy" users (ie anonymous and a "mm_count" counter that is the number of "lazy" users (ie anonymous
users) plus one if there are any real users. users) plus one if there are any real users.
Usually there is at least one real user, but it could be that the real Usually there is at least one real user, but it could be that the real
user exited on another CPU while a lazy user was still active, so you do user exited on another CPU while a lazy user was still active, so you do
actually get cases where you have a address space that is _only_ used by actually get cases where you have a address space that is _only_ used by
lazy users. That is often a short-lived state, because once that thread lazy users. That is often a short-lived state, because once that thread
gets scheduled away in favour of a real thread, the "zombie" mm gets gets scheduled away in favour of a real thread, the "zombie" mm gets
released because "mm_users" becomes zero. released because "mm_users" becomes zero.
Also, a new rule is that _nobody_ ever has "init_mm" as a real MM any Also, a new rule is that _nobody_ ever has "init_mm" as a real MM any
more. "init_mm" should be considered just a "lazy context when no other more. "init_mm" should be considered just a "lazy context when no other
context is available", and in fact it is mainly used just at bootup when context is available", and in fact it is mainly used just at bootup when
no real VM has yet been created. So code that used to check no real VM has yet been created. So code that used to check
if (current->mm == &init_mm) if (current->mm == &init_mm)
should generally just do should generally just do
if (!current->mm) if (!current->mm)
instead (which makes more sense anyway - the test is basically one of "do instead (which makes more sense anyway - the test is basically one of "do
we have a user context", and is generally done by the page fault handler we have a user context", and is generally done by the page fault handler
and things like that). and things like that).
Anyway, I put a pre-patch-2.3.13-1 on ftp.kernel.org just a moment ago, Anyway, I put a pre-patch-2.3.13-1 on ftp.kernel.org just a moment ago,
because it slightly changes the interfaces to accommodate the alpha (who because it slightly changes the interfaces to accommodate the alpha (who
would have thought it, but the alpha actually ends up having one of the would have thought it, but the alpha actually ends up having one of the
ugliest context switch codes - unlike the other architectures where the MM ugliest context switch codes - unlike the other architectures where the MM
and register state is separate, the alpha PALcode joins the two, and you and register state is separate, the alpha PALcode joins the two, and you
need to switch both together). need to switch both together).
(From http://marc.info/?l=linux-kernel&m=93337278602211&w=2) (From http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment