Skip to content

Commit

Permalink
[PATCH] Fix sgiioc4 DMA timeout problem with 64KiB s/g elements.
Browse files Browse the repository at this point in the history
Problem caused by the fact that the code used to only pick the low 16
bits of the bytecount.  That may be how some controllers act on it (byte
count of 0 means 0x10000), but not for this particular hardware.

Signed-off-by: Jeremy Higdon <jeremy@sgi.com>
Acked-by: Jes Sorensen <jes@sgi.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Jeremy Higdon authored and Linus Torvalds committed Feb 2, 2006
1 parent b410333 commit 0271fc2
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions drivers/ide/pci/sgiioc4.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2003 Silicon Graphics, Inc. All Rights Reserved.
* Copyright (c) 2003-2006 Silicon Graphics, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License
Expand Down Expand Up @@ -510,7 +510,7 @@ sgiioc4_build_dma_table(ide_drive_t * drive, struct request *rq, int ddir)
drive->name);
goto use_pio_instead;
} else {
u32 xcount, bcount =
u32 bcount =
0x10000 - (cur_addr & 0xffff);

if (bcount > cur_len)
Expand All @@ -525,8 +525,7 @@ sgiioc4_build_dma_table(ide_drive_t * drive, struct request *rq, int ddir)
*table = 0x0;
table++;

xcount = bcount & 0xffff;
*table = cpu_to_be32(xcount);
*table = cpu_to_be32(bcount);
table++;

cur_addr += bcount;
Expand Down Expand Up @@ -680,7 +679,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t * d)
return -EIO;

/* Create /proc/ide entries */
create_proc_ide_interfaces();
create_proc_ide_interfaces();

return 0;
}
Expand Down

0 comments on commit 0271fc2

Please sign in to comment.