[BUG] 2.6.24-mm1 and 2.6.24-git13 kernel panic's while bootup at ide_device_add_all

2008-02-05 Thread Kamalesh Babulal
Hi,

The kernel bootup panics with the 2.6.24-mm1 and 2.6.24-git13 kernel
while defconfig compiled in for x86_64 (Intel(R) Xeon) box

BUG: unable to handle kernel paging request at ffb0
IP: [80413642] init_irq+0x188/0x444
PGD 203067 PUD 204067 PMD 0 
Oops:  [1] SMP 
CPU 2 
Modules linked in:
Pid: 1, comm: swapper Not tainted 2.6.24 #1
RIP: 0010:[80413642]  [80413642] init_irq+0x188/0x444
RSP: 0018:81022f093e00  EFLAGS: 00010287
RAX: ff90 RBX: 808a9100 RCX: 
RDX:  RSI: 81022fc039c0 RDI: 8074dd00
RBP: 81022f093e30 R08: 808af880 R09: 0002
R10: 0001 R11: 810bed60 R12: 808b0400
R13: 808b0410 R14:  R15: 
FS:  () GS:81022f0883c0() knlGS:
CS:  0010 DS: 0018 ES: 0018 CR0: 8005003b
CR2: ffb0 CR3: 00201000 CR4: 06e0
DR0:  DR1:  DR2: 
DR3:  DR6: 0ff0 DR7: 0400
Process swapper (pid: 1, threadinfo 81022f092000, task 81022f0797d0)
Stack:  81022f093e30  808a9100 808a9120
 ffed  81022f093eb0 80414425
 81022f093ec0  8074e920 0246
Call Trace:
 [80414425] ide_device_add_all+0xb27/0xe1b
 [807d2884] ide_generic_init+0x3a/0x3e
 [807b473b] kernel_init+0x175/0x2e7
 [8020bff8] child_rip+0xa/0x12
 [80372350] ? acpi_ds_init_one_object+0x0/0x88
 [807b45c6] ? kernel_init+0x0/0x2e7
 [8020bfee] ? child_rip+0x0/0x12


Code: 89 03 49 8b 45 18 48 89 18 48 39 1b 75 04 0f 0b eb fe fe 05 51 51 38 00 
fb eb 5b 48 8b 83 28 07 00 00 83 ca ff 48 83 e8 70 74 0e 48 8b 40 20 48 8b 80 
88 00 00 00 8b 50 04 48 8b 3d 79 ff 2f 00 
RIP  [80413642] init_irq+0x188/0x444
 RSP 81022f093e00
CR2: ffb0
---[ end trace 9010a4c8c4ba608a ]---

(gdb) p init_irq
$1 = {int (ide_hwif_t *)} 0x804134ba init_irq
(gdb) p/x 0x804134ba+0x188
$2 = 0x80413642
(gdb) l *0x80413642
0x80413642 is in init_irq (include/linux/ide.h:1311).
1306print_hex_dump(KERN_INFO, , DUMP_PREFIX_NONE, 16, 2, id, 512, 
0);
1307}
1308
1309static inline int hwif_to_node(ide_hwif_t *hwif)
1310{
1311struct pci_dev *dev = to_pci_dev(hwif-dev);
1312return dev ? pcibus_to_node(dev-bus) : -1;
1313}
1314
1315static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive)
(gdb) 

(gdb) p ide_device_add_all
$1 = {int (u8 *, const struct ide_port_info *)} 0x804138fe 
ide_device_add_all
(gdb) p/x 0x804138fe
$2 = 0x804138fe
(gdb) l *0x804138fe
0x804138fe is in ide_device_add_all (drivers/ide/ide-probe.c:1372).
1367hwif-cbl = hwif-cable_detect(hwif);
1368}
1369}
1370
1371int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
1372{
1373ide_hwif_t *hwif, *mate = NULL;
1374int i, rc = 0;
1375
1376for (i = 0; i  MAX_HWIFS; i++) {
(gdb) 

-- 
Thanks  Regards,
Kamalesh Babulal,
Linux Technology Center,
IBM, ISTL.
-
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 0/7] blk_end_request: full I/O completion handler

2008-02-05 Thread Jens Axboe
On Tue, Feb 05 2008, S, Chandrakala (STSD) wrote:
 Hello,
 
 We would like to know in which kernel version these patches are
 available.  

They were merged after 2.6.24 was released, so they will show up in the
2.6.25 kernel.

-- 
Jens Axboe

-
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 0/7] blk_end_request: full I/O completion handler

2008-02-05 Thread S, Chandrakala (STSD)
Hello,

We would like to know in which kernel version these patches are
available.  
 
Thanks,
Chandrakala

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Jens Axboe
Sent: Monday, September 03, 2007 1:16 PM
To: Kiyoshi Ueda
Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED];
linux-ide@vger.kernel.org; Miller, Mike (OS Dev);
[EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: [PATCH 0/7] blk_end_request: full I/O completion handler

On Fri, Aug 31 2007, Kiyoshi Ueda wrote:
 Hello,
 
 This set of patches changes request completion interface between 
 device drivers and block layer to 1 step procedure from current 2 step

 procedures using end_that_request_{first/chunk} and 
 end_that_request_last().
 
 This change allows request-based multipath to hook in before 
 completing each chunk of request, check errors for it and retry it 
 using another path if error is detected.
 
 Summaries of each patch are below:
   1/7: add new request completion interface, blk_end_request()
   2/7: add some macros to get the size of request in bytes
   3/7: convert normal drivers to use blk_end_request()
   4/7: convert odd drivers like cciss/cpqarray/xsysace to use
blk_end_request()
   5/7: convert ide-cd (cdrom_newpc_intr) to use blk_end_request()
   6/7: remove/unexport no longer needed end_that_request_*
   7/7: change rq-end_io to cover request completion as a whole
 
 I have tested the patch on two machines, ia64+QLA1280+QLA2200 and 
 x86_64+SATA+IDE-CDROM.
 I can't test other device drivers for which I don't have hardware.
 So testing help and any comments would be very much appreciated.
 
 The interface change causes code modifications of *ALL DEVICE DRIVERS*

 which are using end_that_request_{first/chunk/last} to complete
request.
 But it should not affect the behavior.
 
 Please review and apply if no problem.
 This patch-set should be applied on top of 2.6.23-rc3-mm1.
 
 
 BACKGROUND
 ==
 The patch is necessary to allow device stacking at request level, that

 is request-based device-mapper multipath.
 Currently, device-mapper is implemented as a stacking block device at 
 BIO level.  OTOH, request-based DM will stack at request level to 
 allow better multipathing decision.
 To allow device stacking at request level, the completion procedure 
 need to provide a hook for it.
 For example, dm-multipath has to check errors and retry with other 
 paths if necessary before returning the I/O result to upper layer.
 struct request has 'end_io' hook currently.  But it's called at the 
 very late stage of completion handling where the I/O result is already

 returned to the upper layer.
 So we need something here.
 
 The first approach to hook in completion of each chunk of request was 
 adding a new rq-end_io_first() hook and calling it on the top of 
 __end_that_request_first().
   - http://marc.theaimsgroup.com/?l=linux-scsim=115520444515914w=2
   - http://marc.theaimsgroup.com/?l=linux-kernelm=116656637425880w=2
 However, Jens pointed out that redesigning rq-end_io() as a full 
 completion handler would be better:
 
 On Thu, 21 Dec 2006 08:49:47 +0100, Jens Axboe [EMAIL PROTECTED]
wrote:
  Ok, I see what you are getting at. The current -end_io() is called 
  when the request has fully completed, you want notification for each

  chunk potentially completed.
  
  I think a better design here would be to use -end_io() as the full 
  completion handler, similar to how bio-bi_end_io() works. A request

  originating from __make_request() would set something ala:
 .
  instead of calling the functions manually. That would allow you to 
  get notification right at the beginning and do what you need, 
  without adding a special hook for this.
 
 I thought his comment was reasonable.
 So I modified the patches based on his suggestion.
 
 
 WHAT IS CHANGED
 ===
 The change is basically illustlated by the following pseudo code:
 
 [Before]
   if (end_that_request_{first/chunk} succeeds) { -- completes bios
  do something driver specific
  end_that_request_last() -- calls end_io()
  the request is free from the driver
   } else {
  the request was incomplete, retry for leftover or ignoring
   }
 
 [After]
   if (blk_end_request() succeeds) { -- calls end_io(), completes bios
  the request is free from the driver
   } else {
  the request was incomplete, retry for leftover or ignoring
   }
 
 
 In detail, request completion procedures are changed like below.
 
 [Before]
   o 2 steps completion using end_that_request_{first/chunk}
 and end_that_request_last().
   o Device drivers have ownership of a request until they
 call end_that_request_last().
   o rq-end_io() is called at the last stage of
 end_that_request_last() for some block layer codes need
 specific request handling when completing it.
 
 [After]
   o 1 step completion using blk_end_request().
 (end_that_request_* are no longer used from device 

slow resume from s2ram

2008-02-05 Thread Brian Keck

Hello,

I can't get my otherwise lovely debian/sid Vaio TX17 to resume promptly
from suspend-to-ram.

Until recently it resumed at all maybe 1 in 4 times from
's2ram -f -p' in X, always taking several minutes, apparently 
due to the hard disk (1.8 Toshiba HDD1544/MK6006GAH).   

Last week I tried 2 things:

  * added /etc/modprobe.d/libata with
options libata noacpi=0

  * built a kernel + initrd from debian linux-source-2.6.24 with
CONFIG_BLK_DEV_IDEACPI=y

This boots OK, with ...

   $ cat /sys/module/libata/parameters/noacpi
   0

But the only improvement is that, from X, it resumes every time (maybe
10 times so far).  It still takes about 90 seconds (the disc light is on
for the 1st 30 seconds, then after another 60 seconds it comes on again
 the display comes back).

This is with the s2ram from debian/sid current uswsusp.
Oddly, s2ram has always worked best from X.

dmesg below ... presumably the delay is connected to the lines ...
  hda: lost interrupt
  hda: dma_timer_expiry: dma status == 0x21

Any ideas?

Thanks,
Brian Keck

--

Linux version 2.6.24 (2.6.24-1) ([EMAIL PROTECTED]) (gcc version 4.2.1 (Debian 
4.2.1-5)) #2 SMP Fri Feb 1 20:28:43 EST 2008
BIOS-provided physical RAM map:
 BIOS-e820:  - 0009f800 (usable)
 BIOS-e820: 0009f800 - 000a (reserved)
 BIOS-e820: 000d8000 - 0010 (reserved)
 BIOS-e820: 0010 - 3f69 (usable)
 BIOS-e820: 3f69 - 3f69d000 (ACPI data)
 BIOS-e820: 3f69d000 - 3f70 (ACPI NVS)
 BIOS-e820: 3f70 - 4000 (reserved)
 BIOS-e820: e000 - f0006000 (reserved)
 BIOS-e820: f0008000 - f000c000 (reserved)
 BIOS-e820: fed2 - fed9 (reserved)
 BIOS-e820: ff00 - 0001 (reserved)
118MB HIGHMEM available.
896MB LOWMEM available.
Entering add_active_range(0, 0, 259728) 0 entries of 256 used
Zone PFN ranges:
  DMA 0 - 4096
  Normal   4096 -   229376
  HighMem229376 -   259728
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0:0 -   259728
On node 0 totalpages: 259728
  DMA zone: 32 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 4064 pages, LIFO batch:0
  Normal zone: 1760 pages used for memmap
  Normal zone: 223520 pages, LIFO batch:31
  HighMem zone: 237 pages used for memmap
  HighMem zone: 30115 pages, LIFO batch:7
  Movable zone: 0 pages used for memmap
DMI 2.3 present.
ACPI: RSDP 000F6790, 0014 (r0 PTLTD )
ACPI: RSDT 3F697E7C, 0044 (r1   Sony   V1 20050805 PTL 0)
ACPI: FACP 3F69CE78, 0084 (r2   Sony   V1 20050805 PTL50)
ACPI: DSDT 3F69896F, 4509 (r1   Sony   V1 20050805 PTL   10E)
ACPI: FACS 3F6ADFC0, 0040
ACPI: APIC 3F69CEFC, 0068 (r1   Sony   V1 20050805 PTL50)
ACPI: BOOT 3F69CFD8, 0028 (r1   Sony   V1 20050805 PTL 1)
ACPI: MCFG 3F69CF9C, 003C (r1   Sony   V1 20050805 PTL5F)
ACPI: SSDT 3F69873D, 022E (r1   Sony   V1 20050805 PTL  20030224)
ACPI: SSDT 3F6982F8, 0235 (r1   Sony   V1 20050805 PTL  20030224)
ACPI: SSDT 3F6980D9, 021F (r1   Sony   V1 20050805 PTL  20030224)
ACPI: SSDT 3F697EC0, 0219 (r1   Sony   V1 20050805 PTL  20030224)
ACPI: DMI detected: Sony
ACPI: PM-Timer IO Port: 0x1008
ACPI: Local APIC address 0xfee0
ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
Processor #0 6:13 APIC version 20
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] disabled)
ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
ACPI: IOAPIC (id[0x01] address[0xfec0] gsi_base[0])
IOAPIC[0]: apic_id 1, version 32, address 0xfec0, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
Enabling APIC mode:  Flat.  Using 1 I/O APICs
Using ACPI (MADT) for SMP configuration information
Allocating PCI resources starting at 5000 (gap: 4000:a000)
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 257699
Kernel command line: root=/dev/hda2 ro
mapped APIC to b000 (fee0)
mapped IOAPIC to a000 (fec0)
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
PID hash table entries: 4096 (order: 12, 16384 bytes)
Detected 1197.028 MHz processor.
Console: colour VGA+ 80x25
console [tty0] enabled
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1020860k/1038912k available (1692k kernel code, 17256k reserved, 671k 
data, 216k init, 121408k highmem)
virtual kernel memory layout:
fixmap  : 0xfff4d000 - 0xf000   ( 712 kB)
pkmap   : 0xff80 - 

Re: AHCI driver preferring nr_ports over port map

2008-02-05 Thread Jan Beulich
Does the following patch fix the problem?

Yes, it does - thanks!

Jan

*

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index e75966b..39627c7 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -679,24 +679,20 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
 
/* cross check port_map and cap.n_ports */
if (port_map) {
-   u32 tmp_port_map = port_map;
-   int n_ports = ahci_nr_ports(cap);
+   int map_ports = 0;
 
-   for (i = 0; i  AHCI_MAX_PORTS  n_ports; i++) {
-   if (tmp_port_map  (1  i)) {
-   n_ports--;
-   tmp_port_map = ~(1  i);
-   }
-   }
+   for (i = 0; i  AHCI_MAX_PORTS; i++)
+   if (port_map  (1  i))
+   map_ports++;
 
-   /* If n_ports and port_map are inconsistent, whine and
-* clear port_map and let it be generated from n_ports.
+   /* If PI has more ports than n_ports, whine and clear
+* port_map and let it be generated from n_ports.
 */
-   if (n_ports || tmp_port_map) {
+   if (map_ports  ahci_nr_ports(cap)) {
dev_printk(KERN_WARNING, pdev-dev,
-  nr_ports (%u) and implemented port map 
-  (0x%x) don't match, using nr_ports\n,
-  ahci_nr_ports(cap), port_map);
+  implemented port map (0x%x) contains more 
+  ports than nr_ports (%u), using nr_ports\n,
+  port_map, ahci_nr_ports(cap));
port_map = 0;
}
}

-
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] enclosure: add support for enclosure services

2008-02-05 Thread James Bottomley
On Mon, 2008-02-04 at 21:35 -0800, Luben Tuikov wrote:
   I guess the same could be said for STGT and SCST,
  right?
  
  You mean both of their kernel pieces are modular? 
  That's correct.
 
 No, you know very well what I mean.
 
 By the same logic you're preaching to include your
 solution part of the kernel, you can also apply to
 SCST.

Ah, but it's not ... the current patch is merely exporting an interface.
The debate in STGT vs SCST is not whether to export an interface but
where to draw the line.

You could also argue in the same vein that sd is redundant because a
filesystem could talk directly to the device via /dev/sgX (in fact OSD
based filesystems already do this).  The argument is true, but misses
the bigger picture that the interfaces exported by sd are more portable
(apply to non-SCSI block devices) and easier to use.

   Yes, for which the transport layer, implements the
   scsi device node for the SES device.  It doesn't
  really
   matter if the SCSI commands sent to the SES device go
   over SGPIO or FC or SAS or Bluetooth or I2C, etc, the
   transport layer can implement that and present the
   /dev/sgX node.
  
  But it does matter if the enclosure device doesn't
  speak SCSI.
 
 Enclosure management isn't as simple as you're
 portraying it here.  The enclosure management
 device speaks either SES or SAF-TE.  The transport
 protocol to access it could be SGPIO or I2C or...

Look, just read the spec; SGPIO is a bus for driving enclosures ... it
doesn't require SES or SAF-TE or even any SCSI protocol.

   SGPIO
  isn't a SCSI protocol ... it's a general purpose
  serial bus protocol.
  It's pretty simple and register based, but it might (or
  might not) be
  accessible via a SCSI bridge.
 
 I see.  You've just discovered SGPIO -- good for you.
 
 At any rate, I told you already that what is needed
 is not what you've provided but a _device node_
 exported by the kernel, either a processor or
 enclosure type.

Wrong ... we don't export non-SCSI devices as SCSI (with the single and
rather annoying exception of ATA via SAT).

James


-
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: (fwd) Bug#11922: I/O error on blank tapes

2008-02-05 Thread Kai Makisara
On Mon, 4 Feb 2008, James Bottomley wrote:

 
 On Mon, 2008-02-04 at 22:28 +0100, Borislav Petkov wrote:
  On Mon, Feb 04, 2008 at 03:22:06PM +0100, maximilian attems wrote:
  
  (Added Bart to CC)
  
   hello borislav,
   
   may i forward you that *old* Debian kernel bug,
   have seen you working on ide-tape:
   http://bugs.debian.org/11922
   no we don't carry any ide patches anymore.
   
   maybe you've already fixed it in latest?
   
   thanks
   
   -- 
   maks
   
   - Forwarded message from Stephen Kitt [EMAIL PROTECTED] -
   
   Subject: Bug#11922: I/O error on blank tapes
   Date: Sat, 1 Dec 2007 19:06:18 +0100
   From: Stephen Kitt [EMAIL PROTECTED]
   To: [EMAIL PROTECTED]
   
   Hi,
   
   This does still occur with 2.6.22; with a blank tape in my HP DDS-4 drive:
   
   $ tar tzvf /dev/nst0
   tar: /dev/nst0: Cannot read: Input/output error
 
 That's a SCSI tape, not an IDE one.  I cc'd the SCSI list
 
This is not a bug, it is a feature. There is _nothing_ on the tape and if 
you try to read something, you get an error. The same thing applies to 
reading after the last filemark. Note that after writing a filemark at the 
beginning of the tape, the situation is different. Now there is a file and 
the normal EOF semantics apply although there still is no data.

I admit that the error return could be more descriptive but the st driver 
tries to be compatible with other Unices.

The behavior can be changed if Linux does not match other Unices. I don't 
remember if I have tested just this with other Unices. I will try to test 
this with Tru64 tomorrow. If anyone has data on other Unices, it would be 
helpful.

-- 
Kai
-
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 pm

2008-02-05 Thread [EMAIL PROTECTED]
Hi everybody,

it looks like this will be a never ending story...

 After I got the new PSU and the raid was in full sync without any
 error for 48h, I thought all problems were gone. Today the sata errors
  reappeared and whenever the load is high enough I get the following:

I exchanged two (probably failing) of the eight harddrives with new ones.
All remaining disks have a good smart state and are fully readable when
the raid is not active. As long as I mount the filesystem on the raid
readonly there wont happen any error, but the moment I mount it rw and try
to copy something to the fs on the raid I get the already known timeout.
At least I get a little bit desperate now...

ata10.00: failed to read SCR 1 (Emask=0x40)
ata10.01: failed to read SCR 1 (Emask=0x40)
ata10.02: failed to read SCR 1 (Emask=0x40)
ata10.03: failed to read SCR 1 (Emask=0x40)
ata10.04: failed to read SCR 1 (Emask=0x40)
ata10.05: failed to read SCR 1 (Emask=0x40)
ata10.00: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.01: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.01: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 1 cdb 0x0 data 0
 res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata10.01: status: { DRDY }
ata10.02: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.03: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.04: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.05: exception Emask 0x100 SAct 0x0 SErr 0x0 action 0x6 frozen
ata10.15: hard resetting link
ata10.15: SATA link up 3.0 Gbps (SStatus 123 SControl 0)
ata10.00: hard resetting link
ata10.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata10.01: hard resetting link
ata10.01: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata10.02: hard resetting link
ata10.02: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata10.03: hard resetting link
ata10.03: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata10.04: hard resetting link
ata10.04: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata10.05: hard resetting link
ata10.05: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata10.00: configured for UDMA/100
ata10.01: configured for UDMA/100
ata10.03: configured for UDMA/100
ata10.04: configured for UDMA/100
ata10: EH complete
sd 9:0:0:0: [sdl] 976773168 512-byte hardware sectors (500108 MB)
sd 9:0:0:0: [sdl] Write Protect is off
sd 9:0:0:0: [sdl] Mode Sense: 00 3a 00 00
sd 9:0:0:0: [sdl] Write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
sd 9:1:0:0: [sdm] 976773168 512-byte hardware sectors (500108 MB)
sd 9:1:0:0: [sdm] Write Protect is off
sd 9:1:0:0: [sdm] Mode Sense: 00 3a 00 00
sd 9:1:0:0: [sdm] Write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
sd 9:2:0:0: [sdn] 976773168 512-byte hardware sectors (500108 MB)
sd 9:2:0:0: [sdn] Write Protect is off
sd 9:2:0:0: [sdn] Mode Sense: 00 3a 00 00
sd 9:2:0:0: [sdn] Write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
sd 9:3:0:0: [sdo] 976773168 512-byte hardware sectors (500108 MB)
sd 9:3:0:0: [sdo] Write Protect is off
sd 9:3:0:0: [sdo] Mode Sense: 00 3a 00 00
sd 9:3:0:0: [sdo] Write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
sd 9:4:0:0: [sdp] 976773168 512-byte hardware sectors (500108 MB)
sd 9:4:0:0: [sdp] Write Protect is off
sd 9:4:0:0: [sdp] Mode Sense: 00 3a 00 00
sd 9:4:0:0: [sdp] Write cache: enabled, read cache: enabled, doesn't
support DPO or FUA


-
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: [git patches] IDE updates part #4

2008-02-05 Thread Linus Torvalds


On Sat, 2 Feb 2008, Bartlomiej Zolnierkiewicz wrote:
 
 * next part of IDE probing code re-organization saga
   (that would be me)

This seems to cause very irritating and bogus messages for me:

Probing IDE interface ide0...
Probing IDE interface ide1...
ide2: I/O resource 0x0-0x7 not free.
ide2: ports already in use, skipping probe
ide3: I/O resource 0x0-0x7 not free.
ide3: ports already in use, skipping probe
ide4: I/O resource 0x0-0x7 not free.
ide4: ports already in use, skipping probe
ide5: I/O resource 0x0-0x7 not free.
ide5: ports already in use, skipping probe
ide6: I/O resource 0x0-0x7 not free.
ide6: ports already in use, skipping probe
ide7: I/O resource 0x0-0x7 not free.
ide7: ports already in use, skipping probe
ide8: I/O resource 0x0-0x7 not free.
ide8: ports already in use, skipping probe
ide9: I/O resource 0x0-0x7 not free.
ide9: ports already in use, skipping probe

and that's just totally bogus. It shouldn't even request that region, 
since it's not been allocated!

So that ide_device_add_all() is missing some checks. Should it check the 
probe[] array like ideprobe_init() used to, or what?

Linus
-
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 2/3 2.6.24-git] ARM/RPC: Use HAVE_PATA_PLATFORM to select pata platform driver

2008-02-05 Thread Russell King - ARM Linux
On Sat, Feb 02, 2008 at 04:21:35PM +, Ben Dooks wrote:
 Use HAVE_PATA_PLATFORM for ARCH_RPC 
 
 Cc: Linux ARM Kernel [EMAIL PROTECTED]
 Cc: Russell King [EMAIL PROTECTED]
 Signed-off-by: Ben Dooks [EMAIL PROTECTED]

Patch is fine.

Acked-by: Russell King [EMAIL PROTECTED]

Thanks.
-
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] enclosure: add support for enclosure services

2008-02-05 Thread Luben Tuikov
--- On Tue, 2/5/08, James Bottomley [EMAIL PROTECTED] wrote:
I guess the same could be said for STGT and
 SCST,
   right?
   
   You mean both of their kernel pieces are modular?
 
   That's correct.
  
  No, you know very well what I mean.
  
  By the same logic you're preaching to include your
  solution part of the kernel, you can also apply to
  SCST.
 
 Ah, but it's not ... the current patch is merely
 exporting an interface.
 The debate in STGT vs SCST is not whether to export an
 interface but
 where to draw the line.

draw the line -- I see.
BTW, what is wrong with exporting the interface?

What is wrong if both implementations are in the kernel
and then let the users and distros decide which one
they like best and use more?  It'll not be the fist time
this has happened in the kernel.  Both are actively
maintained.

It seems highly arbitrary to say: X is in the kernel, Y
is not. If you want Y, just forget about it and fix X.
Give people choice at config time.

This is off topic anyway.

 You could also argue in the same vein that sd is redundant
 because a
 filesystem could talk directly to the device via /dev/sgX
 (in fact OSD
 based filesystems already do this).

Yes, I've mentioned this thing before on this list.  Oh, maybe 3
years ago.  This is why I had wanted for transport protocols
to export ... (oh, let's not get this off topic).

(Apparently it takes 3 years...)

 The argument is true,
 but misses
 the bigger picture that the interfaces exported by sd are
 more portable
 (apply to non-SCSI block devices) and easier to use.

It isn't quite the same thing.  It's like comparing
apples to oranges.

 
Yes, for which the transport layer,
 implements the
scsi device node for the SES device.  It
 doesn't
   really
matter if the SCSI commands sent to the SES
 device go
over SGPIO or FC or SAS or Bluetooth or I2C,
 etc, the
transport layer can implement that and
 present the
/dev/sgX node.
   
   But it does matter if the enclosure device
 doesn't
   speak SCSI.
  
  Enclosure management isn't as simple as you're
  portraying it here.  The enclosure management
  device speaks either SES or SAF-TE.  The transport
  protocol to access it could be SGPIO or I2C or...
 
 Look, just read the spec; SGPIO is a bus for driving
 enclosures ...

I thought Serial General Purpose Input Output
(SGPIO) was a method to serialize general purpose
IO signals.

 it
 doesn't require SES or SAF-TE or even any SCSI
 protocol.

That's true.  And this is why I mentioned a couple
of emails ago to simply export a sgpio device node *IF*
this is what is needed.  Of course devices that use SGPIO
abstract it away for their functional purpose, e.g.
enclosures, LED, etc, and provide a more general way to
control it -- highly hardware specific on one side.

Your abstraction currently deals with SES devices
and I'd rather leave that to user-space.  Alternatively,
which I presume is what you're thinking, a HW specific
core would be using your abstraction to provide
some unified access to raw features, and that unified
access isn't defined anywhere, and would likely not
be.  Alternatively that unified access is things
like SES and SAF-TE, which is what vendors prefer
to export, or they prefer to drive this directly
via other means.

That is, I fail to see the kernel bloat, for things
that aren't necessary in the kernel.

If you want your abstraction to fly, it first needs
a common usage model to abstract, and the latter is
missing _from the kernel_.

Unless I don't know the details and you've been
asked to implement this for a single vendor's HW solution.

SGPIO
   isn't a SCSI protocol ... it's a general
 purpose
   serial bus protocol.
   It's pretty simple and register based, but it
 might (or
   might not) be
   accessible via a SCSI bridge.
  
  I see.  You've just discovered SGPIO -- good for
 you.
  
  At any rate, I told you already that what is needed
  is not what you've provided but a _device node_
  exported by the kernel, either a processor or
  enclosure type.
 
 Wrong ... we don't export non-SCSI devices as SCSI
 (with the single and
 rather annoying exception of ATA via SAT).

I didn't say you should do that.  I had already
mentioned that vendors export such controls
as either enclosure or processor type devices,
and this is why I told you that that is what
needs to be exported, which incidentally is
a device node of that type.

Without a common usage model already in the kernel
to abstract (e.g. sd for block device, since you brought
that up) your abstraction seems redundant and arbitrary.

Your kernel code already uses READ DIAGNOSTIC, etc,
and I'd rather leave that to user-space.

   Luben

-
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: another possible ide panic fix for blk-end-request

2008-02-05 Thread Kiyoshi Ueda
Hi Boris,

On Tue, 5 Feb 2008 07:01:57 +0100, Borislav Petkov wrote:
 On Mon, Feb 04, 2008 at 02:53:12PM -0500, Kiyoshi Ueda wrote:
  Hi Jens, Bart, Boris,
  
  I have reviewed all blk-end-request patches again to confirm whether
  there are any similar problems with the last week's ide-cd panic:
  http://lkml.org/lkml/2008/1/29/140
  
  And I found a possible similar bug in ide-io change:
  ide_end_drive_cmd() could be called for blk_pc_request() which could
  have bios.
 
 You mean ide_abort() and ide_error(), right?
 Because ide{-tape,-floppy,-scsi} do call already ide_end_request()
 for non-special rq's (!blk_special_request()), except ide-scsi
 filters also on !blk_sense_request().

That's right.

Thanks,
Kiyoshi Ueda
-
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] enclosure: add support for enclosure services

2008-02-05 Thread James Bottomley
On Tue, 2008-02-05 at 11:33 -0800, Luben Tuikov wrote:
  Wrong ... we don't export non-SCSI devices as SCSI
  (with the single and
  rather annoying exception of ATA via SAT).
 
 I didn't say you should do that.  I had already
 mentioned that vendors export such controls
 as either enclosure or processor type devices,
 and this is why I told you that that is what
 needs to be exported, which incidentally is
 a device node of that type.
 
 Without a common usage model already in the kernel
 to abstract (e.g. sd for block device, since you brought
 that up) your abstraction seems redundant and arbitrary.

Exactly, so the first patch in this series (a while ago now) was a
common usage model abstraction of enclosures, and the second was an
implementation in terms of SES.   I will do one in terms of SGPIO as
well ... assuming I ever find a SGPIO enclosure ...

 Your kernel code already uses READ DIAGNOSTIC, etc,
 and I'd rather leave that to user-space.

You can do it in user space as well.  It's just a bit difficult to get
information out of a SES enclosure without using it, and getting some of
the information is a requirement of the abstraction.

James


-
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] enclosure: add support for enclosure services

2008-02-05 Thread Luben Tuikov
--- On Tue, 2/5/08, James Bottomley [EMAIL PROTECTED] wrote:
   Wrong ... we don't export non-SCSI devices as
 SCSI
   (with the single and
   rather annoying exception of ATA via SAT).
  
  I didn't say you should do that.  I had already
  mentioned that vendors export such controls
  as either enclosure or processor type devices,
  and this is why I told you that that is what
  needs to be exported, which incidentally is
  a device node of that type.
  
  Without a common usage model already in the kernel
  to abstract (e.g. sd for block device, since you
 brought
  that up) your abstraction seems redundant and
 arbitrary.
 
 Exactly, so the first patch in this series (a while ago
^^^

See last paragraph.

 now) was a
 common usage model abstraction of enclosures, and the
 second was an
 implementation in terms of SES.   I will do one in terms of
 SGPIO as
 well ... assuming I ever find a SGPIO enclosure ...

The vendor would've abstracted that away most commonly
using SES.

 
  Your kernel code already uses READ DIAGNOSTIC, etc,
  and I'd rather leave that to user-space.
 
 You can do it in user space as well.  It's just a bit
 difficult to get
 information out of a SES enclosure without using it, and
 getting some of
 the information is a requirement of the abstraction.

You missed my point.  Your abstraction is redundant and
arbitrary -- it is not based on any known, in-practice,
usage model, already in place that needs a better, common
way of doing XYZ, and therefore needs an abstraction.

   Luben

-
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: Problem burning DVDs with Marvell 88SE6121 on pata_marvell

2008-02-05 Thread Andrew Morton

(added linux-ide)

