Re: [Fwd: Re: amd64 suspend/resume broken on current]

Jung-uk Kim <[email protected]>
Newsgroups gmane.os.freebsd.current,gmane.os.freebsd.devel.firewire
Message-ID <[email protected]>
[CC added]

On Saturday 09 May 2009 09:55 am, Alexander Motin wrote:
> -------- Original Message --------
> Subject: Re: amd64 suspend/resume broken on current
> Date: Fri, 8 May 2009 21:52:45 +0200
> From: Guy Brand <[email protected]>
> Organization: Direction Informatique, Université de Strasbourg,
> France To: Alexander Motin <[email protected]>
> References: <[email protected]>
> <[email protected]> <[email protected]>
> <[email protected]> <[email protected]>
> <[email protected]>
>
> Guy Brand wrote:
>  > Alexander Motin wrote:
> > > Done. No firewire issue of course, but a kernel panic on
> > > resume. Bad karma since yesterday :-)
> >
> > Where is this panic happens now?
>
> Just after resuming:
>
>    Fatal trap 12: page fault while in kernel mode
>    ...
>    current process = 1415 (acpiconf)
>
> The backtrace says:
>
>    intr_execute_handlers() at intr_execute_handlers+0x21
>    lapic_handle_intr() at lapic_handle_intr+0x37
>    Xapic_isr1() at Xapic_isr1+0xa4
>
>    acpi_sleep_machdep() at acpi_sleep_machdep+0x3b2
>    acpi_EnterSleepState() at acpi_EnterSleepState+0x3fe
>    acpi_AckSleepState() at acpi_AckSleepState+0x163
>    devfs_ioctl() at devfs_ioctl_f+0x77
>    kern_ioctl() at kern_ioctl+0xb0
>    ioctl() at ioctl+0xfd
>    syscall() at syscal+0x246
>    Xfast_syscall() at Xfast_syscall+0xd0

So, that means the interrupt handler is executed *before* device is 
completely resumed.  In fact, the interrupts are not disabled for 
dcons(4), it seems:

#if 0 /* Let dcons(4) be accessed */
/* Stop interrupt */
        OWRITE(sc, FWOHCI_INTMASKCLR,
                        OHCI_INT_EN | OHCI_INT_ERR | OHCI_INT_PHY_SID
                        | OHCI_INT_PHY_INT
                        | OHCI_INT_DMA_ATRQ | OHCI_INT_DMA_ATRS
                        | OHCI_INT_DMA_PRRQ | OHCI_INT_DMA_PRRS
                        | OHCI_INT_DMA_ARRQ | OHCI_INT_DMA_ARRS
                        | OHCI_INT_PHY_BUS_R);

/* FLUSH FIFO and reset Transmitter/Reciever */
        OWRITE(sc,  OHCI_HCCCTL, OHCI_HCC_RESET);
#endif

I guess firewire(4) should differentiate suspend and shutdown 
properly.

Jung-uk Kim
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.