IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Noyau - Mmap personnalisé non fonctionnel


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut Noyau - Mmap personnalisé non fonctionnel
    Bonjour !!
    Je suis en train d'essayer d'utiliser un module de Xen, GNTDEV, qui fournit plusieurs commandes ioctl et une implémentation de la fonction mmap. L'implémentation de cette fonction au sein du module est bien indiquée dans la structure file_operations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    static const struct file_operations gntdev_fops = {
             .owner = THIS_MODULE,
             .open = gntdev_open,
             .release = gntdev_release,
             .mmap = gntdev_mmap2,
             .unlocked_ioctl = gntdev_ioctl
     };
    L'emploi des commandes ioctl du module fonctionne correctement, mais l'appel à la fonction mmap échoue systématiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if((status = mmap(NULL, page_num * PAGE_SIZE, PROT_READ|PROT_WRITE, VM_SHARED, fd, map.index)) == (void *)-1){
        printf("Status : %p %d\n", status, status);
        perror("mmap :");
        close(fd);
        return -1;
    }
    printf("Adress : %p\n", status);
    desc_t * infos = (desc_t *)status;
     
    > Status : 0xffffffffffffffff -1
    > mmap :: Invalid argument
    On voit ci-dessus que la fonction a échoué en renvoyant l'adresse -1 et en mettant errno à EINVAL. Mon premier réflexe a été de regarder le fonctionnement de gntdev_mmap2 pour trouver quel argument n'était pas conforme à l'emploi qui en est fait dans la fonction. J'ai donc mis des printk(__LINE__) dans la fonction pour observer rapidement à quelle ligne se posait le problème. Et là, incompréhension, le programme ne rentre jamais dans la fonction. Comme un ensemble de traitement est effectué avant l'appel à la fonction mmap elle-même, j'ai essayé de modifier les arguments passés à mmap pour observer ce qu'il se passe lorsque l'on simplifie l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mmap(NULL, 4, 0, 0, fd, 0)
    mmap(NULL, 4, PROT_READ|PROT_WRITE, 0, fd, 0)
    Les erreurs persistent et le programme ne rentre toujours pas dans gntdev_mmap2.
    J'ai testé la validité du descripeur avec la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int fd_is_valid(int fd)
    {
        return fcntl(fd, F_GETFD) != -1 || errno != EBADF;
    }
    Le descripteur est valide.
    Quelqu'un a-t'il une idée sur l'erreur qui se produit dans ce programme svp ?

    Merci !!!

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Résolu !! L'emploi du VM_SHARED fait planter l'appel-système. J'utilise le traditionnel MAP_SHARED à la place

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Flash Disque non fonctionnel
    Par stanley dans le forum Composants
    Réponses: 2
    Dernier message: 18/07/2006, 12h18
  2. Code non fonctionnel sous IE
    Par Nip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2006, 14h59
  3. timage non fonctionnel !!
    Par micky13 dans le forum Delphi
    Réponses: 5
    Dernier message: 13/05/2006, 07h21
  4. Update non fonctionnel
    Par kissmytoe dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 18h37
  5. [REPORTS] Order BY non fonctionnel
    Par sdiack dans le forum Reports
    Réponses: 2
    Dernier message: 10/02/2006, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo