Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       subpage_prot - Définir une protection des sous-pages pour un intervalle d'adresses

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <sys/syscall.h>      /* Définition des constantes SYS_* */
       #include <unistd.h>

       int syscall(SYS_subpage_prot, unsigned long addr, unsigned long len,
                   uint32_t *map);

       Remarque: la glibc ne fournit pas d'enveloppe pour subpage_prot(), imposant l'utilisation de syscall(2).

DESCRIPTION

       L'appel système subpage_prot() spécifique aux PowerPC fournit la possibilité de contrôler les permissions
       d'accès  sur  des sous-pages individuelles de 4 ko sur des systèmes configurés avec une taille de page de
       64 ko.

       La table de protection est appliquée aux pages de mémoire dans la région démarrant  à  addr  et  sur  len
       octets. Ces deux paramètres doivent être alignés sur des frontières de 64 ko.

       La  table  de  protection  est  spécifiée  dans  le  tampon dont l'adresse est fournie dans map. La table
       contient 2 bits par sous-page de  4 ko ;  ainsi  chaque  mot  de  32 bits  spécifie  les  protections  de
       16 sous-pages  de 4 ko dans une page de 64 ko (on voit donc que le nombre de mots 32 bits pointés par map
       doit valoir le nombre de pages de 64 ko indiqué par len).  Chaque  champ  de  2 bits  dans  la  table  de
       protection  vaut  soit  0  pour  autoriser tout accès, soit 1 pour interdire l'écriture, soit 2 ou 3 pour
       interdire tout accès.

VALEUR RENVOYÉE

       S'il réussit subpage_prot() renvoie 0. Sinon, il renvoie un des codes d'erreur définis ci-dessous.

ERREURS

       EFAULT Le tampon indiqué par map n'est pas accessible.

       EINVAL Les paramètres addr ou len sont incorrects. Ces  deux  paramètres  doivent  être  alignés  sur  un
              multiple de taille de page du système, et ne doivent pas désigner une région en dehors de l'espace
              d'adressage du processus ou une région qui contient des pages immenses.

       ENOMEM Plus assez de mémoire.

VERSIONS

       Cet appel système est disponible sur les architectures PowerPC depuis Linux 2.6.25. L'appel système n'est
       disponible  que  si  le  noyau  a  été  configuré  avec CONFIG_PPC_64K_PAGES. Aucune prise en charge dans
       l'espace utilisateur n'est disponible.

STANDARDS

       Cet appel système est spécifique à Linux.

NOTES

       Les protections de page habituelles (au niveau de chaque page de 64 ko) s'appliquent aussi ; le mécanisme
       de protection des sous-pages est une contrainte supplémentaire, ainsi un 0 dans un champ  sur  2 bits  ne
       permettra pas d'écrire sur une page qui est par ailleurs protégée en écriture.

   Justification
       Cet  appel  système est fourni pour aider l'écriture d'émulateurs qui opèrent avec des pages de 64 ko sur
       des systèmes PowerPC. Quand on émule des systèmes x86, qui  utilisent  une  taille  de  page  inférieure,
       l'émulateur  ne  peut  plus utiliser l'unité de gestion de la mémoire (memory-management unit, ou MMU) et
       les appels système habituels pour contrôler les protections de pages (l'émulateur pourrait émuler le  MMU
       en  vérifiant,  et éventuellement traduisant, chaque adresse mémoire, mais cela est lent). L'idée est que
       l'émulateur fournisse un tableau de masques de protections à appliquer sur un intervalle donné d'adresses
       virtuelles. Ces masques sont appliqués au niveau où les entrées de tables de pages  (page-table  entries,
       ou  PTE)  matérielles  sont insérées dans la table de pages matérielles basées sur les PTE Linux, si bien
       que les PTE Linux ne sont pas affectées. Il en résulte que les régions de l'espace d'adressage  qui  sont
       protégées  basculent  vers des pages matérielles de 4 ko au lieu de 64 ko (pour les machines qui prennent
       en charge des pages matérielles de 64 ko).

VOIR AUSSI

       mprotect(2), syscall(2)

       Documentation/admin-guide/mm/hugetlbpage.rst dans les sources du noyau Linux.

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    4 décembre 2022                                 subpage_prot(2)