summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAndrei Varvara <andrei.varvara@freescale.com>2014-03-25 13:28:02 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-03-28 14:05:12 (GMT)
commit250bba4895004b0f4262392d104a103c5c64fada (patch)
tree750d0a7473ffe3c493b7bbec11381d2686227218 /drivers
parentabe6e43a7470c0970584785c50392c591e06979f (diff)
downloadlinux-fsl-qoriq-250bba4895004b0f4262392d104a103c5c64fada.tar.xz
dpa_offload: Fix ioctl for dpa_ipsec_get_stats
The intance ID should be given by user when reading the statistics for a DPA IPSec instance. Updated ioctl and wrapper code accordingly. Signed-off-by: Andrei Varvara <andrei.varvara@freescale.com> Change-Id: Ie2a7232d2bc5e9fe63aa4655b2623a0d7303a4db Reviewed-on: http://git.am.freescale.net:8181/10394 Reviewed-by: Marian-Cornel Chereji <marian.chereji@freescale.com> Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Radu-Andrei Bulie <Radu.Bulie@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec_ioctl.h7
-rw-r--r--drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c23
2 files changed, 24 insertions, 6 deletions
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec_ioctl.h b/drivers/staging/fsl_dpa_offload/dpa_ipsec_ioctl.h
index 6e96a1b..9bf64f3 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec_ioctl.h
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec_ioctl.h
@@ -207,6 +207,11 @@ struct ioc_dpa_ipsec_sa_get_stats {
struct dpa_ipsec_sa_stats sa_stats;
};
+struct ioc_dpa_ipsec_instance_stats {
+ int instance_id;
+ struct dpa_ipsec_stats stats;
+};
+
struct ioc_dpa_ipsec_sa_modify_prm {
int sa_id; /* security association id */
struct dpa_ipsec_sa_modify_prm modify_prm;
@@ -307,7 +312,7 @@ struct ioc_compat_dpa_ipsec_sa_modify_prm {
#endif
#define DPA_IPSEC_IOC_GET_STATS \
- _IOR(DPA_IPSEC_IOC_MAGIC, 13, struct dpa_ipsec_stats)
+ _IOWR(DPA_IPSEC_IOC_MAGIC, 13, struct ioc_dpa_ipsec_instance_stats)
#define DPA_IPSEC_IOC_SA_REQUEST_SEQ_NUMBER \
_IOW(DPA_IPSEC_IOC_MAGIC, 14, int)
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
index 00e327c..4cc8ce4 100644
--- a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
+++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
@@ -1317,16 +1317,29 @@ long wrp_dpa_ipsec_do_ioctl(struct file *filp, unsigned int cmd,
}
case DPA_IPSEC_IOC_GET_STATS: {
- struct dpa_ipsec_stats ipsec_stats;
+ struct ioc_dpa_ipsec_instance_stats prm;
- ret = dpa_ipsec_get_stats(0, &ipsec_stats);
+ if (copy_from_user(&prm,
+ (struct ioc_dpa_ipsec_instance_stats *)args,
+ sizeof(prm))) {
+ log_err("Could not copy from user stats params\n");
+ return -EINVAL;
+ }
+
+ if (prm.instance_id < 0) {
+ log_err("Invalid instance id\n");
+ return -EINVAL;
+ }
+
+ ret = dpa_ipsec_get_stats(prm.instance_id, &prm.stats);
if (ret < 0) {
- log_err("Getting stats failed\n");
+ log_err("Failed to get statistics for instance %d\n",
+ prm.instance_id);
break;
}
- if (copy_to_user((struct dpa_ipsec_stats *)args,
- &ipsec_stats, sizeof(ipsec_stats))) {
+ if (copy_to_user((struct ioc_dpa_ipsec_instance_stats *)args,
+ &prm, sizeof(prm))) {
log_err("Could not copy stats to user\n");
return -EINVAL;
}