sysfs.c (d7aad5550eca50370e3a1471b46281d03af0699e) sysfs.c (e7184b159dd37f4be8ff3d070c7c11f76b5bc3fe)
1// SPDX-License-Identifier: GPL-2.0
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#include <linux/init.h>
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/pci.h>
7#include <linux/device.h>
8#include <linux/io-64-nonatomic-lo-hi.h>

--- 1050 unchanged lines hidden (view full) ---

1059 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1060
1061 return sprintf(buf, "%d\n", wq->idxd_cdev.minor);
1062}
1063
1064static struct device_attribute dev_attr_wq_cdev_minor =
1065 __ATTR(cdev_minor, 0444, wq_cdev_minor_show, NULL);
1066
1// SPDX-License-Identifier: GPL-2.0
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#include <linux/init.h>
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/pci.h>
7#include <linux/device.h>
8#include <linux/io-64-nonatomic-lo-hi.h>

--- 1050 unchanged lines hidden (view full) ---

1059 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1060
1061 return sprintf(buf, "%d\n", wq->idxd_cdev.minor);
1062}
1063
1064static struct device_attribute dev_attr_wq_cdev_minor =
1065 __ATTR(cdev_minor, 0444, wq_cdev_minor_show, NULL);
1066
1067static int __get_sysfs_u64(const char *buf, u64 *val)
1068{
1069 int rc;
1070
1071 rc = kstrtou64(buf, 0, val);
1072 if (rc < 0)
1073 return -EINVAL;
1074
1075 if (*val == 0)
1076 return -EINVAL;
1077
1078 *val = roundup_pow_of_two(*val);
1079 return 0;
1080}
1081
1067static ssize_t wq_max_transfer_size_show(struct device *dev, struct device_attribute *attr,
1068 char *buf)
1069{
1070 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1071
1072 return sprintf(buf, "%llu\n", wq->max_xfer_bytes);
1073}
1074
1075static ssize_t wq_max_transfer_size_store(struct device *dev, struct device_attribute *attr,
1076 const char *buf, size_t count)
1077{
1078 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1079 struct idxd_device *idxd = wq->idxd;
1080 u64 xfer_size;
1081 int rc;
1082
1083 if (wq->state != IDXD_WQ_DISABLED)
1084 return -EPERM;
1085
1082static ssize_t wq_max_transfer_size_show(struct device *dev, struct device_attribute *attr,
1083 char *buf)
1084{
1085 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1086
1087 return sprintf(buf, "%llu\n", wq->max_xfer_bytes);
1088}
1089
1090static ssize_t wq_max_transfer_size_store(struct device *dev, struct device_attribute *attr,
1091 const char *buf, size_t count)
1092{
1093 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1094 struct idxd_device *idxd = wq->idxd;
1095 u64 xfer_size;
1096 int rc;
1097
1098 if (wq->state != IDXD_WQ_DISABLED)
1099 return -EPERM;
1100
1086 rc = kstrtou64(buf, 0, &xfer_size);
1101 rc = __get_sysfs_u64(buf, &xfer_size);
1087 if (rc < 0)
1102 if (rc < 0)
1088 return -EINVAL;
1103 return rc;
1089
1104
1090 if (xfer_size == 0)
1091 return -EINVAL;
1092
1093 xfer_size = roundup_pow_of_two(xfer_size);
1094 if (xfer_size > idxd->max_xfer_bytes)
1095 return -EINVAL;
1096
1097 wq->max_xfer_bytes = xfer_size;
1098
1099 return count;
1100}
1101
1102static struct device_attribute dev_attr_wq_max_transfer_size =
1103 __ATTR(max_transfer_size, 0644,
1104 wq_max_transfer_size_show, wq_max_transfer_size_store);
1105
1105 if (xfer_size > idxd->max_xfer_bytes)
1106 return -EINVAL;
1107
1108 wq->max_xfer_bytes = xfer_size;
1109
1110 return count;
1111}
1112
1113static struct device_attribute dev_attr_wq_max_transfer_size =
1114 __ATTR(max_transfer_size, 0644,
1115 wq_max_transfer_size_show, wq_max_transfer_size_store);
1116
1117static ssize_t wq_max_batch_size_show(struct device *dev, struct device_attribute *attr, char *buf)
1118{
1119 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1120
1121 return sprintf(buf, "%u\n", wq->max_batch_size);
1122}
1123
1124static ssize_t wq_max_batch_size_store(struct device *dev, struct device_attribute *attr,
1125 const char *buf, size_t count)
1126{
1127 struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev);
1128 struct idxd_device *idxd = wq->idxd;
1129 u64 batch_size;
1130 int rc;
1131
1132 if (wq->state != IDXD_WQ_DISABLED)
1133 return -EPERM;
1134
1135 rc = __get_sysfs_u64(buf, &batch_size);
1136 if (rc < 0)
1137 return rc;
1138
1139 if (batch_size > idxd->max_batch_size)
1140 return -EINVAL;
1141
1142 wq->max_batch_size = (u32)batch_size;
1143
1144 return count;
1145}
1146
1147static struct device_attribute dev_attr_wq_max_batch_size =
1148 __ATTR(max_batch_size, 0644, wq_max_batch_size_show, wq_max_batch_size_store);
1149
1106static struct attribute *idxd_wq_attributes[] = {
1107 &dev_attr_wq_clients.attr,
1108 &dev_attr_wq_state.attr,
1109 &dev_attr_wq_group_id.attr,
1110 &dev_attr_wq_mode.attr,
1111 &dev_attr_wq_size.attr,
1112 &dev_attr_wq_priority.attr,
1113 &dev_attr_wq_type.attr,
1114 &dev_attr_wq_name.attr,
1115 &dev_attr_wq_cdev_minor.attr,
1116 &dev_attr_wq_max_transfer_size.attr,
1150static struct attribute *idxd_wq_attributes[] = {
1151 &dev_attr_wq_clients.attr,
1152 &dev_attr_wq_state.attr,
1153 &dev_attr_wq_group_id.attr,
1154 &dev_attr_wq_mode.attr,
1155 &dev_attr_wq_size.attr,
1156 &dev_attr_wq_priority.attr,
1157 &dev_attr_wq_type.attr,
1158 &dev_attr_wq_name.attr,
1159 &dev_attr_wq_cdev_minor.attr,
1160 &dev_attr_wq_max_transfer_size.attr,
1161 &dev_attr_wq_max_batch_size.attr,
1117 NULL,
1118};
1119
1120static const struct attribute_group idxd_wq_attribute_group = {
1121 .attrs = idxd_wq_attributes,
1122};
1123
1124static const struct attribute_group *idxd_wq_attribute_groups[] = {

--- 474 unchanged lines hidden ---
1162 NULL,
1163};
1164
1165static const struct attribute_group idxd_wq_attribute_group = {
1166 .attrs = idxd_wq_attributes,
1167};
1168
1169static const struct attribute_group *idxd_wq_attribute_groups[] = {

--- 474 unchanged lines hidden ---