On Tue, Mar 15, 2016 at 10:54:42AM -0500, Christoph Lameter wrote:
+static ssize_t show_protocol_stats(struct ib_device *dev, int index,
+ u8 port, char *buf)
+{
+ struct rdma_protocol_stats stats = {0};
+ ssize_t ret;
+
+ ret = dev->get_protocol_stats(dev, &stats, port);
+ if (ret)
+ return ret;
+
+ return sprintf(buf, "%llu\n", stats.value[index]);
+}
This works fine when there are few counters, but if there are lots? What
about changing things to include the index in the get_protocol_stats() call
so that we just grab the single item we are looking for?
+static struct attribute_group *create_protocol_stats(struct ib_device
*device,
+ struct kobject *kobj,
+ u8 port) {
+ struct attribute_group *ag;
+ struct rdma_protocol_stats stats = {0};
+ u32 counters;
+ u32 i;
+ int ret;
+
+ ret = device->get_protocol_stats(device, &stats, port);
+
+ if (ret || !stats.name)
+ return NULL;
+
+ ag = kzalloc(sizeof(*ag), GFP_KERNEL);
+ if (!ag)
+ return NULL;
+
+ ag->name = stats.dirname;
+
+ for (counters = 0; stats.name[counters]; counters++)
+ ;
+
+ BUG_ON(counters > MAX_NR_PROTOCOL_STATS);
Should we really be bringing the machine crashing down here?
-Denny
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html