Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Jun 2013 09:57:35 GMT
From:      Shahar Klein <shahark@mellanox.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/179999: Bug assigning HCA from IB to ETH
Message-ID:  <201306260957.r5Q9vZ5e021687@oldred.freebsd.org>
Resent-Message-ID: <201306261000.r5QA02PE082438@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         179999
>Category:       kern
>Synopsis:       Bug assigning HCA from IB to ETH
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jun 26 10:00:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Shahar Klein
>Release:        9.1
>Organization:
Mellanox
>Environment:
FreeBSD alf10 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec  4 09:23:10 UTC 2012     root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
The Mellanox HCA ConnectX3 can work in IB mode or ETH mode. It comes defauled to IB and assigning to ETH is done via sysctl:
sys.device.mlx4_core0.mlx4_port1 = desired_mode
 This operation, when trying to assign eth mode, currently fails with:
sysctl: sys.device.mlx4_core0.mlx4_port1: Invalid argument
>How-To-Repeat:
sys.device.mlx4_core0.mlx4_port1 = eth
>Fix:
diff -ur sysA/ofed/drivers/net/mlx4/main.c sysB/ofed/drivers/net/mlx4/main.c
--- sysA/ofed/drivers/net/mlx4/main.c   2013-06-26 12:50:46.000000000 +0300
+++ sysB/ofed/drivers/net/mlx4/main.c   2013-06-26 12:51:15.000000000 +0300
@@ -479,11 +479,11 @@
        int i;
        int err = 0;

-       if (!strcmp(buf, "ib\n"))
+       if (!strcmp(buf, "ib"))
                info->tmp_type = MLX4_PORT_TYPE_IB;
-       else if (!strcmp(buf, "eth\n"))
+       else if (!strcmp(buf, "eth"))
                info->tmp_type = MLX4_PORT_TYPE_ETH;
-       else if (!strcmp(buf, "auto\n"))
+       else if (!strcmp(buf, "auto"))
                info->tmp_type = MLX4_PORT_TYPE_AUTO;
        else {
                mlx4_err(mdev, "%s is not supported port type\n", buf);
diff -ur sysA/ofed/include/linux/sysfs.h sysB/ofed/include/linux/sysfs.h
--- sysA/ofed/include/linux/sysfs.h     2013-06-26 12:50:47.000000000 +0300
+++ sysB/ofed/include/linux/sysfs.h     2013-06-26 12:52:24.000000000 +0300
@@ -104,7 +104,9 @@
        error = SYSCTL_OUT(req, buf, len);
        if (error || !req->newptr || ops->store == NULL)
                goto out;
-       error = SYSCTL_IN(req, buf, PAGE_SIZE);
+        len = req->newlen - req->newidx;
+        error = SYSCTL_IN(req, buf, len);
+        ((char *)buf)[len] = '\0';
        if (error)
                goto out;
        len = ops->store(kobj, attr, buf, req->newlen);


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306260957.r5Q9vZ5e021687>