Re: [PATCH V3] ib_qib: Allow writes to the diag_counters to be able to clear them
thanks guys, applied -- Roland Dreier rola...@cisco.com || For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/index.html -- To unsubscribe from this list: send the line unsubscribe linux-rdma in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V3] ib_qib: Allow writes to the diag_counters to be able to clear them
Acked-by: Ralph Campbell ralph.campb...@qlogic.com On Tue, 2010-07-13 at 18:53 -0700, Ira Weiny wrote: From: Ira Weiny wei...@llnl.gov Date: Wed, 7 Jul 2010 17:35:34 -0700 Subject: [PATCH] ib_qib: Allow writes to the diag_counters to be able to clear them Changes in V3: Add non-number error check Return proper proper length Changes in V2: Add check for negative values Return proper length Signed-off-by: Ira Weiny wei...@llnl.gov --- drivers/infiniband/hw/qib/qib_sysfs.c | 21 - 1 files changed, 20 insertions(+), 1 deletions(-) diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c index dab4d9f..b214eff 100644 --- a/drivers/infiniband/hw/qib/qib_sysfs.c +++ b/drivers/infiniband/hw/qib/qib_sysfs.c @@ -347,7 +347,7 @@ static struct kobj_type qib_sl2vl_ktype = { #define QIB_DIAGC_ATTR(N) \ static struct qib_diagc_attr qib_diagc_attr_##N = { \ - .attr = { .name = __stringify(N), .mode = 0444 }, \ + .attr = { .name = __stringify(N), .mode = 0664 }, \ .counter = offsetof(struct qib_ibport, n_##N) \ } @@ -403,8 +403,27 @@ static ssize_t diagc_attr_show(struct kobject *kobj, struct attribute *attr, return sprintf(buf, %u\n, *(u32 *)((char *)qibp + dattr-counter)); } +static ssize_t diagc_attr_store(struct kobject *kobj, struct attribute *attr, + const char *buf, size_t size) +{ + struct qib_diagc_attr *dattr = + container_of(attr, struct qib_diagc_attr, attr); + struct qib_pportdata *ppd = + container_of(kobj, struct qib_pportdata, diagc_kobj); + struct qib_ibport *qibp = ppd-ibport_data; + char *endp; + long val = simple_strtol(buf, endp, 0); + + if (val 0 || endp == buf) + return -EINVAL; + + *(u32 *)((char *)qibp + dattr-counter) = (u32)val; + return size; +} + static const struct sysfs_ops qib_diagc_ops = { .show = diagc_attr_show, + .store = diagc_attr_store, }; static struct kobj_type qib_diagc_ktype = { -- To unsubscribe from this list: send the line unsubscribe linux-rdma in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V3] ib_qib: Allow writes to the diag_counters to be able to clear them
From: Ira Weiny wei...@llnl.gov Date: Wed, 7 Jul 2010 17:35:34 -0700 Subject: [PATCH] ib_qib: Allow writes to the diag_counters to be able to clear them Changes in V3: Add non-number error check Return proper proper length Changes in V2: Add check for negative values Return proper length Signed-off-by: Ira Weiny wei...@llnl.gov --- drivers/infiniband/hw/qib/qib_sysfs.c | 21 - 1 files changed, 20 insertions(+), 1 deletions(-) diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c index dab4d9f..b214eff 100644 --- a/drivers/infiniband/hw/qib/qib_sysfs.c +++ b/drivers/infiniband/hw/qib/qib_sysfs.c @@ -347,7 +347,7 @@ static struct kobj_type qib_sl2vl_ktype = { #define QIB_DIAGC_ATTR(N) \ static struct qib_diagc_attr qib_diagc_attr_##N = { \ - .attr = { .name = __stringify(N), .mode = 0444 }, \ + .attr = { .name = __stringify(N), .mode = 0664 }, \ .counter = offsetof(struct qib_ibport, n_##N) \ } @@ -403,8 +403,27 @@ static ssize_t diagc_attr_show(struct kobject *kobj, struct attribute *attr, return sprintf(buf, %u\n, *(u32 *)((char *)qibp + dattr-counter)); } +static ssize_t diagc_attr_store(struct kobject *kobj, struct attribute *attr, + const char *buf, size_t size) +{ + struct qib_diagc_attr *dattr = + container_of(attr, struct qib_diagc_attr, attr); + struct qib_pportdata *ppd = + container_of(kobj, struct qib_pportdata, diagc_kobj); + struct qib_ibport *qibp = ppd-ibport_data; + char *endp; + long val = simple_strtol(buf, endp, 0); + + if (val 0 || endp == buf) + return -EINVAL; + + *(u32 *)((char *)qibp + dattr-counter) = (u32)val; + return size; +} + static const struct sysfs_ops qib_diagc_ops = { .show = diagc_attr_show, + .store = diagc_attr_store, }; static struct kobj_type qib_diagc_ktype = { -- 1.5.4.5 -- To unsubscribe from this list: send the line unsubscribe linux-rdma in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html