2013-07-15 11:04:04

by Paul Bolle

[permalink] [raw]
Subject: [PATCH] RDMA/cma: silence GCC warning

Building cma.o triggers this GCC warning:
drivers/infiniband/core/cma.c: In function ‘rdma_resolve_addr’:
drivers/infiniband/core/cma.c:465:23: warning: ‘port’ may be used uninitialized in this function [-Wmaybe-uninitialized]
drivers/infiniband/core/cma.c:426:5: note: ‘port’ was declared here

This is a false positive, as "port" will always be initialized if we're
at "found".

Help GCC by initializing "port" to 0. Since valid port numbers
apparently start at 1, this is an invalid value. That could help in
analyzing the code and tracking down errors.

Signed-off-by: Paul Bolle <[email protected]>
---
0) Compile tested only.

1) Perhaps a better way to silence GCC is to drop "port" entirely, and
assign to "id_priv->id.port_num" directly. Would that be acceptable?

drivers/infiniband/core/cma.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index f1c279f..c6c0a5f 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -426,6 +426,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
u8 port, p;
int i;

+ port = 0; /* silence GCC */
cma_dev = NULL;
addr = (struct sockaddr_ib *) cma_dst_addr(id_priv);
dgid = (union ib_gid *) &addr->sib_addr;
--
1.8.1.4


2013-07-15 21:08:33

by Hefty, Sean

[permalink] [raw]
Subject: RE: [PATCH] RDMA/cma: silence GCC warning

> 1) Perhaps a better way to silence GCC is to drop "port" entirely, and
> assign to "id_priv->id.port_num" directly. Would that be acceptable?

Yes, this would work.

- Sean

????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2013-07-17 08:40:58

by Paul Bolle

[permalink] [raw]
Subject: [PATCH v2] RDMA/cma: silence GCC warning

Building cma.o triggers this GCC warning:
drivers/infiniband/core/cma.c: In function ‘rdma_resolve_addr’:
drivers/infiniband/core/cma.c:465:23: warning: ‘port’ may be used uninitialized in this function [-Wmaybe-uninitialized]
drivers/infiniband/core/cma.c:426:5: note: ‘port’ was declared here

This is a false positive, as "port" will always be initialized if we're
at "found". But if we assign to "id_priv->id.port_num" directly, we can
drop "port". That will, obviously, silence GCC.

Signed-off-by: Paul Bolle <[email protected]>
---
0) v2: assign to "id_priv->id.port_num" directly, instead of
initializing "port" to 0, as discussed with Sean.

1) Still only compile tested.

drivers/infiniband/core/cma.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index f1c279f..84487a2 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -423,7 +423,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
struct sockaddr_ib *addr;
union ib_gid gid, sgid, *dgid;
u16 pkey, index;
- u8 port, p;
+ u8 p;
int i;

cma_dev = NULL;
@@ -443,7 +443,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
if (!memcmp(&gid, dgid, sizeof(gid))) {
cma_dev = cur_dev;
sgid = gid;
- port = p;
+ id_priv->id.port_num = p;
goto found;
}

@@ -451,7 +451,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
dgid->global.subnet_prefix)) {
cma_dev = cur_dev;
sgid = gid;
- port = p;
+ id_priv->id.port_num = p;
}
}
}
@@ -462,7 +462,6 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)

found:
cma_attach_to_dev(id_priv, cma_dev);
- id_priv->id.port_num = port;
addr = (struct sockaddr_ib *) cma_src_addr(id_priv);
memcpy(&addr->sib_addr, &sgid, sizeof sgid);
cma_translate_ib(addr, &id_priv->id.route.addr.dev_addr);
--
1.8.1.4

2013-07-17 18:07:27

by Hefty, Sean

[permalink] [raw]
Subject: RE: [PATCH v2] RDMA/cma: silence GCC warning

> Building cma.o triggers this GCC warning:
> drivers/infiniband/core/cma.c: In function ‘rdma_resolve_addr’:
> drivers/infiniband/core/cma.c:465:23: warning: ‘port’ may be used
> uninitialized in this function [-Wmaybe-uninitialized]
> drivers/infiniband/core/cma.c:426:5: note: ‘port’ was declared here
>
> This is a false positive, as "port" will always be initialized if we're
> at "found". But if we assign to "id_priv->id.port_num" directly, we can
> drop "port". That will, obviously, silence GCC.
>
> Signed-off-by: Paul Bolle <[email protected]>

Acked-by: Sean Hefty <[email protected]>

> ---
> 0) v2: assign to "id_priv->id.port_num" directly, instead of
> initializing "port" to 0, as discussed with Sean.
>
> 1) Still only compile tested.

tested - thanks
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?