Browse Source

IB/core: Expose ioctl interface through experimental Kconfig

Add CONFIG_INFINIBAND_EXP_USER_ACCESS that enables the ioctl
interface. This interface is experimental and is subject to change.

Signed-off-by: Matan Barak <matanb@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Matan Barak 8 years ago
parent
commit
8eb19e8e7c

+ 9 - 0
drivers/infiniband/Kconfig

@@ -34,6 +34,15 @@ config INFINIBAND_USER_ACCESS
 	  libibverbs, libibcm and a hardware driver library from
 	  libibverbs, libibcm and a hardware driver library from
 	  <http://www.openfabrics.org/git/>.
 	  <http://www.openfabrics.org/git/>.
 
 
+config INFINIBAND_EXP_USER_ACCESS
+	bool "Allow experimental support for Infiniband ABI"
+	depends on INFINIBAND_USER_ACCESS
+	---help---
+	  IOCTL based ABI support for Infiniband. This allows userspace
+	  to invoke the experimental IOCTL based ABI.
+	  These commands are parsed via per-device parsing tree and
+	  enables per-device features.
+
 config INFINIBAND_USER_MEM
 config INFINIBAND_USER_MEM
 	bool
 	bool
 	depends on INFINIBAND_USER_ACCESS != n
 	depends on INFINIBAND_USER_ACCESS != n

+ 2 - 0
drivers/infiniband/core/uverbs.h

@@ -219,6 +219,8 @@ int uverbs_dealloc_mw(struct ib_mw *mw);
 void ib_uverbs_detach_umcast(struct ib_qp *qp,
 void ib_uverbs_detach_umcast(struct ib_qp *qp,
 			     struct ib_uqp_object *uobj);
 			     struct ib_uqp_object *uobj);
 
 
+long ib_uverbs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
+
 struct ib_uverbs_flow_spec {
 struct ib_uverbs_flow_spec {
 	union {
 	union {
 		union {
 		union {

+ 6 - 0
drivers/infiniband/core/uverbs_main.c

@@ -939,6 +939,9 @@ static const struct file_operations uverbs_fops = {
 	.open	 = ib_uverbs_open,
 	.open	 = ib_uverbs_open,
 	.release = ib_uverbs_close,
 	.release = ib_uverbs_close,
 	.llseek	 = no_llseek,
 	.llseek	 = no_llseek,
+#if IS_ENABLED(CONFIG_INFINIBAND_EXP_USER_ACCESS)
+	.unlocked_ioctl = ib_uverbs_ioctl,
+#endif
 };
 };
 
 
 static const struct file_operations uverbs_mmap_fops = {
 static const struct file_operations uverbs_mmap_fops = {
@@ -948,6 +951,9 @@ static const struct file_operations uverbs_mmap_fops = {
 	.open	 = ib_uverbs_open,
 	.open	 = ib_uverbs_open,
 	.release = ib_uverbs_close,
 	.release = ib_uverbs_close,
 	.llseek	 = no_llseek,
 	.llseek	 = no_llseek,
+#if IS_ENABLED(CONFIG_INFINIBAND_EXP_USER_ACCESS)
+	.unlocked_ioctl = ib_uverbs_ioctl,
+#endif
 };
 };
 
 
 static struct ib_client uverbs_client = {
 static struct ib_client uverbs_client = {