diff options
author | Andrei Varvara <andrei.varvara@freescale.com> | 2014-03-25 13:28:02 (GMT) |
---|---|---|
committer | Jose Rivera <German.Rivera@freescale.com> | 2014-03-28 14:05:12 (GMT) |
commit | 250bba4895004b0f4262392d104a103c5c64fada (patch) | |
tree | 750d0a7473ffe3c493b7bbec11381d2686227218 /drivers | |
parent | abe6e43a7470c0970584785c50392c591e06979f (diff) | |
download | linux-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.h | 7 | ||||
-rw-r--r-- | drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c | 23 |
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; } |