lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200809051317.11116.goretux@gmail.com>
Date:	Fri, 5 Sep 2008 13:17:10 +0200
From:	Eric Lacombe <tuxiko@...e.fr>
To:	Jeremy Fitzhardinge <jeremy@...p.org>
Cc:	linux-kernel@...r.kernel.org
Subject: Re: [x86] fs, gs purpose & multicore prog

Hi,

Thanks for your answers. I've some new questions now ;)

On Thursday 04 September 2008 18:49:42 Jeremy Fitzhardinge wrote:
> Eric Lacombe wrote:

> > - 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.

So, %gs is not used in 32-bit kernel and %fs is not used in 64-bit kernel. Is 
it right ? Why there were different choices of design ?

>
> > - 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.

ok, but what about the limits and access types?

>
> > - 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.

Ok, I just saw that a 64-bit base in segment descriptor is only available for 
the system descriptor.

>
> > - 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.

Ok, but how does the kernel technically run tasks on different processor (or 
core)? My question was ambiguous, I was not assuming that I knew how 
multiprocessor works.

Thanks again.

	Eric

>
>     J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