From: Robert Jennings <rcj@linux.vnet.ibm.com>
To: paulus@samba.org
Cc: linux-scsi@vger.kernel.org, linuxppc-dev@ozlabs.org,
David Darrington <ddarring@linux.vnet.ibm.com>,
Brian King <brking@linux.vnet.ibm.com>
Subject: [PATCH 15/16 v3] ibmvscsi: driver enablement for CMO
Date: Fri, 4 Jul 2008 07:56:31 -0500 [thread overview]
Message-ID: <20080704125631.GR1310@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080704124449.GA1310@linux.vnet.ibm.com>
=46rom: Robert Jennings <rcj@linux.vnet.ibm.com>
Enable the driver to function in a Cooperative Memory Overcommitment (CMO)
environment.
The following changes are made to enable the driver for CMO:
* DMA mapping errors will not result in error messages if entitlement has
been exceeded and resources were not available.
* The driver has a get_desired_dma function defined to function
in a CMO environment. It will indicate how much IO memory it would like
to function.
Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com>
---
drivers/scsi/ibmvscsi/ibmvscsi.c | 46 +++++++++++++++++++++++++++++++++-=
-----
drivers/scsi/ibmvscsi/ibmvscsi.h | 2 ++
2 files changed, 41 insertions(+), 7 deletions(-)
Index: b/drivers/scsi/ibmvscsi/ibmvscsi.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -72,6 +72,8 @@
#include <linux/delay.h>
#include <asm/firmware.h>
#include <asm/vio.h>
+#include <asm/firmware.h>
+#include <asm/iommu.h>
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_host.h>
@@ -426,8 +428,10 @@ static int map_sg_data(struct scsi_cmnd=20
SG_ALL * sizeof(struct srp_direct_buf),
&evt_struct->ext_list_token, 0);
if (!evt_struct->ext_list) {
- sdev_printk(KERN_ERR, cmd->device,
- "Can't allocate memory for indirect table\n");
+ if (!firmware_has_feature(FW_FEATURE_CMO))
+ sdev_printk(KERN_ERR, cmd->device,
+ "Can't allocate memory "
+ "for indirect table\n");
return 0;
}
}
@@ -743,7 +747,9 @@ static int ibmvscsi_queuecommand(struct=20
srp_cmd->lun =3D ((u64) lun) << 48;
=20
if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata->dev)) {
- sdev_printk(KERN_ERR, cmnd->device, "couldn't convert cmd to srp_cmd\n");
+ if (!firmware_has_feature(FW_FEATURE_CMO))
+ sdev_printk(KERN_ERR, cmnd->device,
+ "couldn't convert cmd to srp_cmd\n");
free_event_struct(&hostdata->pool, evt_struct);
return SCSI_MLQUEUE_HOST_BUSY;
}
@@ -855,7 +861,10 @@ static void send_mad_adapter_info(struct
DMA_BIDIRECTIONAL);
=20
if (dma_mapping_error(req->buffer)) {
- dev_err(hostdata->dev, "Unable to map request_buffer for adapter_info!\n=
");
+ if (!firmware_has_feature(FW_FEATURE_CMO))
+ dev_err(hostdata->dev,
+ "Unable to map request_buffer for "
+ "adapter_info!\n");
free_event_struct(&hostdata->pool, evt_struct);
return;
}
@@ -1400,7 +1409,9 @@ static int ibmvscsi_do_host_config(struc
DMA_BIDIRECTIONAL);
=20
if (dma_mapping_error(host_config->buffer)) {
- dev_err(hostdata->dev, "dma_mapping error getting host config\n");
+ if (!firmware_has_feature(FW_FEATURE_CMO))
+ dev_err(hostdata->dev,
+ "dma_mapping error getting host config\n");
free_event_struct(&hostdata->pool, evt_struct);
return -1;
}
@@ -1604,7 +1615,7 @@ static struct scsi_host_template driver_
.eh_host_reset_handler =3D ibmvscsi_eh_host_reset_handler,
.slave_configure =3D ibmvscsi_slave_configure,
.change_queue_depth =3D ibmvscsi_change_queue_depth,
- .cmd_per_lun =3D 16,
+ .cmd_per_lun =3D IBMVSCSI_CMDS_PER_LUN_DEFAULT,
.can_queue =3D IBMVSCSI_MAX_REQUESTS_DEFAULT,
.this_id =3D -1,
.sg_tablesize =3D SG_ALL,
@@ -1613,6 +1624,26 @@ static struct scsi_host_template driver_
};
=20
/**
+ * ibmvscsi_get_desired_dma - Calculate IO entitlement needed by the driver
+ *
+ * @vdev: struct vio_dev for the device whose entitlement is to be returned
+ *
+ * Return value:
+ * Number of bytes of IO data the driver will need to perform well.
+ */
+static unsigned long ibmvscsi_get_desired_dma(struct vio_dev *vdev)
+{
+ /* iu_storage data allocated in initialize_event_pool */
+ unsigned long io_entitlement =3D max_requests * sizeof(union viosrp_iu);
+
+ /* add io space for sg data */
+ io_entitlement +=3D (IBMVSCSI_MAX_SECTORS_DEFAULT *
+ IBMVSCSI_CMDS_PER_LUN_DEFAULT);
+
+ return IOMMU_PAGE_ALIGN(io_entitlement);
+}
+
+/**
* Called by bus code for each adapter
*/
static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id=
*id)
@@ -1641,7 +1672,7 @@ static int ibmvscsi_probe(struct vio_dev
hostdata->host =3D host;
hostdata->dev =3D dev;
atomic_set(&hostdata->request_limit, -1);
- hostdata->host->max_sectors =3D 32 * 8; /* default max I/O 32 pages */
+ hostdata->host->max_sectors =3D IBMVSCSI_MAX_SECTORS_DEFAULT;
=20
rc =3D ibmvscsi_ops->init_crq_queue(&hostdata->queue, hostdata, max_reque=
sts);
if (rc !=3D 0 && rc !=3D H_RESOURCE) {
@@ -1735,6 +1766,7 @@ static struct vio_driver ibmvscsi_driver
.id_table =3D ibmvscsi_device_table,
.probe =3D ibmvscsi_probe,
.remove =3D ibmvscsi_remove,
+ .get_desired_dma =3D ibmvscsi_get_desired_dma,
.driver =3D {
.name =3D "ibmvscsi",
.owner =3D THIS_MODULE,
Index: b/drivers/scsi/ibmvscsi/ibmvscsi.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/drivers/scsi/ibmvscsi/ibmvscsi.h
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.h
@@ -45,6 +45,8 @@ struct Scsi_Host;
#define MAX_INDIRECT_BUFS 10
=20
#define IBMVSCSI_MAX_REQUESTS_DEFAULT 100
+#define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16
+#define IBMVSCSI_MAX_SECTORS_DEFAULT 256 /* 32 * 8 =3D default max I/O 32 =
pages */
#define IBMVSCSI_MAX_CMDS_PER_LUN 64
=20
/* ------------------------------------------------------------
next prev parent reply other threads:[~2008-07-04 12:56 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-04 12:44 [PATCH 00/16 v3] powerpc: pSeries Cooperative Memory Overcommitment support Robert Jennings
2008-07-04 12:51 ` [PATCH 01/16 v3] powerpc: Remove extraneous error reporting for hcall failures in lparcfg Robert Jennings
2008-07-22 3:34 ` Paul Mackerras
2008-07-04 12:51 ` [PATCH 02/16 v3] powerpc: Split processor entitlement retrieval and gathering to helper routines Robert Jennings
2008-07-22 18:53 ` Nathan Fontenot
2008-07-04 12:51 ` [PATCH 03/16 v3] powerpc: Add memory entitlement capabilities to /proc/ppc64/lparcfg Robert Jennings
2008-07-22 18:55 ` Nathan Fontenot
2008-07-04 12:52 ` [PATCH 04/16 v3] powerpc: Split retrieval of processor entitlement data into a helper routine Robert Jennings
2008-07-22 5:54 ` Paul Mackerras
2008-07-22 18:49 ` Nathan Fontenot
2008-07-22 18:56 ` Nathan Fontenot
2008-07-04 12:52 ` [PATCH 05/16 v3] powerpc: Enable CMO feature during platform setup Robert Jennings
2008-07-04 12:52 ` Robert Jennings
2008-07-04 12:52 ` [PATCH 06/16 v3] powerpc: Utilities to set firmware page state Robert Jennings
2008-07-04 12:53 ` Robert Jennings
2008-07-04 12:53 ` [PATCH 07/16 v3] powerpc: Add collaborative memory manager Robert Jennings
2008-07-22 4:53 ` Paul Mackerras
2008-07-04 12:54 ` [PATCH 08/16 v3] powerpc: Do not probe PCI buses or eBus devices if CMO is enabled Robert Jennings
2008-07-14 21:35 ` Brian King
2008-07-04 12:54 ` [PATCH 09/16 v3] powerpc: Add CMO paging statistics Robert Jennings
2008-07-04 12:54 ` [PATCH 10/16 v3] powerpc: iommu enablement for CMO Robert Jennings
2008-07-05 17:51 ` Olof Johansson
2008-07-08 20:48 ` [PATCH 10/16 v3] [v2] " Robert Jennings
2008-07-22 5:04 ` Paul Mackerras
2008-07-22 13:30 ` Robert Jennings
2008-07-22 4:57 ` [PATCH 10/16 v3] " Paul Mackerras
2008-07-22 13:28 ` Robert Jennings
2008-07-04 12:55 ` [PATCH 11/16 v3] powerpc: vio bus support " Robert Jennings
2008-07-04 12:55 ` [PATCH 12/16 v3] powerpc: Verify CMO memory entitlement updates with virtual I/O Robert Jennings
2008-07-04 12:55 ` [PATCH 13/16 v3] ibmveth: Automatically enable larger rx buffer pools for larger mtu Robert Jennings
2008-07-04 12:56 ` [PATCH 14/16 v3] ibmveth: enable driver for CMO Robert Jennings
2008-07-08 20:38 ` [PATCH 14/16 v3] [v2] " Robert Jennings
2008-07-04 12:56 ` Robert Jennings [this message]
2008-07-07 14:34 ` [PATCH 15/16 v3] ibmvscsi: driver enablement " Brian King
2008-07-08 17:41 ` Robert Jennings
2008-07-08 20:35 ` [PATCH 15/16 v3] [v2] " Robert Jennings
2008-07-10 13:43 ` Brian King
2008-07-04 12:57 ` [PATCH 16/16 v3] powerpc: Update arch vector to indicate support " Robert Jennings
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=20080704125631.GR1310@linux.vnet.ibm.com \
--to=rcj@linux.vnet.ibm.com \
--cc=brking@linux.vnet.ibm.com \
--cc=ddarring@linux.vnet.ibm.com \
--cc=linux-scsi@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.org \
/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 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).