Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Jun 2019 20:03:03 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r349205 - stable/11/sys/dev/intpm
Message-ID:  <201906192003.x5JK33L6035741@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Wed Jun 19 20:03:02 2019
New Revision: 349205
URL: https://svnweb.freebsd.org/changeset/base/349205

Log:
  MFC r345411: intpm: change translation of HBA error status to smbus(4) errors
  
  PIIX4_SMBHSTSTAT_ERR can be set for several reasons that, unfortunately,
  cannot be distinguished, but the most typical case is a missing or hung
  slave (SMB_ENOACK).
  
  PIIX4_SMBHSTSTAT_FAIL means failed or killed / aborted transaction, so
  it's previous mapping to SMB_ENOACK was not ideal.
  
  After this change an smb(4) access to a missing slave results in ENXIO
  rather than EIO.  To me, that seems to be more appropriate.

Modified:
  stable/11/sys/dev/intpm/intpm.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/intpm/intpm.c
==============================================================================
--- stable/11/sys/dev/intpm/intpm.c	Wed Jun 19 20:01:13 2019	(r349204)
+++ stable/11/sys/dev/intpm/intpm.c	Wed Jun 19 20:03:02 2019	(r349205)
@@ -521,12 +521,19 @@ intsmb_error(device_t dev, int status)
 {
 	int error = 0;
 
+	/*
+	 * PIIX4_SMBHSTSTAT_ERR can mean either of
+	 * - SMB_ENOACK ("Unclaimed cycle"),
+	 * - SMB_ETIMEOUT ("Host device time-out"),
+	 * - SMB_EINVAL ("Illegal command field").
+	 * SMB_ENOACK seems to be most typical.
+	 */
 	if (status & PIIX4_SMBHSTSTAT_ERR)
-		error |= SMB_EBUSERR;
+		error |= SMB_ENOACK;
 	if (status & PIIX4_SMBHSTSTAT_BUSC)
 		error |= SMB_ECOLLI;
 	if (status & PIIX4_SMBHSTSTAT_FAIL)
-		error |= SMB_ENOACK;
+		error |= SMB_EABORT;
 
 	if (error != 0 && bootverbose)
 		device_printf(dev, "error = %d, status = %#x\n", error, status);



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