ipr: Remove auto RAID create module parameter
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): 11751901593854-patch-mail.ibm.com
PATCH 2/12 ipr: Remove auto RAID create module parameter
Remove the auto RAID 0 array creation module parameter, since support for this function has been removed from the firmware.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 5 ----- 1 files changed, 5 deletions(-)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_remove_auto_create +0 -5
@@ -92,7 +92,6 @@ static unsigned int ipr_fastfail = 0;static unsigned int ipr_transop_timeout =0 ;static unsigned int ipr_enable_cache =1 ;static unsigned int ipr_debug =0 ; -static int ipr_auto_create =1 ;static DEFINE_SPINLOCK (ipr_driver_lock);/* This table describes the differences between DMA controller chips */
@@ -159,8 +158,6 @@ module_param_named(enable_cache, ipr_enaMODULE_PARM_DESC (enable_cache,"Enable adapter's non-volatile write cache (default: 1)" );module_param_named (debug, ipr_debug, int,0 );MODULE_PARM_DESC (debug,"Enable device driver debugging logging. Set to 1 to enable. (default: 0)" ); -module_param_named (auto_create, ipr_auto_create, int,0 ); -MODULE_PARM_DESC (auto_create,"Auto-create single device RAID 0 arrays when initialized (default: 1)" );MODULE_LICENSE ("GPL" );MODULE_VERSION (IPR_DRIVER_VERSION );
@@ -7116,8 +7113,6 @@ static void __devinit ipr_init_ioa_cfg(s ioa_cfg->pdev = pdev; ioa_cfg->log_level = ipr_log_level; ioa_cfg->doorbell =IPR_DOORBELL ; -if (!ipr_auto_create) - ioa_cfg->doorbell |=IPR_RUNTIME_RESET ;sprintf (ioa_cfg->eye_catcher,IPR_EYECATCHER );sprintf (ioa_cfg->trace_start,IPR_TRACE_START_LABEL );sprintf (ioa_cfg->ipr_free_label,IPR_FREEQ_LABEL );
_
PATCH 3/12 ipr: Add new PCI-E IDs to device table
In reply to a message not in the archiveAdds support for some new PCI-E ipr adapters.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 10 ++++++++++ linux-2.6-bjking1/drivers/scsi/ipr.h | 5 +++++ 2 files changed, 15 insertions(+)
drivers/scsi/ipr.h renamed from drivers/scsi/ipr.h~ipr_pcie_slot_adapters +5 -0
@@ -55,6 +55,7 @@#define IPR_NUM_BASE_CMD_BLKS 100#define PCI_DEVICE_ID_IBM_OBSIDIAN_E 0x0339 +#define PCI_DEVICE_ID_IBM_SCAMP_E 0x034A#define IPR_SUBS_DEV_ID_2780 0x0264#define IPR_SUBS_DEV_ID_5702 0x0266
@@ -69,8 +70,12 @@#define IPR_SUBS_DEV_ID_572A 0x02C1#define IPR_SUBS_DEV_ID_572B 0x02C2#define IPR_SUBS_DEV_ID_572F 0x02C3 +#define IPR_SUBS_DEV_ID_574D 0x030B +#define IPR_SUBS_DEV_ID_574E 0x030A#define IPR_SUBS_DEV_ID_575B 0x030D#define IPR_SUBS_DEV_ID_575C 0x0338 +#define IPR_SUBS_DEV_ID_575D 0x033E +#define IPR_SUBS_DEV_ID_57B3 0x033A#define IPR_SUBS_DEV_ID_57B7 0x0360#define IPR_SUBS_DEV_ID_57B8 0x02C2
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_pcie_slot_adapters +10 -0
@@ -7558,6 +7558,13 @@ static struct pci_device_id ipr_pci_tablPCI_VENDOR_ID_IBM ,IPR_SUBS_DEV_ID_575C ,0 ,0 , IPR_USE_LONG_TRANSOP_TIMEOUT }, { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574E, 0, 0, 0 }, + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, +PCI_VENDOR_ID_IBM ,IPR_SUBS_DEV_ID_575D ,0 ,0 , + IPR_USE_LONG_TRANSOP_TIMEOUT }, + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B3, 0, 0, 0 }, + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,PCI_VENDOR_ID_IBM ,IPR_SUBS_DEV_ID_57B7 ,0 ,0 , IPR_USE_LONG_TRANSOP_TIMEOUT }, { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE,
@@ -7570,6 +7577,9 @@ static struct pci_device_id ipr_pci_tabl {PCI_VENDOR_ID_ADAPTEC2 ,PCI_DEVICE_ID_ADAPTEC2_SCAMP ,PCI_VENDOR_ID_IBM ,IPR_SUBS_DEV_ID_572F ,0 ,0 , IPR_USE_LONG_TRANSOP_TIMEOUT }, + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SCAMP_E, +PCI_VENDOR_ID_IBM ,IPR_SUBS_DEV_ID_574D ,0 ,0 , + IPR_USE_LONG_TRANSOP_TIMEOUT }, { } };MODULE_DEVICE_TABLE (pci, ipr_pci_table);
_
PATCH 4/12 ipr: Enable logging of debug error data for all devices
In reply to a message not in the archiveThe ipr driver has a sysfs attribute which can be used to adjust the logging level of the driver for error events. The error response data for commands can be dumped by increasing the logging level of the ipr driver. This currently only works for JBOD passthrough devices. This patch enables this function for all devices, including RAID devices, to aid in debugging problems.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_dump_vset_ioasa +6 -3
@@ -4473,6 +4473,9 @@ static void ipr_dump_ioasa(struct ipr_ioif (ioasa->ilid !=0 )return ; +if (!ipr_is_gscsi (res)) +return ; +if (ipr_error_table[error_index].log_ioasa ==0 )return ; }
@@ -4632,11 +4635,11 @@ static void ipr_erp_start(struct ipr_ioareturn ; } -if (ipr_is_gscsi (res)) -ipr_dump_ioasa (ioa_cfg, ipr_cmd, res); -else +if (!ipr_is_gscsi (res))ipr_gen_sense (ipr_cmd); +ipr_dump_ioasa (ioa_cfg, ipr_cmd, res); +switch (ioasc &IPR_IOASC_IOASC_MASK ) {case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST :if (ipr_is_naca_model (res))
_
PATCH 5/12 ipr: Log error for SAS dual path switch
In reply to a message not in the archiveFor ipr SAS adapters that support dual pathing, this patch modifies ipr to log an error when a path fails.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_log_path_switch +6 -2
@@ -4453,12 +4453,13 @@ static void ipr_dump_ioasa(struct ipr_io {int i;u16 data_len; -u32 ioasc; +u32 ioasc, fd_ioasc;struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;__be32 *ioasa_data = (__be32 *)ioasa;int error_index; ioasc =be32_to_cpu (ioasa->ioasc) &IPR_IOASC_IOASC_MASK ; + fd_ioasc =be32_to_cpu (ioasa->fd_ioasc) &IPR_IOASC_IOASC_MASK ;if (0 == ioasc)return ;
@@ -4466,7 +4467,10 @@ static void ipr_dump_ioasa(struct ipr_ioif (ioa_cfg->log_level <IPR_DEFAULT_LOG_LEVEL )return ; - error_index =ipr_get_error (ioasc); +if (ioasc ==IPR_IOASC_BUS_WAS_RESET && fd_ioasc) + error_index =ipr_get_error (fd_ioasc); +else + error_index =ipr_get_error (ioasc);if (ioa_cfg->log_level <IPR_MAX_LOG_LEVEL ) {/* Don't log an error if the IOA already logged one */
_
PATCH 6/12 ipr: Fix for oops following SATA request sense
In reply to a message not in the archiveThis patch fixes a problem discovered on a system with some bad SATA devices attached. If a command to a SATAPI device times out and the device gets reset as part of error recovery, its possible that ipr will set err_mask to indicate a device error has occurred. If this happens, a request sense will get issued by libata. Since scsi core thinks this scsi command is now completed, because the device reset handler completed successfully, scsi core will free the associated scsi command, which may cause an oops when that request sense is completed later
by ipr. This patch ensures that any commands that get aborted as a result of a device reset set err_mask appropriately so that the request sense does not get sent.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 2 ++ 1 files changed, 2 insertions(+)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_sata_req_sense_oops +2 -0
@@ -3846,6 +3846,8 @@ static int __ipr_eh_dev_reset(struct scsif (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) {if (ipr_cmd->scsi_cmd) ipr_cmd->done = ipr_scsi_eh_done; +if (ipr_cmd->qc) + ipr_cmd->done = ipr_sata_eh_done;if (ipr_cmd->qc && !(ipr_cmd->qc->flags &ATA_QCFLAG_FAILED )) { ipr_cmd->qc->err_mask |=AC_ERR_TIMEOUT ; ipr_cmd->qc->flags |=ATA_QCFLAG_FAILED ;
_
PATCH 7/12 ipr: PCI unblock config access fix
In reply to a message not in the archiveFix to make sure user config accesses get re-enabled if the PCI config write to start BIST fails.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 1 + 1 files changed, 1 insertion(+)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_unblock_fix +1 -0
@@ -6390,6 +6390,7 @@ static int ipr_reset_start_bist(struct i rc =pci_write_config_byte (ioa_cfg->pdev,PCI_BIST ,PCI_BIST_START );if (rc !=PCIBIOS_SUCCESSFUL ) { +pci_unblock_user_cfg_access (ipr_cmd->ioa_cfg->pdev); ipr_cmd->ioasa.ioasc =cpu_to_be32 (IPR_IOASC_PCI_ACCESS_ERROR ); rc =IPR_RC_JOB_CONTINUE ; }else {
_
PATCH 8/12 ipr: Improve async error logging level control
In reply to a message not in the archiveAdd the ability to control how much error data gets logged on a per error basis.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 192 +++++++++++++++++------------------ 1 files changed, 96 insertions(+), 96 deletions(-)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_error_log_level +96 -96
@@ -164,7 +164,7 @@ MODULE_VERSION(IPR_DRIVER_VERSION);/* A constant array of IOASCs/URCs/Error Messages */ static const struct ipr_error_table_t ipr_error_table[] = { - {0x00000000 ,1 ,1 , + {0x00000000 ,1 ,IPR_DEFAULT_LOG_LEVEL ,"8155: An unknown error was received" }, {0x00330000 ,0 ,0 ,"Soft underlength error" },
@@ -172,37 +172,37 @@ struct ipr_error_table_t ipr_error_table "Command to be cancelled not found"}, {0x00808000 ,0 ,0 , "Qualified success"}, - {0x01080000, 1, 1, + {0x01080000, 1, IPR_DEFAULT_LOG_LEVEL, "FFFE: Soft device bus error recovered by the IOA"}, - {0x01088100, 0, 1, + {0x01088100, 0, IPR_DEFAULT_LOG_LEVEL, "4101: Soft device bus fabric error"}, - {0x01170600, 0, 1, + {0x01170600, 0, IPR_DEFAULT_LOG_LEVEL, "FFF9: Device sector reassign successful"}, - {0x01170900, 0, 1, + {0x01170900, 0, IPR_DEFAULT_LOG_LEVEL, "FFF7: Media error recovered by device rewrite procedures"}, - {0x01180200, 0, 1, + {0x01180200, 0, IPR_DEFAULT_LOG_LEVEL, "7001: IOA sector reassignment successful"}, - {0x01180500, 0, 1, + {0x01180500, 0, IPR_DEFAULT_LOG_LEVEL, "FFF9: Soft media error. Sector reassignment recommended"}, - {0x01180600, 0, 1, + {0x01180600, 0, IPR_DEFAULT_LOG_LEVEL, "FFF7: Media error recovered by IOA rewrite procedures"}, - {0x01418000, 0, 1, + {0x01418000, 0, IPR_DEFAULT_LOG_LEVEL, "FF3D: Soft PCI bus error recovered by the IOA"}, - {0x01440000, 1, 1, + {0x01440000, 1, IPR_DEFAULT_LOG_LEVEL, "FFF6: Device hardware error recovered by the IOA"}, - {0x01448100, 0, 1, + {0x01448100, 0, IPR_DEFAULT_LOG_LEVEL, "FFF6: Device hardware error recovered by the device"}, - {0x01448200, 1, 1, + {0x01448200, 1, IPR_DEFAULT_LOG_LEVEL, "FF3D: Soft IOA error recovered by the IOA"}, - {0x01448300, 0, 1, + {0x01448300, 0, IPR_DEFAULT_LOG_LEVEL, "FFFA: Undefined device response recovered by the IOA"}, - {0x014A0000, 1, 1, + {0x014A0000, 1, IPR_DEFAULT_LOG_LEVEL, "FFF6: Device bus error, message or command phase"}, - {0x014A8000, 0, 1, + {0x014A8000, 0, IPR_DEFAULT_LOG_LEVEL, "FFFE: Task Management Function failed"}, - {0x015D0000, 0, 1, + {0x015D0000, 0, IPR_DEFAULT_LOG_LEVEL, "FFF6: Failure prediction threshold exceeded"}, - {0x015D9200, 0, 1, + {0x015D9200, 0, IPR_DEFAULT_LOG_LEVEL, "8009: Impending cache battery pack failure"}, {0x02040400, 0, 0, "34FF: Disk device format in progress"},
@@ -212,85 +212,85 @@ struct ipr_error_table_t ipr_error_table "No ready, IOA shutdown"}, {0x025A0000 ,0 ,0 , "Not ready, IOA has been shutdown"}, - {0x02670100, 0, 1, + {0x02670100, 0, IPR_DEFAULT_LOG_LEVEL, "3020: Storage subsystem configuration error"}, {0x03110B00, 0, 0, "FFF5: Medium error, data unreadable, recommend reassign"}, {0x03110C00, 0, 0, "7000: Medium error, data unreadable, do not reassign"}, - {0x03310000, 0, 1, + {0x03310000, 0, IPR_DEFAULT_LOG_LEVEL, "FFF3: Disk media format bad"}, - {0x04050000, 0, 1, + {0x04050000, 0, IPR_DEFAULT_LOG_LEVEL, "3002: Addressed device failed to respond to selection"}, - {0x04080000, 1, 1, + {0x04080000, 1, IPR_DEFAULT_LOG_LEVEL, "3100: Device bus error"}, - {0x04080100, 0, 1, + {0x04080100, 0, IPR_DEFAULT_LOG_LEVEL, "3109: IOA timed out a device command"}, {0x04088000, 0, 0, "3120: SCSI bus is not operational"}, - {0x04088100, 0, 1, + {0x04088100, 0, IPR_DEFAULT_LOG_LEVEL, "4100: Hard device bus fabric error"}, - {0x04118000, 0, 1, + {0x04118000, 0, IPR_DEFAULT_LOG_LEVEL, "9000: IOA reserved area data check"}, - {0x04118100, 0, 1, + {0x04118100, 0, IPR_DEFAULT_LOG_LEVEL, "9001: IOA reserved area invalid data pattern"}, - {0x04118200, 0, 1, + {0x04118200, 0, IPR_DEFAULT_LOG_LEVEL, "9002: IOA reserved area LRC error"}, - {0x04320000, 0, 1, + {0x04320000, 0, IPR_DEFAULT_LOG_LEVEL, "102E: Out of alternate sectors for disk storage"}, - {0x04330000, 1, 1, + {0x04330000, 1, IPR_DEFAULT_LOG_LEVEL, "FFF4: Data transfer underlength error"}, - {0x04338000, 1, 1, + {0x04338000, 1, IPR_DEFAULT_LOG_LEVEL, "FFF4: Data transfer overlength error"}, - {0x043E0100, 0, 1, + {0x043E0100, 0, IPR_DEFAULT_LOG_LEVEL, "3400: Logical unit failure"}, - {0x04408500, 0, 1, + {0x04408500, 0, IPR_DEFAULT_LOG_LEVEL, "FFF4: Device microcode is corrupt"}, - {0x04418000, 1, 1, + {0x04418000, 1, IPR_DEFAULT_LOG_LEVEL, "8150: PCI bus error"}, {0x04430000, 1, 0, "Unsupported device bus message received"}, - {0x04440000, 1, 1, + {0x04440000, 1, IPR_DEFAULT_LOG_LEVEL, "FFF4: Disk device problem"}, - {0x04448200, 1, 1, + {0x04448200, 1, IPR_DEFAULT_LOG_LEVEL, "8150: Permanent IOA failure"}, - {0x04448300, 0, 1, + {0x04448300, 0, IPR_DEFAULT_LOG_LEVEL, "3010: Disk device returned wrong response to IOA"}, - {0x04448400, 0, 1, + {0x04448400, 0, IPR_DEFAULT_LOG_LEVEL, "8151: IOA microcode error"}, {0x04448500, 0, 0, "Device bus status error"}, - {0x04448600, 0, 1, + {0x04448600, 0, IPR_DEFAULT_LOG_LEVEL, "8157: IOA error requiring IOA reset to recover"}, {0x04448700, 0, 0, "ATA device status error"}, {0x04490000, 0, 0, "Message reject received from the device"}, - {0x04449200, 0, 1, + {0x04449200, 0, IPR_DEFAULT_LOG_LEVEL, "8008: A permanent cache battery pack failure occurred"}, - {0x0444A000, 0, 1, + {0x0444A000, 0, IPR_DEFAULT_LOG_LEVEL, "9090: Disk unit has been modified after the last known status"}, - {0x0444A200, 0, 1, + {0x0444A200, 0, IPR_DEFAULT_LOG_LEVEL, "9081: IOA detected device error"}, - {0x0444A300, 0, 1, + {0x0444A300, 0, IPR_DEFAULT_LOG_LEVEL, "9082: IOA detected device error"}, - {0x044A0000, 1, 1, + {0x044A0000, 1, IPR_DEFAULT_LOG_LEVEL, "3110: Device bus error, message or command phase"}, - {0x044A8000, 1, 1, + {0x044A8000, 1, IPR_DEFAULT_LOG_LEVEL, "3110: SAS Command / Task Management Function failed"}, - {0x04670400, 0, 1, + {0x04670400, 0, IPR_DEFAULT_LOG_LEVEL, "9091: Incorrect hardware configuration change has been detected"}, - {0x04678000, 0, 1, + {0x04678000, 0, IPR_DEFAULT_LOG_LEVEL, "9073: Invalid multi-adapter configuration"}, - {0x04678100, 0, 1, + {0x04678100, 0, IPR_DEFAULT_LOG_LEVEL, "4010: Incorrect connection between cascaded expanders"}, - {0x04678200, 0, 1, + {0x04678200, 0, IPR_DEFAULT_LOG_LEVEL, "4020: Connections exceed IOA design limits"}, - {0x04678300, 0, 1, + {0x04678300, 0, IPR_DEFAULT_LOG_LEVEL, "4030: Incorrect multipath connection"}, - {0x04679000, 0, 1, + {0x04679000, 0, IPR_DEFAULT_LOG_LEVEL, "4110: Unsupported enclosure function"}, - {0x046E0000, 0, 1, + {0x046E0000, 0, IPR_DEFAULT_LOG_LEVEL, "FFF4: Command to logical unit failed"}, {0x05240000, 1, 0, "Illegal request, invalid request type or request packet"},
@@ -310,101 +310,101 @@ struct ipr_error_table_t ipr_error_table "Illegal request, command sequence error"}, {0x052C8000 ,1 ,0 , "Illegal request, dual adapter support not enabled"}, - {0x06040500, 0, 1, + {0x06040500, 0, IPR_DEFAULT_LOG_LEVEL, "9031: Array protection temporarily suspended, protection resuming"}, - {0x06040600, 0, 1, + {0x06040600, 0, IPR_DEFAULT_LOG_LEVEL, "9040: Array protection temporarily suspended, protection resuming"}, - {0x06288000, 0, 1, + {0x06288000, 0, IPR_DEFAULT_LOG_LEVEL, "3140: Device bus not ready to ready transition"}, - {0x06290000, 0, 1, + {0x06290000, 0, IPR_DEFAULT_LOG_LEVEL, "FFFB: SCSI bus was reset"}, {0x06290500, 0, 0, "FFFE: SCSI bus transition to single ended"}, {0x06290600, 0, 0, "FFFE: SCSI bus transition to LVD"}, - {0x06298000, 0, 1, + {0x06298000, 0, IPR_DEFAULT_LOG_LEVEL, "FFFB: SCSI bus was reset by another initiator"}, - {0x063F0300, 0, 1, + {0x063F0300, 0, IPR_DEFAULT_LOG_LEVEL, "3029: A device replacement has occurred"}, - {0x064C8000, 0, 1, + {0x064C8000, 0, IPR_DEFAULT_LOG_LEVEL, "9051: IOA cache data exists for a missing or failed device"}, - {0x064C8100, 0, 1, + {0x064C8100, 0, IPR_DEFAULT_LOG_LEVEL, "9055: Auxiliary cache IOA contains cache data needed by the primary IOA"}, - {0x06670100, 0, 1, + {0x06670100, 0, IPR_DEFAULT_LOG_LEVEL, "9025: Disk unit is not supported at its physical location"}, - {0x06670600, 0, 1, + {0x06670600, 0, IPR_DEFAULT_LOG_LEVEL, "3020: IOA detected a SCSI bus configuration error"}, - {0x06678000, 0, 1, + {0x06678000, 0, IPR_DEFAULT_LOG_LEVEL, "3150: SCSI bus configuration error"}, - {0x06678100, 0, 1, + {0x06678100, 0, IPR_DEFAULT_LOG_LEVEL, "9074: Asymmetric advanced function disk configuration"}, - {0x06678300, 0, 1, + {0x06678300, 0, IPR_DEFAULT_LOG_LEVEL, "4040: Incomplete multipath connection between IOA and enclosure"}, - {0x06678400, 0, 1, + {0x06678400, 0, IPR_DEFAULT_LOG_LEVEL, "4041: Incomplete multipath connection between enclosure and device"}, - {0x06678500, 0, 1, + {0x06678500, 0, IPR_DEFAULT_LOG_LEVEL, "9075: Incomplete multipath connection between IOA and remote IOA"}, - {0x06678600, 0, 1, + {0x06678600, 0, IPR_DEFAULT_LOG_LEVEL, "9076: Configuration error, missing remote IOA"}, - {0x06679100, 0, 1, + {0x06679100, 0, IPR_DEFAULT_LOG_LEVEL, "4050: Enclosure does not support a required multipath function"}, - {0x06690200, 0, 1, + {0x06690200, 0, IPR_DEFAULT_LOG_LEVEL, "9041: Array protection temporarily suspended"}, - {0x06698200, 0, 1, + {0x06698200, 0, IPR_DEFAULT_LOG_LEVEL, "9042: Corrupt array parity detected on specified device"}, - {0x066B0200, 0, 1, + {0x066B0200, 0, IPR_DEFAULT_LOG_LEVEL, "9030: Array no longer protected due to missing or failed disk unit"}, - {0x066B8000, 0, 1, + {0x066B8000, 0, IPR_DEFAULT_LOG_LEVEL, "9071: Link operational transition"}, - {0x066B8100, 0, 1, + {0x066B8100, 0, IPR_DEFAULT_LOG_LEVEL, "9072: Link not operational transition"}, - {0x066B8200, 0, 1, + {0x066B8200, 0, IPR_DEFAULT_LOG_LEVEL, "9032: Array exposed but still protected"}, - {0x066B9100, 0, 1, + {0x066B9100, 0, IPR_DEFAULT_LOG_LEVEL, "4061: Multipath redundancy level got better"}, - {0x066B9200, 0, 1, + {0x066B9200, 0, IPR_DEFAULT_LOG_LEVEL, "4060: Multipath redundancy level got worse"}, {0x07270000, 0, 0, "Failure due to other device"}, - {0x07278000, 0, 1, + {0x07278000, 0, IPR_DEFAULT_LOG_LEVEL, "9008: IOA does not support functions expected by devices"}, - {0x07278100, 0, 1, + {0x07278100, 0, IPR_DEFAULT_LOG_LEVEL, "9010: Cache data associated with attached devices cannot be found"}, - {0x07278200, 0, 1, + {0x07278200, 0, IPR_DEFAULT_LOG_LEVEL, "9011: Cache data belongs to devices other than those attached"}, - {0x07278400, 0, 1, + {0x07278400, 0, IPR_DEFAULT_LOG_LEVEL, "9020: Array missing 2 or more devices with only 1 device present"}, - {0x07278500, 0, 1, + {0x07278500, 0, IPR_DEFAULT_LOG_LEVEL, "9021: Array missing 2 or more devices with 2 or more devices present"}, - {0x07278600, 0, 1, + {0x07278600, 0, IPR_DEFAULT_LOG_LEVEL, "9022: Exposed array is missing a required device"}, - {0x07278700, 0, 1, + {0x07278700, 0, IPR_DEFAULT_LOG_LEVEL, "9023: Array member(s) not at required physical locations"}, - {0x07278800, 0, 1, + {0x07278800, 0, IPR_DEFAULT_LOG_LEVEL, "9024: Array not functional due to present hardware configuration"}, - {0x07278900, 0, 1, + {0x07278900, 0, IPR_DEFAULT_LOG_LEVEL, "9026: Array not functional due to present hardware configuration"}, - {0x07278A00, 0, 1, + {0x07278A00, 0, IPR_DEFAULT_LOG_LEVEL, "9027: Array is missing a device and parity is out of sync"}, - {0x07278B00, 0, 1, + {0x07278B00, 0, IPR_DEFAULT_LOG_LEVEL, "9028: Maximum number of arrays already exist"}, - {0x07278C00, 0, 1, + {0x07278C00, 0, IPR_DEFAULT_LOG_LEVEL, "9050: Required cache data cannot be located for a disk unit"}, - {0x07278D00, 0, 1, + {0x07278D00, 0, IPR_DEFAULT_LOG_LEVEL, "9052: Cache data exists for a device that has been modified"}, - {0x07278F00, 0, 1, + {0x07278F00, 0, IPR_DEFAULT_LOG_LEVEL, "9054: IOA resources not available due to previous problems"}, - {0x07279100, 0, 1, + {0x07279100, 0, IPR_DEFAULT_LOG_LEVEL, "9092: Disk unit requires initialization before use"}, - {0x07279200, 0, 1, + {0x07279200, 0, IPR_DEFAULT_LOG_LEVEL, "9029: Incorrect hardware configuration change has been detected"}, - {0x07279600, 0, 1, + {0x07279600, 0, IPR_DEFAULT_LOG_LEVEL, "9060: One or more disk pairs are missing from an array"}, - {0x07279700, 0, 1, + {0x07279700, 0, IPR_DEFAULT_LOG_LEVEL, "9061: One or more disks are missing from an array"}, - {0x07279800, 0, 1, + {0x07279800, 0, IPR_DEFAULT_LOG_LEVEL, "9062: One or more disks are missing from an array"}, - {0x07279900, 0, 1, + {0x07279900, 0, IPR_DEFAULT_LOG_LEVEL, "9063: Maximum number of functional arrays has been exceeded"}, {0x0B260000, 0, 0, "Aborted command, invalid descriptor"},
@@ -1607,7 +1607,7 @@ static void ipr_handle_log_data(struct i/* Set indication we have logged an error */ ioa_cfg->errors_logged++; -if (ioa_cfg->log_level <IPR_DEFAULT_LOG_LEVEL ) +if (ioa_cfg->log_level < ipr_error_table[error_index].log_hcam)return ;if (be32_to_cpu (hostrcb->hcam.length) >sizeof (hostrcb->hcam.u.raw)) hostrcb->hcam.length =cpu_to_be32 (sizeof (hostrcb->hcam.u.raw));
_
PATCH 9/12 ipr: Disrupt device error
In reply to a message not in the archiveAdd entry in ipr error translation table for an error received when a device is forced into the failed state by the user.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 2 ++ 1 files changed, 2 insertions(+)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_disrupt_error +2 -0
@@ -360,6 +360,8 @@ struct ipr_error_table_t ipr_error_table "9072: Link not operational transition"}, {0x066B8200 ,0 ,IPR_DEFAULT_LOG_LEVEL , "9032: Array exposed but still protected"}, + {0x066B8300, 0, IPR_DEFAULT_LOG_LEVEL + 1, + "70DD: Device forced failed by disrupt device command"}, {0x066B9100, 0, IPR_DEFAULT_LOG_LEVEL, "4061: Multipath redundancy level got better"}, {0x066B9200, 0, IPR_DEFAULT_LOG_LEVEL,
_
PATCH 10/12 ipr: Return better qc_issue errors
In reply to a message not in the archiveIf qc_issue fails for some reason, return a better error to libata.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_sata_qc_issue_error +2 -2
@@ -5128,7 +5128,7 @@ static unsigned int ipr_qc_issue(structstruct ipr_ioarcb_ata_regs *regs;if (unlikely (!ioa_cfg->allow_cmds || ioa_cfg->ioa_is_dead)) -return -EIO ; +return AC_ERR_SYSTEM ; ipr_cmd =ipr_get_free_ipr_cmnd (ioa_cfg); ioarcb = &ipr_cmd->ioarcb;
@@ -5173,7 +5173,7 @@ static unsigned int ipr_qc_issue(structdefault :WARN_ON (1 ); -return -1 ; +return AC_ERR_INVALID ; }mb ();
_
PATCH 11/12 ipr: Faster sg list fetch
In reply to a message not in the archiveImprove overall command performance by embedding the scatterlist in the command block used by the adapter. This decreases the overall number of DMAs required for a single command.
---
linux-2.6-bjking1/drivers/scsi/ipr.c | 28 +++++++++++++++++++++++----- linux-2.6-bjking1/drivers/scsi/ipr.h | 31 ++++++++++++++++--------------- 2 files changed, 39 insertions(+), 20 deletions(-)
drivers/scsi/ipr.h renamed from drivers/scsi/ipr.h~ipr_embedded_ioadl2 +16 -15
@@ -422,9 +422,25 @@ struct ipr_ioarcb_ata_regs {u8 ctl; }__attribute__ ((packed, aligned(4))); +struct ipr_ioadl_desc { +__be32 flags_and_data_len; +#define IPR_IOADL_FLAGS_MASK 0xff000000 +#define IPR_IOADL_GET_FLAGS (x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK) +#define IPR_IOADL_DATA_LEN_MASK 0x00ffffff +#define IPR_IOADL_GET_DATA_LEN (x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK) +#define IPR_IOADL_FLAGS_READ 0x48000000 +#define IPR_IOADL_FLAGS_READ_LAST 0x49000000 +#define IPR_IOADL_FLAGS_WRITE 0x68000000 +#define IPR_IOADL_FLAGS_WRITE_LAST 0x69000000 +#define IPR_IOADL_FLAGS_LAST 0x01000000 + +__be32 address; +}__attribute__((packed,aligned (8 ))); +struct ipr_ioarcb_add_data {union {struct ipr_ioarcb_ata_regs regs; +struct ipr_ioadl_desc ioadl[5 ];__be32 add_cmd_parms[10 ]; }u; }__attribute__ ((packed,aligned (4 )));
@@ -456,21 +472,6 @@ struct ipr_ioarcb {struct ipr_ioarcb_add_data add_data; }__attribute__((packed, aligned (4))); -struct ipr_ioadl_desc { -__be32 flags_and_data_len; -#define IPR_IOADL_FLAGS_MASK 0xff000000 -#define IPR_IOADL_GET_FLAGS (x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK) -#define IPR_IOADL_DATA_LEN_MASK 0x00ffffff -#define IPR_IOADL_GET_DATA_LEN (x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK) -#define IPR_IOADL_FLAGS_READ 0x48000000 -#define IPR_IOADL_FLAGS_READ_LAST 0x49000000 -#define IPR_IOADL_FLAGS_WRITE 0x68000000 -#define IPR_IOADL_FLAGS_WRITE_LAST 0x69000000 -#define IPR_IOADL_FLAGS_LAST 0x01000000 - -__be32 address; -}__attribute__((packed,aligned (8 ))); -struct ipr_ioasa_vset {__be32 failing_lba_hi;__be32 failing_lba_lo;
drivers/scsi/ipr.c renamed from drivers/scsi/ipr.c~ipr_embedded_ioadl2 +23 -5
@@ -480,12 +480,16 @@ static void ipr_reinit_ipr_cmnd(struct i {struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; +dma_addr_t dma_addr =be32_to_cpu (ioarcb->ioarcb_host_pci_addr);memset (&ioarcb->cmd_pkt,0 ,sizeof (struct ipr_cmd_pkt )); ioarcb->write_data_transfer_length =0 ; ioarcb->read_data_transfer_length =0 ; ioarcb->write_ioadl_len =0 ; ioarcb->read_ioadl_len =0 ; + ioarcb->write_ioadl_addr = +cpu_to_be32 (dma_addr + offsetof(struct ipr_cmnd , ioadl)); + ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; ioasa->ioasc =0 ; ioasa->residual_data_len =0 ; ioasa->u.gata.status =0 ;
@@ -4230,6 +4234,14 @@ static int ipr_build_ioadl(struct ipr_io sglist = scsi_cmd->request_buffer; +if (ipr_cmd->dma_use_sg <=ARRAY_SIZE (ioarcb->add_data.u.ioadl)) { + ioadl = ioarcb->add_data.u.ioadl; + ioarcb->write_ioadl_addr = +cpu_to_be32 (be32_to_cpu (ioarcb->ioarcb_host_pci_addr) + + offsetof(struct ipr_ioarcb , add_data)); + ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; + } +for (i =0 ; i < ipr_cmd->dma_use_sg; i++) { ioadl[i].flags_and_data_len =cpu_to_be32 (ioadl_flags |sg_dma_len (&sglist[i]));
@@ -4260,6 +4272,11 @@ static int ipr_build_ioadl(struct ipr_io scsi_cmd->sc_data_direction);if (likely (!pci_dma_mapping_error (ipr_cmd->dma_handle))) { + ioadl = ioarcb->add_data.u.ioadl; + ioarcb->write_ioadl_addr = +cpu_to_be32 (be32_to_cpu (ioarcb->ioarcb_host_pci_addr) + + offsetof(struct ipr_ioarcb , add_data)); + ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; ipr_cmd->dma_use_sg =1 ; ioadl[0 ].flags_and_data_len =cpu_to_be32 (ioadl_flags | length |IPR_IOADL_FLAGS_LAST );
@@ -4346,11 +4363,9 @@ static void ipr_erp_done(struct ipr_cmnd**/ static void ipr_reinit_ipr_cmnd_for_erp (struct ipr_cmnd *ipr_cmd) { -struct ipr_ioarcb *ioarcb; -struct ipr_ioasa *ioasa; - - ioarcb = &ipr_cmd->ioarcb; - ioasa = &ipr_cmd->ioasa; +struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; +struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; +dma_addr_t dma_addr =be32_to_cpu (ioarcb->ioarcb_host_pci_addr);memset (&ioarcb->cmd_pkt,0 ,sizeof (struct ipr_cmd_pkt )); ioarcb->write_data_transfer_length =0 ;
@@ -4359,6 +4374,9 @@ static void ipr_reinit_ipr_cmnd_for_erp( ioarcb->read_ioadl_len =0 ; ioasa->ioasc =0 ; ioasa->residual_data_len =0 ; + ioarcb->write_ioadl_addr = +cpu_to_be32 (dma_addr + offsetof(struct ipr_cmnd , ioadl)); + ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; }/**
_
PATCH 12/12 ipr: Driver version to 2.3.2
In reply to a message not in the archiveBump driver version.
---
linux-2.6-bjking1/drivers/scsi/ipr.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/ipr.h renamed from drivers/scsi/ipr.h~ipr_driver_version_2_3_2 +2 -2
@@ -37,8 +37,8 @@/* * Literals */ -#define IPR_DRIVER_VERSION "2.3.1" -#define IPR_DRIVER_DATE "(January 23, 2007)" +#define IPR_DRIVER_VERSION "2.3.2" +#define IPR_DRIVER_DATE "(March 23, 2007)"/* * IPR_MAX_CMD_PER_LUN: This defines the maximum number of outstanding
_