PATCH [4/15] qla2xxx: Endianess fix while reading stats
Subsystems (2)
ChangeSet
1.1660 04/02/28 22:02:06 [email protected] +2 -0 Return firmware statistics retrieved from qla2x00_get_link_status() in host-endian form.
drivers/scsi/qla2xxx/qla_gbl.h
1.5 04/02/28 22:02:00 [email protected] +1 -1 Use a pointer to a known structure form rather than an opaque pointer.
drivers/scsi/qla2xxx/qla_gbl.h | 2 +- drivers/scsi/qla2xxx/qla_mbx.c | 32 ++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 15 deletions(-)
ftp://ftp.qlogic.com/outgoing/linux/patches/8.x/8.00.00b11k/13_endian_fix_link_stats.patch
drivers/scsi/qla2xxx/qla_gbl.h +1 -1
@@ -195,7 +195,7 @@ qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);extern uint8_t -qla2x00_get_link_status (scsi_qla_host_t *,uint8_t ,void *,uint16_t *); +qla2x00_get_link_status (scsi_qla_host_t *,uint8_t ,link_stat_t *,uint16_t *);extern int qla2x00_lip_reset (scsi_qla_host_t *);
drivers/scsi/qla2xxx/qla_mbx.c +18 -14
@@ -1598,8 +1598,8 @@* BIT_1 = mailbox error. */ uint8_t -qla2x00_get_link_status (scsi_qla_host_t *ha,uint8_t loop_id,void *ret_buf, -uint16_t *status) +qla2x00_get_link_status (scsi_qla_host_t *ha,uint8_t loop_id, +link_stat_t *ret_buf,uint16_t *status) {int rval;mbx_cmd_t mc;
@@ -1646,16 +1646,20 @@ status[0 ] = mcp->mb[0 ]; rval =BIT_1 ; }else { -/* copy over data */ -memcpy (ret_buf, stat_buf,sizeof (link_stat_t)); -DEBUG (printk ("qla2x00_get_link_status(%ld): stat dump: " -"fail_cnt=%d loss_sync=%d loss_sig=%d seq_err=%d " -"inval_xmt_word=%d inval_crc=%d.\n" , - ha->host_no, - stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt, - stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt, - stat_buf->inval_xmit_word_cnt, - stat_buf->inval_crc_cnt);) +/* copy over data -- firmware data is LE. */ + ret_buf->link_fail_cnt = +le32_to_cpu (stat_buf->link_fail_cnt); + ret_buf->loss_sync_cnt = +le32_to_cpu (stat_buf->loss_sync_cnt); + ret_buf->loss_sig_cnt = +le32_to_cpu (stat_buf->loss_sig_cnt); + ret_buf->prim_seq_err_cnt = +le32_to_cpu (stat_buf->prim_seq_err_cnt); + ret_buf->inval_xmit_word_cnt = +le32_to_cpu (stat_buf->inval_xmit_word_cnt); + ret_buf->inval_crc_cnt = +le32_to_cpu (stat_buf->inval_crc_cnt); + DEBUG11(printk("qla2x00_get_link_status(%ld): stat " "dump: fail_cnt=%d loss_sync=%d loss_sig=%d " "seq_err=%d inval_xmt_word=%d inval_crc=%d.\n",
@@ -1672,8 +1676,8 @@ rval =BIT_1 ; } -pci_free_consistent (ha->pdev,sizeof (link_stat_t), - stat_buf, phys_address); +pci_free_consistent (ha->pdev,sizeof (link_stat_t), stat_buf, + phys_address);return rval; }