On Sat, 2 Feb 2008 16:30:04 -0600
Mike Hokenson [EMAIL PROTECTED] wrote:

 I recently put together a new system with a MSI P35 PLATINUM and although
 reading from data CDs, DVDs, and watching DVD movies is working fine, DVD
 burning isn't. MSI's manual says 1 IDE port by Marvell 88SE6111, but
 lspci says it's a 88SE6121. I have two DVD burners, a SONY DRU-510A and
 a DRU-820A. They were both working fine with TDK DVD+R media on my ASUS
 K8V SE DELUXE (VIA IDE controller) prior to the upgrade.
 
 Here's what I see with dvd+rw-tools version 7.0-9:
 
 sh# dvd+rw-mediainfo /dev/dvd  /dev/null  # this is blank media
 :-[ GET CURRENT PERFORMACE failed with SK=5h/ASC=24h/ACQ=00h]: Input/output 
 error
 :-[ READ TOC failed with SK=5h/ASC=24h/ACQ=00h]: Input/output error
 
 sh# growisofs -dvd-compat -speed=2.4 -Z /dev/dvd -rJ -joliet-long -quiet 
 burn
 Executing 'genisoimage -rJ -joliet-long -quiet burn | builtin_dd of=/dev/dvd 
 obs=32k seek=0'
 /dev/dvd: Current Write Speed is 2.5x1352KBps.
 :-[ [EMAIL PROTECTED] failed with SK=3h/ASC=0Ch/ACQ=00h]: Input/output error
 :-( write failed: Input/output error
 /dev/dvd: flushing cache
 /dev/dvd: closing track
 :-[ CLOSE TRACK failed with SK=5h/ASC=30h/ACQ=05h]: Wrong medium type
 /dev/dvd: closing disc
 :-[ CLOSE DISC failed with SK=5h/ASC=30h/ACQ=05h]: Wrong medium type
 
 sh# dvd+rw-mediainfo /dev/dvd  /dev/null
 :-[ READ TRACK INFORMATION failed with SK=3h/ASC=11h/ACQ=05h]: Input/output 
 error

(this is 2.6.24)

If nothing happens with this report in the next few days, please create an
entry at bugzilla.kernel.org so we can keep an eye on it, thanks.

Trying older kernels might be interesting, find out if it's a regression or
if it was always this way.


 And from cdrecord version 1.1.6-1:
 
 sh# mkisofs -rJ -joliet-long -quiet burn | cdrecord -v dev=/dev/dvd -
 wodim: No write mode specified.
 wodim: Asuming -tao mode.
 wodim: Future versions of wodim may have different drive dependent defaults.
 TOC Type: 1 = CD-ROM
 scsidev: '/dev/dvd'
 devname: '/dev/dvd'
 scsibus: -2 target: -2 lun: -2
 Linux sg driver version: 3.5.27
 Wodim version: 1.1.6
 SCSI buffer size: 64512
 Device type: Removable CD-ROM
 Version: 5
 Response Format: 2
 Capabilities   :
 Vendor_info: 'SONY'
 Identification : 'DVD RW DRU-820A '
 Revision   : '1.0c'
 Device seems to be: Generic mmc2 DVD-R/DVD-RW.
 Current: 0x0009 (CD-R)
 Profile: 0x002B (DVD+R/DL)
 Profile: 0x001B (DVD+R)
 Profile: 0x001A (DVD+RW)
 Profile: 0x0016 (DVD-R/DL layer jump recording)
 Profile: 0x0015 (DVD-R/DL sequential recording)
 Profile: 0x0014 (DVD-RW sequential recording)
 Profile: 0x0013 (DVD-RW restricted overwrite)
 Profile: 0x0012 (DVD-RAM)
 Profile: 0x0011 (DVD-R sequential recording)
 Profile: 0x0010 (DVD-ROM)
 Profile: 0x000A (CD-RW)
 Profile: 0x0009 (CD-R) (current)
 Profile: 0x0008 (CD-ROM)
 Profile: 0x0002 (Removable disk)
 Using generic SCSI-3/mmc   CD-R/CD-RW driver (mmc_cdr).
 Driver flags   : MMC-3 SWABAUDIO BURNFREE
 Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
 Drive buf size : 1114112 = 1088 KB
 Beginning DMA speed test. Set CDR_NODMATEST environment variable if device
 communication breaks or freezes immediately after that.
 FIFO size  : 12582912 = 12288 KB
 Track 01: data  unknown length
 Total size:0 MB (00:00.00) = 0 sectors
 Lout start:0 MB (00:02/00) = 0 sectors
 Current Secsize: 2048
 ATIP info from disk:
   Indicated writing power: 4
   Is not unrestricted
   Is not erasable
   Disk sub type: Medium Type A, high Beta category (A+) (3)
   ATIP start of lead in:  -11849 (97:24/01)
   ATIP start of lead out: 359847 (79:59/72)
 Disk type:Long strategy type (Cyanine, AZO or similar)
 Manuf. index: 25
 Manufacturer: Taiyo Yuden Company Limited
 wodim: WARNING: Total disk size unknown. Data may not fit on disk.
 Speed set to 7056 KB/s
 Starting to write CD/DVD at speed  40.0 in real TAO mode for single session.
 Last chance to quit, starting real write i   0 seconds. Operation starts.
 Waiting for reader process to fill input buffer ... input buffer ready.
 Performing OPC...
 Starting new track at sector: 0
 Track 01:1 MB written (fifo 100%) [buf  97%]   5.4x.Errno: 5 
 (Input/output error), write_g1 scsi sendcmd: no error
 CDB:  2A 00 00 00 03 64 00 00 1F 00
 status: 0x2 (CHECK CONDITION)
 Sense Bytes: 70 00 04 00 00 00 00 0A CF DC 00 00 08 03 00 00
 Sense Key: 0x4 Hardware Error, Segment 0
 Sense Code: 0x08 Qual 0x03 (logical unit communication crc error 
 (ultra-dma/32)) Fru 0x0
 Sense flags: Blk 0 (not valid)
 cmd finished after 30.186s timeout 40s
 
 write track data: error after 1777664 bytes
 wodim: A write error occured.
 wodim: Please properly read the error message above.
 Writing  time:   46.572s
 Fixating...
 Errno: 5 (Input/output error), close track/session scsi sendcmd: no error
 CDB:  5B 00 02 00 00 00 00 00 00 00
 status: 0x2 (CHECK CONDITION)
 Sense Bytes: 70 00 05 00 00 00 

Re: [PATCH] enclosure: add support for enclosure services

2008-02-05 Thread Andrew Morton
On Sun, 03 Feb 2008 18:16:51 -0600
James Bottomley [EMAIL PROTECTED] wrote:

 
 From: James Bottomley [EMAIL PROTECTED]
 Date: Sun, 3 Feb 2008 15:40:56 -0600
 Subject: [SCSI] enclosure: add support for enclosure services
 
 The enclosure misc device is really just a library providing sysfs
 support for physical enclosure devices and their components.
 

Thanks for sending it out for review.

 +struct enclosure_device *enclosure_find(struct device *dev)
 +{
 + struct enclosure_device *edev = NULL;
 +
 + mutex_lock(container_list_lock);
 + list_for_each_entry(edev, container_list, node) {
 + if (edev-cdev.dev == dev) {
 + mutex_unlock(container_list_lock);
 + return edev;
 + }
 + }
 + mutex_unlock(container_list_lock);
 +
 + return NULL;
 +}
 +EXPORT_SYMBOL_GPL(enclosure_find);

This looks a little odd.  We don't take a ref on the object after looking
it up, so what prevents some other thread of control from freeing or
otherwise altering the returned object while the caller is playing with it?

 +/**
 + * enclosure_for_each_device - calls a function for each enclosure
 + * @fn:  the function to call
 + * @data:the data to pass to each call
 + *
 + * Loops over all the enclosures calling the function.
 + *
 + * Note, this function uses a mutex which will be held across calls to
 + * @fn, so it must have user context, and @fn should not sleep or

Probably non atomic context would be more accurate.

fn() actually _can_ sleep.

 + * otherwise cause the mutex to be held for indefinite periods
 + */
 +int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *),
 +   void *data)
 +{
 + int error = 0;
 + struct enclosure_device *edev;
 +
 + mutex_lock(container_list_lock);
 + list_for_each_entry(edev, container_list, node) {
 + error = fn(edev, data);
 + if (error)
 + break;
 + }
 + mutex_unlock(container_list_lock);
 +
 + return error;
 +}
 +EXPORT_SYMBOL_GPL(enclosure_for_each_device);
 +
 +/**
 + * enclosure_register - register device as an enclosure
 + *
 + * @dev: device containing the enclosure
 + * @components:  number of components in the enclosure
 + *
 + * This sets up the device for being an enclosure.  Note that @dev does
 + * not have to be a dedicated enclosure device.  It may be some other type
 + * of device that additionally responds to enclosure services
 + */
 +struct enclosure_device *
 +enclosure_register(struct device *dev, const char *name, int components,
 +struct enclosure_component_callbacks *cb)
 +{
 + struct enclosure_device *edev =
 + kzalloc(sizeof(struct enclosure_device) +
 + sizeof(struct enclosure_component)*components,
 + GFP_KERNEL);
 + int err, i;
 +
 + if (!edev)
 + return ERR_PTR(-ENOMEM);
 +
 + if (!cb) {
 + kfree(edev);
 + return ERR_PTR(-EINVAL);
 + }

It would be less fuss if this were to test cb before doing the kzalloc().

Can cb==NULL actually and legitimately happen?

 + edev-components = components;
 +
 + edev-cdev.class = enclosure_class;
 + edev-cdev.dev = get_device(dev);
 + edev-cb = cb;
 + snprintf(edev-cdev.class_id, BUS_ID_SIZE, %s, name);
 + err = class_device_register(edev-cdev);
 + if (err)
 + goto err;
 +
 + for (i = 0; i  components; i++)
 + edev-component[i].number = -1;
 +
 + mutex_lock(container_list_lock);
 + list_add_tail(edev-node, container_list);
 + mutex_unlock(container_list_lock);
 +
 + return edev;
 +
 + err:
 + put_device(edev-cdev.dev);
 + kfree(edev);
 + return ERR_PTR(err);
 +}
 +EXPORT_SYMBOL_GPL(enclosure_register);
 +
 +static struct enclosure_component_callbacks enclosure_null_callbacks;
 +
 +/**
 + * enclosure_unregister - remove an enclosure
 + *
 + * @edev:the registered enclosure to remove;
 + */
 +void enclosure_unregister(struct enclosure_device *edev)
 +{
 + int i;
 +
 + if (!edev)
 + return;

Is this legal?

 + mutex_lock(container_list_lock);
 + list_del(edev-node);
 + mutex_unlock(container_list_lock);

See, right now, someone who found this enclosure_device via
enclosure_find() could still be playing with it?

 + for (i = 0; i  edev-components; i++)
 + if (edev-component[i].number != -1)
 + class_device_unregister(edev-component[i].cdev);
 +
 + /* prevent any callbacks into service user */
 + edev-cb = enclosure_null_callbacks;
 + class_device_unregister(edev-cdev);
 +}
 +EXPORT_SYMBOL_GPL(enclosure_unregister);
 +
 +/**
 + * enclosure_component_register - add a particular component to an enclosure
 + * @edev:the enclosure to add the component
 + * @num: the device number
 + * @type:the type of component 

Re: [git patches] IDE updates part #4

2008-02-05 Thread Bartlomiej Zolnierkiewicz

Hi Linus,

On Tuesday 05 February 2008, Linus Torvalds wrote:
 
 On Sat, 2 Feb 2008, Bartlomiej Zolnierkiewicz wrote:
  
  * next part of IDE probing code re-organization saga
(that would be me)
 
 This seems to cause very irritating and bogus messages for me:
 
   Probing IDE interface ide0...
   Probing IDE interface ide1...
   ide2: I/O resource 0x0-0x7 not free.
   ide2: ports already in use, skipping probe
   ide3: I/O resource 0x0-0x7 not free.
   ide3: ports already in use, skipping probe
   ide4: I/O resource 0x0-0x7 not free.
   ide4: ports already in use, skipping probe
   ide5: I/O resource 0x0-0x7 not free.
   ide5: ports already in use, skipping probe
   ide6: I/O resource 0x0-0x7 not free.
   ide6: ports already in use, skipping probe
   ide7: I/O resource 0x0-0x7 not free.
   ide7: ports already in use, skipping probe
   ide8: I/O resource 0x0-0x7 not free.
   ide8: ports already in use, skipping probe
   ide9: I/O resource 0x0-0x7 not free.
   ide9: ports already in use, skipping probe
 
 and that's just totally bogus. It shouldn't even request that region, 
 since it's not been allocated!
 
 So that ide_device_add_all() is missing some checks. Should it check the 
 probe[] array like ideprobe_init() used to, or what?

This is ide-generic problem exhibited by recent ide_device_add_all() changes.
Fix below (it works for me) - you may merge the patch as it is or wait an hour
or so for the next IDE tree pull request.

Also sorry for the issue in the first place (it turned out that it slipped
my testing because I has been running with IDE_MAX_HWIFS=2 for some time :).


From: Bartlomiej Zolnierkiewicz [EMAIL PROTECTED]
Subject: [PATCH] ide-generic: probing bugfix

On Tuesday 05 February 2008, Linus Torvalds wrote:
 
 On Sat, 2 Feb 2008, Bartlomiej Zolnierkiewicz wrote:
  
  * next part of IDE probing code re-organization saga
    (that would be me)
 
 This seems to cause very irritating and bogus messages for me:
 
   Probing IDE interface ide0...
   Probing IDE interface ide1...
   ide2: I/O resource 0x0-0x7 not free.
   ide2: ports already in use, skipping probe
   ide3: I/O resource 0x0-0x7 not free.
   ide3: ports already in use, skipping probe
   ide4: I/O resource 0x0-0x7 not free.
   ide4: ports already in use, skipping probe
   ide5: I/O resource 0x0-0x7 not free.
   ide5: ports already in use, skipping probe
   ide6: I/O resource 0x0-0x7 not free.
   ide6: ports already in use, skipping probe
   ide7: I/O resource 0x0-0x7 not free.
   ide7: ports already in use, skipping probe
   ide8: I/O resource 0x0-0x7 not free.
   ide8: ports already in use, skipping probe
   ide9: I/O resource 0x0-0x7 not free.
   ide9: ports already in use, skipping probe
 
 and that's just totally bogus. It shouldn't even request that region, 
 since it's not been allocated!

The commit 139ddfcab50e5eabcc88341c8743a990ac1be6a2 (ide: move handling of
I/O resources out of ide_probe_port()) changed the ordering of hwif-noprobe
check vs ide_hwif_request_regions() call (so that we now reserve I/O regions
before checking for hwif-noprobe).  However ide-generic host driver depended
on hwif-noprobe to be set for skipping probing of empty ide_hwifs[] slots.

Fix it by passing only indexes of non-empty slots to ide_device_add_all()
from ide_generic_init().

Signed-off-by: Bartlomiej Zolnierkiewicz [EMAIL PROTECTED]
---
 drivers/ide/ide-generic.c |   10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

Index: b/drivers/ide/ide-generic.c
===
--- a/drivers/ide/ide-generic.c
+++ b/drivers/ide/ide-generic.c
@@ -20,8 +20,14 @@ static int __init ide_generic_init(void)
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
ide_get_lock(NULL, NULL); /* for atari only */
 
