From owner-svn-src-stable@freebsd.org Thu Mar 26 00:42:40 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id ADF91269908; Thu, 26 Mar 2020 00:42:40 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48nmRM37Vnz3Dj5; Thu, 26 Mar 2020 00:42:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0030F24A47; Thu, 26 Mar 2020 00:42:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 02Q0gVKi007758; Thu, 26 Mar 2020 00:42:31 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 02Q0gVWM007757; Thu, 26 Mar 2020 00:42:31 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202003260042.02Q0gVWM007757@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Thu, 26 Mar 2020 00:42:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359314 - stable/12/sys/cam/scsi X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/12/sys/cam/scsi X-SVN-Commit-Revision: 359314 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Mar 2020 00:42:40 -0000 Author: mav Date: Thu Mar 26 00:42:31 2020 New Revision: 359314 URL: https://svnweb.freebsd.org/changeset/base/359314 Log: MFC r359146: Fix SES on device slots without phys after r349321. Broadcom 9400-8i8e HBAs report virtual SES device, where slots representing external connectors are reported having no phys. Since sasdev_phys is NULL there and proto_hdr is a union, ses_paths_iter() misinterpreted them as ATA. Add explicit protocol check to properly differentiate them. Modified: stable/12/sys/cam/scsi/scsi_enc_ses.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- stable/12/sys/cam/scsi/scsi_enc_ses.c Thu Mar 26 00:39:36 2020 (r359313) +++ stable/12/sys/cam/scsi/scsi_enc_ses.c Thu Mar 26 00:42:31 2020 (r359314) @@ -956,30 +956,38 @@ ses_paths_iter(enc_softc_t *enc, enc_element_t *elm, if (addl->hdr == NULL) return; - if (addl->proto_hdr.sas != NULL && - addl->proto_data.sasdev_phys != NULL) { - ses_path_iter_args_t args; + switch(ses_elm_addlstatus_proto(addl->hdr)) { + case SPSP_PROTO_SAS: + if (addl->proto_hdr.sas != NULL && + addl->proto_data.sasdev_phys != NULL) { + ses_path_iter_args_t args; - args.callback = callback; - args.callback_arg = callback_arg; - ses_devids_iter(enc, elm, ses_path_iter_devid_callback, &args); - } else if (addl->proto_hdr.ata != NULL) { - struct cam_path *path; - struct ccb_getdev cgd; + args.callback = callback; + args.callback_arg = callback_arg; + ses_devids_iter(enc, elm, ses_path_iter_devid_callback, + &args); + } + break; + case SPSP_PROTO_ATA: + if (addl->proto_hdr.ata != NULL) { + struct cam_path *path; + struct ccb_getdev cgd; - if (xpt_create_path(&path, /*periph*/NULL, - scsi_4btoul(addl->proto_hdr.ata->bus), - scsi_4btoul(addl->proto_hdr.ata->target), 0) - != CAM_REQ_CMP) - return; + if (xpt_create_path(&path, /*periph*/NULL, + scsi_4btoul(addl->proto_hdr.ata->bus), + scsi_4btoul(addl->proto_hdr.ata->target), 0) + != CAM_REQ_CMP) + return; - xpt_setup_ccb(&cgd.ccb_h, path, CAM_PRIORITY_NORMAL); - cgd.ccb_h.func_code = XPT_GDEV_TYPE; - xpt_action((union ccb *)&cgd); - if (cgd.ccb_h.status == CAM_REQ_CMP) - callback(enc, elm, path, callback_arg); + xpt_setup_ccb(&cgd.ccb_h, path, CAM_PRIORITY_NORMAL); + cgd.ccb_h.func_code = XPT_GDEV_TYPE; + xpt_action((union ccb *)&cgd); + if (cgd.ccb_h.status == CAM_REQ_CMP) + callback(enc, elm, path, callback_arg); - xpt_free_path(path); + xpt_free_path(path); + } + break; } }