[SCSI] bfa: Add support to collect / reset fabric stats.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
3ec4f2c8bf
commit
c0350bf574
@ -2349,6 +2349,51 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
bfad_iocmd_vf_get_stats(struct bfad_s *bfad, void *cmd)
|
||||||
|
{
|
||||||
|
struct bfa_bsg_vf_stats_s *iocmd =
|
||||||
|
(struct bfa_bsg_vf_stats_s *)cmd;
|
||||||
|
struct bfa_fcs_fabric_s *fcs_vf;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
||||||
|
fcs_vf = bfa_fcs_vf_lookup(&bfad->bfa_fcs, iocmd->vf_id);
|
||||||
|
if (fcs_vf == NULL) {
|
||||||
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
|
iocmd->status = BFA_STATUS_UNKNOWN_VFID;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
memcpy((void *)&iocmd->stats, (void *)&fcs_vf->stats,
|
||||||
|
sizeof(struct bfa_vf_stats_s));
|
||||||
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
|
iocmd->status = BFA_STATUS_OK;
|
||||||
|
out:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
bfad_iocmd_vf_clr_stats(struct bfad_s *bfad, void *cmd)
|
||||||
|
{
|
||||||
|
struct bfa_bsg_vf_reset_stats_s *iocmd =
|
||||||
|
(struct bfa_bsg_vf_reset_stats_s *)cmd;
|
||||||
|
struct bfa_fcs_fabric_s *fcs_vf;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
||||||
|
fcs_vf = bfa_fcs_vf_lookup(&bfad->bfa_fcs, iocmd->vf_id);
|
||||||
|
if (fcs_vf == NULL) {
|
||||||
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
|
iocmd->status = BFA_STATUS_UNKNOWN_VFID;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
memset((void *)&fcs_vf->stats, 0, sizeof(struct bfa_vf_stats_s));
|
||||||
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
|
iocmd->status = BFA_STATUS_OK;
|
||||||
|
out:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bfad_iocmd_handler(struct bfad_s *bfad, unsigned int cmd, void *iocmd,
|
bfad_iocmd_handler(struct bfad_s *bfad, unsigned int cmd, void *iocmd,
|
||||||
unsigned int payload_len)
|
unsigned int payload_len)
|
||||||
@ -2661,6 +2706,12 @@ bfad_iocmd_handler(struct bfad_s *bfad, unsigned int cmd, void *iocmd,
|
|||||||
case IOCMD_QOS_RESET_STATS:
|
case IOCMD_QOS_RESET_STATS:
|
||||||
rc = bfad_iocmd_qos_reset_stats(bfad, iocmd);
|
rc = bfad_iocmd_qos_reset_stats(bfad, iocmd);
|
||||||
break;
|
break;
|
||||||
|
case IOCMD_VF_GET_STATS:
|
||||||
|
rc = bfad_iocmd_vf_get_stats(bfad, iocmd);
|
||||||
|
break;
|
||||||
|
case IOCMD_VF_RESET_STATS:
|
||||||
|
rc = bfad_iocmd_vf_clr_stats(bfad, iocmd);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
@ -135,6 +135,8 @@ enum {
|
|||||||
IOCMD_QOS_GET_VC_ATTR,
|
IOCMD_QOS_GET_VC_ATTR,
|
||||||
IOCMD_QOS_GET_STATS,
|
IOCMD_QOS_GET_STATS,
|
||||||
IOCMD_QOS_RESET_STATS,
|
IOCMD_QOS_RESET_STATS,
|
||||||
|
IOCMD_VF_GET_STATS,
|
||||||
|
IOCMD_VF_RESET_STATS,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bfa_bsg_gen_s {
|
struct bfa_bsg_gen_s {
|
||||||
@ -686,6 +688,19 @@ struct bfa_bsg_qos_vc_attr_s {
|
|||||||
struct bfa_qos_vc_attr_s attr;
|
struct bfa_qos_vc_attr_s attr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct bfa_bsg_vf_stats_s {
|
||||||
|
bfa_status_t status;
|
||||||
|
u16 bfad_num;
|
||||||
|
u16 vf_id;
|
||||||
|
struct bfa_vf_stats_s stats;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bfa_bsg_vf_reset_stats_s {
|
||||||
|
bfa_status_t status;
|
||||||
|
u16 bfad_num;
|
||||||
|
u16 vf_id;
|
||||||
|
};
|
||||||
|
|
||||||
struct bfa_bsg_fcpt_s {
|
struct bfa_bsg_fcpt_s {
|
||||||
bfa_status_t status;
|
bfa_status_t status;
|
||||||
u16 vf_id;
|
u16 vf_id;
|
||||||
|
Loading…
Reference in New Issue
Block a user