Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[safe/jmp/linux-2.6] / drivers / scsi / megaraid / megaraid_mm.c
index f33a678..f680561 100644 (file)
@@ -14,7 +14,8 @@
  *
  * Common management module
  */
-
+#include <linux/sched.h>
+#include <linux/smp_lock.h>
 #include "megaraid_mm.h"
 
 
@@ -59,8 +60,7 @@ EXPORT_SYMBOL(mraid_mm_register_adp);
 EXPORT_SYMBOL(mraid_mm_unregister_adp);
 EXPORT_SYMBOL(mraid_mm_adapter_app_handle);
 
-static int majorno;
-static uint32_t drvr_ver       = 0x02200206;
+static uint32_t drvr_ver       = 0x02200207;
 
 static int adapters_count_g;
 static struct list_head adapters_list_g;
@@ -76,6 +76,12 @@ static const struct file_operations lsi_fops = {
        .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
  * @inode      : unused
@@ -91,6 +97,7 @@ mraid_mm_open(struct inode *inode, struct file *filep)
         */
        if (!capable(CAP_SYS_ADMIN)) return (-EACCES);
 
+       cycle_kernel_lock();
        return 0;
 }
 
@@ -890,12 +897,11 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp)
        if (lld_adp->drvr_type != DRVRTYPE_MBOX)
                return (-EINVAL);
 
-       adapter = kmalloc(sizeof(mraid_mmadp_t), GFP_KERNEL);
+       adapter = kzalloc(sizeof(mraid_mmadp_t), GFP_KERNEL);
 
        if (!adapter)
                return -ENOMEM;
 
-       memset(adapter, 0, sizeof(mraid_mmadp_t));
 
        adapter->unique_id      = lld_adp->unique_id;
        adapter->drvr_type      = lld_adp->drvr_type;
@@ -923,7 +929,7 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp)
                        !adapter->pthru_dma_pool) {
 
                con_log(CL_ANN, (KERN_WARNING
-                       "megaraid cmm: out of memory, %s %d\n", __FUNCTION__,
+                       "megaraid cmm: out of memory, %s %d\n", __func__,
                        __LINE__));
 
                rval = (-ENOMEM);
@@ -951,7 +957,7 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp)
 
                        con_log(CL_ANN, (KERN_WARNING
                                "megaraid cmm: out of memory, %s %d\n",
-                                       __FUNCTION__, __LINE__));
+                                       __func__, __LINE__));
 
                        rval = (-ENOMEM);
 
@@ -1185,15 +1191,16 @@ mraid_mm_teardown_dma_pools(mraid_mmadp_t *adp)
 static int __init
 mraid_mm_init(void)
 {
+       int err;
+
        // Announce the driver version
        con_log(CL_ANN, (KERN_INFO "megaraid cmm: %s %s\n",
                LSI_COMMON_MOD_VERSION, LSI_COMMON_MOD_EXT_VERSION));
 
-       majorno = register_chrdev(0, "megadev", &lsi_fops);
-
-       if (majorno < 0) {
-               con_log(CL_ANN, ("megaraid cmm: cannot get major\n"));
-               return majorno;
+       err = misc_register(&megaraid_mm_dev);
+       if (err < 0) {
+               con_log(CL_ANN, ("megaraid cmm: cannot register misc device\n"));
+               return err;
        }
 
        init_waitqueue_head(&wait_q);
@@ -1231,7 +1238,7 @@ mraid_mm_exit(void)
 {
        con_log(CL_DLEVEL1 , ("exiting common mod\n"));
 
-       unregister_chrdev(majorno, "megadev");
+       misc_deregister(&megaraid_mm_dev);
 }
 
 module_init(mraid_mm_init);