NetBSD Problem Report #51756
From martin@aprisoft.de Sat Dec 31 11:24:59 2016
Return-Path: <martin@aprisoft.de>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
by mollari.NetBSD.org (Postfix) with ESMTPS id 807D97A266
for <gnats-bugs@gnats.NetBSD.org>; Sat, 31 Dec 2016 11:24:59 +0000 (UTC)
Message-Id: <20161231112448.BA2095CC761@emmas.aprisoft.de>
Date: Sat, 31 Dec 2016 12:24:48 +0100 (CET)
From: martin@NetBSD.org
Reply-To: martin@NetBSD.org
To: gnats-bugs@NetBSD.org
Subject: wd_trim() fails
X-Send-Pr-Version: 3.95
>Number: 51756
>Category: kern
>Synopsis: wd_trim() fails
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: kern-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Dec 31 11:25:00 +0000 2016
>Closed-Date: Tue Jan 03 11:11:26 +0000 2017
>Last-Modified: Tue Jan 03 11:11:26 +0000 2017
>Originator: Martin Husemann
>Release: NetBSD 7.99.53
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD whoever-brings-the-night.aprisoft.de 7.99.53 NetBSD 7.99.53 (WHOEVER) #69: Wed Dec 28 20:52:33 CET 2016 martin@martins.aprisoft.de:/ssd/src/sys/arch/sparc64/compile/WHOEVER sparc64
Architecture: sparc64
Machine: sparc64
>Description:
Mounting a SSD device connected to a siisata(4) controller on sparc64 with
option "discard" causes failures from wd_trim:
wd0: wd_trim: status=0xaa<ERROR>
siisata0: fatal error 5 on channel 3 (ctx 0x400c361b), resetting
I have tested different SSD drives and they all behave the same.
All wd_trim() calls fail.
>How-To-Repeat:
s/a
>Fix:
n/a
>Release-Note:
>Audit-Trail:
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/51756: wd_trim failure with siisata
Date: Sun, 1 Jan 2017 15:36:24 +0100
Here is a siisata_debug log showing the failure.
Martin
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 4096 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 4096 now 0
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 32768 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 32768 now 0
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 32768 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 32768 now 0
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 32768 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 32768 now 0
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 32768 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 32768 now 0
siisata0: siisata_ata_bio.
siisata0: siisata_bio_start port 3, slot 27
siisata_dma_setup: 1 segs, 32768 count
siisata0: siisata_bio_start: done
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x10001 pss 0x0
siisata0: siisata_bio_complete bcount: 32768 now 0
siisata0: siisata_exec_command begins
siisata0: siisata_cmd_start port 3 drive 0 command 0x6, slot 27
siisata_dma_setup: 1 segs, 512 count
siisata0: siisata_cmd_start: done
siisata0: siisata_exec_command: sleeping
siisata0: siisata_intr: GR_GIS: 0x00000008
siisata0: siisata_intr_port port 3, pis 0x20002 ec 5
siisata0: fatal error 5 on channel 3 (ctx 0x500c361b), resetting
siisata0: siisata_cmd_complete
siisata0: siisata_cmd_done flags 0x8a error 0x80
siisata0: siisata_exec_command ends
wd0: wd_trim: status=0xaa<ERROR>
From: "Jonathan A. Kollasch" <jakllsch@kollasch.net>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/51756: wd_trim() fails
Date: Sun, 1 Jan 2017 19:53:21 -0600
ATA's DATA SET MANAGEMENT command didn't exist when the siisata(4) chips
were implemented. Could you try the following patch?
Index: src/sys/dev/ic/siisata.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/siisata.c,v
retrieving revision 1.29
diff -d -u -a -p -r1.29 siisata.c
--- src/sys/dev/ic/siisata.c 19 Sep 2016 19:07:53 -0000 1.29
+++ src/sys/dev/ic/siisata.c 2 Jan 2017 01:43:26 -0000
@@ -861,6 +861,11 @@ siisata_cmd_start(struct ata_channel *ch
siisata_disable_port_interrupt(chp);
}
+ if (ata_c->r_command == ATA_DATA_SET_MANAGEMENT) {
+ prb->prb_control |= htole16(PRB_CF_PROTOCOL_OVERRIDE);
+ prb->prb_protocol_override |= htole16(PRB_PO_WRITE);
+ }
+
/* go for it */
siisata_activate_prb(schp, slot);
Thanks.
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/51756: wd_trim() fails
Date: Mon, 2 Jan 2017 20:06:17 +0100
On Mon, Jan 02, 2017 at 01:55:01AM +0000, Jonathan A. Kollasch wrote:
> ATA's DATA SET MANAGEMENT command didn't exist when the siisata(4) chips
> were implemented. Could you try the following patch?
This works fine!
Martin
From: "Jonathan A. Kollasch" <jakllsch@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/51756 CVS commit: src/sys/dev/ic
Date: Tue, 3 Jan 2017 01:30:16 +0000
Module Name: src
Committed By: jakllsch
Date: Tue Jan 3 01:30:16 UTC 2017
Modified Files:
src/sys/dev/ic: siisata.c
Log Message:
The SiI3124 was implemented at a time when the ATA/ACS2
DATA SET MANAGEMENT/TRIM command did not exist. As such, the (presumably
immutable) lookup table in the chip does not know that this command
indicates a data write to follow. Use the PRB Protocol Override
functionality to tell the chip the protocol we need for this command.
For PR kern/51756.
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/siisata.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->closed
State-Changed-By: martin@NetBSD.org
State-Changed-When: Tue, 03 Jan 2017 11:11:26 +0000
State-Changed-Why:
Fixed, thanks!
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.