mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 20:00:53 +07:00
RDMA/drivers: Use core provided API for registering device attributes
Use rdma_set_device_sysfs_group() to register device attributes and simplify the driver. Signed-off-by: Parav Pandit <parav@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
d4122f5abe
commit
508a523f6b
@ -535,6 +535,34 @@ static struct bnxt_en_dev *bnxt_re_dev_probe(struct net_device *netdev)
|
||||
return en_dev;
|
||||
}
|
||||
|
||||
static ssize_t hw_rev_show(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", rdev->en_dev->pdev->vendor);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", rdev->ibdev.node_desc);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static struct attribute *bnxt_re_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group bnxt_re_dev_attr_group = {
|
||||
.attrs = bnxt_re_attributes,
|
||||
};
|
||||
|
||||
static void bnxt_re_unregister_ib(struct bnxt_re_dev *rdev)
|
||||
{
|
||||
ib_unregister_device(&rdev->ibdev);
|
||||
@ -638,34 +666,11 @@ static int bnxt_re_register_ib(struct bnxt_re_dev *rdev)
|
||||
ibdev->get_hw_stats = bnxt_re_ib_get_hw_stats;
|
||||
ibdev->alloc_hw_stats = bnxt_re_ib_alloc_hw_stats;
|
||||
|
||||
rdma_set_device_sysfs_group(ibdev, &bnxt_re_dev_attr_group);
|
||||
ibdev->driver_id = RDMA_DRIVER_BNXT_RE;
|
||||
return ib_register_device(ibdev, "bnxt_re%d", NULL);
|
||||
}
|
||||
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", rdev->en_dev->pdev->vendor);
|
||||
}
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", rdev->ibdev.node_desc);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(hw_rev, 0444, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, 0444, show_hca, NULL);
|
||||
|
||||
static struct device_attribute *bnxt_re_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type
|
||||
};
|
||||
|
||||
static void bnxt_re_dev_remove(struct bnxt_re_dev *rdev)
|
||||
{
|
||||
dev_put(rdev->netdev);
|
||||
@ -1200,12 +1205,9 @@ static int bnxt_re_setup_qos(struct bnxt_re_dev *rdev)
|
||||
|
||||
static void bnxt_re_ib_unreg(struct bnxt_re_dev *rdev)
|
||||
{
|
||||
int i, rc;
|
||||
int rc;
|
||||
|
||||
if (test_and_clear_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags)) {
|
||||
for (i = 0; i < ARRAY_SIZE(bnxt_re_attributes); i++)
|
||||
device_remove_file(&rdev->ibdev.dev,
|
||||
bnxt_re_attributes[i]);
|
||||
/* Cleanup ib dev */
|
||||
bnxt_re_unregister_ib(rdev);
|
||||
}
|
||||
@ -1255,7 +1257,7 @@ static void bnxt_re_worker(struct work_struct *work)
|
||||
|
||||
static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev)
|
||||
{
|
||||
int i, j, rc;
|
||||
int rc;
|
||||
|
||||
bool locked;
|
||||
|
||||
@ -1375,20 +1377,6 @@ static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev)
|
||||
}
|
||||
set_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags);
|
||||
dev_info(rdev_to_dev(rdev), "Device registered successfully");
|
||||
for (i = 0; i < ARRAY_SIZE(bnxt_re_attributes); i++) {
|
||||
rc = device_create_file(&rdev->ibdev.dev,
|
||||
bnxt_re_attributes[i]);
|
||||
if (rc) {
|
||||
dev_err(rdev_to_dev(rdev),
|
||||
"Failed to create IB sysfs: %#x", rc);
|
||||
/* Must clean up all created device files */
|
||||
for (j = 0; j < i; j++)
|
||||
device_remove_file(&rdev->ibdev.dev,
|
||||
bnxt_re_attributes[j]);
|
||||
bnxt_re_unregister_ib(rdev);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
ib_get_eth_speed(&rdev->ibdev, 1, &rdev->active_speed,
|
||||
&rdev->active_width);
|
||||
set_bit(BNXT_RE_FLAG_ISSUE_ROCE_STATS, &rdev->flags);
|
||||
|
@ -1127,17 +1127,18 @@ static int iwch_query_port(struct ib_device *ibdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
|
||||
ibdev.dev);
|
||||
pr_debug("%s dev 0x%p\n", __func__, dev);
|
||||
return sprintf(buf, "%d\n", iwch_dev->rdev.t3cdev_p->type);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
|
||||
ibdev.dev);
|
||||
@ -1148,9 +1149,10 @@ static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
|
||||
lldev->ethtool_ops->get_drvinfo(lldev, &info);
|
||||
return sprintf(buf, "%s\n", info.driver);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_board(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
|
||||
ibdev.dev);
|
||||
@ -1158,6 +1160,7 @@ static ssize_t show_board(struct device *dev, struct device_attribute *attr,
|
||||
return sprintf(buf, "%x.%x\n", iwch_dev->rdev.rnic_info.pdev->vendor,
|
||||
iwch_dev->rdev.rnic_info.pdev->device);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
enum counters {
|
||||
IPINRECEIVES,
|
||||
@ -1274,14 +1277,15 @@ static int iwch_get_mib(struct ib_device *ibdev, struct rdma_hw_stats *stats,
|
||||
return stats->num_counters;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static struct attribute *iwch_class_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *iwch_class_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id,
|
||||
static const struct attribute_group iwch_attr_group = {
|
||||
.attrs = iwch_class_attributes,
|
||||
};
|
||||
|
||||
static int iwch_port_immutable(struct ib_device *ibdev, u8 port_num,
|
||||
@ -1316,7 +1320,6 @@ static void get_dev_fw_ver_str(struct ib_device *ibdev, char *str)
|
||||
int iwch_register_device(struct iwch_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
pr_debug("%s iwch_dev %p\n", __func__, dev);
|
||||
memset(&dev->ibdev.node_guid, 0, sizeof(dev->ibdev.node_guid));
|
||||
@ -1401,33 +1404,16 @@ int iwch_register_device(struct iwch_dev *dev)
|
||||
sizeof(dev->ibdev.iwcm->ifname));
|
||||
|
||||
dev->ibdev.driver_id = RDMA_DRIVER_CXGB3;
|
||||
rdma_set_device_sysfs_group(&dev->ibdev, &iwch_attr_group);
|
||||
ret = ib_register_device(&dev->ibdev, "cxgb3_%d", NULL);
|
||||
if (ret)
|
||||
goto bail1;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i) {
|
||||
ret = device_create_file(&dev->ibdev.dev,
|
||||
iwch_class_attributes[i]);
|
||||
if (ret) {
|
||||
goto bail2;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
bail2:
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
bail1:
|
||||
kfree(dev->ibdev.iwcm);
|
||||
kfree(dev->ibdev.iwcm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void iwch_unregister_device(struct iwch_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
pr_debug("%s iwch_dev %p\n", __func__, dev);
|
||||
for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i)
|
||||
device_remove_file(&dev->ibdev.dev,
|
||||
iwch_class_attributes[i]);
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
kfree(dev->ibdev.iwcm);
|
||||
return;
|
||||
|
@ -373,8 +373,8 @@ static int c4iw_query_port(struct ib_device *ibdev, u8 port,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
|
||||
ibdev.dev);
|
||||
@ -382,9 +382,10 @@ static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
|
||||
return sprintf(buf, "%d\n",
|
||||
CHELSIO_CHIP_RELEASE(c4iw_dev->rdev.lldi.adapter_type));
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
|
||||
ibdev.dev);
|
||||
@ -395,9 +396,10 @@ static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
|
||||
lldev->ethtool_ops->get_drvinfo(lldev, &info);
|
||||
return sprintf(buf, "%s\n", info.driver);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_board(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
|
||||
ibdev.dev);
|
||||
@ -405,6 +407,7 @@ static ssize_t show_board(struct device *dev, struct device_attribute *attr,
|
||||
return sprintf(buf, "%x.%x\n", c4iw_dev->rdev.lldi.pdev->vendor,
|
||||
c4iw_dev->rdev.lldi.pdev->device);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
enum counters {
|
||||
IP4INSEGS,
|
||||
@ -461,14 +464,15 @@ static int c4iw_get_mib(struct ib_device *ibdev,
|
||||
return stats->num_counters;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static struct attribute *c4iw_class_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *c4iw_class_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id,
|
||||
static const struct attribute_group c4iw_attr_group = {
|
||||
.attrs = c4iw_class_attributes,
|
||||
};
|
||||
|
||||
static int c4iw_port_immutable(struct ib_device *ibdev, u8 port_num,
|
||||
@ -530,7 +534,6 @@ static int fill_res_entry(struct sk_buff *msg, struct rdma_restrack_entry *res)
|
||||
void c4iw_register_device(struct work_struct *work)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
struct uld_ctx *ctx = container_of(work, struct uld_ctx, reg_work);
|
||||
struct c4iw_dev *dev = ctx->dev;
|
||||
|
||||
@ -625,20 +628,13 @@ void c4iw_register_device(struct work_struct *work)
|
||||
memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,
|
||||
sizeof(dev->ibdev.iwcm->ifname));
|
||||
|
||||
rdma_set_device_sysfs_group(&dev->ibdev, &c4iw_attr_group);
|
||||
dev->ibdev.driver_id = RDMA_DRIVER_CXGB4;
|
||||
ret = ib_register_device(&dev->ibdev, "cxgb4_%d", NULL);
|
||||
if (ret)
|
||||
goto err_kfree_iwcm;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(c4iw_class_attributes); ++i) {
|
||||
ret = device_create_file(&dev->ibdev.dev,
|
||||
c4iw_class_attributes[i]);
|
||||
if (ret)
|
||||
goto err_unregister_device;
|
||||
}
|
||||
return;
|
||||
err_unregister_device:
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
|
||||
err_kfree_iwcm:
|
||||
kfree(dev->ibdev.iwcm);
|
||||
err_dealloc_ctx:
|
||||
@ -650,12 +646,7 @@ void c4iw_register_device(struct work_struct *work)
|
||||
|
||||
void c4iw_unregister_device(struct c4iw_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
pr_debug("c4iw_dev %p\n", dev);
|
||||
for (i = 0; i < ARRAY_SIZE(c4iw_class_attributes); ++i)
|
||||
device_remove_file(&dev->ibdev.dev,
|
||||
c4iw_class_attributes[i]);
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
kfree(dev->ibdev.iwcm);
|
||||
return;
|
||||
|
@ -1968,6 +1968,7 @@ static inline u32 get_rcvhdrtail(const struct hfi1_ctxtdata *rcd)
|
||||
*/
|
||||
|
||||
extern const char ib_hfi1_version[];
|
||||
extern const struct attribute_group ib_hfi1_attr_group;
|
||||
|
||||
int hfi1_device_create(struct hfi1_devdata *dd);
|
||||
void hfi1_device_remove(struct hfi1_devdata *dd);
|
||||
|
@ -494,17 +494,18 @@ static struct kobj_type hfi1_vl2mtu_ktype = {
|
||||
* Start of per-unit (or driver, in some cases, but replicated
|
||||
* per unit) functions (these get a device *)
|
||||
*/
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
|
||||
|
||||
return sprintf(buf, "%x\n", dd_from_dev(dev)->minrev);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_hfi(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
|
||||
@ -517,8 +518,9 @@ static ssize_t show_hfi(struct device *device, struct device_attribute *attr,
|
||||
ret = scnprintf(buf, PAGE_SIZE, "%s\n", dd->boardname);
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static ssize_t show_boardversion(struct device *device,
|
||||
static ssize_t boardversion_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
@ -528,8 +530,9 @@ static ssize_t show_boardversion(struct device *device,
|
||||
/* The string printed here is already newline-terminated. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%s", dd->boardversion);
|
||||
}
|
||||
static DEVICE_ATTR_RO(boardversion);
|
||||
|
||||
static ssize_t show_nctxts(struct device *device,
|
||||
static ssize_t nctxts_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
@ -546,8 +549,9 @@ static ssize_t show_nctxts(struct device *device,
|
||||
min(dd->num_user_contexts,
|
||||
(u32)dd->sc_sizes[SC_USER].count));
|
||||
}
|
||||
static DEVICE_ATTR_RO(nctxts);
|
||||
|
||||
static ssize_t show_nfreectxts(struct device *device,
|
||||
static ssize_t nfreectxts_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
@ -557,8 +561,9 @@ static ssize_t show_nfreectxts(struct device *device,
|
||||
/* Return the number of free user ports (contexts) available. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%u\n", dd->freectxts);
|
||||
}
|
||||
static DEVICE_ATTR_RO(nfreectxts);
|
||||
|
||||
static ssize_t show_serial(struct device *device,
|
||||
static ssize_t serial_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
@ -567,8 +572,9 @@ static ssize_t show_serial(struct device *device,
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s", dd->serial);
|
||||
}
|
||||
static DEVICE_ATTR_RO(serial);
|
||||
|
||||
static ssize_t store_chip_reset(struct device *device,
|
||||
static ssize_t chip_reset_store(struct device *device,
|
||||
struct device_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
@ -586,6 +592,7 @@ static ssize_t store_chip_reset(struct device *device,
|
||||
bail:
|
||||
return ret < 0 ? ret : count;
|
||||
}
|
||||
static DEVICE_ATTR_WO(chip_reset);
|
||||
|
||||
/*
|
||||
* Convert the reported temperature from an integer (reported in
|
||||
@ -598,7 +605,7 @@ static ssize_t store_chip_reset(struct device *device,
|
||||
/*
|
||||
* Dump tempsense values, in decimal, to ease shell-scripts.
|
||||
*/
|
||||
static ssize_t show_tempsense(struct device *device,
|
||||
static ssize_t tempsense_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hfi1_ibdev *dev =
|
||||
@ -622,6 +629,7 @@ static ssize_t show_tempsense(struct device *device,
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_RO(tempsense);
|
||||
|
||||
/*
|
||||
* end of per-unit (or driver, in some cases, but replicated
|
||||
@ -629,24 +637,20 @@ static ssize_t show_tempsense(struct device *device,
|
||||
*/
|
||||
|
||||
/* start of per-unit file structures and support code */
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_hfi, NULL);
|
||||
static DEVICE_ATTR(nctxts, S_IRUGO, show_nctxts, NULL);
|
||||
static DEVICE_ATTR(nfreectxts, S_IRUGO, show_nfreectxts, NULL);
|
||||
static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL);
|
||||
static DEVICE_ATTR(boardversion, S_IRUGO, show_boardversion, NULL);
|
||||
static DEVICE_ATTR(tempsense, S_IRUGO, show_tempsense, NULL);
|
||||
static DEVICE_ATTR(chip_reset, S_IWUSR, NULL, store_chip_reset);
|
||||
static struct attribute *hfi1_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
&dev_attr_nctxts.attr,
|
||||
&dev_attr_nfreectxts.attr,
|
||||
&dev_attr_serial.attr,
|
||||
&dev_attr_boardversion.attr,
|
||||
&dev_attr_tempsense.attr,
|
||||
&dev_attr_chip_reset.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct device_attribute *hfi1_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_board_id,
|
||||
&dev_attr_nctxts,
|
||||
&dev_attr_nfreectxts,
|
||||
&dev_attr_serial,
|
||||
&dev_attr_boardversion,
|
||||
&dev_attr_tempsense,
|
||||
&dev_attr_chip_reset,
|
||||
const struct attribute_group ib_hfi1_attr_group = {
|
||||
.attrs = hfi1_attributes,
|
||||
};
|
||||
|
||||
int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num,
|
||||
@ -832,12 +836,6 @@ int hfi1_verbs_register_sysfs(struct hfi1_devdata *dd)
|
||||
struct device *class_dev = &dev->dev;
|
||||
int i, j, ret;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hfi1_attributes); ++i) {
|
||||
ret = device_create_file(&dev->dev, hfi1_attributes[i]);
|
||||
if (ret)
|
||||
goto bail;
|
||||
}
|
||||
|
||||
for (i = 0; i < dd->num_sdma; i++) {
|
||||
ret = kobject_init_and_add(&dd->per_sdma[i].kobj,
|
||||
&sde_ktype, &class_dev->kobj,
|
||||
@ -855,9 +853,6 @@ int hfi1_verbs_register_sysfs(struct hfi1_devdata *dd)
|
||||
|
||||
return 0;
|
||||
bail:
|
||||
for (i = 0; i < ARRAY_SIZE(hfi1_attributes); ++i)
|
||||
device_remove_file(&dev->dev, hfi1_attributes[i]);
|
||||
|
||||
for (i = 0; i < dd->num_sdma; i++)
|
||||
kobject_del(&dd->per_sdma[i].kobj);
|
||||
|
||||
|
@ -1751,6 +1751,9 @@ int hfi1_register_ib_device(struct hfi1_devdata *dd)
|
||||
i,
|
||||
ppd->pkeys);
|
||||
|
||||
rdma_set_device_sysfs_group(&dd->verbs_dev.rdi.ibdev,
|
||||
&ib_hfi1_attr_group);
|
||||
|
||||
ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_HFI1);
|
||||
if (ret)
|
||||
goto err_verbs_txreq;
|
||||
|
@ -2135,10 +2135,10 @@ static int i40iw_dereg_mr(struct ib_mr *ib_mr)
|
||||
}
|
||||
|
||||
/**
|
||||
* i40iw_show_rev
|
||||
* hw_rev_show
|
||||
*/
|
||||
static ssize_t i40iw_show_rev(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
static ssize_t hw_rev_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct i40iw_ib_device *iwibdev = container_of(dev,
|
||||
struct i40iw_ib_device,
|
||||
@ -2147,34 +2147,37 @@ static ssize_t i40iw_show_rev(struct device *dev,
|
||||
|
||||
return sprintf(buf, "%x\n", hw_rev);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
/**
|
||||
* i40iw_show_hca
|
||||
* hca_type_show
|
||||
*/
|
||||
static ssize_t i40iw_show_hca(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
static ssize_t hca_type_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "I40IW\n");
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
/**
|
||||
* i40iw_show_board
|
||||
* board_id_show
|
||||
*/
|
||||
static ssize_t i40iw_show_board(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%.*s\n", 32, "I40IW Board ID");
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, i40iw_show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, i40iw_show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, i40iw_show_board, NULL);
|
||||
static struct attribute *i40iw_dev_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *i40iw_dev_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id
|
||||
static const struct attribute_group i40iw_attr_group = {
|
||||
.attrs = i40iw_dev_attributes,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -2849,20 +2852,6 @@ void i40iw_port_ibevent(struct i40iw_device *iwdev)
|
||||
ib_dispatch_event(&event);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40iw_unregister_rdma_device - unregister of iwarp from IB
|
||||
* @iwibdev: rdma device ptr
|
||||
*/
|
||||
static void i40iw_unregister_rdma_device(struct i40iw_ib_device *iwibdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(i40iw_dev_attributes); ++i)
|
||||
device_remove_file(&iwibdev->ibdev.dev,
|
||||
i40iw_dev_attributes[i]);
|
||||
ib_unregister_device(&iwibdev->ibdev);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40iw_destroy_rdma_device - destroy rdma device and free resources
|
||||
* @iwibdev: IB device ptr
|
||||
@ -2872,7 +2861,7 @@ void i40iw_destroy_rdma_device(struct i40iw_ib_device *iwibdev)
|
||||
if (!iwibdev)
|
||||
return;
|
||||
|
||||
i40iw_unregister_rdma_device(iwibdev);
|
||||
ib_unregister_device(&iwibdev->ibdev);
|
||||
kfree(iwibdev->ibdev.iwcm);
|
||||
iwibdev->ibdev.iwcm = NULL;
|
||||
wait_event_timeout(iwibdev->iwdev->close_wq,
|
||||
@ -2887,32 +2876,19 @@ void i40iw_destroy_rdma_device(struct i40iw_ib_device *iwibdev)
|
||||
*/
|
||||
int i40iw_register_rdma_device(struct i40iw_device *iwdev)
|
||||
{
|
||||
int i, ret;
|
||||
int ret;
|
||||
struct i40iw_ib_device *iwibdev;
|
||||
|
||||
iwdev->iwibdev = i40iw_init_rdma_device(iwdev);
|
||||
if (!iwdev->iwibdev)
|
||||
return -ENOMEM;
|
||||
iwibdev = iwdev->iwibdev;
|
||||
|
||||
rdma_set_device_sysfs_group(&iwibdev->ibdev, &i40iw_attr_group);
|
||||
iwibdev->ibdev.driver_id = RDMA_DRIVER_I40IW;
|
||||
ret = ib_register_device(&iwibdev->ibdev, "i40iw%d", NULL);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(i40iw_dev_attributes); ++i) {
|
||||
ret =
|
||||
device_create_file(&iwibdev->ibdev.dev,
|
||||
i40iw_dev_attributes[i]);
|
||||
if (ret) {
|
||||
while (i > 0) {
|
||||
i--;
|
||||
device_remove_file(&iwibdev->ibdev.dev, i40iw_dev_attributes[i]);
|
||||
}
|
||||
ib_unregister_device(&iwibdev->ibdev);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
error:
|
||||
kfree(iwdev->iwibdev->ibdev.iwcm);
|
||||
|
@ -2039,39 +2039,43 @@ static int init_node_data(struct mlx4_ib_dev *dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx4_ib_dev *dev =
|
||||
container_of(device, struct mlx4_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "MT%d\n", dev->dev->persist->pdev->device);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx4_ib_dev *dev =
|
||||
container_of(device, struct mlx4_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%x\n", dev->dev->rev_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_board(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx4_ib_dev *dev =
|
||||
container_of(device, struct mlx4_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN,
|
||||
dev->dev->board_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static struct attribute *mlx4_class_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *mlx4_class_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id
|
||||
static const struct attribute_group mlx4_attr_group = {
|
||||
.attrs = mlx4_class_attributes,
|
||||
};
|
||||
|
||||
struct diag_counter {
|
||||
@ -2803,6 +2807,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
|
||||
if (mlx4_ib_alloc_diag_counters(ibdev))
|
||||
goto err_steer_free_bitmap;
|
||||
|
||||
rdma_set_device_sysfs_group(&ibdev->ib_dev, &mlx4_attr_group);
|
||||
ibdev->ib_dev.driver_id = RDMA_DRIVER_MLX4;
|
||||
if (ib_register_device(&ibdev->ib_dev, "mlx4_%d", NULL))
|
||||
goto err_diag_counters;
|
||||
@ -2827,12 +2832,6 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
|
||||
goto err_notif;
|
||||
}
|
||||
|
||||
for (j = 0; j < ARRAY_SIZE(mlx4_class_attributes); ++j) {
|
||||
if (device_create_file(&ibdev->ib_dev.dev,
|
||||
mlx4_class_attributes[j]))
|
||||
goto err_notif;
|
||||
}
|
||||
|
||||
ibdev->ib_active = true;
|
||||
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
|
||||
devlink_port_type_ib_set(mlx4_get_devlink_port(dev, i),
|
||||
|
@ -39,9 +39,6 @@ static const struct mlx5_ib_profile rep_profile = {
|
||||
STAGE_CREATE(MLX5_IB_STAGE_POST_IB_REG_UMR,
|
||||
mlx5_ib_stage_post_ib_reg_umr_init,
|
||||
NULL),
|
||||
STAGE_CREATE(MLX5_IB_STAGE_CLASS_ATTR,
|
||||
mlx5_ib_stage_class_attr_init,
|
||||
NULL),
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -4079,16 +4079,17 @@ static int init_node_data(struct mlx5_ib_dev *dev)
|
||||
return mlx5_query_node_guid(dev, &dev->ib_dev.node_guid);
|
||||
}
|
||||
|
||||
static ssize_t show_fw_pages(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t fw_pages_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx5_ib_dev *dev =
|
||||
container_of(device, struct mlx5_ib_dev, ib_dev.dev);
|
||||
|
||||
return sprintf(buf, "%d\n", dev->mdev->priv.fw_pages);
|
||||
}
|
||||
static DEVICE_ATTR_RO(fw_pages);
|
||||
|
||||
static ssize_t show_reg_pages(struct device *device,
|
||||
static ssize_t reg_pages_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx5_ib_dev *dev =
|
||||
@ -4096,44 +4097,47 @@ static ssize_t show_reg_pages(struct device *device,
|
||||
|
||||
return sprintf(buf, "%d\n", atomic_read(&dev->mdev->priv.reg_pages));
|
||||
}
|
||||
static DEVICE_ATTR_RO(reg_pages);
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx5_ib_dev *dev =
|
||||
container_of(device, struct mlx5_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "MT%d\n", dev->mdev->pdev->device);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx5_ib_dev *dev =
|
||||
container_of(device, struct mlx5_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%x\n", dev->mdev->rev_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_board(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mlx5_ib_dev *dev =
|
||||
container_of(device, struct mlx5_ib_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%.*s\n", MLX5_BOARD_ID_LEN,
|
||||
dev->mdev->board_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static DEVICE_ATTR(fw_pages, S_IRUGO, show_fw_pages, NULL);
|
||||
static DEVICE_ATTR(reg_pages, S_IRUGO, show_reg_pages, NULL);
|
||||
static struct attribute *mlx5_class_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
&dev_attr_fw_pages.attr,
|
||||
&dev_attr_reg_pages.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct device_attribute *mlx5_class_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id,
|
||||
&dev_attr_fw_pages,
|
||||
&dev_attr_reg_pages,
|
||||
static const struct attribute_group mlx5_attr_group = {
|
||||
.attrs = mlx5_class_attributes,
|
||||
};
|
||||
|
||||
static void pkey_change_handler(struct work_struct *work)
|
||||
@ -6112,6 +6116,7 @@ int mlx5_ib_stage_ib_reg_init(struct mlx5_ib_dev *dev)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
rdma_set_device_sysfs_group(&dev->ib_dev, &mlx5_attr_group);
|
||||
if (!mlx5_lag_is_active(dev->mdev))
|
||||
name = "mlx5_%d";
|
||||
else
|
||||
@ -6146,21 +6151,6 @@ static void mlx5_ib_stage_delay_drop_cleanup(struct mlx5_ib_dev *dev)
|
||||
cancel_delay_drop(dev);
|
||||
}
|
||||
|
||||
int mlx5_ib_stage_class_attr_init(struct mlx5_ib_dev *dev)
|
||||
{
|
||||
int err;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mlx5_class_attributes); i++) {
|
||||
err = device_create_file(&dev->ib_dev.dev,
|
||||
mlx5_class_attributes[i]);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5_ib_stage_rep_reg_init(struct mlx5_ib_dev *dev)
|
||||
{
|
||||
mlx5_ib_register_vport_reps(dev);
|
||||
@ -6268,9 +6258,6 @@ static const struct mlx5_ib_profile pf_profile = {
|
||||
STAGE_CREATE(MLX5_IB_STAGE_DELAY_DROP,
|
||||
mlx5_ib_stage_delay_drop_init,
|
||||
mlx5_ib_stage_delay_drop_cleanup),
|
||||
STAGE_CREATE(MLX5_IB_STAGE_CLASS_ATTR,
|
||||
mlx5_ib_stage_class_attr_init,
|
||||
NULL),
|
||||
};
|
||||
|
||||
static const struct mlx5_ib_profile nic_rep_profile = {
|
||||
@ -6313,9 +6300,6 @@ static const struct mlx5_ib_profile nic_rep_profile = {
|
||||
STAGE_CREATE(MLX5_IB_STAGE_POST_IB_REG_UMR,
|
||||
mlx5_ib_stage_post_ib_reg_umr_init,
|
||||
NULL),
|
||||
STAGE_CREATE(MLX5_IB_STAGE_CLASS_ATTR,
|
||||
mlx5_ib_stage_class_attr_init,
|
||||
NULL),
|
||||
STAGE_CREATE(MLX5_IB_STAGE_REP_REG,
|
||||
mlx5_ib_stage_rep_reg_init,
|
||||
mlx5_ib_stage_rep_reg_cleanup),
|
||||
|
@ -1201,7 +1201,6 @@ void mlx5_ib_stage_pre_ib_reg_umr_cleanup(struct mlx5_ib_dev *dev);
|
||||
int mlx5_ib_stage_ib_reg_init(struct mlx5_ib_dev *dev);
|
||||
void mlx5_ib_stage_ib_reg_cleanup(struct mlx5_ib_dev *dev);
|
||||
int mlx5_ib_stage_post_ib_reg_umr_init(struct mlx5_ib_dev *dev);
|
||||
int mlx5_ib_stage_class_attr_init(struct mlx5_ib_dev *dev);
|
||||
void __mlx5_ib_remove(struct mlx5_ib_dev *dev,
|
||||
const struct mlx5_ib_profile *profile,
|
||||
int stage);
|
||||
|
@ -1076,16 +1076,17 @@ static int mthca_unmap_fmr(struct list_head *fmr_list)
|
||||
return err;
|
||||
}
|
||||
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mthca_dev *dev =
|
||||
container_of(device, struct mthca_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%x\n", dev->rev_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mthca_dev *dev =
|
||||
container_of(device, struct mthca_dev, ib_dev.dev);
|
||||
@ -1103,23 +1104,26 @@ static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
return sprintf(buf, "unknown\n");
|
||||
}
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_board(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct mthca_dev *dev =
|
||||
container_of(device, struct mthca_dev, ib_dev.dev);
|
||||
return sprintf(buf, "%.*s\n", MTHCA_BOARD_ID_LEN, dev->board_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static struct attribute *mthca_dev_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *mthca_dev_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id
|
||||
static const struct attribute_group mthca_attr_group = {
|
||||
.attrs = mthca_dev_attributes,
|
||||
};
|
||||
|
||||
static int mthca_init_node_data(struct mthca_dev *dev)
|
||||
@ -1192,7 +1196,6 @@ static void get_dev_fw_str(struct ib_device *device, char *str)
|
||||
int mthca_register_device(struct mthca_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
ret = mthca_init_node_data(dev);
|
||||
if (ret)
|
||||
@ -1295,20 +1298,12 @@ int mthca_register_device(struct mthca_dev *dev)
|
||||
|
||||
mutex_init(&dev->cap_mask_mutex);
|
||||
|
||||
rdma_set_device_sysfs_group(&dev->ib_dev, &mthca_attr_group);
|
||||
dev->ib_dev.driver_id = RDMA_DRIVER_MTHCA;
|
||||
ret = ib_register_device(&dev->ib_dev, "mthca%d", NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mthca_dev_attributes); ++i) {
|
||||
ret = device_create_file(&dev->ib_dev.dev,
|
||||
mthca_dev_attributes[i]);
|
||||
if (ret) {
|
||||
ib_unregister_device(&dev->ib_dev);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
mthca_start_catas_poll(dev);
|
||||
|
||||
return 0;
|
||||
|
@ -2556,8 +2556,8 @@ static int nes_dereg_mr(struct ib_mr *ib_mr)
|
||||
/**
|
||||
* show_rev
|
||||
*/
|
||||
static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct nes_ib_device *nesibdev =
|
||||
container_of(dev, struct nes_ib_device, ibdev.dev);
|
||||
@ -2566,40 +2566,40 @@ static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
|
||||
nes_debug(NES_DBG_INIT, "\n");
|
||||
return sprintf(buf, "%x\n", nesvnic->nesdev->nesadapter->hw_rev);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
/**
|
||||
* show_hca
|
||||
*/
|
||||
static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
nes_debug(NES_DBG_INIT, "\n");
|
||||
return sprintf(buf, "NES020\n");
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
/**
|
||||
* show_board
|
||||
*/
|
||||
static ssize_t show_board(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
nes_debug(NES_DBG_INIT, "\n");
|
||||
return sprintf(buf, "%.*s\n", 32, "NES020 Board ID");
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
|
||||
static struct device_attribute *nes_dev_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id
|
||||
static struct attribute *nes_dev_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group nes_attr_group = {
|
||||
.attrs = nes_dev_attributes,
|
||||
};
|
||||
|
||||
/**
|
||||
* nes_query_qp
|
||||
@ -3794,8 +3794,9 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev)
|
||||
struct nes_vnic *nesvnic = nesibdev->nesvnic;
|
||||
struct nes_device *nesdev = nesvnic->nesdev;
|
||||
struct nes_adapter *nesadapter = nesdev->nesadapter;
|
||||
int i, ret;
|
||||
int ret;
|
||||
|
||||
rdma_set_device_sysfs_group(&nesvnic->nesibdev->ibdev, &nes_attr_group);
|
||||
nesvnic->nesibdev->ibdev.driver_id = RDMA_DRIVER_NES;
|
||||
ret = ib_register_device(&nesvnic->nesibdev->ibdev, "nes%d", NULL);
|
||||
if (ret) {
|
||||
@ -3808,19 +3809,6 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev)
|
||||
nesibdev->max_qp = (nesadapter->max_qp-NES_FIRST_QPN) / nesadapter->port_count;
|
||||
nesibdev->max_pd = nesadapter->max_pd / nesadapter->port_count;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(nes_dev_attributes); ++i) {
|
||||
ret = device_create_file(&nesibdev->ibdev.dev, nes_dev_attributes[i]);
|
||||
if (ret) {
|
||||
while (i > 0) {
|
||||
i--;
|
||||
device_remove_file(&nesibdev->ibdev.dev,
|
||||
nes_dev_attributes[i]);
|
||||
}
|
||||
ib_unregister_device(&nesibdev->ibdev);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
nesvnic->of_device_registered = 1;
|
||||
|
||||
return 0;
|
||||
@ -3833,15 +3821,9 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev)
|
||||
static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev)
|
||||
{
|
||||
struct nes_vnic *nesvnic = nesibdev->nesvnic;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(nes_dev_attributes); ++i) {
|
||||
device_remove_file(&nesibdev->ibdev.dev, nes_dev_attributes[i]);
|
||||
}
|
||||
|
||||
if (nesvnic->of_device_registered) {
|
||||
if (nesvnic->of_device_registered)
|
||||
ib_unregister_device(&nesibdev->ibdev);
|
||||
}
|
||||
|
||||
nesvnic->of_device_registered = 0;
|
||||
}
|
||||
|
@ -114,6 +114,35 @@ static void get_dev_fw_str(struct ib_device *device, char *str)
|
||||
snprintf(str, IB_FW_VERSION_NAME_MAX, "%s", &dev->attr.fw_ver[0]);
|
||||
}
|
||||
|
||||
/* OCRDMA sysfs interface */
|
||||
static ssize_t hw_rev_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct ocrdma_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->nic_info.pdev->vendor);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct ocrdma_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", &dev->model_number[0]);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static struct attribute *ocrdma_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group ocrdma_attr_group = {
|
||||
.attrs = ocrdma_attributes,
|
||||
};
|
||||
|
||||
static int ocrdma_register_device(struct ocrdma_dev *dev)
|
||||
{
|
||||
ocrdma_get_guid(dev, (u8 *)&dev->ibdev.node_guid);
|
||||
@ -212,6 +241,7 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
|
||||
dev->ibdev.destroy_srq = ocrdma_destroy_srq;
|
||||
dev->ibdev.post_srq_recv = ocrdma_post_srq_recv;
|
||||
}
|
||||
rdma_set_device_sysfs_group(&dev->ibdev, &ocrdma_attr_group);
|
||||
dev->ibdev.driver_id = RDMA_DRIVER_OCRDMA;
|
||||
return ib_register_device(&dev->ibdev, "ocrdma%d", NULL);
|
||||
}
|
||||
@ -259,42 +289,9 @@ static void ocrdma_free_resources(struct ocrdma_dev *dev)
|
||||
kfree(dev->cq_tbl);
|
||||
}
|
||||
|
||||
/* OCRDMA sysfs interface */
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct ocrdma_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->nic_info.pdev->vendor);
|
||||
}
|
||||
|
||||
static ssize_t show_hca_type(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct ocrdma_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", &dev->model_number[0]);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca_type, NULL);
|
||||
|
||||
static struct device_attribute *ocrdma_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type
|
||||
};
|
||||
|
||||
static void ocrdma_remove_sysfiles(struct ocrdma_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ocrdma_attributes); i++)
|
||||
device_remove_file(&dev->ibdev.dev, ocrdma_attributes[i]);
|
||||
}
|
||||
|
||||
static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
|
||||
{
|
||||
int status = 0, i;
|
||||
int status = 0;
|
||||
u8 lstate = 0;
|
||||
struct ocrdma_dev *dev;
|
||||
|
||||
@ -330,9 +327,6 @@ static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
|
||||
if (!status)
|
||||
ocrdma_update_link_state(dev, lstate);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ocrdma_attributes); i++)
|
||||
if (device_create_file(&dev->ibdev.dev, ocrdma_attributes[i]))
|
||||
goto sysfs_err;
|
||||
/* Init stats */
|
||||
ocrdma_add_port_stats(dev);
|
||||
/* Interrupt Moderation */
|
||||
@ -347,8 +341,6 @@ static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
|
||||
dev_name(&dev->nic_info.pdev->dev), dev->id);
|
||||
return dev;
|
||||
|
||||
sysfs_err:
|
||||
ocrdma_remove_sysfiles(dev);
|
||||
alloc_err:
|
||||
ocrdma_free_resources(dev);
|
||||
ocrdma_cleanup_hw(dev);
|
||||
@ -375,7 +367,6 @@ static void ocrdma_remove(struct ocrdma_dev *dev)
|
||||
* of the registered clients.
|
||||
*/
|
||||
cancel_delayed_work_sync(&dev->eqd_work);
|
||||
ocrdma_remove_sysfiles(dev);
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
|
||||
ocrdma_rem_port_stats(dev);
|
||||
|
@ -133,6 +133,33 @@ static int qedr_iw_port_immutable(struct ib_device *ibdev, u8 port_num,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* QEDR sysfs interface */
|
||||
static ssize_t hw_rev_show(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct qedr_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->pdev->vendor);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", "HCA_TYPE_TO_SET");
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static struct attribute *qedr_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group qedr_attr_group = {
|
||||
.attrs = qedr_attributes,
|
||||
};
|
||||
|
||||
static int qedr_iw_register_device(struct qedr_dev *dev)
|
||||
{
|
||||
dev->ibdev.node_type = RDMA_NODE_RNIC;
|
||||
@ -260,7 +287,7 @@ static int qedr_register_device(struct qedr_dev *dev)
|
||||
|
||||
dev->ibdev.get_link_layer = qedr_link_layer;
|
||||
dev->ibdev.get_dev_fw_str = qedr_get_dev_fw_str;
|
||||
|
||||
rdma_set_device_sysfs_group(&dev->ibdev, &qedr_attr_group);
|
||||
dev->ibdev.driver_id = RDMA_DRIVER_QEDR;
|
||||
return ib_register_device(&dev->ibdev, "qedr%d", NULL);
|
||||
}
|
||||
@ -402,37 +429,6 @@ static int qedr_alloc_resources(struct qedr_dev *dev)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* QEDR sysfs interface */
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct qedr_dev *dev = dev_get_drvdata(device);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->pdev->vendor);
|
||||
}
|
||||
|
||||
static ssize_t show_hca_type(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", "HCA_TYPE_TO_SET");
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca_type, NULL);
|
||||
|
||||
static struct device_attribute *qedr_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type
|
||||
};
|
||||
|
||||
static void qedr_remove_sysfiles(struct qedr_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(qedr_attributes); i++)
|
||||
device_remove_file(&dev->ibdev.dev, qedr_attributes[i]);
|
||||
}
|
||||
|
||||
static void qedr_pci_set_atomic(struct qedr_dev *dev, struct pci_dev *pdev)
|
||||
{
|
||||
int rc = pci_enable_atomic_ops_to_root(pdev,
|
||||
@ -853,7 +849,7 @@ static struct qedr_dev *qedr_add(struct qed_dev *cdev, struct pci_dev *pdev,
|
||||
{
|
||||
struct qed_dev_rdma_info dev_info;
|
||||
struct qedr_dev *dev;
|
||||
int rc = 0, i;
|
||||
int rc = 0;
|
||||
|
||||
dev = (struct qedr_dev *)ib_alloc_device(sizeof(*dev));
|
||||
if (!dev) {
|
||||
@ -912,18 +908,12 @@ static struct qedr_dev *qedr_add(struct qed_dev *cdev, struct pci_dev *pdev,
|
||||
goto reg_err;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(qedr_attributes); i++)
|
||||
if (device_create_file(&dev->ibdev.dev, qedr_attributes[i]))
|
||||
goto sysfs_err;
|
||||
|
||||
if (!test_and_set_bit(QEDR_ENET_STATE_BIT, &dev->enet_state))
|
||||
qedr_ib_dispatch_event(dev, QEDR_PORT, IB_EVENT_PORT_ACTIVE);
|
||||
|
||||
DP_DEBUG(dev, QEDR_MSG_INIT, "qedr driver loaded successfully\n");
|
||||
return dev;
|
||||
|
||||
sysfs_err:
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
reg_err:
|
||||
qedr_sync_free_irqs(dev);
|
||||
irq_err:
|
||||
@ -942,7 +932,6 @@ static void qedr_remove(struct qedr_dev *dev)
|
||||
/* First unregister with stack to stop all the active traffic
|
||||
* of the registered clients.
|
||||
*/
|
||||
qedr_remove_sysfiles(dev);
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
|
||||
qedr_stop_hw(dev);
|
||||
|
@ -1390,13 +1390,13 @@ static inline u32 qib_get_hdrqtail(const struct qib_ctxtdata *rcd)
|
||||
*/
|
||||
|
||||
extern const char ib_qib_version[];
|
||||
extern const struct attribute_group qib_attr_group;
|
||||
|
||||
int qib_device_create(struct qib_devdata *);
|
||||
void qib_device_remove(struct qib_devdata *);
|
||||
|
||||
int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
|
||||
struct kobject *kobj);
|
||||
int qib_verbs_register_sysfs(struct qib_devdata *);
|
||||
void qib_verbs_unregister_sysfs(struct qib_devdata *);
|
||||
/* Hook for sysfs read of QSFP */
|
||||
extern int qib_qsfp_dump(struct qib_pportdata *ppd, char *buf, int len);
|
||||
|
@ -551,17 +551,18 @@ static struct kobj_type qib_diagc_ktype = {
|
||||
* Start of per-unit (or driver, in some cases, but replicated
|
||||
* per unit) functions (these get a device *)
|
||||
*/
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
container_of(device, struct qib_ibdev, rdi.ibdev.dev);
|
||||
|
||||
return sprintf(buf, "%x\n", dd_from_dev(dev)->minrev);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
container_of(device, struct qib_ibdev, rdi.ibdev.dev);
|
||||
@ -574,15 +575,18 @@ static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
ret = scnprintf(buf, PAGE_SIZE, "%s\n", dd->boardname);
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
static DEVICE_ATTR(board_id, 0444, hca_type_show, NULL);
|
||||
|
||||
static ssize_t show_version(struct device *device,
|
||||
static ssize_t version_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
/* The string printed here is already newline-terminated. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%s", (char *)ib_qib_version);
|
||||
}
|
||||
static DEVICE_ATTR_RO(version);
|
||||
|
||||
static ssize_t show_boardversion(struct device *device,
|
||||
static ssize_t boardversion_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
@ -592,9 +596,9 @@ static ssize_t show_boardversion(struct device *device,
|
||||
/* The string printed here is already newline-terminated. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%s", dd->boardversion);
|
||||
}
|
||||
static DEVICE_ATTR_RO(boardversion);
|
||||
|
||||
|
||||
static ssize_t show_localbus_info(struct device *device,
|
||||
static ssize_t localbus_info_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
@ -604,9 +608,9 @@ static ssize_t show_localbus_info(struct device *device,
|
||||
/* The string printed here is already newline-terminated. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%s", dd->lbus_info);
|
||||
}
|
||||
static DEVICE_ATTR_RO(localbus_info);
|
||||
|
||||
|
||||
static ssize_t show_nctxts(struct device *device,
|
||||
static ssize_t nctxts_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
@ -620,9 +624,10 @@ static ssize_t show_nctxts(struct device *device,
|
||||
(dd->first_user_ctxt > dd->cfgctxts) ? 0 :
|
||||
(dd->cfgctxts - dd->first_user_ctxt));
|
||||
}
|
||||
static DEVICE_ATTR_RO(nctxts);
|
||||
|
||||
static ssize_t show_nfreectxts(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
static ssize_t nfreectxts_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
container_of(device, struct qib_ibdev, rdi.ibdev.dev);
|
||||
@ -631,8 +636,9 @@ static ssize_t show_nfreectxts(struct device *device,
|
||||
/* Return the number of free user ports (contexts) available. */
|
||||
return scnprintf(buf, PAGE_SIZE, "%u\n", dd->freectxts);
|
||||
}
|
||||
static DEVICE_ATTR_RO(nfreectxts);
|
||||
|
||||
static ssize_t show_serial(struct device *device,
|
||||
static ssize_t serial_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
@ -644,8 +650,9 @@ static ssize_t show_serial(struct device *device,
|
||||
strcat(buf, "\n");
|
||||
return strlen(buf);
|
||||
}
|
||||
static DEVICE_ATTR_RO(serial);
|
||||
|
||||
static ssize_t store_chip_reset(struct device *device,
|
||||
static ssize_t chip_reset_store(struct device *device,
|
||||
struct device_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
@ -663,11 +670,12 @@ static ssize_t store_chip_reset(struct device *device,
|
||||
bail:
|
||||
return ret < 0 ? ret : count;
|
||||
}
|
||||
static DEVICE_ATTR_WO(chip_reset);
|
||||
|
||||
/*
|
||||
* Dump tempsense regs. in decimal, to ease shell-scripts.
|
||||
*/
|
||||
static ssize_t show_tempsense(struct device *device,
|
||||
static ssize_t tempsense_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct qib_ibdev *dev =
|
||||
@ -695,6 +703,7 @@ static ssize_t show_tempsense(struct device *device,
|
||||
*(signed char *)(regvals + 7));
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_RO(tempsense);
|
||||
|
||||
/*
|
||||
* end of per-unit (or driver, in some cases, but replicated
|
||||
@ -702,30 +711,23 @@ static ssize_t show_tempsense(struct device *device,
|
||||
*/
|
||||
|
||||
/* start of per-unit file structures and support code */
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(version, S_IRUGO, show_version, NULL);
|
||||
static DEVICE_ATTR(nctxts, S_IRUGO, show_nctxts, NULL);
|
||||
static DEVICE_ATTR(nfreectxts, S_IRUGO, show_nfreectxts, NULL);
|
||||
static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL);
|
||||
static DEVICE_ATTR(boardversion, S_IRUGO, show_boardversion, NULL);
|
||||
static DEVICE_ATTR(tempsense, S_IRUGO, show_tempsense, NULL);
|
||||
static DEVICE_ATTR(localbus_info, S_IRUGO, show_localbus_info, NULL);
|
||||
static DEVICE_ATTR(chip_reset, S_IWUSR, NULL, store_chip_reset);
|
||||
static struct attribute *qib_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
&dev_attr_version.attr,
|
||||
&dev_attr_nctxts.attr,
|
||||
&dev_attr_nfreectxts.attr,
|
||||
&dev_attr_serial.attr,
|
||||
&dev_attr_boardversion.attr,
|
||||
&dev_attr_tempsense.attr,
|
||||
&dev_attr_localbus_info.attr,
|
||||
&dev_attr_chip_reset.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct device_attribute *qib_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id,
|
||||
&dev_attr_version,
|
||||
&dev_attr_nctxts,
|
||||
&dev_attr_nfreectxts,
|
||||
&dev_attr_serial,
|
||||
&dev_attr_boardversion,
|
||||
&dev_attr_tempsense,
|
||||
&dev_attr_localbus_info,
|
||||
&dev_attr_chip_reset,
|
||||
const struct attribute_group qib_attr_group = {
|
||||
.attrs = qib_attributes,
|
||||
};
|
||||
|
||||
int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
|
||||
@ -826,27 +828,6 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register and create our files in /sys/class/infiniband.
|
||||
*/
|
||||
int qib_verbs_register_sysfs(struct qib_devdata *dd)
|
||||
{
|
||||
struct ib_device *dev = &dd->verbs_dev.rdi.ibdev;
|
||||
int i, ret;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i) {
|
||||
ret = device_create_file(&dev->dev, qib_attributes[i]);
|
||||
if (ret)
|
||||
goto bail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
bail:
|
||||
for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i)
|
||||
device_remove_file(&dev->dev, qib_attributes[i]);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Unregister and remove our files in /sys/class/infiniband.
|
||||
*/
|
||||
|
@ -1625,19 +1625,14 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
||||
i,
|
||||
dd->rcd[ctxt]->pkeys);
|
||||
}
|
||||
rdma_set_device_sysfs_group(&dd->verbs_dev.rdi.ibdev, &qib_attr_group);
|
||||
|
||||
ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_QIB);
|
||||
if (ret)
|
||||
goto err_tx;
|
||||
|
||||
ret = qib_verbs_register_sysfs(dd);
|
||||
if (ret)
|
||||
goto err_class;
|
||||
|
||||
return ret;
|
||||
|
||||
err_class:
|
||||
rvt_unregister_device(&dd->verbs_dev.rdi);
|
||||
err_tx:
|
||||
while (!list_empty(&dev->txreq_free)) {
|
||||
struct list_head *l = dev->txreq_free.next;
|
||||
|
@ -417,6 +417,8 @@ static void *usnic_ib_device_add(struct pci_dev *dev)
|
||||
|
||||
|
||||
us_ibdev->ib_dev.driver_id = RDMA_DRIVER_USNIC;
|
||||
rdma_set_device_sysfs_group(&us_ibdev->ib_dev, &usnic_attr_group);
|
||||
|
||||
if (ib_register_device(&us_ibdev->ib_dev, "usnic_%d", NULL))
|
||||
goto err_fwd_dealloc;
|
||||
|
||||
|
@ -46,9 +46,8 @@
|
||||
#include "usnic_ib_sysfs.h"
|
||||
#include "usnic_log.h"
|
||||
|
||||
static ssize_t usnic_ib_show_board(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev =
|
||||
container_of(device, struct usnic_ib_dev, ib_dev.dev);
|
||||
@ -60,13 +59,13 @@ static ssize_t usnic_ib_show_board(struct device *device,
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%hu\n", subsystem_device_id);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
/*
|
||||
* Report the configuration for this PF
|
||||
*/
|
||||
static ssize_t
|
||||
usnic_ib_show_config(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
config_show(struct device *device, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev;
|
||||
char *ptr;
|
||||
@ -126,10 +125,10 @@ usnic_ib_show_config(struct device *device, struct device_attribute *attr,
|
||||
|
||||
return ptr - buf;
|
||||
}
|
||||
static DEVICE_ATTR_RO(config);
|
||||
|
||||
static ssize_t
|
||||
usnic_ib_show_iface(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
iface_show(struct device *device, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev;
|
||||
|
||||
@ -138,10 +137,10 @@ usnic_ib_show_iface(struct device *device, struct device_attribute *attr,
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n",
|
||||
netdev_name(us_ibdev->netdev));
|
||||
}
|
||||
static DEVICE_ATTR_RO(iface);
|
||||
|
||||
static ssize_t
|
||||
usnic_ib_show_max_vf(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
max_vf_show(struct device *device, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev;
|
||||
|
||||
@ -150,10 +149,10 @@ usnic_ib_show_max_vf(struct device *device, struct device_attribute *attr,
|
||||
return scnprintf(buf, PAGE_SIZE, "%u\n",
|
||||
kref_read(&us_ibdev->vf_cnt));
|
||||
}
|
||||
static DEVICE_ATTR_RO(max_vf);
|
||||
|
||||
static ssize_t
|
||||
usnic_ib_show_qp_per_vf(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
qp_per_vf_show(struct device *device, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev;
|
||||
int qp_per_vf;
|
||||
@ -165,10 +164,10 @@ usnic_ib_show_qp_per_vf(struct device *device, struct device_attribute *attr,
|
||||
return scnprintf(buf, PAGE_SIZE,
|
||||
"%d\n", qp_per_vf);
|
||||
}
|
||||
static DEVICE_ATTR_RO(qp_per_vf);
|
||||
|
||||
static ssize_t
|
||||
usnic_ib_show_cq_per_vf(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
cq_per_vf_show(struct device *device, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usnic_ib_dev *us_ibdev;
|
||||
|
||||
@ -177,21 +176,20 @@ usnic_ib_show_cq_per_vf(struct device *device, struct device_attribute *attr,
|
||||
return scnprintf(buf, PAGE_SIZE, "%d\n",
|
||||
us_ibdev->vf_res_cnt[USNIC_VNIC_RES_TYPE_CQ]);
|
||||
}
|
||||
static DEVICE_ATTR_RO(cq_per_vf);
|
||||
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, usnic_ib_show_board, NULL);
|
||||
static DEVICE_ATTR(config, S_IRUGO, usnic_ib_show_config, NULL);
|
||||
static DEVICE_ATTR(iface, S_IRUGO, usnic_ib_show_iface, NULL);
|
||||
static DEVICE_ATTR(max_vf, S_IRUGO, usnic_ib_show_max_vf, NULL);
|
||||
static DEVICE_ATTR(qp_per_vf, S_IRUGO, usnic_ib_show_qp_per_vf, NULL);
|
||||
static DEVICE_ATTR(cq_per_vf, S_IRUGO, usnic_ib_show_cq_per_vf, NULL);
|
||||
static struct attribute *usnic_class_attributes[] = {
|
||||
&dev_attr_board_id.attr,
|
||||
&dev_attr_config.attr,
|
||||
&dev_attr_iface.attr,
|
||||
&dev_attr_max_vf.attr,
|
||||
&dev_attr_qp_per_vf.attr,
|
||||
&dev_attr_cq_per_vf.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct device_attribute *usnic_class_attributes[] = {
|
||||
&dev_attr_board_id,
|
||||
&dev_attr_config,
|
||||
&dev_attr_iface,
|
||||
&dev_attr_max_vf,
|
||||
&dev_attr_qp_per_vf,
|
||||
&dev_attr_cq_per_vf,
|
||||
const struct attribute_group usnic_attr_group = {
|
||||
.attrs = usnic_class_attributes,
|
||||
};
|
||||
|
||||
struct qpn_attribute {
|
||||
@ -278,18 +276,6 @@ static struct kobj_type usnic_ib_qpn_type = {
|
||||
|
||||
int usnic_ib_sysfs_register_usdev(struct usnic_ib_dev *us_ibdev)
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
for (i = 0; i < ARRAY_SIZE(usnic_class_attributes); ++i) {
|
||||
err = device_create_file(&us_ibdev->ib_dev.dev,
|
||||
usnic_class_attributes[i]);
|
||||
if (err) {
|
||||
usnic_err("Failed to create device file %d for %s eith err %d",
|
||||
i, dev_name(&us_ibdev->ib_dev.dev), err);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* create kernel object for looking at individual QPs */
|
||||
kobject_get(&us_ibdev->ib_dev.dev.kobj);
|
||||
us_ibdev->qpn_kobj = kobject_create_and_add("qpn",
|
||||
@ -304,12 +290,6 @@ int usnic_ib_sysfs_register_usdev(struct usnic_ib_dev *us_ibdev)
|
||||
|
||||
void usnic_ib_sysfs_unregister_usdev(struct usnic_ib_dev *us_ibdev)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(usnic_class_attributes); ++i) {
|
||||
device_remove_file(&us_ibdev->ib_dev.dev,
|
||||
usnic_class_attributes[i]);
|
||||
}
|
||||
|
||||
kobject_put(us_ibdev->qpn_kobj);
|
||||
}
|
||||
|
||||
|
@ -41,4 +41,6 @@ void usnic_ib_sysfs_unregister_usdev(struct usnic_ib_dev *us_ibdev);
|
||||
void usnic_ib_sysfs_qpn_add(struct usnic_ib_qp_grp *qp_grp);
|
||||
void usnic_ib_sysfs_qpn_remove(struct usnic_ib_qp_grp *qp_grp);
|
||||
|
||||
extern const struct attribute_group usnic_attr_group;
|
||||
|
||||
#endif /* !USNIC_IB_SYSFS_H_ */
|
||||
|
@ -65,32 +65,36 @@ static struct workqueue_struct *event_wq;
|
||||
static int pvrdma_add_gid(const struct ib_gid_attr *attr, void **context);
|
||||
static int pvrdma_del_gid(const struct ib_gid_attr *attr, void **context);
|
||||
|
||||
static ssize_t show_hca(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hca_type_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "VMW_PVRDMA-%s\n", DRV_VERSION);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
|
||||
static ssize_t show_rev(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t hw_rev_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%d\n", PVRDMA_REV_ID);
|
||||
}
|
||||
static DEVICE_ATTR_RO(hw_rev);
|
||||
|
||||
static ssize_t show_board(struct device *device, struct device_attribute *attr,
|
||||
char *buf)
|
||||
static ssize_t board_id_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%d\n", PVRDMA_BOARD_ID);
|
||||
}
|
||||
static DEVICE_ATTR_RO(board_id);
|
||||
|
||||
static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL);
|
||||
static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL);
|
||||
static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL);
|
||||
static struct attribute *pvrdma_class_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct device_attribute *pvrdma_class_attributes[] = {
|
||||
&dev_attr_hw_rev,
|
||||
&dev_attr_hca_type,
|
||||
&dev_attr_board_id
|
||||
static const struct attribute_group pvrdma_attr_group = {
|
||||
.attrs = pvrdma_class_attributes,
|
||||
};
|
||||
|
||||
static void pvrdma_get_fw_ver_str(struct ib_device *device, char *str)
|
||||
@ -160,7 +164,6 @@ static struct net_device *pvrdma_get_netdev(struct ib_device *ibdev,
|
||||
static int pvrdma_register_device(struct pvrdma_dev *dev)
|
||||
{
|
||||
int ret = -1;
|
||||
int i = 0;
|
||||
|
||||
dev->ib_dev.node_guid = dev->dsr->caps.node_guid;
|
||||
dev->sys_image_guid = dev->dsr->caps.sys_image_guid;
|
||||
@ -265,24 +268,16 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
|
||||
}
|
||||
dev->ib_dev.driver_id = RDMA_DRIVER_VMW_PVRDMA;
|
||||
spin_lock_init(&dev->srq_tbl_lock);
|
||||
rdma_set_device_sysfs_group(&dev->ib_dev, &pvrdma_attr_group);
|
||||
|
||||
ret = ib_register_device(&dev->ib_dev, "vmw_pvrdma%d", NULL);
|
||||
if (ret)
|
||||
goto err_srq_free;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pvrdma_class_attributes); ++i) {
|
||||
ret = device_create_file(&dev->ib_dev.dev,
|
||||
pvrdma_class_attributes[i]);
|
||||
if (ret)
|
||||
goto err_class;
|
||||
}
|
||||
|
||||
dev->ib_active = true;
|
||||
|
||||
return 0;
|
||||
|
||||
err_class:
|
||||
ib_unregister_device(&dev->ib_dev);
|
||||
err_srq_free:
|
||||
kfree(dev->srq_tbl);
|
||||
err_qp_free:
|
||||
|
@ -1148,14 +1148,18 @@ static ssize_t parent_show(struct device *device,
|
||||
|
||||
static DEVICE_ATTR_RO(parent);
|
||||
|
||||
static struct device_attribute *rxe_dev_attributes[] = {
|
||||
&dev_attr_parent,
|
||||
static struct attribute *rxe_dev_attributes[] = {
|
||||
&dev_attr_parent.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group rxe_attr_group = {
|
||||
.attrs = rxe_dev_attributes,
|
||||
};
|
||||
|
||||
int rxe_register_device(struct rxe_dev *rxe)
|
||||
{
|
||||
int err;
|
||||
int i;
|
||||
struct ib_device *dev = &rxe->ib_dev;
|
||||
struct crypto_shash *tfm;
|
||||
|
||||
@ -1259,6 +1263,7 @@ int rxe_register_device(struct rxe_dev *rxe)
|
||||
}
|
||||
rxe->tfm = tfm;
|
||||
|
||||
rdma_set_device_sysfs_group(dev, &rxe_attr_group);
|
||||
dev->driver_id = RDMA_DRIVER_RXE;
|
||||
err = ib_register_device(dev, "rxe%d", NULL);
|
||||
if (err) {
|
||||
@ -1266,19 +1271,8 @@ int rxe_register_device(struct rxe_dev *rxe)
|
||||
goto err1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rxe_dev_attributes); ++i) {
|
||||
err = device_create_file(&dev->dev, rxe_dev_attributes[i]);
|
||||
if (err) {
|
||||
pr_warn("%s failed with error %d for attr number %d\n",
|
||||
__func__, err, i);
|
||||
goto err2;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
ib_unregister_device(dev);
|
||||
err1:
|
||||
crypto_free_shash(rxe->tfm);
|
||||
|
||||
@ -1287,12 +1281,8 @@ int rxe_register_device(struct rxe_dev *rxe)
|
||||
|
||||
int rxe_unregister_device(struct rxe_dev *rxe)
|
||||
{
|
||||
int i;
|
||||
struct ib_device *dev = &rxe->ib_dev;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rxe_dev_attributes); ++i)
|
||||
device_remove_file(&dev->dev, rxe_dev_attributes[i]);
|
||||
|
||||
ib_unregister_device(dev);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user