"shutdown -p": (noperiph:aacp0:0:6:0): Device power down failed

Alexander Motin mav at FreeBSD.org
Wed Feb 3 21:40:29 UTC 2010


David Wolfskill wrote:
> On Wed, Feb 03, 2010 at 07:40:06PM +0200, Alexander Motin wrote:
>> David Wolfskill wrote:
>>> On Wed, Feb 03, 2010 at 06:40:37AM -0800, David Wolfskill wrote:
>>>> Just updated my build machine from r203376 to r203425, which seeme dto
>>>> go well, but after I issued "shutdown -p now" (as I leave the machine
>>>> off when it's not in use), I saw the following on the serial console:
>>>>
>>>> Uptime: 1m45s
>>>> (noperiph:aacp0:0:0:0): Device power down failed
>>>> (noperiph:aacp0:0:1:0): Device power down failed
>>>> ...
>> That was my change r203420. `sysctl kern.cam.power_down=0` should
>> disable new behavior. It can be a bug of aac driver. Is it repeatable
>> each time at the same place?
> 
> Well, I just tried it a second time, and the failure mode appears
> identical, yes.  I won't (quite) claim that it's "repeatable each time
> at the same place" yet, but the evidence certainly tends toward that
> direction.
> 
>>> Tried the same experiment with the laptop; didn't get the above failure,
>>> but am seeing many (as in "hundreds") of
>>>
>>> atapi_poll called!
>>> atapi_poll called!
>> This looks like atapicam misfeature. I'll look on it.
>> ...
> 
> Cool; thanks!
> 
> I'm quite willing to test patches &c.

Attached patch implements poll method for atapicam. It is probably not
good from the locking point of view. But it is better then nothing and
seems enough for now, especially because atapicam is going to die.

As there can be other controllers with poll problems, I've disabled this
feature by default for now.

-- 
Alexander Motin
-------------- next part --------------
diff -ruNp ata.prev/atapi-cam.c ata/atapi-cam.c
--- ata.prev/atapi-cam.c	2010-02-03 23:30:12.000000000 +0200
+++ ata/atapi-cam.c	2010-02-03 23:29:37.000000000 +0200
@@ -682,8 +682,12 @@ action_invalid:
 static void
 atapi_poll(struct cam_sim *sim)
 {
-    /* do nothing - we do not actually service any interrupts */
-    printf("atapi_poll called!\n");
+	struct atapi_xpt_softc *softc =
+	    (struct atapi_xpt_softc*)cam_sim_softc(sim);
+
+	mtx_unlock(&softc->state_lock);
+	ata_interrupt(softc->ata_ch);
+	mtx_lock(&softc->state_lock);
 }
 
 static void


More information about the freebsd-current mailing list