-   for (i = 0; i  MAX_HWIFS; i++)
-   idx[i] = ide_hwifs[i].present ? 0xff : i;
+   for (i = 0; i  MAX_HWIFS; i++) {
+   ide_hwif_t *hwif = ide_hwifs[i];
+
+   if (hwif-io_ports[IDE_DATA_OFFSET]  !hwif-present)
+   idx[i] = i;
+   else
+   idx[i] = 0xff;
+   }
 
ide_device_add_all(idx, NULL);
 
-
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-pci-generic: kill the unused ifdef/endif/MODULE code

2008-02-05 Thread Bartlomiej Zolnierkiewicz
On Saturday 02 February 2008, Denis Cheng wrote:
 with module_param macro, the __setup code can be killed now:
   const __setup(all-generic-ide, ide_generic_all_on);
 
 and the module name generic.ko is not descriptive to its functionality,
 can be changed in Makefile, the ide-pci-generic.ko is better.
 
 the ide-pci-generic.all-generic-ide parameter also documented
 in Documentation/kernel-parameters.txt
 
 Signed-off-by: Denis Cheng [EMAIL PROTECTED]

applied, thanks

PS the other patch will take same more time to review
-
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] Palmchip BK3710 IDE driver

2008-02-05 Thread Bartlomiej Zolnierkiewicz
On Tuesday 05 February 2008, Anton Salnikov wrote:
 I've tested the driver on 2.6.24.
 
 I've made the changes you asked for. But when I tested them on 
 arm/mach-davinci 

Thanks!

 architecture on the current Linus' git there was link error undefined 
 reference 
 to symbol ide_hwif_setup_dma().
 However on x86_64 architecture it compiles well without any warnings with 
 respect to link error of undefined clk_get() clk_enable() clk_get_rate(), 
 which 
 are not present in this architecture.

ide_hwif_setup_dma() comes from setup-pci.c which depends on BLK_DEV_IDEPCI.
palm_bk3710 host driver selects BLK_DEV_IDEDMA_PCI which should also select
BLK_DEV_IDEPCI but PCI doesn't even seem to be supported by this ARM platform.

I (hopefully) workarounded the issue by adding an additional #ifdef to
linux/ide.h but it is a unmaintanable and ugly hack:

Index: b/include/linux/ide.h
===
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1014,7 +1014,8 @@ extern int __ide_pci_register_driver(str
 void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, 
u8 *);
 void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
 
