Anzeige:
Ergebnis 1 bis 5 von 5

Thema: SegFault in down(semaphore *sem);

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456

    SegFault in down(semaphore *sem);

    Hallo Leute,

    wieder unser Treiber (Kernel 2.6, gcc 3), der Schwierigkeiten macht:

    wir haben einen Absturz des Treibers in der Deinitialisierung des selbigen, sprich als Reaktion auf rmmod. Wir bekommen immer eine Zugriffsverletzung bei einem Zugriff auf einen Null-Zeiger in der Funktion down(struct semaphore *sem). Wir wissen, daß die an die Funktion übergebene Semaphoren-Struktur korrekt ist. Trotzdem schmiert die Funktion ab. Wir finden den Fehler absolut nicht. Unsere eingebauten printks sagen uns, daß der Absturz definitiv in der down-Funktion passiert. Das printk davor kommt noch raus, das printk danach nicht mehr. Ich hab mir die Adresse der Semaphore mal ausgeben lassen und sie ist korrekt. Trotzdem faselt der Treiber beim Absturz was von 'nem Null-Zeiger an der Stelle. Ich versteh das nicht. Hier mal der Code:

    Code:
      for (n = 0; n < MAX_IMAGE_COUNT; n++) {
    	  printk("MAX_IMAGE_COUNT = %i\n",MAX_IMAGE_COUNT);
    	  printk("n = %i\n",n);
    	  printk("SEMAPHORE\n");
    	  printk("count = %08x\n",&sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock.count);
    	  printk("sleepers = %08x\n",&sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock.sleepers);
    	  printk("wait = %08x\n",&sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock.wait);
    
      	  printk("WIEDER %08x\n", sgd);
      	  printk("ctrl.un.im  IMAGE_INDEX: %08x\n", &sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)]);
      	  printk("ctrl.un.im  IMAGE_INDEX: %08x\n", &sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock);
      	  printk("BLABLIBLUBB\n");
        down(&sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock);
          printk("GOTT.\n");
        if (ACTIVE_IMAGE(n, it_pci_target)) {
          ioctl_delete_pcti(n);
        }
        printk("HALLO 1.\n");
        up(&sgd->ctrl.un.im[IMAGE_INDEX(n, it_pci_target)].sem_lock);
        down(&sgd->ctrl.un.im[IMAGE_INDEX(n, it_vme_slave)].sem_lock);
        if (ACTIVE_IMAGE(n, it_vme_slave)) {
          ioctl_delete_vsli(n);
        }
        printk("HALLO 2.\n");
        up(&sgd->ctrl.un.im[IMAGE_INDEX(n, it_vme_slave)].sem_lock);
      }
    ... wobei alle printks, die Adressen ausgeben sollen, korrekte Adressen ausgeben. "BLABLIBLUBB" kommt noch raus, "GOTT." nicht mehr.

    Wo ist der Fehler???

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Für alle, die im Detail wissen, was down(...) macht:

    wir kriegen eine Fehlermeldung, die besagt, daß der Kernel in der Funktion __down (eip = __down + 0x52/0xEF) einen NULL-Pointer nicht dereferenzieren kann (logisch), und daß der Prozessorregister edx = 0x00000000 ist. Die restlichen Register sind versorgt.

    Der an down(...) übergebene Zeiger auf struct semaphore ist ebenfalls gültig versorgt. Trotzdem raucht das Ding ab...

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Wenn nicht hier, wo kann ich dann solche systemnahen Sachen fragen?

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Hab ich gerade gesehen, da steht noch 'ne weitere Fehlermeldung, die da sinngemäß lautet:

    Code:
    Debug: sleeping function called from invalid context in include/linux/rwsem.h: in_atomic()...

    Was hat das zu bedeuten? Worauf deutet das hin? Wann tritt diese Meldung auf?


  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von 7.e.Q
    Wenn nicht hier, wo kann ich dann solche systemnahen Sachen fragen?
    Ich denke die Leute in der Newsgroup comp.os.linux.development.system (oder so ähnlich) sind da ganz gut.
    Bei Kernelsachen eventuell auch die Leute an der Quelle, sprich die Linux Kernel Mailingliste

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •