From: Andi Kleen <andi@firstfloor.org>
To: James.Bottomley@HansenPartnership.com,
linux-scsi@vger.kernel.org, axboe@kernel.dk
Subject: [PATCH] [6/21] Remove unchecked_isa_dma in aha1542
Date: Thu, 6 Mar 2008 21:51:25 +0100 (CET) [thread overview]
Message-ID: <20080306205126.770551B419C@basil.firstfloor.org> (raw)
In-Reply-To: <20080306951.147874949@firstfloor.org>
- Audited ->cmnd use and it always copies
- Allocate DMAable hostdata separately
- Tell block layer explicitely to bounce
- Audited sense_buffer use and it always copies
- Remove unchecked_isa_dma finally
Untested due to lack of hardware
Signed-off-by: Andi Kleen <ak@suse.de>
---
drivers/scsi/aha1542.c | 40 ++++++++++++++++++++++++++++++----------
1 file changed, 30 insertions(+), 10 deletions(-)
Index: linux/drivers/scsi/aha1542.c
===================================================================
--- linux.orig/drivers/scsi/aha1542.c
+++ linux/drivers/scsi/aha1542.c
@@ -151,7 +151,13 @@ struct aha1542_hostdata {
struct ccb ccb[AHA1542_MAILBOXES];
};
-#define HOSTDATA(host) ((struct aha1542_hostdata *) &host->hostdata)
+struct hd_ptr {
+ struct aha1542_hostdata *hostptr;
+ dma_addr_t dma;
+};
+
+#define HOSTDATA(host) (((struct hd_ptr *)shost_priv(host))->hostptr)
+#define HOSTDMA(host) (((struct hd_ptr *)shost_priv(host))->dma)
static struct Scsi_Host *aha_host[7]; /* One for each IRQ level (9-15) */
@@ -1132,23 +1138,28 @@ static int __init aha1542_detect(struct
}
for (indx = 0; indx < ARRAY_SIZE(bases); indx++)
if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) {
- shpnt = scsi_register(tpnt,
- sizeof(struct aha1542_hostdata));
+ struct aha1542_hostdata *host;
+
+ shpnt = scsi_register(tpnt, sizeof(struct hd_ptr));
if(shpnt==NULL) {
release_region(bases[indx], 4);
continue;
}
- /* For now we do this - until kmalloc is more intelligent
- we are resigned to stupid hacks like this */
- if (SCSI_BUF_PA(shpnt) >= ISA_DMA_THRESHOLD) {
- printk(KERN_ERR "Invalid address for shpnt with 1542.\n");
- goto unregister;
+
+ host = dma_alloc_coherent(NULL, sizeof(*host),
+ &HOSTDMA(shpnt), GFP_KERNEL);
+ if (!host) {
+ scsi_unregister(shpnt);
+ release_region(bases[indx], 4);
+ continue;
}
+
+ HOSTDATA(shpnt) = host;
+
if (!aha1542_test_port(bases[indx], shpnt))
goto unregister;
-
base_io = bases[indx];
/* Set the Bus on/off-times as not to ruin floppy performance */
@@ -1265,6 +1276,8 @@ fail:
continue;
unregister:
release_region(bases[indx], 4);
+ dma_free_coherent(NULL, sizeof(struct aha1542_hostdata),
+ HOSTDATA(shpnt), HOSTDMA(shpnt));
scsi_unregister(shpnt);
continue;
@@ -1281,6 +1294,8 @@ static int aha1542_release(struct Scsi_H
free_dma(shost->dma_channel);
if (shost->io_port && shost->n_io_port)
release_region(shost->io_port, shost->n_io_port);
+ dma_free_coherent(NULL, sizeof(struct aha1542_hostdata),
+ HOSTDATA(shost), HOSTDMA(shost));
scsi_unregister(shost);
return 0;
}
@@ -1752,6 +1767,11 @@ static int aha1542_biosparam(struct scsi
}
MODULE_LICENSE("GPL");
+static int aha154x_adjust_queue(struct scsi_device *device)
+{
+ blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_ISA);
+ return 0;
+}
static struct scsi_host_template driver_template = {
.proc_name = "aha1542",
@@ -1767,7 +1787,7 @@ static struct scsi_host_template driver_
.this_id = 7,
.sg_tablesize = AHA1542_SCATTER,
.cmd_per_lun = AHA1542_CMDLUN,
- .unchecked_isa_dma = 1,
.use_clustering = ENABLE_CLUSTERING,
+ .slave_alloc = aha154x_adjust_queue,
};
#include "scsi_module.c"
next prev parent reply other threads:[~2008-03-06 20:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-06 20:51 [PATCH] [0/21] Remove isa_unchecked_dma and some more GFP_DMAs in the mid layer v2 Andi Kleen
2008-03-06 20:51 ` [PATCH] [1/21] Add new sense_buffer_mask host template field Andi Kleen
2008-03-06 20:51 ` [PATCH] [2/21] Remove unchecked_isa in BusLogic Andi Kleen
2008-03-06 20:51 ` [PATCH] [3/21] Remove unchecked_isa_dma in advansys.c Andi Kleen
2008-03-06 21:04 ` Matthew Wilcox
2008-03-06 22:04 ` Andi Kleen
2008-03-07 0:59 ` Matthew Wilcox
2008-03-07 1:09 ` Andi Kleen
2008-03-06 20:51 ` [PATCH] [4/21] Remove unchecked_isa_dma in gdth Andi Kleen
2008-03-06 20:51 ` [PATCH] [5/21] Remove unchecked_isa_dma in eata.c Andi Kleen
2008-03-06 20:51 ` Andi Kleen [this message]
2008-03-06 20:51 ` [PATCH] [7/21] Remove unchecked_isa_dma in aha152x/wd7000/sym53c416/u14-34f/NCR53c406a Andi Kleen
2008-03-06 20:51 ` [PATCH] [8/21] Remove random noop unchecked_isa_dma users Andi Kleen
2008-03-06 20:51 ` [PATCH] [9/21] Add blk_kmalloc/blk_alloc_pages Andi Kleen
2008-03-06 20:51 ` [PATCH] [11/21] Remove unchecked_isa_dma support for hostdata Andi Kleen
2008-03-06 20:51 ` [PATCH] [12/21] Remove unchecked_isa_dma checks in sg.c Andi Kleen
2008-03-06 20:51 ` [PATCH] [13/21] Use blk_kmalloc in scsi_scan Andi Kleen
2008-03-06 20:51 ` [PATCH] [14/21] Don't disable direct_io for unchecked_isa_dma in st.c Andi Kleen
2008-03-06 20:51 ` [PATCH] [15/21] Remove automatic block layer bouncing for unchecked_isa_dma Andi Kleen
2008-03-06 20:51 ` [PATCH] [16/21] Convert sr driver over the blk_kmalloc Andi Kleen
2008-03-06 20:51 ` [PATCH] [17/21] Remove unchecked_isa_dma from sysfs Andi Kleen
2008-03-06 20:51 ` [PATCH] [18/21] Switch to a single SCSI command pool Andi Kleen
2008-03-06 20:51 ` [PATCH] [19/21] Finally remove unchecked_isa_dma support for Cmnds Andi Kleen
2008-03-06 20:51 ` [PATCH] [20/21] Finally kill unchecked_isa_dma Andi Kleen
2008-03-06 20:51 ` [PATCH] [21/21] Convert DMA buffers in ch.c to allocate via the block layer Andi Kleen
2008-03-06 22:13 ` [PATCH] [0/21] Remove isa_unchecked_dma and some more GFP_DMAs in the mid layer v2 James Bottomley
2008-03-06 22:19 ` Andi Kleen
2008-03-06 22:23 ` [PATCH] [0/21] Remove isa_unchecked_dma and some more GFP_DMAs in the mid layer v2 II Andi Kleen
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=20080306205126.770551B419C@basil.firstfloor.org \
--to=andi@firstfloor.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=axboe@kernel.dk \
--cc=linux-scsi@vger.kernel.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 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.