-#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
+/* FIXME: palm_bk3710 uses BLK_DEV_IDEDMA_PCI without BLK_DEV_IDEPCI! */
+#if defined(CONFIG_BLK_DEV_IDEPCI)  defined(CONFIG_BLK_DEV_IDEDMA_PCI)
 void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *);
 #else
 static inline void ide_hwif_setup_dma(ide_hwif_t *hwif,


Anton/Sergei: please look into fixing it properly - we probably just need to
to have a new config option (CONFIG_IDE_SFF_DMA sounds neat) to be selected by
both BLK_DEV_{IDEDMA_PCI,PALMCHIP_BK3710} and to replace BLK_DEV_IDEDMA_PCI
#ifdefs in ide-dma.c.

  I've just noticed that there is no cable detection for UDMA modes  UDMA2?
 For the present controller in documentation: Cable Select (CSEL) - 
 unsupported 
 IDE controller signal. This signal is not necessary because an 80-conductor 
 cable must be used with the DM644x.
 
 Signed-off-by: Anton Salnikov [EMAIL PROTECTED]

Minor issue: the original patch description got lost somehow so I just used
the one from the previous version.

 ---
 
  drivers/ide/Kconfig   |9 
  drivers/ide/arm/Makefile  |1 
  drivers/ide/arm/palm_bk3710.c |  420 
 ++
  drivers/ide/ide-proc.c|1 
  include/linux/ide.h   |2 
  5 files changed, 432 insertions(+), 1 deletion(-)
 
 Index: 2.6.25.ide/drivers/ide/Kconfig
 ===
 --- 2.6.25.ide.orig/drivers/ide/Kconfig
 +++ 2.6.25.ide/drivers/ide/Kconfig
 @@ -1009,6 +1009,15 @@ config BLK_DEV_Q40IDE
 normally be on; disable it only if you are running a custom hard
 drive subsystem through an expansion card.
  
 +config BLK_DEV_PALMCHIP_BK3710
 + tristate Palmchip bk3710 IDE controller support
 + depends on ARCH_DAVINCI
 + select BLK_DEV_IDEDMA_PCI
 + help
 +   Say Y here if you want to support the onchip IDE controller on the
 +   TI DaVinci SoC
 +
 +
  config BLK_DEV_MPC8xx_IDE
   tristate MPC8xx IDE support
   depends on 8xx  (LWMON || IVMS8 || IVML24 || TQM8xxL)  IDE=y  
 BLK_DEV_IDE=y  !PPC_MERGE
 Index: 2.6.25.ide/drivers/ide/arm/Makefile
 ===
 --- 2.6.25.ide.orig/drivers/ide/arm/Makefile
 +++ 2.6.25.ide/drivers/ide/arm/Makefile
 @@ -2,6 +2,7 @@
  obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
  obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
  obj-$(CONFIG_BLK_DEV_IDE_BAST)   += bast-ide.o
 +obj-$(CONFIG_BLK_DEV_PALMCHIP_BK3710)+= palm_bk3710.o
  
  ifeq ($(CONFIG_IDE_ARM), m)
   obj-m += ide_arm.o
 Index: 2.6.25.ide/drivers/ide/arm/palm_bk3710.c
 ===
 --- /dev/null
 +++ 2.6.25.ide/drivers/ide/arm/palm_bk3710.c

[...]

 +/*static inline u8 hwif_read8(u32 base, u32 reg)
 +{
 + return readb(base + reg);
 +}
 +
 +static inline u16 hwif_read16(u32 base, u32 reg)
 +{
 + return readw(base + reg);
 +}
 +
 +static inline void hwif_write16(u32 base, u16 val, u32 reg)
 +{
 + writew(val, base + reg);
 +}
 +
 +static inline u32 hwif_read32(u32 base, u32 reg)
 +{
 + return readl(base + reg);
 +}
 +
 +static inline void hwif_write32(u32 base, u32 val, u32 reg)
 +{
 + writel(val, base + reg);
 +}*/

I removed this chunk while merging the patch (no need for a dead code)

also added Reviewed-by: tags crediting Alan  Sergei
-
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: Problem burning DVDs with Marvell 88SE6121 on pata_marvell

2008-02-05 Thread Mike Hokenson


On Tuesday, February 05, 2008 at 03:21PM, Andrew Morton wrote:


(added linux-ide)


thanks


On Sat, 2 Feb 2008 16:30:04 -0600
Mike Hokenson [EMAIL PROTECTED] wrote:


I recently put together a new system with a MSI P35 PLATINUM and although
reading from data CDs, DVDs, and watching DVD movies is working fine, DVD
burning isn't. MSI's manual says 1 IDE port by Marvell 88SE6111, but
lspci says it's a 88SE6121. I have two DVD burners, a SONY DRU-510A and
a DRU-820A. They were both working fine with TDK DVD+R media on my ASUS
K8V SE DELUXE (VIA IDE controller) prior to the upgrade.

Here's what I see with dvd+rw-tools version 7.0-9:

sh# dvd+rw-mediainfo /dev/dvd  /dev/null  # this is blank media
:-[ GET CURRENT PERFORMACE failed with SK=5h/ASC=24h/ACQ=00h]: Input/output 
error
:-[ READ TOC failed with SK=5h/ASC=24h/ACQ=00h]: Input/output error

sh# growisofs -dvd-compat -speed=2.4 -Z /dev/dvd -rJ -joliet-long -quiet burn
Executing 'genisoimage -rJ -joliet-long -quiet burn | builtin_dd of=/dev/dvd 
obs=32k seek=0'
/dev/dvd: Current Write Speed is 2.5x1352KBps.
:-[ [EMAIL PROTECTED] failed with SK=3h/ASC=0Ch/ACQ=00h]: Input/output error
:-( write failed: Input/output error
/dev/dvd: flushing cache
/dev/dvd: closing track
:-[ CLOSE TRACK failed with SK=5h/ASC=30h/ACQ=05h]: Wrong medium type
/dev/dvd: closing disc
:-[ CLOSE DISC failed with SK=5h/ASC=30h/ACQ=05h]: Wrong medium type

sh# dvd+rw-mediainfo /dev/dvd  /dev/null
:-[ READ TRACK INFORMATION failed with SK=3h/ASC=11h/ACQ=05h]: Input/output 
error


(this is 2.6.24)

If nothing happens with this report in the next few days, please create an
entry at bugzilla.kernel.org so we can keep an eye on it, thanks.

Trying older kernels might be interesting, find out if it's a regression or
if it was always this way.


2.6.13.14 shows the same problems and 2.6.22 doesn't see the controller.

It looks like most of the changes happened betwen it's introduction in
2.6.20 (v0.1.1) and 2.6.22 (v0.1.4), with some minor updates for internal
changes after that...

Mike
-
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] enclosure: add support for enclosure services

2008-02-05 Thread James Bottomley
On Tue, 2008-02-05 at 16:12 -0800, Andrew Morton wrote:
 On Sun, 03 Feb 2008 18:16:51 -0600
 James Bottomley [EMAIL PROTECTED] wrote:
 
  
  From: James Bottomley [EMAIL PROTECTED]
  Date: Sun, 3 Feb 2008 15:40:56 -0600
  Subject: [SCSI] enclosure: add support for enclosure services
  
  The enclosure misc device is really just a library providing sysfs
  support for physical enclosure devices and their components.
  
 
 Thanks for sending it out for review.
 
  +struct enclosure_device *enclosure_find(struct device *dev)
  +{
  +   struct enclosure_device *edev = NULL;
  +
  +   mutex_lock(container_list_lock);
  +   list_for_each_entry(edev, container_list, node) {
  +   if (edev-cdev.dev == dev) {
  +   mutex_unlock(container_list_lock);
  +   return edev;
  +   }
  +   }
  +   mutex_unlock(container_list_lock);
  +
  +   return NULL;
  +}
  +EXPORT_SYMBOL_GPL(enclosure_find);
 
 This looks a little odd.  We don't take a ref on the object after looking
 it up, so what prevents some other thread of control from freeing or
 otherwise altering the returned object while the caller is playing with it?

The use case is for enclosure destruction, so the free should never
happen, but I take the point; I've added a class_device_get().

  +/**
  + * enclosure_for_each_device - calls a function for each enclosure
  + * @fn:the function to call
  + * @data:  the data to pass to each call
  + *
  + * Loops over all the enclosures calling the function.
  + *
  + * Note, this function uses a mutex which will be held across calls to
  + * @fn, so it must have user context, and @fn should not sleep or
 
 Probably non atomic context would be more accurate.
 
 fn() actually _can_ sleep.

should to me means you don't have to do this but ought to. I'll add a
may (but should not).

  +   if (!cb) {
  +   kfree(edev);
  +   return ERR_PTR(-EINVAL);
  +   }
 
 It would be less fuss if this were to test cb before doing the kzalloc().
 
 Can cb==NULL actually and legitimately happen?

Not really ... I'll make it a BUG_ON.

  +void enclosure_unregister(struct enclosure_device *edev)
  +{
  +   int i;
  +
  +   if (!edev)
  +   return;
 
 Is this legal?

No ... it'll oops on the null deref later ... I'll remove this.

  +   mutex_lock(container_list_lock);
  +   list_del(edev-node);
  +   mutex_unlock(container_list_lock);
 
 See, right now, someone who found this enclosure_device via
 enclosure_find() could still be playing with it?

Yes, fixed.

  +   if (!edev || number = edev-components)
  +   return ERR_PTR(-EINVAL);
 
 Is !edev possible and legitimate?

It shouldn't be, no ... I can remove it.

  +   snprintf(cdev-class_id, BUS_ID_SIZE, %d, number);
 
 %u :)

Nitpicker!

  +   return snprintf(buf, 40, %d\n, edev-components);
  +}
 
 40?

I just followed precedence ;-P

There doesn't seem to be a define for this maximum length, so 40 is the
most commonly picked constant.

  +static char *enclosure_type [] = {
  +   [ENCLOSURE_COMPONENT_DEVICE] = device,
  +   [ENCLOSURE_COMPONENT_ARRAY_DEVICE] = array device,
  +};
 
 One could play with const here, if sufficiently keen.

One will try to summon up the enthusiasm.

  +static ssize_t set_component_fault(struct class_device *cdev, const char 
  *buf,
  +  size_t count)
  +{
  +   struct enclosure_device *edev = to_enclosure_device(cdev-parent);
  +   struct enclosure_component *ecomp = to_enclosure_component(cdev);
  +   int val = simple_strtoul(buf, NULL, 0);
 
 hrm, we do this conversion about 1e99 times in the kernel and we have to go
 and pass three args where only one was needed. katoi()?

Yes ... I'll add it to the todo list.

  +   for (i = 0; enclosure_status[i]; i++) {
  +   if (strncmp(buf, enclosure_status[i],
  +   strlen(enclosure_status[i])) == 0 
  +   buf[strlen(enclosure_status[i])] == '\n')
  +   break;
  +   }
 
 So if an application does
 
   write(fd, foo, 3)
 
 it won't work?  Thye have to do
 
   write(fd, foo\n, 4)
 
 ?

No ... it's designed for echo; however, I'll add a check for '\0' which
will catch the write case.

  +#define to_enclosure_device(x) container_of((x), struct enclosure_device, 
  cdev)
  +#define to_enclosure_component(x) container_of((x), struct 
  enclosure_component, cdev)
 
 These could be C functions...

OK ... I was just following precedence again, but I can make them
inlines.

 Nice looking driver.

Thanks,

James

---

Here's the incremental diff.

diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
index 42e6e43..6fcb0e9 100644
--- a/drivers/misc/enclosure.c
+++ b/drivers/misc/enclosure.c
@@ -39,7 +39,8 @@ static struct class enclosure_component_class;
  *
  * Looks through the list of registered enclosures to see
  * if it can find a match for a device.  Returns NULL if no
- * enclosure is found.
+ * enclosure is found. 

Re: ide-tape redux (was: Re:)

2008-02-05 Thread Borislav Petkov
On Tue, Feb 05, 2008 at 02:20:22AM +0100, Bartlomiej Zolnierkiewicz wrote:

[...]

 w.r.t. #11 ide-tape uses char devices and supports DSC so it is not as obvious
 as in ide-floppy case that all atomic bitops can be just removed (extra audit
 and some time -mm are required) so please resync/resubmit

Ok, here's what i think we should do here: There are two flags that handle DSC:
PC_FL_WAIT_FOR_DSC and IDETAPE_FL_IGNORE_DSC. The first one is per pc and is 
set in
all the packet command init functions ..create_bla_cmd() after their callers 
have
created a pc on the stack and reached its ptr down for initialization. This case
is carefree since the bit will be tested first in the interrupt handler and this
happens only after the pc is queued (ide_do_drive_cmd()) into the request 
buffer.

The other flag, IDETAPE_FL_IGNORE_DSC, is polled for in the request handler and
can be set when a pc is being retried and we should leave only those atomic
tests intact, imho, but i'm definitely gonna need a second opinion here.

---

commit 1ed8ae92249d5dff7af4ee88710ea08ff3f3356f
Author: Borislav Petkov [EMAIL PROTECTED]
Date:   Tue Feb 5 08:05:35 2008 +0100

ide-tape: remove atomic test/set macros

Also, since the driver supports DSC, leave the atomic tests
for the IDETAPE_FL_IGNORE_DSC bit untouched because this is polled
for in the request handler and can be set in the interrupt
handler through idetape_retry_pc() after enabling interrupts.

Finally, remove flag IDETAPE_READ_ERROR since it is unused.

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]

diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index e59e49e..9455ce4 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -206,24 +206,24 @@ typedef struct idetape_packet_command_s {
/* Temporary buffer */
u8 pc_buffer[IDETAPE_PC_BUFFER_SIZE];
/* Status/Action bit flags: long for set_bit */
-   unsigned long flags;
+   unsigned int flags;
 } idetape_pc_t;
 
