Skip to contentSkip to conversation

MegaRAID driver management char device moved to misc

PATCH In review [email protected] 3 participants 4 messages Feb 5, 2008 – Feb 8, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 5/13 MegaRAID driver management char device moved to misc

From: Thomas Horsten <[email protected]>

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).

Cc Neela Syam Kolli <[email protected]>
Cc "Ju, Seokmann" <[email protected]>

---

 drivers/scsi/megaraid/megaraid_mm.c |   20 +++++++++++++-------
 drivers/scsi/megaraid/megaraid_mm.h |    1 +
 2 files changed, 14 insertions(+), 7 deletions(-)
drivers/scsi/megaraid/megaraid_mm.c renamed from drivers/scsi/megaraid/megaraid_mm.c~megaraid-driver-management-char-device-moved-to-misc +13 -7
diff -puN drivers/scsi/megaraid/megaraid_mm.c~megaraid-driver-management-char-device-moved-to-misc drivers/scsi/megaraid/megaraid_mm.c
@@ -59,7 +59,6 @@ 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	= 0x02200207;
 
 static int adapters_count_g;
@@ -76,6 +75,12 @@ static const struct file_operations lsi_
 	.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
@@ -1184,15 +1189,16 @@ mraid_mm_teardown_dma_pools(mraid_mmadp_
 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);
@@ -1230,7 +1236,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);
drivers/scsi/megaraid/megaraid_mm.h renamed from drivers/scsi/megaraid/megaraid_mm.h~megaraid-driver-management-char-device-moved-to-misc +1 -0
diff -puN drivers/scsi/megaraid/megaraid_mm.h~megaraid-driver-management-char-device-moved-to-misc drivers/scsi/megaraid/megaraid_mm.h
@@ -22,6 +22,7 @@
 #include <linux/moduleparam.h>
 #include <linux/pci.h>
 #include <linux/list.h>
+#include <linux/miscdevice.h>
 
 #include "mbox_defs.h"
 #include "megaraid_ioctl.h"

_

maintainer
#1 lore raw
Quoted 19 lines · On Mon, 2008-02-04 at 23:53 -0800, [email protected] wrote:

From: Thomas Horsten <[email protected]>

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).

Quoted 7 lines

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).

Cc Neela Syam Kolli <[email protected]>
Cc "Ju, Seokmann" <[email protected]>

Neela and Sekomann or Sumant, can I ping on this ... I've no idea what this will do to the raid management tools, so I really need someone to sign off on this.

James

#2 lore raw

RE: [patch 05/13] MegaRAID driver management char device moved tomisc

James, I acked this patch on 11/28.

We are fine with the change proposed.

Regards,

Sumant

-----Original Message-----
From: James Bottomley [mailto:[email protected]]
Sent: Thursday, February 07, 2008 4:41 PM
To: [email protected]
Cc: [email protected]; [email protected]; Kolli, Neela; [email protected]; [email protected]; Patro, Sumant
Subject: Re: [patch 05/13] MegaRAID driver management char device moved tomisc

Quoted 11 lines · On Mon, 2008-02-04 at 23:53 -0800, [email protected] wrote:

From: Thomas Horsten <[email protected]>

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.

Quoted 8 lines

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.

Quoted 3 lines

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).

Quoted 4 lines

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).

Quoted 5 lines
Cc Neela Syam Kolli <[email protected]>
Cc "Ju, Seokmann" <[email protected]>

Neela and Sekomann or Sumant, can I ping on this ... I've no idea what this will do to the raid management tools, so I really need someone to sign off on this.

James

maintainer
#3 lore raw

RE: [patch 05/13] MegaRAID driver management char device moved tomisc

Quoted 1 line · Sumant

James, I acked this patch on 11/28.

Sorry about that ... that's in the window where my server dropped of the internet while I was on holiday, so I didn't get the email, I'm afraid

Quoted 1 line

We are fine with the change proposed.

Great, will add it.

James