Commit 6094c85a935f7eadb4c607c6dc6d86c0a9f09a4b
Exists in
master
and in
4 other branches
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/mlx4: Fix reading SL field out of cqe->sl_vid RDMA/addr: Fix build breakage when IPv6 is disabled
Showing 3 changed files Side-by-side Diff
drivers/infiniband/Kconfig
drivers/infiniband/core/addr.c
... | ... | @@ -128,6 +128,8 @@ |
128 | 128 | ret = rdma_copy_addr(dev_addr, dev, NULL); |
129 | 129 | dev_put(dev); |
130 | 130 | break; |
131 | + | |
132 | +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | |
131 | 133 | case AF_INET6: |
132 | 134 | for_each_netdev(&init_net, dev) { |
133 | 135 | if (ipv6_chk_addr(&init_net, |
... | ... | @@ -138,8 +140,7 @@ |
138 | 140 | } |
139 | 141 | } |
140 | 142 | break; |
141 | - default: | |
142 | - break; | |
143 | +#endif | |
143 | 144 | } |
144 | 145 | return ret; |
145 | 146 | } |
146 | 147 | |
... | ... | @@ -179,10 +180,11 @@ |
179 | 180 | { |
180 | 181 | struct rtable *rt; |
181 | 182 | struct flowi fl; |
182 | - struct dst_entry *dst; | |
183 | 183 | |
184 | 184 | memset(&fl, 0, sizeof fl); |
185 | - if (dst_in->sa_family == AF_INET) { | |
185 | + | |
186 | + switch (dst_in->sa_family) { | |
187 | + case AF_INET: | |
186 | 188 | fl.nl_u.ip4_u.daddr = |
187 | 189 | ((struct sockaddr_in *) dst_in)->sin_addr.s_addr; |
188 | 190 | |
189 | 191 | |
... | ... | @@ -191,8 +193,13 @@ |
191 | 193 | |
192 | 194 | neigh_event_send(rt->u.dst.neighbour, NULL); |
193 | 195 | ip_rt_put(rt); |
196 | + break; | |
194 | 197 | |
195 | - } else { | |
198 | +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | |
199 | + case AF_INET6: | |
200 | + { | |
201 | + struct dst_entry *dst; | |
202 | + | |
196 | 203 | fl.nl_u.ip6_u.daddr = |
197 | 204 | ((struct sockaddr_in6 *) dst_in)->sin6_addr; |
198 | 205 | |
199 | 206 | |
... | ... | @@ -202,7 +209,10 @@ |
202 | 209 | |
203 | 210 | neigh_event_send(dst->neighbour, NULL); |
204 | 211 | dst_release(dst); |
212 | + break; | |
205 | 213 | } |
214 | +#endif | |
215 | + } | |
206 | 216 | } |
207 | 217 | |
208 | 218 | static int addr4_resolve_remote(struct sockaddr_in *src_in, |
... | ... | @@ -254,6 +264,7 @@ |
254 | 264 | return ret; |
255 | 265 | } |
256 | 266 | |
267 | +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | |
257 | 268 | static int addr6_resolve_remote(struct sockaddr_in6 *src_in, |
258 | 269 | struct sockaddr_in6 *dst_in, |
259 | 270 | struct rdma_dev_addr *addr) |
... | ... | @@ -282,6 +293,14 @@ |
282 | 293 | dst_release(dst); |
283 | 294 | return ret; |
284 | 295 | } |
296 | +#else | |
297 | +static int addr6_resolve_remote(struct sockaddr_in6 *src_in, | |
298 | + struct sockaddr_in6 *dst_in, | |
299 | + struct rdma_dev_addr *addr) | |
300 | +{ | |
301 | + return -EADDRNOTAVAIL; | |
302 | +} | |
303 | +#endif | |
285 | 304 | |
286 | 305 | static int addr_resolve_remote(struct sockaddr *src_in, |
287 | 306 | struct sockaddr *dst_in, |
... | ... | @@ -340,7 +359,9 @@ |
340 | 359 | struct net_device *dev; |
341 | 360 | int ret; |
342 | 361 | |
343 | - if (dst_in->sa_family == AF_INET) { | |
362 | + switch (dst_in->sa_family) { | |
363 | + case AF_INET: | |
364 | + { | |
344 | 365 | __be32 src_ip = ((struct sockaddr_in *) src_in)->sin_addr.s_addr; |
345 | 366 | __be32 dst_ip = ((struct sockaddr_in *) dst_in)->sin_addr.s_addr; |
346 | 367 | |
... | ... | @@ -362,7 +383,12 @@ |
362 | 383 | memcpy(addr->dst_dev_addr, dev->dev_addr, MAX_ADDR_LEN); |
363 | 384 | } |
364 | 385 | dev_put(dev); |
365 | - } else { | |
386 | + break; | |
387 | + } | |
388 | + | |
389 | +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | |
390 | + case AF_INET6: | |
391 | + { | |
366 | 392 | struct in6_addr *a; |
367 | 393 | |
368 | 394 | for_each_netdev(&init_net, dev) |
... | ... | @@ -390,6 +416,13 @@ |
390 | 416 | if (!ret) |
391 | 417 | memcpy(addr->dst_dev_addr, dev->dev_addr, MAX_ADDR_LEN); |
392 | 418 | } |
419 | + break; | |
420 | + } | |
421 | +#endif | |
422 | + | |
423 | + default: | |
424 | + ret = -EADDRNOTAVAIL; | |
425 | + break; | |
393 | 426 | } |
394 | 427 | |
395 | 428 | return ret; |
drivers/infiniband/hw/mlx4/cq.c
... | ... | @@ -699,7 +699,7 @@ |
699 | 699 | } |
700 | 700 | |
701 | 701 | wc->slid = be16_to_cpu(cqe->rlid); |
702 | - wc->sl = be16_to_cpu(cqe->sl_vid >> 12); | |
702 | + wc->sl = be16_to_cpu(cqe->sl_vid) >> 12; | |
703 | 703 | g_mlpath_rqpn = be32_to_cpu(cqe->g_mlpath_rqpn); |
704 | 704 | wc->src_qp = g_mlpath_rqpn & 0xffffff; |
705 | 705 | wc->dlid_path_bits = (g_mlpath_rqpn >> 24) & 0x7f; |