-/*
- * Packet command flag bits.
- */
-/* Set when an error is considered normal - We won't retry */
-#definePC_ABORT0
-/* 1 When polling for DSC on a media access command */
-#define PC_WAIT_FOR_DSC1
-/* 1 when we prefer to use DMA if possible */
-#define PC_DMA_RECOMMENDED 2
-/* 1 while DMA in progress */
-#definePC_DMA_IN_PROGRESS  3
-/* 1 when encountered problem during DMA */
-#definePC_DMA_ERROR4
-/* Data direction */
-#definePC_WRITING  5
+/* Packet command flag bits. */
+enum {
+   /* Set when an error is considered normal - We won't retry */
+   PC_FL_ABORT = (1  0),
+   /* 1 When polling for DSC on a media access command */
+   PC_FL_WAIT_FOR_DSC  = (1  1),
+   /* 1 when we prefer to use DMA if possible */
+   PC_FL_DMA_RECOMMENDED   = (1  2),
+   /* 1 while DMA in progress */
+   PC_FL_DMA_IN_PROGRESS   = (1  3),
+   /* 1 when encountered problem during DMA */
+   PC_FL_DMA_ERROR = (1  4),
+   /* Data direction */
+   PC_FL_WRITING   = (1  5),
+};
 
 /* A pipeline stage. */
 typedef struct idetape_stage_s {
@@ -357,8 +357,7 @@ typedef struct ide_tape_obj {
/* Wasted space in each stage */
int excess_bh_size;
 
-   /* Status/Action flags: long for set_bit */
-   unsigned long flags;
+   unsigned int flags;
/* protects the ide-tape queue */
spinlock_t lock;
 
@@ -451,20 +450,26 @@ static void ide_tape_put(struct ide_tape_obj *tape)
 #define DOOR_LOCKED1
 #define DOOR_EXPLICITLY_LOCKED 2
 
-/*
- * Tape flag bits values.
- */
-#define IDETAPE_IGNORE_DSC 0
-#define IDETAPE_ADDRESS_VALID  1   /* 0 When the tape position is 
unknown */
-#define IDETAPE_BUSY   2   /* Device already opened */
-#define IDETAPE_PIPELINE_ERROR 3   /* Error detected in a pipeline 
stage */
-#define IDETAPE_DETECT_BS  4   /* Attempt to auto-detect the 
current user block size */
-#define IDETAPE_FILEMARK   5   /* Currently on a filemark */
-#define IDETAPE_DRQ_INTERRUPT  6   /* DRQ interrupt device */
-#define IDETAPE_READ_ERROR 7
-#define IDETAPE_PIPELINE_ACTIVE8   /* pipeline active */
-/* 0 = no tape is loaded, so we don't rewind after ejecting */
-#define IDETAPE_MEDIUM_PRESENT 9
+/* Tape flag bits values. */
+enum {
+   IDETAPE_FL_IGNORE_DSC   = (1  0),
+   /* 0 When the tape position is unknown */
+   IDETAPE_FL_ADDRESS_VALID= (1  1),
+   /* Device already opened */
+   IDETAPE_FL_BUSY = (1  2),
+   /* Error detected in a pipeline stage */
+   IDETAPE_FL_PIPELINE_ERR = (1  3),
+   /* Attempt to auto-detect the current user block size */

Re: ide-tape redux (was: Re:)

2008-02-05 Thread Borislav Petkov
... and while we're at it ...

commit c824f79fe4040f7541d7e35c546bb57a22d2fe11
Author: Borislav Petkov [EMAIL PROTECTED]
Date:   Wed Feb 6 06:23:10 2008 +0100

ide-tape: move all struct and other defs to the top

Signed-off-by: Borislav Petkov [EMAIL PROTECTED]

diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 9455ce4..398aea8 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -225,6 +225,69 @@ enum {
PC_FL_WRITING   = (1  5),
 };
 
+/* Tape door status */
+#define DOOR_UNLOCKED  0
+#define DOOR_LOCKED1
+#define DOOR_EXPLICITLY_LOCKED 2
+
+/* Tape flag bits values. */
+enum {
+   IDETAPE_FL_IGNORE_DSC   = (1  0),
+   /* 0 When the tape position is unknown */
+   IDETAPE_FL_ADDRESS_VALID= (1  1),
+   /* Device already opened */
+   IDETAPE_FL_BUSY = (1  2),
+   /* Error detected in a pipeline stage */
+   IDETAPE_FL_PIPELINE_ERR = (1  3),
+   /* Attempt to auto-detect the current user block size */
+   IDETAPE_FL_DETECT_BS= (1  4),
+   /* Currently on a filemark */
+   IDETAPE_FL_FILEMARK = (1  5),
+   /* DRQ interrupt device */
+   IDETAPE_FL_DRQ_INTERRUPT= (1  6),
+   /* pipeline active */
+   IDETAPE_FL_PIPELINE_ACTIVE  = (1  7),
+   /* 0 = no tape is loaded, so we don't rewind after ejecting */
+   IDETAPE_FL_MEDIUM_PRESENT   = (1  8),
+};
+
+/* A define for the READ BUFFER command */
+#define IDETAPE_RETRIEVE_FAULTY_BLOCK  6
+
+/* Some defines for the SPACE command */
+#define IDETAPE_SPACE_OVER_FILEMARK1
+#define IDETAPE_SPACE_TO_EOD   3
+
+/* Some defines for the LOAD UNLOAD command */
+#define IDETAPE_LU_LOAD_MASK   1
+#define IDETAPE_LU_RETENSION_MASK  2
+#define IDETAPE_LU_EOT_MASK4
+
+/*
+ * Special requests for our block device strategy routine.
+ *
+ * In order to service a character device command, we add special requests to
+ * the tail of our block device request queue and wait for their completion.
+ */
+
+enum {
+   REQ_IDETAPE_PC1 = (1  0), /* packet command (first stage) */
+   REQ_IDETAPE_PC2 = (1  1), /* packet command (second stage) */
+   REQ_IDETAPE_READ= (1  2),
+   REQ_IDETAPE_WRITE   = (1  3),
+   REQ_IDETAPE_READ_BUFFER = (1  4),
+};
+
+/* Error codes returned in rq-errors to the higher part of the driver. */
+#defineIDETAPE_ERROR_GENERAL   101
+#defineIDETAPE_ERROR_FILEMARK  102
+#defineIDETAPE_ERROR_EOD   103
+
+/* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
+#define IDETAPE_BLOCK_DESCRIPTOR   0
+#defineIDETAPE_CAPABILITIES_PAGE   0x2a
+
+
 /* A pipeline stage. */
 typedef struct idetape_stage_s {
struct request rq;  /* The corresponding request */
@@ -445,68 +508,6 @@ static void ide_tape_put(struct ide_tape_obj *tape)
mutex_unlock(idetape_ref_mutex);
 }
 
-/* Tape door status */
-#define DOOR_UNLOCKED  0
-#define DOOR_LOCKED1
-#define DOOR_EXPLICITLY_LOCKED 2
-
-/* Tape flag bits values. */
-enum {
-   IDETAPE_FL_IGNORE_DSC   = (1  0),
-   /* 0 When the tape position is unknown */
-   IDETAPE_FL_ADDRESS_VALID= (1  1),
-   /* Device already opened */
-   IDETAPE_FL_BUSY = (1  2),
-   /* Error detected in a pipeline stage */
-   IDETAPE_FL_PIPELINE_ERR = (1  3),
-   /* Attempt to auto-detect the current user block size */
-   IDETAPE_FL_DETECT_BS= (1  4),
-   /* Currently on a filemark */
-   IDETAPE_FL_FILEMARK = (1  5),
-   /* DRQ interrupt device */
-   IDETAPE_FL_DRQ_INTERRUPT= (1  6),
-   /* pipeline active */
-   IDETAPE_FL_PIPELINE_ACTIVE  = (1  7),
-   /* 0 = no tape is loaded, so we don't rewind after ejecting */
-   IDETAPE_FL_MEDIUM_PRESENT   = (1  8),
-};
-
-/* A define for the READ BUFFER command */
-#define IDETAPE_RETRIEVE_FAULTY_BLOCK  6
-
-/* Some defines for the SPACE command */
-#define IDETAPE_SPACE_OVER_FILEMARK1
-#define IDETAPE_SPACE_TO_EOD   3
-
-/* Some defines for the LOAD UNLOAD command */
-#define IDETAPE_LU_LOAD_MASK   1
-#define IDETAPE_LU_RETENSION_MASK  2
-#define IDETAPE_LU_EOT_MASK4
-
-/*
- * Special requests for our block device strategy routine.
- *
- * In order to service a character device command, we add special requests to
- * the tail of our block device request queue and wait for their completion.
- */
-
-enum {
-   REQ_IDETAPE_PC1 = (1  0), /* packet command (first stage) */
-   REQ_IDETAPE_PC2 = (1  1), /* packet command (second stage) */
-   REQ_IDETAPE_READ= (1  2),
-   REQ_IDETAPE_WRITE   = (1  3),
-