VirtualBox

Ignore:
Timestamp:
Jun 25, 2008 10:59:21 AM (17 years ago)
Author:
vboxsync
Message:

vboxadd linux additions kernel module: properly register a misc device if the device major was not specified (as by default) -- fixes udev integration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/linux/module/vboxmod.c

    r8967 r9903  
    7272#include <iprt/asm.h>
    7373#include <iprt/assert.h>
     74#include <linux/miscdevice.h>
    7475
    7576#define xstr(s) str(s)
     
    613614};
    614615
     616static struct miscdevice gMiscDevice =
     617{
     618    minor:      MISC_DYNAMIC_MINOR,
     619    name:       "vboxadd",
     620    fops:       &vbox_fops
     621};
     622
    615623#ifndef IRQ_RETVAL
    616624/* interrupt handlers in 2.4 kernels don't return anything */
     
    882890            VBOX_VERSION_STRING));
    883891    /* register a character device */
    884     err = register_chrdev(vbox_major, "vboxadd", &vbox_fops);
    885     if (err < 0 || ((vbox_major & err) || (!vbox_major && !err)))
    886     {
    887         LogRelFunc(("register_chrdev failed: vbox_major: %d, err = %d\n",
    888                      vbox_major, err));
    889         PCI_DEV_PUT(pcidev);
    890         return -ENODEV;
    891     }
    892     /* if no major code was set, take the return value */
    893     if (!vbox_major)
    894         vbox_major = err;
     892    if (vbox_major > 0)
     893    {
     894        err = register_chrdev(vbox_major, "vboxadd", &vbox_fops);
     895        if (err < 0 || (vbox_major & err) || (!vbox_major && !err))
     896        {
     897            LogRelFunc(("register_chrdev failed: vbox_major: %d, err = %d\n",
     898                        vbox_major, err));
     899            PCI_DEV_PUT(pcidev);
     900            return -ENODEV;
     901        }
     902        /* if no major code was set, take the return value */
     903        if (!vbox_major)
     904            vbox_major = err;
     905    }
     906    else
     907    {
     908        err = misc_register(&gMiscDevice);
     909        if (err)
     910        {
     911            LogRelFunc(("misc_register failed (rc=%d)\n", err));
     912            return -ENODEV;
     913        }
     914    }
    895915
    896916    /* allocate and initialize device extension */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette