From: Brian King <brking@us.ibm.com>
To: "Bagalkote, Sreenivas" <sreenib@lsil.com>
Cc: 'James Bottomley' <James.Bottomley@SteelEye.com>,
"'linux-kernel@vger.kernel.org'" <linux-kernel@vger.kernel.org>,
"'linux-scsi@vger.kernel.org'" <linux-scsi@vger.kernel.org>,
"'bunk@fs.tum.de'" <bunk@fs.tum.de>,
'Andrew Morton' <akpm@osdl.org>,
"'Matt_Domsch@dell.com'" <Matt_Domsch@dell.com>,
"Ju, Seokmann" <sju@lsil.com>,
"Doelfel, Hardy" <hdoelfel@lsil.com>,
"Mukker, Atul" <Atulm@lsil.com>
Subject: Re: How to add/drop SCSI drives from within the driver?
Date: Fri, 03 Dec 2004 09:10:52 -0600 [thread overview]
Message-ID: <41B081FC.6040400@us.ibm.com> (raw)
In-Reply-To: <0E3FA95632D6D047BA649F95DAB60E570230CA69@exa-atlanta>
This looks to be adding an LLD specific interface to userspace to
add/delete disks. Why can't the existing sysfs interfaces be used
to to this? (scan attribute on host and delete attribute on device).
-Brian
Bagalkote, Sreenivas wrote:
> Hello All,
>
> I am trying to implement a feature in my SCSI driver, where it can
> trigger the SCSI mid-layer to scan or remove a particular drive. I
> appreciate any help in nudging me in the right direction.
>
> The exported functions -
>
> scsi_add_device( host, channel, target, lun )
> scsi_remove_device( struct scsi_device* )
>
> seem to work well in my limited testing. Are there any caveats in this
> method? Does this method work well without exceptions? I am inlining
> the full patch for megaraid SCSI driver taken against 2.6.10-rc2. I am
> also attaching it to this mail.
>
> Thank you,
> Sreenivas
>
>
> ----
> diff -Naur old-rc3/drivers/scsi/megaraid/mega_common.h
> new-rc2/drivers/scsi/megaraid/mega_common.h
> --- old-rc2/drivers/scsi/megaraid/mega_common.h 2004-10-18
> 17:54:31.000000000 -0400
> +++ new-rc2/drivers/scsi/megaraid/mega_common.h 2004-12-02
> 20:23:35.000000000 -0500
> @@ -242,6 +242,15 @@
> [SCP2TARGET(scp)] & 0xFF); \
> }
>
> +/**
> + * MRAID_LD_TARGET
> + * @param adp - Adapter's soft state
> + * @param ld - Logical drive number
> + *
> + * Macro to retrieve the SCSI target id of a logical drive
> + */
> +#define MRAID_LD_TARGET(adp, ld) (((ld) < (adp)->init_id) ? (ld) : (ld)+1)
>
> +
> /*
> * ### Helper routines ###
> */
> diff -Naur old-rc2/drivers/scsi/megaraid/megaraid_ioctl.h
> new-rc2/drivers/scsi/megaraid/megaraid_ioctl.h
> --- old-rc2/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-02
> 20:20:16.000000000 -0500
> +++ new-rc2/drivers/scsi/megaraid/megaraid_ioctl.h 2004-12-02
> 20:23:25.000000000 -0500
> @@ -51,8 +51,11 @@
> #define MEGAIOC_QNADAP 'm' /* Query # of adapters */
> #define MEGAIOC_QDRVRVER 'e' /* Query driver version */
> #define MEGAIOC_QADAPINFO 'g' /* Query adapter information */
> +#define MEGAIOC_ADD_LD 'a'
> +#define MEGAIOC_DEL_LD 'r'
>
> #define USCSICMD 0x80
> +#define UIOC_NONE 0x00000
> #define UIOC_RD 0x00001
> #define UIOC_WR 0x00002
>
> @@ -62,6 +65,8 @@
> #define GET_ADAP_INFO 0x30000
> #define GET_CAP 0x40000
> #define GET_STATS 0x50000
> +#define ADD_LD 0x60000
> +#define DEL_LD 0x70000
> #define GET_IOCTL_VERSION 0x01
>
> #define EXT_IOCTL_SIGN_SZ 16
> diff -Naur old-rc2/drivers/scsi/megaraid/megaraid_mbox.c
> new-rc2/drivers/scsi/megaraid/megaraid_mbox.c
> --- old-rc2/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-02
> 20:20:16.000000000 -0500
> +++ new-rc2/drivers/scsi/megaraid/megaraid_mbox.c 2004-12-02
> 20:32:33.408278216 -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.1+ TEST VERSION
> *
> * Authors:
> * Atul Mukker <Atul.Mukker@lsil.com>
> @@ -3642,6 +3642,10 @@
> megaraid_mbox_mm_handler(unsigned long drvr_data, uioc_t *kioc, uint32_t
> action)
> {
> adapter_t *adapter;
> + uint32_t ld;
> + struct scsi_device* sdev;
> + int ch;
> + int tg;
>
> if (action != IOCTL_ISSUE) {
> con_log(CL_ANN, (KERN_WARNING
> @@ -3670,6 +3674,31 @@
>
> return kioc->status;
>
> + case ADD_LD:
> + ld = *(uint32_t*) kioc->buf_vaddr;
> + ch = adapter->max_channel;
> + tg = MRAID_LD_TARGET( adapter, ld );
> + scsi_add_device(adapter->host, ch, tg, 0);
> +
> + kioc->status = 0;
> + kioc->done(kioc);
> + return kioc->status;
> +
> + case DEL_LD:
> + ld = *(uint32_t*) kioc->buf_vaddr;
> + ch = adapter->max_channel;
> + tg = MRAID_LD_TARGET( adapter, ld );
> + sdev = scsi_device_lookup( adapter->host, ch, tg, 0);
> +
> + if( sdev ) {
> + scsi_remove_device( sdev );
> + scsi_device_put( sdev );
> + }
> +
> + kioc->status = 0;
> + kioc->done(kioc);
> + return kioc->status;
> +
> case MBOX_CMD:
>
> return megaraid_mbox_mm_command(adapter, kioc);
> diff -Naur old-rc2/drivers/scsi/megaraid/megaraid_mbox.h
> new-rc2/drivers/scsi/megaraid/megaraid_mbox.h
> --- old-rc2/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-02
> 20:20:16.000000000 -0500
> +++ new-rc2/drivers/scsi/megaraid/megaraid_mbox.h 2004-12-02
> 20:32:09.737876664 -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.1+ TEST VERSION"
> +#define MEGARAID_EXT_VERSION "(Release Date: TEST VERSION)"
>
>
> /*
> diff -Naur old-rc2/drivers/scsi/megaraid/megaraid_mm.c
> new-rc2/drivers/scsi/megaraid/megaraid_mm.c
> --- old-rc2/drivers/scsi/megaraid/megaraid_mm.c 2004-12-02
> 20:20:16.000000000 -0500
> +++ new-rc2/drivers/scsi/megaraid/megaraid_mm.c 2004-12-02
> 20:22:57.000000000 -0500
> @@ -373,6 +373,34 @@
> if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
> return (-ENOMEM);
> }
> + else if (subopcode == MEGAIOC_ADD_LD) {
> +
> + kioc->opcode = ADD_LD;
> + kioc->data_dir = UIOC_NONE;
> + kioc->xferlen = sizeof(uint32_t);
> +
> + 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 if (subopcode == MEGAIOC_DEL_LD) {
> +
> + kioc->opcode = DEL_LD;
> + kioc->data_dir = UIOC_NONE;
> + kioc->xferlen = sizeof(uint32_t);
> +
> + 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"));
> @@ -809,6 +837,9 @@
>
> return 0;
>
> + case MEGAIOC_ADD_LD:
> + case MEGAIOC_DEL_LD:
> + return 0;
> default:
> return (-EINVAL);
> }
> diff -Naur old-rc2/drivers/scsi/megaraid/megaraid_mm.h
> new-rc2/drivers/scsi/megaraid/megaraid_mm.h
> --- old-rc2/drivers/scsi/megaraid/megaraid_mm.h 2004-12-02
> 20:20:16.000000000 -0500
> +++ new-rc2/drivers/scsi/megaraid/megaraid_mm.h 2004-12-02
> 20:33:00.709127856 -0500
> @@ -29,9 +29,9 @@
> #include "megaraid_ioctl.h"
>
>
> -#define LSI_COMMON_MOD_VERSION "2.20.2.2"
> +#define LSI_COMMON_MOD_VERSION "2.20.2.2+ TEST VERSION"
> #define LSI_COMMON_MOD_EXT_VERSION \
> - "(Release Date: Thu Nov 4 17:46:29 EST 2004)"
> + "(Release Date: TEST VERSION)"
>
>
> #define LSI_DBGLVL dbglevel
> ----
>
--
Brian King
eServer Storage I/O
IBM Linux Technology Center
next prev parent reply other threads:[~2004-12-03 15:10 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-03 2:04 How to add/drop SCSI drives from within the driver? Bagalkote, Sreenivas
2004-12-03 15:10 ` Brian King [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-12-03 15:29 Bagalkote, Sreenivas
2004-12-03 15:58 ` Jan-Benedict Glaw
2004-12-03 16:22 ` Christoph Hellwig
2004-12-03 17:11 ` Matt Domsch
2004-12-03 17:14 ` Matt Domsch
2004-12-03 17:18 Bagalkote, Sreenivas
2004-12-08 7:16 Bagalkote, Sreenivas
2004-12-08 14:07 ` Matt Domsch
2004-12-08 15:40 ` Matthew Wilcox
2004-12-08 20:08 ` Bryan Henderson
2004-12-08 20:14 ` Arjan van de Ven
2004-12-08 15:59 ` James Bottomley
2004-12-08 23:46 ` Brian King
2004-12-08 14:55 Mukker, Atul
2004-12-08 17:56 Bagalkote, Sreenivas
2004-12-08 19:06 ` James Bottomley
2004-12-08 18:42 Salyzyn, Mark
2004-12-08 18:42 ` Salyzyn, Mark
2004-12-08 20:01 ` James Bottomley
2004-12-15 7:24 ` Matt Domsch
2004-12-15 16:48 ` Matt Domsch
2004-12-15 18:55 ` James Bottomley
2004-12-15 18:49 ` James Bottomley
2004-12-15 21:30 ` Matt Domsch
2004-12-16 9:54 ` Arjan van de Ven
2004-12-16 14:41 ` Alan Cox
2004-12-08 19:25 Mukker, Atul
2004-12-08 20:36 Mukker, Atul
2004-12-08 23:26 ` Bryan Henderson
2004-12-08 20:49 Salyzyn, Mark
2004-12-09 13:27 Salyzyn, Mark
2004-12-09 14:12 ` Arjan van de Ven
2004-12-09 14:11 Mukker, Atul
2004-12-09 17:04 ` Patrick Mansfield
2004-12-09 17:31 Mukker, Atul
2004-12-09 18:00 ` 'Patrick Mansfield'
2004-12-09 23:37 Bagalkote, Sreenivas
2004-12-10 0:03 ` Matt Domsch
2004-12-10 0:31 Bagalkote, Sreenivas
2004-12-15 19:42 Mukker, Atul
2004-12-15 20:22 ` Matt Domsch
2004-12-16 14:27 Mukker, Atul
2004-12-16 16:51 Salyzyn, Mark
2004-12-16 16:51 ` Salyzyn, Mark
2005-01-03 23:02 Bagalkote, Sreenivas
2005-01-03 23:40 ` James Bottomley
2005-01-04 17:25 Bagalkote, Sreenivas
2005-01-04 17:42 ` James Bottomley
2005-01-06 14:20 Mukker, Atul
2005-01-06 14:42 ` James Bottomley
2005-01-21 22:11 Mukker, Atul
2005-01-21 23:58 ` James Bottomley
2005-01-25 16:27 Mukker, Atul
2005-01-25 16:52 ` Patrick Mansfield
2005-01-25 23:37 Mukker, Atul
2005-01-26 14:48 ` Brian King
2005-01-26 16:48 Greg KH
2005-01-26 16:48 ` Greg KH
2005-01-26 23:23 Mukker, Atul
2005-01-27 7:05 ` 'Patrick Mansfield'
2005-01-27 7:05 ` 'Patrick Mansfield'
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41B081FC.6040400@us.ibm.com \
--to=brking@us.ibm.com \
--cc=Atulm@lsil.com \
--cc=James.Bottomley@SteelEye.com \
--cc=Matt_Domsch@dell.com \
--cc=akpm@osdl.org \
--cc=bunk@fs.tum.de \
--cc=hdoelfel@lsil.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=sju@lsil.com \
--cc=sreenib@lsil.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.