forked from Minki/linux
[SCSI] MegaRAID driver management char device moved to misc
The MegaRAID driver's common management module (megaraid_mm.c) creates a char device used by the management tool "megarc" from LSI Logic (and possibly other management tools). In 2.6 with udev, this device doesn't get created because it is not registered in sysfs. I first fixed this by registering a class "megaraid_mm", but realized that this should probably be moved to misc devices, instead of taking up a char major. This is because only 1 device is used, even if there are multiple adapters - the minor is never used (the adapter info is in the ioctl block sent to the driver, not detected based on the minor number as one might think). So it is a complete waste to have an entire major taken by this. So it now uses a misc device which I named "megadev0" (the name that megarc expects), and has a dynamic minor (previoulsy a dynamic major was used). I have tested this on my own system with the megarc tool, and it works just as fine as before (only now the device gets created correctly by udev). Acked-by: "Patro, Sumant" <Sumant.Patro@lsi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
7d5d408c77
commit
90a95af85f
@ -59,7 +59,6 @@ EXPORT_SYMBOL(mraid_mm_register_adp);
|
|||||||
EXPORT_SYMBOL(mraid_mm_unregister_adp);
|
EXPORT_SYMBOL(mraid_mm_unregister_adp);
|
||||||
EXPORT_SYMBOL(mraid_mm_adapter_app_handle);
|
EXPORT_SYMBOL(mraid_mm_adapter_app_handle);
|
||||||
|
|
||||||
static int majorno;
|
|
||||||
static uint32_t drvr_ver = 0x02200207;
|
static uint32_t drvr_ver = 0x02200207;
|
||||||
|
|
||||||
static int adapters_count_g;
|
static int adapters_count_g;
|
||||||
@ -76,6 +75,12 @@ static const struct file_operations lsi_fops = {
|
|||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct miscdevice megaraid_mm_dev = {
|
||||||
|
.minor = MISC_DYNAMIC_MINOR,
|
||||||
|
.name = "megadev0",
|
||||||
|
.fops = &lsi_fops,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mraid_mm_open - open routine for char node interface
|
* mraid_mm_open - open routine for char node interface
|
||||||
* @inode : unused
|
* @inode : unused
|
||||||
@ -1184,15 +1189,16 @@ mraid_mm_teardown_dma_pools(mraid_mmadp_t *adp)
|
|||||||
static int __init
|
static int __init
|
||||||
mraid_mm_init(void)
|
mraid_mm_init(void)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
// Announce the driver version
|
// Announce the driver version
|
||||||
con_log(CL_ANN, (KERN_INFO "megaraid cmm: %s %s\n",
|
con_log(CL_ANN, (KERN_INFO "megaraid cmm: %s %s\n",
|
||||||
LSI_COMMON_MOD_VERSION, LSI_COMMON_MOD_EXT_VERSION));
|
LSI_COMMON_MOD_VERSION, LSI_COMMON_MOD_EXT_VERSION));
|
||||||
|
|
||||||
majorno = register_chrdev(0, "megadev", &lsi_fops);
|
err = misc_register(&megaraid_mm_dev);
|
||||||
|
if (err < 0) {
|
||||||
if (majorno < 0) {
|
con_log(CL_ANN, ("megaraid cmm: cannot register misc device\n"));
|
||||||
con_log(CL_ANN, ("megaraid cmm: cannot get major\n"));
|
return err;
|
||||||
return majorno;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init_waitqueue_head(&wait_q);
|
init_waitqueue_head(&wait_q);
|
||||||
@ -1230,7 +1236,7 @@ mraid_mm_exit(void)
|
|||||||
{
|
{
|
||||||
con_log(CL_DLEVEL1 , ("exiting common mod\n"));
|
con_log(CL_DLEVEL1 , ("exiting common mod\n"));
|
||||||
|
|
||||||
unregister_chrdev(majorno, "megadev");
|
misc_deregister(&megaraid_mm_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(mraid_mm_init);
|
module_init(mraid_mm_init);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
|
#include <linux/miscdevice.h>
|
||||||
|
|
||||||
#include "mbox_defs.h"
|
#include "mbox_defs.h"
|
||||||
#include "megaraid_ioctl.h"
|
#include "megaraid_ioctl.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user