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 --- |