> Because of the assumption of Roger (R.E.Wolff@BitWizard.nl ) who
> said the backtracking problem might be due to the kernel buffer that
> has to be copied in user space, I thought that if this is true
> something should change if I reduce the buffer from 127K to half the
I just use a 1Mb buffer for my scanner. However I had to change a few
lines in sg.c ...... Ah. I nowadays have the patch ready. Attached.
Your "kernel data segment" does grow by a megabyte using this
patch.... I'm going to submit a slightly more generic patch one
day......
Using half the size, or even a quarter (32k, default) doesn't help.
We could try to issue the next "read" AS FAST AS POSSIBLE, discarding
the data just read. This probably requires some serious hacking.
> size. I recompiled sane and my kernel but the effect when scanning
> colour images stayed the same. Moreover I think because of the fact
> that other people (running Pentium 200 pro maschines) have the same
> problem this cannot be due to lack of speed.
A pentium PRO is not much faster on memory limited copies than a
pentium. (Both use a 64bit main memory link.)
Roger.
--------------------------------------------------------------------------
--- linux-2.0.28/include/scsi/sg.h Thu May 2 06:48:55 1996
+++ linux-2.0.28.posix6/include/scsi/sg.h Thu Jan 23 00:10:40 1997
@@ -36,6 +36,10 @@
#define SG_MAX_QUEUE 4 /* maximum outstanding request, arbitrary, may be
changed if sufficient DMA buffer room available */
+#if 0
#define SG_BIG_BUFF 32768
+#else
+#define SG_BIG_BUFF 0x100000
+#endif
#endif
--- linux-2.0.28/drivers/scsi/sg.c Sun Sep 1 08:15:33 1996
+++ linux-2.0.28.posix6/drivers/scsi/sg.c Thu Jan 23 00:12:52 1997
@@ -39,7 +39,11 @@
NULL, sg_attach, sg_detach};
#ifdef SG_BIG_BUFF
+#if SG_BIG_BUFF < 0x10000
static char *big_buff = NULL;
+#else
+static char big_buff[SG_BIG_BUFF];
+#endif
static struct wait_queue *big_wait; /* wait for buffer available */
static int big_inuse=0;
#endif
@@ -565,8 +569,10 @@
#endif
#ifdef SG_BIG_BUFF
+#if SG_BIG_BUFF < 0x10000
big_buff= (char *) scsi_init_malloc(SG_BIG_BUFF, GFP_ATOMIC | GFP_DMA);
#endif
+#endif
scsi_generics = (struct scsi_generic *)
scsi_init_malloc((sg_template.dev_noticed + SG_EXTRA_DEVS)
@@ -648,8 +654,10 @@
}
sg_template.dev_max = 0;
#ifdef SG_BIG_BUFF
+#if SG_BIG_BUFF < 0x10000
if(big_buff != NULL)
scsi_init_free(big_buff, SG_BIG_BUFF);
+#endif
#endif
}
#endif /* MODULE */
-- Source code, list archive, and docs: http://www.azstarnet.com/~axplinux/sane/ To unsubscribe: mail -s unsubscribe sane-devel-request@listserv.azstarnet.com