[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: DMA disabled after lost interrupt (on ibook)



On Wed, 2005-08-03 at 23:00 +0200, Vivenzio Pagliari wrote:
> >> Yes, exactly same machine and same symptoms.
> >> i see these messages since a loooong time.
> >> 
> >> it happens when i copy big files or when i do huge & fast files transfert
> >> via ftp/scp.
> > 
> > Both of you are using Apple shipped hard disk or you replaced it ? We
> > might have to limit the timings to UDMA/4 on these machines it seems...
> > 
> > Ben
> 
> Hi,
> 
> I had that "lost interrupt" another time today:
> 
> Aug  3 21:51:56 garfield kernel: ide-pmac lost interrupt, \
>     dma status: 8400
> Aug  3 21:51:56 garfield kernel: hda: lost interrupt
> Aug  3 21:51:56 garfield kernel: hda: dma_intr: status=0xd0 { Busy }
> Aug  3 21:51:56 garfield kernel:
> Aug  3 21:51:56 garfield kernel: ide: failed opcode was: unknown
> Aug  3 21:51:56 garfield kernel: hda: DMA disabled
> Aug  3 21:51:56 garfield kernel: ide0: reset: success
> 
> Just in case that it may be of interest: I had configured my kernel
> (2.6.12.1) with CONFIG_PREEMPT=y.
> Several people on the list say that using PREEMPT is a bad idea on
> on ppc, so I've recompiled the kernel (now using 2.6.12.3) without it.
> But I guess this will not make any difference here, since I remember to
> have seen this problem already when I used a kernel from the Debian
> binary package (where PREEMPT is disabled).

Can you try tweaking the driver in drivers/ide/ppc/pmac.c, and put this
code in #if 0 :

	/* Get cable type from device-tree */
	if (pmif->kind == controller_kl_ata4 || pmif->kind == controller_un_ata6
	    || pmif->kind == controller_k2_ata6
	    || pmif->kind == controller_sh_ata6) {
		char* cable = get_property(np, "cable-type", NULL);
		if (cable && !strncmp(cable, "80-", 3))
			pmif->cable_80 = 1;
	}
	/* G5's seem to have incorrect cable type in device-tree. Let's assume
	 * they have a 80 conductor cable, this seem to be always the case unless
	 * the user mucked around
	 */
	if (device_is_compatible(np, "K2-UATA") ||
	    device_is_compatible(np, "shasta-ata"))
		pmif->cable_80 = 1;

(That is make sure cable_80 is never set to 1)

That will have the effect of slowing down your interface to U/DMA2. Let me know if
that helps.

Ben.




Reply to: