]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/rtrs: Register ib event handler
authorGrzegorz Prajsner <grzegorz.prajsner@ionos.com>
Wed, 21 Aug 2024 11:22:15 +0000 (13:22 +0200)
committerLeon Romanovsky <leon@kernel.org>
Wed, 28 Aug 2024 12:24:35 +0000 (15:24 +0300)
Use ib_register_event_handler() to register event handlers for both
client and server side. For now, all those handlers do, is to print
type of incoming event.

Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
Link: https://patch.msgid.link/20240821112217.41827-10-haris.iqbal@ionos.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/ulp/rtrs/rtrs-clt.c
drivers/infiniband/ulp/rtrs/rtrs-clt.h
drivers/infiniband/ulp/rtrs/rtrs-pri.h
drivers/infiniband/ulp/rtrs/rtrs-srv.c
drivers/infiniband/ulp/rtrs/rtrs-srv.h

index 7c6d40380638b693985afd75c3151f2a15f5985a..230e5f6c8c9096d355b4d00c71b23922f4763edf 100644 (file)
@@ -3149,8 +3149,20 @@ close_path:
        return err;
 }
 
+void rtrs_clt_ib_event_handler(struct ib_event_handler *handler,
+                              struct ib_event *ibevent)
+{
+       pr_info("Handling event: %s (%d).\n", ib_event_msg(ibevent->event),
+               ibevent->event);
+}
+
+
 static int rtrs_clt_ib_dev_init(struct rtrs_ib_dev *dev)
 {
+       INIT_IB_EVENT_HANDLER(&dev->event_handler, dev->ib_dev,
+                             rtrs_clt_ib_event_handler);
+       ib_register_event_handler(&dev->event_handler);
+
        if (!(dev->ib_dev->attrs.device_cap_flags &
              IB_DEVICE_MEM_MGT_EXTENSIONS)) {
                pr_err("Memory registrations not supported.\n");
@@ -3160,8 +3172,15 @@ static int rtrs_clt_ib_dev_init(struct rtrs_ib_dev *dev)
        return 0;
 }
 
+static void rtrs_clt_ib_dev_deinit(struct rtrs_ib_dev *dev)
+{
+       ib_unregister_event_handler(&dev->event_handler);
+}
+
+
 static const struct rtrs_rdma_dev_pd_ops dev_pd_ops = {
-       .init = rtrs_clt_ib_dev_init
+       .init = rtrs_clt_ib_dev_init,
+       .deinit = rtrs_clt_ib_dev_deinit
 };
 
 static int __init rtrs_client_init(void)
index 45dac15825f4c853ab64865fbcd3f3448cf9c1e9..0f57759b3080f49280e841dd9b5f104802f24c38 100644 (file)
@@ -212,6 +212,8 @@ int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_path *path,
 void rtrs_clt_set_max_reconnect_attempts(struct rtrs_clt_sess *clt, int value);
 int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt_sess *clt);
 void free_path(struct rtrs_clt_path *clt_path);
+void rtrs_clt_ib_event_handler(struct ib_event_handler *handler,
+                              struct ib_event *ibevent);
 
 /* rtrs-clt-stats.c */
 
index ab25619261d28b98d90488822fae4971bf0a1a55..ef29bd483b5ad25641676f5ef7e5f9099f04ac98 100644 (file)
@@ -69,6 +69,7 @@ struct rtrs_ib_dev;
 
 struct rtrs_rdma_dev_pd_ops {
        int (*init)(struct rtrs_ib_dev *dev);
+       void (*deinit)(struct rtrs_ib_dev *dev);
 };
 
 struct rtrs_rdma_dev_pd {
@@ -84,6 +85,7 @@ struct rtrs_ib_dev {
        struct kref              ref;
        struct list_head         entry;
        struct rtrs_rdma_dev_pd *pool;
+       struct ib_event_handler  event_handler;
 };
 
 struct rtrs_con {
index 05d15ff074bbad0ca6cd8bd75b2cb9e1e80c608e..e83d956478521d51b04eba1729cf471b6d9796ee 100644 (file)
@@ -26,7 +26,10 @@ MODULE_LICENSE("GPL");
 #define DEFAULT_SESS_QUEUE_DEPTH 512
 #define MAX_HDR_SIZE PAGE_SIZE
 
-static struct rtrs_rdma_dev_pd dev_pd;
+static const struct rtrs_rdma_dev_pd_ops dev_pd_ops;
+static struct rtrs_rdma_dev_pd dev_pd = {
+       .ops = &dev_pd_ops
+};
 const struct class rtrs_dev_class = {
        .name = "rtrs-server",
 };
@@ -2269,6 +2272,34 @@ static int check_module_params(void)
        return 0;
 }
 
+void rtrs_srv_ib_event_handler(struct ib_event_handler *handler,
+                              struct ib_event *ibevent)
+{
+       pr_info("Handling event: %s (%d).\n", ib_event_msg(ibevent->event),
+               ibevent->event);
+}
+
+static int rtrs_srv_ib_dev_init(struct rtrs_ib_dev *dev)
+{
+       INIT_IB_EVENT_HANDLER(&dev->event_handler, dev->ib_dev,
+                             rtrs_srv_ib_event_handler);
+       ib_register_event_handler(&dev->event_handler);
+
+       return 0;
+}
+
+static void rtrs_srv_ib_dev_deinit(struct rtrs_ib_dev *dev)
+{
+       ib_unregister_event_handler(&dev->event_handler);
+}
+
+
+static const struct rtrs_rdma_dev_pd_ops dev_pd_ops = {
+       .init = rtrs_srv_ib_dev_init,
+       .deinit = rtrs_srv_ib_dev_deinit
+};
+
+
 static int __init rtrs_server_init(void)
 {
        int err;
index 5e325b82ff336422fbe75b0e4c8c3c91c79a17ab..014f85681f37d4cae9519489ecf04fd89066820a 100644 (file)
@@ -132,6 +132,8 @@ struct rtrs_srv_ib_ctx {
 extern const struct class rtrs_dev_class;
 
 void close_path(struct rtrs_srv_path *srv_path);
+void rtrs_srv_ib_event_handler(struct ib_event_handler *handler,
+                              struct ib_event *ibevent);
 
 static inline void rtrs_srv_update_rdma_stats(struct rtrs_srv_stats *s,
                                              size_t size, int d)