From: Ralph Campbell <ralph.campbell-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
To: Roland Dreier <rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH v3 52/52] IB/core: allow HCAs to create IB port sysfs files
Date: Thu, 06 May 2010 17:03:25 -0700 [thread overview]
Message-ID: <20100507000325.3441.85248.stgit@chromite.mv.qlogic.com> (raw)
In-Reply-To: <20100506235849.3441.85930.stgit-/vjeY7uYZjrPXfVEPVhPGq6RkeBMCJyt@public.gmane.org>
This patch adds a new parameter to ib_register_device() so that
HCAs can create files in /sys/class/infiniband/<hca>/ports/<N>/.
There is no need for an unregister function since the kobject
reference will go to zero when ib_unregister_device() is called.
Signed-off-by: Ralph Campbell <ralph.campbell-h88ZbnxC6KDQT0dZR+AlfA@public.gmane.org>
---
drivers/infiniband/core/core_priv.h | 2 +-
drivers/infiniband/core/device.c | 4 ++--
drivers/infiniband/core/sysfs.c | 24 +++++++++++++++++++++++-
drivers/infiniband/hw/amso1100/c2_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 2 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
include/rdma/ib_verbs.h | 5 ++++-
11 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
index 05ac36e..e70c809 100644
--- a/drivers/infiniband/core/core_priv.h
+++ b/drivers/infiniband/core/core_priv.h
@@ -38,7 +38,7 @@
#include <rdma/ib_verbs.h>
-int ib_device_register_sysfs(struct ib_device *device);
+int ib_device_register_sysfs(struct ib_device *device, sysfs_cb cb);
void ib_device_unregister_sysfs(struct ib_device *device);
int ib_sysfs_setup(void);
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index d1fba41..9ef8093 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -267,7 +267,7 @@ out:
* callback for each device that is added. @device must be allocated
* with ib_alloc_device().
*/
-int ib_register_device(struct ib_device *device)
+int ib_register_device(struct ib_device *device, sysfs_cb cb)
{
int ret;
@@ -296,7 +296,7 @@ int ib_register_device(struct ib_device *device)
goto out;
}
- ret = ib_device_register_sysfs(device);
+ ret = ib_device_register_sysfs(device, cb);
if (ret) {
printk(KERN_WARNING "Couldn't register device %s with driver model\n",
device->name);
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index f901957..a47bac8 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -754,7 +754,23 @@ static struct attribute_group iw_stats_group = {
.attrs = iw_proto_stats_attrs,
};
-int ib_device_register_sysfs(struct ib_device *device)
+static int sysfs_create_port_files(struct ib_device *device, sysfs_cb cb)
+{
+ struct kobject *p;
+ struct ib_port *port;
+ int ret = 0;
+
+ list_for_each_entry(p, &device->port_list, entry) {
+ port = container_of(p, struct ib_port, kobj);
+ ret = cb(device, port->port_num, &port->kobj);
+ if (ret)
+ break;
+ }
+
+ return ret;
+}
+
+int ib_device_register_sysfs(struct ib_device *device, sysfs_cb cb)
{
struct device *class_dev = &device->dev;
int ret;
@@ -802,6 +818,12 @@ int ib_device_register_sysfs(struct ib_device *device)
goto err_put;
}
+ if (cb) {
+ ret = sysfs_create_port_files(device, cb);
+ if (ret)
+ goto err_put;
+ }
+
return 0;
err_put:
diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c
index ad723bd..d128386 100644
--- a/drivers/infiniband/hw/amso1100/c2_provider.c
+++ b/drivers/infiniband/hw/amso1100/c2_provider.c
@@ -864,7 +864,7 @@ int c2_register_device(struct c2_dev *dev)
dev->ibdev.iwcm->create_listen = c2_service_create;
dev->ibdev.iwcm->destroy_listen = c2_service_destroy;
- ret = ib_register_device(&dev->ibdev);
+ ret = ib_register_device(&dev->ibdev, NULL);
if (ret)
goto out_free_iwcm;
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index 47b35c6..26f22ec 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -1427,7 +1427,7 @@ int iwch_register_device(struct iwch_dev *dev)
dev->ibdev.iwcm->rem_ref = iwch_qp_rem_ref;
dev->ibdev.iwcm->get_qp = iwch_get_qp;
- ret = ib_register_device(&dev->ibdev);
+ ret = ib_register_device(&dev->ibdev, NULL);
if (ret)
goto bail1;
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 129a6be..d1a9278 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -798,7 +798,7 @@ static int __devinit ehca_probe(struct of_device *dev,
goto probe5;
}
- ret = ib_register_device(&shca->ib_device);
+ ret = ib_register_device(&shca->ib_device, NULL);
if (ret) {
ehca_err(&shca->ib_device,
"ib_register_device() failed ret=%i", ret);
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index 9289ab4..055e7fd 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -2181,7 +2181,7 @@ int ipath_register_ib_device(struct ipath_devdata *dd)
snprintf(dev->node_desc, sizeof(dev->node_desc),
IPATH_IDSTR " %s", init_utsname()->nodename);
- ret = ib_register_device(dev);
+ ret = ib_register_device(dev, NULL);
if (ret)
goto err_reg;
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index e596537..76dcd81 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -660,7 +660,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
spin_lock_init(&ibdev->sm_lock);
mutex_init(&ibdev->cap_mask_mutex);
- if (ib_register_device(&ibdev->ib_dev))
+ if (ib_register_device(&ibdev->ib_dev, NULL))
goto err_map;
if (mlx4_ib_mad_init(ibdev))
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index bcf7a40..e53a773 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1402,7 +1402,7 @@ int mthca_register_device(struct mthca_dev *dev)
mutex_init(&dev->cap_mask_mutex);
- ret = ib_register_device(&dev->ib_dev);
+ ret = ib_register_device(&dev->ib_dev, NULL);
if (ret)
return ret;
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 36348bf..a45c749 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3961,7 +3961,7 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev)
struct nes_adapter *nesadapter = nesdev->nesadapter;
int i, ret;
- ret = ib_register_device(&nesvnic->nesibdev->ibdev);
+ ret = ib_register_device(&nesvnic->nesibdev->ibdev, NULL);
if (ret) {
return ret;
}
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 6ecd85c..c36a0bd 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -1189,7 +1189,10 @@ struct ib_client {
struct ib_device *ib_alloc_device(size_t size);
void ib_dealloc_device(struct ib_device *device);
-int ib_register_device (struct ib_device *device);
+typedef int (*sysfs_cb)(struct ib_device *dev, u8 port_num,
+ struct kobject *kobj);
+
+int ib_register_device(struct ib_device *device, sysfs_cb cb);
void ib_unregister_device(struct ib_device *device);
int ib_register_client (struct ib_client *client);
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-05-07 0:03 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-06 23:58 [PATCH 0/52] IB/qib: add Ralph Campbell
[not found] ` <20100506235849.3441.85930.stgit-/vjeY7uYZjrPXfVEPVhPGq6RkeBMCJyt@public.gmane.org>
2010-05-06 23:58 ` [PATCH v3 01/52] IB/qib: Add Kconfig Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 02/52] IB/qib: Add Makefile Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 03/52] IB/qib: Add qib.h Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 04/52] IB/qib: Add qib_6120_regs.h Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 05/52] IB/qib: Add qib_7220.h Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 06/52] IB/qib: Add qib_7220_regs.h Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 08/52] IB/qib: Add qib_common.h Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 09/52] IB/qib: Add qib_cq.c Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 10/52] IB/qib: Add qib_diag.c Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 11/52] IB/qib: Add qib_dma.c Ralph Campbell
2010-05-06 23:59 ` [PATCH v3 12/52] IB/qib: Add qib_driver.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 13/52] IB/qib: Add qib_eeprom.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 14/52] IB/qib: Add qib_file_ops.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 15/52] IB/qib: Add qib_fs.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 19/52] IB/qib: Add qib_init.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 20/52] IB/qib: Add qib_intr.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 21/52] IB/qib: Add qib_keys.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 22/52] IB/qib: Add qib_mad.c Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 23/52] IB/qib: Add qib_mad.h Ralph Campbell
2010-05-07 0:00 ` [PATCH v3 24/52] IB/qib: Add qib_mmap.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 25/52] IB/qib: Add qib_mr.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 26/52] IB/qib: Add qib_pcie.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 27/52] IB/qib: Add qib_pio_copy.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 28/52] IB/qib: Add qib_qp.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 29/52] IB/qib: Add qib_qsfp.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 30/52] IB/qib: Add qib_qsfp.h Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 31/52] IB/qib: Add qib_rc.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 32/52] IB/qib: Add qib_ruc.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 33/52] IB/qib: Add qib_sd7220.c Ralph Campbell
[not found] ` <20100507000145.3441.59808.stgit-/vjeY7uYZjrPXfVEPVhPGq6RkeBMCJyt@public.gmane.org>
2010-05-10 22:50 ` Roland Dreier
2010-05-07 0:01 ` [PATCH v3 34/52] IB/qib: Add qib_sd7220_img.c Ralph Campbell
2010-05-07 0:01 ` [PATCH v3 35/52] IB/qib: Add qib_sdma.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 36/52] IB/qib: Add qib_srq.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 37/52] IB/qib: Add qib_sysfs.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 38/52] IB/qib: Add qib_twsi.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 39/52] IB/qib: Add qib_tx.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 40/52] IB/qib: Add qib_uc.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 41/52] IB/qib: Add qib_ud.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 42/52] IB/qib: Add qib_user_pages.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 43/52] IB/qib: Add qib_user_sdma.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 44/52] IB/qib: Add qib_user_sdma.h Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 45/52] IB/qib: Add qib_verbs.c Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 46/52] IB/qib: Add qib_verbs.h Ralph Campbell
2010-05-07 0:02 ` [PATCH v3 47/52] IB/qib: Add qib_verbs_mcast.c Ralph Campbell
2010-05-07 0:03 ` [PATCH v3 48/52] IB/qib: Add qib_wc_ppc64.c Ralph Campbell
2010-05-07 0:03 ` [PATCH v3 49/52] IB/qib: Add qib_wc_x86_64.c Ralph Campbell
2010-05-07 0:03 ` [PATCH v3 50/52] IB/qib: Hooks for adding the QIB driver into the framework Ralph Campbell
2010-05-07 0:03 ` Ralph Campbell [this message]
[not found] ` <20100507000026.3441.87902.stgit@chromite.mv.qlogic.com>
[not found] ` <20100507000026.3441.87902.stgit-/vjeY7uYZjrPXfVEPVhPGq6RkeBMCJyt@public.gmane.org>
2010-05-10 22:55 ` [PATCH v3 18/52] IB/qib: Add qib_iba7322.c Roland Dreier
[not found] ` <adad3x3xt6q.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org>
2010-05-11 15:49 ` [PATCH v3 18/52] IB/qib: Add qib_iba7322.c (serdes parameters) Dave Olson
[not found] ` <alpine.LFD.1.10.1005110837180.7212-vxnkQ4oxbxUi9g6yJnKVd0EOCMrvLtNR@public.gmane.org>
2010-05-11 21:55 ` Roland Dreier
[not found] ` <adad3x2w1c3.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org>
2010-05-12 17:22 ` Dave Olson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100507000325.3441.85248.stgit@chromite.mv.qlogic.com \
--to=ralph.campbell-h88zbnxc6kdqt0dzr+alfa@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox