Patch 2.1.x sr.c

PARMELAN Edouard (parmee@postecss.ncrfran.france.ncr.com)
Fri, 22 Nov 96 14:36:00 PST


Hi,

With 2.1.x, I have lot of "Running low on SCSI DMA..." messages on
console and
in /var/log/kernel:
Nov 19 22:26:08 woxlab kernel: Module inserted: Generic CD-ROM driver, v
1.21 1996/11/08 03:24:49
Nov 19 22:26:08 woxlab kernel: Detected scsi CD-ROM sr0 at scsi0, channel
0, id 3, lun 0
Nov 19 22:26:08 woxlab kernel: Disc change detected.
Nov 19 22:26:08 woxlab kernel: sr: use "Sony group" multisession code
Nov 19 22:26:08 woxlab kernel: VFS: Disk change detected on device 0b:00
Nov 19 22:26:08 woxlab kernel: Max size:340424 Log zone size:2048
Nov 19 22:26:08 woxlab kernel: First datazone:36 Root inode number
73728
Nov 19 22:26:08 woxlab kernel: ISO9660 Extensions: RRIP_1991A
Nov 19 22:27:16 woxlab kernel: Cannot read proc file system.
Nov 19 22:27:46 woxlab last message repeated 6511 times
Nov 19 22:28:47 woxlab last message repeated 16548 times
Nov 19 22:29:48 woxlab last message repeated 18581 times
Nov 19 22:30:49 woxlab last message repeated 18053 times
Nov 19 22:31:51 woxlab last message repeated 18881 times
Nov 19 22:32:51 woxlab last message repeated 19078 times
Nov 19 22:33:52 woxlab last message repeated 18998 times
Nov 19 22:34:53 woxlab last message repeated 18907 times
Nov 19 22:35:54 woxlab last message repeated 19149 times
Nov 19 22:36:55 woxlab last message repeated 19187 times
Nov 19 22:37:56 woxlab last message repeated 19728 times
Nov 19 22:38:58 woxlab last message repeated 18883 times
Nov 19 22:39:58 woxlab last message repeated 19002 times
Nov 19 22:40:59 woxlab last message repeated 20008 times
Nov 19 22:42:00 woxlab last message repeated 19960 times
Nov 19 22:43:01 woxlab last message repeated 20287 times
Nov 19 22:44:02 woxlab last message repeated 19464 times
Nov 19 22:45:04 woxlab last message repeated 18420 times
Nov 19 22:46:04 woxlab last message repeated 19373 times
Nov 19 22:47:05 woxlab last message repeated 19734 times
Nov 19 22:48:07 woxlab last message repeated 20295 times
Nov 19 22:49:07 woxlab last message repeated 19428 times

when I read big file from SCSI CD-ROM. (I can read it and file is
correct).

I don't have this problem with my SCSI disk (root fs).

After a look to drivers/scsi/sr.c and drivers/scsi/sd.c, I found what's
wrong:

In sd.c ALL tests with ISA_DMA_THRESHOLD call virt_to_phys() and
virt_to_phys() is ONLY call with ISA_DMA_THRESHOLD tests.

In sr.c virt_to_phys() is NEVER call. In ALL tests with
ISA_DMA_THRESHOLD I add
the virt_to_phys() call. It's work fine with 2.1.10 and may apply to
2.1.11.

Edouard.Parmelan@France.NCR.COM

--- drivers/scsi/sr.c.orig Thu Nov 21 22:58:02 1996
+++
drivers/scsi/sr.c Thu Nov 21 23:04:17 1996
@@ -35,6 +35,7 @@
#include
<linux/interrupt.h>
#include <linux/config.h>
#include
<asm/system.h>
+#include <asm/io.h>

#define MAJOR_NR SCSI_CDROM_MAJOR

#include <linux/blk.h>
@@ -617,7 +618,7 @@
if (count+1 !=
SCpnt->use_sg) panic("Bad sr request list");
break;
};
- if
(((long) sgpnt[count].address) + sgpnt[count].length - 1 >
+ if
(virt_to_phys(sgpnt[count].address) + sgpnt[count].length - 1 >

ISA_DMA_THRESHOLD && SCpnt->host->unchecked_isa_dma) {

sgpnt[count].alt_address = sgpnt[count].address;
/* We try to
avoid exhausting the DMA pool, since it is easier
@@ -681,7 +682,7 @@

{
this_count -= this_count % 4;
buffer = (unsigned char *)
SCpnt->request.buffer;
- if (((long) buffer) + (this_count << 9) >
ISA_DMA_THRESHOLD &&
+ if (virt_to_phys(buffer) + (this_count << 9) >
ISA_DMA_THRESHOLD &&
SCpnt->host->unchecked_isa_dma)
buffer =
(unsigned char *) scsi_malloc(this_count << 9);
}