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

From: Jung-uk Kim <jkim_at_FreeBSD.org>
Date: Mon, 11 May 2009 16:02:16 -0400
On Monday 11 May 2009 03:29 pm, Jung-uk Kim wrote:
> [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 <gb_at_unistra.fr>
> > Organization: Direction Informatique, Université de Strasbourg,
> > France To: Alexander Motin <mav_at_mavhome.dp.ua>
> > References: <gtslv6$ufq$1_at_FreeBSD.cs.nctu.edu.tw>
> > <4A021118.2030106_at_mavhome.dp.ua>
> > <20090508111024.GK4922_at_unistra.fr> <4A041DC2.90106_at_mavhome.dp.ua>
> > <20090508144551.GA1599_at_unistra.fr>
> > <4A047925.6060301_at_mavhome.dp.ua>
> >
> > 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.

Can you try the attached patch?  I may be wrong cause I am not a 
firewire guru, though.

Thanks!

Jung-uk Kim

Received on Mon May 11 2009 - 18:02:36 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:47 UTC