diff -purN a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
--- a/drivers/scsi/ide-scsi.c	2005-03-15 19:09:08.000000000 -0500
+++ b/drivers/scsi/ide-scsi.c	2005-03-23 17:26:06.000000000 -0500
@@ -1048,6 +1048,7 @@ static int idescsi_attach(ide_drive_t *d
 		return 1;
 
 	host->max_id = 1;
+	//host->bounce_high = 1;
 
 #if IDESCSI_DEBUG_LOG
 	if (drive->id->last_lun)
diff -purN a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
--- a/drivers/scsi/scsi_lib.c	2005-03-15 19:09:06.000000000 -0500
+++ b/drivers/scsi/scsi_lib.c	2005-03-23 17:26:04.000000000 -0500
@@ -1333,6 +1333,9 @@ u64 scsi_calculate_bounce_limit(struct S
 
 	if (shost->unchecked_isa_dma)
 		return BLK_BOUNCE_ISA;
+
+	if (shost->bounce_high)
+		return BLK_BOUNCE_HIGH;
 	/*
 	 * Platforms with virtual-DMA translation
 	 * hardware have no practical limit.
diff -purN a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
--- a/include/scsi/scsi_host.h	2005-03-15 19:09:01.000000000 -0500
+++ b/include/scsi/scsi_host.h	2005-03-23 17:26:54.000000000 -0500
@@ -502,6 +502,12 @@ struct Scsi_Host {
 	unsigned reverse_ordering:1;
 
 	/*
+	 * Host needs all high memory bounced (useful for ide-scsi,
+	 * so it doesn't have to kmap when doing PIO)
+	 */
+	unsigned bounce_high:1;
+
+	/*
 	 * Host has rejected a command because it was busy.
 	 */
 	unsigned int host_blocked;
