* [PATCH 2/2] RE: How to add/drop SCSI drives from within the drive r?
@ 2004-12-10 1:21 Bagalkote, Sreenivas
2004-12-10 2:24 ` James Bottomley
0 siblings, 1 reply; 3+ messages in thread
From: Bagalkote, Sreenivas @ 2004-12-10 1:21 UTC (permalink / raw)
To: 'Matt Domsch'
Cc: 'brking@us.ibm.com', 'James Bottomley',
'linux-kernel@vger.kernel.org',
'linux-scsi@vger.kernel.org', 'bunk@fs.tum.de',
'Andrew Morton', Ju, Seokmann, Doelfel, Hardy,
Mukker, Atul
[-- Attachment #1: Type: text/plain, Size: 6960 bytes --]
>>
>>I believe, per the discussion, that this was unnecessary and possibly
>>even incorrect. Please repost one more time with this removed.
>>
>
>Yes, thank you. I will do that. The patch that I submitted
>earlier had an one more critical fix. I will separate them
>into two patches and submit them as PATCH 1/2 & 2/2 as well.
>
>Thanks,
>Sreenivas
>LSI Logic
>
diff -Naur b/Documentation/scsi/ChangeLog.megaraid
c/Documentation/scsi/ChangeLog.megaraid
--- b/Documentation/scsi/ChangeLog.megaraid 2004-12-09
19:05:47.795231320 -0500
+++ c/Documentation/scsi/ChangeLog.megaraid 2004-12-09
19:14:33.662287376 -0500
@@ -1,3 +1,21 @@
+Release Date : Thu Dec 9 19:10:23 EST 2004 - Sreenivas Bagalkote
<sreenib@lsil.com>
+
+Current Version : 2.20.4.2 (scsi module), 2.20.2.4 (cmm module)
+Older Version : 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)
+
+i. Introduced driver ioctl that returns scsi address for a given ld.
+
+ "Why can't the existing sysfs interfaces be used to do this?"
+ - Brian King (brking@us.ibm.com)
+
+ "I've looked into solving this another way, but I cannot see how
+ to get this driver-private mapping of logical drive number-> HCTL
+ without putting code something like this into the driver."
+
+ "...and by providing a mapping a function to userspace, the driver
+ is free to change its mapping algorithm in the future if necessary
.."
+ - Matt Domsch (Matt_Domsch@dell.com)
+
Release Date : Thu Dec 9 19:02:14 EST 2004 - Sreenivas Bagalkote
<sreenib@lsil.com>
Current Version : 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)
diff -Naur b/drivers/scsi/megaraid/megaraid_ioctl.h
c/drivers/scsi/megaraid/megaraid_ioctl.h
--- b/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-09
19:00:59.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-09
19:15:59.524234376 -0500
@@ -51,6 +51,7 @@
#define MEGAIOC_QNADAP 'm' /* Query # of adapters */
#define MEGAIOC_QDRVRVER 'e' /* Query driver version */
#define MEGAIOC_QADAPINFO 'g' /* Query adapter information */
+#define MEGAIOC_GET_SADDR 'a' /* Get SCSI address of an LD */
#define USCSICMD 0x80
#define UIOC_RD 0x00001
@@ -62,6 +63,7 @@
#define GET_ADAP_INFO 0x30000
#define GET_CAP 0x40000
#define GET_STATS 0x50000
+#define GET_LD_SADDR 0x60000
#define GET_IOCTL_VERSION 0x01
#define EXT_IOCTL_SIGN_SZ 16
@@ -217,6 +219,27 @@
} __attribute__ ((packed)) mcontroller_t;
+/**
+ * ld_device_address : SCSI device address for the logical drives
+ *
+ * @host_no : host# to which LD belogs; as understood by
mid-layer
+ * @channel : channel on which LD is exported
+ * @target : target on which the LD is exported
+ * @lun : lun on which the LD is exported
+ * @ld : the LD for which this information is sought
+ * @reserved : reserved fields; must be set to zero
+ *
+ * NOTE : Applications set the LD number and expect
the
+ * SCSI address to be returned in the first four
fields
+ */
+struct ld_device_address {
+ uint32_t host_no;
+ uint32_t channel;
+ uint32_t scsi_id;
+ uint32_t lun;
+ uint32_t ld;
+ uint32_t reserved[3];
+};
/**
* mm_dmapool_t : Represents one dma pool with just one buffer
diff -Naur b/drivers/scsi/megaraid/megaraid_mbox.c
c/drivers/scsi/megaraid/megaraid_mbox.c
--- b/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-09
18:56:56.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-09
17:42:33.000000000 -0500
@@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version.
*
* FILE : megaraid_mbox.c
- * Version : v2.20.4.1 (Nov 04 2004)
+ * Version : v2.20.4.2 (Dec 9 2004)
*
* Authors:
* Atul Mukker <Atul.Mukker@lsil.com>
@@ -3642,6 +3642,7 @@
megaraid_mbox_mm_handler(unsigned long drvr_data, uioc_t *kioc, uint32_t
action)
{
adapter_t *adapter;
+ struct ld_device_address* lda;
if (action != IOCTL_ISSUE) {
con_log(CL_ANN, (KERN_WARNING
@@ -3670,6 +3671,30 @@
return kioc->status;
+ case GET_LD_SADDR:
+
+ lda = (struct ld_device_address*)(unsigned
long)kioc->buf_vaddr;
+
+ if (lda->ld > MAX_LOGICAL_DRIVES_40LD) {
+ lda->host_no = 0xffffffff;
+ lda->channel = 0xffffffff;
+ lda->scsi_id = 0xffffffff;
+ lda->lun = 0xffffffff;
+ kioc->status = -ENODEV;
+ kioc->done(kioc);
+ return kioc->status;
+ }
+
+ lda->host_no = adapter->host->host_no;
+ lda->channel = adapter->max_channel;
+ lda->scsi_id = (lda->ld < adapter->init_id) ?
+ lda->ld : lda->ld + 1;
+ lda->lun = 0;
+ kioc->status = 0;
+ kioc->done(kioc);
+
+ return kioc->status;
+
case MBOX_CMD:
return megaraid_mbox_mm_command(adapter, kioc);
diff -Naur b/drivers/scsi/megaraid/megaraid_mbox.h
c/drivers/scsi/megaraid/megaraid_mbox.h
--- b/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-09
18:56:56.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-09
19:10:32.381967560 -0500
@@ -21,8 +21,8 @@
#include "megaraid_ioctl.h"
-#define MEGARAID_VERSION "2.20.4.1"
-#define MEGARAID_EXT_VERSION "(Release Date: Thu Nov 4 17:44:59 EST
2004)"
+#define MEGARAID_VERSION "2.20.4.2"
+#define MEGARAID_EXT_VERSION "(Release Date: Thu Dec 9 19:10:23 EST
2004)"
/*
diff -Naur b/drivers/scsi/megaraid/megaraid_mm.c
c/drivers/scsi/megaraid/megaraid_mm.c
--- b/drivers/scsi/megaraid/megaraid_mm.c 2004-12-09
19:03:27.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mm.c 2004-12-09
19:10:01.449669984 -0500
@@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version.
*
* FILE : megaraid_mm.c
- * Version : v2.20.2.3 (Dec 09 2004)
+ * Version : v2.20.2.4 (Dec 9 2004)
*
* Common management module
*/
@@ -373,6 +373,20 @@
if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
return (-ENOMEM);
}
+ else if (subopcode == MEGAIOC_GET_SADDR) {
+
+ kioc->opcode = GET_LD_SADDR;
+ kioc->data_dir = UIOC_RD;
+ kioc->xferlen = sizeof(struct ld_device_address);
+
+ if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
+ return (-ENOMEM);
+
+ if (copy_from_user(kioc->buf_vaddr, mimd.data,
+ kioc->xferlen )) {
+ return (-EFAULT);
+ }
+ }
else {
con_log(CL_ANN, (KERN_WARNING
"megaraid cmm: Invalid subop\n"));
@@ -813,6 +827,15 @@
return 0;
+ case MEGAIOC_GET_SADDR:
+
+ if (copy_to_user(kmimd.data, kioc->buf_vaddr,
+ sizeof(struct ld_device_address))) {
+ return (-EFAULT);
+ }
+
+ return kioc->status;
+
default:
return (-EINVAL);
}
diff -Naur b/drivers/scsi/megaraid/megaraid_mm.h
c/drivers/scsi/megaraid/megaraid_mm.h
--- b/drivers/scsi/megaraid/megaraid_mm.h 2004-12-09
19:03:00.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mm.h 2004-12-09
19:12:15.729256384 -0500
@@ -29,9 +29,10 @@
#include "megaraid_ioctl.h"
-#define LSI_COMMON_MOD_VERSION "2.20.2.3"
+#define LSI_COMMON_MOD_VERSION "2.20.2.4"
#define LSI_COMMON_MOD_EXT_VERSION \
- "(Release Date: Thu Dec 9 19:02:14 EST 2004)"
+ "(Release Date: Thu Dec 9 19:10:23 EST 2004)"
+
#define LSI_DBGLVL dbglevel
[-- Attachment #2: megaraid-hctl.patch --]
[-- Type: application/octet-stream, Size: 6794 bytes --]
diff -Naur b/Documentation/scsi/ChangeLog.megaraid c/Documentation/scsi/ChangeLog.megaraid
--- b/Documentation/scsi/ChangeLog.megaraid 2004-12-09 19:05:47.795231320 -0500
+++ c/Documentation/scsi/ChangeLog.megaraid 2004-12-09 19:14:33.662287376 -0500
@@ -1,3 +1,21 @@
+Release Date : Thu Dec 9 19:10:23 EST 2004 - Sreenivas Bagalkote <sreenib@lsil.com>
+
+Current Version : 2.20.4.2 (scsi module), 2.20.2.4 (cmm module)
+Older Version : 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)
+
+i. Introduced driver ioctl that returns scsi address for a given ld.
+
+ "Why can't the existing sysfs interfaces be used to do this?"
+ - Brian King (brking@us.ibm.com)
+
+ "I've looked into solving this another way, but I cannot see how
+ to get this driver-private mapping of logical drive number-> HCTL
+ without putting code something like this into the driver."
+
+ "...and by providing a mapping a function to userspace, the driver
+ is free to change its mapping algorithm in the future if necessary .."
+ - Matt Domsch (Matt_Domsch@dell.com)
+
Release Date : Thu Dec 9 19:02:14 EST 2004 - Sreenivas Bagalkote <sreenib@lsil.com>
Current Version : 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)
diff -Naur b/drivers/scsi/megaraid/megaraid_ioctl.h c/drivers/scsi/megaraid/megaraid_ioctl.h
--- b/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-09 19:00:59.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-09 19:15:59.524234376 -0500
@@ -51,6 +51,7 @@
#define MEGAIOC_QNADAP 'm' /* Query # of adapters */
#define MEGAIOC_QDRVRVER 'e' /* Query driver version */
#define MEGAIOC_QADAPINFO 'g' /* Query adapter information */
+#define MEGAIOC_GET_SADDR 'a' /* Get SCSI address of an LD */
#define USCSICMD 0x80
#define UIOC_RD 0x00001
@@ -62,6 +63,7 @@
#define GET_ADAP_INFO 0x30000
#define GET_CAP 0x40000
#define GET_STATS 0x50000
+#define GET_LD_SADDR 0x60000
#define GET_IOCTL_VERSION 0x01
#define EXT_IOCTL_SIGN_SZ 16
@@ -217,6 +219,27 @@
} __attribute__ ((packed)) mcontroller_t;
+/**
+ * ld_device_address : SCSI device address for the logical drives
+ *
+ * @host_no : host# to which LD belogs; as understood by mid-layer
+ * @channel : channel on which LD is exported
+ * @target : target on which the LD is exported
+ * @lun : lun on which the LD is exported
+ * @ld : the LD for which this information is sought
+ * @reserved : reserved fields; must be set to zero
+ *
+ * NOTE : Applications set the LD number and expect the
+ * SCSI address to be returned in the first four fields
+ */
+struct ld_device_address {
+ uint32_t host_no;
+ uint32_t channel;
+ uint32_t scsi_id;
+ uint32_t lun;
+ uint32_t ld;
+ uint32_t reserved[3];
+};
/**
* mm_dmapool_t : Represents one dma pool with just one buffer
diff -Naur b/drivers/scsi/megaraid/megaraid_mbox.c c/drivers/scsi/megaraid/megaraid_mbox.c
--- b/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-09 18:56:56.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-09 17:42:33.000000000 -0500
@@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version.
*
* FILE : megaraid_mbox.c
- * Version : v2.20.4.1 (Nov 04 2004)
+ * Version : v2.20.4.2 (Dec 9 2004)
*
* Authors:
* Atul Mukker <Atul.Mukker@lsil.com>
@@ -3642,6 +3642,7 @@
megaraid_mbox_mm_handler(unsigned long drvr_data, uioc_t *kioc, uint32_t action)
{
adapter_t *adapter;
+ struct ld_device_address* lda;
if (action != IOCTL_ISSUE) {
con_log(CL_ANN, (KERN_WARNING
@@ -3670,6 +3671,30 @@
return kioc->status;
+ case GET_LD_SADDR:
+
+ lda = (struct ld_device_address*)(unsigned long)kioc->buf_vaddr;
+
+ if (lda->ld > MAX_LOGICAL_DRIVES_40LD) {
+ lda->host_no = 0xffffffff;
+ lda->channel = 0xffffffff;
+ lda->scsi_id = 0xffffffff;
+ lda->lun = 0xffffffff;
+ kioc->status = -ENODEV;
+ kioc->done(kioc);
+ return kioc->status;
+ }
+
+ lda->host_no = adapter->host->host_no;
+ lda->channel = adapter->max_channel;
+ lda->scsi_id = (lda->ld < adapter->init_id) ?
+ lda->ld : lda->ld + 1;
+ lda->lun = 0;
+ kioc->status = 0;
+ kioc->done(kioc);
+
+ return kioc->status;
+
case MBOX_CMD:
return megaraid_mbox_mm_command(adapter, kioc);
diff -Naur b/drivers/scsi/megaraid/megaraid_mbox.h c/drivers/scsi/megaraid/megaraid_mbox.h
--- b/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-09 18:56:56.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-09 19:10:32.381967560 -0500
@@ -21,8 +21,8 @@
#include "megaraid_ioctl.h"
-#define MEGARAID_VERSION "2.20.4.1"
-#define MEGARAID_EXT_VERSION "(Release Date: Thu Nov 4 17:44:59 EST 2004)"
+#define MEGARAID_VERSION "2.20.4.2"
+#define MEGARAID_EXT_VERSION "(Release Date: Thu Dec 9 19:10:23 EST 2004)"
/*
diff -Naur b/drivers/scsi/megaraid/megaraid_mm.c c/drivers/scsi/megaraid/megaraid_mm.c
--- b/drivers/scsi/megaraid/megaraid_mm.c 2004-12-09 19:03:27.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mm.c 2004-12-09 19:10:01.449669984 -0500
@@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version.
*
* FILE : megaraid_mm.c
- * Version : v2.20.2.3 (Dec 09 2004)
+ * Version : v2.20.2.4 (Dec 9 2004)
*
* Common management module
*/
@@ -373,6 +373,20 @@
if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
return (-ENOMEM);
}
+ else if (subopcode == MEGAIOC_GET_SADDR) {
+
+ kioc->opcode = GET_LD_SADDR;
+ kioc->data_dir = UIOC_RD;
+ kioc->xferlen = sizeof(struct ld_device_address);
+
+ if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
+ return (-ENOMEM);
+
+ if (copy_from_user(kioc->buf_vaddr, mimd.data,
+ kioc->xferlen )) {
+ return (-EFAULT);
+ }
+ }
else {
con_log(CL_ANN, (KERN_WARNING
"megaraid cmm: Invalid subop\n"));
@@ -813,6 +827,15 @@
return 0;
+ case MEGAIOC_GET_SADDR:
+
+ if (copy_to_user(kmimd.data, kioc->buf_vaddr,
+ sizeof(struct ld_device_address))) {
+ return (-EFAULT);
+ }
+
+ return kioc->status;
+
default:
return (-EINVAL);
}
diff -Naur b/drivers/scsi/megaraid/megaraid_mm.h c/drivers/scsi/megaraid/megaraid_mm.h
--- b/drivers/scsi/megaraid/megaraid_mm.h 2004-12-09 19:03:00.000000000 -0500
+++ c/drivers/scsi/megaraid/megaraid_mm.h 2004-12-09 19:12:15.729256384 -0500
@@ -29,9 +29,10 @@
#include "megaraid_ioctl.h"
-#define LSI_COMMON_MOD_VERSION "2.20.2.3"
+#define LSI_COMMON_MOD_VERSION "2.20.2.4"
#define LSI_COMMON_MOD_EXT_VERSION \
- "(Release Date: Thu Dec 9 19:02:14 EST 2004)"
+ "(Release Date: Thu Dec 9 19:10:23 EST 2004)"
+
#define LSI_DBGLVL dbglevel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] RE: How to add/drop SCSI drives from within the drive r?
2004-12-10 1:21 [PATCH 2/2] RE: How to add/drop SCSI drives from within the drive r? Bagalkote, Sreenivas
@ 2004-12-10 2:24 ` James Bottomley
2004-12-10 4:15 ` Matt Domsch
0 siblings, 1 reply; 3+ messages in thread
From: James Bottomley @ 2004-12-10 2:24 UTC (permalink / raw)
To: Bagalkote, Sreenivas; +Cc: SCSI Mailing List
On Thu, 2004-12-09 at 20:21 -0500, Bagalkote, Sreenivas wrote:
> +i. Introduced driver ioctl that returns scsi address for a given ld.
> +
> + "Why can't the existing sysfs interfaces be used to do this?"
> + - Brian King (brking@us.ibm.com)
> +
> + "I've looked into solving this another way, but I cannot see how
> + to get this driver-private mapping of logical drive number-> HCTL
> + without putting code something like this into the driver."
OK now I look at the code, I have another suggestion. Why not simply
publish the logical drive number as an extra file in the device sysfs
directory? That way you can get your C:H:T:L, go to the end of the tree
and cat megaraid_sd (or whatever you want to call it).
James
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] RE: How to add/drop SCSI drives from within the drive r?
2004-12-10 2:24 ` James Bottomley
@ 2004-12-10 4:15 ` Matt Domsch
0 siblings, 0 replies; 3+ messages in thread
From: Matt Domsch @ 2004-12-10 4:15 UTC (permalink / raw)
To: James Bottomley; +Cc: Bagalkote, Sreenivas, SCSI Mailing List
On Thu, Dec 09, 2004 at 08:24:41PM -0600, James Bottomley wrote:
> On Thu, 2004-12-09 at 20:21 -0500, Bagalkote, Sreenivas wrote:
> > +i. Introduced driver ioctl that returns scsi address for a given ld.
> > +
> > + "Why can't the existing sysfs interfaces be used to do this?"
> > + - Brian King (brking@us.ibm.com)
> > +
> > + "I've looked into solving this another way, but I cannot see how
> > + to get this driver-private mapping of logical drive number-> HCTL
> > + without putting code something like this into the driver."
>
> OK now I look at the code, I have another suggestion. Why not simply
> publish the logical drive number as an extra file in the device sysfs
> directory? That way you can get your C:H:T:L, go to the end of the tree
> and cat megaraid_sd (or whatever you want to call it).
That works in the delete case, but doesn't work in the add case,
because there's no SCSI device created (yet) to have a sysfs directory
to put the file to get the information userspace needs to call
../../scan.
Thanks,
Matt
--
Matt Domsch
Sr. Software Engineer, Lead Engineer
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-12-10 4:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-10 1:21 [PATCH 2/2] RE: How to add/drop SCSI drives from within the drive r? Bagalkote, Sreenivas
2004-12-10 2:24 ` James Bottomley
2004-12-10 4:15 ` Matt Domsch
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).