From 566e6d231a856bb1b22c1f12f50fdee86e4454f6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roni=20H=C3=A4cki?= Date: Mon, 7 Oct 2019 15:22:24 +0200 Subject: [PATCH] net_socket_server: fixing part so that mlx4 works again MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The connectX-3 driver is still handle special since it is the only one that starts the driver when creating a cleanq of it Signed-off-by: Roni Häcki --- usr/net_socket_server/Hakefile | 12 ++++++++++++ usr/net_socket_server/lib_netss.c | 28 ++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/usr/net_socket_server/Hakefile b/usr/net_socket_server/Hakefile index c4565a6..3810b0b 100644 --- a/usr/net_socket_server/Hakefile +++ b/usr/net_socket_server/Hakefile @@ -37,6 +37,18 @@ "trace", "skb", "driverkit_iommu", "lwip2", "net"], addModules = ["net_sockets_server_module"], architectures = ["x86_64"] + }, + + -- Currently the connectX-3 driver is started in a special way + build application { + target = "mlx4", + cFiles = [ "main.c"], + addLinkFlags = ["-T" ++ Config.source_dir ++ "/lib/driverkit/bfdrivers.ld" ], + + addLibraries = libDeps["driverkit", "octopus", "debug_log", + "trace", "skb", "driverkit_iommu", "lwip2", "net"], + addModules = ["net_sockets_server_module"], + architectures = ["x86_64"] } ] diff --git a/usr/net_socket_server/lib_netss.c b/usr/net_socket_server/lib_netss.c index ecab017..622c243 100644 --- a/usr/net_socket_server/lib_netss.c +++ b/usr/net_socket_server/lib_netss.c @@ -913,10 +913,10 @@ static errval_t init(struct bfdriver_instance *bfi, uint64_t flags, iref_t *dev) return -1; } - debug_printf("Net socket server started for %s.\n", bfi->argv[2]); + debug_printf("Net socket server started for %s.\n", bfi->argv[bfi->argc - 2]); char card_name[64]; - snprintf(card_name, sizeof(card_name), "%s:%s", bfi->argv[2], bfi->argv[bfi->argc - 1]); + snprintf(card_name, sizeof(card_name), "%s:%s", bfi->argv[bfi->argc - 2], bfi->argv[bfi->argc - 1]); char *ip = NULL; char *netmask = NULL; @@ -966,6 +966,26 @@ static errval_t init(struct bfdriver_instance *bfi, uint64_t flags, iref_t *dev) assert(err_is_ok(err)); } + + if (strncmp(card_name, "mlx4", 4) == 0) { + // MLX4 driver needs to creat argcn + copy the interrupt cap + // since we still use the old PCI code + struct capref dst_cap; + + // TODO check if cnode already exists etc. + struct capref argcn; + struct cnoderef argcn_ref; + err = cnode_create_l2(&argcn, &argcn_ref); + assert(err_is_ok(err)); + err = cap_copy(cap_argcn, argcn); + assert(err_is_ok(err)); + + dst_cap.slot = 1; // TODO should not be hard coded + dst_cap.cnode = build_cnoderef(cap_argcn, CNODE_TYPE_OTHER); + + err = cap_copy(dst_cap, bfi->caps[0]); + assert(err_is_ok(err)); + } /* connect to the network */ #ifdef POLLING debug_printf("Net socket server polling \n"); @@ -994,8 +1014,8 @@ static errval_t init(struct bfdriver_instance *bfi, uint64_t flags, iref_t *dev) char queue_name[128]; struct netss_state* st = (struct netss_state*) malloc(sizeof(struct netss_state)); - sprintf(queue_name, "net_sockets_queue_%s", bfi->argv[2]); - sprintf(st->service_name, "net_sockets_service_%s", bfi->argv[2]); + sprintf(queue_name, "net_sockets_queue_%s", bfi->argv[bfi->argc - 2]); + sprintf(st->service_name, "net_sockets_service_%s", bfi->argv[bfi->argc - 2]); err = descq_create(&exp_queue, DESCQ_DEFAULT_SIZE, queue_name, true, NULL, &f); -- 1.7.2.5