libata in debian testing

2008-01-11 Thread Daniel Rode

seems to be updated.

regards,
Daniel Rode
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] IDE: terminate ACPI DMI list

2008-01-11 Thread Bartlomiej Zolnierkiewicz
On Friday 11 January 2008, Jeff Garzik wrote:
 Fix oops reported by Trond.
 
 Signed-off-by: Jeff Garzik [EMAIL PROTECTED]

Acked-by: Bartlomiej Zolnierkiewicz [EMAIL PROTECTED]

Linus, could you apply it?

 ---
  drivers/ide/ide-acpi.c |2 ++
  1 file changed, 2 insertions(+)
 
 diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c
 index fe6768a..899d565 100644
 --- a/drivers/ide/ide-acpi.c
 +++ b/drivers/ide/ide-acpi.c
 @@ -85,6 +85,8 @@ static const struct dmi_system_id ide_acpi_dmi_table[] = {
   DMI_MATCH(DMI_BIOS_VERSION, KAM1.60)
   },
   },
 +
 + { } /* terminate list */
  };
  
  static int ide_acpi_blacklist(void)
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: 40-wire cable detected when directly connected

2008-01-11 Thread Tobias Müller

Tejun Heo schrieb:

I don't know very well about CF but does it even fill UDMA/33?  What
does 'dd if=/dev/sdc of=/dev/null bs=1M count=16 iflag=direct' say?  You
can increase count for more reliable result.


16+0 Datensätze ein
16+0 Datensätze aus
16777216 Bytes (17 MB) kopiert, 0,561688 s, 29,9 MB/s

And hdparm -I /dev/sdc says it should be compatible to udma5.

/dev/sdc:

ATA device, with non-removable media
Model Number:   SanDisk SDCFX4-8192
Serial Number:  010611E2297S0510
Firmware Revision:  HDX 4.20
Standards:
Supported: 4
Likely used: 4
Configuration:
Logical max current
cylinders   15880   15880
heads   16  16
sectors/track   63  63
--
CHS current addressable sectors:   16007040
LBAuser addressable sectors:   16007040
device size with M = 1024*1024:7815 MBytes
device size with M = 1000*1000:8195 MBytes (8 GB)
Capabilities:
LBA, IORDY(may be)(cannot be disabled)
Standby timer values: spec'd by Vendor
R/W multiple sector transfer: Max = 4   Current = 0
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4
 Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
 Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
Enabled Supported:
Write cache
   *CFA feature set



smime.p7s
Description: S/MIME Cryptographic Signature


[PATCH 19/21] ide-floppy: fix most of the remaining checkpatch.pl issues

2008-01-11 Thread Borislav Petkov
i.e.,
ERROR: switch and case should be at the same indent
ERROR: need spaces around that '=' (ctx:VxV)
ERROR: trailing statements should be on next line
WARNING: no space between function name and open parenthesis '('
WARNING: printk() should include KERN_ facility level
ERROR: That open brace { should be on the previous line
ERROR: use tabs not spaces
ERROR: do not use assignment in if condition
WARNING: braces {} are not necessary for single statement blocks
ERROR: need space after that ',' (ctx:VxV)
WARNING: line over 80 characters
ERROR: do not use assignment in if condition
...

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |  147 +++--
 1 files changed, 75 insertions(+), 72 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 0729df5..3d9b1e5 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -47,13 +47,13 @@
 #define IDEFLOPPY_DEBUG_INFO   0
 #define IDEFLOPPY_DEBUG_BUGS   1
 
-#define IDEFLOPPY_DEBUG( fmt, args... )
+#define IDEFLOPPY_DEBUG(fmt, args...)
 
 #if IDEFLOPPY_DEBUG_LOG
 #define debug_log(fmt, args...) \
printk(KERN_INFO ide-floppy:  fmt, ## args)
 #else
-#define debug_log(fmt, args... ) do {} while(0)
+#define debug_log(fmt, args...) do {} while (0)
 #endif
 
 
@@ -275,9 +275,9 @@ static int idefloppy_do_end_request(ide_drive_t *drive, int 
uptodate, int nsecs)
debug_log(Reached %s\n, __FUNCTION__);
 
switch (uptodate) {
-   case 0: error = IDEFLOPPY_ERROR_GENERAL; break;
-   case 1: error = 0; break;
-   default: error = uptodate;
+   case 0: error = IDEFLOPPY_ERROR_GENERAL; break;
+   case 1: error = 0; break;
+   default: error = uptodate;
}
if (error)
floppy-failed_pc = NULL;
@@ -396,7 +396,7 @@ static idefloppy_pc_t 
*idefloppy_next_pc_storage(ide_drive_t *drive)
idefloppy_floppy_t *floppy = drive-driver_data;
 
if (floppy-pc_stack_index == IDEFLOPPY_PC_STACK)
-   floppy-pc_stack_index=0;
+   floppy-pc_stack_index = 0;
return (floppy-pc_stack[floppy-pc_stack_index++]);
 }
 
@@ -526,7 +526,8 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
/* Clear the interrupt */
stat = drive-hwif-INB(IDE_STATUS_REG);
 
-   if ((stat  DRQ_STAT) == 0) {   /* No more interrupts */
+   if ((stat  DRQ_STAT) == 0) {
+   /* No more interrupts */
debug_log(Packet command completed, %d bytes transferred\n,
pc-actually_transferred);
clear_bit(PC_DMA_IN_PROGRESS, pc-flags);
@@ -771,7 +772,8 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK |
   IDE_TFLAG_OUT_DEVICE, bcount, dma);
 
-   if (dma) {  /* Begin DMA, if necessary */
+   if (dma) {
+   /* Begin DMA, if necessary */
set_bit(PC_DMA_IN_PROGRESS, pc-flags);
hwif-dma_start(drive);
}
@@ -785,7 +787,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
pkt_xfer_routine = idefloppy_transfer_pc;
}
 
-   if (test_bit (IDEFLOPPY_DRQ_INTERRUPT, floppy-flags)) {
+   if (test_bit(IDEFLOPPY_DRQ_INTERRUPT, floppy-flags)) {
/* Issue the packet command */
ide_execute_command(drive, WIN_PACKETCMD,
pkt_xfer_routine,
@@ -842,7 +844,7 @@ static void idefloppy_create_format_unit_cmd(idefloppy_pc_t 
*pc, int b, int l,
 
put_unaligned(cpu_to_be32(b), (unsigned int *)(pc-buffer[4]));
put_unaligned(cpu_to_be32(l), (unsigned int *)(pc-buffer[8]));
-   pc-buffer_size=12;
+   pc-buffer_size = 12;
set_bit(PC_WRITING, pc-flags);
 }
 
@@ -858,15 +860,15 @@ static void 
idefloppy_create_mode_sense_cmd(idefloppy_pc_t *pc, u8 page_code,
pc-c[2] = page_code + (type  6);
 
switch (page_code) {
-   case IDEFLOPPY_CAPABILITIES_PAGE:
-   length += 12;
-   break;
-   case IDEFLOPPY_FLEXIBLE_DISK_PAGE:
-   length += 32;
-   break;
-   default:
-   printk(KERN_ERR ide-floppy: unsupported page code 
-   in create_mode_sense_cmd\n);
+   case IDEFLOPPY_CAPABILITIES_PAGE:
+   length += 12;
+   break;
+   case IDEFLOPPY_FLEXIBLE_DISK_PAGE:
+   length += 32;
+   break;
+   default:
+   printk(KERN_ERR ide-floppy: unsupported page code in %s\n,
+   __FUNCTION__);
}
put_unaligned(cpu_to_be16(length), (u16 *) pc-c[7]);
pc-request_transfer = length;
@@ -893,7 +895,7 @@ static void 

[PATCH 15/21] ide-floppy: disambiguate function names

2008-01-11 Thread Borislav Petkov
There were two almost identical function names in ide-floppy.c, which makes 
their
distinction almost impossible. While ide_floppy_release() cleans up the object
after the last reference to it has been dropped, idefloppy_release() is the 
blkdev
.release method from struct block_device_operations which releases that last 
reference.

Rename ide_floppy_release() to idefloppy_cleanup_obj() in order to make its 
purpose
more clear. There should be no functionality change resulting from this patch.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index b718615..6e8926a 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -234,12 +234,12 @@ static struct ide_floppy_obj *ide_floppy_get(struct 
gendisk *disk)
return floppy;
 }
 
-static void ide_floppy_release(struct kref *);
+static void idefloppy_cleanup_obj(struct kref *);
 
 static void ide_floppy_put(struct ide_floppy_obj *floppy)
 {
mutex_lock(idefloppy_ref_mutex);
-   kref_put(floppy-kref, ide_floppy_release);
+   kref_put(floppy-kref, idefloppy_cleanup_obj);
mutex_unlock(idefloppy_ref_mutex);
 }
 
@@ -1431,7 +1431,7 @@ static void ide_floppy_remove(ide_drive_t *drive)
ide_floppy_put(floppy);
 }
 
-static void ide_floppy_release(struct kref *kref)
+static void idefloppy_cleanup_obj(struct kref *kref)
 {
struct ide_floppy_obj *floppy = to_ide_floppy(kref);
ide_drive_t *drive = floppy-drive;
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 06/21] ide-floppy: remove struct idefloppy_flexible_disk_page

2008-01-11 Thread Borislav Petkov
The driver used to test whether the flexible disk page has changed by memcmp-ing
it with a cached copy of a previous version of the page from a different remo-
vable medium. Since, according to the SFF-8070i spec, the flexible disk page
specifies parameters relating to the currently installed medium type, this
comparison is now done by simply checking whether the medium has changed.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   89 -
 1 files changed, 32 insertions(+), 57 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 2b9885f..679d48e 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -120,33 +120,6 @@ typedef struct idefloppy_packet_command_s {
 #definePC_SUPPRESS_ERROR   6   /* Suppress error 
reporting */
 
 /*
- * Flexible disk page.
- */
-typedef struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsignedpage_code   :6; /* Page code - Should be 0x5 */
-   unsignedreserved1_6 :1; /* Reserved */
-   unsignedps  :1; /* The device is capable of 
saving the page */
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedps  :1; /* The device is capable of 
saving the page */
-   unsignedreserved1_6 :1; /* Reserved */
-   unsignedpage_code   :6; /* Page code - Should be 0x5 */
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u8  page_length;/* Page Length - Should be 0x1e 
*/
-   u16 transfer_rate;  /* In kilobits per second */
-   u8  heads, sectors; /* Number of heads, Number of 
sectors per track */
-   u16 sector_size;/* Byes per sector */
-   u16 cyls;   /* Number of cylinders */
-   u8  reserved10[10];
-   u8  motor_delay;/* Motor off delay */
-   u8  reserved21[7];
-   u16 rpm;/* Rotations per minute */
-   u8  reserved30[2];
-} idefloppy_flexible_disk_page_t;
- 
-/*
  * Format capacity
  */
 typedef struct {
@@ -213,8 +186,6 @@ typedef struct ide_floppy_obj {
int blocks, block_size, bs_factor;
/* Last format capacity */
idefloppy_capacity_descriptor_t capacity;
-   /* Copy of the flexible disk page */
-   idefloppy_flexible_disk_page_t flexible_disk_page;
/* Write protect */
int wp;
/* Supports format progress report */
@@ -1188,50 +1159,54 @@ static int idefloppy_queue_pc_tail (ide_drive_t 
*drive,idefloppy_pc_t *pc)
 }
 
 /*
- * Look at the flexible disk page parameters. We will ignore the CHS
- * capacity parameters and use the LBA parameters instead.
+ * Look at the flexible disk page parameters. We will ignore the CHS capacity
+ * parameters and use the LBA parameters instead.
  */
-static int idefloppy_get_flexible_disk_page (ide_drive_t *drive)
+static int idefloppy_get_flexible_disk_page(ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
idefloppy_pc_t pc;
-   idefloppy_mode_parameter_header_t *header;
-   idefloppy_flexible_disk_page_t *page;
int capacity, lba_capacity;
+   u8 heads, sectors;
+   u16 transfer_rate, sector_size, cyls, rpm;
 
-   idefloppy_create_mode_sense_cmd(pc, IDEFLOPPY_FLEXIBLE_DISK_PAGE, 
MODE_SENSE_CURRENT);
-   if (idefloppy_queue_pc_tail(drive,pc)) {
-   printk(KERN_ERR ide-floppy: Can't get flexible disk 
-   page parameters\n);
+   idefloppy_create_mode_sense_cmd(pc, IDEFLOPPY_FLEXIBLE_DISK_PAGE,
+   MODE_SENSE_CURRENT);
+
+   if (idefloppy_queue_pc_tail(drive, pc)) {
+   printk(KERN_ERR ide-floppy: Can't get flexible disk page
+parameters\n);
return 1;
}
-   header = (idefloppy_mode_parameter_header_t *) pc.buffer;
-   floppy-wp = header-wp;
+   floppy-wp = pc.buffer[3]  0x80;
set_disk_ro(floppy-disk, floppy-wp);
-   page = (idefloppy_flexible_disk_page_t *) (header + 1);
-
-   page-transfer_rate = be16_to_cpu(page-transfer_rate);
-   page-sector_size = be16_to_cpu(page-sector_size);
-   page-cyls = be16_to_cpu(page-cyls);
-   page-rpm = be16_to_cpu(page-rpm);
-   capacity = page-cyls * page-heads * page-sectors * page-sector_size;
-   if (memcmp (page, floppy-flexible_disk_page, sizeof 
(idefloppy_flexible_disk_page_t)))
+
+   transfer_rate = be16_to_cpu(*(u16 *)pc.buffer[8 + 2]);
+   sector_size   = be16_to_cpu(*(u16 *)pc.buffer[8 + 6]);
+   cyls  = be16_to_cpu(*(u16 *)pc.buffer[8 + 8]);
+   rpm   = be16_to_cpu(*(u16 *)pc.buffer[8 + 28]);
+   heads  

[PATCH 01/21] ide-floppy: convert to generic packet commands

2008-01-11 Thread Borislav Petkov
Replace the ide-floppy packet commands opcode defines with the generic ones.
Add a missing GPCMD_WRITE_12 (opcode 0xaa) to the generic ones in cdrom.h. The
last one can be found in the current version of INF-8090, p.905.

CC: Jens Axboe [EMAIL PROTECTED]
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   44 
 include/linux/cdrom.h|1 +
 2 files changed, 13 insertions(+), 32 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 3512637..e4ebb21 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -273,26 +273,6 @@ typedef struct ide_floppy_obj {
 #define IDEFLOPPY_ZIP_DRIVE5   /* Requires BH algorithm for 
packets */
 
 /*
- * ATAPI floppy drive packet commands
- */
-#define IDEFLOPPY_FORMAT_UNIT_CMD  0x04
-#define IDEFLOPPY_INQUIRY_CMD  0x12
-#define IDEFLOPPY_MODE_SELECT_CMD  0x55
-#define IDEFLOPPY_MODE_SENSE_CMD   0x5a
-#define IDEFLOPPY_READ10_CMD   0x28
-#define IDEFLOPPY_READ12_CMD   0xa8
-#define IDEFLOPPY_READ_CAPACITY_CMD0x23
-#define IDEFLOPPY_REQUEST_SENSE_CMD0x03
-#define IDEFLOPPY_PREVENT_REMOVAL_CMD  0x1e
-#define IDEFLOPPY_SEEK_CMD 0x2b
-#define IDEFLOPPY_START_STOP_CMD   0x1b
-#define IDEFLOPPY_TEST_UNIT_READY_CMD  0x00
-#define IDEFLOPPY_VERIFY_CMD   0x2f
-#define IDEFLOPPY_WRITE10_CMD  0x2a
-#define IDEFLOPPY_WRITE12_CMD  0xaa
-#define IDEFLOPPY_WRITE_VERIFY_CMD 0x2e
-
-/*
  * Defines for the mode sense command
  */
 #define MODE_SENSE_CURRENT 0x00
@@ -696,8 +676,8 @@ static void idefloppy_init_pc (idefloppy_pc_t *pc)
 
 static void idefloppy_create_request_sense_cmd (idefloppy_pc_t *pc)
 {
-   idefloppy_init_pc(pc);  
-   pc-c[0] = IDEFLOPPY_REQUEST_SENSE_CMD;
+   idefloppy_init_pc(pc);
+   pc-c[0] = GPCMD_REQUEST_SENSE;
pc-c[4] = 255;
pc-request_transfer = 18;
pc-callback = idefloppy_request_sense_callback;
@@ -762,7 +742,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t 
*drive)
debug_log(KERN_INFO ide-floppy: %s: I/O error\n,
drive-name);
rq-errors++;
-   if (pc-c[0] == IDEFLOPPY_REQUEST_SENSE_CMD) {
+   if (pc-c[0] == GPCMD_REQUEST_SENSE) {
printk(KERN_ERR ide-floppy: I/O error in 
request sense command\n);
return ide_do_reset(drive);
@@ -962,7 +942,7 @@ static ide_startstop_t idefloppy_issue_pc (ide_drive_t 
*drive, idefloppy_pc_t *p
u8 dma;
 
if (floppy-failed_pc == NULL 
-   pc-c[0] != IDEFLOPPY_REQUEST_SENSE_CMD)
+   pc-c[0] != GPCMD_REQUEST_SENSE)
floppy-failed_pc = pc;
/* Set the current packet command */
floppy-pc = pc;
@@ -1052,14 +1032,14 @@ static void idefloppy_create_prevent_cmd 
(idefloppy_pc_t *pc, int prevent)
prevent = %d\n, prevent);
 
idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_PREVENT_REMOVAL_CMD;
+   pc-c[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
pc-c[4] = prevent;
 }
 
 static void idefloppy_create_read_capacity_cmd (idefloppy_pc_t *pc)
 {
idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_READ_CAPACITY_CMD;
+   pc-c[0] = GPCMD_READ_FORMAT_CAPACITIES;
pc-c[7] = 255;
pc-c[8] = 255;
pc-request_transfer = 255;
@@ -1069,7 +1049,7 @@ static void idefloppy_create_format_unit_cmd 
(idefloppy_pc_t *pc, int b, int l,
  int flags)
 {
idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_FORMAT_UNIT_CMD;
+   pc-c[0] = GPCMD_FORMAT_UNIT;
pc-c[1] = 0x17;
 
memset(pc-buffer, 0, 12);
@@ -1094,7 +1074,7 @@ static void idefloppy_create_mode_sense_cmd 
(idefloppy_pc_t *pc, u8 page_code, u
u16 length = sizeof(idefloppy_mode_parameter_header_t);

idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_MODE_SENSE_CMD;
+   pc-c[0] = GPCMD_MODE_SENSE_10;
pc-c[1] = 0;
pc-c[2] = page_code + (type  6);
 
@@ -1116,14 +1096,14 @@ static void idefloppy_create_mode_sense_cmd 
(idefloppy_pc_t *pc, u8 page_code, u
 static void idefloppy_create_start_stop_cmd (idefloppy_pc_t *pc, int start)
 {
idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_START_STOP_CMD;
+   pc-c[0] = GPCMD_START_STOP_UNIT;
pc-c[4] = start;
 }
 
 static void idefloppy_create_test_unit_ready_cmd(idefloppy_pc_t *pc)
 {
idefloppy_init_pc(pc);
-   pc-c[0] = IDEFLOPPY_TEST_UNIT_READY_CMD;
+   pc-c[0] = GPCMD_TEST_UNIT_READY;
 }
 
 static void idefloppy_create_rw_cmd (idefloppy_floppy_t *floppy, 
idefloppy_pc_t *pc, struct request *rq, unsigned long sector)
@@ -1138,10 +1118,10 @@ static void idefloppy_create_rw_cmd 

[PATCH 18/21] ide-floppy: fix error handling in idefloppy_probe()

2008-01-11 Thread Borislav Petkov
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 89b26ea..0729df5 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -1737,7 +1737,8 @@ static int ide_floppy_probe(ide_drive_t *drive)
 emulation.\n, drive-name);
goto failed;
}
-   if ((floppy = kzalloc(sizeof (idefloppy_floppy_t), GFP_KERNEL)) == 
NULL) {
+   floppy = kzalloc(sizeof(idefloppy_floppy_t), GFP_KERNEL);
+   if (!floppy) {
printk(KERN_ERR ide-floppy: %s: Can't allocate a floppy
 structure\n, drive-name);
goto failed;
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 05/21] ide-floppy: remove struct idefloppy_capabilities_page

2008-01-11 Thread Borislav Petkov
BIG FAT WARNING: This patch has already been applied to Bart's quilt tree!

This change is rather temporary and is in preparation of using generic commands
as is the case with ide-cd and the uniform cdrom layer (i.e. 
init_cdrom_command())
However, before this happens, we'll have to remove all typedefs and teach
idefloppy_create_mode_sense_cmd() to work directly on u8 buffers.

Also, since idefloppy_get_capability_page() was used to read only the sfrp bit,
rename the latter so that the name reflects what it does.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   55 +-
 1 files changed, 6 insertions(+), 49 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index e8fe8ef..2b9885f 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -120,44 +120,6 @@ typedef struct idefloppy_packet_command_s {
 #definePC_SUPPRESS_ERROR   6   /* Suppress error 
reporting */
 
 /*
- * Removable Block Access Capabilities Page
- */
-typedef struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsignedpage_code   :6; /* Page code - Should be 0x1b */
-   unsignedreserved1_6 :1; /* Reserved */
-   unsignedps  :1; /* Should be 0 */
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedps  :1; /* Should be 0 */
-   unsignedreserved1_6 :1; /* Reserved */
-   unsignedpage_code   :6; /* Page code - Should be 0x1b */
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u8  page_length;/* Page Length - Should be 0xa 
*/
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsignedreserved2   :6;
-   unsignedsrfp:1; /* Supports reporting progress 
of format */
-   unsignedsflp:1; /* System floppy type device */
-   unsignedtlun:3; /* Total logical units 
supported by the device */
-   unsignedreserved3   :3;
-   unsignedsml :1; /* Single / Multiple lun 
supported */
-   unsignedncd :1; /* Non cd optical device */
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedsflp:1; /* System floppy type device */
-   unsignedsrfp:1; /* Supports reporting progress 
of format */
-   unsignedreserved2   :6;
-   unsignedncd :1; /* Non cd optical device */
-   unsignedsml :1; /* Single / Multiple lun 
supported */
-   unsignedreserved3   :3;
-   unsignedtlun:3; /* Total logical units 
supported by the device */
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u8  reserved[8];
-} idefloppy_capabilities_page_t;
-
-/*
  * Flexible disk page.
  */
 typedef struct {
@@ -397,7 +359,8 @@ typedef struct {
 } idefloppy_request_sense_result_t;
 
 /*
- * Pages of the SELECT SENSE / MODE SENSE packet commands.
+ * Pages of the SELECT SENSE / MODE SENSE packet commands.
+ * See SFF-8070i spec.
  */
 #defineIDEFLOPPY_CAPABILITIES_PAGE 0x1b
 #define IDEFLOPPY_FLEXIBLE_DISK_PAGE   0x05
@@ -1273,25 +1236,20 @@ static int idefloppy_get_flexible_disk_page 
(ide_drive_t *drive)
return 0;
 }
 
-static int idefloppy_get_capability_page(ide_drive_t *drive)
+static int idefloppy_get_sfrp_bit(ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
idefloppy_pc_t pc;
-   idefloppy_mode_parameter_header_t *header;
-   idefloppy_capabilities_page_t *page;
 
floppy-srfp = 0;
idefloppy_create_mode_sense_cmd(pc, IDEFLOPPY_CAPABILITIES_PAGE,
 MODE_SENSE_CURRENT);
 
set_bit(PC_SUPPRESS_ERROR, pc.flags);
-   if (idefloppy_queue_pc_tail(drive,pc)) {
+   if (idefloppy_queue_pc_tail(drive, pc))
return 1;
-   }
 
-   header = (idefloppy_mode_parameter_header_t *) pc.buffer;
-   page= (idefloppy_capabilities_page_t *)(header+1);
-   floppy-srfp = page-srfp;
+   floppy-srfp = pc.buffer[8 + 2]  0x40;
return (0);
 }
 
@@ -1497,8 +1455,7 @@ static int idefloppy_begin_format(ide_drive_t *drive, int 
__user *arg)
return (-EFAULT);
}
 
-   /* Get the SFRP bit */
-   (void) idefloppy_get_capability_page(drive);
+   (void) idefloppy_get_sfrp_bit(drive);
idefloppy_create_format_unit_cmd(pc, blocks, length, flags);
if (idefloppy_queue_pc_tail(drive, pc)) {
 return (-EIO);
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  

[PATCH 10/21] ide-floppy: remove struct idefloppy_mode_parameter_header

2008-01-11 Thread Borislav Petkov
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   25 -
 1 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 7d4ac0b..11c2c9b 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -238,24 +238,6 @@ struct idefloppy_id_gcw {
 #defineIDEFLOPPY_CAPABILITIES_PAGE 0x1b
 #define IDEFLOPPY_FLEXIBLE_DISK_PAGE   0x05
 
-/*
- * Mode Parameter Header for the MODE SENSE packet command
- */
-typedef struct {
-   u16 mode_data_length;   /* Length of the following data 
transfer */
-   u8  medium_type;/* Medium Type */
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsignedreserved3   :7;
-   unsignedwp  :1; /* Write protect */
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedwp  :1; /* Write protect */
-   unsignedreserved3   :7;
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u8  reserved[4];
-} idefloppy_mode_parameter_header_t;
-
 static DEFINE_MUTEX(idefloppy_ref_mutex);
 
 #define to_ide_floppy(obj) container_of(obj, struct ide_floppy_obj, kref)
@@ -899,10 +881,11 @@ static void idefloppy_create_format_unit_cmd 
(idefloppy_pc_t *pc, int b, int l,
 /*
  * A mode sense command is used to sense floppy parameters.
  */
-static void idefloppy_create_mode_sense_cmd (idefloppy_pc_t *pc, u8 page_code, 
u8 type)
+static void idefloppy_create_mode_sense_cmd(idefloppy_pc_t *pc, u8 page_code,
+   u8 type)
 {
-   u16 length = sizeof(idefloppy_mode_parameter_header_t);
-   
+   u16 length = 8; /* sizeof(Mode Parameter Header) = 8 Bytes */
+
idefloppy_init_pc(pc);
pc-c[0] = GPCMD_MODE_SENSE_10;
pc-c[1] = 0;
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 08/21] ide-floppy: remove struct idefloppy_inquiry_result

2008-01-11 Thread Borislav Petkov
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   41 -
 1 files changed, 0 insertions(+), 41 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 5c85833..d98264e 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -232,47 +232,6 @@ struct idefloppy_id_gcw {
 };
 
 /*
- * INQUIRY packet command - Data Format
- */
-typedef struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsigneddevice_type :5; /* Peripheral Device Type */
-   unsignedreserved0_765   :3; /* Peripheral Qualifier - 
Reserved */
-   unsignedreserved1_6t0   :7; /* Reserved */
-   unsignedrmb :1; /* Removable Medium Bit */
-   unsignedansi_version:3; /* ANSI Version */
-   unsignedecma_version:3; /* ECMA Version */
-   unsignediso_version :2; /* ISO Version */
-   unsignedresponse_format :4; /* Response Data Format */
-   unsignedreserved3_45:2; /* Reserved */
-   unsignedreserved3_6 :1; /* TrmIOP - Reserved */
-   unsignedreserved3_7 :1; /* AENC - Reserved */
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedreserved0_765   :3; /* Peripheral Qualifier - 
Reserved */
-   unsigneddevice_type :5; /* Peripheral Device Type */
-   unsignedrmb :1; /* Removable Medium Bit */
-   unsignedreserved1_6t0   :7; /* Reserved */
-   unsignediso_version :2; /* ISO Version */
-   unsignedecma_version:3; /* ECMA Version */
-   unsignedansi_version:3; /* ANSI Version */
-   unsignedreserved3_7 :1; /* AENC - Reserved */
-   unsignedreserved3_6 :1; /* TrmIOP - Reserved */
-   unsignedreserved3_45:2; /* Reserved */
-   unsignedresponse_format :4; /* Response Data Format */
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u8  additional_length;  /* Additional Length 
(total_length-4) */
-   u8  rsv5, rsv6, rsv7;   /* Reserved */
-   u8  vendor_id[8];   /* Vendor Identification */
-   u8  product_id[16]; /* Product Identification */
-   u8  revision_level[4];  /* Revision Level */
-   u8  vendor_specific[20];/* Vendor Specific - Optional */
-   u8  reserved56t95[40];  /* Reserved - Optional */
-   /* Additional information may 
be returned */
-} idefloppy_inquiry_result_t;
-
-/*
  * REQUEST SENSE packet command result - Data Format.
  */
 typedef struct {
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 02/21] ide-floppy: replace ntoh{s,l} and hton{s,l} calls with the generic byteorder

2008-01-11 Thread Borislav Petkov
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   28 ++--
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index e4ebb21..e63758a 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -1060,8 +1060,8 @@ static void idefloppy_create_format_unit_cmd 
(idefloppy_pc_t *pc, int b, int l,
pc-buffer[1] ^= 0x20;  /* ... turn off DCRT bit */
pc-buffer[3] = 8;
 
-   put_unaligned(htonl(b), (unsigned int *)(pc-buffer[4]));
-   put_unaligned(htonl(l), (unsigned int *)(pc-buffer[8]));
+   put_unaligned(cpu_to_be32(b), (unsigned int *)(pc-buffer[4]));
+   put_unaligned(cpu_to_be32(l), (unsigned int *)(pc-buffer[8]));
pc-buffer_size=12;
set_bit(PC_WRITING, pc-flags);
 }
@@ -1089,7 +1089,7 @@ static void idefloppy_create_mode_sense_cmd 
(idefloppy_pc_t *pc, u8 page_code, u
printk(KERN_ERR ide-floppy: unsupported page code 
in create_mode_sense_cmd\n);
}
-   put_unaligned(htons(length), (u16 *) pc-c[7]);
+   put_unaligned(cpu_to_be16(length), (u16 *) pc-c[7]);
pc-request_transfer = length;
 }
 
@@ -1119,12 +1119,12 @@ static void idefloppy_create_rw_cmd (idefloppy_floppy_t 
*floppy, idefloppy_pc_t
idefloppy_init_pc(pc);
if (test_bit(IDEFLOPPY_USE_READ12, floppy-flags)) {
pc-c[0] = cmd == READ ? GPCMD_READ_12 : GPCMD_WRITE_12;
-   put_unaligned(htonl(blocks), (unsigned int *) pc-c[6]);
+   put_unaligned(cpu_to_be32(blocks), (unsigned int *) pc-c[6]);
} else {
pc-c[0] = cmd == READ ? GPCMD_READ_10 : GPCMD_WRITE_10;
-   put_unaligned(htons(blocks), (unsigned short *) pc-c[7]);
+   put_unaligned(cpu_to_be16(blocks), (unsigned short *)pc-c[7]);
}
-   put_unaligned(htonl(block), (unsigned int *) pc-c[2]);
+   put_unaligned(cpu_to_be32(block), (unsigned int *) pc-c[2]);
pc-callback = idefloppy_rw_callback;
pc-rq = rq;
pc-b_count = cmd == READ ? 0 : rq-bio-bi_size;
@@ -1252,10 +1252,10 @@ static int idefloppy_get_flexible_disk_page 
(ide_drive_t *drive)
set_disk_ro(floppy-disk, floppy-wp);
page = (idefloppy_flexible_disk_page_t *) (header + 1);
 
-   page-transfer_rate = ntohs(page-transfer_rate);
-   page-sector_size = ntohs(page-sector_size);
-   page-cyls = ntohs(page-cyls);
-   page-rpm = ntohs(page-rpm);
+   page-transfer_rate = be16_to_cpu(page-transfer_rate);
+   page-sector_size = be16_to_cpu(page-sector_size);
+   page-cyls = be16_to_cpu(page-cyls);
+   page-rpm = be16_to_cpu(page-rpm);
capacity = page-cyls * page-heads * page-sectors * page-sector_size;
if (memcmp (page, floppy-flexible_disk_page, sizeof 
(idefloppy_flexible_disk_page_t)))
printk(KERN_INFO %s: %dkB, %d/%d/%d CHS, %d kBps, 
@@ -1328,8 +1328,8 @@ static int idefloppy_get_capacity (ide_drive_t *drive)
descriptor = (idefloppy_capacity_descriptor_t *) (header + 1);
 
for (i = 0; i  descriptors; i++, descriptor++) {
-   blocks = descriptor-blocks = ntohl(descriptor-blocks);
-   length = descriptor-length = ntohs(descriptor-length);
+   blocks = descriptor-blocks = be32_to_cpu(descriptor-blocks);
+   length = descriptor-length = be16_to_cpu(descriptor-length);
 
if (!i) 
{
@@ -1456,8 +1456,8 @@ static int idefloppy_get_format_capacities(ide_drive_t 
*drive, int __user *arg)
if (i == 0)
continue;   /* Skip the first descriptor */
 
-   blocks = ntohl(descriptor-blocks);
-   length = ntohs(descriptor-length);
+   blocks = be32_to_cpu(descriptor-blocks);
+   length = be16_to_cpu(descriptor-length);
 
if (put_user(blocks, argp))
return(-EFAULT);
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 04/21] ide-floppy: cleanup and unify debugging macro calls

2008-01-11 Thread Borislav Petkov
* some debug_log() calls were not using ide-floppy:  prefix

* a few used printk levels different than KERN_INFO (KERN_NOTICE
  and KERN_ERR, which is the default one if no level is given)

There should be no functional change resulting from this patch.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   66 +-
 1 files changed, 30 insertions(+), 36 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 66dfd18..e8fe8ef 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -58,7 +58,8 @@
 #define IDEFLOPPY_DEBUG( fmt, args... )
 
 #if IDEFLOPPY_DEBUG_LOG
-#define debug_log printk
+#define debug_log(fmt, args...) \
+   printk(KERN_INFO ide-floppy:  fmt, ## args)
 #else
 #define debug_log(fmt, args... ) do {} while(0)
 #endif
@@ -478,7 +479,7 @@ static int idefloppy_do_end_request(ide_drive_t *drive, int 
uptodate, int nsecs)
struct request *rq = HWGROUP(drive)-rq;
int error;
 
-   debug_log(KERN_INFO Reached idefloppy_end_request\n);
+   debug_log(Reached %s\n, __FUNCTION__);
 
switch (uptodate) {
case 0: error = IDEFLOPPY_ERROR_GENERAL; break;
@@ -624,21 +625,20 @@ static void idefloppy_analyze_error (ide_drive_t 
*drive,idefloppy_request_sense_
floppy-progress_indication = result-sksv[0]  0x80 ?
(u16)get_unaligned((u16 *)(result-sksv+1)):0x1;
if (floppy-failed_pc)
-   debug_log(KERN_INFO ide-floppy: pc = %x, sense key = %x, 
-   asc = %x, ascq = %x\n, floppy-failed_pc-c[0],
-   result-sense_key, result-asc, result-ascq);
+   debug_log(pc = %x, sense key = %x, asc = %x, ascq = %x\n,
+   floppy-failed_pc-c[0], result-sense_key,
+   result-asc, result-ascq);
else
-   debug_log(KERN_INFO ide-floppy: sense key = %x, asc = %x, 
-   ascq = %x\n, result-sense_key,
-   result-asc, result-ascq);
+   debug_log(sense key = %x, asc = %x, ascq = %x\n,
+   result-sense_key, result-asc, result-ascq);
 }
 
 static void idefloppy_request_sense_callback (ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
 
-   debug_log(KERN_INFO ide-floppy: Reached %s\n, __FUNCTION__);
-   
+   debug_log(Reached %s\n, __FUNCTION__);
+
if (!floppy-pc-error) {
idefloppy_analyze_error(drive,(idefloppy_request_sense_result_t 
*) floppy-pc-buffer);
idefloppy_do_end_request(drive, 1, 0);
@@ -654,8 +654,8 @@ static void idefloppy_request_sense_callback (ide_drive_t 
*drive)
 static void idefloppy_pc_callback (ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
-   
-   debug_log(KERN_INFO ide-floppy: Reached %s\n, __FUNCTION__);
+
+   debug_log(Reached %s\n, __FUNCTION__);
 
idefloppy_do_end_request(drive, floppy-pc-error ? 0 : 1, 0);
 }
@@ -714,8 +714,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t 
*drive)
u16 bcount;
u8 stat, ireason;
 
-   debug_log(KERN_INFO ide-floppy: Reached %s interrupt handler\n,
-   __FUNCTION__);
+   debug_log(Reached %s interrupt handler\n, __FUNCTION__);
 
if (test_bit(PC_DMA_IN_PROGRESS, pc-flags)) {
if (HWIF(drive)-ide_dma_end(drive)) {
@@ -724,23 +723,22 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t 
*drive)
pc-actually_transferred = pc-request_transfer;
idefloppy_update_buffers(drive, pc);
}
-   debug_log(KERN_INFO ide-floppy: DMA finished\n);
+   debug_log(DMA finished\n);
}
 
/* Clear the interrupt */
stat = drive-hwif-INB(IDE_STATUS_REG);
 
if ((stat  DRQ_STAT) == 0) {   /* No more interrupts */
-   debug_log(KERN_INFO Packet command completed, %d bytes 
-   transferred\n, pc-actually_transferred);
+   debug_log(Packet command completed, %d bytes transferred\n,
+   pc-actually_transferred);
clear_bit(PC_DMA_IN_PROGRESS, pc-flags);
 
local_irq_enable_in_hardirq();
 
if ((stat  ERR_STAT) || test_bit(PC_DMA_ERROR, pc-flags)) {
/* Error detected */
-   debug_log(KERN_INFO ide-floppy: %s: I/O error\n,
-   drive-name);
+   debug_log(I/O error\n, drive-name);
rq-errors++;
if (pc-c[0] == GPCMD_REQUEST_SENSE) {
printk(KERN_ERR ide-floppy: I/O error in 
@@ -801,9 +799,8 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t 
*drive)
 

[PATCH 00/21] ide-floppy redux v2

2008-01-11 Thread Borislav Petkov

Hi Bart,

   here's the second version of the ide-floppy refactoring trail. All the
patches are based on the version of your quilt tree from the 05.01. Also, you've
already applied patch 5 in this series but i'm submitting it still for the sake
of completeness.


 drivers/ide/ide-cd.c |2 -
 drivers/ide/ide-floppy.c | 1403 ++
 include/linux/cdrom.h|1 +
 include/linux/ide.h  |3 +
 4 files changed, 558 insertions(+), 851 deletions(-)

p.s. Next stop: ide-tape.c :)
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 16/21] ide-floppy: use an xfer_func_t and io_buf_t typedefs in order to unify rw

2008-01-11 Thread Borislav Petkov
Also, move xfer_func_t typedef to the ide.h since it is used by two drivers
now (more coming).

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-cd.c |2 --
 drivers/ide/ide-floppy.c |   37 ++---
 include/linux/ide.h  |3 +++
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 3b3e6c1..7e53a03 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -604,8 +604,6 @@ static ide_startstop_t cdrom_transfer_packet_command 
(ide_drive_t *drive,
  * Block read functions.
  */
 
-typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
-
 static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
 {
while (len  0) {
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 6e8926a..c889c16 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -491,19 +491,22 @@ static void idefloppy_retry_pc(ide_drive_t *drive)
idefloppy_queue_pc_head(drive, pc, rq);
 }
 
-/*
- * The usual interrupt handler called during a packet command.
- */
+typedef void (io_buf_t)(ide_drive_t *, idefloppy_pc_t *, unsigned int);
+
+/*  The usual interrupt handler called during a packet command. */
 static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
ide_hwif_t *hwif = drive-hwif;
idefloppy_pc_t *pc = floppy-pc;
struct request *rq = pc-rq;
+   xfer_func_t *xferfunc;
+   io_buf_t *iobuf_func;
unsigned int temp;
u16 bcount;
u8 stat, ireason;
int dma_error = 0;
+   int write = (rq_data_dir(rq) == WRITE) ? 1 : 0;
 
debug_log(Reached %s interrupt handler\n, __FUNCTION__);
 
@@ -511,9 +514,7 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
dma_error = HWIF(drive)-ide_dma_end(drive);
if (dma_error) {
printk(KERN_ERR %s: DMA %s error\n, drive-name,
-   rq_data_dir(rq) == WRITE ?
-   write :
-   read);
+   write ? write : read);
set_bit(PC_DMA_ERROR, pc-flags);
} else {
pc-actually_transferred = pc-request_transfer;
@@ -568,7 +569,7 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
ireason = hwif-INB(IDE_IREASON_REG);
 
if (ireason  CD) {
-   printk(KERN_ERR ide-floppy: CoD != 0 in idefloppy_pc_intr\n);
+   printk(KERN_ERR ide-floppy: CoD != 0 in %s\n, __FUNCTION__);
return ide_do_reset(drive);
}
if (((ireason  IO) == IO) == test_bit(PC_WRITING, pc-flags)) {
@@ -600,20 +601,18 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t 
*drive)
}
}
if (test_bit(PC_WRITING, pc-flags)) {
-   if (pc-buffer != NULL)
-   /* Write the current buffer */
-   hwif-atapi_output_bytes(drive, pc-current_position,
-bcount);
-   else
-   idefloppy_output_buffers(drive, pc, bcount);
+   xferfunc = hwif-atapi_output_bytes;
+   iobuf_func = idefloppy_output_buffers;
} else {
-   if (pc-buffer != NULL)
-   /* Read the current buffer */
-   hwif-atapi_input_bytes(drive, pc-current_position,
-   bcount);
-   else
-   idefloppy_input_buffers(drive, pc, bcount);
+   xferfunc = hwif-atapi_input_bytes;
+   iobuf_func = idefloppy_input_buffers;
}
+
+   if (pc-buffer != NULL)
+   xferfunc(drive, pc-current_position, bcount);
+   else
+   iobuf_func(drive, pc, bcount);
+
/* Update the current position */
pc-actually_transferred += bcount;
pc-current_position += bcount;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index bfbc975..a6cf280 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -626,6 +626,9 @@ typedef struct hwif_s {
 typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);
 typedef int (ide_expiry_t)(ide_drive_t *);
 
+/* used by ide-cd, ide-floppy, etc. */
+typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
+
 typedef struct hwgroup_s {
/* irq handler, if active */
ide_startstop_t (*handler)(ide_drive_t *);
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


buffer_head list oops with new PATA driver: help request

2008-01-11 Thread James Chapman
I'm seeking help for a problem we're having with a new PATA driver for a
Toshiba TX4939 MIPS SoC.

The driver works fine for most use cases, but we get an oops when stress
testing with bonnie++. The oops is always a null pointer while walking a
buffer_head list (b_this_page is null) when bonnie++ reads back its
data. This only happens when DMA is enabled, and only when bonnie++
parameters are chosen to stress memory usage such that buffers are
recycled by the kernel. The oops still happens if the CPU cache is
disabled or if bonnie++'s -b option is specified to force a sync() on
every write.

Below is the most common oops trace. I'm wondering if this can be caused
by a bug in the driver or if there is a platform-specific issue? I can
post the driver source here if it would be useful.

Kernel: 2.6.22 (also happens with 2.6.23)
Arch: mips
RAM: 256M

# bonnie++ -d bench -s 512 -n 1 -x 1 -u root -r 256 -f
Writing intelligently...done
Rewriting...Unhandled kernel unaligned access[#1]:
Cpu 0
$ 0   :  fffd  
$ 4   :   01010101 8463d4d0
$ 8   : 81118880 81118860  8f0d6884
$12   : 0001 0008 0001 8f0d6884
$16   : 81118880   8f0d67b8
$20   : 812d1f08  0001 842c9700
$24   : 0001 000e
$28   : 812d 812d1c48 000c 8016e1f8
Hi: 
Lo: 0005
epc   : 801d88d4 __mpage_writepage+0xc0/0x8e8 Not tainted
ra: 8016e1f8 write_cache_pages+0x35c/0x4fc
Status: 10008403KERNEL EXL IE
Cause : 1010
BadVA : 01010101
PrId  : 2d40
Modules linked in: pata_tx49xx
Process pdflush (pid: 76, threadinfo=812d, task=812fa900)
Stack : 0060 801334b4  81a9c930 0020 0070 00446d85

8fe07600  8030b5ec 812d1f08 031a 802ff96c 
fffd
842c9100 842c9100 0060  0008  8f1342d0
8fdd0c90
0060 0060  802fb94c 0968  000e
8f0d6880
 812d1d58 8f0d6890 812d1d90 80165dd4 0001 8f0d6880

...
Call Trace:
[801d88d4] __mpage_writepage+0xc0/0x8e8
[8016e1f8] write_cache_pages+0x35c/0x4fc
[801d9140] mpage_writepages+0x44/0xa8
[8016e438] do_writepages+0x74/0x7c
[801c3528] __writeback_single_inode+0xb4/0x47c
[801c3fa0] sync_sb_inodes+0x208/0x33c
[801c4420] writeback_inodes+0x11c/0x13c
[8016ce98] background_writeout+0xcc/0x120
[8016efc0] pdflush+0x1e0/0x2d0
[80147820] kthread+0x88/0xc4
[80105ee4] kernel_thread_helper+0x10/0x18


Code: 9021  8d07000c  00e03021 8cc2 00021082  30420001
00028036  8cc



-- 
James Chapman
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development


-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 14/21] ide-floppy: mv idefloppy_{should_,}report_error

2008-01-11 Thread Borislav Petkov
In addition to shortening the function name, move the printk-call into the
function thereby saving some code lines. Also, make the function out_of_line
since it is not on a performance critical path.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   37 ++---
 1 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 49d83a1..b718615 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -707,16 +707,18 @@ static ide_startstop_t idefloppy_transfer_pc1(ide_drive_t 
*drive)
return ide_started;
 }
 
-/*
- * Suppresses error messages resulting from Medium not present.
- */
-static inline int idefloppy_should_report_error(idefloppy_floppy_t *floppy)
+static void idefloppy_report_error(idefloppy_floppy_t *floppy,
+   idefloppy_pc_t *pc)
 {
if (floppy-sense_key == 0x02 
floppy-asc   == 0x3a 
floppy-ascq  == 0x00)
-   return 0;
-   return 1;
+   return;
+
+   printk(KERN_ERR ide-floppy: %s: I/O error, pc = %2x, key = %2x, 
+   asc = %2x, ascq = %2x\n,
+   floppy-drive-name, pc-c[0], floppy-sense_key,
+   floppy-asc, floppy-ascq);
 }
 
 static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
@@ -741,15 +743,8 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
 *  a legitimate error code was received.
 */
if (!test_bit(PC_ABORT, pc-flags)) {
-   if (!test_bit(PC_SUPPRESS_ERROR, pc-flags)) {
-   if (idefloppy_should_report_error(floppy))
-   printk(KERN_ERR ide-floppy: %s: I/O 
error, 
-  pc = %2x, key = %2x, 
-  asc = %2x, ascq = %2x\n,
-  drive-name, pc-c[0],
-  floppy-sense_key,
-  floppy-asc, floppy-ascq);
-   }
+   if (!test_bit(PC_SUPPRESS_ERROR, pc-flags))
+   idefloppy_report_error(floppy, pc);
/* Giving up */
pc-error = IDEFLOPPY_ERROR_GENERAL;
}
@@ -958,16 +953,12 @@ static ide_startstop_t idefloppy_do_request(ide_drive_t 
*drive,
rq-nr_sectors, rq-current_nr_sectors);
 
if (rq-errors = ERROR_MAX) {
-   if (floppy-failed_pc != NULL) {
-   if (idefloppy_should_report_error(floppy))
-   printk(KERN_ERR ide-floppy: %s: I/O error, pc 
= %2x,
-   key = %2x, asc = %2x, ascq = %2x\n,
-  drive-name, floppy-failed_pc-c[0],
-  floppy-sense_key, floppy-asc, 
floppy-ascq);
-   }
+   if (floppy-failed_pc != NULL)
+   idefloppy_report_error(floppy, floppy-failed_pc);
else
printk(KERN_ERR ide-floppy: %s: I/O error\n,
-   drive-name);
+   drive-name);
+
idefloppy_do_end_request(drive, 0, 0);
return ide_stopped;
}
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 17/21] ide-floppy: include the proper headers

2008-01-11 Thread Borislav Petkov
Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index c889c16..89b26ea 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -37,9 +37,9 @@
 #include scsi/scsi_ioctl.h
 
 #include asm/byteorder.h
-#include asm/irq.h
-#include asm/uaccess.h
-#include asm/io.h
+#include linux/irq.h
+#include linux/uaccess.h
+#include linux/io.h
 #include asm/unaligned.h
 
 /* The following are used to debug the driver. */
-- 
1.5.3.7

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


SATA CDDVDRW and kernel 2.6.23.12 problems

2008-01-11 Thread Paul Surgeon
I keep getting the following error messages during bootup with kernel
2.6.23.12 :

scsi 4:0:0:0: CD-ROMTSSTcorp CDDVDW TS-L633A  UO00 PQ: 0 ANSI: 5
ata3.00: qc timeout (cmd 0xa0)
ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
ata3.00: (irq_stat 0x4001)
ata3.00: cmd a0/00:00:00:00:20/00:00:00:00:00/a0 tag 0 cdb 0x0 data 0
 res 51/60:03:00:00:00/00:00:00:00:00/a0 Emask 0x5 (timeout)
ata3: soft resetting port
ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata3.00: configured for PIO4
ata3: EH complete

The error repeats many times and it takes about 10 minutes for the box to boot.
If I unplug the DVD drive the problem naturally disappears.
The machine is an Intel SR1530SH.

Below is the output from lspci :
00:00.0 Host bridge: Intel Corporation Server DRAM Controller
00:01.0 PCI bridge: Intel Corporation Server Host-Primary PCI Express Bridge
00:19.0 Ethernet controller: Intel Corporation 82566DM-2 Gigabit
Network Connection (rev 02)
00:1c.0 PCI bridge: Intel Corporation PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation PCI Express Port 5 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 6 port SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation SMBus Controller (rev 02)
01:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit
Ethernet Controller (rev 06)
01:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit
Ethernet Controller (rev 06)
03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e
[Pilot] ServerEngines (SEP1) (rev 02)
04:02.0 Ethernet controller: Intel Corporation 82541GI Gigabit
Ethernet Controller (rev 05)

I've tried switching acpi off, using irqpoll, switching from AHCI to
RAID in the BIOS but it makes no difference at all.
I also tried kernel 2.6.21.5 (Slackware 12.0) and the problem is still there.
Any ideas?

Thanks
Paul
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Bug 9728] Serverworks initialisation fails

2008-01-11 Thread bugme-daemon
http://bugzilla.kernel.org/show_bug.cgi?id=9728


[EMAIL PROTECTED] changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||CODE_FIX




-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
--- You are receiving this mail because: ---
You are the assignee for the bug, or are watching the assignee.
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Bug 9728] Serverworks initialisation fails

2008-01-11 Thread bugme-daemon
http://bugzilla.kernel.org/show_bug.cgi?id=9728





--- Comment #1 from [EMAIL PROTECTED]  2008-01-11 07:40 ---
Created an attachment (id=14413)
 -- (http://bugzilla.kernel.org/attachment.cgi?id=14413action=view)
Looks like an unterminated DMI table...

The following patch, which terminates the ide_acpi_dmi_table appears to
fix the problem.
Credit goes to Jeff Garzik...


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
--- You are receiving this mail because: ---
You are the assignee for the bug, or are watching the assignee.
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 21/21] ide-floppy: remove atomic test_*bit macros

2008-01-11 Thread Borislav Petkov
This change is temporary and after unification of the IDE subsystem proper
bit setting and testing macros will be introduced.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   82 +-
 1 files changed, 45 insertions(+), 37 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 4106eb4..29c1983 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -479,12 +479,12 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t 
*drive)
 
debug_log(Reached %s interrupt handler\n, __FUNCTION__);
 
-   if (test_bit(PC_DMA_IN_PROGRESS, pc-flags)) {
+   if ((1UL  PC_DMA_IN_PROGRESS)  pc-flags) {
dma_error = HWIF(drive)-ide_dma_end(drive);
if (dma_error) {
printk(KERN_ERR %s: DMA %s error\n, drive-name,
write ? write : read);
-   set_bit(PC_DMA_ERROR, pc-flags);
+   pc-flags |= (1UL  PC_DMA_ERROR);
} else {
pc-actually_transferred = pc-request_transfer;
idefloppy_update_buffers(drive, pc);
@@ -499,11 +499,11 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t 
*drive)
/* No more interrupts */
debug_log(Packet command completed, %d bytes transferred\n,
pc-actually_transferred);
-   clear_bit(PC_DMA_IN_PROGRESS, pc-flags);
+   pc-flags = ((1UL  PC_DMA_IN_PROGRESS) ^ ~0UL);
 
local_irq_enable_in_hardirq();
 
-   if ((stat  ERR_STAT) || test_bit(PC_DMA_ERROR, pc-flags)) {
+   if ((stat  ERR_STAT) || ((1UL  PC_DMA_ERROR)  pc-flags)) {
/* Error detected */
debug_log(I/O error\n, drive-name);
rq-errors++;
@@ -525,7 +525,8 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
return ide_stopped;
}
 
-   if (test_and_clear_bit(PC_DMA_IN_PROGRESS, pc-flags)) {
+   if ((1UL  PC_DMA_IN_PROGRESS)  pc-flags) {
+   pc-flags = ((1UL  PC_DMA_IN_PROGRESS) ^ ~0UL);
printk(KERN_ERR ide-floppy: The floppy wants to issue 
more interrupts in DMA mode\n);
ide_dma_off(drive);
@@ -704,13 +705,13 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
floppy-pc = pc;
 
if (pc-retries  IDEFLOPPY_MAX_PC_RETRIES ||
-   test_bit(PC_ABORT, pc-flags)) {
+   ((1UL  PC_ABORT)  pc-flags)) {
/*
 *  We will abort retrying a packet command in case
 *  a legitimate error code was received.
 */
-   if (!test_bit(PC_ABORT, pc-flags)) {
-   if (!test_bit(PC_SUPPRESS_ERROR, pc-flags))
+   if (!((1UL  PC_ABORT)  pc-flags)) {
+   if (!((1UL  PC_SUPPRESS_ERROR)  pc-flags))
idefloppy_report_error(floppy, pc);
/* Giving up */
pc-error = IDEFLOPPY_ERROR_GENERAL;
@@ -728,12 +729,14 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
pc-current_position = pc-buffer;
bcount = min(pc-request_transfer, 63 * 1024);
 
-   if (test_and_clear_bit(PC_DMA_ERROR, pc-flags))
+   if ((1UL  PC_DMA_ERROR)  pc-flags) {
+   pc-flags = ((1UL  PC_DMA_ERROR) ^ ~0UL);
ide_dma_off(drive);
+   }
 
dma = 0;
 
-   if (test_bit(PC_DMA_RECOMMENDED, pc-flags)  drive-using_dma)
+   if (((1UL  PC_DMA_RECOMMENDED)  pc-flags)  drive-using_dma)
dma = !hwif-dma_setup(drive);
 
ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK |
@@ -741,12 +744,12 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
 
if (dma) {
/* Begin DMA, if necessary */
-   set_bit(PC_DMA_IN_PROGRESS, pc-flags);
+   pc-flags |= 1UL  PC_DMA_IN_PROGRESS;
hwif-dma_start(drive);
}
 
/* Can we transfer the packet when we get the interrupt or wait? */
-   if (test_bit(IDEFLOPPY_ZIP_DRIVE, floppy-flags)) {
+   if ((1UL  IDEFLOPPY_ZIP_DRIVE)  floppy-flags) {
/* wait */
pkt_xfer_routine = idefloppy_transfer_pc1;
} else {
@@ -754,7 +757,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t 
*drive,
pkt_xfer_routine = idefloppy_transfer_pc;
}
 
-   if (test_bit(IDEFLOPPY_DRQ_INTERRUPT, floppy-flags)) {
+   if ((1UL  IDEFLOPPY_DRQ_INTERRUPT)  floppy-flags) {
/* Issue the packet command */
ide_execute_command(drive, WIN_PACKETCMD,
pkt_xfer_routine,
@@ -812,7 +815,7 @@ static void 

[Bug 9728] Serverworks initialisation fails

2008-01-11 Thread bugme-daemon
http://bugzilla.kernel.org/show_bug.cgi?id=9728


[EMAIL PROTECTED] changed:

   What|Removed |Added

 CC||[EMAIL PROTECTED]
OtherBugsDependingO||9243
  nThis||




-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
--- You are receiving this mail because: ---
You are the assignee for the bug, or are watching the assignee.
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: fixed a bug of adma in rhel4u5 with HDS7250SASUN500G.

2008-01-11 Thread Robert Hancock

Kuan Luo wrote:

hi robert,
I have fixed a bug in rhel4u5 2.6.9-55 when running adma mode
with HDS7250SASUN500G.
Could you check this code and if no problem,  then help me to
submit to the newest kernel.


It seems like a reasonable change - I'm sure you guys would know better 
than I whether it's the right thing to do. The patch got newline wrapped 
and whitespace damaged, however. Can you repost (even as attachment) so 
people can try it out?




for 2.6.9-55
diff -Nupr a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
--- a/drivers/ata/sata_nv.c 2008-01-14 14:37:32.0 +0800
+++ b/drivers/ata/sata_nv.c 2008-01-14 14:37:21.0 +0800
@@ -802,7 +802,7 @@ static irqreturn_t nv_adma_interrupt(int
ata_port_printk(ap, KERN_ERR, CPB
error, stat=0x%x\n, status);
have_global_err = 1;
}
-   if ((status  NV_ADMA_STAT_DONE) ||
have_global_err) {
+   if ((status  (NV_ADMA_STAT_CMD_COMPLETE |
NV_ADMA_STAT_DONE)) || have_global_err) {
/** Check CPBs for completed commands */
 
 if(ata_tag_valid(ap-active_tag))

@@ -814,6 +814,7 @@ static irqreturn_t nv_adma_interrupt(int
u32 active = ap-sactive;
while( (pos = ffs(active)) ) {
pos--;
+   if ((notifier_clears[i]
 (1  pos)) || have_global_err)
nv_adma_check_cpb(ap,
pos, have_global_err ||
(notifier_error
 (1  pos)) );
active = ~(1  pos );

for 2.6.24-rc7

diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index ed5dc7c..6bffd39 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -1010,8 +1010,7 @@ static irqreturn_t nv_adma_interrupt(int irq, void
*dev_instance)
continue;
}
 
-			if (status  (NV_ADMA_STAT_DONE |

- NV_ADMA_STAT_CPBERR)) {
+   if (status  (NV_ADMA_STAT_DONE |
NV_ADMA_STAT_CMD_COMPLETE | NV_ADMA_STAT_CPBERR)) {
u32 check_commands;
int pos, error = 0;
 
@@ -1023,8 +1022,8 @@ static irqreturn_t nv_adma_interrupt(int irq, void

*dev_instance)
/** Check CPBs for completed commands */
while ((pos = ffs(check_commands)) 
!error) {
pos--;
-   error = nv_adma_check_cpb(ap,
pos,
-   notifier_error  (1 
pos));
+   if ((notifier_clears[i]  (1 
pos)) || (status  NV_ADMA_STAT_CPBERR))
+   error =
nv_adma_check_cpb(ap, pos, notifier_error  (1  pos));
check_commands = ~(1  pos);
}
}
---
This email message is for the sole use of the intended recipient(s) and may 
contain
confidential information.  Any unauthorized review, use, disclosure or 
distribution
is prohibited.  If you are not the intended recipient, please contact the 
sender by
reply email and destroy all copies of the original message.
---


-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 09/21] ide-floppy: remove struct idefloppy_request_sense_result

2008-01-11 Thread Borislav Petkov
While at it, collapse idefloppy_analyze_error() into
idefloppy_request_sense_callback() since the latter was its only user.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   82 +
 1 files changed, 24 insertions(+), 58 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index d98264e..7d4ac0b 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -232,39 +232,6 @@ struct idefloppy_id_gcw {
 };
 
 /*
- * REQUEST SENSE packet command result - Data Format.
- */
-typedef struct {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-   unsignederror_code  :7; /* Current error (0x70) */
-   unsignedvalid   :1; /* The information field 
conforms to SFF-8070i */
-   u8  reserved1   :8; /* Reserved */
-   unsignedsense_key   :4; /* Sense Key */
-   unsignedreserved2_4 :1; /* Reserved */
-   unsignedili :1; /* Incorrect Length Indicator */
-   unsignedreserved2_67:2;
-#elif defined(__BIG_ENDIAN_BITFIELD)
-   unsignedvalid   :1; /* The information field 
conforms to SFF-8070i */
-   unsignederror_code  :7; /* Current error (0x70) */
-   u8  reserved1   :8; /* Reserved */
-   unsignedreserved2_67:2;
-   unsignedili :1; /* Incorrect Length Indicator */
-   unsignedreserved2_4 :1; /* Reserved */
-   unsignedsense_key   :4; /* Sense Key */
-#else
-#error Bitfield endianness not defined! Check your byteorder.h
-#endif
-   u32 information __attribute__ ((packed));
-   u8  asl;/* Additional sense length 
(n-7) */
-   u32 command_specific;   /* Additional command specific 
information */
-   u8  asc;/* Additional Sense Code */
-   u8  ascq;   /* Additional Sense Code 
Qualifier */
-   u8  replaceable_unit_code;  /* Field Replaceable Unit Code 
*/
-   u8  sksv[3];
-   u8  pad[2]; /* Padding to 20 bytes */
-} idefloppy_request_sense_result_t;
-
-/*
  * Pages of the SELECT SENSE / MODE SENSE packet commands.
  * See SFF-8070i spec.
  */
@@ -480,39 +447,38 @@ static struct request *idefloppy_next_rq_storage 
(ide_drive_t *drive)
return (floppy-rq_stack[floppy-rq_stack_index++]);
 }
 
-/*
- * idefloppy_analyze_error is called on each failed packet command retry
- * to analyze the request sense.
- */
-static void idefloppy_analyze_error (ide_drive_t 
*drive,idefloppy_request_sense_result_t *result)
-{
-   idefloppy_floppy_t *floppy = drive-driver_data;
-
-   floppy-sense_key = result-sense_key;
-   floppy-asc = result-asc;
-   floppy-ascq = result-ascq;
-   floppy-progress_indication = result-sksv[0]  0x80 ?
-   (u16)get_unaligned((u16 *)(result-sksv+1)):0x1;
-   if (floppy-failed_pc)
-   debug_log(pc = %x, sense key = %x, asc = %x, ascq = %x\n,
-   floppy-failed_pc-c[0], result-sense_key,
-   result-asc, result-ascq);
-   else
-   debug_log(sense key = %x, asc = %x, ascq = %x\n,
-   result-sense_key, result-asc, result-ascq);
-}
-
-static void idefloppy_request_sense_callback (ide_drive_t *drive)
+static void idefloppy_request_sense_callback(ide_drive_t *drive)
 {
idefloppy_floppy_t *floppy = drive-driver_data;
+   u8 *buf = floppy-pc-buffer;
 
debug_log(Reached %s\n, __FUNCTION__);
 
if (!floppy-pc-error) {
-   idefloppy_analyze_error(drive,(idefloppy_request_sense_result_t 
*) floppy-pc-buffer);
+   floppy-sense_key = buf[2]  0x0F;
+   floppy-asc = buf[12];
+   floppy-ascq = buf[13];
+   floppy-progress_indication = buf[15]  0x80 ?
+   (u16)get_unaligned((u16 *)buf[16]) : 0x1;
+
+   if (floppy-failed_pc)
+   debug_log(pc = %x, sense key = %x, asc = %x,
+ascq = %x\n,
+   floppy-failed_pc-c[0],
+   floppy-sense_key,
+   floppy-asc,
+   floppy-ascq);
+   else
+   debug_log(sense key = %x, asc = %x, ascq = %x\n,
+   floppy-sense_key,
+   floppy-asc,
+   floppy-ascq);
+
+
idefloppy_do_end_request(drive, 1, 0);
} else {
-   printk(KERN_ERR Error in REQUEST SENSE 

[PATCH 20/21] ide-floppy: merge idefloppy_{input,output}_buffers

2008-01-11 Thread Borislav Petkov
We merge idefloppy_{input,output}_buffers() into idefloppy_io_buffers() by
introducing a 4th arg. called direction. According to its value
we atapi_input_bytes() or atapi_output_bytes(). Also, simplify the interrupt
handler by removing multiple calls testing the data direction and using a local
variable instead.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]
---
 drivers/ide/ide-floppy.c |   67 +++--
 1 files changed, 17 insertions(+), 50 deletions(-)

diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 3d9b1e5..4106eb4 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -295,42 +295,8 @@ static int idefloppy_do_end_request(ide_drive_t *drive, 
int uptodate, int nsecs)
return 0;
 }
 
-static void idefloppy_input_buffers(ide_drive_t *drive, idefloppy_pc_t *pc,
-   unsigned int bcount)
-{
-   struct request *rq = pc-rq;
-   struct bio_vec *bvec;
-   struct req_iterator iter;
-   unsigned long flags;
-   char *data;
-   int count, done = 0;
-
-   rq_for_each_segment(bvec, rq, iter) {
-   if (!bcount)
-   break;
-
-   count = min(bvec-bv_len, bcount);
-
-   data = bvec_kmap_irq(bvec, flags);
-   drive-hwif-atapi_input_bytes(drive, data, count);
-   bvec_kunmap_irq(data, flags);
-
-   bcount -= count;
-   pc-b_count += count;
-   done += count;
-   }
-
-   idefloppy_do_end_request(drive, 1, done  9);
-
-   if (bcount) {
-   printk(KERN_ERR %s: leftover data in %s, bcount == %d\n,
-   drive-name, __FUNCTION__, bcount);
-   idefloppy_discard_data(drive, bcount);
-   }
-}
-
-static void idefloppy_output_buffers(ide_drive_t *drive, idefloppy_pc_t *pc,
-   unsigned int bcount)
+static void idefloppy_io_buffers(ide_drive_t *drive, idefloppy_pc_t *pc,
+   unsigned int bcount, int direction)
 {
struct request *rq = pc-rq;
struct req_iterator iter;
@@ -346,7 +312,10 @@ static void idefloppy_output_buffers(ide_drive_t *drive, 
idefloppy_pc_t *pc,
count = min(bvec-bv_len, bcount);
 
data = bvec_kmap_irq(bvec, flags);
-   drive-hwif-atapi_output_bytes(drive, data, count);
+   if (direction)
+   drive-hwif-atapi_output_bytes(drive, data, count);
+   else
+   drive-hwif-atapi_input_bytes(drive, data, count);
bvec_kunmap_irq(data, flags);
 
bcount -= count;
@@ -360,7 +329,10 @@ static void idefloppy_output_buffers(ide_drive_t *drive, 
idefloppy_pc_t *pc,
if (bcount) {
printk(KERN_ERR %s: leftover data in %s, bcount == %d\n,
drive-name, __FUNCTION__, bcount);
-   idefloppy_write_zeros(drive, bcount);
+   if (direction)
+   idefloppy_write_zeros(drive, bcount);
+   else
+   idefloppy_discard_data(drive, bcount);
}
 #endif
 }
@@ -491,8 +463,6 @@ static void idefloppy_retry_pc(ide_drive_t *drive)
idefloppy_queue_pc_head(drive, pc, rq);
 }
 
-typedef void (io_buf_t)(ide_drive_t *, idefloppy_pc_t *, unsigned int);
-
 /*  The usual interrupt handler called during a packet command. */
 static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
 {
@@ -501,7 +471,6 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
idefloppy_pc_t *pc = floppy-pc;
struct request *rq = pc-rq;
xfer_func_t *xferfunc;
-   io_buf_t *iobuf_func;
unsigned int temp;
u16 bcount;
u8 stat, ireason;
@@ -573,7 +542,7 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
printk(KERN_ERR ide-floppy: CoD != 0 in %s\n, __FUNCTION__);
return ide_do_reset(drive);
}
-   if (((ireason  IO) == IO) == test_bit(PC_WRITING, pc-flags)) {
+   if (((ireason  IO) == IO) == write) {
/* Hopefully, we will never get here */
printk(KERN_ERR ide-floppy: We wanted to %s, ,
(ireason  IO) ? Write : Read);
@@ -581,7 +550,7 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
(ireason  IO) ? Read : Write);
return ide_do_reset(drive);
}
-   if (!test_bit(PC_WRITING, pc-flags)) {
+   if (!write) {
/* Reading - Check that we have enough space */
temp = pc-actually_transferred + bcount;
if (temp  pc-request_transfer) {
@@ -601,18 +570,16 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t 
*drive)
 expected - allowing transfer\n);
}
}
-   if (test_bit(PC_WRITING, pc-flags)) {
+
+   if 

[Bug 9728] Serverworks initialisation fails

2008-01-11 Thread bugme-daemon
http://bugzilla.kernel.org/show_bug.cgi?id=9728


[EMAIL PROTECTED] changed:

   What|Removed |Added

 Status|VERIFIED|CLOSED




--- Comment #2 from [EMAIL PROTECTED]  2008-01-11 12:31 ---
Fix is now as commit 7c48c56e9b5a51263269dd419cc32531db141340 in Linus' tree.


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
--- You are receiving this mail because: ---
You are the assignee for the bug, or are watching the assignee.
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Trouble with hdparm -d on Dell D610

2008-01-11 Thread Kristin Vadas Marsicano
Hello,

Please advise on how to enable DMA on my Dell D610 (any advice is much
appreciated!).  I tried hdparm –d1 /dev/hda, and I get the following
output:

setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
Using_dma = 0 (off)

I'm running Linux kernel version 2.6.22.6 from kernels.org.   Below is
the output from lspci.  Attached is my kernel configuration.

I have the same kernel and configuration on my Dell D600 (an older
version of the same laptop), and hdparm –d works just fine.

Thanks in advance for your help!
Kristin Vadas Marsicano

** Start lspci output:
:00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML
Express Processor to DRAM Controller (rev 03)
:00:02.0 VGA compatible controller: Intel Corporation Mobile
915GM/GMS/910GML Express Graphics Controller (rev 03)
:00:02.1 Display controller: Intel Corporation Mobile
915GM/GMS/910GML Express Graphics Controller (rev 03)
:00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6
Family) PCI Express Port 1 (rev 03)
:00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW
(ICH6 Family) USB UHCI #1 (rev 03)
:00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW
(ICH6 Family) USB UHCI #2 (rev 03)
:00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW
(ICH6 Family) USB UHCI #3 (rev 03)
:00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW
(ICH6 Family) USB UHCI #4 (rev 03)
:00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW
(ICH6 Family) USB2 EHCI Controller (rev 03)
:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3)
:00:1e.2 Multimedia audio controller: Intel Corporation
82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
:00:1e.3 Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6
Family) AC'97 Modem Controller (rev 03)
:00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC
Interface Bridge (rev 03)
:00:1f.2 IDE interface: Intel Corporation 82801FBM (ICH6M) SATA
Controller (rev 03)
:02:00.0 Ethernet controller: Broadcom Corporation NetXtreme
BCM5751 Gigabit Ethernet PCI Express (rev 01)
:03:01.0 CardBus bridge: Texas Instruments: Unknown device 8036
:03:01.5 Communication controller: Texas Instruments: Unknown device 8038
:03:03.0 Network controller: Broadcom Corporation: Unknown device
4319 (rev 02)
 : End lspci output ***
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.22.6
# Fri Jan 11 09:49:10 2008
#
CONFIG_X86_32=y
CONFIG_GENERIC_TIME=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_SEMAPHORE_SLEEPERS=y
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_QUICKLIST=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_DMI=y
CONFIG_DEFCONFIG_LIST=/lib/modules/$UNAME_RELEASE/.config

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32

#
# General setup
#
CONFIG_LOCALVERSION=
# CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0

#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD is not set

#
# Block layer
#
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_AS is not set
# CONFIG_IOSCHED_DEADLINE is not set
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED=cfq

#
# Processor type and features
#
# CONFIG_TICK_ONESHOT is not set
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
# CONFIG_SMP is not set
CONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_NUMAQ is not set
# CONFIG_X86_SUMMIT is not set

Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Kristin Vadas Marsicano
Thank you.  I took the CD-Rom out, so that's why it didn't show.  Very
observant!

My concern with disabling the new drivers is as follows: I use this
linux kernel and config image to boot machines over PXE and call a
shred program on each of the harddrives.  If I turn off CONFIG_ATA,
will this limit my ability to support various new IDE and SATA drives
for running shred?  So far, the configuration I have works well with
most of the machines I encounter  (and with both SATA and IDE drives),
except for the Dell D610 and HP 7700 (small desktop pc).  The models I
just mentioned run the shred really slow, which I believe is due to
the DMA problem I was having (outlined in my previous emails).  Any
thoughts?


On 1/11/08, Alan Cox [EMAIL PROTECTED] wrote:
 Thanks. You do indeed have both the old IDE and new IDE drivers trying to
 drive bits of the system. I don't see the CD-ROM in the dmesg at all
 however ?

 If you turn off CONFIG_ATA you should get just old IDE drivers and your
 disk back working sanely.

 Alan



-- 
Kristin Vadas Marsicano
[EMAIL PROTECTED]
kristinisme.blogspot.com
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Alan Cox
Thanks. You do indeed have both the old IDE and new IDE drivers trying to
drive bits of the system. I don't see the CD-ROM in the dmesg at all
however ?

If you turn off CONFIG_ATA you should get just old IDE drivers and your
disk back working sanely.

Alan
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Kristin Vadas Marsicano
Attached is the dmesg output.

On 1/11/08, Alan Cox [EMAIL PROTECTED] wrote:
 On Fri, 11 Jan 2008 14:49:46 -0500
 Kristin Vadas Marsicano [EMAIL PROTECTED] wrote:

  Both laptops have IDE drives.  The kernel image booted on the two
  laptops are exactly the same.  Please let me know if this doesn't
  answer your question -- I'm new to this and not quite sure I
  understand the question.

 Ok - can you send me a dmesg after you boot ?



-- 
Kristin Vadas Marsicano
[EMAIL PROTECTED]
kristinisme.blogspot.com
Linux version 2.6.22.6 ([EMAIL PROTECTED]) (gcc version 3.3.5 (Debian 
1:3.3.5-13)) #1 PREEMPT Tue Sep 25 14:43:08 EDT 2007
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009f000 (usable)
 BIOS-e820: 0009f000 - 000a (reserved)
 BIOS-e820: 0010 - 1f7d1800 (usable)
 BIOS-e820: 1f7d1800 - 2000 (reserved)
 BIOS-e820: e000 - f0007000 (reserved)
 BIOS-e820: f0008000 - f000c000 (reserved)
 BIOS-e820: fec0 - fec1 (reserved)
 BIOS-e820: fed2 - fee1 (reserved)
 BIOS-e820: ffb0 - 0001 (reserved)
503MB LOWMEM available.
Entering add_active_range(0, 0, 128977) 0 entries of 256 used
Zone PFN ranges:
  DMA 0 - 4096
  Normal   4096 -   128977
early_node_map[1] active PFN ranges
0:0 -   128977
On node 0 totalpages: 128977
  DMA zone: 32 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 4064 pages, LIFO batch:0
  Normal zone: 975 pages used for memmap
  Normal zone: 123906 pages, LIFO batch:31
DMI 2.3 present.
ACPI: RSDP 000FC9B0, 0014 (r0 DELL  )
ACPI: RSDT 1F7D1F90, 0040 (r1 DELLCPi R   27D50A02 ASL61)
ACPI: FACP 1F7D2C00, 0074 (r1 DELLCPi R   27D50A02 ASL61)
ACPI: DSDT 1F7D3800, 3C51 (r1 INT430 SYSFexxx 1001 MSFT  10E)
ACPI: FACS 1F7E2000, 0040
ACPI: APIC 1F7D3400, 0068 (r1 DELLCPi R   27D50A02 ASL47)
ACPI: ASF! 1F7D3000, 005B (r16 DELLCPi R   27D50A02 ASL61)
ACPI: MCFG 1F7D33C0, 003E (r16 DELLCPi R   27D50A02 ASL61)
ACPI: SSDT 1F7D23E6, 023E (r1  PmRef  Cpu0Ist 3000 INTL 20030522)
ACPI: SSDT 1F7D220E, 01D8 (r1  PmRef  Cpu0Cst 3001 INTL 20030522)
ACPI: SSDT 1F7D2013, 01FB (r1  PmRefCpuPm 3000 INTL 20030522)
ACPI: PM-Timer IO Port: 0x1008
Allocating PCI resources starting at 3000 (gap: 2000:c000)
Built 1 zonelists.  Total pages: 127970
Kernel command line: load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=61440 rw 
root=/dev/ram0 initrd=usmicro.pxe vga=0F07 splash quiet numpasses=1 
BOOT_IMAGE=vmlinuz.usmicro 
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
PID hash table entries: 2048 (order: 11, 8192 bytes)
Detected 1729.180 MHz processor.
Console: colour VGA+ 80x25
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 489332k/515908k available (3011k kernel code, 25936k reserved, 1619k 
data, 316k init, 0k highmem)
virtual kernel memory layout:
fixmap  : 0x7000 - 0xf000   (  32 kB)
vmalloc : 0xe000 - 0x5000   ( 511 MB)
lowmem  : 0xc000 - 0xdf7d1000   ( 503 MB)
  .init : 0xc0588000 - 0xc05d7000   ( 316 kB)
  .data : 0xc03f0c40 - 0xc0585938   (1619 kB)
  .text : 0xc010 - 0xc03f0c40   (3011 kB)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 3461.72 BogoMIPS (lpj=6923455)
Mount-cache hash table entries: 512
CPU: After generic identify, caps: afe9fbff 0010   0180 
 
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 2048K
CPU: After all inits, caps: afe9fbff 0010  2040 0180 
 
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
Compat vDSO mapped to e000.
CPU: Intel(R) Pentium(R) M processor 1.73GHz stepping 08
Checking 'hlt' instruction... OK.
Checking for popad bug... OK.
ACPI: Core revision 20070126
ACPI: setting ELCR to 0200 (from 0e20)
NET: Registered protocol family 16
ACPI: bus type pci registered
PCI: Using MMCONFIG
Setting up standard PCI resources
ACPI: SSDT 1F7D1FD0, 0043 (r1  LMPWR  DELLLOM 1001 INTL 20030522)
ACPI: Interpreter enabled
ACPI: (supports S0 S3 S4 S5)
ACPI: Using PIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (:00)
PCI: Probing PCI hardware (bus 00)
PCI quirk: region 1000-107f claimed by ICH6 ACPI/GPIO/TCO
PCI quirk: region 1080-10bf claimed by ICH6 GPIO
PCI: Transparent bridge - :00:1e.0
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIE._PRT]
ACPI: PCI Interrupt Link [LNKA] (IRQs 9 10 *11)
ACPI: PCI Interrupt Link [LNKB] (IRQs 5 7) *10
ACPI: PCI Interrupt Link [LNKC] (IRQs *9 10 11)
ACPI: PCI Interrupt Link 

Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Alan Cox
 I have the same kernel and configuration on my Dell D600 (an older
 version of the same laptop), and hdparm –d works just fine.

We you using the IDE driver for PATA devices and the SATA driver for SATA
devices ? If so the really nasty hacks for that were dropped as current
libata PATA support is more than good enough for driving both ports and
having one driver for both cleaned up stuff a lot.

Alan
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Alan Cox
On Fri, 11 Jan 2008 14:49:46 -0500
Kristin Vadas Marsicano [EMAIL PROTECTED] wrote:

 Both laptops have IDE drives.  The kernel image booted on the two
 laptops are exactly the same.  Please let me know if this doesn't
 answer your question -- I'm new to this and not quite sure I
 understand the question.

Ok - can you send me a dmesg after you boot ?
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: fixed a bug of adma in rhel4u5 with HDS7250SASUN500G.

2008-01-11 Thread David Milburn

Robert Hancock wrote:

Kuan Luo wrote:


hi robert,
I have fixed a bug in rhel4u5 2.6.9-55 when running adma mode
with HDS7250SASUN500G.
Could you check this code and if no problem,  then help me to
submit to the newest kernel.



It seems like a reasonable change - I'm sure you guys would know better 
than I whether it's the right thing to do. The patch got newline wrapped 
and whitespace damaged, however. Can you repost (even as attachment) so 
people can try it out?


Robert,

Here is Kuan's patch as an attachment.

David





for 2.6.9-55
diff -Nupr a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
--- a/drivers/ata/sata_nv.c2008-01-14 14:37:32.0 +0800
+++ b/drivers/ata/sata_nv.c2008-01-14 14:37:21.0 +0800
@@ -802,7 +802,7 @@ static irqreturn_t nv_adma_interrupt(int
 ata_port_printk(ap, KERN_ERR, CPB
error, stat=0x%x\n, status);
 have_global_err = 1;
 }
-if ((status  NV_ADMA_STAT_DONE) ||
have_global_err) {
+if ((status  (NV_ADMA_STAT_CMD_COMPLETE |
NV_ADMA_STAT_DONE)) || have_global_err) {
 /** Check CPBs for completed commands */
 
 if(ata_tag_valid(ap-active_tag))

@@ -814,6 +814,7 @@ static irqreturn_t nv_adma_interrupt(int
 u32 active = ap-sactive;
 while( (pos = ffs(active)) ) {
 pos--;
+if ((notifier_clears[i]
 (1  pos)) || have_global_err)
 nv_adma_check_cpb(ap,
pos, have_global_err ||
 (notifier_error
 (1  pos)) );
 active = ~(1  pos );

for 2.6.24-rc7

diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index ed5dc7c..6bffd39 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -1010,8 +1010,7 @@ static irqreturn_t nv_adma_interrupt(int irq, void
*dev_instance)
 continue;
 }
 
-if (status  (NV_ADMA_STAT_DONE |

-  NV_ADMA_STAT_CPBERR)) {
+if (status  (NV_ADMA_STAT_DONE |
NV_ADMA_STAT_CMD_COMPLETE | NV_ADMA_STAT_CPBERR)) {
 u32 check_commands;
 int pos, error = 0;
 
@@ -1023,8 +1022,8 @@ static irqreturn_t nv_adma_interrupt(int irq, void

*dev_instance)
 /** Check CPBs for completed commands */
 while ((pos = ffs(check_commands)) 
!error) {
 pos--;
-error = nv_adma_check_cpb(ap,
pos,
-notifier_error  (1 
pos));
+if ((notifier_clears[i]  (1 
pos)) || (status  NV_ADMA_STAT_CPBERR))
+error =
nv_adma_check_cpb(ap, pos, notifier_error  (1  pos));
 check_commands = ~(1  pos);
 }
 }
--- 

This email message is for the sole use of the intended recipient(s) 
and may contain
confidential information.  Any unauthorized review, use, disclosure or 
distribution
is prohibited.  If you are not the intended recipient, please contact 
the sender by

reply email and destroy all copies of the original message.
--- 




-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--- linux-2.6/drivers/ata/sata_nv.c.completed
+++ linux-2.6/drivers/ata/sata_nv.c
@@ -1011,7 +1011,8 @@ static irqreturn_t nv_adma_interrupt(int
 			}
 
 			if (status  (NV_ADMA_STAT_DONE |
-  NV_ADMA_STAT_CPBERR)) {
+  NV_ADMA_STAT_CPBERR |
+  NV_ADMA_STAT_CMD_COMPLETE)) {
 u32 check_commands;
 int pos, error = 0;
 
@@ -1023,8 +1024,8 @@ static irqreturn_t nv_adma_interrupt(int
 /** Check CPBs for completed commands */
 while ((pos = ffs(check_commands))  !error) {
 	pos--;
-	error = nv_adma_check_cpb(ap, pos,
-		notifier_error  (1  pos));
+	if ((notifier_clears[i]  (1  pos)) || (status  NV_ADMA_STAT_CPBERR))
+		error = nv_adma_check_cpb(ap, pos, notifier_error  (1  pos));
 	check_commands = ~(1  pos);
 }
 			}


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Kristin Vadas Marsicano
On 1/11/08, Alan Cox [EMAIL PROTECTED] wrote:
  My concern with disabling the new drivers is as follows: I use this
  linux kernel and config image to boot machines over PXE and call a
  shred program on each of the harddrives.  If I turn off CONFIG_ATA,
  will this limit my ability to support various new IDE and SATA drives
  for running shred?  So far, the configuration I have works well with

 Yes. In that case you can build without CONFIG_IDE_PIIX and with the
 CONFIG_ATA_PIIX driver and you should be fine too (but your disk will
 move to /dev/sda on that box). The PIIX is an awkward case as in some
 modes it combines both the SATA and PATA onto one 'device'.


Can I set this option through make menuconfig, or do I need to take
some other action?  I poked around the menu config a big and wasn't
sure I found the properties you are refering to.

Would all my disks then be listed as sd[a-z] on every machine?  Or just some?

  most of the machines I encounter  (and with both SATA and IDE drives),
  except for the Dell D610 and HP 7700 (small desktop pc).  The models I
  just mentioned run the shred really slow, which I believe is due to
  the DMA problem I was having (outlined in my previous emails).  Any
  thoughts?

 If your shred program is relying on DMA then you are using the wrong tool
 for the job. The correct way to erase a disk is to send it a security
 erase command. Rewriting over the data may not do what is wanted.


For now, my desired action is to overwrite the drives with random
characters.  My understanding is that security erase commands are
implemented in the firmware, and that it may be buggy.  Please correct
me if my understanding is incorrect.  Also, is there a way to invoke
the firmware security erase with a linux command?


-- 
Kristin Vadas Marsicano
[EMAIL PROTECTED]
kristinisme.blogspot.com
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Greg Freemyer
On Jan 11, 2008 4:34 PM, Alan Cox [EMAIL PROTECTED] wrote:
  most of the machines I encounter  (and with both SATA and IDE drives),
  except for the Dell D610 and HP 7700 (small desktop pc).  The models I
  just mentioned run the shred really slow, which I believe is due to
  the DMA problem I was having (outlined in my previous emails).  Any
  thoughts?

 If your shred program is relying on DMA then you are using the wrong tool
 for the job. The correct way to erase a disk is to send it a security
 erase command. Rewriting over the data may not do what is wanted.

Alan,

I was talking to Kristin this morning about doing that.  I was
concerned that there is not anybody certifying that each individual
disk drive model / firmware release is properly implementing the
Security Erase function.

Are you aware of testing body, etc. that publishes a white-list of
drives that are known to have a proper implementation of Security
Erase?  Lacking something like that and realizing how rarely it is
used, I'm not sure it should be trusted.

Performing both a Security Erase and calling shred on the drive might
be the ultimate one-two punch.

Greg
-- 
Greg Freemyer
Litigation Triage Solutions Specialist
http://www.linkedin.com/in/gregfreemyer
First 99 Days Litigation White Paper -
http://www.norcrossgroup.com/forms/whitepapers/99%20Days%20whitepaper.pdf

The Norcross Group
The Intersection of Evidence  Technology
http://www.norcrossgroup.com
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LIBATA SCSI command validation changed in 2.6.24

2008-01-11 Thread Chuck Ebbert
On 01/11/2008 04:35 PM, Jeff Garzik wrote:
 Chuck Ebbert wrote:
 commit 607126c2a21cd6e9bb807fdd415c1a992f7b9009 changed command
 validation
 to allow short commands in 16-byte CDBs, but it also made checking more
 strict. Before the change, a 10-byte SG_IO command could have its
 length set
 to 9 and still work. Now it fails. Not sure if this is a bug, but it has
 caused at least one application to fail that used to work (qpxtool.)

 [https://bugzilla.redhat.com/show_bug.cgi?id=428281]
 
 Can you get us an example CDB?  Its unclear if the hexdump in the bug
 report is a returned mode page or the CDB or what...?
 

Not easily, but the maintainer of that program forced the length of
the MODE_SENSE(10) command to 10 and that command started working.

By looking at the source I could tell that it was setting the command
length to (1 + the index of the last byte written to the CDB) and
only wrote up to offset 8 when building the command, so it must have
been sending the command with a length of 9. (It zeroed the whole CDB
first and only wrote what it needed to.)

(And it used the C++ operator [] to build the command, that was fun
to trace...)
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Greg Freemyer
On Jan 11, 2008 4:49 PM, Kristin Vadas Marsicano
[EMAIL PROTECTED] wrote:
 On 1/11/08, Alan Cox [EMAIL PROTECTED] wrote:
   My concern with disabling the new drivers is as follows: I use this
   linux kernel and config image to boot machines over PXE and call a
   shred program on each of the harddrives.  If I turn off CONFIG_ATA,
   will this limit my ability to support various new IDE and SATA drives
   for running shred?  So far, the configuration I have works well with
 
  Yes. In that case you can build without CONFIG_IDE_PIIX and with the
  CONFIG_ATA_PIIX driver and you should be fine too (but your disk will
  move to /dev/sda on that box). The PIIX is an awkward case as in some
  modes it combines both the SATA and PATA onto one 'device'.
 

 Can I set this option through make menuconfig, or do I need to take
 some other action?  I poked around the menu config a big and wasn't
 sure I found the properties you are refering to.

 Would all my disks then be listed as sd[a-z] on every machine?  Or just some?

   most of the machines I encounter  (and with both SATA and IDE drives),
   except for the Dell D610 and HP 7700 (small desktop pc).  The models I
   just mentioned run the shred really slow, which I believe is due to
   the DMA problem I was having (outlined in my previous emails).  Any
   thoughts?
 
  If your shred program is relying on DMA then you are using the wrong tool
  for the job. The correct way to erase a disk is to send it a security
  erase command. Rewriting over the data may not do what is wanted.
 

 For now, my desired action is to overwrite the drives with random
 characters.  My understanding is that security erase commands are
 implemented in the firmware, and that it may be buggy.  Please correct
 me if my understanding is incorrect.  Also, is there a way to invoke
 the firmware security erase with a linux command?

Kristin, you can issue Security Erase via hdparm, but don't forget
that the Security Erase command is blocked by significant number of
BIOS implentations, so switching to it would be a fundamental change
to what you do now even if you had confidence that it did work 100% of
the time.

Greg
-- 
Greg Freemyer
Litigation Triage Solutions Specialist
http://www.linkedin.com/in/gregfreemyer
First 99 Days Litigation White Paper -
http://www.norcrossgroup.com/forms/whitepapers/99%20Days%20whitepaper.pdf

The Norcross Group
The Intersection of Evidence  Technology
http://www.norcrossgroup.com
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Alan Cox
 My concern with disabling the new drivers is as follows: I use this
 linux kernel and config image to boot machines over PXE and call a
 shred program on each of the harddrives.  If I turn off CONFIG_ATA,
 will this limit my ability to support various new IDE and SATA drives
 for running shred?  So far, the configuration I have works well with

Yes. In that case you can build without CONFIG_IDE_PIIX and with the
CONFIG_ATA_PIIX driver and you should be fine too (but your disk will
move to /dev/sda on that box). The PIIX is an awkward case as in some
modes it combines both the SATA and PATA onto one 'device'.

 most of the machines I encounter  (and with both SATA and IDE drives),
 except for the Dell D610 and HP 7700 (small desktop pc).  The models I
 just mentioned run the shred really slow, which I believe is due to
 the DMA problem I was having (outlined in my previous emails).  Any
 thoughts?

If your shred program is relying on DMA then you are using the wrong tool
for the job. The correct way to erase a disk is to send it a security
erase command. Rewriting over the data may not do what is wanted.
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


LIBATA SCSI command validation changed in 2.6.24

2008-01-11 Thread Chuck Ebbert
commit 607126c2a21cd6e9bb807fdd415c1a992f7b9009 changed command validation
to allow short commands in 16-byte CDBs, but it also made checking more
strict. Before the change, a 10-byte SG_IO command could have its length set
to 9 and still work. Now it fails. Not sure if this is a bug, but it has
caused at least one application to fail that used to work (qpxtool.)

[https://bugzilla.redhat.com/show_bug.cgi?id=428281]
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: sata_nv + ADMA + Samsung disk problem

2008-01-11 Thread Gabor Gombas
On Mon, Jan 07, 2008 at 06:10:29PM -0600, Robert Hancock wrote:

 Gabor, I just noticed you said that it worked OK in 2.6.20, yet 2.6.22  
 fails. 2.6.20 had ADMA support as well, so I wonder what change started  
 causing the problem. Would it be possible for you to do a git bisect (or  
 at least try 2.6.21 to try and narrow it down)?

I've now booted 2.6.21.7, we'll see. The problem with the bisection is
that I can't explicitely trigger the bug so I can't say for sure if a
kernel is good or it is just needs more time to trigger. The average
uptime of this machine is just a couple hours a day.

For example, with 2.6.24-rc6 it took over 3 hours for the first disk to
trigger the bug and the second disk needed more than 7 hours. This
machine is seldom turned on for that long.

Gabor

-- 
 -
 MTA SZTAKI Computer and Automation Research Institute
Hungarian Academy of Sciences
 -
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LIBATA SCSI command validation changed in 2.6.24

2008-01-11 Thread Jeff Garzik

Chuck Ebbert wrote:

On 01/11/2008 04:35 PM, Jeff Garzik wrote:

Chuck Ebbert wrote:

commit 607126c2a21cd6e9bb807fdd415c1a992f7b9009 changed command
validation
to allow short commands in 16-byte CDBs, but it also made checking more
strict. Before the change, a 10-byte SG_IO command could have its
length set
to 9 and still work. Now it fails. Not sure if this is a bug, but it has
caused at least one application to fail that used to work (qpxtool.)

[https://bugzilla.redhat.com/show_bug.cgi?id=428281]

Can you get us an example CDB?  Its unclear if the hexdump in the bug
report is a returned mode page or the CDB or what...?



Not easily, but the maintainer of that program forced the length of
the MODE_SENSE(10) command to 10 and that command started working.

By looking at the source I could tell that it was setting the command
length to (1 + the index of the last byte written to the CDB) and
only wrote up to offset 8 when building the command, so it must have
been sending the command with a length of 9. (It zeroed the whole CDB
first and only wrote what it needed to.)

(And it used the C++ operator [] to build the command, that was fun
to trace...)


Even if allocation length is present in the CDB, the CDB may be missing 
important information that is required to process the command.  So it 
may have caught a bug in the program... depending on the CDB.


Jeff


-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: LIBATA SCSI command validation changed in 2.6.24

2008-01-11 Thread Chuck Ebbert
On 01/11/2008 06:21 PM, Jeff Garzik wrote:
 Chuck Ebbert wrote:
 On 01/11/2008 04:35 PM, Jeff Garzik wrote:
 Chuck Ebbert wrote:
 commit 607126c2a21cd6e9bb807fdd415c1a992f7b9009 changed command
 validation
 to allow short commands in 16-byte CDBs, but it also made checking more
 strict. Before the change, a 10-byte SG_IO command could have its
 length set
 to 9 and still work. Now it fails. Not sure if this is a bug, but it
 has
 caused at least one application to fail that used to work (qpxtool.)

 [https://bugzilla.redhat.com/show_bug.cgi?id=428281]
 Can you get us an example CDB?  Its unclear if the hexdump in the bug
 report is a returned mode page or the CDB or what...?


 Not easily, but the maintainer of that program forced the length of
 the MODE_SENSE(10) command to 10 and that command started working.

 By looking at the source I could tell that it was setting the command
 length to (1 + the index of the last byte written to the CDB) and
 only wrote up to offset 8 when building the command, so it must have
 been sending the command with a length of 9. (It zeroed the whole CDB
 first and only wrote what it needed to.)

 (And it used the C++ operator [] to build the command, that was fun
 to trace...)
 
 Even if allocation length is present in the CDB, the CDB may be missing
 important information that is required to process the command.  So it
 may have caught a bug in the program... depending on the CDB.
 

Yeah, the change is probably good. We should have been validating that
the length was at least as long the expected length all along. But some
programs are going to break because of this...
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Trouble with hdparm -d on Dell D610

2008-01-11 Thread Alan Cox
 I was talking to Kristin this morning about doing that.  I was
 concerned that there is not anybody certifying that each individual
 disk drive model / firmware release is properly implementing the
 Security Erase function.
 
 Are you aware of testing body, etc. that publishes a white-list of
 drives that are known to have a proper implementation of Security
 Erase?  Lacking something like that and realizing how rarely it is
 used, I'm not sure it should be trusted.

That would be a question to ask some of the security bodies - or possible
T13 (the standards people). Given there are only about 4 major drive
vendors left it sohuldn't take long to ask them however.

 Performing both a Security Erase and calling shred on the drive might
 be the ultimate one-two punch.

Can't do any harm - and in theory drives can reject (not ignore!)
security erase. Some mini ones seem to.

-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html