public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Eric Lacombe <tuxiko@free.fr>
Cc: linux-kernel@vger.kernel.org, goretux@gmail.com
Subject: Re: [x86] fs, gs purpose & multicore prog
Date: Thu, 04 Sep 2008 09:49:42 -0700	[thread overview]
Message-ID: <48C011A6.2000609@goop.org> (raw)
In-Reply-To: <200809031109.45660.goretux@gmail.com>

Eric Lacombe wrote:
> Hello,
>
> I've some questions about IA-32e in Linux.
>
> - What is the FS and GS segments role inside the kernel ?
> (I was thinking about thread local storage)
>   

In a 32-bit kernel %fs is the base of the per-cpu data area.  In a
64-bit kernel %gs points to the pda (processor data area).  The pda is a
single structure, whereas per-cpu data is a section that per-cpu
variables get put into.

> - When I do a "mov %fs ..." instruction (in a module), it seems that %fs is 
> equal to 0 (idem for %gs). Are these registers not always filled ?
>   

On 32-bit they will always have a value, or you'll get a GPF.  On 64-bit
the value of the selector doesn't matter because the MSRs are the real
content.

> - What is the purpose of MSR_FS_BASE and MSR_GS_BASE ? 
> (I thought they were filled with "gdt[fs_entry].base")
>   
On 64-bit, the GDT isn't large enough to hold a 64-bit offset, so it
only stores the low 32-bits.  When you load a segment register with a
selector, it picks up from the gdt.  If you want a full 64-bit offset,
you need to write it to the msr.

> - My last question is about the kernel programation of multi-core (or 
> multiprocessor)
> architecture. I don't see a lot of documentation about that on Internet.
> Do you have some docs/urls about this topic.
> Maybe someone can briefly explain how the execution flow are given to the 
> different cores.
>   

To the kernel they're all just cpus, and it runs tasks on them as
usual.  There are a few tweaks in the scheduler to pay attention to the
shared caches and so on.

    J

  reply	other threads:[~2008-09-04 16:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-03  9:09 [x86] fs, gs purpose & multicore prog Eric Lacombe
2008-09-04 16:49 ` Jeremy Fitzhardinge [this message]
2008-09-05 11:17   ` Eric Lacombe
2008-09-05 14:51     ` Jeremy Fitzhardinge
2008-09-05 23:09       ` Eric Lacombe
2008-09-06  5:38         ` Jeremy Fitzhardinge

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=48C011A6.2000609@goop.org \
    --to=jeremy@goop.org \
    --cc=goretux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tuxiko@free.fr \
    /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