Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Jun 2009 17:31:06 +0300
From:      Alexander Motin <mav@FreeBSD.org>
To:        Kamigishi Rei <spambox@haruhiism.net>
Cc:        freebsd-current@freebsd.org
Subject:   Re: RFC: ATA to CAM integration patch
Message-ID:  <4A48D02A.4050605@FreeBSD.org>
In-Reply-To: <4A48CD19.8080606@FreeBSD.org>
References:  <1246206181.00132972.1246192801@10.7.7.3>	<1246206186.00132982.1246194002@10.7.7.3>	<1246209783.00133001.1246197001@10.7.7.3>	<1246260183.00133237.1246247402@10.7.7.3>	<4A48798A.5070604@FreeBSD.org> <4A487BF7.8060103@haruhiism.net> <4A48922D.5090507@FreeBSD.org> <4A48C0BC.3030104@haruhiism.net> <4A48CD19.8080606@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Motin wrote:
> Kamigishi Rei wrote:
>> Alexander Motin wrote:
>>> Sorry, my fault, it is the different bug, due to disabled invariants 
>>> I have missed two locking issues. Here is regenerated patch, 
>>> including this fix and all previous fixes and improvements:
>>> http://people.freebsd.org/~mav/cam-ata.20090629.patch
>>
>> OK, a question about the module: sometimes I'm getting loads (20+) of 
>> messages like
>>
>> ahcich1: ALL SLOTS BUSY!
>>
>> Is it purely informational or does it indicate a problem? (I'm using 
>> Intel Q35+ICH9 in AHCI mode.)
> 
> It is bad. It must never happen. It means that driver got more commands 
> then it has empty slots available. Results can be unpredictable.
> 
> How have you manage it? Were there any other messages around?

I think I have found possible bug triggering condition.
Apply this patch please:

--- ahci.c.prev 2009-06-29 12:48:45.000000000 +0300
+++ ahci.c      2009-06-29 17:25:29.000000000 +0300
@@ -986,7 +986,7 @@ ahci_begin_transaction(device_t dev, uni
                 if (ch->slot[tag].state == AHCI_SLOT_EMPTY)
                         break;
         } while (tag != ch->lastslot);
-       if (tag == ch->lastslot)
+       if (ch->slot[tag].state != AHCI_SLOT_EMPTY)
                 device_printf(ch->dev, "ALL SLOTS BUSY!\n");
         ch->lastslot = tag;
         /* Occupy chosen slot. */

-- 
Alexander Motin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A48D02A.4050605>