Print this page
MFV: illumos-gate@fd6d41c5025e9fb45a115fc82d86e9983d1e9fd6
9815 Want basic AHCI enclosure services
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Rob Johnston <rob.johnston@joyent.com>
Reviewed by: Yuri Pankov <yuripv@yuripv.net>
Approved by: Dan McDonald <danmcd@joyent.com>
Author: Robert Mustacchi <rm@joyent.com>
Conflicts:
        usr/src/cmd/Makefile
NEX-5834 panic in sata module while running trim
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-4418 SATA inquiry property generation doesn't work as advertised
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
1787 SATL fails to handle returned SMART sense data
Reviewed by: Richard Elling <richard.elling@richardelling.com>
Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Robert Mustacchi <rm@joyent.com>
re #12164 Marvell 88SE9128: Appliance hard hangs on boot probing duplicated ahci device

*** 19,32 **** * CDDL HEADER END */ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. ! */ ! /* ! * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright 2016 Argo Technologies SA */ /* * SATA Framework * Generic SATA Host Adapter Implementation --- 19,31 ---- * CDDL HEADER END */ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2016 Nexenta Systems, Inc. * Copyright 2016 Argo Technologies SA + * Copyright (c) 2018, Joyent, Inc. */ /* * SATA Framework * Generic SATA Host Adapter Implementation
*** 1347,1357 **** */ return (ndi_devctl_ioctl(dip, cmd, arg, mode, 0)); } /* read devctl ioctl data */ ! if (cmd != DEVCTL_AP_CONTROL) { if (ndi_dc_allochdl((void *)arg, &dcp) != NDI_SUCCESS) return (EFAULT); if ((comp_port = sata_get_port_num(sata_hba_inst, dcp)) == -1) { --- 1346,1357 ---- */ return (ndi_devctl_ioctl(dip, cmd, arg, mode, 0)); } /* read devctl ioctl data */ ! if (cmd != DEVCTL_AP_CONTROL && cmd >= DEVCTL_IOC && ! cmd <= DEVCTL_IOC_MAX) { if (ndi_dc_allochdl((void *)arg, &dcp) != NDI_SUCCESS) return (EFAULT); if ((comp_port = sata_get_port_num(sata_hba_inst, dcp)) == -1) {
*** 1675,1687 **** } /* End of main IOCTL switch */ if (dcp) { ndi_dc_freehdl(dcp); } ! mutex_enter(&SATA_CPORT_INFO(sata_hba_inst, cport)->cport_mutex); cportinfo->cport_event_flags &= ~SATA_APCTL_LOCK_PORT_BUSY; mutex_exit(&SATA_CPORT_INFO(sata_hba_inst, cport)->cport_mutex); return (rv); } --- 1675,1691 ---- } /* End of main IOCTL switch */ if (dcp) { ndi_dc_freehdl(dcp); } ! ! if (cmd >= DEVCTL_IOC && cmd <= DEVCTL_IOC_MAX) { ! mutex_enter(&SATA_CPORT_INFO(sata_hba_inst, ! cport)->cport_mutex); cportinfo->cport_event_flags &= ~SATA_APCTL_LOCK_PORT_BUSY; mutex_exit(&SATA_CPORT_INFO(sata_hba_inst, cport)->cport_mutex); + } return (rv); }
*** 4843,4853 **** * The block descriptor size has to be a multiple of 16 bytes. */ bdlen = scsipkt->pkt_cdbp[7]; bdlen = (bdlen << 8) + scsipkt->pkt_cdbp[8] - paramlen; if ((bdlen < 0) || ((bdlen % 16) != 0) || ! (bdlen > (bp->b_bcount - paramlen))) { SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst, "sata_txlt_unmap: invalid block descriptor length", NULL); mutex_exit(cport_mutex); return ((sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST, SD_SCSI_ASC_INVALID_FIELD_IN_CDB))); --- 4847,4857 ---- * The block descriptor size has to be a multiple of 16 bytes. */ bdlen = scsipkt->pkt_cdbp[7]; bdlen = (bdlen << 8) + scsipkt->pkt_cdbp[8] - paramlen; if ((bdlen < 0) || ((bdlen % 16) != 0) || ! ((bp != NULL) && (bdlen > (bp->b_bcount - paramlen)))) { SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst, "sata_txlt_unmap: invalid block descriptor length", NULL); mutex_exit(cport_mutex); return ((sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST, SD_SCSI_ASC_INVALID_FIELD_IN_CDB)));