From: Jens Axboe <axboe@suse.de>
To: "J.A. Magallon" <jamagallon@able.es>
Cc: linux-kernel@vger.kernel.org
Subject: Re: 2.4.21-pre3 kernel crash
Date: Tue, 28 Jan 2003 00:24:12 +0100 [thread overview]
Message-ID: <20030127232412.GF17791@suse.de> (raw)
In-Reply-To: <20030127231819.GA1651@werewolf.able.es>
On Tue, Jan 28 2003, J.A. Magallon wrote:
>
> On 2003.01.27 Jens Axboe wrote:
> > On Mon, Jan 27 2003, Martin MOKREJ? wrote:
> > > On Mon, 27 Jan 2003, Ross Biro wrote:
> > >
> > > > This looks like the same problem I ran into with IDE and highmem not
> > > > getting along. Try compiling your kernel with out highmem enabled and
> > > > see what happenes.
> > >
> > > Yes, that "fixes" it. Any "better solution"? ;-)
> > >
> > > > >Trace; c024dfc1 <ide_build_sglist+181/1a0>
> > > > >Trace; c024e1b4 <ide_build_dmatable+54/1a0>
> > > > >Trace; c024e6df <__ide_dma_read+3f/150>
> >
> > Someone completely lost the highmem capable scatterlist setup, *boggle*.
> > This should fix it.
> >
>
> Applied on top of 2.4.21-pre3-aa (no highmem), it makes my box hang on drive
> detection:
>
> PIIX4: IDE controller at PCI slot 00:07.1
> PIIX4: chipset revision 1
> PIIX4: not 100% native mode: will probe irqs later
> ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA
> ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:DMA, hdd:pio
> hda:
>
> <hangs here>
>
> normal startup says:
>
> hda: Conner Peripherals 1080MB - CFS1081A, ATA DISK drive
> hdb: TOSHIBA DVD-ROM SD-M1712, ATAPI CD/DVD-ROM drive
> blk: queue 403386e0, I/O limit 4095Mb (mask 0xffffffff)
> hdc: YAMAHA CRW8424E, ATAPI CD/DVD-ROM drive
> hdd: IOMEGA ZIP 250 ATAPI, ATAPI FLOPPY drive
> ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
> ide1 at 0x170-0x177,0x376 on irq 15
> hda: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }
> hda: task_no_data_intr: error=0x04 { DriveStatusError }
> hda: 2114180 sectors (1082 MB), CHS=524/64/63, DMA
Reviewing the patch, it did have a nasty bug, didn't iterate
buffer_heads at all so a clustered request will fail. Attached version
should work.
===== drivers/ide/ide-dma.c 1.7 vs edited =====
--- 1.7/drivers/ide/ide-dma.c Wed Nov 20 18:46:24 2002
+++ edited/drivers/ide/ide-dma.c Tue Jan 28 00:23:45 2003
@@ -249,6 +249,7 @@
{
struct buffer_head *bh;
struct scatterlist *sg = hwif->sg_table;
+ unsigned long lastdataend = ~0UL;
int nents = 0;
if (hwif->sg_dma_active)
@@ -256,24 +257,30 @@
bh = rq->bh;
do {
- unsigned char *virt_addr = bh->b_data;
- unsigned int size = bh->b_size;
+ if (bh_phys(bh) == lastdataend) {
+ sg[nents - 1].length += bh->b_size;
+ lastdataend += bh->b_size;
+ continue;
+ }
if (nents >= PRD_ENTRIES)
return 0;
- while ((bh = bh->b_reqnext) != NULL) {
- if ((virt_addr + size) != (unsigned char *) bh->b_data)
- break;
- size += bh->b_size;
- }
memset(&sg[nents], 0, sizeof(*sg));
- sg[nents].address = virt_addr;
- sg[nents].length = size;
- if(size == 0)
- BUG();
+ if (bh->b_page) {
+ sg[nents].page = bh->b_page;
+ sg[nents].offset = bh_offset(bh);
+ } else {
+ if (((unsigned long) bh->b_data) < PAGE_SIZE)
+ BUG();
+
+ sg[nents].address = bh->b_data;
+ }
+
+ sg[nents].length = bh->b_size;
+ lastdataend = bh_phys(bh) + bh->b_size;
nents++;
- } while (bh != NULL);
+ } while ((bh = bh->b_reqnext) != NULL);
if(nents == 0)
BUG();
--
Jens Axboe
next prev parent reply other threads:[~2003-01-27 23:14 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-27 15:41 2.4.21-pre3 kernel crash Martin MOKREJŠ
2003-01-27 16:53 ` Ross Biro
2003-01-27 17:13 ` Martin MOKREJŠ
2003-01-27 19:23 ` Jens Axboe
2003-01-27 20:27 ` Edward Tandi
2003-01-27 20:36 ` Jeff Garzik
2003-01-27 20:47 ` Edward Tandi
2003-01-27 20:57 ` Jeff Garzik
2003-01-28 9:08 ` Alan Cox
2003-01-28 10:50 ` Martin MOKREJŠ
2003-01-27 23:18 ` J.A. Magallon
2003-01-27 23:24 ` Jens Axboe [this message]
2003-01-28 0:02 ` J.A. Magallon
2003-01-27 19:03 ` Benjamin Herrenschmidt
2003-01-27 19:21 ` Benjamin Herrenschmidt
2003-01-27 19:25 ` Jens Axboe
2003-01-27 19:45 ` Alan Cox
2003-01-27 19:49 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2003-01-28 16:41 Larry Sendlosky
2003-01-28 22:06 ` Jens Axboe
2003-01-29 8:23 ` Benjamin Herrenschmidt
2003-01-29 8:53 ` Jens Axboe
2003-01-29 9:44 ` Benjamin Herrenschmidt
2003-01-29 10:16 ` Jens Axboe
2003-01-29 8:23 Benjamin Herrenschmidt
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=20030127232412.GF17791@suse.de \
--to=axboe@suse.de \
--cc=jamagallon@able.es \
--cc=linux-kernel@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.