Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#2175 closed bug (duplicate)

Panic in AHCI interrupt handling.

Reported by: bga Owned by: bonefish
Priority: critical Milestone: R1
Component: Drivers/Disk Version: R1/pre-alpha1
Keywords: Cc: marcusoverhagen
Blocked By: Blocking:
Has a Patch: no Platform: All

Description

I am running Haiku in a quad core machine with SATA drives in AHCI mode. Since recently (I only noticed it yesterday) I started getting KDLs in the AHCI interrupt handling. The KDL is the result of a panic() that is triggered. Here is the relevant code:

void AHCIPort::Interrupt() {

uint32 is = fRegs->is; uint32 ci = fRegs->ci; fRegs->is = is; clear interrupts

RWTRACE("AHCIPort::Interrupt port %d, fCommandsActive 0x%08lx, is 0x%08lx, ci 0x%08lx\n", fIndex, fCommandsActive, is, ci);

if (is & PORT_INT_ERROR)

TRACE("AHCIPort::Interrupt port %d, fCommandsActive 0x%08lx, is 0x%08lx, ci 0x%08lx\n", fIndex, fCommandsActive, is, ci);

if (is & PORT_INT_FATAL)

panic("ahci fatal error, is 0x%08lx", is);

int release = 0;

acquire_spinlock(&fSpinlock); if ((fCommandsActive & 1) && !(ci & 1)) {

release = 1; fCommandsActive &= ~1;

} release_spinlock(&fSpinlock);

if (release)

release_sem_etc(fResponseSem, 1, B_RELEASE_IF_WAITING_ONLY | B_DO_NOT_RESCHEDULE);

}

I wonder if recent changes to locking primitives or something else broke it. As I mentioned, this is new and I did not noticed getting it even once before yesterday (wehn I got it 2 times just after unzipping the source tree inside Haiku and literally when doing nothing (the crash was inside one of the idle threads).

I don't have the KDL here with me, but I will capture it the next time I see it and attach to the bug.

Change History (6)

comment:1 Changed 11 years ago by bga

Just to make it clear, the panic is:

if (is & PORT_INT_FATAL)

panic("ahci fatal error, is 0x%08lx", is);

comment:2 Changed 11 years ago by marcusoverhagen

Cc: marcusoverhagen added

comment:3 Changed 11 years ago by marcusoverhagen

Please attach the value of interrupt status (is) register.

It this the same bit as in bug #2021 ?

comment:4 Changed 11 years ago by bga

Resolution: duplicate
Status: newclosed

Yes, this is exactly the dame bit. I will mark this bug as a duplicate. Funny enough, I just started getting it recently so maybe some change maybe this trigger more easily?

Marked as a duplicate of #2021.

comment:5 Changed 11 years ago by euan

what chipset is it your running? I came across some reports of an ATI chipset setting error status bits erroneously. Perhaps SB600 or the previous gen. IIRC the issue was around the chipset reporting 64-bit addressing capable, whilst really only working with 4GB address range. Was seen in Linux I believe during large file copies.

comment:6 Changed 11 years ago by bga

I don' t think this is the problem. The controller is a JMicron JMB36X. The motherboiard itself uses a Intel ICH9/X38 chipset.

Note: See TracTickets for help on using tickets.